Как получить (не) 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
)