Команда «тайм-аут» во время автоматического создания элемента Sitecore - PullRequest
0 голосов
/ 18 января 2012

У меня есть команда, которую я добавил к «национальному» узлу в редакторе Sitecore. Команда генерирует список из 50 узлов состояний под ним. Затем он проходит через узлы состояния (по 1 за раз) и генерирует список локальных узлов под каждым узлом состояния. В списках локальных узлов я перебираю их и проверяю, существует ли новый элемент - если его нет, я добавляю (создаю) его как дочерний элемент под локальным узлом. В конечном счете, в ходе выполнения этой команды добавляется около 300 локальных элементов.

Есть ли более эффективный способ сделать это (быстрый запрос, чтобы собрать 300 локальных узлов в один список, затем проверить, существует ли элемент и создать его)? Если это так, я не уверен, как это сделать ...

Я не уверен, что является наиболее дорогостоящей частью операции. В конечном счете, я все еще выполняю до 300 отдельных запросов, чтобы проверить, есть ли они, затем следуют операторы вставки, так что запуск может занять некоторое время. Если да, то какой параметр в веб-конфигурации увеличит применимый параметр «тайм-аут» в Sitecore? Структура образца выглядит следующим образом:

//Derive the template from the name of the item (page) that was passed in - this assumes that the template name and the item name are the same
Sitecore.Data.Database database = Sitecore.Data.Database.GetDatabase("master");                

TemplateItem contentPageTemplate = database.SelectSingleItem("fast:/sitecore/Templates/User Defined/Home/Pages/Local Site/" + newPage);

Sitecore.Data.Items.Item[] stateNodes = null;
Sitecore.Data.Items.Item[] localNodes = null;
Item localHomePage = null;
Item newLocalPage = null;
int webBusinessID = 0;
string ID = "";
WebBusiness business;

//Get all of the immediate child nodes (state pages) under the "parent" node ("National Locations") - and put them into a list or array                

stateNodes = database.SelectItems("fast:/sitecore/content/Home/National Locations/*");

for (int i = 0; i < stateNodes.Length; i++)
{ 

  if (stateNodes[i].Children.Count > 0)
  {
    localNodes = database.SelectItems("fast:/sitecore/content/Home/National Locations/" + stateNodes[i].Fields["State Abbreviation"].ToString() + "/*");
  }
  else
  {
    //Do nothing
  }                   

  for (int j = 0; j < localNodes.Length; j++)
  {
    localHomePage = localNodes[j];

    if (localHomePage.Publishing.IsPublishable(DateTime.Now, false) == true)                        
    {   

      //If the new page does not exist, create it
      if (localHomePage.Children[newPage] == null)
      {
        newLocalPage = localHomePage.Add(newPage, contentPageTemplate);
        counter = counter + 1;
      }
      else
      {
        //Additional business logic
      }
    }
  }
}

1 Ответ

0 голосов
/ 18 января 2012

Если я не пропускаю логику / код, которого у вас там нет, я думаю, что вы можете просто сократить это до одного запроса, чтобы добраться до локальных узлов, изменив XPath:

localNodes = database.SelectItems("fast:/sitecore/content/Home/National Locations/*/*");

изменение состоит в том, чтобы получить все непосредственные подпункты непосредственных подпунктов "Национальных местоположений"

...