/// <summary> /// Publishes a <see cref="T:Tridion.ContentManager.IdentifiableObject"/> to a given <see cref="T:Tridion.ContentManager.CommunicationManagement.PublicationTarget"/> and /// with <see cref="T:Tridion.ContentManager.Publishing.PublishPriority"/> /// </summary> /// <param name="PublishUser"><see cref="T:Tridion.ContentManager.Security.User"/></param> /// <param name="Item"><see cref="T:Tridion.ContentManager.IdentifiableObject"/></param> /// <param name="Target"><see cref="T:Tridion.ContentManager.CommunicationManagement.PublicationTarget"/></param> /// <param name="Priority"><see cref="T:Tridion.ContentManager.Publishing.PublishPriority"/></param> /// <param name="startDate"><see cref="T:System.DateTime"/></param> public void PublishItem(User PublishUser, IdentifiableObject Item, PublicationTarget Target, PublishPriority Priority, DateTime startDate) { if (Engine.RenderMode == RenderMode.Publish) { if (startDate == null) { startDate = DateTime.Now; } using (Session session = new Session(PublishUser.Title)) { PublishInstruction publishInstruction = new PublishInstruction(session) { StartAt = startDate, DeployAt = startDate }; RenderInstruction renderInstruction = new RenderInstruction(session); renderInstruction.RenderMode = RenderMode.Publish; publishInstruction.RenderInstruction = renderInstruction; PublishEngine.Publish(new IdentifiableObject[] { session.GetObject(Item.Id) }, publishInstruction, new PublicationTarget[] { Target }, Priority); } } }
/// <summary> /// Execute the template transformation with the given parameters /// </summary> /// <param name="itemUri">Tridion item URI.</param> /// <param name="templateUri">Tridion template URI.</param> /// <param name="publicationTargetUri">Tridion publication target URI.</param> /// <returns>Package "Output" item as <see cref="T:System.String" /></returns> /// <exception cref="System.ArgumentNullException"> /// itemUri cannot be null or empty. /// or /// templateUri cannot be null or empty for itemtype /// </exception> /// <exception cref="System.ArgumentException"> /// itemUri is not a valid Tridion URI. /// or /// templateUri is not a valid Tridion URI. /// </exception> public override String Execute(String itemUri, String templateUri = null, String publicationTargetUri = null) { Session session = null; try { session = DebuggerConfig.Instance.Templating.EnableImpersonation && !String.IsNullOrEmpty(DebuggerConfig.Instance.Templating.ImpersonationIdentity) ? new Session(DebuggerConfig.Instance.Templating.ImpersonationIdentity) : new Session(); IdentifiableObject item = session.GetObject(itemUri); Template template = null; if (String.IsNullOrEmpty(templateUri)) { Page page = item as Page; if (page != null) { template = page.PageTemplate; } } else { template = session.GetObject(templateUri) as Template; } if (template != null) { ResolvedItem resolvedItem = new ResolvedItem(item, template); PublishInstruction instruction = new PublishInstruction(session) { RenderInstruction = new RenderInstruction(session) { RenderMode = RenderMode.PreviewDynamic }, ResolveInstruction = new ResolveInstruction(session) { IncludeChildPublications = false, IncludeComponentLinks = true, IncludeWorkflow = false, OnlyPublishedItems = false, Purpose = ResolvePurpose.Publish, StructureResolveOption = StructureResolveOption.ItemsAndStructure } }; DebuggerHook(); RenderedItem renderedItem = global::Tridion.ContentManager.Publishing.Rendering.RenderEngine.Render(resolvedItem, instruction, !String.IsNullOrEmpty(publicationTargetUri) ? new PublicationTarget(new TcmUri(publicationTargetUri), session) : null); using (StreamReader sr = new StreamReader(renderedItem.Content)) { renderedItem.Content.Seek(0, SeekOrigin.Begin); return(sr.ReadToEnd()); } } } catch (Exception ex) { Logger.Log(TraceEventType.Error, "Exception while executing TemplateEngine for item {0}, template {1}: {2}", itemUri, templateUri, ex.Message); } finally { if (session != null) { session.Dispose(); } } return(String.Empty); }
/// <summary> /// Execute the template transformation with the given parameters /// </summary> /// <param name="itemUri">Tridion item URI.</param> /// <param name="templateUri">Tridion template URI.</param> /// <param name="publicationTargetUri">Tridion publication target URI.</param> /// <returns>Package "Output" item as <see cref="T:System.String" /></returns> /// <exception cref="System.ArgumentNullException"> /// itemUri cannot be null or empty. /// or /// templateUri cannot be null or empty for itemtype /// </exception> /// <exception cref="System.ArgumentException"> /// itemUri is not a valid Tridion URI. /// or /// templateUri is not a valid Tridion URI. /// </exception> public override String Execute(String itemUri, String templateUri = null, String publicationTargetUri = null) { Session session = null; try { session = DebuggerConfig.Instance.Templating.EnableImpersonation && !String.IsNullOrEmpty(DebuggerConfig.Instance.Templating.ImpersonationIdentity) ? new Session(DebuggerConfig.Instance.Templating.ImpersonationIdentity) : new Session(); IdentifiableObject item = session.GetObject(itemUri); Template template = null; if (String.IsNullOrEmpty(templateUri)) { Page page = item as Page; if (page != null) template = page.PageTemplate; } else template = session.GetObject(templateUri) as Template; if (template != null) { ResolvedItem resolvedItem = new ResolvedItem(item, template); PublishInstruction instruction = new PublishInstruction(session) { RenderInstruction = new RenderInstruction(session) { RenderMode = RenderMode.PreviewDynamic }, ResolveInstruction = new ResolveInstruction(session) { IncludeChildPublications = false, IncludeComponentLinks = true, IncludeWorkflow = false, OnlyPublishedItems = false, Purpose = ResolvePurpose.Publish, StructureResolveOption = StructureResolveOption.ItemsAndStructure } }; DebuggerHook(); RenderedItem renderedItem = global::Tridion.ContentManager.Publishing.Rendering.RenderEngine.Render(resolvedItem, instruction, !String.IsNullOrEmpty(publicationTargetUri) ? new PublicationTarget(new TcmUri(publicationTargetUri), session) : null); using (StreamReader sr = new StreamReader(renderedItem.Content)) { renderedItem.Content.Seek(0, SeekOrigin.Begin); return sr.ReadToEnd(); } } } catch (Exception ex) { Logger.Log(TraceEventType.Error, "Exception while executing TemplateEngine for item {0}, template {1}: {2}", itemUri, templateUri, ex.Message); } finally { if (session != null) session.Dispose(); } return String.Empty; }
/// <summary> /// On (Save, and) Check-in of a Component, create a Page for that Component and update an index Page with the Component and publish both to a staging target. /// </summary> /// <remarks> /// The metadata of the Folder the Component resides in, will be used as the configuration for the actions. /// </remarks> /// <param name="subject">checked in Component</param> /// <param name="args">check in event arguments</param> /// <param name="phase">event phase</param> private static void ComponentCheckInAction(Component subject, CheckInEventArgs args, EventPhases phase) { // get Folder from Component for configuration metadata Folder folder = (Folder)subject.OrganizationalItem; // proceed when Folder has metadata if (folder.Metadata == null) { return; } ItemFields metadata = new ItemFields(folder.Metadata, folder.MetadataSchema); ReiConfig config = new ReiConfig(metadata); // proceed when metadata contains valid URIs, and Schema of Component is recognised if (!config.IsValid || subject.Schema.Id.ItemId != config.SchemaUri.ItemId) { return; } // create list of items to publish List <IdentifiableObject> items = new List <IdentifiableObject>(); // if Component is already used on any Page then no need to create new Page and update index, just publish Component UsingItemsFilter pageFilter = new UsingItemsFilter(subject.Session) { ItemTypes = new List <ItemType> { ItemType.Page } }; if (subject.HasUsingItems(pageFilter)) { items.Add(subject); } else { // create Page and add Component Presentation (using Context Publication of Structure Group) TcmUri localUri = ReiConfig.TransformTcmUri(subject.Id, config.StructureGroupUri); Component localComponent = new Component(localUri, subject.Session); ComponentTemplate componentTemplate = new ComponentTemplate(config.ComponentTemplateUri, subject.Session); Page page = new Page(subject.Session, config.StructureGroupUri); try { page.Title = subject.Title; page.FileName = GetSafeFileName(subject.Title); page.PageTemplate = new PageTemplate(config.PageTemplateUri, subject.Session); page.ComponentPresentations.Add(new ComponentPresentation(localComponent, componentTemplate)); page.Save(true); // add Page to publish items list items.Add(page); } catch (Exception ex) { Logger.Write(ex, ReiConfig.Name, LoggingCategory.General, TraceEventType.Error); } // add Component to index Page (using Context Publication of index Page) localUri = ReiConfig.TransformTcmUri(subject.Id, config.IndexPageUri); localComponent = new Component(localUri, subject.Session); componentTemplate = new ComponentTemplate(config.IndexComponentTemplateUri, subject.Session); Page indexPage = new Page(config.IndexPageUri, subject.Session); try { indexPage.CheckOut(); indexPage.ComponentPresentations.Add(new ComponentPresentation(localComponent, componentTemplate)); indexPage.Save(true); // add index Page to publish items list items.Add(indexPage); } catch (Exception ex) { Logger.Write(ex, ReiConfig.Name, LoggingCategory.General, TraceEventType.Error); } } // publish items if (items.Count > 0) { List <TargetType> targets = new List <TargetType> { new TargetType(config.TargetTypeUri, subject.Session) }; PublishInstruction publishInstruction = new PublishInstruction(subject.Session); PublishEngine.Publish(items, publishInstruction, targets, ReiConfig.Priority); } else { Logger.Write("No items were published.", ReiConfig.Name, LoggingCategory.General, TraceEventType.Information); } }