在一个项目的所有 children 中设置一个字段
Set a field in all the children of an item
我在 sitecore 中有一个项目让我们说“AddressItem
”,它有一些 children。我想在所有 child 项中编辑字段 "IsMain"。
我正在使用 Foreach
循环。有没有更好的方法来实现这一目标。
foreach (Sitecore.Data.Items.Item child in AddressItem.Children)
{
using (new SecurityDisabler())
{
child.Editing.BeginEdit();
child.Fields["IsMain"].Value = "0";
child.Editing.EndEdit();
}
}
将 IsMain 字段标准值设置为 0 然后将所有项目重置为该标准值可能会更快。没有开箱即用的功能,但下面的代码可以做到。
此函数比您的要求更强大,但它是我现有的代码。
首先您需要一个具有正确权限的用户来替换:ElevatedUserAccount
接下来获取您要为其重置值的项目列表,然后创建您要重置的字段列表。在你的情况下 AddressItem.Children 和 IsMain.
最后将它们传递给下面的方法。
public void ResetFields(List<Item> items, List<string> fields)
{
if (items.Any() && fields.Any())
{
foreach (Item item in items)
{
ResetFieldsOnItem(item, fields);
}
}
}
public void ResetFieldsOnItem(Item item, List<string> fields)
{
if (item != null && fields.Any())
{
using (new Sitecore.Security.Accounts.UserSwitcher(ElevatedUserAccount, true))
{
item.Editing.BeginEdit();
foreach (string field in fields)
{
item.Fields[field].Reset();
}
item.Editing.EndEdit();
}
}
}
我在 sitecore 中有一个项目让我们说“AddressItem
”,它有一些 children。我想在所有 child 项中编辑字段 "IsMain"。
我正在使用 Foreach
循环。有没有更好的方法来实现这一目标。
foreach (Sitecore.Data.Items.Item child in AddressItem.Children)
{
using (new SecurityDisabler())
{
child.Editing.BeginEdit();
child.Fields["IsMain"].Value = "0";
child.Editing.EndEdit();
}
}
将 IsMain 字段标准值设置为 0 然后将所有项目重置为该标准值可能会更快。没有开箱即用的功能,但下面的代码可以做到。
此函数比您的要求更强大,但它是我现有的代码。
首先您需要一个具有正确权限的用户来替换:ElevatedUserAccount
接下来获取您要为其重置值的项目列表,然后创建您要重置的字段列表。在你的情况下 AddressItem.Children 和 IsMain.
最后将它们传递给下面的方法。
public void ResetFields(List<Item> items, List<string> fields)
{
if (items.Any() && fields.Any())
{
foreach (Item item in items)
{
ResetFieldsOnItem(item, fields);
}
}
}
public void ResetFieldsOnItem(Item item, List<string> fields)
{
if (item != null && fields.Any())
{
using (new Sitecore.Security.Accounts.UserSwitcher(ElevatedUserAccount, true))
{
item.Editing.BeginEdit();
foreach (string field in fields)
{
item.Fields[field].Reset();
}
item.Editing.EndEdit();
}
}
}