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

前
前へ
 
次
 

4 RTFテンプレートの作成

この章では、RTFレポート・テンプレートでXMLデータをレイアウト要素に関連付ける概念について説明します。また、複雑で高度な条件付きレポート・フォーマットを作成するための基本的な技術と高度な技術について説明します。

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

4.1 はじめに

この章では、レポート・テンプレートでXMLデータをレイアウト要素に関連付ける概念について説明します。また、複雑で高度な条件付きレポート・フォーマットを作成するための基本的な技術と高度な技術について説明します。

RTFテンプレートの作成にMicrosoft Wordを使用している場合は、この章を読み進める前に、第5章「Template Builder for Wordを使用したRTFテンプレートの作成」を参照してください。Template Builderインストールで提供されるデモとサンプルは、Microsoft Wordでテンプレートを作成するプロセスを身に付けるのに役立ちます。

RTFテンプレートを作成するのに、Microsoft WordまたはTemplate Builderは必要ないため、この章では、Template Builderを使用せずにコンポーネントを追加する方法について説明します。この章で説明するレイアウト・コンポーネントの多くは、Template Builderを使用したテンプレートにも挿入できます。

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

4.1.1 RTFテンプレートとは

リッチ・テキスト・フォーマット(RTF)は、Microsoft Wordなどの一般的な文書処理アプリケーションで使用されている仕様です。RTFは、文書を保存するときに選択できるファイル・タイプ・オプションの1つです。

BI Publisherでは、RTFファイル形式として保存されたドキュメントがXSL-FOに変換されるため、多くの標準的なワード・プロセッサの機能を使用して、レポート・レイアウトを作成できます。

設計時には、BI Publisherの簡略化されたXSL式用のタグを使用して、データ・フィールドと他のマークアップをテンプレートに追加します。これらのタグは、XMLレポート・データをレポート・レイアウトに関連付け、他の処理に関する指示を組み込みます。

また、BI Publisherでは、ワード・プロセッサの書式設定機能に加えて、条件付き書式設定、動的データ列、総合計、チャートなどの拡張レポート機能もサポートされます。

XSLに精通していて、単純化されたタグを使用しない場合は、BI Publisherは、テンプレートにおいて純粋なXSL要素の使用もサポートしています。テンプレートに直接、コードを組み込む場合は、任意のXSL要素、多数のFO要素、およびBI Publisherによって拡張された1連のSQL表現を含めることができます。

4.1.2 テンプレート設計の前提条件

テンプレートを設計する際には、次の前提条件を満たす必要があります。

  • ソース・レポートからのデータに適用されるビジネス・ルールを認識しておきます。

  • レポート・データ・モデルからサンプル・データを生成します。

    データ・モデルからサンプル・データを生成する方法の詳細は、『Oracle Fusion Middleware Oracle Business Intelligence Publisherデータ・モデリング・ガイド』のデータ・モデルのテストおよびサンプル・データの生成に関する項を参照してください。

  • Microsft Wordの書式設定機能に習熟している必要があります。

4.1.3 XSLT互換性の概要

BI Publisherは、Oracle XDK 11.1.0.7.0によって提供されるXSLTプロセッサを使用します。このプロセッサは、W3C XSL Transformations 1.0勧告をサポートしています。また、このプロセッサはXSLTおよびXPath 2.0標準の現在の作業草案も実装しています。Oracle XDKの詳細は、Oracle XML開発者用キット・プログラマーズ・ガイドを参照してください。

デフォルトでは、BI PublisherはXSLT 1.0と互換性があります。XSLTおよびXPath 2.0の機能をテンプレートで使用する場合は、XSLT 1.0の互換性を無効にする必要があります。この構成はテンプレート・レベルで実行されます。テンプレート・レベルの設定は、サーバーの設定より優先されます。

XSLTの互換性は、Template Builder for Wordではビルド・オプションとして設定されます。第5.9.1項「「UI」オプションの設定」を参照してください。

4.1.4 主要な概念

テンプレート・レイアウトを設計するときは、XML入力ファイルをレイアウトに関連付ける方法を理解する必要があります。この章では、XML入力ファイルを使用したテンプレート・レイアウトのサンプルを提示して、マークアップ・タグをテンプレートに追加するための適切な関連付けを行う方法を説明します。

4.1.5 テンプレート・レイアウトの設計

設計を作成するには、使用しているワード・プロセッサの書式設定機能を使用します。

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

  • テキストのサイズ、フォントおよび配置の選択

  • 箇条書きと番号の挿入

  • 段落ごとの境界線の描画

  • 透かしの挿入

  • イメージ(jpg、gifまたはpng)の挿入

  • 表の自動書式設定機能の使用

  • ヘッダーとフッターの挿入

    ヘッダーとフッターの挿入に関する詳細は、第4.5項「ヘッダーとフッターの定義」を参照してください。

サポートされているMicrosoft Wordの書式設定機能の詳細は、第4.8項「サポート対象のMicrosoft Wordの書式設定機能」を参照してください。

4.1.6 BI Publisherコードの追加について

RTFテンプレートの作成時は、BI PublisherコードをRTFドキュメントに追加します。BI Publisherは、コードの追加について次の方式をサポートしています。

  • 基本RTF方式

    BI Publisherの簡略化された構文を使用してテンプレートを設計するには、RTFバージョン1.6以降の書込みをサポートしているワード・プロセッサを使用します。

  • フォーム・フィールド方式

    Microsoft Wordのフォーム・フィールド機能を使用することで、テンプレートの設計に直接配置するのではなく、非表示のフォーム・フィールドに構文を配置できます。


    注意:

    簡略化された構文ではなくXSLまたはXSL:FOコードを使用する場合は、フォーム・フィールド方式を使用する必要があります。


この章では、前述の方式を使用してRTFテンプレートを作成する方法について説明します。

Microsoft Wordを使用している場合は、BI Publisher Template Builder for Wordを使用してBI Publisherコード・フィールドの挿入を支援できます。詳細は、第5章「Template Builder for Wordを使用したRTFテンプレートの作成」を参照してください。

4.2 テンプレート・レイアウトへのXMLデータの関連付け

図4-1に、Payables Invoice Registerのサンプル・レイアウトを示します。

図4-1 Payables Invoice Registerのサンプル・レイアウト

図4-1の説明は次にあります。
「図4-1 Payables Invoice Registerのサンプル・レイアウト」の説明

次の点に注意してください。

4.2.1 XML入力ファイルの使用

次に、このPayables Invoice Registerレポート・テンプレートへの入力として使用されるXMLファイルを示します。わかりやすい例を示すため、ここで示されるXML出力は実際のPayablesレポートの出力を変更しています。

<?xml version="1.0" encoding="WINDOWS-1252" ?>
 - <VENDOR_REPORT>
  - <LIST_G_VENDOR_NAME>
   - <G_VENDOR_NAME>
     <VENDOR_NAME>COMPANY A</VENDOR_NAME>
   -  <LIST_G_INVOICE_NUM>
    -  <G_INVOICE_NUM>
       <SET_OF_BOOKS_ID>124</SET_OF_BOOKS_ID>
       <GL_DATE>10-NOV-03</GL_DATE>
       <INV_TYPE>Standard</INV_TYPE>
       <INVOICE_NUM>031110</INVOICE_NUM>
       <INVOICE_DATE>10-NOV-03</INVOICE_DATE>
       <INVOICE_CURRENCY_CODE>EUR</INVOICE_CURRENCY_CODE>
       <ENT_AMT>122</ENT_AMT>
       <ACCTD_AMT>122</ACCTD_AMT>
       <VAT_CODE>VAT22%</VAT_CODE>
      </G_INVOICE_NUM>
     </LIST_G_INVOICE_NUM>
     <ENT_SUM_VENDOR>1000.00</ENT_SUM_VENDOR>
     <ACCTD_SUM_VENDOR>1000.00</ACCTD_SUM_VENDOR>  
    </G_VENDOR_NAME>
   </LIST_G_VENDOR_NAME>
  <ACCTD_SUM_REP>108763.68</ACCTD_SUM_REP>
  <ENT_SUM_REP>122039</ENT_SUM_REP>
 </VENDOR_REPORT> 

XMLファイルは複数の要素で構成されています。各タグ・セットが1つの要素です。たとえば、<INVOICE_DATE> </INVOICE_DATE>は請求日要素です。INVOICE_DATEはタグ名です。両方のタグに囲まれたデータが要素の値です。たとえば、INVOICE_DATEの値は10-NOV-03です。

XMLファイルの要素には階層構造があります。つまり、要素には親子関係があります。前述のXMLサンプルでは、ある要素のタグの間に別の要素が含まれています。別の要素を含んでいる要素が親で、含まれている要素が子になります。

すべてのXMLファイルには、他のすべての要素を含むルート要素が1つあります。前述の例では、VENDOR_REPORTがルート要素です。LIST_G_VENDOR_NAME、ACCTD_SUM_REPおよびENT_SUM_REPの各要素はVENDOR_REPORTタグの間に含まれており、これらはVENDOR_REPORTの子要素になります。各子要素には、それ自体の子要素を指定できます。

4.2.2 プレースホルダとグループの識別

テンプレートの内容とレイアウトは、入力XMLファイルの内容と階層に対応している必要があります。テンプレート内のデータ・フィールドのそれぞれを、XMLファイル内の要素にマッピングする必要があります。テンプレート内の繰返し要素の各グループは、XMLファイル内の親子関係に対応している必要があります。

データ・フィールドをマップするには、プレースホルダを定義します。繰返し要素を指定するには、グループを定義します。


注意:

レポートが受信したXMLデータの階層と異なるグループ化を必要とする場合、BI Publisherではデータの再グループ化がサポートされます。この機能の使用の詳細は、第4.12.3項「XMLデータの再グループ化」を参照してください。


4.2.3 プレースホルダの使用方法

レポート・テンプレートのデータ・フィールドのそれぞれが、XMLファイル内の要素に対応している必要があります。テンプレート設計をマークアップするときは、XML要素のプレースホルダを定義します。このプレースホルダによって、テンプレートのレポート・フィールドがXML要素にマッピングされます。プレースホルダは、実行時に、XMLデータ・ファイル内にある同名の要素の値に置換されます。

たとえば、サンプルのレポート・レイアウトの「Supplier」フィールドは、XML要素のVENDOR_NAMEに対応しています。テンプレートをマークアップするときは、「Supplier」フィールドの位置にVENDOR_NAMEのプレースホルダを作成します。このプレースホルダは、実行時に、XMLファイル内の要素の値(サンプル・ファイルの値はCOMPANY A)に置換されます。

4.2.4 繰返し要素のグループの識別

サンプル・レポートには、仕入先とその請求書がリストされています。レポートには、仕入先ごとに繰り返されるフィールドがあります。その1つが仕入先の請求書です。さらに、請求書ごとに繰り返されるフィールドがあります。つまり、レポートは、次の2グループの繰返しフィールドで構成されています。

  • 仕入先ごとに繰り返されるフィールド

  • 請求書ごとに繰り返されるフィールド

請求書グループは仕入先グループ内にネストされています。これは、次のように表すことができます。

仕入先

  • 仕入先名

  • 請求書

    • 請求書番号

    • 請求日

    • GL日

    • 通貨

    • 入力値

    • 報告値

  • 合計入力値

  • 合計報告値

この構造をXML入力ファイルの階層と比較します。前述の仕入先グループに属するフィールドは、要素G_VENDOR_NAMEの子になります。また、請求書グループに属するフィールドは、要素G_INVOICE_NUMの子になります。

グループを定義することによって、要素(親)の出現箇所ごとに、含まれているフィールド(子)を表示するようにBI Publisherに通知しています。実行時に、BI Publisherは要素の出現箇所をすべてループ処理し、そのたびにフィールドを表示します。

4.3 テンプレート・レイアウトへのマークアップの追加

BI Publisherは、ワード・プロセッサで適用した書式設定をXSL-FOに変換します。マークアップを追加して、レイアウトとXMLファイル間のマッピングを作成し、書式で直接表現できない機能を組み込みます。

最も基本的なマークアップ要素は、XMLデータ要素を定義するプレースホルダ、および繰返し要素を定義するグループです。

BI Publisherには、マークアップをテンプレートに追加するためのタグが用意されています。BI Publisherのタグに相当するXSLについては、第B.2項「XSLの同等要素」を参照してください。

4.3.1 プレースホルダの作成

プレースホルダによって、テンプレート・フィールドがXML要素データ・フィールドにマッピングされます。プレースホルダは、実行時に、XMLデータ・ファイル内にある同名の要素の値に置換されます。

プレースホルダは、次の構文を使用してドキュメントに入力します。

<?XML要素のタグ名?>

プレースホルダはXML要素のタグ名と正確に一致している必要があります。大文字と小文字が区別されます。

次の各項で説明するとおり、プレースホルダはドキュメントに2種類の方法で挿入できます。

4.3.1.1 基本RTF方式の使用

XMLデータ値を表示するドキュメント内の場所にプレースホルダ構文を入力します。

次の構文を使用して、要素のXMLタグ名を入力します。

<?XML要素のタグ名?>

次の例では、テンプレート・フィールド「Supplier」がXML要素VENDOR_NAMEにマッピングされます。ドキュメントでは次のように入力します。

<?VENDOR_NAME?>

図4-2に、テンプレートのエントリを示します。

図4-2 テンプレートのエントリ

図4-2の説明が続く
「図4-2 テンプレートのエントリ」の説明

4.3.1.2 フォーム・フィールド方式の使用

Microsoft Wordのフォーム・フィールド方式を使用して、プレースホルダ・タグを挿入する手順は次のとおりです。

  1. Microsoft Wordアプリケーションで、「フォーム」ツールバーを有効にします。

  2. プレースホルダを作成する位置にカーソルを置きます。

  3. Text Form Field」ツールバー・アイコンを選択します。この操作によって、フォーム・フィールド領域がドキュメントに挿入されます。

  4. フォーム・フィールド領域をダブルクリックして、「Text Form Field Options」ダイアログ・ボックスを起動します。

  5. (オプション)「Default text」フィールドに、フィールドの説明を入力します。このフィールドに入力した内容がテンプレートのプレースホルダの位置に移入されます。

    たとえば、「Supplier 1」と入力します。

  6. Add Help Text」ボタンを選択します。

  7. 次の構文を使用して、ヘルプ・テキスト入力フィールドにXML要素のタグ名を入力します。

    <?XML要素のタグ名?>

    テキスト入力フィールドには、複数の要素タグ名を入力できます。

    次の例では、レポート・フィールド「Supplier」がXML要素VENDOR_NAMEにマッピングされます。「Form Field Help Text」フィールドには次のように入力します。

    <?VENDOR_NAME?>

    図4-3に、「テキスト ボックス フォーム フィールド」ダイアログ・ボックス、および「Supplier」フィールドに適切な入力がある「ヘルプの追加」ダイアログ・ボックスを示します。

    図4-3 「Supplier」フィールドのダイアログ

    図4-3の説明が続きます
    「図4-3 「Supplier」フィールドのダイアログ」の説明


    ヒント:

    BI Publisher構文の文字列が長い場合、「ステータス バー」タブのかわりに「ヘルプ キー (F1)」タブを使用します。「Help Key (F1)」タブでは、より多くのテキストを入力できます。


  8. 「OK」をクリックして適用します。

    テンプレートのフォーム・フィールドにデフォルト・テキストが表示されます。

    図4-4に、フォーム・フィールド・マークアップが追加されたテンプレートの「Supplier」フィールドを示します。

    図4-4 マークアップが追加された「Supplier」フィールド

    図4-4の説明が続きます
    「図4-4 マークアップが追加された「仕入先」フィールド」の説明

4.3.1.3 この例のまとめ

表4-1に、この例を完成するために入力したすべての内容を示します。テンプレート・フィールド名はテンプレートでの表示名です。デフォルト・テキスト入力は、「Text Form Field Options」ダイアログ・ボックスの「Default Text」フィールドに入力した値です(フォーム・フィールド方式の場合のみ)。プレースホルダ入力は、「Form Field Help Text」フィールド(フォーム・フィールド方式の場合)またはテンプレートに直接入力したXML要素タグ名です。

表4-1 例を完成するためのすべての入力内容

テンプレート・フィールド名 デフォルト・テキスト入力(フォーム・フィールド方式) プレースホルダ入力(XMLタグ名)

請求書番号

1234566

<?INVOICE_NUM?>

請求日

1-Jan-2004

<?INVOICE_DATE?>

GL日

1-Jan-2004

<?GL_DATE?>

Curr

YEN

<?INVOICE_CURRENCY_CODE?>

Entered Amt

1000.00

<?ENT_AMT?>

Accounted Amt

1000.00

<?ACCTD_AMT?>

(Entered Amount列の合計)

1000.00

<?ENT_SUM_VENDOR?>

(Accounted Amount列の合計)

1000.00

<?ACCTD_SUM_VENDOR?>


図4-5は、フォーム・フィールドのプレースホルダ・マークアップが完成したPayables Invoice Registerです。完全な基本RTFマークアップについては、図4-6を参照してください。

図4-5 フォーム・フィールド・マークアップが設定されたPayables Invoice Register

図4-5の説明が続きます
「図4-5 フォーム・フィールド・マークアップが設定されたPayables Invoice Register」の説明

4.4 グループの定義

グループを定義することによって、組み込まれたフィールドを要素の出現箇所ごとに表示するように、BI Publisherに通知します。実行時に、BI Publisherは要素の出現箇所をすべてループ処理し、そのたびにフィールドを表示します。

次の例では、XMLファイルのG_VENDOR_NAMEが出現するたびに、その子要素であるVENDOR_NAME(Supplier名)、G_INVOICE_NUM(Invoicesグループ)、入力済金額合計および計上済金額合計をテンプレートで表示します。さらに、G_INVOICE_NUM(Invoicesグループ)が出現するたびに、請求書番号、請求日、GL記帳日、通貨、入力済金額および計上済金額がテンプレートに表示されます。

繰返しフィールドのグループを指定するには、繰り返す要素の前後にグループ・タグを挿入します。

最初の要素の前に、次のタグを挿入します。

<?for-each:XMLグループ要素のタグ名?>

最後の要素の後に、次のタグを挿入します。

<?end for-each?>


注意:

詳細は、第5.4.6項「繰返しグループの挿入」を参照してください。


4.4.1 グループ化のシナリオ

グループ化の際にグループ要素は、XML入力ファイルの繰返し要素の親でなければならないということに注意してください。

  • テキストまたは書式設定要素の前後にグループ化タグを挿入すると、グループ・タグに囲まれたテキストまたは書式設定要素が繰り返されます。

  • 表の前後にタグを挿入すると、表が繰り返されます。

  • 表セル内のテキストの前後にタグを挿入すると、タグに囲まれた表セル内のテキストが繰り返されます。

  • 同じ表の行内にある2つの異なる表セルの前後にタグを挿入すると、その1行が繰り返されます。

  • 表内の2つの異なる行の前後にタグを挿入すると、タグに囲まれた行が繰り返されます(グループ終了タグを含む行は繰り返されません)。

4.4.2 基本RTF方式の使用

タグをドキュメントに入力して、繰返し要素グループの開始と終了を定義します。

この例でSuppliersグループを作成するには、次のタグを挿入します。

<?for-each:G_VENDOR_NAME?>

このタグは、すでに作成してある「Supplier」フィールドの前に挿入します。

文書内の要約行の後に、<?end for-each?>を挿入します。

図4-6に、基本RTFグループ化とプレースホルダ・マークアップを設定したPayables Invoice Registerを示します。

図4-6 基本RTFグループ化とマークアップが設定されたPayables Invoice Register

図4-6の説明が続きます
「図4-6 基本RTFグループ化とマークアップが設定されたPayables Invoice Register」の説明

4.4.3 フォーム・フィールド方式の使用

Microsoft Wordのフォーム・フィールド方式を使用して、グループを定義する手順は次のとおりです。

  1. フォーム・フィールドを挿入して、グループの開始を指定します。

    ヘルプ・テキスト・フィールドには次のように入力します。

    <?for-each:グループ要素タグ名?>

    この例のSuppliersグループを作成するには、すでに作成してある「Suppliers」フィールドの前にフォーム・フィールドを挿入します。ヘルプ・テキスト・フィールドには次のように入力します。

    <?for-each:G_VENDOR_NAME?>

    この例では、デフォルト・テキスト「Group: Suppliers」を入力して、テンプレートのグループの開始を指定します。デフォルト・テキストは必須ではありませんが、テンプレートが理解しやすくなります。

  2. グループ内の最後のプレースホルダの後にフォーム・フィールドを挿入します。ヘルプ・テキスト・フィールドに、<?end for-each?>と入力します。

    この例では、要約行の後にデフォルト・テキスト「End: Suppliers」を入力して、テンプレートのグループの終了を指定します。

    図4-7に、Suppliersグループを指定するマークアップを追加した後のテンプレートを示します。

図4-7 Suppliersグループが追加されたテンプレート

図4-7の説明が続きます
「図4-7 Suppliersグループが追加されたテンプレート」の説明

4.4.4 この例のまとめ

この例の2番目のグループは請求書グループです。このグループの繰返し要素は表に表示されます。請求書ごとに表の行が繰り返されます。これらの要素を含むグループを表内に作成します。


注意:

請求書ごとに、表全体ではなく、表ののみを繰り返す必要があります。表の行の始めと終わりにグループ化タグを配置すると、行のみが繰り返されます。表の周りにタグを配置すると、新しい請求書ごとにヘッダーを含む表全体が繰り返されます。


この例をマークアップするには、表セルのInvoice Numプレースホルダの前に、グループ・タグ<?for-each:G_INVOICE_NUM?>を挿入します。デフォルト・テキスト「Group: Invoices」を入力して、グループの開始を指定します。

行の最後の表セル内で、Accounted Amtプレースホルダの後に終了タグを挿入します。デフォルト・テキスト「End: Invoices」を入力して、グループの終了を指定します。

図4-8に、フォーム・フィールド方式を使用して設定した例を示します。

図4-8 グループが設定されたPayables Invoice Register

図4-8の説明が続きます
「図4-8 グループが設定されたPayables Invoice Register」の説明

4.5 ヘッダーとフッターの定義

テンプレートの一部として、ヘッダーとフッターを定義できます。この項の内容は次のとおりです。

4.5.1 ヘッダーおよびフッターのネイティブ・サポート

BI Publisherでは、RTF固有のヘッダーとフッターの機能を使用できます。ヘッダーまたはフッターを作成するには、使用しているワード・プロセッサのヘッダーとフッターの挿入ツールを使用します。複数のヘッダーとフッターがある場合などは、別の方法として、start:bodyタグおよびend bodyタグを使用して、ヘッダーとフッターのリージョンとレポート本体を区別できます。

4.5.2 ヘッダーとフッターへのプレースホルダの挿入

このマニュアルの作成時点では、Microsoft Wordでは、ヘッダーとフッターのフォーム・フィールドをサポートしていません。したがって、プレースホルダ構文をテンプレートに直接挿入するか(基本RTF方式)、次の項で説明するstart body/end body構文を使用する必要があります。

4.5.3 複数または複雑なヘッダーおよびフッターの作成

テンプレートで複数のヘッダーとフッターが必要な場合は、BI Publisherのタグを使用してヘッダーとフッターを作成し、レポートの本文領域を定義します。この方法は、フォーム・フィールドに配置する複雑なオブジェクトがヘッダーとフッターに含まれている場合にも使用できます。本文領域を定義する際に、その本文領域の開始前に出現する要素がヘッダーになります。フッターになるのは、本文領域の後に来る要素です。

レポートの本文領域は、次のタグを使用して囲みます。

<?start:body?>

<?end body?>

これらのタグは、テンプレートで直接使用するか、フォーム・フィールド内で使用します。

Payables Invoice Registerのヘッダーとフッターは単純であるため、start body/end bodyタグを使用する必要はありません。ただし、別のヘッダーをテンプレートに追加する場合は、本文領域を定義します。

本文領域を定義する手順は次のとおりです。

  1. Suppliersグループ・タグの前に<?start:body?>を挿入します。

    <?for-each:G_VENDOR_NAME?>

  2. Suppliersグループの終了タグの後に<?end body?>を挿入します。

    <?end for-each?>

図4-9に、start body/end bodyタグが挿入されたPayables Invoice Registerを示します。

図4-9 bodyタグが挿入されたPayables Invoice Register

図4-9の説明が続きます
「図4-9 bodyタグが挿入されたPayables Invoice Register」の説明

4.5.4 先頭ページ、奇数ページ、偶数ページの個別定義

レポートの先頭ページに異なるヘッダーやフッターが必要な場合、または奇数ページと偶数ページで異なるヘッダーやフッターが必要な場合は、Microsoft Wordの「ページ設定」ダイアログを使用してこの動作を定義できます。


注意:

この機能は、PDF出力およびRTF出力のみでサポートされています。


異なるページ設定を定義する手順は次のとおりです。

  1. 「ファイル」メニューから「ページ設定」を選択します。

  2. 「ページ設定」ダイアログで「レイアウト」タブを選択します。

  3. ダイアログの「ヘッダーとフッター」領域で、該当するチェック・ボックスを選択します。

    「Different odd and even」

    先頭ページのみ別指定

  4. 必要に応じてテンプレートにヘッダーとフッターを挿入します。

実行時に、定義したとおりのヘッダーとフッターが生成されたレポートに表示されます。

4.6 イメージとチャートの挿入

次の各項で説明するように、BI Publisherでは、公開されたドキュメントにイメージを挿入する方法が数種類サポートされています。

4.6.1 イメージの直接挿入

jpg、gifまたはpngイメージをテンプレートに直接挿入します。

4.6.2 URL参照によるイメージの挿入

URL参照によってイメージを挿入する手順は次のとおりです。

  1. ダミー・イメージをテンプレートに挿入します。

  2. Microsoft Wordの「図の書式設定」ダイアログ・ボックスで「Web」タブを選択します。イメージURLを参照するには、次の構文を「Alternative text」リージョンに入力します。

    url:{'http://<image location>'}

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

    url:{'http://www.example.com/images/ora_log.gif'}

4.6.3 XMLファイルの要素参照によるイメージの挿入

要素参照によってイメージを挿入する手順は次のとおりです。

  1. ダミー・イメージをテンプレートに挿入します。

  2. Microsoft Wordの「図の書式設定」ダイアログ・ボックスで「Web」タブを選択します。イメージURLを参照するには、次の構文を「Alternative text」リージョンに入力します。

    url:{IMAGE_LOCATION}

    ここで、IMAGE_LOCATIONは、イメージへの完全なURLを保持するXMLファイルの要素です。

    実行時に複数の要素に基づいてURLを作成することもできます。concat関数を使用してURL文字列を作成します。たとえば、次のように入力します。

    url:{concat(SERVER,'/',IMAGE_DIR,'/',IMAGE_FILE)}

    ここで、SERVER、IMAGE_DIRおよびIMAGE_FILEは、URLの作成に必要な値を保持するXMLファイルの要素です。

    この方法は、次のようにOA_MEDIA参照とともに使用することもできます。

    url:{concat('${OA_MEDIA}','/',IMAGE_FILE)}

