ヘッダーをスキップ
Oracle® Fusion Middleware WebCenter Sites開発者ガイド
11gリリース1 (11.1.1.8.0)
E49681-03
  ドキュメント・ライブラリへ移動
ライブラリ
製品リストへ移動
製品
目次へ移動
目次

前
 
次
 

92 Gadgets: テンプレート・フロー

この章では、Listガジェットを例にして、テンプレート実行フローについて説明します。

92.1 Listガジェットのテンプレート・フロー

設計上、ガジェットのディスクリプタXMLをリクエストする唯一の方法は、FW_CSGadgetアセットのGenerateGadgetXMLテンプレートを起動することです。このテンプレートを起動すると、図92-1とその説明で示されているように、レンダリング・プロセスが開始します。

図92-1 ガジェットのXML出力

図92-1の説明が続きます
「図92-1 ガジェットのXML出力」の説明

  1. GenerateGadgetXMLは、最初にXML宣言を出力します。これは、すべてのXMLドキュメントで推奨される機能です。プロセスの最初にXML宣言を出力することによって、ガジェット開発者は、記述するすべてのガジェットでこのことを考慮せずに済むようになります。

  2. 次に、GenerateGadgetXMLは、渡されたc (FW_CSGadget)およびcid (ListGadgetのid)に対応するアセットをロードし、descriptortemplateの値を検索します。


    注意:

    ccidの組合せは、WebCenter Sitesシステム内の特定のアセットをポイントします。パラメータcはアセットのタイプであり、cidはアセットの識別子です。この情報は、テンプレートの起動時に毎回必要になります。


  3. GenerateGadgetXMLは、descriptortemplateフィールドのテンプレートを起動し(Listガジェットの場合はFW_CSTemplate/G_List)、手順0と同じcおよびcidを渡します。

    G_Listテンプレート自体は、外部からコールできないこと(SiteCatalogエントリのpageletonlyフィールドがTに設定されている)に注意してください。この設定では、(たとえば、コールされるように設計されていない場合、)テンプレートの直接的なコールが禁止されます。

  4. コールされたテンプレートG_Listは、ガジェット・ディスクリプタXMLの本体すべてを出力します。この時点で、ガジェット・ディスクリプタXMLは完全なものになります。


    注意:

    ガジェット・ディスクリプタXMLの作成に関する追加リソースのリンクについては、第91.1項「始める前に」を参照してください。


ディスクリプタXMLに基づいてガジェットがレンダリングされたら、ガジェットはそのコンテンツを取得します。図92-2は、Listガジェットがコンテンツを取得する様子を示しています。このプロセスはガジェットごとに異なります。Listガジェットは、G_Listテンプレートが出力する次のJavaScriptによって、WebCenter Sitesから記事を取得します(コードのこの行は、Google Gadgets APIをコールします)。

gadgets.io.makeRequest(url, handleJson, params);

G_Listテンプレートは、このガジェットのDataAsset (この場合は、Recommendation)をポイントする追加のWebCenter Sites URLを作成します。これは、そのアセット・タイプ用のG_JSONテンプレートを通じて行われます。このURLは、最終的にgadgets.io.makeRequest関数に渡されます。この関数を使用して、XML、JSON、Atom/RSSなどの各種の形式のデータに対応する追加のリモート・サーバー・コールを行うことができます。このリクエストによって、コンテンツ取得プロセスが開始されます。

図92-2 コンテンツの取得

図92-2の説明が続きます
「図92-2 コンテンツの取得」の取得

  1. XML本体内のガジェット・コードがAdvCols/G_JSONテンプレートを起動し、JSONレスポンスの開始を準備します。Recommendationsには他のアセットのリストが含まれているため、このテンプレートは単にJSON配列の出力を開始してから、アセットのリストをループ処理し、各アセットでそれぞれのG_JSONテンプレートをコールします。

  2. Listガジェットの場合、すべての子はコンテンツ・アセットであるため、Recommendation内のアセットごとにContent_C/G_JSONが起動されます。Content_C/G_JSONテンプレートは、起動されるたびに完全なJSONオブジェクト表現を出力します。このJSONオブジェクト表現には、そのアセットの該当するフィールドが含まれます。

  3. Content_C/G_JSONの各コールの間に、AdvCols/G_JSONは、構築する配列内のオブジェクトを正しく区切るためにコンマを出力します。ループが完了すると、AdvCols/G_JSONテンプレートは配列を閉じます。

  4. この配列は、ガジェット・コード(gadgets.io.makeRequest(url, handleJson, params);)によって受け取られます。このガジェット・コードは、元のmakeRequestコールの指示に従って、handleJsonコールバック関数を実行します。handleJson関数は、コンテンツをHTMLでラップします。このHTMLは、そのガジェットのビュー(この例ではリスト・ビュー)をレンダリングします。

92.2 テンプレート・フローの違い

前の項では、Listガジェットのテンプレート・フローについて説明しました。他のサンプル・ガジェットのテンプレート・フローもよく似ていますが、WebCenter Sitesのテンプレート・ロジックの違いは注目に値します。

92.2.1 ThumbListとSlideshow

WebCenter Sitesでのガジェットのレンダリング手順は、Listガジェットのものに酷似しています。主な違いは、AdvCols/G_JSONテンプレートによって何が起動されるかです。ListガジェットはContentアセットが格納されたRecommendationを参照しますが、ThumbListガジェットとSlideshowガジェットは、Productアセットが格納されたRecommendationを参照します。また、これらのガジェットではProduct_C/G_JSONテンプレートのレスポンス固有の属性を調査します(これには、Media_C/G_JSONテンプレートによって生成されるデータも含まれます)。

92.2.2 RSS

RSSガジェットの2つ目のリクエストは、RSSフィードのURLに対して直接発行されます。これは、WebCenter Sites内にある場合もあれば、そうでない場合もあります。このURLは、関連付けられたFW_RSSアセットから読み取られます。このアセットはG_RSSテンプレート内でロードされます。

92.3 サーバー・コールが個別に行われる理由

追加のサーバー・コールがなぜ行われるのか、疑問に思うかもしれません。たとえば、Listガジェットのすべての記事をG_Listテンプレート自体から取得しないのはなぜでしょうか。その答えは2つあります。

  1. ガジェット・ディスクリプタXMLをガジェット・コンテナでキャッシュ可能にしている可能性があります。これは、XML内に一時的なデータを埋め込まないようにする必要があることを意味します。

  2. 追加のサーバー・コールは、プレゼンテーション・ロジック(たとえば、G_List内)を、下層のモデル(アセット・タイプのG_JSONテンプレート内)から分離するのに役立ちます。