8

CME のリスト (フォルダーと構造グループ) をブラウズするときに、いくつかの項目の追加列を適切に表示するデータ エクステンダー クラスとエディター拡張機能を作成しました。GetList、GetListSearch、GetListUserFavorites、GetListCheckedOutItems などのコマンドを処理するには、クラスを登録する必要がありました。

私が気付いたのは、たとえばスキーマのリストがCMEのドロップダウンリストにロードされている場合でもコードが実行されることです(新しいコンポーネントを作成し、ドロップダウンでスキーマのリストを取得する場合など) . そのため、その状況では追加のデータ列は必要ありませんが、コードはまだ実行されており、処理が遅くなります。

そのような状況で呼び出されるのは GetList コマンドのようです。だから、コマンドに基づいて処理をスキップすることはできません。そのため、クラスがリスト用に受け取る XML を調べ始めたところ、ドロップダウン用のコードを実行すると、XML に があることに気付きましたManaged="0"。例えば:

  • 構造グループ リストの場合:<tcm:ListItems Managed="64" ID="tcm:103-546-4">
  • フォルダ リストの場合:<tcm:ListItems Managed="16" ID="tcm:103-411-2">
  • ただし、スキーマ リストの場合:<tcm:ListItems ID="tcm:0-103-1" Managed="0">
  • カテゴリのキーワード値を表示するドロップダウンの場合:<tcm:ListItems Managed="0" ID="tcm:103-506-512">

では、この Managed="0" をフラグとして使用して、処理中のリストに追加の列が表示されず、処理を終了できることを示すことができますか?

4

4 に答える 4

8

Managedvalue は、内部で作成できるアイテムの表現ですOrganizationItem:

  • 64 は、ページを作成できることを意味します
  • 16 は、コンポーネントを作成できることを意味します
  • たとえば、10 は、フォルダー (2) + スキーマ (8) を作成できることを意味します。
  • 518 - フォルダ (2) + 構造グループ (4) + カテゴリ (512)

非組織アイテムの値は 0 です。

値は、アイテム自体 (たとえば、フォルダー内にページを作成することはできません) に依存するだけでなく、パブリケーションおよび組織アイテムに対するセキュリティ設定にも依存します。

于 2012-08-14T09:16:00.953 に答える
7

残念ながら、CME は現在、特定の WCF API 呼び出しがどこから来ているかをデータ エクステンダーで伝えることができるような粒度レベルを提供できません。私たちの WCF API は、まだコンテキストを認識していません。今後変更になる可能性があります。

Managed="0" を信頼することは良い考えではありません。その理由は、モデル リストがフィルターごとにクライアントにキャッシュされるためです。現在の設計では、フィルターには CM 関連のデータがあり、要求が開始されたコンテキストに関連するものは何もありません。通常、クライアント ユーザー インターフェイスは、キャッシュされたモデル データを可能な限り再利用します。たとえば、同じモデル リストを CME ダッシュボードで使用し、いくつかのアイテム ビューに配置されたドロップ ダウン コントロールを使用できますが、xml リスト定義は異なります。最初のリスト定義では、後者よりも多くの列がリスト定義で定義されます。これらは基本的に、同じデータの異なるビューです。

したがって、問題に対してさまざまな解決策を考えたいと思うかもしれません。さて...これらの追加の列の背後にあるデータはどこから来ているのでしょうか? Tridion CM ですか、それともサードパーティ プロバイダーですか? 場合によっては、Web サーバーのキャッシングによって、応答時間を改善するための適切な方法が提供されることがあります。しかし、それは評価して決定する必要がある種類の設計です。

于 2012-08-29T09:55:39.383 に答える
3

リストの ID を読み取り、タイプ 2 と 4 (それぞれフォルダーと構造グループ) のリストに対してのみコードを実行すると、より堅牢なソリューションが得られると思います。しかし、それは検索ビューなどには役立ちません。

于 2012-08-13T18:42:16.040 に答える
2

以前の経験と User978511 の言うことから、Managed属性はそのリストのコンテキストから作成できる項目タイプを示しています。

残念ながら、これは、Managedアイテムを作成するのに十分な権限を持たないユーザーの場合、属性が 0 になる可能性があることを意味します。たとえばManaged、ページまたは構造グループの作成を許可されていないユーザーの構造グループの内容を確認します。その場合もそうかもしれませ0ん。つまり、あなたの状況では役に立たないということです。

アップデート

columnsパラメータを確認することで、目標をより適切に達成できる場合があります。

context.Parameters["columns"]

私が実行したいくつかのテストでは、メイン リスト ビュー、ツリー、またはドロップダウン リストのリストを取得するかどうかに応じて、異なる値を取得します。

543
 23
  7

これらの値は、これらの定数のビット マスクです (からConstants.js)。

/**
 * Defines the column filter.
 * Used to specify which attributes should be included in XML list data.
 * @enum
 */
Tridion.Constants.ColumnFilter =
{
    ID: 1,
    ID_AND_TITLE: 3,
    DEFAULT: 7,
    EXTENDED: 15,
    ALLOWED_ACTIONS: 16,
    VERSIONS: 32,
    INTERNALS: 64,
    URL: 128,
    XML_NAME: 256,
    CHECK_OUT_USER: 512,
    PUBTITLE_AND_ITEM_PATH: 1024
};

したがって、私の限られたテストではDEFAULT、メイン リスト ビューとツリーの両方がALLOWED_ACTIONSそこにある一方で、ドロップ ダウン要求列が表示されるようです。ユーザーはツリーとリスト ビューのリスト アイテムを操作できますが、ドロップダウンでしか選択できないため、これは私には理にかなっています。したがってALLOWED_ACTIONScolumnsパラメーター内の の存在を確認することは、データ エクステンダーが情報を追加する場所の数を減らす 1 つの方法かもしれません。

于 2012-08-13T18:37:35.733 に答える