这对于 Sitecore 来说有点奇怪......基本上我正在从 Content 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}");
}
}