1718171044
2024-06-07 11:42:29
Episerver CMS 11 から Optimizely CMS 12 にアップグレードする際には、注意すべき面白い詳細が多数あります。少し混乱するかもしれない詳細の 1 つは、リスト項目に UI 内のすべての必須フィールドが含まれるようになる場合です。これを修正する方法は次のとおりです。
CMS 11.* (またはそれ以前) のサイトを CMS 12 および .NET 6/7/8 にアップグレードする場合、注意すべき落とし穴や興味深い点が数多くあります。
最近、大規模な 1:1 アップグレード プロジェクトを完了したので、最も一般的な問題のいくつかをブログに書きたいと思います。最初はこの問題から始めます。最初は私にとって非常に奇妙に思えたからです。
プロパティ タイプをカスタマイズすることは非常に一般的です。最も一般的な方法の 1 つは、従来の「複雑なプロパティ リスト」ハックを使用することです。 私はそれについてブログに書きました 以前も、そして他の多くのものもそうでした – そして公式には「サポートされていない」にもかかわらず、Optimizely のドキュメントに独自の場所が設けられていました。
典型的な実装は次のようになります。
public class CustomListItem
{
[Display(Name = "Title")]
public string Title { get; set; }
public string Description { get; set; }
}
[PropertyDefinitionTypePlugIn(GUID = "970FFB85-0DC7-4F25-B41F-18C4B9688567")]//Important: Remember GUID before upgrade
public class CustomListItemPropertyDefinition : PropertyList { }
public class MyCollectionEditorDescriptor : CollectionEditorDescriptor
{
}
次のように使用します:
[EditorDescriptor(EditorDescriptorType = typeof(CollectionEditorDescriptor))]
public virtual IList ListItems { get; set; }
その結果、次のような編集エクスペリエンスが実現します。
舞台裏では、基本的に poco オブジェクトを json にシリアル化し、コンテンツの文字列プロパティに保存します。
これはあまり理想的ではありません。特に、CMS 12 では、基本的に特定のタイプのインライン ブロックのリストを保持できる、より優れたアプローチがあり、それがバックグラウンドで「適切に」保存されるためです。ただし、アップグレード時に、既存のコンテンツがすべてあるため、1 つのアプローチを別のアプローチに変換するのは簡単ではありません。
したがって、通常はソリューションをアップグレードする必要があることに気付きます。
初めにすること 覚えておきたいのは、古い CMS 11 ソリューションが PropertyTypeDefinition GUID の設定を覚えていたかどうかを確認することです。そうあるべきです。覚えていなければ、アップグレードを機会に少しクリーンアップして名前空間などを変更すると、PropertyTypes が一致しなくなり、コンテンツが失われます。
もう一つは これは、白髪が早くも増える原因となる面白い小さな詳細です。テスターや編集者から、リスト項目に以前は必須ではなかった多くの必須フィールドが突然追加された理由を不思議に思う、混乱したエラー レポートが届く可能性があります。次のようになります。

「なぜ?」と疑問に思い、検証ルールを追加していないか再確認します。 [Required] POCO オブジェクト内の任意のプロパティにタグを付けます。少なくとも、それが私の反応でした。
いろいろ試した後、POCO アイテムのプロパティを null 可能にしたらどうかと考えました。すると、なんと、それで問題は解決しました。そして、それはある程度理にかなったことでした。
しかし、その後 パレット さらに詳しく調べてみたところ、本当に意味があるのかと思いました。プロジェクトで Nullable モードが有効になっている場合にこれが発生することが判明しました。
net8.0
enable
enable
このモードを有効にすると、.NET では、Nullable として宣言されていない限り、文字列などの参照型が null になることがサポートされなくなります。そして、不思議なことに、これは編集モード UI でも処理されます。Optimizely がプロパティを null として設定できない場合は、明らかに必須にする必要があります。
#リスト項目フィールドが必須になりました