代码之家  ›  专栏  ›  技术社区  ›  Ian G

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

  •  5
  • Ian G  · 技术社区  · 15 年前

    我正试图编写一个SQL查询来获取SiteCore中给定项中的所有字段。

    说我被困住是委婉地说。

    我想我得在菲尔兹的桌子上做些自我加入的工作,但我现在正忙得不可开交。

    有人有什么想法吗?

    4 回复  |  直到 8 年前
        1
  •  10
  •   Hishaam Namooya    8 年前

    在所有情况下,您都不应该尝试自己查询SiteCore数据库。数据库会随着时间的推移而变化,这会破坏您的代码。相反,使用 Item.Fields . 这是一个包含所有必需字段的集合。如果要确保所有字段都已加载(真正加载,而不是延迟加载),则可以使用item.fields.readall()。

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

        2
  •  6
  •   pbering    15 年前

    试着打电话 Sitecore.Context.Item.Fields.ReadAll() 在找一块地之前。

        3
  •  3
  •   Michael Edwards    15 年前

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

    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
    
        4
  •  1
  •   Bartłomiej Mucha    11 年前

    通过调用item.fields,可以获取模板中指定的item字段以及所有项上存在的sitecore标准字段。如果只需要模板中定义的字段,请使用下面的代码。当然,这假设您的字段名不以“uuu”开头。

    // 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);
        }
    }