2013-01-31 18 views
7

Tôi đang sử dụng Hệ thống sự kiện của Tridion 2011 để thực hiện một số hành động bổ sung khi hủy xuất bản thành phần. Tôi đang sử dụng mã được tìm thấy here để xuất bản thành phần có liên quan.Làm thế nào để có được (un-) PublicationTarget cho sự kiện UnPublish thành phần trong Tridion 2011?

Tôi đăng ký xử lý sự kiện của tôi như sau:

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

... và phương pháp xử lý của tôi là như sau:

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

Vấn đề của tôi là UnPublishEventArgs.Targets tài sản là một IList<PublishingTarget>, thời gian chạy là List<TargetType> và tôi cần có đối tượng PublicationTarget để có thể gọi PublishEngine.Publish(...).

Câu hỏi của tôi là: có cách nào để lấy Mục tiêu công khai hiện tại (un-) từ sự kiện UnPublish không?

Có ai có thể cung cấp trợ giúp nào không?

Trả lời

7

Bạn sẽ cần phải tự mình tìm ra các mục tiêu PublicationTarget (s) từ TargetType (s). Dựa trên TargetTypePublication của mặt hàng đó bạn sẽ cần phải lặp qua PublicationTargets để xem nếu họ cho phép bạn Publication xuất bản đối với họ. Điều này (cuối cùng) sẽ cung cấp cho bạn danh sách PublicationTargets. Rất tiếc, đó là khá nhiều công việc: (

Tất cả những gì đã nói, bạn có thực sự cần PublicationTarget? Nếu bạn cần tái xuất bản hoặc hủy xuất bản các mục từ cùng một kết hợp Ấn phẩm/Mục tiêu, bạn sẽ có thể . phân tích cùng TargetType mảng cho phương thức PublishEngine.Publish(...)

Khi tôi tìm kiếm các tài liệu, tôi thấy ghi đè sau trên 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, đoạn thứ 2 có vẻ hứa hẹn hơn ... có thể bạn cho tôi một ví dụ? Phương thức 'PublishEngine.Publish' lấy một' IEnumerable 'không phải là 'IEnumerable '. –

+0

Doh, hoàn toàn không thấy quá tải của 'PublishEngine.Publish()' có một mảng 'TargetType'. Cảm ơn! –