在一个项目的所有 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();
        }
    }
}