2013-01-31 11 views
7

Bileşenlerin yayınlanmaması sırasında bazı ek işlemler gerçekleştirmek için Tridion 2011'in Olay Sistemini kullanıyorum. İlgili bir bileşeni yayınlamak için here kodunu kullanıyorum. aşağıdaki gibiTridion 2011'de UnPublish bileşeninin (un-) PublicationTarget'i nasıl edinilir?

benim olay işleyicisi kayıt ediyorum:

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

... ve şöyle benim işleyicisi yöntemidir:

Sorunum UnPublishEventArgs.Targets özelliği bir IList<PublishingTarget> olmasıdır
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}); 
} 

, Çalışma zamanında List<TargetType> olması ve PublishEngine.Publish(...) arayabilmesi için PublicationTarget nesnesi almam gerekiyor.

Sorum şu: Bir UnPublish olayından güncel (un) PublicationTarget'i almanın bir yolu var mı?

Herhangi biri size herhangi bir yardım sunabilir mi?

cevap

7

Sen TargetType (ler) den PublicationTarget (ler) kendinizi anlamaya gerekecektir. TargetType ve kullanıcıların Yayın onlara yayımlamak için izin olmadığını görmek için PublicationTargets yineleme yapmak gerekecektir öğenin Yayını dayanarak. Bu (sonuçta) size PublicationTargets'un bir listesini verecektir. Maalesef bu işin :(oldukça çok

Eğer yeniden yayınlamak veya aynı Publication/Hedef kombinasyonundan öğelerin yayınını gerekirse gerçekten? PublicationTarget gerekiyor, Bütün bunlar, sen gerekir ise . PublishEngine.Publish(...) yönteme aynı TargetType dizi ayrıştırmak

Ben dokümanları aramak, ben PublishEngine() aşağıdaki geçersiz kılma bakın:

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

Tamam, 2. paragraf olabilir ... daha umut verici bana bir örnek verirsin? 'PublishEngine.Publish' yöntemi' IEnumerable '' IEnumerable 'değil. –

+0

Doh, "TargetType" dizisini içeren PublishEngine.Publish() 'ın aşırı yüklenmesini tamamen göremedi. Teşekkürler! –