/// <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> /// Audits a publishing transaction /// </summary> /// <param name="transaction"><see cref="T:Tridion.ContentManager.Publishing.PublishTransaction" /></param> /// <param name="args">The <see cref="SaveEventArgs"/> instance containing the event data.</param> /// <param name="phase"><see cref="T:Tridion.ContentManager.Extensibility.EventPhases" /></param> private void AuditPublish(PublishTransaction transaction, SaveEventArgs args, EventPhases phase) { if (phase == EventPhases.TransactionCommitted && transaction.State == PublishTransactionState.Success) { try { using (SqlConnection connection = Connection) { // Register the publish transaction using (SqlCommand sqlAuditPublishTransaction = new SqlCommand() { CommandText = "AuditPublishTransaction", CommandType = CommandType.StoredProcedure, Connection = connection }) { sqlAuditPublishTransaction.AddParameter("@Transaction", SqlDbType.VarChar, transaction.Id.ToString()); sqlAuditPublishTransaction.AddParameter("@Action", SqlDbType.VarChar, (transaction.Instruction is PublishInstruction ? "Publish" : "Unpublish")); sqlAuditPublishTransaction.AddParameter("@TimeStamp", SqlDbType.DateTime, transaction.StateChangeDateTime); sqlAuditPublishTransaction.AddParameter("@Username", SqlDbType.VarChar, transaction.Creator.Title.ToUpper()); sqlAuditPublishTransaction.AddParameter("@UserDescription", SqlDbType.NVarChar, transaction.Creator.Description); int transactionId = Convert.ToInt32(sqlAuditPublishTransaction.ExecuteScalar()); if (transactionId > 0) { using (SqlCommand sqlAuditPublishedItem = new SqlCommand() { CommandText = "AuditPublishedItem", CommandType = CommandType.StoredProcedure, Connection = connection }) { // Register the publication transaction sqlAuditPublishedItem.AddParameter("@TransactionID", SqlDbType.Int, transactionId); sqlAuditPublishedItem.AddParameter("@PublicationTarget", SqlDbType.VarChar); sqlAuditPublishedItem.AddParameter("@Publication", SqlDbType.VarChar); sqlAuditPublishedItem.AddParameter("@ItemID", SqlDbType.VarChar); sqlAuditPublishedItem.AddParameter("@ItemTitle", SqlDbType.NVarChar); sqlAuditPublishedItem.AddParameter("@ItemTemplate", SqlDbType.VarChar); sqlAuditPublishedItem.AddParameter("@IsComponentTemplate", SqlDbType.Bit); sqlAuditPublishedItem.AddParameter("@IsDCP", SqlDbType.Bit); foreach (PublishContext publishContext in transaction.PublishContexts) { foreach (ProcessedItem processedItem in publishContext.ProcessedItems) { // Register each published item ResolvedItem resolvedItem = processedItem.ResolvedItem; sqlAuditPublishedItem.SetValue("@PublicationTarget", publishContext.PublicationTarget.Id.ToString()); sqlAuditPublishedItem.SetValue("@Publication", publishContext.Publication.Id.ToString()); sqlAuditPublishedItem.SetValue("@ItemID", resolvedItem.Item.VersionedItemId()); sqlAuditPublishedItem.SetValue("@ItemTitle", resolvedItem.Item.Title); sqlAuditPublishedItem.SetValue("@ItemTemplate", resolvedItem.Template.VersionedItemId()); sqlAuditPublishedItem.SetValue("@IsComponentTemplate", resolvedItem.IsComponentPresentation); sqlAuditPublishedItem.SetValue("@IsDCP", resolvedItem.IsDynamicComponentPresentation); sqlAuditPublishedItem.ExecuteNonQuery(); } } } } } } } catch (Exception ex) { Logger.Write(ex, "TcmEvents.Audit", LoggingCategory.General, TraceEventType.Error); } } }
/// <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> /// Creates a RenderedItem object based on the given ResolvedItem and a default render instruction /// </summary> /// <param name="resolvedItem">ResolvedItem to render</param> /// <returns>RenderedItem</returns> private RenderedItem CreateRenderedItem(ResolvedItem resolvedItem) { return new RenderedItem( resolvedItem, new RenderInstruction(this._session) ); }