ヘッダーをスキップ
Oracle Fusion Middleware Oracle Business Intelligence Publisherレポート・デザイナーズ・ガイド
11gリリース1 (11.1.1)
B63038-04
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

13 RTFサブ・テンプレートの設計

この章では、RTFサブ・テンプレートを使用して機能を作成し、複数のBI Publisherレポート間で機能を再利用する方法について説明します。

この章の内容は次のとおりです。

13.1 RTFサブ・テンプレートの理解

RTFサブ・テンプレートは、1つ以上の<?template:?>定義で構成されたRTFファイルであり、各定義には書式設定またはコマンドのブロックが含まれています。

RTFファイルは、カタログ内のサブ・テンプレート・オブジェクトとしてBI Publisherにアップロードするとき、他のRTFテンプレートからコールすることができます。

図13-1は、RTFサブ・テンプレートの構成を示しています。

図13-1 RTFサブ・テンプレートの構成

図13-1の説明が続きます
「図13-1 RTFサブ・テンプレートの構成」の説明

13.2 RTFサブ・テンプレートの作成と実装処理の概要

サブ・テンプレートは次の手順で使用します(後述の各項で説明します)。

  1. 他のテンプレート内に含める、共通コンポーネントまたは処理命令がふくまれたRTFファイルを作成します。

  2. コールまたはメインのレイアウトを作成し、次の2つのコマンドを含めます。

    • import - メイン・レイアウト・テンプレートにサブ・テンプレート・ファイルをインポートします。

    • call-template - メイン・レイアウト内でサブ・テンプレートの内容を実行またはレンダリングします。

  3. テンプレートおよびサブ・テンプレートをテストします。


    ヒント:

    BI Publisher Desktop Template Viewerを使用すると、メイン・レイアウトとサブ・テンプレートをカタログにロードする前にテストできます。これを行うには、ローカル環境内のサブ・テンプレートをポイントするようにインポート・テンプレートの構文を変更する必要があります。第12.3項「デスクトップからのサブ・テンプレートのテスト」を参照してください。


  4. メイン・テンプレートをレポート定義にアップロードし、カタログ内にサブ・テンプレートを作成します。第12.4項「カタログでのサブ・テンプレート・オブジェクトの作成」を参照してください。

13.3 RTFサブ・テンプレート・ファイルの作成

RTFファイルにコンポーネントまたは指示を入力します。指示をサブ・テンプレートとして定義するには、内容を次のタグで囲みます。

<?template:template_name?>
      ..subtemplate contents...
<?end template?>

説明:

template_nameは、選択するサブ・テンプレートの名前です。

単一のRTFファイルの場合、複数の項目を指定できます。

<?template:template_name?> 
<?end template?>

異なるサブ・テンプレートまたはセグメントを指定して、他のファイルに含めることができます。

たとえば、図13-2に示すサンプルのRTFファイルには、commonHeaderという名前と、commonFooterという名前の2つのサブ・テンプレートが含まれています。

図13-2 サンプルのRTFファイル

図13-2の説明が続きます
「図13-2 サンプルのRTFファイル」の説明

13.4 メイン・テンプレートからのサブ・テンプレートのコール

サブ・テンプレートをメイン・テンプレートに実装するには、メイン・テンプレートに2つのエントリを作成する必要があります。

最初に、メイン・テンプレートにサブ・テンプレートをインポートします。インポートの構文で、カタログ内のサブ・テンプレートを検出するBI Publisherエンジンを指定します。

次に、サブ・テンプレートの内容をレンダリングするコール・コマンドを必要な位置に入力します。

13.4.1 メイン・テンプレートへのサブ・テンプレートのインポート

メイン・テンプレート内のコール・テンプレート・コマンドより前の任意の位置にインポート・コマンドを入力します。

ロケールが必要ない場合は、次のように入力します。

<?import:xdoxsl:///path to subtemplate.xsb?>

説明:

path to subtemplate.xsbは、カタログ内のサブ・テンプレート.xsbオブジェクトへのパスです。

たとえば、次のように入力します。

<?import:xdoxsl:///Executive/HR_Reports/mySubtemplate.xsb?>

注意:

サブ・テンプレートが、「マイ・フォルダ」の下位の個人フォルダにある場合、サブ・テンプレートをインポートするコマンドは次のとおりです。

<?import:xdoxsl:///~username/path to subtemplate.xsb?>

このusernameはユーザー名です。

