2012-06-27 4 views
5

SDL Tridion 2011 SP1を使用してGUI拡張を構築しています。エディターが新しい「保存してコメント」ボタンを押すと、ユーザー入力を収集したいと思います。このボタンはユーザー入力を収集し、CMEの組み込みの保存コマンドをトリガーします。SDL Tridion 2011 GUI Extensionの値をイベントハンドラのSaveEventArgsに渡すことは可能ですか

イベントハンドラを使用して、そのユーザー入力を受け取り、カスタム処理を行いたいと思います。 args.ContextVariablesまたはいくつかの他の方法のいずれかを使用して、

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 
    } 
    } 
} 

それは何とかSaveEventArgsに値を追加するには、私のGUIの拡張は可能です:次のように私の単純なイベントハンドラがありますか?

+0

イベント間で状態を混在させることはお勧めしません。複数のユーザーが[ほぼ同時に] Save and Commentボタンをクリックするとどうなりますか、どのようにそれらを追跡しますか? –

+0

コメントをメタデータフィールドに保存しますか? –

+0

私は実際にロールバック/フォワードで使用されたコメントフィールドにそれを保存したいと考えていますが、それは次のチャレンジです。 –

答えて

1

GUI拡張からイベントハンドラにパラメータを直接渡す方法はありません。私が想像できる唯一の方法は、既存のデータ構造に追加情報を追加することです。アプリケーションデータ(推奨)はそのようなデータ構造の1つですが、は既存のコンポーネントXMLに情報を追加することも考えられます。

GUI拡張とイベントハンドラの両方を持っているので、後者の変更を元に戻す限り、前者でも何でもできます。

だから私は想像することができる一つの方法:あなたのGUIの拡張で

  1. 、あなたのイベントハンドラ内のコンポーネントXML
  2. にコメントしてカスタム要素を注入し、コメントを抽出し、カスタム要素を削除

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

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

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

+0

あなたはスキーマのフィールドを定義することなく、コンテンツXMLにカスタムフィールド+値としてコメントを追加することを意味しますか? –

+0

これは一方的な方法ですが、おそらく "偽のフィールド"がコンテンツを無効にしないようにFieldBuilderを強化する必要があります。また、Component XMLの他の部分に埋め込むこともできますし、必要に応じてTitleに追加することもできます。覚えておいてください:方程式の両辺を書いているので、あなたは何が起こるのかを完全にコントロールしています。 –

1

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

+0

Yup - その考え - コンテンツポーティングなどできないので最後の手段と考えていますロールバック、ロールフォワード、アップデートなどに使用されている「システムコメント」フィールドがすでにあるので、できるならそれを活用したいと思っています。おそらく、私は、Component.Save(Boolean FinishEditing、String Comment)のようなものをAPIに追加するようにリクエストを強化する必要があります。 –

+0

Appデータを一時ストレージとして使用して、GUIからイベントシステムにデータを渡して、あなたがシステムのコメントに入れたときにそれをApp Dataから削除する – Will

+0

うん、私はそれが私がしなければならないと思う。私はよりエレガントなアプローチがあることを望んでいた –

関連する問題