コード例 #1
0
        /// <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);
                }
            }
        }
コード例 #2
0
        /// <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);
        }
コード例 #3
0
        /// <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;
        }
コード例 #4
0
        /// <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);
            }
        }