2

アドレス帳の作成に関する以前の質問 (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 ベースのインデックスに引っ掛かり、既存のフィールドを順番に再割り当てする必要がありました。

乾杯

4

1 に答える 1

2

そのコンポーネントが作成されてから、スキーマ内のフィールドの順序が変更されたようです。少なくともスキーマはcontact_us_email、現在持っている位置に期待していますaddressbookid

他にも変更がある可能性があるため、ツールを実行する前に、スキーマ内のフィールドの順序を確認し、コンポーネントが一致していることを確認します。

于 2012-06-13T08:18:53.277 に答える