У меня есть команда, которую я добавил к «национальному» узлу в редакторе 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
}
}
}
}