コンポーネントを保存するためのイベント ハンドラーに取り組んでいます。
私の目的は、ユーザーがスキーマに基づいてコンポーネントを作成するときに、いくつかの検証を実行することです。
「Employee」という名前のスキーマがあります。
Employee には「Experience」という名前の埋め込みスキーマがあり、複数値です。
経験には3つのフィールドがあります。
- Role : Manager、Lead の値をドロップダウンします。
- 会社名:テキスト欄
- 年: テキストフィールド
ユーザーがこれらのフィールドにデータを入力すると、保存する前にいくつかの検証を行いたいと思います。
高レベルの設計は次のようになります。
- コンポーネントのインスタンスをロードします
- 埋め込みフィールド「エクスペリエンス」に移動します
すべての「体験」のために。「ロール」の値を取得し、他の 2 つのフィールドに適切な値が入力されていることを確認する必要があります (コンポーネントの保存イベントを書き込むことによって)
For( all the repeated "Experience")
{
If (Role=="Manager")
check the values in the other two fields and do some validation
If (Role=="Lead")
check the values in the other two fields and do some validation
}
埋め込みフィールドでサブフィールドの値と名前を抽出することに行き詰まっています。
私が試してみました:
Tridion.ContentManager.Session mySession = sourcecomp.Session;
Schema schema= sourcecomp.Schema;
if(schema.Title.Equals("Employee"))
{
var compFields = new ItemFields(sourcecomp.Content, sourcecomp.Schema);
var embeddefield = (EmbeddedSchemaField)compFields["Experience"];
var embeddedfields = (IList<EmbeddedSchemaField>)embeddefield.Values;
foreach(var a in embeddedfields)
{
if(a.Name.Equals("Role"))
{
string value=a.Value.ToString();
}
}
}
実際、他のフィールドの値を同時に取得する方法に行き詰まっています。
それがどのように行われるかを説明できる人はいますか?