【问题标题】:Get IDs of Items to be Published from Sitecore Publishing Processor从 Sitecore 发布处理器获取要发布的项目的 ID
【发布时间】:2016-06-02 17:49:00
【问题描述】:

我正在尝试在 Sitecore 中编写一个自定义发布处理器,以便我可以记录发布任何项目的确切日期和时间。我正在使用的代码(我改编自 Uli Welterbach 的代码here)不会引发错误,但它似乎没有给我实际发布的项目的 ID。我做错了什么?

 public class PublicationProcessor : PublishProcessor
    {        

        public override void Process(PublishContext context)
        {
            Assert.ArgumentNotNull(context, "context");                        
            var cqs = context.Queue.ToList();            

            string connectionString = "Data Source=MyServer;initial catalog=AuditHistory; User ID=sa;Password=123456789;Integrated Security=false;";
            var query = @"INSERT INTO [dbo].[ItemHistory]
                               ([ItemID])
                         VALUES
                               (@ItemId)";

            using (SqlConnection cn = new SqlConnection(connectionString))
            {

                foreach (var itemId in GetPublishQueueItems(context.PublishOptions))
                {
                    using (SqlCommand cmd = new SqlCommand(query, cn))
                    {
                        // define parameters and their values
                        cmd.Parameters.Add("@ItemId", SqlDbType.UniqueIdentifier, 50).Value = itemId.ToGuid();

                        // open connection, execute INSERT, close connection
                        cn.Open();
                        cmd.ExecuteNonQuery();
                        cn.Close();
                    }
                }

            }

        }

        private IEnumerable<ID> GetPublishQueueItems(PublishOptions options)
        {
            if (options.Mode == PublishMode.Incremental)
                return PublishQueue.GetPublishQueue(options).Select(candidate => candidate.ItemId).ToArray();
            return PublishQueue.GetContentBranch(options).Select(candidate => candidate.ItemId).ToArray();
        }

【问题讨论】:

    标签: sitecore sitecore8


    【解决方案1】:

    您应该使用publish:itemProcessing 管道。这是在发布项目时触发的。您将获得项目 ID。我有一篇博客文章,其中我使用了publish:itemProcessed,它是在项目发布后触发的。链接是https://hishaamn.wordpress.com/2016/04/07/sitecore-incremental-publish-summary/

    实现会类似

    代码示例

    public void OnItemProcessing(object sender, EventArgs args)
    {
       var itemArgs = args as ItemProcessingEventArgs;
    
       if (itemArgs != null)
       {
           //Retrieve the current Item being published;
    
           var itemId = itemArgs.Context.ItemId;
    
           //Your code here;
       }
    }
    

    配置

    对于 Sitecore 7.x,publish:itemProcessing 位于 Web.config 中,对于 Sitecore 8.x,publish:itemProcessing 位于 Sitecore.config 中strong> 来自 App_Config 文件夹 谢谢

    【讨论】:

    • 那行得通。谢谢!但是,当我运行它时, context.VersionToPublish 始终为空。你知道为什么会这样吗?
    • 太棒了。 VersionToPublish 在项目发布后可用。如果您连接到 publish:itemProcessed,则 VersionToPublish 将不会为空
    【解决方案2】:

    你可以试试 context.ProcessedItemIds

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多