【问题标题】:Can I get all the fields in an item (in Sitecore)?我可以获取项目中的所有字段(在 Sitecore 中)吗?
【发布时间】:2009-10-22 08:43:41
【问题描述】:

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

说我被卡住了是客气了。

我猜我必须在字段表上做一些自我连接,但我让自己陷入困境。

有人有什么想法吗?

【问题讨论】:

    标签: sql database sitecore sitecore5.2


    【解决方案1】:

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

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

    【讨论】:

    • 我想做延迟加载。你能告诉我如何解决这个问题吗??
    【解决方案2】:

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

    【讨论】:

    • 当我这样做时,所有返回的字段名称都是系统字段。我希望有一种方法可以获取用户定义的模板字段名称。
    【解决方案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
    

    【讨论】:

    • 这似乎工作正常,但我仍然找不到我正在寻找的确切值。从项目中选择值 I WITH (NOLOCK) 内部联接项目 T 在 I.TemplateID = T.ID 内部联接字段 F 在 F.ItemId = I.ID 内部联接项目 FN 在 F.FieldId = FN.ID where I.templateID = '{xxxxxxx}' 和 FN.Name = '描述'
    【解决方案4】:

    通过调用 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);
        }
    }
    

    【讨论】:

    • 我自己一直在研究这个问题,并且正在使用基本相同的解决方案,但我已经通过使用 Linq 将“”的检查推送到 foreach 中,例如 foreach(字段字段在fieldCollection.Where(x => !x.Name.StartsWith(""))) 你怎么看?更好、更差、更快的执行?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-09
    • 2018-03-22
    • 2010-10-20
    • 1970-01-01
    相关资源
    最近更新 更多