If you ever needed to export or import Sitecore packages dynamically through code, this is the article for you. You could be integrating it into automated build process or simply trying to move items between two environments.
Here is the Export Code:
using (new Sitecore.SecurityModel.SecurityDisabler()) { Sitecore.Data.Database db = Sitecore.Configuration.Factory.GetDatabase("master"); Sitecore.Install.PackageProject document = new Sitecore.Install.PackageProject(); document.Metadata.PackageName = "INSERT PACKAGE NAME"; document.Metadata.Author = "INSERT AUTHOR NAME"; Sitecore.Install.Items.ExplicitItemSource source = new Sitecore.Install.Items.ExplicitItemSource(); //Create source – source should be based on BaseSource source.Name = "INSERT SOURCE NAME"; Sitecore.Data.Items.Item[] items = db.Items.Database.SelectItems("SPECIFY THE SITECORE ITEM PATH TO EXPORT FROM"); foreach (Sitecore.Data.Items.Item item in items) { 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/" + " INSERT ZIP FILE NAME " + 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"); } }
Here is the Import Code:
using (new SecurityDisabler()) { using (new ProxyDisabler()) { using (new SyncOperationContext()) { IProcessingContext context = new SimpleProcessingContext(); IItemInstallerEvents events = new DefaultItemInstallerEvents(new BehaviourOptions(InstallMode.Overwrite, MergeMode.Undefined)); context.AddAspect(events); IFileInstallerEvents events1 = new DefaultFileInstallerEvents(true); context.AddAspect(events1); Sitecore.Install.Installer installer = new Sitecore.Install.Installer(); installer.InstallPackage(MainUtil.MapPath("INSERT PACKAGE PATH INCLUDING THE FILE NAME"), context); } } }
Tagged as: API, BehaviourOptions, CreateInstallationContext, DefaultItemInstallerEvents, document sources, environment, environments, ExplicitItemSource, export, exporting, Factory, GetDatabase, IFileInstallerEvents, import, importing, Master, meta, metadata, Model, PACKAGE, PackageGenerator, PackageProject, PackageWriter, Per, processing, project, ProxyDisabler, SaveProject, Security, SecurityDisabler, SES, SetActiveSite, shell, Simple, SimpleProcessingContext, Sitecore, sitecore api, sitecore packages, source, source document, source entries, source name, SPECIFY, SyncOperationContext