たとえば、ユーザーmyuserが、「マイ・フォルダ」の下位のSubtemplatesというフォルダにTemplate1というサブ・テンプレートをアップロードする場合、正しいインポート文は次のようになります。

<?import:xdoxsl:///~myuser/Subtemplates/Template1.xsb?>

13.4.2 サブ・テンプレートの内容をレンダリングするためのコール

サブ・テンプレートをコールしてその内容をレンダリングする手順は次のとおりです。

  1. サブ・テンプレートをレンダリングするメイン・テンプレート内の位置で、次のようにcall-templateコマンドを入力します。

    <?call-template:template_name?>
    

    説明:

    template_nameは、サブ・テンプレート・ファイル内のテンプレート宣言文の内容に割り当てる名前です(<?template:template_name?>文のように指定します)。

図13-3は、メイン・テンプレートで必要なエントリを示しています。

図13-3 メイン・テンプレートで必要なエントリ

図13-3の説明が続きます
「図13-3 メイン・テンプレートで必要なエントリ」の説明

13.4.3 ローカライズ済サブ・テンプレートのインポート

インポートしたサブ・テンプレートのロケールを指定するには、次のようにインポート文にロケールを追加します。

<?import:xdoxsl:///{path to subtemplate.xsb}?loc={locale_name}?>

説明:

path to subtemplate.xsbは、カタログ内のサブ・テンプレート.xsbオブジェクトへのパスです。

および

locale_nameは、ロケールを構成する言語-地域の組合せです。ロケールの指定は、オプションです。

たとえば、次のように入力します。

<?import:xdoxsl:///Executive/HR_Reports/mySubtemplate.xsb?loc=en-US?>

また、${_XDOLOCALE}を使用して、実行時のユーザー・ロケールに基づいてローカライズ済サブ・テンプレートをインポートすることもできます。たとえば、次のように入力します。

<?import:xdoxsl:///Executive/HR_Reports/mySubtemplate.xsb?loc=${_XDOLOCALE}?>

13.4.4

この例では、会社の住所がすべてのテンプレートに固定の文字列として表示されます。すべてのテンプレートでこの文字列を再表示するのではなく、1つのサブ・テンプレートに配置して、他のすべてのテンプレートから参照できます。

サブ・テンプレートに文字列を配置して参照する手順は次のとおりです。

  1. RTFファイル内に次のテンプレート宣言を入力します。

    <?template:MyAddress?>
    My Company
    500 Main Street
    Any City, CA 98765
    <?end template?>
    
  2. カタログ内のCustomer Reports/Templatesの場所にサブ・テンプレートを作成します。

  3. このファイルをサブ・テンプレートにアップロードして、「共通コンポーネント」として保存します(BI Publisherによってオブジェクトに.xsbの拡張子が割り当てられます)。

  4. メイン・テンプレートで、次のインポート文をフォーム・フィールドに入力するか、直接テンプレートに入力します。

    <?import:xdoxsl:///Customer Reports/Templates/Common Components.xsb?>
    
  5. メイン・テンプレートで、アドレスを表示する位置に次の入力をします。

    <?call-template:MyAddress?>
    

実行時に、MyAddressサブ・テンプレートの内容がフェッチされ、メイン・テンプレートのレイアウト内でレンダリングされます。

この機能では、文字列のみでなく、サブ・テンプレート内の任意の有効なRTFテンプレート機能を挿入できます。さらに、パラメータを一方から他方へ渡すことも可能です。この例については、次の第13.5項「RTFサブ・テンプレートを使用する状況」を参照してください。

13.5 RTFサブ・テンプレートを使用する状況

次に、いくつかのRTFサブ・テンプレートの一般的なユースケースを示します。

13.5.1 共通レイアウトの再利用

しばしば、複数のレポートで同じヘッダーとフッターが必要になります。この内容の組込みにRTFサブ・テンプレートを使用することにより、全体的な変更を単純化でき、更新もレイアウトごとではなくこのサブ・テンプレートのみで済みます。

13.5.2 データの値に基づいた条件付のレイアウト表示

サブ・テンプレートは、レポート・データの値に基づいた条件付レイアウトに適用するために使用することもできます。

RTFテンプレートのchooseコマンドを使用することで、BI Publisherに対してサブ・テンプレート・ファイルに定義された別の<?template?>を適用するように指定できます。


重要:

サブ・テンプレート・ファイルのimport文は条件付にできません。そのかわりに、1つのサブ・テンプレート・ファイルをインポートして、コール文を条件付にできます。1つのサブ・テンプレート・ファイルに複数の<?template?>オプションを定義します。


