9

SDL Tridion 2009 SP1 を使用しています。ページをロックできる CMS の拡張機能である新しい機能を実装しました。ページがロックされている場合、そのページは公開できません (ロックされているページの情報は、この拡張機能用に作成されたデータベースに保持されます)。

ページの新しいステータスをユーザーに通知する新しいアイコンを追加します。

現在、4 つのアイコンの組み合わせがあります (アクションなし、チェック済み、公開済み、チェック済み、公開済み)。

私は CMS インターフェースの経験が長いわけではないので、パフォーマンスに影響を与えず、多くの変更を行わないという点で簡単に実装できるソリューションを見つけるための助けが必要です。

以下は、これに関する私の調査です。

cms でアイコンがレンダリングされる方法は、簡単に更新できる単純なメカニズムではないことに気付きました。CMS の左側のアイテムをクリックするたびに、右側からリストをレンダリングするために、WebGUIResponder.aspx に対して ajax 呼び出し (xml 要求を使用) が行われます。ページ。

返される応答は、属性フィールド Icon を含む xml です。

<tcm:ListItems xmlns:tcm="http://www.tridion.com/ContentManager/5.0" 
    ID="tcm:yyy-zzzz-4" Managed="68" ItemType="4">
    <tcm:Item ID="tcm:yyy-zzzzz-64" Type="64" Title="NotificationTest" 
        Modified="2011-05-09T09:42:27" FromPub="400 YYYY Website Master (EN-GB)" 
        IsNew="false" Icon="T64L0P1"/>
</tcm:ListItems>

このフィールド アイコン属性 (Icon="T64L0P1) に基づいて、イメージ名の処理が開始されます。

  • T64 = ページであることを意味します
  • L0 = チェックされていません
  • P1 = すでに公開されている

このようなフィールドの場合、画像名の結果は = T64.16x16.List.Published.gif になります。

ページ xml を介してこのフィールドを更新する方法が見つかりませんでした。これは、xml に保持されている情報ではなく、xml 要求時に dll に組み込まれている情報です。(公開された他のフィールドに基づいて、この Icon フィールドが計算されます。)

したがって、このフィールドを変更できない場合は、以下のオプションがあります。 dll) であり、私が考えていたロジックをあまり変更せずに、このアプローチを採用しました。

新しいページ WebGUICheckPageLocked.aspx への新しい Ajax 呼び出しを行うことができます (パフォーマンスへの影響をテストする必要があります)。このページのコード ビハインドでは、ページがロックされているかどうかを判断できます (ページがロックされているかどうかを判断する内部関数を使用して、この機能は既に実行されています)。このページで、アイコン フィールドを T64L0P1E01 に変更します (ページの新しいステータスを判断できるようにするための追加情報を追加します)。また、GetPNGIconName javascript 関数を変更して、新しい情報 E01 を考慮して追加のチェックを行うことができます ...)

誰かがこれについてより良いアイデアを持っている場合は、おそらくそれは簡単に実行できるものであり、アイコンフィールドを更新できる方法である可能性があります.

敬具、 クリスティーナ

4

1 に答える 1

5

フォーラムからの回答をここに貼り付けて、誰もが見ることができるようにします (そして、別の方法についてアイデアを持ち込むこともできますか?)...

2011 年には、Data Extender を使用してアイコンを変更しました。

これは 2009 年であるため、あまり洗練されていない前身である GUI Responder Extension を使用する必要があります。基本的に、関連する要求 (フォルダーの GetList など) に対して返される XML を操作する必要があります。

これに関するドキュメントをすぐに見つけることができませんでした。これは古いバージョンであるため、驚くべきことではありません。しかし、要約すると次のようになります。

  1. 次のメソッド シグネチャと属性を持つクラスを含む .NET アセンブリを作成します。
    [ResponseMessageHandler]
    public XmlDocument HandleMessage(XmlDocument messageXml, string userName, HttpContext httpContext, object tcmSession)
  1. そのメソッドでは、独自のロジックに基づいて XML に設定されたアイコンを変更できます。
  2. 拡張構成ファイルで、関心のあるリストの応答にフックするセクションを追加します (「YourResponderExtension.dll」を、追加したアセンブリの名前に置き換えます)。
<ProcessResponse>
    <!-- GetList -->
    <ExecuteWhen>/tcmapi:Message/tcmapi:Response/tcmapi:Request/tcmapi:GetList</ExecuteWhen>                                                                                    

    <!-- Handler for all of the above -->
    <Execute>/bin/YourResponderExtension.dll</Execute>
</ProcessResponse>
  1. 該当する場合は の前にさらに要素を追加し、XPath クエリをできるだけ具体的にして、拡張機能が不必要に呼び出されないようにします。また、XPath クエリでは実行できない .NET コードのケースをさらに確認する必要がある場合もあります。
  2. 拡張機能を圧縮し、TcmExtensionInstaller.exe で展開します。

あなたのテキストから、2009 年に拡張機能を作成してパッケージ化する方法をすでに考え出していたと思います。これらの小さなステップがあなたの出発点になることを願っています。

問題やフォローアップの質問がある場合は、お知らせください。お答えできるかどうかを確認いたします。

于 2012-05-03T08:24:43.883 に答える