2013-01-31 3 views
7

Tridion 2011의 이벤트 시스템을 사용하여 구성 요소를 게시 취소 할 때 몇 가지 추가 작업을 수행하고 있습니다. 관련 구성 요소를 게시하려면 here 코드를 사용하고 있습니다. 다음과 같이Tridion 2011에서 구성 요소 UnPublish 이벤트에 대한 (해제 된) PublicationTarget을 얻는 방법은 무엇입니까?

내가 내 이벤트 핸들러를 등록 해요 :

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

을 ... 다음과 같이 내 처리기 방법은 다음과 같습니다

내 문제가 UnPublishEventArgs.Targets 속성이 IList<PublishingTarget> 점이다
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}); 
} 

, 런타임에 List<TargetType>으로 밝혀졌고 PublicationTarget 개체를 호출하여 PublishEngine.Publish(...)에 전화 할 수 있어야합니다.

제 질문은 UnPublish 이벤트에서 현재 (un) PublicationTarget을 가져 오는 방법이 있습니까?

누구에게 도움을 줄 수 있습니까?

답변

7

당신은 은 TargetType (들)에서 PublicationTarget (들) 자신을 파악해야합니다. 은 TargetType 당신은 그들이 당신의 출판 그들에게 게시 할 수 있는지 확인하기 위해 PublicationTargets을 반복해야하는 항목의 출판 기준으로합니다. 이것은 (결국) PublicationTargets의 목록을 제공합니다. 불행히도 꽤 많은 일이 있습니다. (

게시판/대상 조합에서 항목을 다시 게시하거나 게시를 취소해야하는 경우 게시 대상이 필요합니다. . PublishEngine.Publish(...) 방법 같은 은 TargetType 배열을 분석

을 나는 문서를 검색 할 때, 나는 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

확인을, 두 번째 단락은 수 ... 더 유망 소리 너는 내게 모범 이니? 'PublishEngine.Publish' 메소드는'IEnumerable '이 아닌'IEnumerable '을 사용합니다. –

+0

Doh는'TargetType'의 배열을 취하는'PublishEngine.Publish()'의 오버로드를 완전히 보지 못했습니다. 감사! –