5

SDL Tridion 2011 SP1 を使用して GUI 拡張機能を構築しています。編集者が新しい「保存してコメント」ボタンを押したときに、ユーザー入力を収集したいと考えています。このボタンはユーザー入力を収集し、CME の組み込みの保存コマンドをトリガーします。

次に、イベント ハンドラーを使用して、そのユーザー入力をキャッチし、カスタム処理を行います。私の単純なイベントハンドラーは次のとおりです。

using System;
using System.Text;
using Tridion.ContentManager.Extensibility.Events;
using Tridion.ContentManager.Extensibility;
using Tridion.ContentManager.ContentManagement;
using System.IO;

namespace UrbanCherry.Net.SDLTridion.EventHandlers
{
  [TcmExtension("VersionCommenting")]
  public class VersionCommenting : TcmExtension
  {
    public VersionCommenting()
    {
      Subscribe();
    }

    public void Subscribe()
    {
      EventSystem.Subscribe<Component, SaveEventArgs>(AddCommentToItemVersion,
                                                      EventPhases.Initiated);
    }

    private void AddCommentToItemVersion(Component source, SaveEventArgs args,
                                         EventPhases phase)
    {
      //Do some work here   
    }
  }
}

または他の方法を使用して、GUI 拡張機能が何らかの方法で SaveEventArgs に値を追加することは可能args.ContextVariablesですか?

4

2 に答える 2

1

GUI 拡張機能からイベント ハンドラーにパラメーターを直接渡す方法はありません。したがって、私が想像できる唯一の方法は、追加情報を既存のデータ構造にピギーバックすることです。アプリケーション データ (Will が示唆するように) はそのようなデータ構造の 1 つですが、情報を既存の Component XML にピギーバックすることも検討できます。

GUI 拡張機能とイベント ハンドラーの両方があるため、後者でこれらの変更を「元に戻す」限り、基本的に前者でやりたいことは何でもできます。

だから私が想像できる1つの方法:

  1. GUI 拡張機能で、コメントを含むカスタム要素をコンポーネント XML に挿入します。
  2. イベント ハンドラーで、コメントを抽出し、カスタム要素を削除します

私はこのアプローチをテストしていませんが、カスタム データ エクステンダーで同様のことを行いました。サーバーに送信されるコマンドまたはデータを変更し、サーバー上でその変更を検出して対応します (TCM に渡す前に)。

もちろん、この場合のイベント ハンドラーが、前のフェーズの 1 つでコンポーネント XML からコメントを削除することを確認する必要があります。

安全に実行したい場合は、非常に初期のイベント フェーズでコンポーネント XML からコメントを削除し、コミット前/コミット後のフェーズでのみコメントを保存する必要があります。これらのフェーズの間に、コメントをどこかに保存する必要がありますが、少なくともデータはそれまでに GUI からサーバーに送信されます。

于 2012-07-05T17:24:48.163 に答える
1

単なるアイデアであり、GUI 拡張機能で実際にそれを行う方法はわかりませんが、ボタンをクリックしたときにアイテムのアプリケーション データとしてコメントを設定することを考えたことはありますか?

于 2012-06-27T18:04:27.190 に答える