如何使用 Sitecore.Install.PackageGenerator 以编程方式将 sitecore 项目添加到 sitecore 包?
How to add sitecore items to a sitecore package programatically using Sitecore.Install.PackageGenerator?
我想使用 Sitecore.Install.PackageGenerator 以编程方式创建我的站点数据文件夹中所有项目的包。我可以将每个项目的 Uri 属性 添加到包中,但不知道如何添加项目本身。请在下面找到我的代码片段。
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");
}}
我已经实现了一个工具,它可以完全满足您的要求。它在 Sitecore Marketplace 上仍处于审阅模式。一旦获得批准,我将更新答案。
但在此期间,您可以下载它 here and the code is available on my GitHub。下面是如何使用该工具:
- 通过安装向导安装 Sitecore 包。
- 打开 Sitecore 菜单并单击 Package Auto Generator。
- 上传 CSV 文件。 CSV 文件应采用以下格式:
无需指定header。
第一列:
提供 Sitecore 路径
第二列:
指定它是 Item 还是 File
第三列:
指定是否要 包括子项目
上传后,在应用程序中填写必要的字段,然后单击“下一步”。将生成包并可以下载。对于您的情况,您可以获得如下所示的 CSV 文件:
此外,您还需要更改随附的配置文件以指定您的源数据库。至于你的情况,它将被设置为 web。配置文件在 App_Config/Include/Sitecore.PackageAutoGenerator.Settings.config
中找到并更改
<setting name="SourceDatabase" value="master" />
到
<setting name="SourceDatabase" value="web" />
我想使用 Sitecore.Install.PackageGenerator 以编程方式创建我的站点数据文件夹中所有项目的包。我可以将每个项目的 Uri 属性 添加到包中,但不知道如何添加项目本身。请在下面找到我的代码片段。
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");
}}
我已经实现了一个工具,它可以完全满足您的要求。它在 Sitecore Marketplace 上仍处于审阅模式。一旦获得批准,我将更新答案。
但在此期间,您可以下载它 here and the code is available on my GitHub。下面是如何使用该工具:
- 通过安装向导安装 Sitecore 包。
- 打开 Sitecore 菜单并单击 Package Auto Generator。
- 上传 CSV 文件。 CSV 文件应采用以下格式:
无需指定header。
第一列:
提供 Sitecore 路径
第二列:
指定它是 Item 还是 File
第三列:
指定是否要 包括子项目
上传后,在应用程序中填写必要的字段,然后单击“下一步”。将生成包并可以下载。对于您的情况,您可以获得如下所示的 CSV 文件:
此外,您还需要更改随附的配置文件以指定您的源数据库。至于你的情况,它将被设置为 web。配置文件在 App_Config/Include/Sitecore.PackageAutoGenerator.Settings.config
中找到并更改
<setting name="SourceDatabase" value="master" />
到
<setting name="SourceDatabase" value="web" />