我编写了一个脚本,目的是将许多Sitecore项目的发布日期"$date"
替换为其创建日期(created
)。
我在从Sitecore获取此字段时遇到问题。
我尝试过:
$rootItem = Get-Item master:/content
$sourceTemplate = Get-Item "/sitecore/content/.../item 1"
foreach($field in $sourceTemplate.Fields) {
if (($field -ne $null) -And ($field -like '$date')) {
$sourceTemplate.Editing.BeginEdit()
$CreatedDate = .......
$field.Value = [sitecore.dateutil]::ToIsoDate($CreatedDate)
$sourceTemplate.Editing.EndEdit()
}
}
我也尝试通过ID
来获取此字段,但是它不起作用。
请问有人有主意吗? 谢谢
答案 0 :(得分:0)
如果要检查Sitecore内置字段,则需要先致电$sourceTemplate.Fields.ReadAll();
。
您应该将字段的值与$date
字符串进行比较,而不是与字段本身进行比较。
然后只获取存储在__Created
字段中的字符串,而不是获取日期,然后将其格式化回ISO日期字符串。
最后一件事-不要为同一项目调用Editing.BeginEdit()
和Editing.EndEdit()
多个时间-Sitecore在被调用时会执行一些繁重的操作,因此请确保每个项目仅调用一次需要它。
$sourceTemplate = Get-Item "/sitecore/content/home/test"
$sourceTemplate.Fields.ReadAll();
$editing = $false
foreach($field in $sourceTemplate.Fields) {
if ($field.Value -eq '$date') {
if (!$editing) {
$editing = $true
$sourceTemplate.Editing.BeginEdit();
}
$field.Value = $sourceTemplate.Fields["__Created"].Value
}
}
if ($editing) {
$edited = $sourceTemplate.Editing.EndEdit();
}