2015-06-09 3 views
0

У меня есть элемент в sitecore, который позволяет сказать «AddressItem», в котором есть дети. Я хочу изменить поле «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(); 
    } 
} 
+0

Вместо SecurityDisabler вы также можете использовать UserSwitcher, в чем ваша проблема ?, это не очень быстро ?. и, вероятно, вы хотите сделать это только в мастер-дБ? Для массовых операций вы также можете использовать Sitecore Rocks. –

+0

Да, я также думаю, что это не так быстро, поэтому я разместил здесь свой вопрос. Я хочу знать быстрый способ достичь того же результата. – Kamran

+0

Я отредактировал ваш заголовок. Пожалуйста, смотрите: «Если вопросы включают« теги »в их названиях?] (Http://meta.stackexchange.com/questions/19190/), где консенсус« нет, они не должны ». –

ответ

0

Возможно, скорее, установить стандартное значение полей 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(); 
     } 
    } 
}