我想写一个sql查询来获取Sitecore中给定项目中的所有字段。我可以获取项目中的所有字段吗?(在Sitecore中)?
说我被卡住了,说得温和。
我猜我必须做一些自我加入字段表,但我得到自己在结。
任何人有任何想法?
我想写一个sql查询来获取Sitecore中给定项目中的所有字段。我可以获取项目中的所有字段吗?(在Sitecore中)?
说我被卡住了,说得温和。
我猜我必须做一些自我加入字段表,但我得到自己在结。
任何人有任何想法?
在没有的你曾经尝试自己查询Sitecore的数据库的情况。数据库随着时间而改变,这会破坏你的代码。相反,请使用Item.Fields
。这是一个包含所有必要字段的集合。如果你想确保所有的字段都被加载(真正的加载,而不是延迟加载),你可以使用Item.Fields.ReadAll()。
编辑:另外,请记住,查询不允许您构建项目,因此您错过了默认值的行为,并且根本不使用智能Sitecore缓存。
尝试在查找字段之前调用Sitecore.Context.Item.Fields.ReadAll()
。
当我这样做时,所有返回的字段名称都是系统字段。我希望有一种方法来获取用户定义的模板字段名称。 – BraveNewMath 2014-09-11 17:14:11
第一次尝试,但不返回各个领域
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) 内连接上I.TemplateID = T.ID物品Ť 内部联接字段F于F.ItemId = I.ID 内部联接FN上F.FieldId = FN物品.ID 其中I.templateID ='{xxxxxxx}' 和FN.Name ='说明' – Netferret 2017-07-19 08:15:20
通过调用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(“__”))) 您怎么看?更好,更糟糕,更快的执行? – 2010-08-06 04:45:58
我想做延迟加载。你能告诉我如何解决这个问题吗? – 2015-05-20 13:27:35