4.6.4 BLOBデータから取得したイメージのレンダリング

結果のXMLにデータベースでBLOBとして保存されていたイメージ・データが含まれる場合は、テンプレートに挿入され、実行時にイメージを表示するフォーム・フィールドで次の構文を使用します。

<fo:instream-foreign-object content-type="image/jpg">
<xsl:value-of select="IMAGE_ELEMENT"/>
</fo:instream-foreign-object>

説明:

image/jpgは、イメージのMIMEタイプです(他のオプションとしてimage/gifとimage/pngもあります)。

および

IMAGE_ELEMENTは、XMLデータのBLOBの要素名です。

イメージには、高さと幅の属性を指定して、発行レポートのイメージのサイズを設定できます。BI Publisherでは、定義したボックス・サイズに応じてサイズを調整してイメージが表示されます。たとえば、前述の例のサイズを3x4インチに設定するには、次のように入力します。

<fo:instream-foreign-object content-type="image/jpg" height="3 in" width="4 in">
<xsl:value-of select="IMAGE_ELEMENT"/>
</fo:instream-foreign-object>

次のようにピクセルを使用して指定します。

<fo:instream-foreign-object content-type="image/jpg" height="300 px" width="4 px">
...

cmも使用できます。

<fo:instream-foreign-object content-type="image/jpg" height="3 cm" width="4 cm">
...

あるいは、元のディメンションに対するパーセントで指定できます。

<fo:instream-foreign-object content-type="image/jpg" height="300%" width="300%">
...

4.6.5 テンプレートへのチャートの追加

チャートをテンプレートに追加する手順の概要は次のとおりです。これらの手順は、この項で例を使用して詳細に説明します。

  1. ダミー・イメージをテンプレートに挿入して、チャートのサイズと位置を定義します。

  2. ダミー・イメージの「Alternative text」ボックスに、チャートの定義を追加します。チャートの定義にはXSLコマンドが必要です。

  3. 実行時に、BI Publisherは、チャート・エンジンをコールしてイメージをレンダリングします。このイメージは、最終出力文書に挿入されます。

RTF出力がラスター・イメージに制限されていることに注意してください。PDFとHTMLの出力は、ラスター・イメージとベクトル・イメージをサポートしています。


注意:

詳細は、第5.4.4項「チャートの挿入」を参照してください。


4.6.5.1 サンプル・チャートの追加

次の例は、会社の部門別に売上合計を表示するXMLデータの一部です。

<sales year=2004>
 <division>
  <name>Groceries</name>
  <totalsales>3810</totalsales>
  <costofsales>2100</costofsales>
 </division>
 <division>
  <name>Toys</name>
  <totalsales>2432</totalsales>
  <costofsales>1200</costofsales>
 </division>
 <division>
  <name>Cars</name>
  <totalsales>6753</totalsales>
  <costofsales>4100</costofsales>
 </division>
 <division>
  <name>Hardware</name>
  <totalsales>2543</totalsales>
  <costofsales>1400</costofsales>
 </division>
 <division>
  <name>Electronics</name>
  <totalsales>5965</totalsales>
  <costofsales>3560</costofsales>
 </division>
</sales>

この例は、チャートをテンプレートに挿入し、図4-10に示すように縦棒グラフとして表示する方法を示しています。

図4-10 売上データの棒グラフ

図4-10の説明が続きます
「図4-10 売上データの棒グラフ」の説明

このチャートの次の属性に注目してください。

  • 形式は垂直棒グラフです。

  • チャートの背景にはグリッドが表示されています。

  • 各コンポーネントはカラーで表示されています。

  • 売上合計はY軸ラベルで表示されています。

  • 各部門はX軸ラベルで表示されています。

  • チャートにタイトルが付いています。

  • チャートに凡例が表示されています。

各プロパティは、個別のレポート要件にあわせてカスタマイズできます。

4.6.5.2 ダミー・イメージの挿入

最初の手順では、テンプレートのチャートを表示する位置にダミー・イメージを追加します。このイメージ・サイズによって、最終的なドキュメントにおけるチャート・イメージの大きさが定義されます。


注意:

ダミー・イメージは「図」として挿入してください。これ以外の種類のオブジェクトは使用できません。


図4-11 にダミー・イメージの例を示します。

図4-11 ダミー・イメージの例

図4-11の説明が続きます
「図4-11 ダミー・イメージの例」の説明

繰返しデータに基づいてチャートを出力に繰返し表示する場合は、他のフォーム・フィールドと同様に、イメージをfor-eachループ内に埋め込むことができます。この例のチャートは、sales yearグループ内で定義されているため、XMLファイルに存在するデータの年度ごとに生成されます。

イメージを右クリックして「Format Picture」パレットを開き、「Web」タブを選択します。「代替テキスト」入力ボックスを使用して、チャート特性を定義するコードとチャートのデータ定義を入力します。

4.6.5.3 「代替テキスト」ボックスへのコードの追加

図4-12に、「図の書式設定」の「代替テキスト」ボックスのBI Publisherコードの例を示します。

図4-12 「代替テキスト」ボックス

図4-12の説明が続きます
「図4-12 「代替テキスト」ボックス」の説明

「代替テキスト」の内容は、最終的なドキュメントでレンダリングされるチャートを表します。このチャートの場合、テキストは次のとおりです。

chart:
<Graph graphType = "BAR_VERT_CLUST">
 <Title text="Company Sales 2004" visible="true" horizontalAlignment="CENTER"/>
 <Y1Title text="Sales in Thousands" visible="true"/>
 <O1Title text="Division" visible="true"/>
 <LocalGridData colCount="{count(//division)}" rowCount="1">
  <RowLabels>
   <Label>Total Sales $1000s</Label>
  </RowLabels>
  <ColLabels>
   <xsl:for-each select="//division">
    <Label>
      <xsl:value-of select="name"/>
    </Label>
   </xsl:for-each>
  </ColLabels>
  <DataValues>
   <RowData>
    <xsl:for-each select="//division">
      <Cell>
       <xsl:value-of select="totalsales"/>
     </Cell>
    </xsl:for-each>
   </RowData>
  </DataValues>
 </LocalGridData>
</Graph>

チャート・テキストの最初の要素はchart:要素にして、後続のコードでチャート・オブジェクトが記述されていることをRTFパーサーに通知する必要があります。

次の要素は開始の<Graph>タグです。コード全体が<Graph>要素のタグ内にあることに注意してください。この要素には、チャート・タイプを定義するためのgraphType属性があります。この属性が宣言されていない場合、デフォルトのチャートは垂直棒グラフです。BI Beansでは、多数の異なるチャート・タイプをサポートしています。この項では、それ以外のタイプも使用しています。チャート・タイプの完全リストは、BI BeansのグラフDTDのドキュメントを参照してください。

次のコード・セクションは、チャート・タイプと属性を定義します。

<Title text="Company Sales 2004" visible="true" horizontalAlignment="CENTER"/>
 <Y1Title text="Sales in Thousands" visible="true"/>
 <O1Title text="Division" visible="true"/>
 

これらの値をすべて宣言するか、実行時にXMLデータから値を置換できます。たとえば、次の構文を使用すると、XMLタグからチャート・タイトルを取得できます。

<Title text="{CHARTTITLE}" visible="true" horizontalAlighment="CENTER"/>

ここで、CHARTTITLEはチャート・タイトルを含むXMLタグ名です。タグ名が中カッコで囲まれていることに注意してください。

次のセクションは、列ラベルと行ラベルを定義します。

<LocalGridData colCount="{count(//division)}" rowCount="1">
  <RowLabels>
   <Label>Total Sales $1000s</Label>
  </RowLabels>
  <ColLabels>
   <xsl:for-each select="//division">
    <Label>
      <xsl:value-of select="name"/>
    </Label>
   </xsl:for-each>
  </ColLabels>

LocalGridData要素には、colCountrowCountの2つの属性があります。これらの属性は、実行時に表示する列と行の数を定義します。この例では、count関数でレンダリングする列の数を計算します。

colCount="{count(//division)}"

rowCountは1にハードコードされています。この値は、チャートの対象になるデータのセット数を定義します。この例では1です。

その次のコードは、行と列のラベルを定義します。これらのラベルを宣言するか、または実行時にXMLデータから値を置換できます。行ラベルはチャートの凡例で使用されます(この例では「Total Sales $1000s」)。

この例では、列ラベルがGroceries、Toys、Carsなどのデータから抽出されています。これは、for-eachループを使用して実行されます。

<ColLabels>
   <xsl:for-each select="//division">
    <Label>
      <xsl:value-of select="name"/>
    </Label>
   </xsl:for-each>
  </ColLabels>

このコードは、<division>グループをループし、<name>要素の値を<Label>タグに挿入します。実行時に、このコードにより、次のXMLが生成されます。

<ColLabels>
  <Label>Groceries</Label>
  <Label>Toys</Label>
  <Label>Cars</Label>
  <Label>Hardware</Label>
  <Label>Electronics</Label>
</ColLabels>

次のセクションは、チャート対象の実際のデータ値を定義します。

<DataValues>
   <RowData>
    <xsl:for-each select="//division">
      <Cell>
       <xsl:value-of select="totalsales"/>
     </Cell>
    </xsl:for-each>
   </RowData>
  </DataValues>

ラベルのセクションと同様に、このコードはデータをループして、BI Beansのレンダリング・エンジンに渡されるXMLを生成します。このコードでは、次のXMLが生成されます。

<DataValues>
  <RowData>
    <Cell>3810</Cell>
    <Cell>2432</Cell>
    <Cell>6753</Cell>
    <Cell>2543</Cell>
    <Cell>5965</Cell>
  </RowData>
</DataValues>

4.6.5.4 別のチャートのサンプル

前述のデータは、図4-13に示すように、円グラフでも表示できます。

図4-13 円グラフの例

図4-13の説明が続きます
「図4-13 円グラフの例」の説明

次に、実行時にこのチャートをレンダリングするためにテンプレートに追加されたコードを示します。

chart:
<Graph graphType="PIE">
 <Title text="Company Sales 2004" visible="true"    
   horizontalAlignment="CENTER"/>
 <LocalGridData rowCount="{count(//division)}" colCount="1">
  <RowLabels>
  <xsl:for-each select="//division">     
  <Label>
   <xsl:value-of select="name"/>
  </Label>
  </xsl:for-each>
  </RowLabels>
  <DataValues>
   <xsl:for-each select="//division">
    <RowData>
      <Cell>
       <xsl:value-of select="totalsales"/>
      </Cell>
    </RowData>
   </xsl:for-each>
  </DataValues>
 </LocalGridData>
</Graph>

4.6.5.5 横棒グラフのサンプル

次に、売上合計と売上原価を横棒グラフで表示した例を説明します。図4-14に示すように、この例では売上原価要素(<costofsales>)のデータもチャートに追加されています。

図4-14 横棒グラフの例

図4-14の説明が続きます
「図4-14 横棒グラフの例」の説明

次に、このチャートをテンプレートに定義するコードを示します。

