6

Tridion 2011 SP1では、エディターが[保存して閉じる]を押すたびに(保存ではなく)アイテムを自動的に公開するイベントを実装しようとしています。

通常の状態では、これはCheckInイベントで処理できますが、このアイテムはおそらくワークフロー内にあるため、CheckInイベントは(まだ)ありません。

COMイベントでは、エディターが[保存して閉じる]と[保存]を押したかどうかを示すフラグ(doneEditing)がありました。TOM.NETイベントで同様のオプションを見つけることができないようです。

参考までに-これまでのコードは次のとおりです。

[TcmExtension("Publish to Wip Events")]
public class PublishToWip : TcmExtension
{
    public PublishToWip()
    {
        EventSystem.SubscribeAsync<VersionedItem, SaveEventArgs>(PublishItemToWip, EventPhases.TransactionCommitted);
    }
    private void PublishItemToWip(VersionedItem item, SaveEventArgs args, EventPhases phases)
    {
       // Magic goes here
    }
}

SaveEventArgsのオプションを確認しましたが、この情報を提供するものは見つかりませんでした。任意のヒント?

4

3 に答える 3

5

了解しました。CMチームの助けを借りて、私はこれに対する正しい答えを得ました。

保存する代わりにCheckInEventを使用します。アイテムがワークフロー内にある場合でも、[保存して閉じる]をクリックするとこのイベントが呼び出されます([保存して閉じる]をクリックした場合のみ、[保存]をクリックした場合ではありません)。

このような何かが私を動かすでしょう:

[TcmExtension("Publish to Wip Events")]
public class PublishToWip : TcmExtension
{
    public PublishToWip()
    {
        EventSystem.Subscribe<VersionedItem, CheckInEventArgs>
            (PublishItemToWip, EventPhases.Processed);
    }
    private void PublishItemToWip(VersionedItem item, 
        CheckInEventArgs args, EventPhases phases)
    {

        if (!item.LockType.HasFlag(LockType.InWorkflow)) return;

        if (!item.IsCheckedOut) return;
        // do something now
于 2012-04-12T20:03:59.647 に答える
2

私は過去にこれを見ていましたが、適切な解決策を見つけることができませんでした。結局私はあきらめました。

私が持っていたアイデアは、保存をインターセプトするためのGUI拡張機能を用意し、そのアイテムのAppDataエントリを保存またはSaveCloseであると書き込むことでした。次に、イベントシステムはAppDataを読み取り、それに応じて動作します。

イベントコードのAppDataをクリーンアップすることを忘れないでください。

于 2012-04-11T20:14:21.023 に答える
-1

In order to catch item finished workflow you need to subscribe to FinishProcess event on the Process, not on the component:

EventSystem.SubscribeAsync<Process, FinishProcessEventArgs>(FinishProcessHandler, EventPhases.TransactionCommitted, EventSubscriptionOrder.Late);

In the event handler Process instance will contain list of Subjects with the versioned item finished workflow - the one you want to publish:

private static void FinishProcessHandler(Process process, FinishProcessEventArgs e, EventPhases phase)
{
   foreach (var itemInWorkflow in process.Subjects)
   {
      //publish
   }
}
于 2012-04-12T08:02:29.550 に答える