我有一个直接的SQL查询来从数据库中提取一些特定的项目。可以获取我感兴趣的ItemID和Field名称......但我想给我的编辑器指向项目的路径,而不是让他们搜索项目ID。如何使用SQL查询获取此路径?为了记录,这是我当前的查询:
SELECT ItemId, Language, Value, I.Name FROM Fields F
JOIN Items I ON F.FieldId = I.ID
WHERE Value LIKE '%style="color: #999999%'
ORDER BY Language, ItemID
我让一些译员错误地将HTML复制并粘贴到内容编辑器中,并且这些多余的样式标签在许多地方出现了。我想获得受影响的项目(包含内容树路径)的完整列表。 DB Schema是Sitecore 6.6。
答案 0 :(得分:1)
我强烈建议您编写一个使用Sitecore API进行此类工作的实用程序。如果您已经安装了Sitecore PowerShell(https://marketplace.sitecore.net/en/Modules/Sitecore_PowerShell_console.aspx)之类的东西也是一个不错的选择。
据说下面的博客文章将为您提供在SQL中创建函数以轻松获取ItemPath的示例。
答案 1 :(得分:0)
实际上,建议不要对MS SQL级别的Sitecore数据进行任何操作。最好通过Sitecore API找到解决此问题的方法。
但是,您可以使用递归SQL查询获取项目的路径:
with Items1 (nm, id1, pathstr)
as (select Name, id, cast('/sitecore' as nvarchar(MAX))
from Items
where ParentID = '00000000-0000-0000-0000-000000000000'
union all
select Items.Name, Items.id, Items1.pathstr +'/'+ Items.Name
from Items
inner join Items1 on Items1.id1 = Items.ParentID)
select id1 as ItemId, nm as Name, pathstr as [Path], F.Id as FieldId, F.Value as FieldValue
from Items1 I
JOIN Fields F ON F.ItemId = I.id1
WHERE Value LIKE '%style="color: #999999%'
ORDER BY Language, ItemID
需要递归查询,因为路径不会保存为字段。
P.S。查询是针对Sitecore 7.2的,我的机器上没有Sitecore 6.6。如果存在任何差异,您可以针对Sitecore 6.6调整此查询。
答案 2 :(得分:0)
正如@Anton所提到的,Sitecore不支持直接查询数据库,所以这通常是不可取的。
如果您在Sitecore桌面中,则可以使用开发人员中心内的XPath Builder执行查询以检索这些项目。在下面的示例中,将@YourFieldName更改为相关的字段名称。
/sitecore/content//*[contains(@YourFieldName, 'style="color: #999999')]