これは、Sitecore では少し奇妙です... 基本的に、コンテンツ API からアイテムにアクセスしていますが、フィールドのテキストに基づいたキーを Item.Fields ハッシュテーブルに入力していません (これを呼び出すと思います)。フィールド名) ではなく、GUID を使用します。
たとえば、アイテムを取得するために使用しているコードは次のとおりです。
var database = global::Sitecore.Configuration.Factory.GetDatabase("master");
var item = database.GetItem("/sitecore/content/Home");
item.Fields.ReadAll(); // edit, per recommendation... does not work
Sitecore.Data.Fields.Field f = item.Fields["SomeText"];
Assert.IsNotNull(f): // This fails
ブレークポイントを設定してデバッグすると、Item.Fields ハッシュテーブル内に値 (実際には正しい値) があることがわかりますが、キーはすべて「フィールド名」ではなく GUID に基づいています。この API の提案。
編集: 詳しく調べると、DisplayName フィールドと Name フィールドが API から空の文字列として返されます (これらは Sitecore で明確に定義されているため、まだ問題が何であるかはわかりません)。これらは、ハッシュテーブルのある種のキーとして GUID と組み合わせて使用される可能性があるようです。
質問: ここで間違っていることはありますか? データ テンプレートとコンテンツ アイテムを公開しました。データ値を参照するために使用することを期待しているキーではなく、API から結果が返され、さらには正しい値が返されるため、接続が確立されていることは明らかです。
参考文献:
- http://sdn.sitecore.net/upload/sitecore6/content_api_cookbook-a4.pdf - 「タイトル」フィールドにアクセスする 28 ページの上部にある例を確認してください。また、4.1.1「システムフィールドにアクセスする方法」のすぐ下の例を確認してください。ここでは、プライベート静的コンストラクターでインスタンス化された GUID で静的ヘルパーを使用しています。これは、「ユーザー定義」フィールドにアクセスするための推奨される方法ですか?
Sitecore からのサンプル データのスクリーンショット (GUID がキーであることがわかります):
上記のリンクされたドキュメントのコード サンプル:
「タイトル」フィールドへのアクセス:
Sitecore.Data.Database master = Sitecore.Configuration.Factory.GetDatabase("master");
Sitecore.Data.Items.Item home = master.GetItem("/sitecore/content/home");
Sitecore.Data.Fields.Field titleField = home.Fields["title"];
if(titleField!=null)
{
home.Editing.BeginEdit();
titleField.Value = "//TODO: replace with appropriate value";
home.Editing.EndEdit();
}
システム フィールド「ArchiveDate」へのアクセス:
Sitecore.Data.Database master = Sitecore.Configuration.Factory.GetDatabase("master");
Sitecore.Data.Items.Item sample = master.GetItem("/sitecore/content/home/sample");
Sitecore.Data.Fields.DateField archiveField =
sample.Fields[Sitecore.FieldIDs.ArchiveDate];
Sitecore.Kernel.dll を逆コンパイルすると、次のことがわかります。
public static class FieldIDs
{
// stripped down version
/// <summary>The ID of the 'Archive date' field.</summary>
public static ID ArchiveDate;
static FieldIDs()
{
FieldIDs.ArchiveDate = new ID("{56C15C6D-FD5A-40CA-BB37-64CEEC6A9BD5}");
}
}