Как получить (не) PublicationTarget для события компонента UnPublish в Tridion 2011?

Я использую систему событий Tridion 2011 для выполнения некоторых дополнительных действий при отмене публикации компонентов. Я использую код, найденный здесь, чтобы опубликовать связанный компонент.

Я регистрирую свой обработчик событий следующим образом:

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(...),

Мой вопрос: есть ли способ получить текущий (не)PublicationTarget из события UnPublish?

Кто-нибудь может предложить какую-либо помощь?

1 ответ

Решение

Вам нужно будет определить PublicationTarget(s) самостоятельно из TargetType (s). На основе TargetType и Publication элемента вам нужно будет выполнить итерации по PublicationTargets, чтобы посмотреть, позволяют ли они опубликовать публикацию в них. Это (в конечном итоге) даст вам список PublicationTargets. К сожалению, это довольно много работы:(

Сказав все это, вам действительно нужна PublicationTarget? Если вам нужно переиздать или отменить публикацию элементов из той же комбинации Publication/Target, вы сможете проанализировать тот же массив 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
)
Другие вопросы по тегам