アドレス帳の作成に関する以前の質問 (Peter に感謝します!) に続いて、私はそれを実行する小さな使い捨てコンソール アプリケーションを持っていますが、さらに、アイテムを使用してキーワードのメタデータを更新しようとしています。作成したアドレス帳のID。
少し短縮されたスニペット...
StaticAddressBook ab = new StaticAddressBook();
ab.Title = title;
ab.Key = key;
ab.Save();
// id is a correct Keyword TCM ID
Keyword k = tdse.GetObject(id, EnumOpenMode.OpenModeEdit);
if (k != null)
{
k.MetadataFields["addressbookid"].value[0] = ab.Id.ItemId;
k.Save(true);
}
Save() で次のエラーが発生し続けます。
XML 検証エラー。理由: 名前空間 'uuid:2065d525-a365-4b45-b68e-bf45f0fba188' の要素 'Metadata' には、名前空間 'uuid:2065d525-a365-4b45-b68e-bf45f0fba188' に無効な子要素 'addressbookid' があります。予想される可能な要素のリスト: 名前空間「uuid:2065d525-a365-4b45-b68e-bf45f0fba188」の「contact_us_email」
しかし、キーワードに正しいメタデータが割り当てられていることはわかっています (そのため、わざわざチェックする必要はありません!)。問題の現在のキーワードから短縮された Tridion XML:
<tcm:Keyword>
<tcm:Data>
<tcm:MetadataSchemaxlink:type="simple"xlink:title="IP.Location.Metadata" xlink:href="tcm:49-2142-8" />
<tcm:Metadata>
<Metadata xmlns="uuid:2065d525-a365-4b45-b68e-bf45f0fba188">
<email>...</email>
<addressbookid>3</addressbookid>
<contact_us_email>...</contact_us_email>
<request_a_sample_email>...</request_a_sample_email>
<webinar_feedback_email>....</webinar_feedback_email>
</Metadata>
</tcm:Metadata>
<tcm:IsRoot>true</tcm:IsRoot>
</tcm:Data>
</tcm:Keyword>
この方法でキーワードのメタデータを更新できないことがありますか?
キーワードを更新するために Core Service を参照することもできると思いますが、このアプリケーション内ですべてを行うのは理にかなっているように思えました。
アップデート
奇妙なことに、ここでは順序が重要でした。次のコードが機能します。
ItemFields fields = k.MetadataFields;
System.Diagnostics.Debug.WriteLine(fields.Count);
string email = fields[1].value[1];
string contact = fields[3].value[1];
string request = fields[4].value[1];
string webinar = fields[5].value[1];
fields[1].value[1] = email;
fields[2].value[1] = ab.Id.ItemId;
fields[3].value[1] = contact;
fields[4].value[1] = request;
fields[5].value[1] = webinar;
k.Save(true);
値を取得/設定するときに非 0 ベースのインデックスに引っ掛かり、既存のフィールドを順番に再割り当てする必要がありました。
乾杯