命令"超时"在Sitecore自动化项目创建期间

时间:2012-01-18 16:40:15

标签: sitecore

我有一个命令,我已添加到Sitecore编辑器中的“国家”节点。该命令生成其下50个状态节点的列表。然后它通过状态节点(每次1个)并在每个状态节点下生成本地节点列表。在本地节点列表中,我遍历它们并检查新项是否存在 - 如果不存在,我将其添加(创建)为本地节点下的子项。最终,在此命令的过程中将添加近300个本地项目。

是否有更有效的方法(快速查询将300个本地节点放入一个列表,然后检查项目是否存在,并创建它)?如果是这样,我不知道该怎么做......

我不确定这项行动中成本最高的部分是什么。最终,我仍然在做多达300个单独的查询来检查它是否存在,然后是插入语句,因此可能还需要一段时间才能运行。如果是这样,web配置中的哪个设置将增加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 :(得分:0)

除非我缺少你没有的逻辑/代码,否则我认为你可以简单地将其修改为一个查询以通过更改XPath来到达本地节点:

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

更改是获取“国家地点”的直接子项目的所有直接子项目