我有一个命令,我已添加到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
}
}
}
}
答案 0 :(得分:0)
除非我缺少你没有的逻辑/代码,否则我认为你可以简单地将其修改为一个查询以通过更改XPath来到达本地节点:
localNodes = database.SelectItems("fast:/sitecore/content/Home/National Locations/*/*");
更改是获取“国家地点”的直接子项目的所有直接子项目