7

コンポーネントの非公開時にいくつかの追加アクションを実行するために、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>取得する必要があることです。PublicationTargetPublishEngine.Publish(...)

私の質問は: 現在の (un-)PublicationTarget を UnPublish イベントから取得する方法はありますか?

誰でも助けを提供できますか?

4

1 に答える 1

7

TargetType(s)からPublicationTarget(s)を自分で把握する必要があります。アイテムのTargetTypePublicationに基づいて、PublicationTargetsを反復処理して、Publicationがそれらに公開できるかどうかを確認する必要があります。これにより、(最終的に) 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
)
于 2013-01-31T16:39:48.413 に答える