2013-01-31 5 views
7

Ich verwende das Ereignissystem von Tridion 2011, um einige zusätzliche Aktionen auszuführen, wenn ich Komponenten entpacke. Ich verwende den Code here, um eine verwandte Komponente zu veröffentlichen.Wie erhalte ich das (Un-) PublicationTarget für die Komponente UnPublish-Ereignis in Tridion 2011?

ich mein Event-Handler-Registrierung wie folgt:

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

... und meine Handler-Methode ist wie folgt:

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}); 
} 

Mein Problem ist, dass die UnPublishEventArgs.Targets Eigenschaft ist ein IList<PublishingTarget>, was zur Laufzeit stellt sich heraus, ein List<TargetType>, und ich muss ein PublicationTarget Objekt zu PublishEngine.Publish(...) aufrufen können.

Meine Frage ist: Gibt es eine Möglichkeit, das aktuelle (Un-) PublicationTarget von einem UnPublish-Ereignis zu bekommen?

Kann mir jemand Hilfe anbieten?

Antwort

7

Sie müssen die PublicationTarget herauszufinden (n) sich von der Target (n). Basierend auf dem Target und die Veröffentlichung des Elements müssen Sie durch den PublicationTargets iterieren zu sehen, ob sie sie Ihre Veröffentlichung veröffentlichen können. Dies wird Ihnen (eventuell) eine Liste von Publikationstargets geben. Leider ist das eine Menge Arbeit ganz :(

Alles, was gesagt, brauchen Sie wirklich die PublicationTarget? Wenn Sie erneut veröffentlichen müssen oder un-veröffentlichen Artikel aus der gleichen Publikation/Ziel-Kombination, sollten Sie in der Lage sein, . parse die gleichen Target Array auf die PublishEngine.Publish(...) Methode

Wenn ich die Dokumentation suchen, ich die folgende Überschreibung auf PublishEngine sehen():

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, klingt der zweite Absatz vielversprechender ... könnte Sie geben mir ein Beispiel? Die Methode 'PublishEngine.Publish' verwendet ein' IEnumerable 'nicht' IEnumerable '. –

+0

Doh, habe die Überladung von 'PublishEngine.Publish()', die ein Array von 'TargetType' braucht, nicht gesehen. Vielen Dank! –