我们已经看到了想要了解Item引用的场景。例如,假设我们想要获得一个项目列表,这些项目将SideContent Rendering分配给它们的表示。这正是我们将要使用本文中详细介绍的不同命令提取的信息类型。
需要注意的一点是,这些命令将使用链接数据库,因此链接数据库应该是最新的。
注意:如果你还没有更新你的链接数据库,我建议在使用Sitecore Powershell执行以下操作之前更新它。
Get-ItemReferrer
该命令用于获取所有引用该命令中指定项的项。那么,假设我们想要获取引用我们的SideContent呈现。下面的脚本可以使用Get-ItemReferrer:
Get-ItemReferrer -ID "{13AAD693-D140-4054-840D-4F9DABF681D3}
在这里,我们使用渲染的IDGet-ItemReferrer命令。
以上脚本的输出:
你可以看到列表中有各种引用渲染项的项。
我们可以使用都来过滤我们的结果集TemplateName.我们只想知道从中创建的项目的名称事件详细信息引用我们的项的模板。
Get-ItemReferrer -ID "{13AAD693-D140-4054-840D-4F9DABF681D3}"TemplateName -eq "事件详情"}
以上命令的输出:
Get-ItemReference
此命令将返回指定项引用的项的列表。换句话说,该命令将检索由指定项引用的项的列表。
让我们检查一下链接到什么项主页单品:
Get-ItemReference -ID "{D45691EA-32A0-44D3-B56C-7B70A0CFA65E}"格式-表-属性名称,Id,模板名
以上输出:
使用-ItemLink和Get-ItemReference
使用-ItemLink将迫使Get-ItemReference命令返回一个链接列表,而不是可以在其中找到关于目标项和源项之间关联的更多信息的项。
Get-ItemReference -ID "{D45691EA-32A0-44D3-B56C-7B70A0CFA65E}" -ItemLink
运行上述命令后的输出:
如您所见,在添加-之后检索到的信息ItemLink具有关于目标和源之间的链接的信息。在这里,您可以找到分配给该字段的源字段ID和目标项目ID。数据库、版本信息等等。
让我们用Select-Object只输出源字段ID和目标项ID:
Get-ItemReference -ID "{D45691EA-32A0-44D3-B56C-7B70A0CFA65E}" -ItemLink | Select-Object -Property SourceFieldID,TargetItemID
以上输出:
Update-ItemReferrer
让我们假设有这样一个场景,我们希望更新DecorationBanner图像字段的所有引用EventBanner图像媒体项NewEventBanner图像媒体项目。
$bannerImage = Get-Item -Path "master:" -ID "{ECDF3D59-73C1-41A3-9F87-ACD56900765F}" $newImage = Get-Item -Path "master:" -ID "{1CBD0EE7-0CD5-4A8B-8626-EDB0F0599A5F}" $bannerImage | Update-ItemReferrer -NewTarget $newImage .
在上面的脚本中,我们将当前的横幅图像项和新的横幅图像项放在单独的变量中。然后,我们使用$bannerImage作为输入执行Update-ItemReferrer命令-NewTarget指定newImage美元。
但是,我们有一个问题。这是一个全局操作,因为这里没有执行过滤。如果您只想在创建的项中更新它们呢事件详细信息模板吗?这将要求我们编写一些自定义脚本,将提供过滤的输入Update-ItemReferrer命令。我们只包括孩子和孙子主页从中创建的项事件详细信息模板。然后,我们用-ItemLink而且都(?)只获取指向$bannerImage媒体项的字段的链接信息。然后我们会把它传给Update-ItemReferrer命令作为输入。
下面是我们将根据我们的需求来过滤的脚本:
$bannerImage = Get-Item -Path "master:" -ID "{ECDF3D59-73C1-41A3-9F87-ACD56900765F}" $newImage = Get-Item -Path "master:" -ID "{1CBD0EE7-0CD5-4A8B-8626-EDB0F0599A5F}" $EventDetailItems = Get-ChildItem -Path "master:" -ID "{D45691EA-32A0-44D3-B56C-7B70A0CFA65E}"TemplateName -eq "Event Details"} $EventDetailItems | Get-ItemReference -ItemLink | Where-Object{$_。TargetItemID eq bannerImage美元。ID}
以上输出:
如您所见,我们的结果中只有4行,因为我们只创建了4个项事件详细信息下模板主页。另外,您可以看到该表显示了link的信息,因为我们使用了-ItemLink。您还会注意到TargetItemID是相同的。这是因为我们根据我们的ID过滤了结果EventBanner媒体项目。
现在,当我们完成过滤后,让我们添加Update-ItemReferrer命令传递到脚本,并将筛选后的列表作为输入。
脚本如下:
#获取当前目标图像项目$bannerImage = Get- item -Path "master:" -ID "{ECDF3D59-73C1-41A3-9F87-ACD56900765F}" $newImage = Get- item -Path "master:" -ID "{1CBD0EE7-0CD5-4A8B-8626-EDB0F0599A5F}" #根据父节点和TemplateName筛选我们的结果$EventDetailItems = Get- childitem -Path "master:" -ID "{D45691EA-32A0-44D3-B56C-7B70A0CFA65E}" -Recurse | Where-Object{$_。$LinkList = $EventDetailItems | Get-ItemReference -ItemLink | ?{$ _。TargetItemID eq bannerImage美元。ID}#Execute Update-Referrer command on filtered result set $LinkList | Update-ItemReferrer -NewTarget $newImage
我执行了上面的脚本。没有输出,因为它正在更新链接,所以要检查我们的字段是否已经更新,我运行这个脚本:
Get-ChildItem -Path "master:" -ID "{D45691EA-32A0-44D3-B56C-7B70A0CFA65E}" -递归| Where-Object{$_。TemplateName -eq "事件详细信息"}| ForEach{$_._.DecorationBanner.}MediaID}
上面的输出:
从上面的图片中可以看到,DecorationBanner字段已经更新了$newImage项。
我们知道如何使用Get-ItemReferrer, Get-ItemReference和Update-ItemReferrer在这篇文章中。当我们想要提取和操作项引用的信息时,这些命令非常有用。
下一篇文章将介绍如何使用Sitecore Powershell命令创建报告并导出它们。