chart:
<Graph graphType = "BAR_HORIZ_CLUST">
 <Title text="Company Sales 2004" visible="true" horizontalAlignment="CENTER"/>
 <LocalGridData colCount="{count(//division)}" rowCount="2">
 <RowLabels>
  <Label>Total Sales ('000s)</Label>
  <Label>Cost of Sales ('000s)</Label>
 </RowLabels>
 <ColLabels>
  <xsl:for-each select="//division">
   <Label><xsl:value-of select="name"/></Label>
  </xsl:for-each>
 </ColLabels>
 <DataValues>
  <RowData>
   <xsl:for-each select="//division">
     <Cell><xsl:value-of select="totalsales"/></Cell>
   </xsl:for-each>
  </RowData>
  <RowData>
   <xsl:for-each select="//division">
    <Cell><xsl:value-of select="costofsales"/></Cell>
    </xsl:for-each>
  </RowData>
  </DataValues>
 </LocalGridData>
</Graph>

2番目のデータ・セットに対応するため、LocalGridData要素のrowCount属性が2に設定されています。また、DataValuesセクションでは、売上合計と売上原価の2つのデータ・セットが定義されている点にも注意してください。

4.6.5.6 チャートの外観の変更

チャートの外観の変更には、BI BeansのグラフDTDの多くの属性を操作に使用できます。たとえば、図4-15.に示すように、前述のチャートでは、グリッドの削除、背景のグラデーションの配置、および棒の色やフォントの変更が可能です。

図4-15 変更後の棒グラフ

図4-15の説明が続きます
「図4-15 変更後の棒グラフ」の説明

この変更をサポートするコードは次のとおりです。

chart:
<Graph graphType = "BAR_HORIZ_CLUST">
<SeriesItems>
 <Series id="0" color="#ffcc00"/>
 <Series id="1" color="#ff6600"/>
</SeriesItems> 
<O1MajorTick visible="false"/>
<X1MajorTick visible="false"/>
<Y1MajorTick visible="false"/>
<Y2MajorTick visible="false"/>
<MarkerText visible="true" markerTextPlace="MTP_CENTER"/>
<PlotArea borderTransparent="true">
 <SFX fillType="FT_GRADIENT" gradientDirection="GD_LEFT" 
 gradientNumPins="300">
 <GradientPinStyle pinIndex="1" position="1" 
  gradientPinLeftColor="#999999" 
  gradientPinRightColor="#cc6600"/>
 </SFX>
</PlotArea>
<Title text="Company Sales 2004" visible="true">
 <GraphFont name="Tahoma" bold="false"/>
</Title>
. . . 
</Graph>

棒の色はSeriesItemsセクションに定義されています。色は、次に示すように16進形式で定義されます。

<SeriesItems>  
  <Series id="0" color="#ffcc00"/>  
  <Series id="1" color="#ff6600"/> 
</SeriesItems>  

次のコードは、チャートのグリッドを非表示にします。

<O1MajorTick visible="false"/> 
  <X1MajorTick visible="false"/> 
  <Y1MajorTick visible="false"/> 
  <Y2MajorTick visible="false"/>

MarkerTextタグは、データ値をチャートの棒上に配置します。

<MarkerText visible="true" markerTextPlace="MTP_CENTER"/> 

PlotAreaセクションは背景を定義します。SFX要素はグラデーションを設定し、borderTransparent属性はプロット境界を非表示にします。

<PlotArea borderTransparent="true">  
  <SFX fillType="FT_GRADIENT" gradientDirection="GD_LEFT"   
     gradientNumPins="300">  
     <GradientPinStyle pinIndex="1" position="1"    
       gradientPinLeftColor="#999999"    
       gradientPinRightColor="#cc6600"/>  
   </SFX> 
</PlotArea>

Title textタグは、新規のフォント・タイプとサイズを指定するように更新されています。

<Title text="Company Sales 2004" visible="true">  
  <GraphFont name="Tahoma" bold="false"/> 
</Title>

4.7 描画、図形、およびクリップ・アートの追加

BI Publisherでは、Microsoft Wordの描画、図形およびクリップアート機能をサポートしています。これらのオブジェクトをテンプレートに追加し、最終的なPDF出力またはHTML出力にレンダリングできます(これ以外の出力タイプはサポートされていません)。

次のオートシェイプ・カテゴリがサポートされています。

4.7.1 フリーハンド描画の追加

Microsoft Wordのフリーハンド描画ツールを使用して、テンプレートで最終的なPDF出力にレンダリングする図を作成します。

4.7.2 ハイパーリンクの追加

図形にハイパーリンクを追加できます。第4.9.5項「ハイパーリンクの挿入」を参照してください。

4.7.3 図形の重ね合わせ

図形を相互に重ね合せ、Microsoft Wordの透過性設定を使用して、下位レイヤー上の図形を透かしで表示できます。図4-16に、重ね合せた図形の例を示します。

図4-16 重ね合せた図形

図4-16の説明が続きます
「図4-16 重ね合せた図形」の説明

4.7.4 3D効果の使用

BI Publisherでは、図形の3-Dオプションは現在サポートしていません。

4.7.5 Microsoft数式の追加

数式エディタを使用して、出力に数式を生成します。図4-17に、数式の例を示します。

4.7.6 組織図の追加

テンプレートで組織図機能を使用すると、組織図が出力にレンダリングされます。図4-18に組織図の例を示します。

図4-18 組織図の例

図4-18の説明が続きます
「図4-18 組織図の例」の説明

4.7.7 ワードアートの追加

Microsoft Wordのワードアート機能をテンプレートで使用できます。図4-19にワードアートの例を示します。

図4-19 ワードアート・サンプルの例

図4-19の説明が続きます
「図4-19 ワードアート・サンプルの例」の説明


注意:

Microsoftのワードアートの中には、現在ではSVGに変換できないビットマップ操作を使用しているものがあります。サポートされていないワードアートをテンプレートで使用するには、WordArtのスクリーンショットを取得してイメージ(gif、jpegまたはpng)として保存し、そのイメージでワードアートを置き換えることができます。


4.7.8 データドリブン図形の追加

BI Publisherでは、テンプレートでの静的図形および機能のサポートだけでなく、受信データまたはパラメータに基づく図形の操作もサポートされます。次の操作がサポートされています。

  • レプリケート

  • 移動

  • サイズ変更

  • テキストの追加

  • 傾斜

  • 回転

これらの操作は1つの図形に適用されるだけでなく、Microsoft Wordのグループ機能を使用して、図形をまとめて結合し、グループとして操作できます。

4.7.9 操作コマンドの組込み

図4-20に示すように、図形のプロパティ・ダイアログの「Web」タブで、図形の操作コマンドを入力します。

図4-20 「図の書式設定」の「オートシェイプ」ダイアログ

図4-20の説明が続きます
「図4-20 「図の書式設定」の「オートシェイプ」ダイアログ」の説明

4.7.10 図形のレプリケート

for-eachループでデータ要素を複製するのと同じ方法で、受信XMLデータに基づいて図形を複製できます。この場合、for-each@shapeコマンドをshape-offset宣言と組み合せて使用します。たとえば、図形をページの下方へ複製するには、次の構文を使用します。

<?for-each@shape:SHAPE_GROUP?>
 <?shape-offset-y:(position()-1)*100?>
<?end for-each?>

説明:

for-each@shapeは、図形コンテキストのfor-eachループを開始します。

SHAPE_GROUPは、XMLファイルの繰返し要素の名前です。要素SHAPE_GROUPの出現ごとに、新規の図形が作成されます。

shape-offset-y:は、y軸に沿って図形をオフセットするコマンドです。

(position()-1)*100)は出現ごとにオフセットをピクセル単位で設定します。XSL positionコマンドにより、グループ内のレコード・カウンタ(1、2、3、4)が戻されます。その数値から1が差し引かれ、その結果に100が掛け合されます。したがって、最初の出現では(1-1) * 100であるため、オフセットが0になります。2つ目の出現のオフセットでは(2-1) *100であるため、100ピクセルとなります。後続の各出現では、オフセットがページ内でもう100ピクセル下になります。

4.7.11 図形へのテキストの追加

受信したXMLデータまたはパラメータ値に基づき、図形にテキストを動的に追加できます。プロパティ・ダイアログで、次の構文を入力します。

<?shape-text:SHAPETEXT?>

ここで、SHAPETEXTはXMLデータ内の要素名です。実行時に、テキストが図形に挿入されます。

4.7.12 直線または曲線に沿ったテキストの追加

受信したXMLデータまたはパラメータに基づき、直線または曲線に沿ってテキストを追加できます。直線を描画した後、プロパティ・ダイアログに次のように入力します。

<?shape-text-along-path:SHAPETEXT?>

ここで、SHAPETEXTはXMLデータ内の要素です。実行時に、要素SHAPETEXTの値が直線の上および直線沿いに挿入されます。

4.7.13 図形の移動

XMLデータに基づき、X軸とY軸の両方向に図形を移動または入替えできます。たとえば、図形をY軸方向に200ピクセル、X軸方向に300ピクセル移動するには、図形のプロパティ・ダイアログに次のコマンドを入力します。

<?shape-offset-x:300?>
<?shape-offset-y:200?>

4.7.14 図形の回転

受信したデータに基づいて指定された軸を中心にして図形を回転するには、次のコマンドを使用します。

<?shape-rotate:ANGLE;'POSITION'?>

説明:

ANGLEは、図形を回転する度合いの数値です。角度が正の数である場合、回転は右回りです。負の数の場合は、回転は左回りです。

POSITIONは、回転を実行する際の軸となるポイントであり、left/topなどとなります。有効な値は、left、rightまたはcenterと、center、topまたはbottomの組合せです。デフォルトはleft/topです。図4-21に、これらの有効な値を示します。

図4-21 図形の回転値

図4-21の説明が続きます
「図4-21 図形の回転値」の説明

右下角を中心として矩形を回転するには、次の構文を入力します。

<?shape-rotate:60,'right/bottom'?>

図形自体の内部における、回転軸となるXおよびY座標を指定することもできます。

4.7.15 図形の傾斜

次のコマンドを使用して、XまたはY軸方向に図形を傾斜させることができます。

<?shape-skew-x:ANGLE;'POSITION'?>
<?shape-skew-y:ANGLE;'POSITION'?>

説明:

ANGLEは、図形を傾斜させる度合いの数値です。角度が正の数である場合、傾斜は右方向です。

POSITIONは、回転を実行する際の軸となるポイントであり、left/topなどとなります。有効な値は、left、rightまたはcenterと、center、topまたはbottomの組合せです。図4-21を参照してください。デフォルトは'left/top'です。

たとえば、右下角を中心として図形を30度傾斜させるには、次の構文を入力します。

<?shape-skew-x:number(.)*30;'right/bottom'?>

4.7.16 図形サイズの変更

適切なコマンドを使用して、単一軸または両方の軸方向に図形のサイズを変更できます。両方の軸方向に図形のサイズを変更するには、次のコマンドを使用します。

<?shape-size:RATIO?>

ここで、RATIOは図形のサイズを増減させる比率です。したがって、値が2の場合、元のサイズの高さと幅を2倍にした図形が生成されます。値が0.5の場合、元のサイズを半分にした図形が生成されます。

X軸またはY軸方向に図形のサイズを変更するには、次のコマンドを使用します。

<?shape-size-x:RATIO?>
<?shape-size-y:RATIO?>

xまたはyの値のみを変更した場合、単一軸方向に図形が拡大または縮小されます。これはデータによって制御できます。

4.7.17 コマンドの結合

また、これらのコマンドを結合し、図形に対して複数の変換を一度に実行できます。たとえば、図形を複製し、各複製について一定角度回転させ、同時にサイズを変更できます。

次の例では、図形を複製し、ページの下方向に50ピクセル分移動し、中心を軸にして5度回転させ、X軸方向に拡大し、さらに図形の番号をテキストとして追加する方法を示しています。

<for-each@shape:SHAPE_GROUP?>
 <?shape-text:position()?>
 <?shape-offset-y:position()*50?>
 <?shape-rotate:5;'center/center'?>
 <?shape-size-x:position()+1?>
<end for-each?>

このコマンドにより、図4-22のような出力が生成されます。

図4-22 図形の変換

図4-22の説明が続きます
「図4-22 図形の変換」の説明

4.7.18 CD評価の例

この例では、受信したXMLファイルのデータに基づいて星による評価を生成するテンプレートの設定方法を示しています。

次のXMLデータを受信したと想定します。

<CATALOG>
 <CD>
  <TITLE>Empire Burlesque</TITLE>
  <ARTIST>Bob Dylan</ARTIST>
  <COUNTRY>USA</COUNTRY>
  <COMPANY>Columbia</COMPANY>
  <PRICE>10.90</PRICE>
  <YEAR>1985</YEAR>
  <USER_RATING>4</USER_RATING>
 </CD>
 <CD>
  <TITLE>Hide Your Heart</TITLE>
  <ARTIST>Bonnie Tylor</ARTIST>
  <COUNTRY>UK</COUNTRY>
  <COMPANY>CBS Records</COMPANY>
  <PRICE>9.90</PRICE>
  <YEAR>1988</YEAR>
  <USER_RATING>3</USER_RATING>
 </CD>
 <CD>
  <TITLE>Still got the blues</TITLE>
  <ARTIST>Gary More</ARTIST>
  <COUNTRY>UK</COUNTRY>
  <COMPANY>Virgin Records</COMPANY>
  <PRICE>10.20</PRICE>
  <YEAR>1990</YEAR>
  <USER_RATING>5</USER_RATING>
 </CD>
 <CD>
  <TITLE>This is US</TITLE>
  <ARTIST>Gary Lee</ARTIST>
  <COUNTRY>UK</COUNTRY>
  <COMPANY>Virgin Records</COMPANY>
  <PRICE>12.20</PRICE>
  <YEAR>1990</YEAR>
  <USER_RATING>2</USER_RATING>
 </CD>
<CATALOG>

CDごとにUSER_RATING要素がある点に注意してください。このデータ要素および図形操作コマンドを使用して、読者が一目で評価を比較できるような視覚的な表示の評価図を作成できます。図4-23に、この処理を行うためのテンプレートを示します。

図4-23 評価の視覚的表示

図4-23の説明が続きます
「図4-23 評価の視覚的表示」の説明

表4-2は、フィールドの値を示しています。

表4-2 フィールドの値

フィールド フォーム・フィールド入力

F

<?for-each:CD?>

TITLE

<?TITLE?>

ARTIST

<?ARTIST?>

E

<?end for-each?>

(星型)

「Web」タブに入力:

<?for-each@shape:xdoxslt:foreach_number($_XDOCTX,1,USER_RATING,1)?>

<?shape-offset-x:(position()-1)*25?>

<?end for-each?>


フォーム・フィールドには、単一要素の値が保持されます。このテンプレートでの唯一の相違点は、星型の値です。複製コマンドは、「オートシェイプの書式設定」ダイアログの「Web」タブにあります。

for-each@shapeコマンドでは、"for...next loop"構造を作成するコマンドを使用できます。開始番号に1、最終番号に値USER_RATING、ステップ値に1を指定します。テンプレートがCDをループすると、USER_RATING値ごとに星型を繰り返す内部ループが作成されます(つまり、値が4の場合、4個の星が生成されます)。図4-24に、このテンプレートおよびXMLサンプルからの出力を示します。

図4-24 XMLファイルの評価データ

図4-24の説明が続きます
「図4-24 XMLファイルの評価データ」の説明

4.7.19 グループ化された図形の例

この例では、図形を結合してグループにし、受信データに対して個別およびグループの両方で対応するよう設定する方法を示しています。次のXMLデータを前提としています。

<SALES>
 <SALE>
  <REGION>Americas</REGION>
  <SOFTWARE>1200</SOFTWARE>
  <HARDWARE>850</HARDWARE>
  <SERVICES>2000</SERVICES>
 </SALE>
 <SALE>
  <REGION>EMEA</REGION>
  <SOFTWARE>1000</SOFTWARE>
  <HARDWARE>800</HARDWARE>
  <SERVICES>1100</SERVICES>
 </SALE>
 <SALE>
  <REGION>APAC</REGION>
  <SOFTWARE>900</SOFTWARE>
  <HARDWARE>1200</HARDWARE>
  <SERVICES>1500</SERVICES>
 </SALE>
</SALES>

ユーザーがすべての地域における売上データを迅速に把握できるように、このデータの図による表示を作成できます。これには、まずMicrosoft Wordで操作の対象となる複合図形を作成します。図4-25は、4個のコンポーネントから構成される複合図形を示しています。

この図形は、赤、黄および青の3つの円柱で構成されています。これらは、ソフトウェア、ハードウェアおよびサービスのデータ要素を表します。結合オブジェクトには、受信データからテキストを受け取るために有効化された矩形も含まれます。

次のコマンドが「Web」タブに入力されています。

赤い円柱: <?shape-size-y:SOFTWARE div 1000;'left/bottom'?>

黄色の円柱: <?shape-size-y:HARDWARE div 1000;'left/bottom'?>

青い円柱: <?shape-size-y:SERVICES div 1000;'left/bottom'?>

shape-sizeコマンドを使用すると、SOFTWARE、HARDWAREおよびSERVICES要素の値に基づいて円柱が拡大または縮小されます。拡大または縮小ファクタを設定するには、この値を1000で割ります。たとえば、値が2000の場合、1000で割ってファクタ2を算出します。図形は現在の2倍の高さで生成されます。

テキスト対応の矩形については、「Web」タブに次のコマンドが含まれます。

<?shape-text:REGION?>

実行時に、REGION要素の値が矩形に表示されます。

これらのすべての図形がグループ化され、グループ・オブジェクトの「Web」タブに次の構文が追加されます。

<?for-each@shape:SALE?>
<?shape-offset-x:(position()-1)*110?>
<?end for-each?>

このコマンド・セットでは、for-each@shapeがSALEグループをループします。shape-offsetコマンドにより、ループ内の次の図形が右方向に指定ピクセル分移動します。式(position()-1)により、オブジェクトの位置が設定されます。position()関数では、ループ処理中にレコード・カウンタが戻されるため、最初の図形では、オフセットが1-1*110、すなわち0となり、オブジェクトの最初のレンダリングがテンプレートで定義された位置に配置されます。後続の出現箇所は、X軸方向(右方向)に110ピクセル分オフセットした位置でレンダリングされます。

図4-26に示すように、実行時に3つの図形のセットがページ全体にレンダリングされます。

図4-26 複数の複合図形セットのレンダリング

図4-26の説明が続きます
「図4-26 複数の複合図形セットのレンダリング」の説明

より一層視覚的にわかりやすいレポートを作成するため、これらの図形を世界地図上に重ねることができます。Microsoft Wordの「順序」ダイアログを使用して、グループ化した図形の背後に地図を重ねます。

  • Microsoft Word 2000ユーザー: 背景用の地図を追加して図形グループを重ねた後、「グループ化」ダイアログを使用して構成全体を1つのグループにします。

  • Microsoft Word 2002/3ユーザー: これらのバージョンのWordには、「ツール」->「オプション」->「全般」タブのに「オートシェイプの挿入時、自動的に新しい描画キャンバスを作成する」オプションがあります。このオプションを使用すると、地図と図形を最終的にグループ化する必要がありません。これで、図4-27に示すような視覚的効果の高い出力をレポートに生成できます。

図4-27 世界地図上の図形

図4-27の説明が続きます
「図4-27 世界地図上の図形」の説明

4.8 サポート対象のMicrosoft Wordの書式設定機能

これまでに説明した機能に加えて、BI Publisherでは、次の各項で説明するMicrosoft Wordの機能もサポートしています。

4.8.1 Microsoft Wordの一般的な機能

  • テキストの大きいブロック

  • 改ページ

    (HTML出力ではサポートされていません)改ページを挿入するには、グループの終了タグの直前で[Ctrl]キーを押しながら[Enter]キーを押します。たとえば、Payables Invoice Registerで、仕入先ごとに新規ページになるようにテンプレートを設定する手順は、次のとおりです。

    1. Supplierグループの終了<?end for-each?>タグの直前にカーソルを置きます。

    2. [Ctrl]を押しながら[Enter]を押して、改ページを挿入します。

    これによって、実行時には、Supplierのそれぞれが新規ページで開始されます。

    このMicrosoft Wordにネイティブの機能を使用すると、レポート出力の最後に空白ページが1ページ出力されます。この空白ページを出力しないようにするには、BI Publisherの改ページ別名を使用します。第4.9.1項「改ページの挿入」を参照してください。

  • ページ番号

    ワード・プロセッサのページ番号付け方法を使用して、最終レポートにページ番号を挿入します。たとえば、Microsoft Wordを使用している場合は、次の手順を実行します。

    1. Insert」メニューから「Page Numbers...」を選択します。

    2. 必要に応じて、「Position」、「Alignment」および「Format」を選択します。

    実行時に、選択内容に従ってページ番号が表示されます。

    HTML出力ではページ番号付けはサポートされておらず、RTF出力ではサポートに制限があります。RTFレポートの生成後に、[F9]を押すとページ番号がリセットされます。

  • 非表示テキスト

    Microsoft Wordではテキストを非表示として書式設定できます。非表示テキストはRTF出力レポートで保持されます。

4.8.2 オブジェクトの整列

テキスト、グラフィック、オブジェクトおよび表は、ワード・プロセッサの配置機能を使用して配置します。双方向性言語は、ワード・プロセッサの左/右揃えコントロールを使用して、自動的に処理されます。

4.8.3 表の挿入

BI Publisherでは、次のMicrosoft Word機能がサポートされます。

  • ネストされた表

  • セル配置

    オブジェクトは、使用しているワード・プロセッサの配置ツールを使用してテンプレートに配置できます。この配置は、最終レポート出力に反映されます。

  • 行の拡張と列の拡張

    テンプレート内の行と列の両方を拡張する手順は次のとおりです。

    1. マージするセルを選択します。

    2. Table」メニューから「Merge Cells」を選択します。

    3. マージしたセル内にデータを通常の方法で配置します。

    実行時に、セルがマージされて表示されます。

  • 表の自動書式設定

    BI Publisherは、Microsoft Wordで使用可能な表の自動書式設定を認識します。

    表を自動書式設定する手順は次のとおりです。

    1. 書式設定する表を選択します。

    2. Table」メニューから「Autoformat」を選択します。

    3. 必要な表の書式を選択します。

    実行時に、選択内容に従って表が書式設定されます。

  • セルのパターンと色

    表のセルまたは行をパターンや色で強調表示する手順は次のとおりです。

    1. セル(複数可)または表を選択します。

    2. Table」メニューから「Table Properties」を選択します。

    3. Table」タブから「Borders and Shading...」ボタンを選択します。

    4. 必要に応じて、罫線および網かけを追加します。

  • 表ヘッダーの繰返し


    注意:

    RTF出力では、この機能はサポートされていません。


    データを表に表示するときに、その表が複数ページにわたることが予想される場合は、各ページの先頭で繰り返すヘッダー行を定義できます。

    ヘッダー行を繰り返す手順は次のとおりです。

    1. 各ページに繰り返し表示する行(複数化)を選択します。

    2. 罫線」メニューで、「タイトル行の繰り返し」を選択します。

  • 行の途中で改ページしないようにする機能

    表の1行に含まれるデータを同じページに表示する機能は、Microsoft Wordの「Table Properties」を使用してオプションとして設定できます。

    行の内容を1ページに収める手順は次のとおりです。

    1. 途中で改ページしないようにする行(複数可)を選択します。

    2. Table」メニューから「Table Properties」を選択します。

    3. 「行」タブで、「行の途中で改ページする」チェック・ボックスの選択を解除します。

  • 固定幅の列

    表の列幅を設定する手順は次のとおりです。

    1. 列を選択し、「表」「表のプロパティ」を選択します。

    2. 「表のプロパティ」ダイアログで「列」タブを選択します。

    3. 「幅を指定する」チェック・ボックスを選択し、列幅を「パーセント(%)」または「mm」で入力します。

    4. Next Column」ボタンを選択して、次の列の幅を設定します。

    列の幅の合計が表の幅の合計になることに注意してください。

  • 文字列の切捨て

    デフォルトでは、表のセル内に入りきらない文字列はセル内で折り返されます。折り返さずに切り捨てる場合は、「Table Properties」ダイアログを使用します。

    表内のテキスト切捨ては、PDFとPPTの出力のみでサポートされています。

    表のセル内のテキストを切捨てる手順は次のとおりです。

    1. 文字列を切り捨てるセル内にカーソルを置きます。

    2. 右クリックして、メニューから「表のプロパティ」を選択するか、「表」「表のプロパティ」に移動します。

    3. 「表のプロパティ」ダイアログから「セル」タブを選択し、次に「オプション」を選択します。

    4. Wrap Text」チェック・ボックスの選択を解除します。

切捨ての例を図4-28に示します。

図4-28 切捨てられた文字列

図4-28の説明が続きます
「図4-28 切捨てられた文字列」の説明


注意:

表でマルチバイト文字(簡体字中国語など)を使用する場合、最終出力における文字の表示が予期しないものになることを防ぐために、列幅が、最大文字にセルの左マージンと右マージンを足した幅を含めるために十分な大きさであることを確認してください。


4.8.4 日付フィールドの挿入

日付は、ワード・プロセッサの日付機能を使用して挿入します。この日付は発行日に対応しており、要求実行日ではないことに注意してください。

4.8.5 ページへの段組みの挿入

BI PublisherはMicrosoft Wordの段組み機能をサポートしており、ページ内で段組みされた出力を発行できます。(ただし、HTML出力ではサポートされません。)

「書式」「段組み」を選択して「段組み」ダイアログ・ボックスを表示し、テンプレートの段数を定義します。

2段形式で住所ラベルを生成するには:

  1. 「段組み」コマンドを使用して、ページを2段に分割します。

  2. 最初の段に繰返し可能なグループを定義します。図4-29に示すように、繰返し可能なグループを定義するのは最初の段のみであることに注意してください。

図4-29 最初の段の繰返し可能なグループ

図4-29の説明が続きます
「図4-29 最初の弾の繰返し可能なグループ」の説明


ヒント:

住所ブロックが複数のページや段に分割されないようにするには、単一セルの表内にラベル・ブロックを埋め込みます。次に、行の途中で改ページしないように「Table Properties」で指定します。第4.8.3項「表の挿入」を参照してください。


このテンプレートにより、図4-30に示すような段組み出力が生成されます。

図4-30 段組みの出力

図4-30の説明が続きます
「図4-30 段組みの出力」の説明

4.8.6 背景および透かしの挿入

BI Publisherは、Microsoft Wordの背景機能をサポートしています。テンプレートに対して単一カラー、グラデーション・カラーまたはイメージ背景を指定し、PDF出力に表示できます。この機能は、PDF出力およびPPT出力のみでサポートされています。

テンプレートに背景を追加するには、「書式」→「背景」メニュー・オプションを使用します。

4.8.6.1 Microsoft Word 2000を使用した背景の追加

「Background」ポップアップ・メニューから、次の処理を実行できます。

  • カラー・パレットから単一色の背景を選択します。

  • 「Fill Effects」を選択して「Fill Effects」ダイアログを開きます。

    このダイアログから、次のサポートされるオプションのいずれかを選択します。

    • グラデーション: 1色または2色のいずれかを選択できます。

    • テクスチャ: 提供されたテクスチャのいずれかを選択するか、独自のテクスチャをロードします。

    • パターン: パターンおよび前景/背景色を選択します。

    • 図: 背景イメージとして使用するピクチャをロードします。

4.8.6.2 Microsoft Word 2002以降を使用したテキストまたはイメージの透かしの追加

これらのバージョンのMicrosoft Wordでは、テキストまたはイメージの透かしを追加できます。

「書式」メニューから「背景」「透かし」を選択し、ダイアログから次の選択を行います。

  • 図: イメージをロードし、ドキュメントでのスケーリングを定義します。

  • テキスト: 事前定義済のテキスト・オプションを使用するか、独自のテキストを入力し、フォント、サイズおよびテキストのレンダリング方法を指定します。

    図4-31は、テキストの透かしを表示するための入力が完了した「透かし」ダイアログを示しています。

図4-31 「透かし」ダイアログ

図4-31の説明が続きます
「図4-31 「透かし」ダイアログ」の説明

4.8.7 サポートされていないMicrosoft Wordの機能

RTFテンプレートでは、ソフト・リターンを使用したテキストの配置はできません。これではなく、ハード・キャリッジ・リターンを使用してください。ソフト・リターンは、生成後の出力で予測外の結果が発生する可能性があります。

4.9 テンプレート機能

BI Publisherでは、次の各項で説明するテンプレート機能がサポートされています。

4.9.1 改ページの挿入


注意:

改ページは、PDF、RTFおよびPPT出力でサポートされています。改ページは、HTML出力ではサポートされていません。


特定要素の出現後に改ページを作成するには、split-by-page-break別名を使用します。これによって、特定要素のインスタンスごとにレポート出力に改ページが挿入されます。

グループの出現ごとに改ページを挿入するには、グループを閉じる<?end for-each?>タグの直前でグループ内にsplit-by-page-breakフォーム・フィールドを挿入します。このフォーム・フィールドのヘルプ・テキストに次の構文を入力します。

<?split-by-page-break:?>

次のXMLで、新規仕入先ごとに改ページを作成するとします。

<SUPPLIER>
 <NAME>My Supplier</NAME>
 <INVOICES>
  <INVOICE>
   <INVNUM>10001-1</INVNUM>
   <INVDATE>1-Jan-2005</INVDATE>
   <INVAMT>100</INVOICEAMT>
  </INVOICE>
  <INVOICE>
   <INVNUM>10001-2</INVNUM>
   <INVDATE>10-Jan-2005</INVDATE>
   <INVAMT>200</INVOICEAMT>
  </INVOICE>
 </INVOICES>
</SUPPLIER>
<SUPPLIER>
 <NAME>My Second Supplier</NAME>
 <INVOICES>
  <INVOICE>
   <INVNUM>10001-1</INVNUM>
   <INVDATE>11-Jan-2005</INVDATE>
   <INVAMT>150</INVOICEAMT>
  </INVOICE>
…

図4-32に示すテンプレート・サンプルでは、PageBreakというフィールドにsplit-by-page-break構文が含まれています。

図4-32 改ページの挿入

図4-32の説明が続きます
「図4-32 改ページの挿入」の説明

<?end for-each?>フィールドの直前に、<?split-by-page-break:?>構文を含むPageBreakフィールドを配置します。このPageBreakフィールドは、SUPPLIERループの最後に位置します。これによって、新規仕入先が出現する前に必ず改ページが挿入されます。この方法では、グループの後にMicrosoft Word固有の改ページを使用した場合に、グループの最後に余分なページが出力されません。

4.9.2 初期ページ番号の挿入


注意:

初期ページ番号はPDFおよびPPT出力でサポートされています。HTMLおよびRTFの出力ではサポートされていません。


一部のレポートでは、初期ページ番号を指定の番号に設定する必要があります。たとえば、月次レポートでは、月ごとに番号を連続する必要があります。BI Publisherでは、この要件をサポートするために、テンプレートにページ番号を設定できます。

テンプレートで次の構文を使用して、初期ページ番号を設定します。

<?initial-page-number:pagenumber?>

ここで、pagenumberは数値を保持するXML要素またはパラメータです。

また、BI Publisherは前の項からのページ番号の継続をサポートしています。ドキュメントの新しい項のデフォルト動作は、ページ番号付けをリセットすることです。ただし、レポートでページ番号付けを後続セクションまで継続する必要がある場合は、次のコマンドを使用します。

<?initial-page-number:'auto'?>

このコマンドは、前のセクションからのページ番号付けの継続を可能にします。

例1: XMLデータ要素からページ番号を設定

次の例のようにXMLデータに初期ページ番号を持つ要素が含まれている場合、

<REPORT>
  <PAGESTART>200<\PAGESTART>
  ....
</REPORT>

テンプレートには次のように入力します。

<?initial-page-number:PAGESTART?>

これで、初期ページ番号はPAGESTART要素の値になり、この例では200になります。

例2: パラメータ値を渡してページ番号を設定

PAGESTARTというパラメータを定義すると、このパラメータをコールして初期値を渡すことができます。

テンプレートには次のように入力します。

<?initial-page-number:$PAGESTART?>


注意:

まずテンプレートでパラメータを宣言する必要があります。第4.13.2項「パラメータの設定」を参照してください。


4.9.3 最終ページのみのコンテンツの指定


注意:

この機能は、PDFおよびPPT出力のみでサポートされています。


BI Publisherでは、先頭ページ、奇数ページおよび偶数ページに対して異なるページ・レイアウトを指定するMicrosoft Wordの機能をサポートしています。これらのオプションを実装するには、単に「ファイル」メニューから「ページ設定」を選択して、「レイアウト」タブを選択します。BI Publisherでは、このダイアログの設定が認識されます。

ただし、Microsoft Wordには最終ページのみの設定が提供されていません。この機能は、最終ページにのみ特定の場所にチェックや要約などのコンテンツを必要とするような小切手、請求書または発注書などの文書に便利です。BI Publisherには、この機能が提供されています。

最終ページのみのコンテンツを指定する手順は次のとおりです。

  1. テンプレート内にセクション区切りを作成して、最終ページの内容がレポートの残りの部分から確実に分離されるようにします。

  2. 次の構文を最終ページに挿入します。

    <?start@last-page:body?>

    <?end body?>

このページ上で、この2つのタグの上または下にくるコンテンツはレポートの最終ページにのみ表示されます。また、このコマンドは明示的に最終ページのコンテンツを指定するため、レポートに対してそれまでに定義したヘッダーやフッターを必要とする場合は最終ページに再挿入する必要があります。

この例では、最終ページの最下部に要約が表示される請求書リストを生成するレポートに対して、最終ページのみ別指定の機能を使用しています。

次のXMLを想定します。

<?xml version="1.0" encoding="WINDOWS-1252"?>
<INVOICELIST>
 <VENDOR>
  <VENDOR_NAME>Nuts and Bolts Limited</VENDOR_NAME>
  <ADDRESS>1 El Camino Real, Redwood City, CA 94065</ADDRESS>
  <INVOICE>
   <INV_TYPE>Standard</INV_TYPE>
   <INVOICE_NUM>981110</INVOICE_NUM>
   <INVOICE_DATE>10-NOV-04</INVOICE_DATE>
   <INVOICE_CURRENCY_CODE>EUR</INVOICE_CURRENCY_CODE>
   <ENT_AMT>122</ENT_AMT>
   <ACCTD_AMT>122</ACCTD_AMT>
   <VAT_CODE>VAT22%</VAT_CODE>
  </INVOICE>
  <INVOICE>
   <INV_TYPE>Standard</INV_TYPE>
   <INVOICE_NUM>100000</INVOICE_NUM>
   <INVOICE_DATE>28-MAY-04</INVOICE_DATE>
   <INVOICE_CURRENCY_CODE>FIM</INVOICE_CURRENCY_CODE>
   <ENT_AMT>122</ENT_AMT>
   <ACCTD_AMT>20.33</ACCTD_AMT>
   <VAT_CODE>VAT22%</VAT_CODE>
  </INVOICE>
 </VENDOR>
 <VENDOR>
  ...
<INVOICE>
 ...
  </INVOICE>
 </VENDOR>
 <SUMMARY>
  <SUM_ENT_AMT>61435</SUM_ENT_AMT>
  <SUM_ACCTD_AMT>58264.68</SUM_ACCTD_AMT>
  <TAX_CODE>EU22%</TAX_CODE>
 </SUMMARY>
</INVOICELIST>

レポートには、各VENDORおよびそのINVOICEデータとともに、最終ページにのみ最下部にSUMMARYセクションが表示されます。図4-33は、このテンプレートを示しています。

図4-33 テンプレート・ページ1

図4-33の説明が続きます
「図4-33 テンプレート・ページ1」の説明

テンプレートの先頭ページにMicrosoft Wordのセクション区切り(タイプ: 「next page」)を挿入します。最終ページの場合は、要約表をページの最下部に配置するために複数の改行文字を挿入します。要約した表を図4-34に示します。

図4-34 最終ページのみのレイアウト

図4-34の説明が続きます
「図4-34 最終ページのみのレイアウト」の説明

この例は、次のようになっています。

  • FおよびEのコンポーネントには、for-eachグループ文が含まれています。

  • グレー表示のレポート・フィールドは、XML要素のプレースホルダです。

  • 「Last Page Placeholder」フィールドには、次の構文が含まれます。

    <?start@last-page:body?> <?end body?>

    これは、最終ページのレイアウトを宣言するためのものです。この文の上または下のコンテンツは、すべて最終ページにのみ表示されます。文の上のコンテンツはヘッダーとみなされ、文の下のコンテンツはフッターとみなされます。

最終ページに繰り越す必要があるヘッダーおよびフッターがレポートに含まれている場合は、最終ページ上で再挿入する必要があります。詳細は、第4.5項「ヘッダーとフッターの定義」を参照してください。

最終ページのレイアウトを指定するために、文書にセクション区切り(タイプ: 「next page」)を挿入する必要があります。この例は、Oracle BI Publisher Template Builder for Wordのインストール内のサンプル・フォルダにあります。

ドキュメントの新しい項セクションのデフォルト動作によってページ番号付けがリセットされるため、最終ページのページ番号はリセットされます。前の項からページ番号付けを継続するには、次のコマンドを使用します。

<?initial-page-number:'auto'?>

このコマンドは、前のセクションからのページ番号付けの継続を可能にします。

レポートが1ページのみの場合は、先頭ページのレイアウトが使用されることに注意してください。単一ページのレポートでデフォルトとして最終ページのレイアウトを使用する必要がある場合(小切手印刷の実装など)、最終ページで「Last Page Placeholder」のかわりに次の代替構文を使用できます。

<?start@last-page-first:body?> <?end body?>

この構文に置き換えると、1ページのみのレポートに最終ページ・レイアウトが使用されます。

4.9.4 偶数ページまたは奇数ページで終了するには


注意:

この機能は、PDF出力のみでサポートされています。RTFおよびHTMLの出力ではサポートされていません。


レポートのレイアウトが奇数ページと偶数ページで異なる場合は、レポートを強制的に奇数または偶数ページで終了させることができます。たとえば、奇数/偶数フッター別指定機能を使用して、レポートのフッターに発注の条件を挿入し(第4.5.4項「先頭ページ、奇数ページ、偶数ページの個別定義」を参照)、最終ページに条件が印刷されるようにできます。

あるいは、製本要件を指定し、特定のレイアウトを指定せずにレポートを偶数ページで終了させることもできます。

レイアウトが設定されている偶数ページで終了する場合

  1. 次の構文をテンプレートのフォーム・フィールドに挿入します。

    <?section:force-page-count;'end-on-even-layout'?>
    

レイアウトが設定されている奇数ページで終了する場合

  1. 次の構文をテンプレートのフォーム・フィールドに挿入します。

    <?section:force-page-count;'end-on-odd-layout'?>
    

最終ページにレイアウト要件がなく、ページ数が希望する奇数または偶数となるように空白のページを出力する場合は、次の構文を使用します。

<?section:force-page-count;'end-on-even'?>

または

<?section:force-page-count;'end-on-odd'?>

4.9.5 ハイパーリンクの挿入


注意:

ハイパーリンクは、PDF、RTF、HTML、PPTおよびExcel出力でサポートされています。


BI Publisherでは、いくつか異なるタイプのハイパーリンクがサポートされています。ハイパーリンクは、固定または動的なハイパーリンクが可能で、内部または外部のいずれかの宛先にリンクできます。図形に追加することもできます。

  • テキストまたは図形のいずれかに静的なハイパーリンクを挿入するには、使用しているワード・プロセッサのハイパーリンク挿入機能を使用します。

    テキストまたは図形に静的なハイパーリンクを挿入する手順は次のとおりです。

    1. テキストまたは図形を選択します。

    2. 右マウス・メニューを使用して「ハイパーリンク」を選択するか、「挿入」メニューから「ハイパーリンク」を選択します。

    3. Insert Hyperlink」ダイアログ・ボックスに提供されている方法のいずれかを使用してURLを入力します。

    図4-35は、Microsoft Wordの「ハイパーリンクの挿入」ダイアログ・ボックスを使用した静的なハイパーリンクの挿入を示しています。

    図4-35 静的なハイパーリンク

    図4-35の説明が続きます
    「図4-35 静的なハイパーリンク」の説明

  • 入力XMLデータに、ハイパーリンクまたはその一部を含む要素が含まれている場合は、実行時に動的なハイパーリンクを作成できます。「ハイパーリンクの挿入」ダイアログ・ボックスのファイルまたはWebページ名フィールドに、次の構文を入力します。

    {URL_LINK}

    ここで、URL_LINKは受信したデータ要素名です。

    XMLデータ・ファイルから要素を追加して作成する固定のURLの場合、次の構文を入力します。

    http://www.example.com?product={PRODUCT_NAME}

    ここで、PRODUCT_NAMEは受信したデータ要素名です。

    いずれの場合も、実行時に動的なURLが作成されます。

    図4-36に、Microsoft Wordの「ハイパーリンクの挿入」ダイアログ・ボックスを使用した動的なハイパーリンクの挿入を示します。受信XMLファイルのデータ要素SUPPLIER_URLには、実行時にレポートに挿入されるハイパーリンクが含まれています。

    図4-36 動的なハイパーリンク

    図4-36の説明が続きます
    「図4-36 動的なハイパーリンク」の説明

  • 実行時にパラメータを渡して動的URLを作成することもできます。

    URLを作成するには、次のように{ }で囲んだパラメータおよび要素名を入力します。

    {$SERVER_URL}{$REPORT}/cstid={CUSTOMER_ID}
    

    ここで、SERVER_URLおよびREPORTは実行時にテンプレートに渡されるパラメータで($記号に注目してください)、CUSTOMER_IDはXMLデータ要素です。このリンクは、次のように表示されます。

    http://myserver.domain:8888/CustomerReport/cstid=1234

URLにターゲット属性を追加するには、URL文字列に次を追加します。

??target=_target_value

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

http://www.example.com??target=_top 

ターゲット属性の値は次のとおりです。

  • _top

  • _blank

  • _self

  • _parent

  • framename

次の構文を使用すると、ターゲットの値で動的に渡すことができます。

http://www.example.com/index.html??target={$myTarget} 

ここで、myTargetは、値を保持するパラメータの名前です。

4.9.5.1 内部リンクの挿入

Microsoft Wordのブックマーク機能を使用して内部リンクを挿入します。

内部リンクを挿入する手順は次のとおりです。

  1. カーソルをドキュメント内の任意の宛先に合せます。

  2. 「挿入」メニューで「ブックマーク」を選択します。

  3. 「ブックマーク」ダイアログにこのブックマークの名前を入力して「追加」を選択します。

  4. ブックマークの宛先としてリンクする文書内のテキストまたは図形を選択します。

  5. 右マウス・メニューを使用して「ハイパーリンク」を選択するか、「挿入」メニューから「ハイパーリンク」を選択します。

  6. 「ハイパーリンクの挿入」ダイアログで、「ブックマーク」を選択します。

  7. 作成済のブックマークをリストから選択します。

実行時に、生成されたレポート内にリンクが保持されます。

4.9.6 目次の組込み


注意:

目次機能は、PDFおよびPPT出力でサポートされています。RTFのサポートは制限されていて、レポート生成後に、ユーザーは、[F9]を押してページ番号をリセットする必要があります。


BI Publisherでは、RTF仕様の目次生成機能をサポートしています。目次を挿入するには、使用しているワード・プロセッサの手順に従ってください。

BI Publisherには、XMLデータからドキュメント内の動的な項目見出しを作成する機能もあります。作成したセクション・ヘッダーは目次に組み込むことができます。

動的なヘッダーを作成する手順は、次のとおりです。

  1. ドキュメントの本文に見出しのプレースホルダを入力し、ワード・プロセッサのスタイル機能を使用して、そのプレースホルダを見出しとして書式設定します。この機能ではフォーム・フィールドを使用できません。

    たとえば、レポート対象の会社ごとに、レポートに見出しを表示するとします。この場合、XMLデータ要素タグ名は<COMPANY_NAME>になります。テンプレートで、見出しを表示する<?COMPANY_NAME?>を入力します。次に、テキストをヘッダーとして書式設定します。

  2. 目次は、ワード・プロセッサの目次機能を使用して作成します。

実行時に、TOCプレースホルダと見出しテキストが置換されます。

4.9.7 PDF出力でのしおりの生成

RTFテンプレート内に目次を定義した場合、目次の定義を使用して出力PDFのナビゲーション・ペインにある「Bookmarks」タブにリンクを生成できます。しおりは、静的または動的のいずれの方法でも生成できます。


注意:

RTFテンプレートでは、シングル・ポイントのしおりのみがサポートされています。これによってドキュメント内でのリンク(Goto)機能が実現します。ブックマークでは配列はサポートされていません。


目次作成の詳細は、第4.9.6「目次の組込み」を参照してください。

  • 静的な目次のリンクを作成するには、次の手順を実行します。

    次の構文を入力します。

    <?copy-to-bookmark:?>

    (目次の直前)

    <?end copy-to-bookmark:?>

    (目次の直後)

  • 動的な目次のリンクを作成するには、次の手順を実行します。

    次の構文を入力します。

    <?convert-to-bookmark:?>

    (目次の直前)

    <?end convert-to-bookmark:?>

    (目次の直後)

PDFファイルが開かれるときに、ブックマークの初期状態を制御するには、次コマンドを使用します。

<?collapse-bookmark:state;level?>

説明:

状態は、次の値を持つことができます。

  • hide: 目次のエントリを閉じます。

  • show: 目次のエントリを開きます。

および

レベルにより、目次を閉じるレベルが設定されます。たとえば、「1」を指定すると、目次のエントリの最初のレベルが閉じられ、「2」を指定すると、第1と第2のレベルのエントリが閉じられます。

次の例に示すように、このコマンドは<?copy-to-bookmark:?><?convert-to-bookmark:?>とともに使用します。

  • 目次エントリの第1レベルと第2レベルを非表示にする静的な目次を作成するには、次を入力します。

    <?copy-to-bookmark:?> 
    <?collapse-bookmark:hide;2?>
    

    (目次の直前)

    <?end copy-to-bookmark:?> 
    

    (目次の直後)

  • 開いた目次の第1レベルと第2レベルを示す動的な目次のリンクを作成するには、次を入力します。

    <?convert-to-bookmark:>
    <?collapse-bookmark:show;2?>
    

    (目次の直前)

    <?end convert-to-bookmark:?>
    

    (目次の直後)

4.9.8 チェック・ボックスの挿入


注意:

チェック・ボックスはPDF出力でのみサポートされています。


テンプレートにチェック・ボックスを組込み、受信したデータの値に基づいて選択済または選択解除済として表示するように定義できます。

テンプレートにチェック・ボックスを定義する手順は次のとおりです。

  1. テンプレート内で、チェック・ボックスを表示する位置にカーソルを置き、図4-37に示すように「フォーム」ツールバーからチェック ボックス フォーム フィールドを選択します。

    図4-37 チェック・ボックス・フォーム・フィールド

    図4-37の説明が続きます
    「図4-37 チェック・ボックス・フォーム・フィールド」の説明

  2. フィールドを右クリックして「Check Box Form Field Options」ダイアログを開きます。

  3. Default value」で「Checked」または「Not Checked」のいずれかを指定します。

  4. 「Form Field Help Text」ダイアログで、ボックスの動作を決める基準を入力します。この基準は、ブール式(つまり、結果としてtrueまたはfalseを戻す式)であることが必要です。

    たとえば、XMLデータに<population>という要素が含まれているとします。<population>の値が10,000を超える場合は、チェック・ボックスが選択されて表示されるようにします。この場合は、ヘルプ・テキスト・フィールドに次のように入力します。

    <?population>10000?>
    

    ヘルプ・テキストのコーディングを図4-38に示します。

    図4-38 ヘルプ・テキストのコード例

    図4-38の説明が続きます
    「図4-38 ヘルプ・テキストのコード例」の説明

    if文を作成する必要がないことに注意してください。入力した式がif文として処理されます。

    チェック・ボックスを使用したテンプレート例については、第4.9.9項「ドロップダウン・リストの挿入」を参照してください。

4.9.9 ドロップダウン・リストの挿入

BI Publisherでは、ドロップダウン・フォーム・フィールドを使用して、テンプレートでXMLデータからドロップダウン・フォーム・フィールドで定義する、他の値への相互参照を作成できます。

たとえば、次のXMLについて考えてみます。

<countries>
 <country>
  <name>Chad</name>
  <population>7360000</population>
  <continentIndex>5</continentIndex>
 </country>
 <country>
  <name>China</name>
  <population>1265530000</population>
  <continentIndex>1</continentIndex>
 </country>
 <country>
  <name>Chile</name>
  <population>14677000</population>
  <continentIndex>3</continentIndex>
 </country>
. . . 
</countries>

<country>エントリのそれぞれに、大陸を表す数値である<continentindex>エントリが含まれています。ドロップダウン・フォーム・フィールドを使用すると、<continentindex>値と実際の大陸名を相互参照する索引をテンプレートに作成できます。さらに、この大陸名を発行レポートに表示できます。

この大陸の例に対する索引を作成する手順は、次のとおりです。

  1. テンプレート内で、ドロップダウン・リストの値を表示する位置にカーソルを置き、図4-39に示すように「フォーム」ツールバーからドロップダウン フォーム フィールドを選択します。

    図4-39 ドロップダウン フォーム フィールド

    図4-39の説明が続きます
    「図4-39 ドロップダウン フォーム フィールド」の説明

  2. フィールドを右クリックして「Drop-Down Form Field Options」ダイアログを表示します。

  3. それぞれの値を「Drop-down item」フィールドに追加して「Add」をクリックすると、その値が「Items in drop-down list」グループに追加されます。値は、最初の値から始めて1から順に索引付けされます。たとえば、大陸のリストは表4-3のように格納されます。

    表4-3 大陸の索引値

    索引

    1

    アジア

    2

    北アメリカ

    3

    南アメリカ

    4

    ヨーロッパ

    5

    アフリカ

    6

    オーストラリア


  4. 次に、「ヘルプ・テキスト」テキスト・ボックスを使用して、ドロップダウン・フィールド値の索引を保持するXML要素名を入力します。

    この例の場合は、次のように入力します。

    <?continentIndex?>
    

    図4-40は、この例のドロップダウン・フォーム・フィールド・オプションダイアログを示しています。

    図4-40 ドロップダウン・フォーム・フィールド・オプション

    図4-40の説明が続きます
    「図4-40 ドロップダウン・フォーム・フィールド・オプション」の説明

チェック・ボックスおよびドロップダウン・リスト機能を使用して、人口データを、一定の制限に到達した数値を示すチェック・ボックスとともに表示するレポートを作成できます。例を図4-41に示します。

図4-41 チェック・ボックスを使用した人口データ・レポート

図4-41の説明が続きます
「図4-41 チェック・ボックスを使用した人口データ・レポート」の説明

図4-42にこのレポートを作成するテンプレートを示し、このフィールドの値を表4-4に示します。

図4-42 人口データ・レポートのテンプレート

図4-42の説明が続きます
「図4-42 人口データ・レポートのテンプレート」の説明

表4-4 ドロップダウン・リストのフィールド

フィールド フォーム・フィールド入力 説明

FE

<?for-each:country?>

country繰返しグループを開始します。

中国

<?name?>

name要素のプレースホルダ。

1,000,000

<?population?>

population要素のプレースホルダ。

(チェック・ボックス)

<?population>1000000?>

チェック・ボックスの条件を設定します。population要素の値が1,000,000を超えると、チェック・ボックスが選択されて表示されます。

アジア

<?contintentIndex?>

continentIndex要素のドロップダウン・フォーム・フィールド。内容については前述の説明を参照してください。実行時に、XML要素の値は、ドロップダウン・フォーム・フィールドで相互参照される値に置換されます。

EFE

<?end for-each?>

countryグループを終了します。


4.10 条件付き書式の使用


注意:

Template Builderを使用して条件付きリージョンと条件付き書式を挿入する方法の詳細は、第5.4.8項「条件付きリージョンの挿入および編集」および第5.4.9項「条件付き書式の挿入」を参照してください。


条件付き書式設定は、特定の条件を満たした場合のみ書式設定要素を表示する場合に指定します。BI Publisherでは、単純なif文のほかに、複雑なchoose式の使用もサポートしています。

指定できる条件付き書式設定はXSLまたはXSL:FOコードで、実際のRTFオブジェクト(表やデータなど)を指定することもできます。たとえば、レポートされた数値が特定のしきい値に達した場合に赤で網かけ表示するように指定できます。また、この機能を使用すると、受信したXMLデータに基づいて表の列や行を非表示にすることもできます。

この項では、次のトピックで条件付き書式設定について説明します。

4.10.1 If文の使用

if文を使用すると、単純な条件を定義できます(たとえば、データ・フィールドが特定の値かどうか)。

If文を指定する手順は次のとおりです。

  1. 次の構文を挿入して、条件領域の開始を指定します。

    <?if:condition?>

  2. 構文<?end if?>を条件領域の最後に挿入します。

たとえば、仕入先名が「Company A」の場合のみ請求書を表示するようにPayables Invoice Registerを設定するには、テンプレートの「Supplier」フィールドの前に、構文<?if:VENDOR_NAME='COMPANY A'?>を挿入します。

請求書表の後に<?end if?>タグを入力します。

この例を図4-43に示します。構文は、フォーム・フィールドに挿入するか、またはテンプレートに直接挿入できることに注意してください。

4.10.2 ボイラープレート・テキストでのIf文の使用

次の自由書式テキストにIF文を組み込むとします。

The program was (not) successful.

<SUCCESS>というXMLタグの値が「N」の場合のみ、「not」を表示する必要があるとします。

この要件を満たすには、BI Publisherのコンテキスト・コマンドを使用して、ブロック(デフォルトの配置)ではなくインライン・シーケンスにif文を配置します。


注意:

コンテキスト・コマンドの詳細は、第4.18項「コンテキスト・コマンドを使用した命令の配置の制御」を参照してください。


たとえば、次のコードを作成したとします。

The program was <?if:SUCCESS='N'?>not<?end if?> successful.

次の例では望ましくない結果が発生します。

The program was
not
successful.

これは、BI Publisherでは、デフォルトでブロックに対して命令が適用されるためです。if文がインライン・シーケンスに挿入されるように指定するには、次のように入力します。

The program was <?if@inlines:SUCCESS='N'?>not<?end if?> 
successful.

この構成では、次のように表示されます。

The program was successful.

これは、SUCCESSが「N」でない場合の結果です。

または

The program was not successful.

これは、SUCCESSが「N」の場合の結果です。


注意:

@inlinesif構文で使用する場合、同じ文中のその他のif構文すべてで、コンテキスト・コマンド@inlineを使用する必要があります。@inlinesFOR-EACH構文で使用する場合、この文中にあるその他のifFOR-EACH構文すべてで、コンテキスト・コマンド@inlineを使用する必要があります。


4.10.3 If-Then-Else文の使用

BI Publisherでは、一般的なプログラミング構造のif-then-elseをサポートしています。この文は、条件を判断し、その条件に基づいて結果を表示する必要がある場合に特に有用です。たとえば、次のように入力します。

IF X=0 THEN
 Y=2
ELSE
 Y=3
END IF

これらの文は、次のようにネストすることもできます。

IF X=0 THEN
 Y=2
ELSE
 IF X=1 THEN
   Y=10
 ELSE Y=100
END IF

次の構文を使用してif-then-else文をRTFテンプレートに作成します。

<?xdofx:if element_condition then result1 else result2 end if?>

たとえば、次の文はAMOUNT要素値を判断します。値が1000を超えた場合は「Higher」、1000未満の場合は「Lower」、1000の場合は「Equal」と表示されます。

<?xdofx:if AMOUNT > 1000 then 'Higher'
  else
  if AMOUNT < 1000 then 'Lower'
   else
   'Equal'
end if?>

4.10.4 Choose文の挿入

choose、whenおよびotherwiseの各要素を使用して、複数の条件判断を表現します。受信したXMLデータで特定の条件が満たされると、テンプレートの指定セクションがレンダリングされます。これは、RTFテンプレートの強力な機能です。通常のXSLプログラミングでは、chooseコマンドである条件が満たされると、後続のXSLコードが実行されます。ただし、テンプレートでは、条件フローに視覚的なウィジェットを実際に使用できます(次の例では表を使用)。

これらの要素については、次の構文を使用します。

<?choose:?>

<?when:expression?>

<?otherwise?>

4.10.4.1 条件付き書式の例

次の例は、EXEMPT_FLAGフィールドとPOSTED_FLAGフィールドの値に応じてデータ行を表示するchoose式を示しています。EXEMPT_FLAGが「^」の場合、データ行は淡い灰色でレンダリングされます。POSTED_FLAGが「*」の場合、データ行は濃い灰色の網掛けでレンダリングされます。それ以外の場合、データ行は網かけなしでレンダリングされます。

図4-44は、フォーム・フィールドのデフォルト・テキストを表示しています。表4-5は、フォーム・フィールドのヘルプ・テキスト・エントリを示しています。

図4-44 条件付き書式の例

図4-44の説明が続きます
「図4-44 条件付き書式の例」の説明

表4-5 フォーム・フィールドのデフォルト・テキスト

この例のフォーム・フィールドのデフォルト・テキスト入力 フォーム・フィールドのヘルプ・テキスト入力

<Grp:VAT

<?for-each:G_VAT?>G_VATグループを開始します。

<Choose

<?choose:?>choose文を開きます。

<When EXEMPT_FLAG='^'

<?when: EXEMPT_FLAG='^'?>EXEMPT_FLAG要素をテストして、trueの場合は表示される最初の表を使用します。

End When>

<?end when?>EXEMPT_FLAGテストを終了します。

<When POSTED_FLAG='*'

<?when:POSTED_FLAG='*'?>POSTED_FLAG要素をテストして、trueの場合は、次の表を使用します。

End When>

<?end when?>POSTED_FLAGテストを終了します。

Otherwise

<?otherwise:?>前述のいずれもtrueでない場合は、次の表を使用します。

End Otherwise>

<?end otherwise?>otherwise文を終了します。

End Choose>

<?end choose?>choose文を終了します。

End Vat>

<?end for-each?>G_VATグループを終了します。


4.10.5 列の書式設定

データの列は、条件に基づいて、ドキュメント出力に表示したり非表示にできます。次の例では、列が要素属性の値に基づいてのみ表示されるように、表を設定する方法を示します。

この例では、次のXMLで表される価格表のレポートを示します。

<items type="PUBLIC"> <! -  can be marked 'PRIVATE'  - >
 <item>
  <name>Plasma TV</name>
  <quantity>10</quantity>
  <price>4000</price>
 </item>
 <item>
  <name>DVD Player</name>
  <quantity>3</quantity>
  <price>300</price>
 </item>
 <item>
  <name>VCR</name>
  <quantity>20</quantity>
  <price>200</price>
 </item>
 <item>
  <name>Receiver</name>
  <quantity>22</quantity>
  <price>350</price>
 </item>
</items>

items要素に関連付けられているtype属性に注目してください。このXMLでは、PUBLICとマークされています。これは、このリストがPRIVATEリストではなく、パブリック・リストであることを示しています。publicバージョンのリストの場合、数量列は出力に表示されませんが、ここでは、リスト・タイプに基づいて、1つで両方のバージョンに使用可能なテンプレートを開発します。

図4-45に、条件に基づいて数量列を表示または非表示にする単純なテンプレートを示します。

図4-45 数量列の表示または非表示

図4-45の説明が続きます
「図4-45 数量列の表示または非表示」の説明

表4-6は、図4-45に示されたテンプレートへの入力を示しています。

表4-6 テンプレートへの入力

デフォルト・テキスト フォーム・フィールド入力 説明

grp:Item

<?for-each:item?>

item要素の開始のfor-eachループを保持します。

Plasma TV

<?name?>

XMLファイルからのname要素のプレースホルダ。

IF

<?if@column: /items/@type="PRIVATE"?>

列ヘッダーの属性値「PRIVATE」のテストに対するif文の開始。この構文ではXPath式を使用してXMLの「items」レベルに戻り属性をテストします。テンプレートでのXPathの使用については、第4.19項「XPathコマンドの使用」を参照してください。

Quantity

該当なし

ボイラープレート・ヘッダー。

end-if

<?end if?>

if文を終了します。

IF

<?if@cell:/items/@type="PRIVATE"?>

列データの属性値「PRIVATE」をテストするためのif文の開始。

20

<?quantity?>

quantity要素のプレースホルダ。

end-if

<?end if?>

if文を終了します。

1,000.00

<?price?>

price要素のプレースホルダ。

end grp

<?end for-each?>

for-eachループの終了タグ。


条件列の構文は、@column句が追加されたif文です。この@column句によって、BI Publisherはif文の結果に基づいて列を表示または非表示にします。

@columnを組み込まなかった場合、データはif文の結果としてレポートに表示されませんが、列は表示されます。これは、テンプレートに列が描画されているためです。


注意:

@column句はコンテキスト・コマンドの例です。詳細は、第4.18項「コンテキスト・コマンドを使用した命令の配置の制御」を参照してください。


この例をレンダリングすると、図4-46のような出力が得られます。

図4-46 価格レポートの例

図4-46の説明が続きます
「図4-46 価格レポートの例」の説明

同じXMLデータでtype属性がPRIVATEに設定されている場合は、同じテンプレートから図4-47に示す出力がレンダリングされます。

図4-47 数量および価格レポートの例

図4-47の説明が続きます
「図4-47 数量および価格レポートの例」の説明

4.10.6 行の書式設定

BI Publisherでは、表の行レベルで書式設定条件を指定できます。次に、行レベルの書式設定の例を示します。

  • データが特定のしきい値に達したときに行を強調表示します。

  • レポートを読みやすくするために、行の背景色を変更します。

  • 特定の条件を満たした行のみを表示します。

条件に基づく行の表示

特定の条件を満たした行のみを表示するには、グループのfor-eachタグ内で、行の最初と最後に<?if:condition?> <?end if?>タグを挿入します。これらのタグを、図4-48に示すテンプレート例でデモンストレーションします。

図4-48 条件に応じて行を表示するテンプレート

図4-48の説明が続きます
「図4-48 条件に応じて行を表示するテンプレート」の説明

表4-7は、図4-48のテンプレートで使用されているフィールドを示しています。

表4-7 条件に応じて表示される行のフォーム・フィールド

デフォルト・テキスト入力 フォーム・フィールドのヘルプ・テキスト 説明

for-each SALE

<?for-each:SALE?>

for-eachループを開始して、SALEグループに属するデータを繰り返します。

if big

<?if:SALES>5000?>

SALES要素の値が5000を超えた場合のみ行を表示するif文。

INDUSTRY

<?INDUSTRY?>

データ・フィールド。

YEAR

<?YEAR?>

データ・フィールド。

MONTH

<?MONTH?>

データ・フィールド。

SALES end if

<?end if?>

if文を終了します。

end SALE

<?end for-each?>

SALEループを終了します。


条件に基づく行の強調表示

この例では、1行おきに背景色を設定する方法を示します。図4-49に、この効果を作成するテンプレートを示します。

図4-49 条件に応じて行を強調表示するテンプレート

図4-49の説明が続きます
「図4-49 条件に応じて行を強調表示するテンプレート」の説明

表4-8は、図4-49のテンプレートで使用されているフォーム・フィールドの値を示しています。

表4-8 行を強調表示するフォーム・フィールド

デフォルト・テキスト入力 フォーム・フィールドのヘルプ・テキスト 説明

for-each SALE

<?for-each:SALE?>

SALEグループのfor-eachループの開始を定義します。

format;

<?if@row:position() mod 2=0?> <xsl:attribute name="background-color" xdofo:ctx="incontext">lightgray</xsl:attribute><?end if?>

1行おきに、行のbackground color属性をgray(灰色)に設定します。

INDUSTRY

<?INDUSTRY?>

データ・フィールド。

YEAR

<?YEAR?>

データ・フィールド。

MONTH

<?MONTH?>

データ・フィールド。

SALES

<?SALES?>

データ・フィールド。

end SALE

<?end for-each?>

SALEのfor-eachループを終了します。


表4-8では、format;フィールドに注意してください。このフィールドには、行のコンテキスト(@row)を設定したif文が含まれています。これによって、現在行に適用するif文のコンテキストが設定されます。条件がtrueの場合、行の背景色の<xsl:attribute>はlight gray(淡い灰色)に設定されます。この設定の結果、図4-50のような出力が得られます。

図4-50 業界の売上レポート

図4-50の説明が続きます
「図4-50 業界の売上レポート」の説明


注意:

コンテキスト・コマンドの詳細は、第4.18項「コンテキスト・コマンドを使用した命令の配置の制御」を参照してください。


4.10.7 セルの強調表示

次の例では、XMLファイルの値に基づいて、セルを強調表示するかどうかを判断する方法を示します。

この例では、次のXMLコードが使用されます。

<accounts>
 <account>
  <number>1-100-3333</number>
  <debit>100</debit>
  <credit>300</credit>
 </account>
 <account>
  <number>1-101-3533</number>
  <debit>220</debit>
  <credit>30</credit>
 </account>
 <account>
  <number>1-130-3343</number>
  <debit>240</debit>
  <credit>1100</credit>
 </account>
 <account>
  <number>1-153-3033</number>
  <debit>3000</debit>
  <credit>300</credit>
 </account>
</accounts>

テンプレートには、アカウントとその貸借値がリストされます。最終レポートでは、値が1000を超えたセルが赤で強調表示されます。図4-51に、この例のテンプレートを示します。

図4-51 条件に応じてセルを強調表示するテンプレートの例

条件に応じてセルを強調表示するテンプレートの例

表4-9に、このテンプレートのフィールド定義を示します。

表4-9 セルを強調表示するフォーム・フィールド

デフォルト・テキスト入力 フォーム・フィールド入力 説明

FE:Account

<?for-each:account?>

account要素のfor-eachループを開始します。

1-232-4444

<?number?>

XMLファイルからのnumber要素のプレースホルダ。

CH1

<?if:debit>1000?><xsl:attribute xdofo:ctx="block" name="background-color">red</xsl:attribute><?end if?>

このフィールドには、借方金額が1000を超えた場合にセルを赤で強調表示するコードが保持されます。

100.00

<?debit?>

debit要素のプレースホルダ。重要: <?debit?>要素は、自身のフィールドに存在する必要があります。

CH2

<?if:credit>1000?><xsl:attribute xdofo:ctx="block" name="background-color">red</xsl:attribute><?end if?>

このフィールドには、貸方金額が1000を超えた場合にセルを赤で強調表示するコードが保持されます。

100.00

<?credit?>

credit要素のプレースホルダ。

EFE

<?end for-each?>

for-eachループを終了します。


この表に示すように、貸方列を強調表示するコードは次のとおりです。

<?if:debit>1000?>
  <xsl:attribute 
   xdofo:ctx="block" name="background-color">red
  </xsl:attribute>
<?end if?>

このif文は、debitの値が1000を超えているかどうかを判断します。1000を超えた場合は、次の行が実行されます。この例では、if文内にXSL固有のコードが埋め込まれていることに注目してください。

XSLのプロパティは、attribute要素を使用して変更できます。

xdofo:ctxコンポーネントはBI Publisherの機能の1つで、テンプレート内のすべてのレベルでXSL属性を調整できます。この例の場合は、background color属性がred(赤)に変更されています。

color属性の変更には、標準的なHTMLの名称(赤、白、緑など)か、16進数の色定義(#FFFFFなど)を使用できます。

このテンプレートの結果、図4-52のような出力が得られます。

図4-52 借方および貸方レポート

図4-52の説明が続きます
「図4-52 借方および貸方レポート」の説明

4.11 ページレベルの計算の挿入

BI Publisherでは、PDFおよびPPT出力でのみ、次の項で説明するページ・レベルの計算機能がサポートされています。

4.11.1 ページ合計の表示

BI Publisherでは、ページ合計を計算してレポートに表示できます。ページは発行時まで作成されないため、合計計算機能は書式設定エンジンで実行する必要があります。


注意:

ページの合計計算はPDF書式設定レイヤーで実行されます。したがって、HTML、RTFおよびExcelの出力タイプではこの機能を使用できません。このページ合計計算機能は、ソースXMLコードに未処理の数値が含まれている場合のみ機能します。数値は事前に書式設定できません。


ページ合計フィールドはXML入力データに存在しないため、値を保持する変数を定義する必要があります。変数を定義するときは、ページの合計を計算するXMLファイルの要素にその変数を関連付けます。合計フィールドを定義した後は、その合計フィールドのデータに対して追加の関数を実行することもできます。

ページ合計を保持する変数を宣言するには、合計する要素のプレースホルダの直後に次の構文を挿入します。

<?add-page-total:TotalFieldName;'element'?>

説明:

TotalFieldNameは、合計に割り当てる名前(後の参照用)です。

'element'は、合計するXML要素フィールドです。

この構文は、必要な数の合計計算の対象フィールドに追加できます。

合計フィールドを表示する場合は、次の構文を入力します。

<?show-page-total:TotalFieldName;'Oracle-number-format' number-separators="{$_XDONFSEPARATORS}"?>

説明:

TotalFieldNameは、前述のページ合計フィールドを指定する際に割り当てた名称です。

Oracle数値書式は、Oracle書式マスクを使用して表示する際に使用する書式です(例: 'C9G999D00')。Oracle書式マスク記号のリストについては、第4.15.12項「Oracle抽象書式マスク」を参照してください。

number-separators="{$_XDONFSEPARATORS}"は、定義した書式マスクに対してグループ化セパレータと小数点セパレータを適用するための必須の属性です。

次の例では、テンプレートにページ合計フィールドを設定し、ページに表示されている貸方と借方の合計を表示して、この2つのフィールドの差引額を計算する方法を示します。

この例では、次のXMLコードが使用されます。

<balance_sheet>
 <transaction>
  <debit>100</debit>
  <credit>90</credit>
 </transaction>
 <transaction>
  <debit>110</debit>
  <credit>80</credit>
 </transaction>
…
<\balance_sheet>

図4-53に、値を保持するためにテンプレートに挿入する表を示します。

図4-53 値を挿入するための表

図4-53の説明が続きます
「図4-53 値を挿入するための表」の説明

表4-10は、図4-53に示す表を持つテンプレートへのフォーム・フィールド入力を示しています。

表4-10 合計を表示するためのフィールド

デフォルト・テキスト入力 フォーム・フィールドのヘルプ・テキスト入力 説明

FE

<?for-each:transaction?>

このフィールドは、transactionグループの開始のfor-eachループを定義します。

100.00

<?debit?><?add-page-total:dt;'debit'?>

このフィールドは、XMLファイルからのdebit要素のプレースホルダです。このフィールドをページごとに合計するために、ページ合計の宣言構文が追加されます。debit要素の合計を保持するために定義された変数はdtです。

90.00

<?credit?> <?add-page-total:ct;'credit'?>

このフィールドは、XMLファイルからのcredit要素のプレースホルダです。このフィールドをページごとに合計するために、ページ合計の宣言構文が追加されます。credit要素の合計を保持するために定義された変数はctです。

Net

<add-page-total:net;'debit - credit'?>

借方値から貸方値を差し引いたページ合計差引額を作成します。

EFE

<?end for-each?>

for-eachループを終了します。


netとして定義した変数では、credit要素とdebit要素の値に対して計算が実行されることに注意してください。

ページ合計フィールドを宣言した後は、ページ合計を表示するフィールドをテンプレートに挿入できます。指定した名称(前述の例ではctおよびdt)を使用して、計算された変数を参照します。ページ合計を表示するための構文は次のとおりです。

たとえば、貸方のページ合計を表示するには、次のように入力します。

<?show-page-total:dt;'C9G990D00';'(C9G990D00)' number-separators="{$_XDONFSEPARATORS}"?>

最後に、テンプレート・ページの最下部またはフッターに、次のフィールドを配置します。

Page Total Debit: <?show-page-total:dt;'C9G990D00';'(C9G990D00)' number-separators="{$_XDONFSEPARATORS}"?>

Page Total Credit: <?show-page-total:ct;'C9G990D00';'(C9G990D00)' number-separators="{$_XDONFSEPARATORS}"?>

Page Total Balance: <?show-page-total:net;'C9G990D00';'(C9G990D00)' number-separators="{$_XDONFSEPARATORS}"?>

図4-54に、このレポートの出力を示します。

図4-54 借方および貸方レポートの合計

図4-54の説明が続きます
「図4-54 借方および貸方レポートの合計」の説明

4.11.2 前からの繰越/次への繰越の合計の挿入

多くのレポートでは、レポート出力全体にわたるページ合計を保持し、各ページの最初と最後に表示する必要があります。これらの合計は、"前からの繰越/次への繰越"の合計と呼ばれます。


注意:

前からの繰越と次への繰越フィールドの合計計算はPDF書式設定レイヤーで実行されます。したがって、出力タイプがHTML、RTFおよびExcelなどの場合、この機能は使用できません。


図4-55に例を示します。

図4-55 繰越合計の例

図4-55の説明が続きます
「図4-55 繰越合計の例」の説明

最初のページの最後に、Amount要素のページ合計が次への繰越合計として表示されます。第2ページの先頭には、この値が前ページからの繰越合計として表示されます。さらに、第2ページの最後には、次への繰越値にそのページの合計を加算した金額が次のページへの新規繰越値として表示されます。レポート全体でこれを繰り返します。

この機能は、ページ合計の表示機能の拡張です。次の例では、発行レポートに前からの繰越と次への繰越の合計の表示に必要な構文と設定について説明します。

次のXMLコードがあるとします。

<?xml version="1.0" encoding="WINDOWS-1252"?>
<INVOICES>
 <INVOICE>
  <INVNUM>10001-1</INVNUM>
  <INVDATE>1-Jan-2005</INVDATE>
  <INVAMT>100</INVOICEAMT>
 </INVOICE>
 <INVOICE>
  <INVNUM>10001-2</INVNUM>
  <INVDATE>10-Jan-2005</INVDATE>
  <INVAMT>200</INVOICEAMT>
 </INVOICE>
 <INVOICE>
  <INVNUM>10001-1</INVNUM>
  <INVDATE>11-Jan-2005</INVDATE>
  <INVAMT>150</INVOICEAMT>
 </INVOICE>
. . .
</INVOICES>

図4-56に示すサンプル・テンプレートでは、請求書表を作成し、ページ合計を保持するプレースホルダを宣言します。

図4-56 合計のテンプレート

図4-56の説明が続きます
「図4-56 合計のテンプレート」の説明

表4-11は、図4-56のテンプレートのフィールドを示しています。

表4-11 合計のフィールド

フィールド フォーム・フィールドのヘルプ・テキスト入力 説明

Init PTs

<?init-page-total: InvAmt?>

InvAmtを、ページ合計を保持するプレースホルダとして宣言します。

FE

<?for-each:INVOICE?>

INVOICEグループを開始します。

10001-1

<?INVNUM?>

請求書番号タグのプレースホルダ。

1-Jan-2005

<?INVDATE?>

請求日タグのプレースホルダ。

100.00

<?INVAMT?>

請求金額タグのプレースホルダ。

InvAmt

<?add-page-total:InvAmt;INVAMT?>

ページ合計オブジェクトInvAmtをデータ内のINVAMT要素に割り当てます。

EFE

<?end for-each?>

INVOICEグループを終了します。

End PTs

<?end-page-total:InvAmt?>

ページ合計オブジェクトInvAmtを終了します。


各ページ(最初のページを除く)の先頭に前からの繰越合計を表示するには、次の構文を使用します。

<xdofo:inline-total
  display-condition="exceptfirst"
  name="InvAmt">
   Brought Forward:
<xdofo:show-brought-forward
  name="InvAmt"
  format="99G999G999D00" number-separators="{$_XDONFSEPARATORS}"/>/>
</xdofo:inline-total>

次に、前からの繰越の構文を構成する要素について説明します。

  • inline-total: この要素には次の2個のプロパティがあります。

    • name: フィールドで宣言した変数の名前を指定します。

    • display-condition - 表示条件を設定します。これはオプションのプロパティで、次のいずれかの値を設定します。

      • first - コンテンツが最初のページにのみ表示されます。

      • last - コンテンツが最後のページにのみ表示されます。

      • exceptfirst - コンテンツが最初のページを除く全ページに表示されます。

      • exceptlast - コンテンツが最後のページを除く全ページに表示されます。

      • everytime - (デフォルト)コンテンツが全ページに表示されます。

      この例では、display-conditionがexceptfirstに設定されているため、値が0(ゼロ)の最初のページには値が表示されません。

  • Brought Forward: - これはオプションの文字列で、レポート上にフィールド名として表示されます。

  • show-brought-forward - ページのこの値を表示します。これには、次のプロパティがあります。

    • name - 表示するフィールド名。この例では「InvAmt」です。このプロパティは必須です。

    • format - 実行時に値に適用されるOracle数値書式。このプロパティはオプションですが、書式マスクを指定する場合は、Oracle書式マスクを使用する必要があります。詳細は、第4.15.12項「Oracle抽象書式マスク」を参照してください。

    • number-separators="{$_XDONFSEPARATORS}" - この属性は、定義した書式マスクへのグループ・セパレータと数値セパレータの適用に必要です。

前からの繰越合計を表示するテンプレートの先頭に、前からの繰越オブジェクトを挿入します。このオブジェクトをテンプレート本体に配置すると、構文をフォーム・フィールドに挿入できます。

前からの繰越合計をヘッダーに表示する場合、Microsoft Wordではヘッダーまたはフッター・リージョンでのフォーム・フィールドの使用をサポートしていないため、コード文字列全体をヘッダーに挿入する必要があります。ただし、start body/end body構文を使用して、レポートの本文領域を定義する方法もあります。BI Publisherでは、定義した本文領域より前の内容はヘッダーとして、本文領域より後の内容はフッターとして認識されます。この場合は、フォーム・フィールドを使用できます。詳細は、第4.5.3項「複数または複雑なヘッダーおよびフッターの作成」を参照してください。

合計を表示するテンプレートの最下部に、次への繰越オブジェクトを配置します。この例の次への繰越オブジェクトは次のとおりです。

<xdofo:inline-total
  display-condition="exceptlast"
  name="InvAmt">
   Carried Forward:
<xdofo:show-carry-forward
  name="InvAmt"
  format="99G999G999D00" number-separators="{$_XDONFSEPARATORS}"/>
</xdofo:inline-total>

前からの繰越オブジェクトと次の点が異なることに注意してください。

  • display-conditionがexceptlastに設定されているため、次への繰越合計は、最後のページを除く全ページに表示されます。

  • 表示文字列は「Carried Forward」です。

  • show-carry-forward要素を使用して次への繰越値を表示します。この要素には、前述のshow-brought-forwardと同じプロパティがあります。

テンプレートでは値の数に制限はありません。前からの繰越/次への繰越オブジェクトをテンプレートに複数作成して、データ内の様々な数値要素を指し示すことができます。


注意:

前述の例に示すように、コマンド<?init-page-total:invAmnt?>および<?end-page-total:InvAmt?>が含まれていないことを確認します。display-condition論理計算の正しい動作は、これらのコマンドが正しく機能することに依存しています。


4.11.3 累積合計の挿入

変数機能(第4.13.1項「変数の設定」を参照)を使用して、請求書一覧レポートに累積合計を追加できます。この例では、次のXML構造を使用します。

<?xml version="1.0" encoding="WINDOWS-1252"?>
<INVOICES>
 <INVOICE>
  <INVNUM>10001-1</INVNUM>
  <INVDATE>1-Jan-2005</INVDATE>
  <INVAMT>100</INVOICEAMT>
 </INVOICE>
 <INVOICE>
  <INVNUM>10001-2</INVNUM>
  <INVDATE>10-Jan-2005</INVDATE>
  <INVAMT>200</INVOICEAMT>
 </INVOICE>
 <INVOICE>
  <INVNUM>10001-1</INVNUM>
  <INVDATE>11-Jan-2005</INVDATE>
  <INVAMT>150</INVOICEAMT>
 </INVOICE>
</INVOICES>

Figure 4-57に示すように、このXMLコードを使用して、累積合計が記載されたレポートを作成できます。

図4-57 累積合計の例

図4-57の説明が続きます
「図4-57 累積合計の例」の説明

「Running Total」フィールドを作成するには、合計を追跡するための変数を定義し、その変数を0(ゼロ)に初期化します。テンプレートは図4-58のようになります。

図4-58 累積合計フィールドのテンプレート

図4-58の説明が続きます
「図4-58 累積合計フィールドのテンプレート」の説明

図4-58に示すテンプレートのフォーム・フィールドの値については、表4-12で説明します。

表4-12 累積合計のフィールド

フォーム・フィールド 構文 説明

RtotalVar

<?xdoxslt:set_variable($_XDOCTX, 'RTotalVar', 0)?>

RTotalVar変数を宣言して0(ゼロ)に初期化します。

FE

<?for-each:INVOICE?>

Invoiceグループを開始します。

10001-1

<?INVNUM?>

請求書番号タグ。

1-Jan-2005

<?INVDATE?>

請求日タグ。

100.00

<?xdoxslt:set_variable($_XDOCTX, 'RTotalVar', xdoxslt:get_variable($_XDOCTX, 'RTotalVar') + INVAMT)?><?xdoxslt:get_variable($_XDOCTX, 'RTotalVar')?>

RTotalVarを、現在値に新しい請求金額を加算した値に設定します。RTotalVarの値を取得して表示します。

EFE

<?end for-each?>

INVOICEグループを終了します。


4.12 データの処理

次の各項は、テンプレートでデータを処理する方法を説明しています。

4.12.1 データのソート

グループは、そのグループ内の任意の要素順にソートできます。次の構文をグループ・タグ内に挿入します。

<?sort:要素名; 順序; データ・タイプ?>

説明:

要素名は、グループをソートする要素の名前です。

順序は「昇順」または「降順」です。

データ・タイプは、要素のデータ・タイプです。有効な値は、「text」と「number」です。

順序を指定しなければ、デフォルトではソート順序は昇順です。データ型を指定しなければ、 タイプはtextと想定されます。

たとえば、最高のサラリーが最初に表示されるように、SALARYという名前の要素によってデータ・セットをソートするには、次を入力します。

<?sort:SALARY;'descending';'number'?>

for-eachグループ内でソートを実行している場合、for-each文の後にソート文を入力します。たとえば、この章の冒頭で示したPayables Invoice Registerを仕入先(VENDOR_NAME)順にソートするには、次のように入力します。

<?for-each:G_VENDOR_NAME?><?sort:VENDOR_NAME?>

複数のフィールドでグループをソートするには、追加のソート文を適切な順に入力するだけです。たとえば、サプライヤでソートしてから請求番号でソートするには、次を入力します。

<?sort:VENDOR_NAME?> <?sort:INVOICE_NUM;'ascending';'number'?>

4.12.2 NULL値の確認

XMLデータ内の要素の値に想定可能なシナリオは、次のように3つあります。

  • XMLデータ内に要素が存在し、値を持つ場合

  • XMLデータ内に要素が存在するが、値を持たない場合

  • XMLデータ内に要素が存在せず、したがって値もない場合

レポート・レイアウトでは、要素とその値の有無に応じて異なる動作を指定することが必要な場合があります。次の例では、if文を使用してこれらの条件のそれぞれについてチェックする方法を示します。構文は、別の条件付き書式設定構造でも使用できます。

  • 要素が存在し、値がnullでない場合の動作を定義するには、次を使用します。

    <?if:element_name!=' '?> 希望する動作<?end if?>

  • 要素は存在するが、値がnullの場合の動作を定義するには、次を使用します。

    <?if:element_name and element_name="?> 希望する動作<?end if?>

  • 要素が存在しない場合の動作を定義するには、次を使用します。

    <?if:not(element_name)?> 希望する動作 <?end if?>

4.12.3 XMLデータの再グループ化

RTFテンプレートでは、XSL 2.0のfor-each-group標準をサポートしているため、元のデータに存在しないXMLデータを階層に再グループ化できます。この機能を使用すると、テンプレートでソースXMLファイルの階層に従う必要がなくなります。このため、データソースの構造による制約がなくなります。

4.12.3.1 XMLのサンプル

for-each-group標準を示すため、CDカタログ一覧の次のXMLデータ・サンプルをテンプレートで再グループ化します。

<CATALOG>
   <CD>
      <TITLE>Empire Burlesque</TITLE>
      <ARTIST>Bob Dylan</ARTIST>
      <COUNTRY>USA</COUNTRY>
      <COMPANY>Columbia</COMPANY>
      <PRICE>10.90</PRICE>
      <YEAR>1985</YEAR>
   </CD>
   <CD>
      <TITLE>Hide Your Heart</TITLE>
      <ARTIST>Bonnie Tylor</ARTIST>
      <COUNTRY>UK</COUNTRY>
      <COMPANY>CBS Records</COMPANY>
      <PRICE>9.90</PRICE>
      <YEAR>1988</YEAR>
   </CD>
   <CD>
      <TITLE>Still got the blues</TITLE>
      <ARTIST>Gary More</ARTIST>
      <COUNTRY>UK</COUNTRY>
      <COMPANY>Virgin Records</COMPANY>
      <PRICE>10.20</PRICE>
      <YEAR>1990</YEAR>
   </CD>
   <CD>
      <TITLE>This is US</TITLE>
      <ARTIST>Gary Lee</ARTIST>
      <COUNTRY>UK</COUNTRY>
      <COMPANY>Virgin Records</COMPANY>
      <PRICE>12.20</PRICE>
      <YEAR>1990</YEAR>
   </CD>

再グループ化構文を使用すると、CDデータを国別にグループ化し、さらに年度別にグループ化するレポートを作成できます。これにより、現在のデータ構造による制限を受けません。

4.12.3.2 再グループ化構文

データを再グループ化するには、次の構文を使用します。

<?for-each-group: BASE-GROUP;GROUPING-ELEMENT?>

たとえば、CD一覧をCOUNTRY別に再グループ化するには、テンプレートに次のように入力します。

<?for-each-group:CD;COUNTRY?>

COUNTRYと同じ階層レベルにあった要素はCOUNTRYの子要素になります。これで、グループの要素を参照して、必要な値を表示できます。

すでに定義済のグループ内にネストされたグループを作成するには、次の構文を使用します。

<?for-each:current-group(); GROUPING-ELEMENT?>

たとえば、CDをCOUNTRY別にグループ化するように宣言した後、COUNTRY内でさらにYEAR別にグループ化するには、次のように入力します。

<?for-each:current-group();YEAR?> 

実行時に、BI Publisherは新規グループの出現箇所をループ処理して、テンプレートに定義したフィールドを表示します。


注意:

この構文は、XSLのfor-each-group構文を簡略化したものです。前述の簡略化された構文を使用しない場合は、後述するXSL構文を使用できます。XSL構文を使用できるのは、テンプレートのフォーム・フィールド内のみです。


<xsl:for-each-group
  select=expression
  group-by="string expression"
  group-adjacent="string expression"
  group-starting-with=pattern>
  <!--Content: (xsl:sort*, content-constructor) -->
</xsl:for-each-group>

4.12.3.3 テンプレートの例

図4-59は、CDをCountry別、Year別の順に表示して、各CDの詳細をリストするテンプレートを示しています。

図4-59 再グループ化のテンプレート

図4-59の説明が続きます
「図4-59 再グループ化のテンプレート」の説明

表4-13は、図4-59に示されたテンプレートのフォーム・フィールドへのBI Publisher構文入力を示しています。

表4-13 XMLデータを再グループ化する構文入力

デフォルト・テキスト入力 フォーム・フィールドのヘルプ・テキスト入力 説明

Group by Country

<?for-each-group:CD;COUNTRY?>

<?for-each-group:CD;COUNTRY?>タグは、新規グループを宣言します。これによって、既存のCDグループがCOUNTRY要素別に再グループ化されます。

USA

<?COUNTRY?>

COUNTRYタグのデータ値を表示するプレースホルダ。

Group by Year

<?for-each-group:current-group();YEAR?>

<?for-each-group:current-group();YEAR?>タグは、現行グループ(COUNTRY)をYEAR要素別に再グループ化します。

2000

<?YEAR?>

YEARタグのデータ値を表示するプレースホルダ。

Group: Details

<?for-each:current-group()?>

データをCOUNTRY別、YEAR別の順にグループ化した後、<?for-each:current-group()?>コマンドを使用して現行グループ(YEAR)の要素をループし、表内のデータ値(TITLE、ARTISTおよびPRICE)をレンダリングします。

My CD

<?TITLE?>

TITLEタグのデータ値を表示するプレースホルダ。

John Doe

<?ARTIST?>

ARTISTタグのデータ値を表示するプレースホルダ。

1.00

<?PRICE?>

PRICEタグのデータ値を表示するプレースホルダ。

End Group

<?end for-each?>

<?for-each:current-group()?>タグを終了します。

End Group by Year

<?end for-each-group?>

<?for-each-group:current-group();YEAR?>タグを終了します。

End Group by Country

<?end for-each-group?>

<?for-each-group:CD;COUNTRY?>タグを閉じます。


このテンプレートをXMLファイルとマージすると、図4-60に示すレポートが生成されます。

図4-60 再グループ化レポート

図4-60の説明が続きます
「図4-60 再グループ化レポート」の説明

4.12.3.4 式による再グループ化

式による再グループ化を使用すると、関数またはコマンドをデータ要素に適用し、戻された結果別にデータをグループ化できます。

この機能を使用するには、次のように、再グループ化構文内に式を記述する必要があります。

<?for-each:BASE-GROUP;GROUPING-EXPRESSION?>

この機能を説明するため、月別平均気温が含まれる簡略なXMLデータ・サンプルをテンプレートへの入力として使用して、気温が特定の範囲内にある月数を計算します。

次のXMLコードは、複数の<temp>グループで構成されています。各<temp>グループには、<month>要素と<degree>要素が含まれ、その月の平均気温が保持されています。

<temps>
  <temp>
    <month>Jan</month>
    <degree>11</degree>
  </temp> 
  <temp>
    <month>Feb</month>
    <degree>14</degree>
  </temp>  
  <temp>
    <month>Mar</month>
    <degree>16</degree>
  </temp> 
  <temp>
    <month>Apr</month>
    <degree>20</degree>
  </temp> 
  <temp>
    <month>May</month>
    <degree>31</degree>
  </temp>
  <temp>
    <month>Jun</month>
    <degree>34</degree>
  </temp> 
  <temp>
    <month>Jul</month>
    <degree>39</degree>
  </temp> 
  <temp>
    <month>Aug</month>
    <degree>38</degree>
  </temp>
  <temp>
    <month>Sep</month>
    <degree>24</degree>
  </temp>  
  <temp>
    <month>Oct</month>
    <degree>28</degree>
  </temp> 
  <temp>
    <month>Nov</month>
    <degree>18</degree>
  </temp> 
  <temp>
    <month>Dec</month>
    <degree>8</degree>
  </temp> 
</temps>         

このデータを図4-61に示すように、気温の範囲、および平均気温がその範囲内にある月の数を示す書式で表示します。

図4-61 年間気温のレポート

図4-61の説明が続きます
「図4-61 年間気温のレポート」の説明

for-each-groupコマンドを使用すると、気温を10度ごとに増分してグループ化する式を<degree>要素に適用できます。これで、各グループのメンバーの件数、つまり、平均気温が各範囲内にある月の数を表示できます。

図4-62は、図4-61に示すレポートを作成するテンプレートです。

図4-62 年間気温のテンプレート

図4-62の説明が続きます
「図4-62 年間気温のテンプレート」の説明

表4-14は、図4-62に示されたテンプレートへのフォーム・フィールド入力を示しています。

表4-14 データを再グループ化するフォーム・フィールド

デフォルト・テキスト入力 フォーム・フィールドのヘルプ・テキスト入力

Group by TmpRng

<?for-each-group:temp;floor(degree div 10)?><?sort:floor(degree div 10)?>

Range

<?concat(floor(degree div 10)*10,' F to ',floor(degree div 10)*10+10, 'F')?>

Months

<?count(current-group())?>

End TmpRng

<?end for-each-group?>


フォーム・フィールド・タグについて次の点に注目してください。

  • <?for-each-group:temp;floor(degree div 10)?>は再グループ化タグです。このタグは、既存の<temp>グループに対して、floor(degree div 10)式を使用して要素を再グループ化するように指定します。floor関数はXSL関数の1つで、引数より低い最大整数を戻します(たとえば、1.2の場合は1を、0.8の場合は0(ゼロ)を戻します)。

    この例では、<degree>要素の値を10で除算した値に対する関数の結果が戻されます。これにより、XMLデータから、1、1、1、2、3、3、3、3、2、2、1および0.という値が生成されます。

    これらの値をソートすると、0、1、2および3の4つのグループが作成されます。

  • <?concat(floor(degree div 10)*10,'F to ', floor(degree div 10)*10+10,'F'?>は、気温範囲を10度ごとに増分して行ヘッダーに表示します。この式によって、現行グループの値に10を乗算した値と、現行グループの値に10を乗算して10を加算した値が連結されます。

    したがって、最初のグループ0(ゼロ)の場合、行ヘッダーには「0 F to 10 F」(0から(0+10))と表示されます。

  • <?count(current-group())?>は、count関数を使用して現行グループのメンバー(範囲を満たす気温の数)をカウントします。

  • <?end for-each-group?>タグは、このグループを終了します。

4.13 変数、パラメータおよびプロパティの設定

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

4.13.1 変数の設定

更新可能な変数は、標準的なXSL変数<xsl:variable>とは異なり、XMLデータに対してテンプレートが適用されているときに更新できます。このため、更新可能な変数を必要とする多くの新機能をテンプレートに作成できます。

変数では、「設定および取得」という方法を使用して、値の割当て、更新および取得を行います。

次の構文を使用して、変数値を宣言(設定)します。

<?xdoxslt:set_variable($_XDOCTX, 'variable name', value)?>

次の構文を使用して、変数値を取得します。

<?xdoxslt:get_variable($_XDOCTX, 'variable name')?>

この方法を使用して、計算を実行できます。たとえば、次のように入力します。

<?xdoxslt:set_variable($_XDOCTX, 'x', xdoxslt:get_variable($_XDOCTX, 'x' + 1)?> 

これによって、変数'x'の値は元の値に1を加算した値に設定されます(x = x + 1を使用した場合に類似しています)。

$_XDOCTXは、変数のグローバル文書コンテキストを指定します。マルチスレッド環境では、同時に多数の変換が発生する場合があるため、変数には1つの変換のみを割り当てる必要があります。

更新可能な変数の使用例については、第4.11.3項「累積合計の挿入」を参照してください。

4.13.2 パラメータの設定

テンプレートには、ランタイム・パラメータ値を渡すことができます。この値は、多くの機能をサポートするために、テンプレート全体で参照できます。たとえば、テンプレートでデータをフィルタ処理したり、条件付き書式設定ブロックで値を使用できます。また、セキュリティ設定などのプロパティ値を最終文書に渡すこともできます。


注意:

BI Publisher Enterpriseユーザーについては、name-valueパラメータのすべてのペアがテンプレートに渡されます。次に説明する構文を使用して、テンプレートで使用するパラメータを登録する必要があります。


パラメータをテンプレートで使用する手順は次のとおりです。

  1. パラメータをテンプレートで宣言します。

    次の構文を使用して、パラメータを宣言します。

    <?param@begin:parameter_name;parameter_value?>
    

    説明:

    parameter_nameは、パラメータの名称です。

    parameter_valueは、パラメータのデフォルト値です(parameter_valueはオプションです)。

    param@begin:は、実行時にテンプレートの先頭にパラメータ宣言をプッシュするために必要な文字列です。これによって、テンプレートでパラメータをグローバルに参照できます。

    この構文は、フォーム・フィールドの「Help Text」フィールドで宣言する必要があります。このフォーム・フィールドは、テンプレート内の任意の位置に配置できます。

  2. テンプレートでパラメータを参照するには、パラメータ名の前に$文字を付けます。たとえば、パラメータ名をInvThreshと宣言した場合は、$InvThreshを使用してその値を参照します。

  3. BI Publisher Enterpriseを使用せず、コア・ライブラリのみを使用している場合は、次のようにします。

    実行時に、プログラムでパラメータをBI Publisherエンジンに渡します。

    FOProcessor APIをコールする前に、次のようにパラメータ値に対してPropertiesクラスを作成し、プロパティを割り当てます。

    Properties prop = new Properties();
    prop.put("xslt.InvThresh", "1000");
    

例: 請求書しきい値パラメータの受渡し

次の例では、パラメータの値に基づいてデータをフィルタ処理するテンプレートで、パラメータを宣言する方法を示しています。

次のXMLサンプルには、請求書データがリストされています。

<INVOICES>
 <INVOICE>
  <INVOICE_NUM>981110</INVOICE_NUM>
  <AMOUNT>1100</AMOUNT>
 </INVOICE>
 <INVOICE>
  <INVOICE_NUM>981111</INVOICE_NUM>
  <AMOUNT>250</AMOUNT>
 </INVOICE>
 <INVOICE>
  <INVOICE_NUM>981112</INVOICE_NUM>
  <AMOUNT>8343</AMOUNT>
 </INVOICE>
. . .
</INVOICES>

図4-63に、パラメータ値を受け取り、そのパラメータ値に基づいて最終ドキュメントに表示する請求書を制限するテンプレートを示します。

図4-63 パラメータ値を受け取るテンプレート

図4-63の説明が続きます
「図4-63 パラメータ値を受け取るテンプレート」の説明

表4-15は、図4-63のテンプレートで使用されるパラメータを定義するフィールドを説明しています。

表4-15 パラメータを定義するフィールド

フィールド フォーム・フィールドのヘルプ・テキスト入力 説明

InvThreshDeclaration

<?param@begin:InvThresh?>

パラメータInvThreshを宣言します。

FE

<?for-each:INVOICE?>

INVOICE要素の繰返しグループを開始します。

IF

<?if:AMOUNT>$InvThresh?>

AMOUNT要素の値を調べて、InvThreshの値より大きいかどうかを判断します。

13222-2

<?INVOICE_NUM?>

INVOICE_NUM要素のプレースホルダ。

$100.00

<?AMOUNT?>

AMOUNT要素のプレースホルダ。

EI

<?end if?>

if文の終了タグ。

EFE

<?end for-each?>

for-eachループの終了タグ。


このテンプレートでは、AMOUNTがInvThreshパラメータ値より大きいINVOICE要素のみが表示されます。パラメータ値1,000を渡した場合、図4-64に示すレポートが作成されます。

図4-64 請求書のレポート

図4-64の説明が続きます
「図4-64 請求書のレポート」の説明

2番目の請求書は、AMOUNTがパラメータ値より小さいため、表示されないことに注目してください。

4.13.3 プロパティの設定

BI Publisherの構成ファイルで使用可能なBI Publisherプロパティは、RTFテンプレートに埋め込むこともできます。テンプレートに設定されたプロパティは、実行時にBI Publisherエンジンによって解決されます。値は、テンプレートにハードコードするか、または受信したXMLデータに埋め込むことができます。プロパティをテンプレートに埋め込む場合、構成ファイルの使用は不要になります。


注意:

BI Publisherの構成ファイルと使用可能なプロパティの詳細は、『Oracle Fusion Middleware Oracle Business Intelligence Publisher管理者ガイド』の付録「構成ファイル・リファレンス」を参照してください。


たとえば、非標準フォントをテンプレートで使用する場合は、構成ファイルでフォントの位置を指定するのではなく、テンプレート内にフォント・プロパティを埋め込むことができます。生成されたPDF出力を保護する必要がある場合は、BI PublisherのPDFセキュリティ・プロパティを使用して、受信したXMLデータからパスワード値を取得できます。

BI Publisherプロパティをテンプレートに追加するには、Microsoft Wordの「Properties」ダイアログ(「File」メニューから使用可能)を使用して、次の情報を入力します。

  • Name - 先頭にxdo-を付けて、BI Publisherプロパティ名を入力します。

  • Type - 「Text」を選択します。

  • Value - プロパティ値を入力します。受信したXMLデータから要素を参照するには、XML要素へのパスを中カッコで囲んで入力します。たとえば、{/root/password}のように入力します。

フォント参照の埋込み

次の例では、XMLPScriptというフォントをテンプレートで使用するとします。このフォントは、サーバーでは使用できないため、実行時にそのフォントの検索場所をBI Publisherに指示する必要があります。BI Publisherにフォントの検索場所を指示するには、fontプロパティを設定します。フォントが/tmp/fontsに格納されている場合は、「Properties」ダイアログに次のように入力します。

  • Name - xdo-font.XMLPScript.normal.normal

  • Type - Text

  • Value - truetype./tmp/fonts/XMLPScript.ttf

テンプレートがサーバーのXMLデータに適用されると、BI Publisherは/tmp/fontsディレクトリでフォントを検索します。テンプレートが複数の場所に配置されている場合は、場所のそれぞれでこのパスが有効であることを確認してください。

フォント・プロパティの設定の詳細は、『Oracle Fusion Middleware Oracle Business Intelligence Publisher管理者ガイド』のフォントの定義に関する項を参照してください。

PDF出力の保護

次の例では、XMLデータからパスワードを使用して、PDF出力文書を保護するとします。XMLデータは次のとおりです。

<PO>
 <security>true</security>
 <password>welcome</password>
 <PO_DETAILS>
 ..
</PO>

「Properties」ダイアログでは、次の2つのプロパティを設定します。pdf-securityプロパティではセキュリティ機能を有効にするかどうかを設定し、pdf-open-passwordプロパティではパスワードを設定します。「Properties」ダイアログで次のように入力します。

  • Name: xdo-pdf-security

  • Type: 「Text」

  • Value: {/PO/security}

  • Name: xdo-pdf-open-password

  • Type: 「Text」

  • Value: {/PO/password}

XMLがシステム内に長期間保持される場合、XMLデータにパスワードを格納するのはお薦めできません。潜在的なセキュリティ・リスクを回避するには、実行時に生成してテンプレートに渡したテンプレート・パラメータ値を使用できます。

たとえば、次のパラメータを設定できます。

  • PDFSec: xdo-pdf-securityプロパティの値を渡すために使用します。

  • PDFPWD: パスワードの値を渡すために使用します。

次に、「Properties」ダイアログで次のように入力します。

  • Name: xdo-pdf-security

  • Type - Text

  • Value: {$PDFSec}

  • Name: xdo-pdf-open-password

  • Type - Text

  • Value: {$PDFPWD}

テンプレート・パラメータの詳細は、第4.13.2項「パラメータの設定」を参照してください。

4.14 拡張レポート・レイアウトの使用

この項では、拡張レポート・レイアウトに関する次のタスクについて説明します。

4.14.1 バッチ・レポートの作成

1つのPDFファイルに含まれる請求書や発注書などの文書を一括して印刷することは一般的な要件の1つです。このような文書は複数の異なる顧客向けであるため、ドキュメントごとにページ番号をリセットし、ページ合計はドキュメント固有であることが必要です。ヘッダーとフッターにデータのフィールド(顧客名など)を表示する場合も、同様にリセットする必要があります。

BI Publisherでは、コンテキスト・コマンドを使用してこの要件をサポートしています。このコマンドを使用すると、レポートの要素を特定のセクションに定義できます。セクションが変わると、要素がリセットされます。

次の例では、出力ファイル内のヘッダーとフッター、およびページ番号をリセットする方法を説明します。

次のXMLコードは、複数の請求書を含むレポートです。

...
<LIST_G_INVOICE>
   <G_INVOICE>
      <BILL_CUST_NAME>Vision, Inc. </BILL_CUST_NAME>
      <TRX_NUMBER>2345678</TRX_NUMBER>
      ...
   </G_INVOICE>
   <G_INVOICE>
      <BILL_CUST_NAME>Oracle, Inc. </BILL_CUST_NAME>
      <TRX_NUMBER>2345685</TRX_NUMBER>
      ...
   </G_INVOICE>
   ...
</LIST_G_INVOICE>
...

各G_INVOICE要素には、異なる顧客向けの請求書が含まれている場合があります。BI Publisherに対して、G_INVOICE要素が出現するたびに新規セクションを開始するように指示するには、次の構文を使用して、@sectionコマンドをグループの開始のfor-each文に追加します。

<?for-each@section:group name?>

ここで、group_nameは新規セクションを開始する要素の名称です。

たとえば、この例のfor-eachグループ文は次のようになります。

<?for-each@section:G_INVOICE?>

終了の<?end for-each?>タグは変更ありません。

図4-65にテンプレートの例を示します。ヘッダーはコマンドによってリセットされますが、G_INVOICEグループのfor-each宣言はレポート本文内にあることに注意してください。

図4-65 バッチ・レポートのテンプレート

図4-65の説明が続きます
「図4-65 バッチ・レポートのテンプレート」の説明

表4-16は、図4-65のテンプレートのフォーム・フィールドの値を示しています。

表4-16 バッチ・レポートを作成するフィールド

デフォルト・テキスト入力 フォーム・フィールドのヘルプ・テキスト 説明

for-each G_INVOICE

<?for-each@section:G_INVOICE?>

G_INVOICEグループを開始し、要素をセクションとして定義します。G_INVOICEが出現するたびに、新規セクションを開始します。

<?TRX_NUMBER?>

該当なし

Microsoft Wordでは、ヘッダーでのフォーム・フィールドの使用はサポートしていないため、TRX_NUMBER要素のプレースホルダ構文はテンプレートに直接配置します。

end G_INVOICE

<?end for-each?>

G_INVOICEグループを終了します。


これで、G_INVOICE要素が新たに出現するたびに、新規セクションが開始します。ページ番号が再び開始され、ヘッダーまたはフッターの情報がデータから抽出されると、同様にリセットされます。

4.14.2 データが見つからない状況の処理

BI Publisherコマンドのfor-eachまたはfor-each-groupで@sectionを使用し(例:<?for-each@section:ELEMENT_NAME?>)、入力データ・ファイルにデータがない場合、空または無効のPDF出力ドキュメントが、そのfor-eachループに対して生成される可能性があります。これが発生するのを防ぐには、RTFテンプレートを編集します。

データが見つからない状況を処理する手順は次のとおりです。

  1. RTFテンプレートの終わりに、セクション区切りを追加します。

  2. 最後のページ(新しい項のページ)で、コマンド<?if@section:not(ELEMENT_NAME)?>No Data Found<?end if?>を追加します。

    ここで、ELEMENT_NAMEは、for-each@sectionループで使用しているのと同じデータ要素です。

    これで、ELEMENT_NAMEにデータが存在しない場合は、「データが見つかりません」というテキストとともに有効なPDFが生成されます。

4.14.3 ピボット・テーブルの挿入


注意:

詳細は、第5.4.5項「ピボット・テーブルの挿入」を参照してください。


ピボット・テーブルの列は、データに依存します。設計時点では、レポートされる列の数や適切な列ヘッダーを把握できません。さらに、列が次のページに分割される場合は、後続のページで繰り返される行ラベル列の定義を可能にする必要があります。次の例では、これらの機能をサポートする単純なピボット・テーブル・レポートの設計方法を説明します。

この例では、次のXMLサンプルを使用します。

<ROWSET>
  <RESULTS>
    <INDUSTRY>Motor Vehicle Dealers</INDUSTRY>
    <YEAR>2005</YEAR>
    <QUARTER>Q1</QUARTER>
    <SALES>1000</SALES>
 </RESULTS>
  <RESULTS>
    <INDUSTRY>Motor Vehicle Dealers</INDUSTRY>
    <YEAR>2005</YEAR>
    <QUARTER>Q2</QUARTER>
    <SALES>2000</SALES>
  </RESULTS>
  <RESULTS>
    <INDUSTRY>Motor Vehicle Dealers</INDUSTRY>
    <YEAR>2004</YEAR>
    <QUARTER>Q1</QUARTER>
    <SALES>3000</SALES>
  </RESULTS>
  <RESULTS>
    <INDUSTRY>Motor Vehicle Dealers</INDUSTRY>
    <YEAR>2004</YEAR>
    <QUARTER>Q2</QUARTER>
    <SALES>3000</SALES>
  </RESULTS>
  <RESULTS>
    <INDUSTRY>Motor Vehicle Dealers</INDUSTRY>
    <YEAR>2003</YEAR>
     ...
  </RRESULTS>
  <RESULTS>
    <INDUSTRY>Home Furnishings</INDUSTRY>
     ...
  </RESULTS>
  <RESULTS>
    <INDUSTRY>Electronics</INDUSTRY>
     ...
  </RESULTS>
  <RESULTS>
    <INDUSTRY>Food and Beverage</INDUSTRY>
     ...
  </RESULTS>
            
</ROWSET>

このXMLから、図 4-66に示すように、各業種、および各年度の売上合計が表示されるレポートが生成されます。

図4-66 年度合計のレポート

図4-66の説明が続きます
「図4-66 年度合計のレポート」の説明

図4-67は、図4-66に示されたレポートを生成するテンプレートを示しています。

図4-67 年度合計のテンプレート

図4-67の説明が続きます
「図4-67 年度合計のテンプレート」の説明

図4-67に示されたテンプレートのフォーム・フィールドには、表4-17に示される値が設定されます。

表4-17 表挿入のフィールド

デフォルト・テキスト入力 フォーム・フィールドのヘルプ・テキスト 説明

header column

<?horizontal-break-table:1?>

最初の列を、表の途中で改ページした場合に繰返し表示するヘッダーとして定義します。この構文の詳細は、第4.14.4.1項「改ページ時に繰り返す列の定義」を参照してください。

for:

<?for-each-group@column:RESULTS;YEAR?>

再グループ化構文(第4.12.3項「XMLデータの再グループ化」を参照)を使用してデータをYEAR別にグループ化し、@columnコンテキスト・コマンドを使用して各グループ(YEAR)の表列を作成します。コンテキスト・コマンドの詳細は、第4.18項「コンテキスト・コマンドを使用した命令の配置の制御」を参照してください。

YEAR

<?YEAR?>

YEAR要素のプレースホルダ。

end

<?end for-each-group?>

for-each-groupループを終了します。

for:

<?for-each-group:RESULTS;INDUSTRY?>

グループを開始して、INDUSTRYごとに表の行を作成します。

INDUSTRY

<?INDUSTRY?>

INDUSTRY要素のプレースホルダ。

for:

<?for-each-group@cell:current-group();YEAR?>

再グループ化構文(第4.12.3項「XMLデータの再グループ化」を参照)を使用してデータをYEAR別にグループ化し、@cellコンテキスト・コマンドを使用して各グループ(YEAR)の表セルを作成します。

sum(Sales)

<?sum(current-group()//SALES)?>

現行グループ(YEAR)の売上を合計します。

end

<?end for-each-group?>

for-each-group文を終了します。

end

<?end for-each-group?>

for-each-group文を終了します。


表の列の数を決定するために@columnコンテキストを使用するのは、最初の行のみであることに注意してください。残りの行はすべて、@cellコンテキストを使用して列の表セルを作成する必要があります(コンテキスト・コマンドの詳細は、第4.18項「コンテキスト・コマンドを使用した命令の配置の制御」を参照してください。)

4.14.4 動的データ列の構築

動的データ列の作成機能は、RTFテンプレートの強力な機能の1つです。この機能を使用すると、データによって必要な列の数が変化する場合に、表を正しくレンダリングするテンプレートを設計できます。

たとえば、特定範囲内のテスト・スコアの列を表示するテンプレートを設計するとします。ただし、レポート対象のデータを表示する範囲の数は不明です。この場合は、動的データ列を定義すると、実行時に適切な数の列に分割できます。

次のタグを使用して、データの正しいレンダリングに必要な動的書式設定を設定します。

  • 動的列ヘッダー

    <?split-column-header:group element name?>

    このタグを使用して、表の列ヘッダーを分割するグループを定義できます。

  • 動的列<?split-column-data:group element name?>

    このタグを使用して、表の列データを分割するグループを定義できます。

  • 動的列幅

    <?split-column-width:name?>または

    <?split-column-width:@width?>

    いずれかのタグを使用して、XMLデータに幅が記述されている際の列の幅を定義します。幅は、次のいずれかの方法で記述できます。

    • XML要素に幅の値が格納されます。この場合は、構文<?split-column-width:name?>を使用します。nameは、幅の値が含まれるXML要素のタグ名です。

    • 要素がsplit-column-headerタグで定義されている場合は、width属性を挿入し、構文<?split-column-width:@width?>を使用して、この属性の値を使用します。

  • 動的列幅の単位値(ポイント単位)<?split-column-width-unit:value?>

    このタグを使用して列幅の乗数を定義します。文字セルで列幅が定義されている場合、適切な乗数値を使用して列を適正な幅(ポイント)でレンダリングする必要があります。たとえば、表で10ポイントのcourierフォントを使用している場合、6の乗数を使用します。これは、10ポイントのcourierフォントで表示される文字の近似の幅です。乗数が定義されていない場合、列の幅は、表の全幅の割合として計算されます。幅は表4-18のように計算されます。

    表4-18 列幅の計算

    幅の定義 列1(Width = 10) 列2(Width = 12) 列3(Width = 14)

    乗数なし: %Width

    10/10+12+14*100 28%

    %Width = 33%

    %Width =39%

    乗数 = 6 - width

    60ポイント

    72ポイント

    84ポイント


4.14.4.1 改ページ時に繰り返す列の定義

表の列が横に広がり複数のページにまたがる場合、ページごとに繰り返す行見出し列の数を定義できます。次の構文を使用して、繰り返す列数を指定します。

<?horizontal-break-table:number?>

ここで、numberは繰り返す列の数(左から始めます)です。

この機能はPDF出力に対してのみサポートされます。

4.14.4.2 動的データ列の例

学校のテストについて、スコア範囲を表示するためのテンプレートが必要であるとします。論理的には、表4-19に示すようにレポートを配置します。

表4-19 動的データ列

テスト・スコア テスト・スコア範囲1 テスト・スコア範囲2 テスト・スコア範囲3 ...テスト・スコア範囲n

テスト・カテゴリ

範囲1の生徒数

範囲2の生徒数

範囲3の生徒数

範囲nの生徒数


しかし、レポートに表示されるテスト・スコア範囲の数は不明です。テスト・スコア範囲列の数は、データに応じて動的に設定されます。

次のXMLデータは、テスト・スコアを記述したものです。要素<TestScoreRange>の出現回数によって、必要な列の数が決まります。この例の場合は、0-20、21-40、41-60、61-80および81-100の5つの列があります。各列には、数量要素(<NumOfStudents>)および列幅属性(<TestScore width="15">)があります。

<?xml version="1.0" encoding="utf-8"?>
 <TestScoreTable>
  <TestScores>
    <TestCategory>Mathematics</TestCategory>
    <TestScore width ="15">
    <TestScoreRange>0-20</TestScoreRange>
    <NumofStudents>30</NumofStudents>
 </TestScore>
    <TestScore width ="20">
    <TestScoreRange>21-40</TestScoreRange>
    <NumofStudents>45</NumofStudents>
 </TestScore>
   <TestScore width ="15">
    <TestScoreRange>41-60</TestScoreRange>
    <NumofStudents>50</NumofStudents>
 </TestScore>
    <TestScore width ="20">
    <TestScoreRange>61-80</TestScoreRange>
    <NumofStudents>102</NumofStudents>
 </TestScore> 
    <TestScore width ="15"> 
    <TestScoreRange>81-100</TestScoreRange>
   <NumofStudents>22</NumofStudents>
 </TestScore>
 </TestScores> 
  <TestScoreTable> 

フォーム・フィールドで動的列タグを使用して、図4-68.に示すような2列の表を設定します。最初の列「Test Score」は静的な列です。2番目の列「Column Header and Splitting」は動的な列です。実行時に、この列はデータに応じて分割され、列ごとにヘッダーが適切に移入されます。表4-20に、各フィールドのデフォルト・テキスト入力およびフォーム・フィールドのヘルプ・テキスト入力を示します(フォーム・フィールドの使用の詳細は、第4.3.1.2項「フォーム・フィールド方式の使用」を参照してください)。

図4-68 動的データ列

図4-68の説明が続きます
「図4-68 動的データ列」の説明

表4-20 動的データ列のフィールド

デフォルト・テキスト入力 フォーム・フィールドのヘルプ・テキスト入力

Group:TestScores

<?for-each:TestScores?>

テスト・カテゴリ

<?TestCategory?>

列ヘッダーと分割

<?split-column-header:TestScore?> <?split-column-width:@width?> <?TestScoreRange?>%

コンテンツと分割

<?split-column-data:TestScore?> <?NumofStudents?>

end:TestScores

<?end for-each?>


  • Test Scoreは、ボイラープレート列ヘッダーです。

  • Test Categoryは<TestCategory>データ要素(この例ではMathematics)のプレースホルダで、行ヘッダーにもなります。

  • 2番目の列は、動的に分割される列です。指定した幅がデータの列数で除算されます。この例では、データ列数は5です。

  • 2番目の列には、動的な範囲データが含まれます。列の幅は、分割された列の幅に応じて分割されます。この例には単位値タグ(<?split-column-width-unit:value?>)が含まれていないため、列はパーセントを基準にして分割されます。必要に応じてデータが折り返されます。

    単位値タグ(<?split-column-width-unit:value?>)が含まれている場合、列は特定の幅(ポイント単位)になります。列幅の合計がページに割り当てられた領域より広い場合、その表は次のページに分割されます。

    horizontal-break-tableタグを使用すると、後続のページで繰り返す列の数を指定できます。たとえば、値を1に設定すると、「Test Score」列が後続のページで繰り返され、最初のページに収まらなかった残りの列とともに表示されます。

このテンプレートをレンダリングすると、図4-69のような出力が得られます。

図4-69 テスト・スコアのレポート

図4-69の説明が続きます
「図4-69 テスト・スコアのレポート」の説明

4.15 数値、日付および通貨の書式設定

この項では、数値、日付および通貨の書式設定の詳細を説明します。

4.15.1 数値の書式設定

BI Publisherでは、数値の書式を指定するために、次の2つの方法をサポートしています。

  • Oracleのformat-number関数(推奨)

  • Microsoft Word固有の数値書式マスク


注意:

XSL固有のformat-number関数を使用して、数値を書式設定することもできます。詳細は、第4.21.2.8項「XSL固有の数値書式設定」を参照してください。


前述の方法のいずれかを使用してください。両方の方法を使用して数値書式マスクを指定すると、データが2回書式設定されるため、予期しない動作が発生します。

グループ・セパレータと数値セパレータは、テンプレート・ロケールに基づいて実行時に設定されます。en-US以外のロケールで作業していたり、テンプレートに翻訳が必要な場合は、Oracleの書式マスクを使用します。

4.15.2 データソース要件

Oracle書式マスクまたはMicrosoft書式マスクを使用するには、データソースの数値がRaw形式であること、つまり、書式設定が適用されていない(例: 1000.00)ことが必要です。数値が書式設定されている場合(たとえば、欧州形式に1.000,00と書式設定されている場合)、その書式は機能しません。

BI Publisherパーサーでは、Java BigDecimal文字列表現が必要です。この表現は、オプション記号(-)、0(ゼロ)以上の10進数列(整数)、小数(オプション)および指数(オプション)で構成されます。たとえば、-123456.3455e-3のように設定します。

4.15.3 ローカライゼーションに関する検討事項

en-US以外のロケールで作業していたり、テンプレートに翻訳が必要な場合は、Oracleの書式マスクを使用します。Microsoftの書式マスクは、異なるロケール設定で実行されるテンプレートにおいて予期しない結果を生じる可能性があります。

「%」記号は、数値表示でパーセント記号の位置を固定するため、書式マスクに含めないでください。この記号は、ロケールに基づいて、数値の先頭または後に配置できます。

4.15.4 Microsoft数値書式マスクの使用

数値を書式設定するには、Microsoft Wordのフィールド書式設定機能を使用します。この機能は、「テキスト ボックス フォーム フィールド」ダイアログで設定できます。

数値書式をフォーム・フィールドに適用する手順は、次のとおりです。

  1. プレースホルダ・フィールドに対して「フォーム・フィールドのオプション」ダイアログを開きます。

  2. Type」を「Number」に設定します。

  3. Number format」のオプション・リストから適切な数値書式を選択します。

4.15.5 サポートされているMicrosoft書式マスク定義

表4-21に、サポートされているMicrosoft書式マスク定義を示します。

表4-21 サポートされているMicrosoft書式マスク定義

記号 位置 意味

0

Number

数字。他に数字が存在しない場合には、明示的に0(ゼロ)が表示されます。

例:

書式マスク: 00.0000

データ: 1.234

表示: 01.2340

#


Number

数字。#に設定すると、受信したデータのみが表示されます。

例:

書式マスク: ##.####

データ: 1.234

表示: 1.234

.

Number

小数セパレータの位置を決定します。使用する小数セパレータ記号は、実行時にテンプレート・ロケールに基づいて決まります。

例:

書式マスク: #,##0.00

データ: 1234.56

英語ロケールでの表示: 1,234.56

ドイツ語ロケールでの表示: 1.234,56

-

Number

マイナスの数値のマイナス記号の位置を決定します。

,

Number

グループ・セパレータの位置を決定します。使用するグループ・セパレータ記号は、実行時にテンプレート・ロケールに基づいて決まります。

例:

書式マスク: #,##0.00

データ: 1234.56

英語ロケールでの表示: 1,234.56

ドイツ語ロケールでの表示: 1.234,56

E

Number

科学表記法で仮数および指数を区切ります。

例:

0.###E+0: 正の数には必ずプラス記号が表示されます

0.###E-0: 正の数にはプラス記号は表示されません。

;

サブパターンの境界

プラスおよびマイナスのサブパターンを区切ります。この表の後の注意事項を参照してください。

%


プリフィクスまたはサフィックス

100を乗算してパーセントで表示します。

'

プリフィクスまたはサフィックス

プリフィクスまたはサフィックスに特殊文字を引用するために使用します。



注意:

サブパターンの境界: パターンには、「#,##0.00;(#,##0.00)」のように、プラスおよびマイナスのサブパターンが含まれます。各サブパターンには、プリフィクス、数値部分およびサフィックスが含まれます。マイナスのサブパターンはオプションです。マイナスのサブパターンを指定しない場合、そのマイナスのサブパターンは、プラスのサブパターンの先頭にローカライズされたマイナス記号(ほとんどのロケールで「-」を使用)を付けて表します。つまり、「0.00」は「0.00;-0.00」と同じになります。明示的にマイナスのサブパターンを指定した場合、このサブパターンは単にマイナスのプリフィクスとサフィックスを指定するために使用されます。桁数、最小数字などすべての特性はプラスのパターンと同じです。つまり、「#,##0.0#;(#)」と「#,##0.0#;(#,##0.0#)」の動作は完全に同じになります。


4.15.6 Oracle書式マスクの使用

Oracle書式マスクをフォーム・フィールドに適用する手順は、次のとおりです。

  1. プレースホルダ・フィールドに対して「Form Field Options」ダイアログ・ボックスを開きます。

  2. Type」を「Regular text」に設定します。

  3. 「Form Field Help Text」フィールドに、次の例に従ってマスク定義を入力します。

    <?format-number:ファイル名;'999G999D99'?>

説明:

fieldnameは、書式設定するデータ要素のXMLタグ名です。

999G999D99はマスク定義です。

図4-70に、データ要素"empno"に関する「ヘルプの追加」ダイアログへの入力例を示します。

図4-70 「ヘルプの追加」の入力

図4-70の説明が続きます
「図4-70 「ヘルプの追加」の入力」の説明

表4-22に、サポートされているOracle数値書式マスクの記号とその定義を示します。

表4-22 サポートされているOracle数値書式マスクの記号

記号 意味

0

数字。他に数字が存在しない場合には、明示的に0(ゼロ)が表示されます。例:書式マスク: 00.0000データ: 1.234表示: 01.2340

9

数字。指定桁数の値を戻し、正の数の場合は先頭に空白が付き、負の数の場合は先頭にマイナス記号が付きます。先行0(ゼロ)は空白ですが、0(ゼロ)値の場合は固定小数点数の整数部分に0(ゼロ)を戻します。例:書式マスク: 99.9999データ: 1.234表示: 1.234

C

指定した位置にISO通貨記号を戻します。

D

小数セパレータの位置を決定します。使用する小数セパレータ記号は、実行時にテンプレート・ロケールに基づいて決まります。例:書式マスク: 9G999D99データ: 1234.56表示(英国ロケールの場合): 1,234.56表示(ドイツ・ロケールの場合): 1.234,56

EEEE

科学表記法で値を戻します。

G

グループ(千単位)セパレータの位置を決定します。使用するグループ・セパレータ記号は、実行時にテンプレート・ロケールに基づいて決まります。例:書式マスク: 9G999D99データ: 1234.56表示(英国ロケールの場合): 1,234.56表示(ドイツ・ロケールの場合): 1.234,56

L

指定した位置にローカル通貨記号を戻します。

MI

マイナスの値を末尾に「-」を付けて表示します。

PR

マイナスの値を<>で囲んで表示します。

PT

マイナスの値を()で囲んで表示します。

S(数値の前)

プラスの値の場合は先頭に「+」を付け、マイナスの値の場合は先頭に「-」を付けて表示します。

S(数値の後)

プラスの値の場合は末尾に「+」を付け、マイナスの値の場合は末尾に「-」を付けて表示します。


4.15.7 日付の書式設定

BI Publisherでは、日付の書式を指定するために、次の3つの方法をサポートしています。

  • Microsoft Word固有の日付書式マスクを使用して、明示的な日付書式マスクを指定します。

  • Oracleのformat-date関数を使用して、明示的な日付書式マスクを指定します。

  • Oracleの抽象日付書式マスクを使用して、抽象日付書式マスクを指定します(多言語テンプレートの場合に推奨)。

使用できる方法は1つのみです。OracleとMSの両方の書式マスクを指定した場合、データが2回書式設定されるため、予期しない動作が発生します。

4.15.8 データソース要件

Microsoft書式マスクまたはOracle書式マスクを使用するには、XMLデータソースの日付が標準書式であることが必要です。標準書式は次のとおりです。

YYYY-MM-DDThh:mm:ss+HH:MM

説明:

  • YYYYは年です。

  • MMは月です。

  • DDは日です。

  • Tは、日付部分と時刻部分のセパレータです。

  • hhは、24時間書式の時間です。

  • mmは分です。

  • ssは秒です。

  • +HH:MMは、世界標準時(UTC)またはグリニッジ標準時からのタイムゾーン・オフセットです。

次に、この書式の例を示します。

2005-01-01T09:30:10-07:00

「T」の後のデータはオプションです。このため、2005-01-01という日付は、いずれかの日付書式設定オプションを使用して書式設定できます。


注意:

時間コンポーネントおよびタイムゾーンのオフセットがXMLソース日付に含まれていない場合、BI Publisherは、12:00 AM UTC(つまり、yyyy-mm-ddT00:00:00-00:00)を示すと想定します。


4.15.9 Microsoft日付書式マスクの使用

日付書式をフォーム・フィールドに適用する手順は、次のとおりです。

  1. プレースホルダ・フィールドに対して「Form Field Options」ダイアログ・ボックスを開きます。

  2. Type」を「Date」、「Current Date」または「Current Time」に設定します。

  3. 「日付の書式」のオプション・リストから適切な日付書式を選択します。

「日付の書式」フィールドでマスクを指定しない場合は、デフォルトとして抽象書式マスク「MEDIUM」が使用されます。詳細は、第4.15.12項「Oracle抽象書式マスク」を参照してください。

表4-23に、サポートされているMicrosoft日付書式マスクのコンポーネントを示します。

表4-23 サポートされているMicrosoft日付書式マスクのコンポーネント

記号 意味

d

月の日。1日~9日の場合、先頭に0(ゼロ)は付きません。

dd

月の日。1日~9日の場合、先頭に0(ゼロ)が付きます。

ddd

曜日の略称。AbbreviatedDayNamesで定義されます。

dddd

曜日の正式名称。DayNamesで定義されます。

M

数値で表した月。1月~9月の場合、先頭に0(ゼロ)は付きません。

MM

数値で表した月。1月~9月の場合、先頭に0(ゼロ)が付きます。

MMM

月の略称。AbbreviatedMonthNamesで定義されます。

MMMM

月の正式名称。MonthNamesで定義されます。

yy

世紀部分を除いた年。世紀部分を除いた年が10未満の場合は、先頭に0(ゼロ)を付けて表示されます。

yyyy

4桁の年。

gg

時代または年号。書式設定される日付に関連する時代または年号文字列がない場合、このパターンは無視されます。

h

12時間書式の時間。1時~9時の場合、先頭に0(ゼロ)は付きません。

hh

12時間書式の時間。1時~9時の場合、先頭に0(ゼロ)が付きます。

H

24時間書式の時間。1時~9時の場合、先頭に0(ゼロ)は付きません。

HH

24時間書式の時間。1時~9時の場合、先頭に0(ゼロ)が付きます。

m

分。1分~9分の場合、先頭に0(ゼロ)は付きません。

mm

分。1分~9分の場合、先頭に0(ゼロ)が付きます。

s

秒。1秒~9秒の場合、先頭に0(ゼロ)は付きません。

ss

秒。1秒~9秒の場合、先頭に0(ゼロ)が付きます。

f

1桁で表したミリ秒を表示します。

ff

2桁で表したミリ秒を表示します。

fff

3桁で表したミリ秒を表示します。

ffff

4桁で表したミリ秒を表示します。

fffff

5桁で表したミリ秒を表示します。

ffffff

6桁で表したミリ秒を表示します。

fffffff

7桁で表したミリ秒を表示します。

tt

AM/PMの指標。AMDesignatorまたはPMDesignatorで定義します(存在する場合)。

z

システムの現行タイムゾーンのタイムゾーン・オフセットを時間でのみ表示します(この要素は書式設定でのみ使用可能)。

zz

システムの現行タイムゾーンのタイムゾーン・オフセットを時間でのみ表示します(この要素は書式設定でのみ使用可能)。

zzz

システムの現行タイムゾーンのタイムゾーン・オフセットを時間と分で表示します。

:

デフォルトの時間セパレータ。TimeSeparatorで定義されます。

/


デフォルトの日付セパレータ。DateSeparatorで定義されます。

'

引用符付き文字列。文字列のリテラル値の前後を'文字で囲んで表示します。

"

引用符付き文字列。文字列のリテラル値の前後を"文字で囲んで表示します。


4.15.10 Oracle書式マスクの使用

Oracle書式マスクを日付フィールドに適用する手順は、次のとおりです。

  1. プレースホルダ・フィールドに対して「Form Field Options」ダイアログ・ボックスを開きます。

  2. Type」を「Regular Text」に設定します。

  3. Add Help Text...」ボタンを選択して、「Form Field Help Text」ダイアログを開きます。

  4. 次の構文を挿入して、日付書式マスクを指定します。

    <?format-date:date_string; 'ABSTRACT_FORMAT_MASK';'TIMEZONE'?>

    または

    <?format-date-and-calendar:date_string; 'ABSTRACT_FORMAT_MASK';'CALENDAR_NAME';'TIMEZONE'?>

    タイムゾーンはオプションです。書式マスク、カレンダおよびタイムゾーンの使用方法の詳細は後述します。

    書式マスクを指定しない場合は、デフォルトとして抽象書式マスク「MEDIUM」が使用されます。

    次に、フォーム・フィールドのヘルプ・テキスト入力の例を示します。

    <?format-date:hiredate;'YYYY-MM-DD'?>

表4-24に、サポートされているOracle日付書式マスクのコンポーネントを示します。

表4-24 サポートされているOracle日付書式マスクのコンポーネント

記号 意味

- / , . ; : "text"

記号および引用符が付いたテキストが再現されて表示されます。

AD A.D.

ピリオド付き/なしで西暦を示します。

AM A.M.

ピリオド付き/なしで子午線インジケータを示します。

BC B.C.

ピリオド付き/なしで紀元前を示します。

CC

世紀。たとえば、2002は21を戻し、2000は20を戻します。

DAY

日の名称。9文字未満の場合は、9文字の長さまで空白で埋め込まれます。

D

曜日(1から7)。

DD

日付(1から31)。

DDD

年における日(1から366)。

DL

長い日付書式で値が戻されます。

DS

短い日付書式の値を戻します。

DY

曜日の省略形。

E

年号の略称。

EE

年号の正式名称。

FF[1..9]

ミリ秒。FFの後に1から9の数字を設定して、戻される日時値のミリ秒部分の桁数を指定します。

例:

'HH:MI:SS.FF3'

HH

時間(1から12)。

HH12

時間(1から12)。

HH24

時間(0から23)。

MI

分(0から59)。

MM

月(01から12。01は1月)。

MON

月の名前の省略形。

MONTH

月の名称。9文字未満の場合は、9文字の長さまで空白で埋め込まれます。

PM P.M.

ピリオド付き/なしで子午線インジケータを示します。

RR

2桁のみを使用して、21世紀に20世紀の日付を格納できます。

RRRR

年を丸めます。4桁または2桁で入力できます。2桁の場合、RRの場合と同様の結果が戻ります。この機能が不適切な場合は、4桁で年を入力してください。

SS

秒(0から59)。

TZD

夏時間情報。TZD値は、夏時間情報を含むタイムゾーンの簡略文字列です。この値は、TZRで指定する地域に対応する必要があります。

例:

PST(太平洋標準時)

PDT(太平洋夏時間)

TZH

タイム・ゾーンの時間を指定します。(書式設定要素TZMを参照)。

TZM

タイム・ゾーンの分を指定します。(TZH書式要素を参照。)

例:

'HH:MI:SS.FFTZH:TZM'

TZR

タイムゾーン地域の情報。値は、データベースでサポートされるタイムゾーン地域である必要があります。

例:

PST(太平洋標準時)

WW

年における週(1から53)。第1週はその年の1月1日で始まり、1月7日で終了します。

W

月における週(1から5)。第1週はその月の1日で始まり、7日で終了します。

X

ローカル基数文字

YYYY

4桁で表した年。

YY Y

年の最後の2桁または1桁。


4.15.11 デフォルトの書式マスク

MS書式マスクまたはOracle書式マスクのいずれも指定しない場合は、マスク定義を省略してデフォルトの書式マスクを使用できます。デフォルトの書式マスクは、Oracleが提供するMEDIUM抽象書式マスクです(定義については、第4.15.12項「Oracle抽象書式マスク」を参照)。

Microsoftの方式でデフォルト・オプションを使用するには、「テキスト ボックス フォーム フィールド」ダイアログで、「種類」を「日付」に設定し、「日付の形式」フィールドを空白のままにします。

Oracle書式マスクのデフォルト・オプションを使用するには、次のように、format-date関数コールにマスク定義を指定しないでください。

<?format-date:hiredate?>

4.15.12 Oracle抽象書式マスク

抽象日付書式マスクは、I18Nライブラリの日付/時刻書式設定のデフォルト実装を反映します。いずれかのマスクを使用すると、レポートに関連付けられているロケールに基づいて出力が生成されます。

抽象書式マスクは、次の構文を使用して指定します。

<?format-date:fieldname;'MASK'?>

ここで、fieldnameはXML要素タグです。

MASKは、Oracle抽象書式マスクの名称です。

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

<?format-date:hiredate;'SHORT'?>
<?format-date:hiredate;'LONG_TIME_TZ'?>
<?format-date:xdoxslt:sysdate_as_xsdformat();'MEDIUM'?>

表4-25に、抽象書式マスク、およびUSロケールで生成されたサンプル出力を示します。

表4-25 抽象書式マスクと出力例

マスク 米国ロケールの出力

SHORT

2/31/99

MEDIUM

Dec 31, 1999

LONG

Friday, December 31, 1999

SHORT_TIME

12/31/99 6:15 PM

MEDIUM_TIME

Dec 31, 1999 6:15 PM

LONG_TIME

Friday, December 31, 1999 6:15 PM

SHORT_TIME_TZ

12/31/99 6:15 PM GMT

MEDIUM_TIME_TZ

Dec 31, 1999 6:15 PM GMT

LONG_TIME_TZ

Friday, December 31, 1999 6:15 PM GMT


4.15.13 レポートでのシステム日付(sysdate)の表示

sysdateを正しく表示するには、xdoxslt:sysdate_as_xsdformat()関数と<?format-date:?>コマンドを使用します。

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

<?format-date:xdoxslt:sysdate_as_xsdformat();'MEDIUM'?> 

<?format-date:xdoxslt:sysdate_as_xsdformat();'LONG'?>
<?format-date:xdoxslt:sysdate_as_xsdformat();'LONG_TIME_TZ'?> 

<?format-date-and-calendar:xdoxslt:sysdate_as_xsdformat(); 
    'LONG_TIME';'ROC_OFFICIAL';?> 

4.15.14 通貨の書式設定

BI Publisherでは、固有の通貨書式マスクを定義して、実行時に公開データに適用できます。

RTFテンプレートで通貨の書式設定を利用する手順は次のとおりです。

  1. BI Publisherの実行時構成プロパティで通貨書式を設定します。通貨書式は、システム・レベルまたはレポート・レベルで定義できます。

    通貨書式プロパティを設定するには、国際標準化機構(ISO)の通貨コードを使用して、指定された通貨に使用する形式を定義します。図4-71は、この例を示しています。

    図4-71 通貨コードの例

    図4-71の説明が続きます
    「図4-71 通貨コードの例」の説明

    詳細は、第2.8.5項「通貨書式の構成」を参照してください。

  2. 第4.15.15項「フィールドへの通貨書式の適用」の説明に従って、RTFテンプレートにformat-currencyコマンドを入力して、実行時に形式をフィールドに適用します。

4.15.15 フィールドへの通貨書式の適用

format-currency関数のパラメータは、次のとおりです。

<?format-currency:Amount_Field;CurrencyCode;displaySymbolOrNot?>

説明:

Amount_Fieldは、データ内の量/額の値を保持するXML要素のタグ名を取得します。

CurrencyCodeは静的値に設定することも、動的に設定することもできます。レポートの値が静的な場合は、'USD'のようにISOの3文字の通貨コードを一重引用符で囲んで入力します。

値を動的に設定するには、ISO通貨コードを保持するXML要素のタグ名を入力します。通貨コードを含む要素が、データに存在している必要があります。

実行時に、Amount_Fieldは、レポート・プロパティで通貨コードに設定された形式に従って書式設定されます。

displaySymbolOrNotは、一重引用符内に示す'true'または'false'の値のいずれかを取ります。''true'に設定すると、通貨記号はCurrencyCodeの値に従ってレポートに表示されます。通貨記号を表示しない場合は、'false'と入力するか、または単にパラメータを指定しないでください。

4.15.16 例: レポートでの複数の通貨書式の表示

表4-26は、レポート・プロパティに様々な通貨書式が設定されている場合の例です。

表4-26は複数の通貨書式を示しています。

通貨コード 書式マスク

YEN

9G999D99

INR

9G99G99G999D99


この例では、通貨コードを動的に設定する必要はありません。XMLデータには、次の要素があります。

<TOTAL_SALES>
    <US_SALES>8596526459.56</US_SALES>
    <INDIA_SALES>60000000</INDIA_SALES>
</TOTAL_SALES>

これら2つの合計フィールドをテンプレートに表示するとします。

US_SALESについては、BI Publisherプロパティ・フィールドの構文は、次のようになります。

<?format-currency:US_SALES;'USD'?>

図4-72は、「BI Publisherのプロパティ」ダイアログを使用してテンプレートにINDIA_SALESのエントリを表示する2つのフィールドを示しています。

図4-72 売上を表示するプロパティ

図4-72の説明が続きます
「図4-72 売上を表示するプロパティ」の説明

実行時、これらのフィールドは図4-73のように表示されます。

図4-73 売上フィールドの表示

図4-73の説明が続きます
「図4-73 売上フィールドの表示」の説明

4.15.17 例: 1つのレポートに複数の通貨コードを表示

次の単純なXMLコードには、量/額(Trans_amount)を含む要素およびISO通貨コード(Cur_Code)を含む要素が組み込まれています。

<ROW>
  <Trans_Amount>123</Trans_Amount>
  <Cur_Code>USD</Cur_Code>
</ROW>
<ROW>
  <Trans_Amount>-456</Trans_Amount>
  <Cur_Code>GBP</Cur_Code>
</ROW>
<ROW>
  <Trans_Amount>748</Trans_Amount>
  <Cur_Code>EUR</Cur_Code>
</ROW>
<ROW>
  <Trans_Amount>-987</Trans_Amount>
  <Cur_Code>JPY</Cur_Code>
</ROW>

これらの金額をそれぞれ適切な通貨記号とともに表示するには、テンプレートで、表示対象となる金額のフィールドに次を入力します。

<?format-currency:Trans_Amount;Cur_Code;'true'?>

図4-74は生成されたレポートを示します。

図4-74 複数通貨のレポート

図4-74の説明が続きます
「図4-74 複数通貨のレポート」の説明

4.16 カレンダーおよびタイム・ゾーンのサポート

ここでは、カレンダーおよびタイム・ゾーンのサポートについて説明します。

4.16.1 カレンダの仕様

「カレンダ」という用語は、発行レポートに表示されるカレンダ日付を指します。次のタイプがサポートされています。

  • GREGORIAN

  • ARABIC_HIJRAH

  • ENGLISH_HIJRAH

  • JAPANESE_IMPERIAL

  • THAI_BUDDHA

  • ROC_OFFICIAL(台湾)

次のいずれかの方法で、カレンダ・タイプを設定します。

  • format-date-and-calendar関数をコールして、カレンダ・タイプを宣言します。

    例: <?format-date-and-calendar:hiredate;'LONG_TIME_TZ';'ROC_OFFICIAL';?>

    図4-75は、この定義を使用して生成された出力を示します(ロケールはzh-TW、タイムゾーンはAsia/Taipeiに設定)。

    図4-75 ロケールをzh-TWに設定した場合の出力

    図4-75の説明が続きます
    「図4-75 ロケールをzh-TWに設定した場合の出力」の説明

  • プロファイル・オプション「XDO: カレンダ・タイプ」(XDO_CALENDAR_TYPE)を使用して、カレンダ・タイプを設定します。


注意:

テンプレートで指定したカレンダ・タイプは、このプロファイル・オプションで設定したカレンダ・タイプより優先されます。


4.16.2 タイムゾーンの仕様

タイムゾーン情報は、次の2つの方法で指定します。

  • Oracle書式を指定したformat-dateまたはformat-date-and-calendar関数をコールします。

  • Oracle Applicationsで、ユーザー・プロファイル・オプション「クライアント・タイム・ゾーン」(CLIENT_TIMEZONE_ID)を設定します。

タイムゾーンが指定されていない場合は、レポートのタイムゾーンが使用されます。

テンプレートでタイムゾーンを指定する場合は、America/Los Angelesのように、Javaタイムゾーン文字列として指定する必要があります。次に、テンプレートのヘルプ・テキスト・フィールドに入力する構文の例を示します。

<?format-date:hiredate;'LONG_TIME_TZ';'Asia/Shanghai'?>

4.17 外部フォントの使用

BI Publisherでは、通常はサーバーで使用できない外部フォントを出力で使用できます。新規フォントをレポート出力に設定するには、クライアント・マシンでそのフォントを使用してテンプレートを設計し、次に、そのフォントをサーバーで使用可能にして、実行時にそのフォントにアクセスできるようにBI Publisherを構成します。


注意:

外部フォントはPDF出力でのみサポートされています。


外部フォントを使用する手順は次のとおりです。

  1. フォントをテンプレートで使用します。

    1. フォントを<WINDOWS_HOME>/fontsディレクトリにコピーします。

    2. Microsoft Wordを開き、テンプレートを作成します。

    3. フォントをテンプレートに挿入します。テキストまたはフォーム・フィールドを選択し、任意のフォントをフォント・ダイアログ・ボックス(「書式」→「フォント」)またはフォント・ドロップダウン・リストから選択します。

      図4-76に、フォーム・フィールド・メソッドおよびテキスト・メソッドの例を示します。

      図4-76 フォーム・フィールド・メソッドおよびテキスト・メソッド

      図4-76の説明が続きます
      「図4-76 フォーム・フィールド・メソッドおよびテキスト・メソッド」の説明

  2. ORACLE_HOME/common/fontsディレクトリのBI Publisherサーバーにフォントを配置します。


    注意:

    事前定義済のフォントは、Oracle Business Intelligence OracleホームのORACLE_HOME/common/fontsにあります。フォントの位置はXDO_FONT_DIR変数によって設定されます。ご利用の環境でこの変数が設定されていない場合は、フォントは$JAVA_HOME/jre/lib/fontsに配置されます。


  3. BI Publisherのfontプロパティを設定します。

    レポートのfontプロパティは、BI Publisherの「フォント・マッピング」ページか構成ファイルで設定できます。

    「フォント・マッピング」ページでプロパティを設定するには:

    1. レポート・エディタでレポートを開きます。

    2. 「プロパティ」をクリックし、次に「フォント・マッピング」をクリックします。

    3. フォントを入力し、次にマップ先フォントを選択します。第2.8項「レポート・プロパティの構成」を参照してください。

    構成ファイルへのプロパティの設定

    1. BI Publisher構成ファイルのfontsセクションで、フォント名とサーバー上の位置を更新します。たとえば、TrueTypeを新規に設定するには、次のように入力します。

      <font family="MyFontName" style="normal" weight="normal">
          <truetype path="\user\fonts\MyFontName.ttf"/>
      </font>
      
      

    詳細は、『Oracle Fusion Middleware Oracle Business Intelligence Publisher管理者ガイド』の付録「構成ファイル・リファレンス」を参照してください。

これでレポートの実行が可能になり、BI Publisherは設計どおりのフォントを出力に使用します。PDF出力の場合は、BI Publisherの拡張フォント処理機能によって、外部フォントの絵文字が最終出力に直接埋め込まれます。文書で必要な絵文字が含まれるのは埋め込まれたフォントのみで、フォント定義自体には含まれません。したがって、文書に必要な要素はすべて備わっているため、外部フォントをプリンタにインストールする必要はありません。

4.17.1 BI Publisherに付属のバーコード・フォントの使用

表4-27では、BI Publisherに付属のバーコードについて説明します。

表4-27 BI Publisherに付属のバーコード

フォント・ファイル サポートされているアルゴリズム

128R00.TTF

code128a、code128b、およびcode128c

B39R00.TTF

code39、code39mod43

UPCR00.TTF

upca、upce


事前パッケージ済フォントのいずれかを使用する場合、BI Publisherでは、バーコード・フォントを出力ドキュメントのデータに適用する前に、データに対する前処理を実行します。たとえば、書式を設定する前には、データのチェックサム値やスタート・ビットとエンド・ビットを計算します。

設計時には、Microsoft Wordのフィールドにバーコード・フォントを適用する必要はありません。かわりに、BI Publisherのフォント・マッピングを使用して、フィールドに適用するフォントをマップできます。実行時に、BI Publisherはフォント・マッピングで指定したベース・フォントを使用して、任意のフィールドにバーコード・フォントを適用します。テンプレートの他の場所で使用されていないフォントを選択してください。フォント・マッピングの詳細は、第2.8項「レポート・プロパティの構成」を参照してください。

Microsoft Wordでフォントを直接使用する場合、適切な.TTFファイルをC:\WINDOWS\Fontsディレクトリに追加します。Template Builderのプレビュー機能を使用するには、Template Builderの構成ファイルでフォントをマップします。詳細は、第4.22.5項「BI PublisherのTemplate Builder用フォントの構成」を参照してください。

レポート出力でバーコード・フォントを使用する手順は次のとおりです。

  1. テンプレート内で、レポート出力でバーコードを表示する場所にフィールドを挿入します。

  2. フォーム・フィールドで、次のコマンドを入力します。

    <?format-barcode:data;'barcode_type'?>

    説明:

    dataは、エンコーディング対象のXMLデータソースからの要素です。たとえば、INVOICE_NOなどです。

    barcode_typeは、上に示したサポート対象アルゴリズムの1つです。

    例:

    <?format-barcode:INVOICE_NO;'code128a'?>
    
    <?format-barcode:INVOICE_NO;'code39mod43'?>
    
    <?format-barcode:INVOICE_NO;'upca'?> 
    
  3. Microsoft Wordで、フォントをフィールドに適用します。クライアント・マシンにバーコード・フォントをインストールしていない場合は、Bookmanなど、テンプレートの他の場所で使用されていないフォントを選択します。

  4. 「フォント・マッピング」ページでフォントを構成します。「フォント・マッピング」ページの詳細は、第2.8項「レポート・プロパティの構成」を参照してください。

次の点に注意してください。

  • バーコード・フォントがクライアントにインストールされている場合でも、Microsoft Wordによって適切に表示されない場合があります。この問題を回避するには、別のフォントをフィールドに適用し、前述のようにフォントをマップします。

  • upcaアルゴリズムは、UPC-Aメッセージ文字列のみを受け入れて、UPC-Aバーコードへとエンコードします。

  • 12文字の文字列は、検査数字付のUPC-Aメッセージとして処理され、11文字の文字列は検査数字がないものとして処理されます。

  • upceアルゴリズムは、UPC-Eメッセージ文字列だけを受け入れて、UPC-Eバーコードへとエンコードします。

  • 8文字の文字列は、前部と後部の両方にガード・バーを持つUPC-Eメッセージとして処理されます。6文字の文字列はガード・バーがないものとして扱われます。

4.17.2 カスタム バーコード書式の実装

かわりにカスタム・バーコードを使用することを選択した場合、この手順を使用してカスタム・バーコードを実装します。

BI Publisherには、バーコード・フォントを出力ドキュメントのデータに適用する前に、データに対する前処理を実行する機能があります。たとえば、データの書式設定前に、そのデータのチェックサム値やスタート・ビットとエンド・ビットの計算が必要な場合があります。

このソリューションには、BI Publisherへのバーコードのエンコーディング・クラスの登録が必要で、それを実行時にインスタンス化してテンプレートの書式設定を適用できます。詳細は、『Oracle Fusion Middleware Oracle Business Intelligence Publisher開発者ガイド』の拡張バーコード・フォント書式設定に関する項を参照してください。

テンプレートで書式設定機能を有効にするには、テンプレート内で2つのコマンドを使用する必要があります。1つ目は、バーコード・エンコーディング・クラスをBI Publisherに登録するコマンドです。この登録は、エンコーディング・コマンドより前にテンプレートで宣言する必要があります。2つ目は、書式を設定するデータを識別するためのエンコーディング・コマンドです。

4.17.2.1 バーコード・エンコーディング・クラスの登録

次の構文をテンプレートのフォーム・フィールドで使用して、バーコード・エンコーディング・クラスを登録します。

<?register-barcode-vendor:java_class_name;barcode_vendor_id?>

このコマンドには、Javaクラス名(エンコーディングを実行する)と、クラス別に定義されたバーコード・ベンダーIDが必要です。このコマンドは、テンプレート内でデータをエンコーディングするコマンドの前に配置する必要があります。たとえば、次のように入力します。

<?register-barcode-vendor:'oracle.xdo.template.rtf.util.barcoder.BarcodeUtil';'XMLPBarVendor'?>

説明:

oracle.xdo.template.rtf.util.barcoder.BarcodeUtilはJavaクラスです。

XMLPBarVendorは、クラス別に定義されたベンダーIDです。

4.17.2.2 データのエンコード

データを書式設定するには、次の構文をテンプレートのフォーム・フィールドで使用します。

<?format-barcode:data;'barcode_type';'barcode_vendor_id'?>

説明:

dataは、エンコーディング対象のXMLデータソースからの要素です。(例: LABEL_ID)。

barcode_typeは、データの書式設定に使用されるエンコーディングJavaクラスのメソッドです(例: Code128a)。

barcode_vendor_idは、エンコーディング・クラスを登録する際に使用する1つ目のコマンドのregister-barcode-vendorフィールドで定義したIDです。

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

<?format-barcode:LABEL_ID;'Code128a';'XMLPBarVendor'?>

実行時に、barcode_typeメソッドがコールされてデータ値の書式が設定され、最終出力のデータにバーコード・フォントが適用されます。

4.18 コンテキスト・コマンドを使用した命令の配置の制御

BI Publisher構文は、XSL命令を単純化したものです。この構文は、テンプレートで使用するネイティブのXSLコマンドとともに、実行時にXSL-FOに変換されます。変換後のスタイル・シート内でのこれらの命令の配置によって、テンプレートの動作が決定されます。

BI PublisherのRTFプロセッサでは、最も一般的なコンテキストに従って、XSL-FOスタイルシート内にこれらの命令が配置されます。ただし、特定の動作の生成には、別の方法による命令のコンテキストの定義が必要な場合もあります。この要件をサポートするために、BI Publisherには、処理命令のコンテキスト(配置)を定義できる一連のコンテキスト・コマンドが用意されています。たとえば、コンテキスト・コマンドを使用すると、次の処理を実行できます。

コンテキストは、BI Publisher構文を使用した処理コマンド、およびXSL固有の構文を使用した処理コマンドの両方に指定できます。

BI Publisherでは、表4-28に記載のあるコンテキスト・タイプがサポートされています。

表4-28 サポートされているコンテキスト・タイプ

コンテキスト 説明

section

文は、ヘッダーおよびフッターを含めてセクション全体に影響を与えます。たとえば、for-each@sectionコンテキスト・コマンドでは、出現箇所ごとに、再開始されたページ番号およびヘッダーとフッターを使用して新規セクションが作成されます。<?initial-page-number:'auto'?>コマンドを使用することで、セクション全体で連続的なページ番号付けを維持できます。この使用例については、第4.14.1項「バッチ・レポートの作成」を参照してください。

column

この文は、表の列全体に作用します。このコンテキストは通常、データに応じて表の列を表示または非表示にするために使用されます。例については、第4.10.5項「列の書式設定」を参照してください。

cell

この文は、表のセルに作用します。このコンテキストは通常、動的な列数を作成するために、ピボット・テーブルで@columnとともに使用されます。例については、第4.4.14.3項「ピボット・テーブルの挿入」を参照してください。

block

この文は、複数のfo:blocks(RTFの段落)全体に作用します。このコンテキストは通常、if文およびfor-each文に対して使用されます。また、段落または表のセルに書式設定を適用するためにも使用されます。例については、第4.10.7項「セルの強調表示」を参照してください。

inline

このコンテキストは、fo:inlineブロック内の単一の文になります。このコンテキストは変数に使用されます。

incontext

文は、その文を囲んでいる文の直後に挿入されます。これは、その文を囲んでいるfor-eachの後の最初の要素として続く必要がある<?sort?>文のデフォルトです。

inblock

文は、fo:block(RTFの段落)内の単一の文になります。これは通常、制御文(ifやfor-eachなど)には有効ではなく、call-templateなど、テキストを生成する文に有効です。

inlines

この文は、複数のインライン・セクション全体に作用します。1つのインライン・セクションは、太字でレンダリングされる一続きの語など、同じ書式設定を使用するテキストです。第4.10.2項「ボイラープレート・テキストでのIf文の使用」を参照してください。

@inlinesif構文で使用する場合、同じ文中のその他のif構文のすべてで、コンテキスト・コマンド@inlineを使用する必要があります。@inlinesFOR-EACH構文で使用する場合、この文中にあるその他のifFOR-EACH構文すべてで、コンテキスト・コマンド@inlineを使用する必要があります。

begin

この文は、XSLスタイルシートの先頭に配置されます。これは、グローバル変数の場合は必須です。第4.13.2項「パラメータの設定」を参照してください。

end

この文は、XSLスタイルシートの最後に配置されます。


表4-29に、各BI Publisherコマンドのデフォルト・コンテキストを示します。

表4-29 BI Publisherコマンドのデフォルト・コンテキスト

コマンド コンテキスト

apply-template

inline

attribute

inline

call-template

inblock

choose

block

for-each

block

if

block

import

begin

param

begin

sort

incontext

template

end

value-of

inline

variable

end


4.19 XPathコマンドの使用

XPathは、World Wide Web Consortium(W3C)によって開発された業界標準です。これはXMLドキュメントのナビゲーションに使用される方法です。XPathはXMLドキュメントの個々の部分を処理するための一連の構文規則です。RTFテンプレートでは、実行時に、XMLデータの移動にXPathが使用されているため、ユーザーは認識していなくても、すでにXPathを使用していることになります。

この項では、XPathの原理の概要について説明します。詳細は、W3CのWebサイトhttp://www.w3.org/TR/xpathを参照してください。

XPathは、XML文書をノードのツリーとして解釈するDocument Object Model(DOM)に従っています。ノードは、次の7タイプのいずれかです。

これらの要素の多くが次のサンプルXMLに示されています。このサンプルにはCDのカタログが含まれています。

<?xml version="1.0" encoding="UTF-8"?>
<! -  My CD Listing  - >
<CATALOG>
 <CD cattype=Folk>
  <TITLE>Empire Burlesque</TITLE>
  <ARTIST>Bob Dylan</ARTIST>
  <COUNTRY>USA</COUNTRY>
  <PRICE>10.90</PRICE>
  <YEAR>1985</YEAR>
 </CD>
 <CD cattype=Rock>
  <TITLE>Hide Your Heart</TITLE>
  <ARTIST>Bonnie Tylor</ARTIST>
  <COUNTRY>UK</COUNTRY>
  <PRICE>9.90</PRICE>
  <YEAR>1988</YEAR>
  </CD>
</CATALOG>

この例のルート・ノードはCATALOGです。CDは要素であり、属性cattypeが設定されています。サンプルには、コメントとしてMy CD Listingと記述されています。テキストはXML文書要素内に含まれています。

4.19.1 データの検索

location-path式を使用して、XML文書内の情報を検索します。

ノードはユーザーが使用する最も一般的な検索要素です。サンプルのCATALOG XMLのノードには、CD、TITLEおよびARTISTなどがあります。XML文書内のノードを検索するには、パス式を使用します。たとえば、次のパスではすべてのCD要素が戻されます。

//CATALOG/CD

説明:

ダブル・スラッシュ(//)は、文書内のレベルに関係なく、XML文書内で検索基準と一致する要素がすべて戻されることを示します。

スラッシュ(/)は子ノードを区切ります。パターンと一致するすべての要素が戻されます。

個々のTITLE要素を取得するには、次のコマンドを使用します。

/CATALOG/CD/TITLE

この例では、次のXMLが戻されます。

<CATALOG>
 <CD cattype=Folk>
  <TITLE>Empire Burlesque</TITLE>
  </CD>
 <CD cattype=Rock>
  <TITLE>Hide Your Heart</TITLE>
  </CD>
</CATALOG>

検索内容をさらに制限するには、大カッコを使用します。大カッコを使用すると、特定の子ノードまたは指定した値を含んだ要素が検索されます。たとえば、次の式では、Bob DylanのすべてのCDが検索されます。

/CATALOG/CD[ARTIST="Bob Dylan"]

または、各CD要素にPRICE要素が設定されていない場合は、次の式を使用してPRICE要素が含まれているCD要素のみを戻すことができます。

/CATALOG/CD[PRICE]

大カッコを使用する表記法では、検索に属性値を利用できます。属性を示すには@記号を使用します。たとえば、次の式では、ロックのすべてのCD(cattype属性の値がRockのすべてのCD)が検索されます。

//CD[@cattype="Rock"]

この結果、サンプルXML文書から次のデータが戻されます。

<CD cattype=Rock>
  <TITLE>Hide Your Heart</TITLE>
  <ARTIST>Bonnie Tylor</ARTIST>
  <COUNTRY>UK</COUNTRY>
  <PRICE>9.90</PRICE>
  <YEAR>1988</YEAR>
</CD>

また、大カッコを使用して、取得する項目の番号を指定することもできます。たとえば、次のXPath式を使用すると、XML文書から最初のCD要素が読み込まれます。

/CATALOG/CD[1]

次のように、サンプルから最初のCD要素が戻されます。

<CD cattype=Folk>
  <TITLE>Empire Burlesque</TITLE>
  <ARTIST>Bob Dylan</ARTIST>
  <COUNTRY>USA</COUNTRY>
  <PRICE>10.90</PRICE>
  <YEAR>1985</YEAR>
 </CD>

XPathでは、指定したノード内に含まれているすべての要素を取得するためのワイルドカードもサポートされています。たとえば、サンプルXMLからすべてのCDを取得するには、次の式を使用します。

/CATALOG/*

さらに複雑な検索のために、文とブール演算子を組み合せることができます。次の式では、すべてのフォークおよびロックのCDが取得され、結果としてサンプルからすべての要素が取得されます。

//CD[@cattype="Folk"]|//CD[@cattype="Rock"]

縦線(|)は、論理OR演算子と同等です。さらに、XPathでは、ORおよびANDに加え、等価演算子<=、<、>、>=、==および!=が認識されます。たとえば、次の式を使用すると、1985年以降にリリースされたすべてのCDを検索できます。

/CATALOG/CD[YEAR >=1985]

4.19.2 参照の開始

XPath式の最初の文字で、XMLツリー内の開始位置が決まります。スラッシュ(/)で始まる文は絶対参照とみなされます。スラッシュが指定されない場合は相対参照を意味します。相対参照の例を次に示します。

CD/*

この文では、現行の参照ポイントで検索が開始されます。つまり、この例が1つの文グループ内で使用されている場合は、その前の文で使用された参照ポイントが使用されます。

すでに述べたように、2本のスラッシュ(//)により、ドキュメント内の位置にかかわらず、すべての一致する要素が取得されます。このため、パフォーマンスを改善するのに必要な場合のみ、2本のスラッシュ(//)を使用する必要があります。

4.19.3 コンテキストおよび親の指定

現行要素と親要素を選択するために、XPathでは、ディレクトリのナビゲートに通常使用されているドット表記法が認識されます。ピリオドを1つ(.)使用すると現行ノードが選択され、ピリオドを2つ(..)使用すると、現行ノードの親が戻されます。たとえば、現行ノードの親の子ノードをすべて取得するには、次の式を使用します。

../*

したがって、サンプルXMLからすべてのCDにアクセスするには、次の式を使用します。

/CATALOG/CD/..

また、次の式を使用して、1988年にリリースされたすべてのCDのタイトルにアクセスすることもできます。

/CATALOG/CD/TITLE[../YEAR=1988]

2個のピリオド(..)を使用すると、要素ツリーを上に移動してTITLEと同じレベルでYEAR要素が検索され、そのYEAR要素で1988との一致が評価されます。この例では//も使用できますが、要素YEARがXML文書の他の場所でも使用されている場合は、誤った結果が戻される可能性があります。

XPathは、RTFテンプレートと組み合せると非常に強力な標準になり、テンプレートで条件付き書式設定およびフィルタリングを使用できます。

4.20 名前空間の宣言

XMLデータに名前空間が含まれている場合は、プレースホルダで名前空間を参照する前にテンプレートで宣言する必要があります。テンプレートでネームスペースを宣言するには、基本RTF方式、またはフォーム・フィールドを使用します。次の構文を入力します。

<?namespace:ネームスペース名= ネームスペースのurl?>

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

<?namespace:fsg=http://www.example.com/fsg/2002-30-20/?>

一度宣言すると、プレースホルダ・マークアップにネームスペースを使用できます。例: <?fsg:ReportName?>

4.21 FO要素およびXSL要素の使用

ここでは、FO要素およびXSL要素の使用方法を説明します。

4.21.1 FO要素の使用

Microsoft Wordのフォーム・フィールド内でFO固有の構文を使用できます。

XSL-FOの詳細は、W3CのWebサイトhttp://www.w3.org/2002/08/XSLFOsummary.htmlを参照してください。

BI PublisherでサポートされるすべてのFO要素のリストは、付録D「サポートされているXSL-FO要素」を参照してください。

4.21.2 XSL要素の使用

テンプレートでは、XSL構文をフォーム・フィールドに挿入することによって、任意のXSL要素を使用できます。

基本RTF方式を使用している場合は、XSL構文をテンプレートに直接挿入できません。BI Publisherでは、RTFテンプレートで使用できるように次のXSL要素が拡張されています。

これらを基本方式のRTFテンプレートで使用するには、XSL要素についてBI Publisherタグ・フォームを使用する必要があります。フォーム・フィールドを使用している場合は、いずれかのオプションを使用します。

4.21.2.1 テンプレート・ルールの適用

現行要素の子ノードにテンプレート・ルールを適用するには、この要素を使用します。

XSL構文: <xsl:apply-templates select="name">

BI Publisherタグ: <?apply:name?>

この関数は、<xsl:template-match="n">に適用されます。nは要素名です。

4.21.2.2 現行ノードのコピー

現行ノードのコピーを作成するには、この要素を使用します。

XSL構文: <xsl:copy-of select="name">

BI Publisherタグ: <?copy-of:name?>

4.21.2.3 名前付きテンプレートのコール

現行のテンプレートに挿入または適用される名前付きテンプレートをコールするには、この要素を使用します。たとえば、この機能を使用すると表を複数回レンダリングできます。

XSL構文: <xsl:call-template name="name">

BI Publisherタグ: <?call-template:name?>

4.21.2.4 テンプレートの宣言

指定したノードが一致した場合に一連のルールを適用するには、この要素を使用します。

XSL構文: <xsl:template name="name">

BI Publisherタグ: <?template:name?>

4.21.2.5 変数の宣言

ローカルまたはグローバル変数を宣言するには、この要素を使用します。

XSL構文: <xsl:variable name="name">

BI Publisherタグ: <?variable:name?>

:

<xsl:variable name="color" select="'red'"/> 

"color"変数に値"red"を割り当てます。この変数をテンプレートで参照できます。

4.21.2.6 スタイル・シートのインポート

スタイルシートの内容を別のスタイルシートにインポートするには、この要素を使用します。


注意:

インポート対象のスタイルシートの優先順位は、インポート先のスタイルシートより低くなります。


XSL構文: <xsl:import href="url">

BI Publisherタグ: <?import:url?>

4.21.2.7 スタイルシートのルート要素の定義

この要素と<xsl:stylesheet>要素は完全に同じ要素です。両方とも、スタイルシートのルート要素を定義するために使用されます。


注意:

組込み対象のスタイルシートの優先順位は、組込み先のスタイルシートと同じになります。


XSL構文: <xsl:stylesheet xmlns:x="url">

BI Publisherタグ: <?namespace:x=url?>


注意:

名前空間はテンプレートで宣言する必要があります。第4.20項「名前空間の宣言」を参照してください。


4.21.2.8 XSL固有の数値書式設定

XSL固有のformat-number関数では、次の基本書式が使用されます。

format-number(number,format,[decimalformat])

次にパラメータについて説明します。

  • number - 必須。書式設定する数値を指定します。

  • format - 必須。書式パターンを指定します。次の文字を使用してパターンを指定します。

    • #(桁数を表します。例: ####)

    • 0(先頭および後続の0(ゼロ)を指定します。例: 0000.00)

    • .(小数点の位置。例: ###.##)

    • , (千単位のグループ・セパレータ文字。例: ###,###.##)

    • %(数値をパーセントで表示します。例: ##%)

    • ;(パターン・セパレータ文字。最初のパターンはプラスの数値に使用され、2番目のパターンはマイナスの数値に使用されます。)

  • decimalformat - オプション。10進書式の詳細は、基本的なXSLTマニュアルを参照してください。

4.22 RTFテンプレートをMicrosoft PowerPoint出力用に設計するためのガイドライン

BI Publisherでは、RTFテンプレートをPowerPointの出力として生成できます。これにより、レポート・データを重要ビジネス・プレゼンテーションに利用できます。現時点では、生成されるPowerPointドキュメントは、書式付きデータとチャートがPowerPointに単純にエクスポートされたものになります。

4.22.1 制限事項

PowerPointに出力して作業する場合、次のような制限があります。

  • PowerPointスライド用に表を設計する場合、表の境界線タイプを単一の実線で定義する必要があります(二重線、破線やその他の種類はサポートされていません)。

  • ハイパーリンクはサポートされていません。

  • 図形はサポートされていません。

  • 右揃えを使用すると、テキストの位置が若干ずれる場合があります。

  • 用紙サイズはRTFテンプレートのすべてのページで同じにする必要があります。同じドキュメントで異なる用紙サイズを組み合せることはできません。

  • 双方向の言語はサポートされていません。

  • 中国語、日本語および韓国語のフォントでは、太字や斜体を文字で使用すると、文字の位置が若干ずれる場合があります。これは、太字や斜体のフォントがない場合、Microsoft製品では太字や斜体のエミュレーションを使用するためです。

  • 双方向の言語を除いてすべてのUnicode言語がサポートされています。

  • BI Publisherのフォント代替メカニズムは、PowerPointテンプレートではサポートされていません。インストールされていないフォントを使用する場合、BI Publisherで構成するようにしてください。

4.22.2 使用上のガイドライン

次に、PowerPointに出力するためにRTFテンプレートを設計する場合に役立つガイドラインを示します。

  • PowerPointの出力は、RTFテンプレートで定義されたページ方向(縦または横)が維持されます。ほとんどのプレゼンテーションは横向きであり、これはRTFテンプレートの推奨方向です。

  • RTFテンプレート内の改ページ1つにつき、新しいスライドが1つ生成されます。

  • スライドの背景色は常に白色に生成されます。別の背景色にする場合、PowerPointファイルが生成された後に色を変更する必要があります。

  • ページ・ヘッダーまたはフッターの文字を強調表示するときに、フォントがxdo.cfgで事前に定義されていない場合は、「<?」と「?>」をテンプレートに組み込んで「<?XXXXXX?>」のようにタグ全体のフォントを指定します。

  • 表でマルチバイト文字(簡体字中国語など)を使用する場合、文字の表示が予期しないものになることを防ぐために、列幅が、最大文字にセルの左マージンと右マージンを足した幅を含めるために十分な大きさであることを確認してください。

4.22.3 PowerPoint出力のチャートについて

BI Publisherは、PowerPoint2007出力で表示される特定のチャート・タイプの従来のPowerPointチャートをサポートしています。チャートがネイティブ・チャートとして挿入された場合は、PowerPointで変更できます。チャートがネイティブ・チャートとして挿入されていない場合は、BI Publisherは、更新できないPNGイメージを挿入します。

次のチャート・タイプは、PowerPoint2007出力でネイティブのPowerPointチャートとして表示できます。

  • ドーナツ

  • 折れ線

  • レーダー

  • バブル

  • パレート

  • 組合せ

  • 株価

PowerPointでネイティブでないチャート・タイプ(ゲージやファンネルなど)は棒グラフに変換されます。

デフォルトでは、ネイティブ・チャートの挿入が有効化されています。レポートのネイティブ・チャート挿入を無効にするには、「PPTXネイティブ・チャート・サポートの有効化」レポート・プロパティをfalseに設定します。詳細は、第10章「レポート処理および出力ドキュメントのプロパティの設定」を参照してください。

「PPTXネイティブ・チャート・サポートの有効化」をfalseに設定すると、PowerPoint2007出力ではすべてのチャートがイメージとして表示されます。そのため、ネイティブでないチャート・タイプがレポートに含まれている場合にかぎり、このオプションをfalseに設定してください。

4.22.4 BI Publisherサーバー用フォントの構成

PowerPoint出力のサポートでは、BI Publisherにおいて他のタイプの出力に使用されるフォント代替メカニズムは含まれていません。テンプレートに標準でないフォントが使用されている場合、RTFテンプレートで使用する各フォントを、PowerPointでの出力の生成に使用できるように、BI Publisherサーバーを構成する必要があります。これらのフォントをBI Publisherサーバーにコピーして、RTFテンプレートのフォント・マッピングを定義する必要があります。システム全体か個々のレポートに対してこれを実行できます。詳細は、第10.16項「フォント・マッピングの定義」を参照してください。

4.22.5 BI PublisherのTemplate Builder用フォントの構成

BI PublisherのTemplate Builderを使用してレポートを設計する場合、英語以外のフォントや標準でないフォントを使用しているPPT出力でプレビューを適切に行うには、BI Publisherの構成ファイルでフォントを定義する必要があります。この構成ファイルはxdo.cfgと呼ばれ、通常次に示す場所にあります。

C:\Oracle\BI Publisher\BI Publisher Desktop\Template Builder for Word\config\

このファイルを使用していない場合は、かわりにxdo example.cfgファイルで代用することができます。このファイルはUTF-8のエンコーディングで保存し、定義されたフォントごとに絶対フルパスを明記する必要があります。そうしないと、文字が重なったり折返しが正常に動作しないなどの問題が発生します。

BI PublisherのTemplate Builder用フォントを構成する手順は次のとおりです。

  1. C:\Oracle\BI Publisher\BI Publisher Desktop\Template Builder for Word\config\にナビゲートします。

  2. xdo.cfgファイルを開き、フォント・マッピングを更新します。xdo.cfgファイルでフォント・マッピングを直接更新する方法の詳細は、『Oracle Fusion Middleware Oracle Business Intelligence Publisher管理者ガイド』のフォント定義に関する項を参照してください。

  3. xdo.cfgをUTF-8フォーマットで保存します。

    図4-77は、xdo.cfgファイルの例を示しています。

図4-77 サンプルxdo.cfgファイル

図4-77の説明が続きます
「図4-77 サンプルxdo.cfgファイル」の説明

4.23 レポートでのHTML形式データのレンダリング

ここでは、最終的な出力レポートでデータソースのHTML書式設定を保持する方法を説明します。内容は次のとおりです。

4.23.1 サポートされるHTML機能

サポートされるHTML機能は次のとおりです。

  • ハイパーリンク

  • リスト

    • 箇条書きリスト

    • 順序リスト

  • パラグラフ

  • フォント・スタイル(太字、斜体、書式なし、下線、下付き、上付き、取消し線)

  • フォント・サイズ

  • フォント・ファミリ

  • 背景色

  • 前景色

  • 段落の配置(中央、左、右、両端揃え)

  • 段落インデント

次のHTML機能はサポートされていません。

  • ネストされたリスト(インデント付きリスト)

  • HTMLソース・コードを変更することにより手動で挿入されたすべてのHTMLタグや属性。たとえば、挿入された表やイメージなど。

4.23.2 データ・モデル要件

レポートへの入力として使用されるXMLデータは、CDATAセクションにあるデータのHTML部分をラップする必要があります。レポートに表示するHTMLデータの取得に関する詳細は、『Oracle Fusion Middleware Oracle Business Intelligence Publisherデータ・モデリング・ガイド』で、CLOB列に保存されたXHTMLデータの処理に関する項を参照してください。

4.23.3 RTFテンプレートの要件

レポートにHTMLをレンダリングするには、RTFテンプレートで次のタグを使用します。

<?html2fo: elementname?>

ここで、elementnameは、HTMLデータを含むXML要素名です。

4.23.4

この例では、埋込みHTMLデータが含まれる次のXMLデータを使用します。

<?xml version="1.0" encoding="UTF-8"?>
<RTECODE>
<![CDATA[
<p><font style="font-style: italic; font-weight: bold;" size="3">
<a href="http://www.oracle.com">oracle</a></font> </p>
<p><font size="6"><a href="http://docs.oracle.com/">Oracle Documentation</a>
</font></p>
]]>
</RTECODE>

 

このサンプルを書式設定済HTMLレポートとしてレンダリングするには、RTFテンプレートに次のように入力します。

<?html2fo: RTECODE?>

図4-78は、このサンプルが出力レポートでどのようにレンダリングされるかを示しています。

図4-78 レポートにレンダリングされたデータからのHTML書式設定

レポートにレンダリングされたデータからのHTML書式設定