13.5.2.1

インドと米国内の顧客に送信するレポートがあるとします。データで指定される国コード(COUNTRY_CODE)に応じて、適用する住所のレイアウトを変える必要があります。この例では、RTFテンプレートのif文の機能を使用して該当するアドレス書式のサブ・テンプレートをコールします。

サブ・テンプレート・ファイルは次のようになります。

<?template:US_Address?>
   <?US_Address_Field1?>
   <?US_Address_Field2?>
   <?US_Address_Field3?>
<?end template?>

<?template:IN_Address?>
   <?IN_Address_Field1?>
   <?IN_Address_Field2?>
   <?IN_Address_Field3?>
<?end template?>

該当するアドレス書式のサブ・テンプレートをコールする手順は次のとおりです。

  1. カタログ内の次の場所にサブ・テンプレートを作成します。

    Customers/Invoice Reports

    RTFファイルをアップロードし、サブ・テンプレートをAddressesという名前で保存します。

  2. メイン・テンプレートで、サブ・テンプレートをインポートする次の文を入力します。

    <?import:xdoxsl:///Customers/Invoice Reports/Addresses.xsb?>
    
  3. 住所を表示する位置で次のように入力します。

    <?if:COUNTRY_CODE='USA'?>
            <?call:US_Address?>    
         <?end if?>   
         <?if:COUNTRY_CODE='IN'?>         
            <?call:IN_Address?>          
         <?end if?>    
    

レポートを実行すると、アドレスの書式がデータ内のCOUNTRY_CODEの値に応じて適切に適用されます。

13.5.3 パラメータ値に基づいた条件付のレイアウト表示

この例では、ユーザーのパラメータ値を基に、または値のリストからの選択を基に異なるレイアウトを表示する方法について示します。パラメータはRTFテンプレートに渡すことができ、値に基づいてサブ・テンプレート・ファイル内の異なる<?template?>をコールするために使用できます。


重要:

サブ・テンプレート・ファイルのimport文は条件付にできません。


13.5.3.1

レポート・データ・モデルで、DeptNameという名前のパラメータを定義しているとします。このパラメータをMenu型として設定し、これに値リストを関連付けることで、ユーザーがレポート・ビューアでレポートを表示するとき(またはレポートをスケジュールするとき)、リストから選択可能になります。

RTFメイン・レイアウト・テンプレートで次のコマンドを入力し、ユーザーが選択した値を取得するようにします。

<?param@begin:DeptName?>

このユーザーの選択を基にレイアウトを表示する場合、IFまたはCHOOSE文を使用し、パラメータ値を評価して、関連するサブ・テンプレートのコールができます。

CHOOSE文は、多数の条件テストがあり、残りの値に対してデフォルト処理が予期される場合に使用します。たとえば、経理、営業およびマーケティング部門のそれぞれで異なるレイアウトが必要だとします。これ以外のすべての部門はデフォルトのレイアウトを使用できます。

レイアウトを表示する手順は次のとおりです。

  1. RTFファイルを作成し、次のテンプレート宣言を含めます。

    <?template:tAccounting?>
       -  -  -  Specific Accounting Layout here  -  -  - 
    <?end template?>
    
    <?template:tSales?>
       -  -  -  Specific Sales Layout here  -  - -
    <?end template?> 
    
    <?template:tMark?>
       -  -  -  Specific Marketing Layout here - -
    <?end template?> 
    
    <?template:tDefault?>
       -  -  -  Default Layout here  -  - -
    <?end template?>
    
  2. カタログ内の次の場所にサブ・テンプレートを作成します。

    Shared Folders/Executive/Department Expenses

    RTFファイルをアップロードし、サブ・テンプレートをDeptSubtempsという名前で保存します。

  3. メインRTFテンプレートに、次のコマンドをインクルードします。

<?import:xdoxsl:///Executive/Department Expenses/DeptSubtemps.xsb?loc=en-US?>

<?param@begin:DeptName?>

<?choose:?>
   <?when:$DeptName='Accounting'?>
      <?call:tAccounting?>
   <?end when?>
   <?when:$DeptName='Sales'?>
      <?call:tSales?>
   <?end when?>
   <?when:$DeptName='Marketing'?>
      <?call:tMark?>
   <?end when?>
   <?otherwise:$>
      <?call:tDefault?>
   <?end otherwise?>
<?end choose:?>

