如何从Sitecore主数据库获取项目路径?

时间:2014-09-08 21:08:05

标签: sitecore sitecore6

我有一个直接的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。

3 个答案:

答案 0 :(得分:1)

我强烈建议您编写一个使用Sitecore API进行此类工作的实用程序。如果您已经安装了Sitecore PowerShell(https://marketplace.sitecore.net/en/Modules/Sitecore_PowerShell_console.aspx)之类的东西也是一个不错的选择。

据说下面的博客文章将为您提供在SQL中创建函数以轻松获取ItemPath的示例。

http://blogs.perficient.com/microsoft/2014/05/sql-querying-sitecore-database-directly-get-fullpath-of-item/

答案 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')]