2013-01-31 39 views
7

我正在使用Tridion 2011的事件系統在取消發佈組件時執行一些其他操作。我正在使用代碼here發佈相關組件。如何在Tridion 2011中獲取組件UnPublish事件的(un-)PublicationTarget?

我登記我的事件處理程序如下:

EventSystem.Subscribe<Component, UnPublishEventArgs>(
    RemoveAndRepublish, EventPhases.Initiated); 

...和我的處理方法如下:

public void RemoveAndRepublish(Component cmp, UnPublishEventArgs args, 
           EventPhases phase) 
{ 
    // ... code to locate related component, and perform required actions... 

    var instruction = new PublishInstruction(cmp.Session) 
    { 
     DeployAt = DateTime.Now, 
     RenderInstruction = new RenderInstruction(cmp.Session) 
     { 
      RenderMode = RenderMode.Publish 
     }, 
     ResolveInstruction = new ResolveInstruction(cmp.Session) 
     { 
      IncludeComponentLinks = true 
     }, 
     RollbackOnFailure = true, 
     StartAt = DateTime.MinValue 
    }; 

    var target = args.Targets.FirstOrDefault(); 

    PublishEngine.Publish(new[] {related}, instruction, new[] {target}); 
} 

我的問題是,UnPublishEventArgs.Targets屬性是一個IList<PublishingTarget>,在運行時結果是一個List<TargetType>,我需要得到一個PublicationTarget對象才能夠調用PublishEngine.Publish(...)

我的問題是:有沒有辦法從UnPublish事件中獲取當前(un-)PublicationTarget?

任何人都可以提供任何幫助嗎?

回答

7

您將需要從TargetType的(一個或多個)找出PublicationTarget(S)自己。基於該TargetType的和項目的出版您將需要通過PublicationTargets迭代,看他們是否允許你的出版發佈到他們。這將(最終)給你一份出版物目錄的列表。不幸的是,這是相當多的工作:(

所有這一切,你真的需要的出版物目標?如果您需要重新發布或取消發佈來自同一出版物/目標組合的項目,您應該能夠。同樣的TargetType陣列解析到PublishEngine.Publish(...)方法

當我搜索的文檔,我看到PublishEngine()以下重寫:

PublishEngine.Publish Method (IEnumerable<(Of <(<'IdentifiableObject>)>)>, PublishInstruction, IEnumerable<(Of <(<'TargetType>)>)>, PublishPriority) 

public static ICollection<PublishTransaction> Publish(
    IEnumerable<IdentifiableObject> items, 
    PublishInstruction publishInstruction, 
    IEnumerable<TargetType> targetTypes, 
    PublishPriority priority 
) 
+0

OK,第二個段落聽起來更有前途...可能你給我舉個例子嗎? 'PublishEngine.Publish'方法需要IEnumerable '而不是'IEnumerable '。 –

+0

Doh,完全沒有看到帶有'TargetType'數組的'PublishEngine.Publish()'的重載。謝謝! –

相關問題