Sitecore中的批量内容加载和页面创建

时间:2014-01-29 16:35:11

标签: sitecore sitecore7

我有一个进程,我正在获取xml结果集,我可以从中处理数据并以编程方式在Sitecore中创建页面。如果我们有几页甚至一次,这很简单。 现在我的问题是我必须每天两次在Sitecore中创建至少50k页面,从xml.So加载到sitecore中的那么多数据一次是非常缓慢的过程。 是否有一种在Sitecore中创建这些页面的最佳方法。

我正在使用Sitecore 7。

页面创建过程

using (new Sitecore.SecurityModel.SecurityDisabler())
{
    for (int i = 0; i < item.count; i++)
    {
        Item newCityItem = parentCityItem.Add("Page_" + i, template1);
        newCityItem.Editing.BeginEdit();
        try
        {
            newCityItem.Fields["html"].Value = mPages[i].ToString();
            newCityItem.Editing.EndEdit();
        }
        catch (System.Exception ex)
        {     
            // The update failed, write a message to the log    
            Sitecore.Diagnostics.Log.Error("Could not update item " + newCityItem.Paths.FullPath + ": " + ex.Message, this);
            // Cancel the edit (not really needed, as Sitecore automatically aborts     // the transaction on exceptions, but it wont hurt your code)    
            newCityItem.Editing.CancelEdit();
        }
    }
}

任何帮助......

4 个答案:

答案 0 :(得分:2)

将循环包装在BulkUpdateContext中,以禁用事件,索引等

using(new BulkUpdateContext())
{
   // code here
}

答案 1 :(得分:1)

我认为这不是创建Sitecore项目的另一种方式。

我建议你禁用master数据库的索引,因为在创建新项目时它会慢一点。如果您需要在创建项目后进行索引,则可以再次启用索引并开始重建索引。

答案 2 :(得分:1)

如果这些项目每天在Sitecore中被更换两次,我认为它们没有被编辑,而您正在使用Sitecore作为表示层。

如果是这样,您可以将xml映射为Sitecore DataProvider。这样,xml用作项目的来源 - 尽管它们仍然可以在Sitecore中读取,并且Sitecore表示层将它们视为常规的sitecore项目。

有一篇博文在http://blog.horizontalintegration.com/2013/03/17/an-introduction-to-sitecore-data-providers/解释,以及SDN中的一些文档。

编辑(感谢jammykam)

我不会直接映射到xml文件 - 可能将其放入db中,然后将 映射到sitecore。

答案 3 :(得分:0)

每次保存项目时,统计信息都会更新(如修改后的用户,修改日期等),并且所有事件都被触发(项目已保存,索引构建等)。您可以禁用以下两项:

item.Editing.BeginEdit();
item["Title"] = "My new title";
item.Editing.EndEdit(false, true);

根据您的要求,您可能需要在导入结束时重建索引。