2016-06-02 6 views
1

Sitecore에 사용자 지정 게시 프로세서를 작성하여 항목이 게시 된 정확한 날짜와 시간을 기록 할 수 있습니다. 내가 사용하고있는 코드 (Uli Welterbach의 코드 here)는 오류를 발생시키지 않지만 실제로 게시되는 항목의 ID를 제공하지는 않습니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?Sitecore 게시 프로세서에서 게시 할 항목의 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(); 
     } 

답변

1

파이프 라인은 publish:itemProcessing이어야합니다. 이것은 항목이 게시 될 때 트리거됩니다. 아이템 ID를 얻습니다. 나는 블로그 게시판을 가지고 있는데, 이는 내가 항목을 게시 한 후 트리거되는 publish:itemProcessed을 사용합니다. 링크는 구현이

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웹에서 발견되는 비슷한

코드 샘플을 것 https://hishaamn.wordpress.com/2016/04/07/sitecore-incremental-publish-summary/

입니다. 구성 및 Sitecore 8.x의 경우 publish:itemProcessing은 foun입니다. App_Config 폴더에서 Sitecore.config에서 D 감사

+0

을 시도 할 수 있습니다. 감사! 그러나, 그것을 실행할 때 context.VersionToPublish 항상 null입니다. 그 이유가 뭔지 아십니까? – Ash8087

+0

좋아요. VersionToPublish는 항목이 게시 된 후에 사용할 수 있습니다. 'publish : itemProcessed'에 연결하면 VersionToPublish는 null이되지 않습니다. –

0

당신은 context.ProcessedItemIds

작동
관련 문제