我可以获取项目中的所有字段(在Sitecore中)吗?

时间:2009-10-22 08:43:41

标签: sql database sitecore sitecore5.2

我正在尝试编写一个sql查询来获取Sitecore中给定项目中的所有字段。

说我被卡住是温和的。

我猜我必须在田野桌上做一些自我加入,但我已经陷入困境。

有人有什么想法吗?

4 个答案:

答案 0 :(得分:10)

在任何情况下,您都应该尝试自己查询Sitecore数据库。数据库随时间而变化,这会破坏您的代码。而是使用Item.Fields。这是一个包含所有必填字段的集合。如果你想确保加载所有字段(真正加载,而不是延迟加载),那么你可以使用Item.Fields.ReadAll()。

编辑:另外,请记住,查询不允许您构建项目,因此您会错过默认值的行为,并且根本不使用智能的Sitecore缓存。

答案 1 :(得分:6)

在查找字段之前尝试拨打Sitecore.Context.Item.Fields.ReadAll()

答案 2 :(得分:3)

首次尝试,但不返回所有字段

SELECT I2.Name FROM
 Items AS I 
 JOIN UnversionedFields AS UF ON I.ID = UF.ItemId
 JOIN VersionedFields AS V ON I.ID = V.ItemId
 JOIN SharedFields AS S ON I.ID = S.ItemId 
 JOIN Items AS I2 ON I2.ID = UF.FieldId OR I2.ID=V.FieldId OR I2.ID = S.FieldId    
 WHERE I.ID = '110D559F-DEA5-42EA-9C1C-8A5DF7E70EF9'
 GROUP BY I2.Name

答案 3 :(得分:1)

通过调用item.Fields,您可以获得模板中指定的项目字段以及所有项目上存在的Sitecore标准字段。如果您只想要在模板中定义的字段,请使用下面的代码。当然,这假设您的字段名称不以“__”

开头
// Get Fields directly from the Item
List<string> fieldNames = new List<string>();
item.Fields.ReadAll();
FieldCollection fieldCollection = item.Fields;
foreach (Field field in fieldCollection)
{
    //Use the following check if you do not want 
    //the Sitecore Standard Fields 
    if (!field.Name.StartsWith("__"))
    {
        fieldNames.Add(field.Name);
    }
}