Jam*_*imm 7 c# tridion tridion-2011
我正在使用Tridion 2011的事件系统在取消发布组件时执行一些额外的操作.我正在使用此处的代码发布相关组件.
我正在注册我的事件处理程序如下:
EventSystem.Subscribe<Component, UnPublishEventArgs>(
RemoveAndRepublish, EventPhases.Initiated);
Run Code Online (Sandbox Code Playgroud)
...我的处理程序方法如下:
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});
}
Run Code Online (Sandbox Code Playgroud)
我的问题是UnPublishEventArgs.Targets属性是一个IList<PublishingTarget>,在运行时结果是一个List<TargetType>,我需要一个PublicationTarget对象能够调用PublishEngine.Publish(...).
我的问题是:有没有办法从UnPublish事件中获取当前(un-)PublicationTarget?
有人可以提供任何帮助吗?
您需要自己从TargetType中找出PublicationTarget.根据TargetType和项目的发布,您需要遍历PublicationTargets以查看它们是否允许您的出版物发布给它们.这将(最终)为您提供PublicationTargets列表.不幸的是,这是相当多的工作:(
总而言之,你真的需要PublicationTarget吗?如果您需要重新发布或来自同一刊物/目标组合取消发布的项目,你应该能够解析相同的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
)
Run Code Online (Sandbox Code Playgroud)