【问题标题】:How to add sitecore items to a sitecore package programatically using Sitecore.Install.PackageGenerator?如何使用 Sitecore.Install.PackageGenerator 以编程方式将站点核心项目添加到站点核心包?
【发布时间】:2016-11-01 20:54:16
【问题描述】:

我想使用 Sitecore.Install.PackageGenerator 以编程方式在我的 sitedata 文件夹中创建所有项目的包。我能够将每个项目的 Uri 属性添加到包中,但无法弄清楚如何添加项目本身。请在下面找到我的代码 sn-p。

using (new Sitecore.SecurityModel.SecurityDisabler())
        {
            Sitecore.Data.Database db = Sitecore.Configuration.Factory.GetDatabase("web");
            Sitecore.Install.PackageProject document = new Sitecore.Install.PackageProject();

            document.Metadata.PackageName = "SitecoreBackup"+DateTime.Now;
            document.Metadata.Author = "PrePublishEvent";

            Sitecore.Install.Items.ExplicitItemSource source = new Sitecore.Install.Items.ExplicitItemSource(); //Create source – source should be based on BaseSource  

            source.Name = "SitecoreBackupSource";
            Sitecore.Data.Items.Item[] items = db.Items.Database.SelectItems("/sitecore/content/Sites/mysite/Site Data/*");

            foreach (Sitecore.Data.Items.Item item in items)
            {
               // source.Entries.Insert(0,item.ToString);
                source.Entries.Add(new Sitecore.Install.Items.ItemReference(item.Uri, false).ToString());
            }

            document.Sources.Add(source);
            document.SaveProject = true;

            //path where the zip file package is saved  
            using (Sitecore.Install.Zip.PackageWriter writer = new Sitecore.Install.Zip.PackageWriter("/data/packages/" + "SitecoreBackup" + DateTime.Now.Ticks.ToString() + ".zip"))
            {
                Sitecore.Context.SetActiveSite("shell");
                writer.Initialize(Sitecore.Install.Installer.CreateInstallationContext());
                Sitecore.Install.PackageGenerator.GeneratePackage(document, writer);
                Sitecore.Context.SetActiveSite("website");
            }}

【问题讨论】:

  • 添加项目本身是什么意思?哪个部分不工作?
  • 在代码 sn-p 中的 for 循环中,我想将 Sitecore.Data.Items.Item 项添加到包中。我无法找到一种方法来做到这一点。此外,还应添加 item 的所有子项。
  • 请在下方查看我的回答

标签: sitecore sitecore8 sitecore8.1


【解决方案1】:

我已经实现了一个工具,可以完全满足您的要求。它在 Sitecore Marketplace 上仍处于审核模式。一旦获得批准,我会更新答案。

但与此同时,您可以在here 下载它,代码在我的GitHub 上可用。以下是该工具的使用方法:

  1. 通过安装向导安装 Sitecore 包。
  2. 打开 Sitecore 菜单并点击Package Auto Generator
  3. 上传 CSV 文件。 CSV 文件应采用以下格式:

无需指定标题。

  • 第一列:

    提供 Sitecore 路径

  • 第二栏:

    指定它是 Item 还是 File

  • 第三栏:

    指定您是否将包含子项

上传后,填写应用程序上的必要字段,然后单击下一步。将生成包并可以下载。对于您的情况,您可以拥有如下所示的 CSV 文件:

此外,您需要更改随附的配置文件以指定您的源数据库。至于您的情况,它将设置为 web。配置文件在App_Config/Include/Sitecore.PackageAutoGenerator.Settings.config中找到并更改

<setting name="SourceDatabase" value="master" />

<setting name="SourceDatabase" value="web" />

【讨论】:

  • 感谢 Hishaam,您关于使用源集合包含子项的建议是正确的。它解决了我的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多