ユーザーがレポートを実行するとき、DeptNameの値を基に、適用されるレイアウトが決定されます。RTFテンプレートのCHOOSE文の詳細は、第4.10.4項「Choose文の挿入」を参照してください。

13.5.3.2 簡単な計算と計算式の繰り返し

単純な計算も、RTFサブ・テンプレートを使用して処理できます。複雑な計算式は、XSLサブ・テンプレートで処理する必要があります。

13.5.3.3

この例では、利子を計算する計算式を含んだサブ・テンプレートの設定方法を示します。

このサブ・テンプレートは、レポート内のデータに対して金利計算を実行して、結果をメイン・テンプレートに返します。この機能をコールする複数のレポートでは、計算式のコンポーネントのタグ名が異なる可能性がありますが、このサブ・テンプレートはそのような状況にも対応します。

次のXMLデータを使用するとします。

<LOAN_DATA>
   <LOAN_AMOUNT>6000000</LOAN_AMOUNT>
   <INTEREST_RATE>.053</INTEREST_RATE>
   <NO_OF_YEARS>30</NO_OF_YEARS>
</LOAN_DATA>

金利を計算する計算式が含まれたサブ・テンプレートを設定する手順は次のとおりです。

  1. RTFファイルで、calcInterestというテンプレート宣言を作成します。このサブ・テンプレートで、計算式の各要素(元金、利率および年数)のパラメータを定義します。各パラメータにはデフォルト値を設定する必要があります。

    <?template:calcInterest?>
       <?param:principal;0?>
       <?param:intRate;0?>
       <?param:years;0?>
       <?number($principal) * number($intRate) * number($years)?>
    <?end template?>
    
  2. カタログ内の次の場所にサブ・テンプレートを作成します。

    Shared Folders/Subtemplates

    RTFファイルをアップロードし、サブ・テンプレートをcalculationsという名前で保存します。

  3. メイン・テンプレートで、サブ・テンプレートをインポートする次の文を入力します。

    <?import:xdoxsl:///Subtemplates/calculations.xsb?>
    
  4. 計算結果を表示する位置で、BI Publisherフィールドに次のように入力します。

    <?call@inlines:calcInterest?>
       <?with-param:principal;./LOAN_AMOUNT?>
       <?with-param:intRate;./INTEREST_RATE?>
       <?with-param:years;./NO_OF_YEARS?>
    <?end call?>      
    

    ここでは@inlinesコマンドを使用しています。これはオプションです。@inlinesコマンドは、テンプレート内のサブ・テンプレートをコールした位置でインラインでレンダリングを強制します。この機能は、たとえば、コールの前にあるテキストと同じ行に結果を表示する場合に使用します。

13.6 RTFサブ・テンプレートへの翻訳の追加

RTFサブ・テンプレートでは、RTFテンプレート・ファイルと同様に翻訳がサポートされています。

単一のサブ・テンプレート定義に対して複数の翻訳済RTFファイルをアップロードし、適切なロケールを割り当てることができます。これらは、図13-4に示すように「テンプレート」リージョンに表示されます。

図13-4 「テンプレート」リージョン

図13-4の説明が続きます
「図13-4 「テンプレート」リージョン」の説明

または、翻訳可能な文字列のXLIFF (.xlf)ファイルを生成し、文字列を翻訳して、翻訳済ファイルをアップロードします。これらは、図13-5に示すように、「翻訳」リージョンに表示されます。

図13-5 「翻訳」リージョン

図13-5の説明は次にあります。
「図13-5 「翻訳」リージョン」の説明

実行時、オンラインで表示されるレポートに対するユーザー・アカウントのレポート・ロケールのプリファレンス設定に基づいて、適切なサブ・テンプレートのローカライゼーションが適用されます。また、スケジュールされたレポートの場合は、スケジュールされたレポートのレポート・ロケールに関するユーザーの選択に基づいて適用されます。

サブ・テンプレートのXLIFFファイルは個別に生成して、翻訳し、個別にアップロードできます。また、サブ・テンプレート・フォルダが含まれるカタログの翻訳を行う場合、サブ・テンプレート・ファイルから文字列が抽出され、より大きなカタログ翻訳ファイルに組み込まれます。カタログ翻訳ファイルがBI Publisherにアップロードされると、「サブ・テンプレート」定義の「翻訳」リージョンに該当するカタログ・ファイルからの翻訳が表示されます。

翻訳の詳細は、第15章「翻訳サポートの概要と概念」を参照してください。