C# 如何获得2011年Tridion组件未发布事件的(联合国)发布目标?

C# 如何获得2011年Tridion组件未发布事件的(联合国)发布目标?,c#,tridion,tridion-2011,C#,Tridion,Tridion 2011,我正在使用Tridion2011的事件系统在取消发布组件时执行一些额外的操作。我正在使用找到的代码发布相关组件 我正在注册我的事件处理程序,如下所示: EventSystem.Subscribe<Component, UnPublishEventArgs>( RemoveAndRepublish, EventPhases.Initiated); public void RemoveAndRepublish(Component cmp, UnPublishEventArgs

我正在使用Tridion2011的事件系统在取消发布组件时执行一些额外的操作。我正在使用找到的代码发布相关组件

我正在注册我的事件处理程序,如下所示:

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
,在运行时它是一个
列表
,我需要获得一个
PublicationTarget
对象才能调用
PublishEngine.Publish(…)

我的问题是:有没有办法从未发布的事件中获取当前(未发布)的PublicationTarget


有人能提供帮助吗?

您需要自己从TargetType中找出发布目标。根据TargetType和项目的发布,您需要迭代PublicationTargets,查看它们是否允许您的发布发布到它们。这将(最终)为您提供一个发布目标列表。不幸的是,这是相当多的工作:(

综上所述,您真的需要PublicationTarget吗?如果您需要重新发布或取消发布来自相同发布/目标组合的项目,您应该能够将相同的TargetType数组解析为
PublishingLine.publish(…)
方法

搜索文档时,我在PublishingLine()上看到以下覆盖:

PublishEngine.Publish方法(IEnumerable)>)>,PublishPriority)
公共静态ICollection发布(
i数不清的项目,
发布指令发布指令,
i无数目标类型,
出版优先权
)

好的,第二段听起来更有希望。。。你能给我举个例子吗?
PublishEngine.Publish
方法采用
IEnumerable
而非
IEnumerable
.Doh,完全没有看到采用
TargetType
数组的
PublishEngine.Publish()
的重载。谢谢
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
)