ヘッダーをスキップ

Oracle Business Intelligence Publisherユーザーズ・ガイド
リリース10.1.3.2
E05037-01
目次へ
目次
前のページへ
前へ
次のページへ
次へ

RTFテンプレートの作成

概要

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

BI PublisherのRTFテンプレート・パーサーは、RTFファイル・タイプとして保存された文書をXSL-FOに変換します。これによって、標準的な文書処理アプリケーションの多くの設計機能を使用してレポート設計を作成でき、BI Publisherではその設計を認識して保守します。

設計時には、BI Publisherの簡略化されたXSL式用のタグを使用して、データ・フィールドと他のマークアップをテンプレートに追加します。これらのタグは、XMLレポート・データをレポート・レイアウトに関連付けます。XSLの知識があり、簡略化されたタグを使用しない場合のために、BI Publisherではテンプレートでの純粋なXSL要素の使用もサポートしています。

また、BI Publisherでは、使用している文書処理アプリケーションの書式設定機能に加えて、条件付き書式設定、動的データ列、総合計、チャートなどの拡張レポート機能もサポートしています。

テンプレートにコードを直接挿入する場合は、すべてのXSL要素、多くのFO要素、およびBI Publisherによって拡張された一連のSQL式を挿入できます。

サポートされているモード

BI Publisherでは、RTFテンプレートを作成する次の2つの方式がサポートされています。

このマニュアルでは、これら2つの方式を使用したRTFテンプレートの作成方法を説明します。

前提条件

テンプレートの設計には、次の前提条件が必要です。

概要

RTFテンプレート・ファイルは、次の2つの基本ステップで作成します。

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

    使用している文書処理アプリケーションの書式設定機能を使用して、ファイルをRTFとして保存します。

  2. テンプレート・レイアウトのマークアップ

    BI Publisherの簡略化されたタグを挿入します。

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

BI Publisher Template Builderの使用

Template BuilderはMicrosoft Wordの拡張機能であり、RTFテンプレートの開発を簡略化します。このビルダーによって、この章で説明する手動による多くの手順が自動化されます。このマニュアルとともにこのビルダーを使用することで、生産性を向上できます。

Template BuilderはMicrosoft Wordと緊密に統合されており、次の機能を実行できます。

この章では、これらの機能を手動で実行する手順を説明します。Template Builderの使用方法の説明とチュートリアルは、このツールに同梱されているReadmeファイルおよびヘルプ・ファイルから入手できます。

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

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

サンプル・テンプレート・レイアウト

テキストで説明されている画像

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

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の子要素になります。各子要素には、それ自体の子要素を指定できます。

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

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

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

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

プレースホルダ

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

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

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

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

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

Suppliers

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

グループを定義することによって、表示対象のフィールド(子)が含まれる要素(親)の出現を毎回BI Publisherに通知します。実行時に、BI Publisherは要素をループするたびにこのフィールドを表示します。

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

設計を作成するには、使用している文書処理アプリケーションの書式設定機能を使用します。

次に例を示します。

Microsoft Wordでサポートされている書式設定機能の詳細は、「サポート対象のシステム固有の書式設定機能」を参照してください。その他の書式設定機能とレポート機能については、この項の最後に説明します。

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

BI Publisherは、文書処理アプリケーションで適用する書式設定をXSL-FOに変換します。マークアップを追加して、レイアウトとXMLファイル間のマッピングを作成し、書式で直接表現できない機能を挿入します。

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

BI Publisherは、マークアップをテンプレートに追加するためのタグを提供します。

注意: BI Publisherのタグと同等のXSLについては、「XSLの同等要素」を参照してください。

プレースホルダの作成

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

プレースホルダは、次の構文を使用して文書に入力します。

<?XML element tag name?>

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

文書にプレースホルダを挿入するには、次の2つの方式があります。

  1. 基本RTF方式: プレースホルダ構文をテンプレート文書に直接挿入します。

  2. フォーム・フィールド方式: (Microsoft Wordが必要)プレースホルダ構文をMicrosoft Wordの「Text Form Field Options」ウィンドウに挿入します。この方式を使用すると、テンプレートの外観を維持できます。

基本RTF方式

XMLデータ値を表示する文書にプレースホルダ構文を入力します。

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

<?XML element tag name?>

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

<?VENDOR_NAME?>

次の図に、テンプレートへの入力を示します。

テキストで説明されている画像

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

Microsoft Wordの「Text Form Field Options」ウィンドウを使用してプレースホルダ・タグを挿入します。

  1. Microsoft Wordアプリケーションで、「Forms」ツールバーを使用可能にします。

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

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

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

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

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

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

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

    <?XML element tag name?>

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

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

    <?VENDOR_NAME?>

    次の図に、「Text Form Field Options」ダイアログ・ボックス、および「Supplier」フィールドに適切な入力がある「Form Field Help Text」ダイアログ・ボックスを示します。

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

    テキストで説明されている画像

  8. 「OK」を選択して適用します。

    テンプレートのフォーム・フィールドに「Default text」の入力内容が表示されます。

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

    テキストで説明されている画像

この例のまとめ

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

テンプレート・フィールド名 デフォルト・テキスト入力(フォーム・フィールド方式) プレースホルダ入力(XMLタグ名)
Invoice Num 1234566 <?INVOICE_NUM?>
Invoice Date 1-Jan-2004 <?INVOICE_DATE?>
GL Date 1-Jan-2004 <?GL_DATE?>
Curr USD <?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?>

次の図に、フォーム・フィールドのプレースホルダ・マークアップが完了したPayables Invoice Registerを示します。

完了した基本RTFマークアップについては、「基本RTFマークアップが完了したPayables Invoice Register」を参照してください。

テキストで説明されている画像

グループの定義

グループを定義することによって、表示対象のフィールドが含まれる要素の出現を毎回BI Publisherに通知します。実行時に、BI Publisherは要素をループするたびにこのフィールドを表示します。

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

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

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

<?for-each:XML group element tag name?>

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

<?end for-each?>

グループ化のシナリオ

グループ要素は、XML入力ファイルの繰返し要素の親であることが必要です。

基本RTF方式

タグを文書に入力して、繰返し要素グループの開始と終了を定義します。

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

<?for-each:G_VENDOR_NAME?>

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

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

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

テキストで説明されている画像

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

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

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

    <?for-each:group element tag name?>

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

    <?for-each:G_VENDOR_NAME?>

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

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

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

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

テキストで説明されている画像

この例のまとめ

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

注意: 請求書ごとに繰り返されるのは、表全体ではなく表の行のみです。表の行の前後にグループ・タグを配置すると、その行のみが繰り返されます。タグを表の前後に配置すると、新規の請求書ごとにヘッダーを含む表全体が繰り返されます。

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

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

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

テキストで説明されている画像

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

システム固有のサポート

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

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

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

複数のヘッダーとフッターまたは複雑なヘッダーとフッター

テンプレートで複数のヘッダーとフッターが必要な場合は、BI Publisherのタグを使用してヘッダーとフッターを作成し、レポートの本体部分を定義します。この方法は、フォーム・フィールドに配置する複雑なオブジェクトがヘッダーとフッターに含まれている場合にも使用できます。本体部分を定義すると、その本体部分の先頭より前にある要素によってヘッダーが構成され、本体部分の後にある要素によってフッターが構成されます。

レポートの本体部分は、次のタグを使用して囲みます。

<?start:body?>

<?end body?>

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

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

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

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

次の図に、start body/end bodyタグを挿入したPayables Invoice Registerを示します。

テキストで説明されている画像

「Different First Page」および「Different Odd and Even Page」のサポート

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

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

  2. 「Page Setup」ダイアログで「Layout」タブを選択します。

  3. ダイアログの「Headers and footers」リージョンで、該当するチェック・ボックスを選択します。

    Different odd and even

    Different first page

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

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

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

イメージ

BI Publisherでは、発行文書にイメージを挿入するための複数の方法をサポートしています。

直接挿入

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

URL参照

URL参照

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

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

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

    たとえば、url:{'http://www.oracle.com/images/ora_log.gif'}と入力します。

XMLファイルからの要素の参照

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

  2. Microsoft Wordの「Format Picture」ダイアログ・ボックスで「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)}

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%">
...

チャートのサポート

BI Publisherでは、Oracle Business Intelligence Beans(BI Beans)のグラフ機能を利用しているため、実行時にデータを移入するチャートとグラフをRTFテンプレートに定義できます。BI Publisherは、BI BeansのグラフDTDから入手できるすべてのグラフ・タイプとコンポーネント属性をサポートしています。

BI BeansのグラフDTDの詳細は、Oracle Technology Network(OTN)から入手できるテクニカル・ノート『DTD for Customizing Graphs in Oracle Reports』に記載されています。

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

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

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

  3. 実行時に、BI Publisherは、BI Beansアプリケーションをコールしてイメージをレンダリングします。このイメージは、最終出力文書に挿入されます。

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

次の例は、会社の部門別に売上合計を表示する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>

この例では、チャートをテンプレートに挿入し、次の図に示すように垂直棒グラフとして表示する方法を示します。

テキストで説明されている画像

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

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

ダミー・イメージの挿入

最初の手順では、テンプレートのチャートを表示する位置にダミー・イメージを追加します。イメージ・サイズによって、最終文書に表示するチャート・イメージのサイズが定義されます。

重要: ダミー・イメージはイメージとして挿入し、他の種類のオブジェクトとして挿入しないでください。

次の図に、ダミー・イメージの例を示します。

テキストで説明されている画像

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

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

「Alternative Text」ボックスへのコードの追加

次の図に、「Format Picture」「Alternative text」ボックスに入力されたBI Publisherのコード例を示します。

テキストで説明されている画像

「Alternative text」の内容は、最終文書にレンダリングされるチャートを表します。このチャートの場合、テキストは次のとおりです。

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要素には、colCountとrowCountの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>

別のチャートのサンプル

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

テキストで説明されている画像

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

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>

横棒グラフのサンプル

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

テキストで説明されている画像

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

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つのデータ・セットが定義されています。

チャートの外観の変更

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

テキストで説明されている画像

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

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>

描画、図形およびクリップアートのサポート

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

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

フリーハンド描画

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

ハイパーリンク

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

重ね合せ

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

テキストで説明されている画像

3-D効果

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

Microsoft数式

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

テキストで説明されている画像

組織図

テンプレートで組織図機能を使用すると、組織図が出力にレンダリングされます。次のイメージは、組織図の例を示しています。

テキストで説明されている画像

WordArt

Microsoft WordのWordArt機能をテンプレートで使用できます。次の図に、WordArtの例を示します。

テキストで説明されている画像

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

データ制御式図形サポート

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

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

コマンドの配置

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

テキストで説明されている画像

図形の複製

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ピクセル下になります。

図形へのテキストの追加

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

<?shape-text:SHAPETEXT?>

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

パスに沿ったテキストの追加

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

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

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

図形の移動

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

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

図形の回転

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

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

各項目は次のとおりです。

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

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

テキストで説明されている画像

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

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

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

図形の傾斜

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

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

各項目は次のとおりです。

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

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

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

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

図形のサイズの変更

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

<?shape-size:RATIO?>

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

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

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

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

コマンドの結合

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

次の例では、図形を複製し、ページの下方向に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?>

このコマンドにより、次の図に示す出力が生成されます。

テキストで説明されている画像

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要素がある点に注意してください。このデータ要素および図形操作コマンドを使用して、読者が一目で評価を比較できるように評価の図による表示を作成できます。

次の図に、この処理を行うためのテンプレートを示します。

テキストで説明されている画像

次の表に、フィールドの値を示します。

フィールド フォーム・フィールド入力
F <?for-each:CD?>
TITLE <?TITLE?>
ARTIST <?ARTIST?>
E <?end for-each?>
(星型) 「Web」タブ入力:
<?for-each@shape:xdoxslt:foreach_number($_XDOCTX,0,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つの星が生成されます)。次の図に、このテンプレートおよびXMLサンプルからの出力を示します。

テキストで説明されている画像

グループ化した図形の例

この例では、図形を結合してグループにし、受信データに対して個別およびグループの両方で対応するよう設定する方法を示しています。次の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つの構成要素からなる複合図形を示します。

テキストで説明されている画像

この図形は、赤、黄および青の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*100、すなわち0となり、オブジェクトの最初のレンダリングがテンプレートで定義された位置に配置されます。後続の出現箇所は、X軸方向(右方向)に100ピクセル分オフセットした位置でレンダリングされます。

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

テキストで説明されている画像

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

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

Microsoft Word 2002/3ユーザー: これらのバージョンのWordには、「Tools」->「Options」->「General」タブの下に「Automatically generate drawing canvas when inserting autoshapes」オプションがあります。このオプションを使用すると、地図と図形を最終的にグループ化する必要がありません。これで、次の図に示すように、視覚的に訴えかける出力をレポート用に生成できます。

テキストで説明されている画像

サポート対象のシステム固有の書式設定機能

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

一般的な機能

配置

テキスト、グラフィック、オブジェクトおよび表は、ワード・プロセッサの配置機能を使用して配置します。

注意: 双方向の言語は、文書処理アプリケーションの右/左揃え機能によって自動的に処理されます。

次の表機能がサポートされています。

次の図に、切捨ての例を示します。

テキストで説明されている画像

日付フィールド

日付は、使用している文書処理アプリケーションの日付機能を使用して挿入します。この日付は発行日に対応しており、要求実行日ではないことに注意してください。

段組みページのサポート

BI Publisherでは、複数の段があるページで出力を発行できるように、Microsoft Wordの段組み機能をサポートしています。

「Format」->「Columns」を選択して「Columns」ダイアログ・ボックスを表示し、テンプレートの段数を定義します。次の図に、「Columns」ダイアログを示します。

テキストで説明されている画像

段組みページの例: ラベル

2段形式で所在地ラベルを生成する手順は、次のとおりです。

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

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

テキストで説明されている画像

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

このテンプレートによって、次の複数の段がある出力が作成されます。

テキストで説明されている画像

背景および透かしのサポート

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

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

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

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

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

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

「Format」->「Background」->「Printed Watermark」ダイアログを使用して、次のいずれかを選択します。

テキストで説明されている画像

テンプレート機能

改ページ

特定要素の出現後に改ページを作成するには、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>
…

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

テキストで説明されている画像

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

初期ページ番号

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

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

<?initial-page-number:pagenumber?>

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

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

次に、初期ページ番号を保持する要素がXMLデータに含まれている場合の例を示します。

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

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

<?initial-page-number:PAGESTART?>

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

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

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

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

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

注意: 最初に、テンプレートでパラメータを宣言する必要があります。「テンプレートでのパラメータの定義」を参照してください。

最終ページのみのコンテンツ

BI Publisherでは、先頭ページ、奇数ページおよび偶数ページに対して異なるページ・レイアウトを指定するMicrosoft Wordの機能をサポートしています。これらのオプションを実現するには、単に「File」メニューから「Page Setup」を選択して、「Layout」タブを選択します。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セクションが表示されます。次の図に、このレポートのテンプレートを示します。

テンプレート・ページ1

テキストで説明されている画像

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

最終ページのみのレイアウト

テキストで説明されている画像

この例では、次のように設定されています。

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

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

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

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

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

偶数または奇数ページでの終了

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

あるいは、製本要件を指定し、特定のレイアウトを使用しないで偶数ページでレポートを終了できます。

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

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

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

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

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

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

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

または

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

ハイパーリンク

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

内部リンクの挿入

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

  1. カーソルを文書内の希望する宛先に置きます。

  2. 「Insert」->「Bookmark...」を選択します。

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

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

  5. マウスの右メニューを使用して「Hyperlink」を選択するか、「Insert」メニューから「Hyperlink」を選択します。

  6. 「Insert Hyperlink」ダイアログで、「Bookmark」を選択します。

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

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

目次

BI Publisherでは、RTF仕様の目次生成機能をサポートしています。目次を挿入するには、使用している文書処理アプリケーションの手順に従ってください。

BI Publisherでは、XMLデータから、文書内に動的なセクション・ヘッダーを作成することもできます。作成したセクション・ヘッダーは目次に組み込むことができます。

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

  1. ヘッダーのプレースホルダを文書の本体に入力し、文書処理アプリケーションのスタイル機能を使用して、そのプレースホルダをヘッダーとして書式設定します。この機能ではフォーム・フィールドを使用できません。

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

  2. 目次は、文書処理アプリケーションの目次機能を使用して作成します。

実行時に、目次のプレースホルダとヘッダー・テキストが置換されます。

PDF出力でのしおりの生成

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

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

チェック・ボックス

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

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

  1. テンプレート内で、チェック・ボックスを表示する位置にカーソルを置き、「Forms」ツールバーから「Check Box Form Field」(次の図を参照)を選択します。

    テキストで説明されている画像

  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?>

    次の図に、この入力を示します。

    テキストで説明されている画像

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

    チェック・ボックスを使用したサンプル・テンプレートについては、次の項を参照してください。

ドロップダウン・リスト

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. テンプレート内で、ドロップダウン・リストを表示する位置にカーソルを置き、「Forms」ツールバーから「Drop-Down Form Field」(次の図を参照)を選択します。

    テキストで説明されている画像

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

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

    索引
    1 Asia
    2 North America
    3 South America
    4 Europe
    5 Africa
    6 Australia
  4. 「Help」テキスト・ボックスを使用して、ドロップダウン・フィールド値の索引を保持するXML要素名を入力します。

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

    <?continentIndex?>

    次の図に、この例での「Drop-Down Form Field Options」ダイアログを示します。

    テキストで説明されている画像

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

テキストで説明されている画像

次の図に、このレポートを作成するためのテンプレートを示します。

テキストで説明されている画像

各フィールドの値は次のとおりです。

フィールド フォーム・フィールド入力 説明
FE <?for-each:country?> country繰返しグループを開始します。
China <?name?> name要素のプレースホルダ。
1,000,000 <?population?> population要素のプレースホルダ。
(チェック・ボックス) <?population>1000000?> チェック・ボックスの条件を設定します。population要素の値が1,000,000を超えると、チェック・ボックスが選択されて表示されます。
Asia <?contintentIndex?> continentIndex要素のドロップダウン・フォーム・フィールド。内容については前述の説明を参照してください。実行時に、XML要素の値は、ドロップダウン・フォーム・フィールドで相互参照される値に置換されます。
EFE <?end for-each?> countryグループを終了します。

条件付き書式設定

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

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

if文

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

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

    <?if:condition?>

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

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

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

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

テキストで説明されている画像

ボイラープレート・テキストでのif文

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

The program was (not) successful.

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

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

注意: コンテキスト・コマンドの詳細は、「コンテキスト・コマンドの使用」を参照してください。

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

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」の場合の結果です。

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?>

choose文

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

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

<?choose:?>

<?when:expression?>

<?otherwise?>

Choose条件付き書式設定の例

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

次の図には、フォーム・フィールドのデフォルト・テキストが表示されています。この後の表に、フォーム・フィールドのヘルプ・テキスト入力を示します。

テキストで説明されている画像

この例のフォーム・フィールドのデフォルト・テキスト入力 フォーム・フィールドのヘルプ・テキスト入力
<Grp:VAT <?for-each:VAT?>
<Choose <?choose?>
<When EXEMPT_FLAG='^' <?When EXEMPT_FLAG='^'?>
End When> <?end When?>
<When EXEMPT_FLAG='^' <?When EXEMPT_FLAG='^'?>
End When> <?end When?>

列の書式設定

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

この例では、次の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リストではなく、パブリック・リストであることを意味します。パブリック・バージョンのリストの場合、出力に数量列は表示しませんが、ここでは、リスト・タイプに基づいて両方のバージョン用に1つのテンプレートを開発します。

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

テキストで説明されている画像

次の表に、この例のテンプレートへの入力を示します。

デフォルト・テキスト フォーム・フィールド入力 説明
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の使用については、「XPathの概要」を参照してください。
Quantity N/A ボイラープレート・ヘッダー。
end-if <?end if?> if文を終了します。
20 <?if@column: /items/@type="PRIVATE"?><?quantity?><?end if?> quantity要素のプレースホルダで、if文に囲まれています。
1,000.00 <?price?> price要素のプレースホルダ。
end grp <?end for-each?> for-eachループの終了タグ。

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

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

注意: @column句は、コンテキスト・コマンドの例の1つです。詳細は、「コンテキスト・コマンドの使用」を参照してください。

例では、次の図に示す出力がレンダリングされます。

テキストで説明されている画像

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

テキストで説明されている画像

行の書式設定

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

条件に基づく行の表示

特定の条件を満たした行のみを表示するには、グループのfor-eachタグ内で、行の最初と最後に<?if:condition?> <?end if?>タグを挿入します。次の図に、サンプル・テンプレートを示します。

テキストで説明されている画像

このサンプル図のフィールドは、次のとおりです。

デフォルト・テキスト入力 フォーム・フィールドのヘルプ・テキスト 説明
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行おきに背景色を設定する方法を示します。次の図に、この効果を作成するテンプレートを示します。

テキストで説明されている画像

次の表に、このテンプレートのフォーム・フィールドの値を示します。

デフォルト・テキスト入力 フォーム・フィールドのヘルプ・テキスト 説明
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ループを終了します。

前述の例のformat;フィールドに注目してください。このフィールドには、行のコンテキスト(@row)を設定したif文が含まれています。これによって、現在行に適用するif文のコンテキストが設定されます。条件がtrueの場合、行の背景色の<xsl:attribute>はlight gray(明るい灰色)に設定されます。この結果、次のように出力されます。

テキストで説明されている画像

注意: コンテキスト・コマンドの詳細は、「コンテキスト・コマンドの使用」を参照してください。

セルの強調表示

次の例では、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を超えたセルは赤で強調表示する必要があります。次の図に、この場合のテンプレートを示します。

テキストで説明されている画像

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

デフォルト・テキスト入力 フォーム・フィールド入力 説明
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要素のプレースホルダ。
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など)を使用できます。

次の図に、このテンプレートからの出力を示します。

テキストで説明されている画像

ページ・レベルの計算

ページ合計の表示

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

注意: ページ合計計算はPDF書式設定層で実行されます。したがって、HTML、RTFおよびExcelの出力タイプではこの機能を使用できません。

注意: このページ合計計算機能は、ソースXMLにRaw数値がある場合のみ有効です。数値は事前に書式設定できません。

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

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

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

各項目は次のとおりです。

TotalFieldNameは、合計に割り当てる名称(後で参照するため)です。

'element'は、合計するXML要素フィールドです。

この構文は、必要な数の合計計算の対象フィールドに追加できます。

合計フィールドを表示する場合は、次の構文を入力します。

<?show-page-total:TotalFieldName;'Oracle-number-format'?>

各項目は次のとおりです。

TotalFieldNameは、前述のページ合計フィールドを指定する際に割り当てた名称です。

Oracle数値書式は、Oracle書式マスクを使用して表示する際に使用する書式です(例: 9G999D00)。Oracle書式マスクの記号のリストは、「Oracle書式マスクの使用」を参照してください。

次の例では、テンプレートにページ合計フィールドを設定し、ページに表示されている貸方と借方の合計を表示して、この2つのフィールドの差引額を計算する方法を示します。

この例では、次のXMLを使用します。

<balance_sheet>
 <transaction>
  <debit>100</debit>
  <credit>90</credit>
 </transaction>
 <transaction>
  <debit>110</debit>
  <credit>80</credit>
 </transaction>
…
<\balance_sheet>

次の図に、値を保持するためにテンプレートに挿入する表を示します。

テキストで説明されている画像

この表の例について、テンプレートのフォーム・フィールドへの入力を次の表に示します。

デフォルト・テキスト入力 フォーム・フィールドのヘルプ・テキスト入力 説明
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)'?>

最後に、テンプレート・ページの最下部またはフッターに、次のフィールドを配置します。

ページ合計借方: <?show-page-total:dt;'C9G990D00';'(C9G990D00)'?>

ページ合計貸方: <?show-page-total:ct;'C9G990D00';'(C9G990D00)'?>

ページ合計残高: <?show-page-total:net;'C9G990D00';'(C9G990D00)'?>

次の図に、このレポートの出力を示します。

テキストで説明されている画像

前からの繰越合計/次への繰越合計

多くのレポートでは、レポート出力全体にわたるページ合計を保持し、各ページの最初と最後に表示する必要があります。これらの合計は、前からの繰越/次への繰越の合計と呼ばれます。

注意: 前からの繰越と次への繰越フィールドの合計計算はPDF書式設定層で実行されます。したがって、HTML、RTFおよびExcelの出力タイプではこの機能を使用できません。

次の図に、この例を示します。

テキストで説明されている画像

最初のページの最後に、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>

次のサンプル・テンプレートでは、請求書表を作成し、ページ合計を保持するプレースホルダを宣言します。

テキストで説明されている画像

テンプレートの各フィールドの値は次のとおりです。

フィールド フォーム・フィールドのヘルプ・テキスト入力 説明
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"/>
</xdofo:inline-total>

次の表に、前からの繰越の構文を構成する要素を説明します。

コード要素 説明と使用方法
inline-total この要素には、次の2つのプロパティがあります。
  • name: フィールドに対して宣言する変数の名称。

  • display-condition: 表示条件を設定します。これはオプションのプロパティで、次のいずれかの値を設定します。

    • first: 内容が最初のページにのみ表示されます。

    • last: 内容が最後のページにのみ表示されます。

    • exceptfirst: 内容が最初のページを除く全ページに表示されます。

    • exceptlast: 内容が最後のページを除く全ページに表示されます。

    • everytime: (デフォルト)内容が全ページに表示されます。

    この例では、display-conditionがexceptfirstに設定されているため、値が0(ゼロ)の最初のページには値が表示されません。

Brought Forward: この文字列はオプションで、レポートのフィールド名として表示されます。
show-brought-forward ページに値を表示します。次の2つのプロパティがあります。
  • name: 表示するフィールドの名称。この例では「InvAmt」です。このプロパティは必須です。

  • format: 実行時に値を表示するOracle数値書式。このプロパティはオプションですが、書式マスクを指定する場合は、Oracle書式マスクを使用する必要があります。詳細は、「Oracle書式マスクの使用」を参照してください。

前からの繰越合計を表示するテンプレートの先頭に、前からの繰越オブジェクトを挿入します。このオブジェクトをテンプレート本体に配置すると、構文をフォーム・フィールドに挿入できます。

前からの繰越合計をヘッダーに表示する場合、Microsoft Wordではヘッダーまたはフッター・リージョンでのフォーム・フィールドの使用をサポートしていないため、コード文字列全体をヘッダーに挿入する必要があります。ただし、start body/end body構文を使用すると、レポートの本体部分を定義できます。BI Publisherでは、定義した本体部分より前の内容はヘッダーとして、本体部分より後の内容はフッターとして認識されます。この場合は、フォーム・フィールドを使用できます。詳細は、「複数のヘッダーとフッターまたは複雑なヘッダーとフッター」を参照してください。

合計を表示するテンプレートの最下部に、次への繰越オブジェクトを配置します。この例の次への繰越オブジェクトは次のとおりです。

<xdofo:inline-total
  display-condition="exceptlast"
  name="InvAmt">
   Carried Forward:
<xdofo:show-carry-forward
  name="InvAmt"
  format="99G999G999D00"/>
</xdofo:inline-total>

前からの繰越オブジェクトと次の点が異なることに注意してください。

テンプレートでは値の数に制限はありません。前からの繰越/次への繰越オブジェクトをテンプレートに複数作成して、データ内の様々な数値要素を指し示すことができます。

総合計

変数機能(「変数の使用」を参照)を使用して、請求書一覧レポートに総合計を追加できます。この例では、次の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>

このXMLを使用して、次の図に示すような総合計を含むレポートを作成します。

テキストで説明されている画像

「Running Total」フィールドを作成するには、合計を追跡するための変数を定義し、その変数を0(ゼロ)に初期化します。次の図に、このテンプレートを示します。

テキストで説明されている画像

次の表に、テンプレート内のフォーム・フィールドの値を示します。

フォーム・フィールド 構文 説明
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グループを終了します。

データ処理

ソート

グループは、そのグループ内の任意の要素順にソートできます。次の構文をグループ・タグ内に挿入します。

<?sort:element name?>

たとえば、この章の冒頭で示したPayables Invoice Registerを仕入先(VENDOR_NAME)順にソートするには、<?for-each:G_VENDOR_NAME?>タグの後に次のように入力します。

<?sort:VENDOR_NAME?>

複数のフィールドによってグループをソートするには、第1ソート・フィールドの後にソート構文を入力します。仕入先順の後に請求書番号順にソートするには、次のように入力します。

<?sort:VENDOR_NAME?> <?sort:INVOICE_NUM?>

nullのチェック

XMLデータ内の要素の値には、3つの可能なシナリオが考えられます。

レポート・レイアウトでは、要素とその値の有無に応じて異なる動作を指定することが必要な場合があります。次の例では、if文を使用してこれらの条件のそれぞれについてチェックする方法を示します。構文は、別の条件付き書式設定構造でも使用できます。

XMLデータの再グループ化

RTFテンプレートでは、XSL 2.0のfor-each-group標準をサポートしているため、元のデータに存在しないXMLデータを階層に再グループ化できます。この機能を使用すると、テンプレートではソースXMLファイルの階層に従う必要がありません。このため、データソースの構造による制限がなくなります。

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データを国別にグループ化し、さらに年度別にグループ化するレポートを作成できます。これにより、現在のデータ構造による制限を受けません。

再グループ化構文

データを再グループ化するには、次の構文を使用します。

<?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>

テンプレートの例

次の図に、CDをCountry別、Year別の順に表示して、各CDの詳細をリストするテンプレートを示します。

テキストで説明されている画像

次の表に、このテンプレートのフォーム・フィールドに入力された、BI Publisherの構文を示します。

デフォルト・テキスト入力 フォーム・フィールドのヘルプ・テキスト入力 説明
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ファイルとマージしたときに次の出力が作成されます。

テキストで説明されている画像

式による再グループ化

式による再グループ化を使用すると、関数またはコマンドをデータ要素に適用し、戻された結果別にデータをグループ化できます。

この機能を使用するには、次のように、再グループ化構文内に式を記述する必要があります。

<?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>         

このデータを次の書式で表示します。この書式では、気温の範囲、および平均気温がその範囲内にある月の数を表示します。

テキストで説明されている画像

for-each-groupコマンドを使用すると、気温を10度ごとに増分してグループ化する式を<degree>要素に適用できます。これで、各グループのメンバーの件数、つまり、平均気温が各範囲内にある月の数を表示できます。

次の図に、このレポートを作成するためのテンプレートを示します。

テキストで説明されている画像

次の表に、テンプレートのフォーム・フィールドへの入力を示します。

デフォルト・テキスト入力 フォーム・フィールドのヘルプ・テキスト入力
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?>

フォーム・フィールド・タグについて次の点に注目してください。

変数の使用

更新可能な変数は、標準的な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つの変換のみを割り当てる必要があります。

更新可能な変数の使用例については、「総合計」を参照してください。

パラメータの定義

テンプレートには、パラメータの値を実行時に渡すことができます。この値は、多くの機能をサポートするために、テンプレート全体で参照できます。たとえば、テンプレートでデータをフィルタ処理したり、条件付き書式設定ブロックで値を使用できます。また、セキュリティ設定などのプロパティ値を最終文書に渡すこともできます。

注意: BI Publisher Enterpriseユーザーの場合は、パラメータの名前と値のすべてのペアがテンプレートに渡されます。次に説明する構文を使用して、利用するパラメータをテンプレートに登録する必要があります。

テンプレートでのパラメータの使用

  1. パラメータをテンプレートで宣言します。

    次の構文を使用して、パラメータを宣言します。

    <?param@begin:parameter_name;parameter_value?>

    各項目は次のとおりです。

    parameter_nameは、パラメータの名称です。

    parameter_valueは、パラメータのデフォルト値です(parameter_valueはオプションです)。

    param@begino:は、実行時にテンプレートの先頭にパラメータ宣言をプッシュするために必要な文字列です。これによって、テンプレートでパラメータをグローバルに参照できます。

    この構文は、フォーム・フィールドの「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>

次の図に、パラメータ値を受け取り、そのパラメータ値に基づいて最終文書に表示する請求書を制限するテンプレートを示します。

テキストで説明されている画像

フィールド フォーム・フィールドのヘルプ・テキスト入力 説明
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が渡された場合、出力は次の図のようになります。

テキストで説明されている画像

2番目の請求書は、AMOUNTがパラメータ値より小さいため、表示されないことに注目してください。

プロパティの設定

BI Publisherの構成ファイルで使用可能なBI Publisherプロパティは、RTFテンプレートに埋め込むこともできます。テンプレートに設定されたプロパティは、実行時にBI Publisherエンジンによって解決されます。値は、テンプレートにハードコードするか、または受信したXMLデータに埋め込むことができます。プロパティをテンプレートに埋め込む場合、構成ファイルの使用は不要になります。

注意: BI Publisher構成ファイルおよび使用可能なプロパティの詳細は、「BI Publisher構成ファイル」を参照してください。

たとえば、構成ファイルにフォントの位置を指定しないで、非標準フォントをテンプレートで使用する場合は、テンプレート内にフォント・プロパティを埋め込むことができます。生成されたPDF出力を保護する必要がある場合は、BI PublisherのPDFセキュリティ・プロパティを使用して、受信したXMLデータからパスワード値を取得できます。

BI Publisherプロパティをテンプレートに追加するには、Microsoft Wordの「Properties」ダイアログ(「File」メニューから使用可能)を使用して、次の情報を入力します。

Name: BI Publisherプロパティ名を先頭にxdo-を付けて入力します。

Type: 「Text」を選択します。

Value: プロパティ値を入力します。受信したXMLデータから要素を参照するには、XML要素へのパスを中カッコで囲んで入力します。たとえば、{/root/password}のように入力します。

次の図に、「Properties」ダイアログを示します。

テキストで説明されている画像

フォント参照の埋込み

次の例では、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ディレクトリでフォントを検索します。テンプレートが複数の場所に配置されている場合は、各場所に対してパスが有効であることを確認してください。

フォント・プロパティの設定の詳細は、「フォント定義」を参照してください。

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データにパスワードを格納するのはお薦めできません。潜在的なセキュリティ・リスクを回避するには、実行時に生成してテンプレートに渡したテンプレート・パラメータ値を使用できます。

たとえば、次のパラメータを設定できます。

次に、「Properties」ダイアログで次のように入力します。

Name: xdo-pdf-security

Type: 「Text」

Value: {$PDFSec}

Name: xdo-pdf-open-password

Type: 「Text」

Value: {$PDFPWD}

テンプレート・パラメータの詳細は、「テンプレートでのパラメータの定義」を参照してください。

拡張レポート・レイアウト

バッチ・レポート

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?>タグは変更ありません。

次の図に、サンプル・テンプレートを示します。ヘッダーはコマンドによってリセットされますが、G_INVOICEグループのfor-each宣言はレポート本体内にあることに注意してください。

テキストで説明されている画像

次の表に、この例のフォーム・フィールドの値を示します。

デフォルト・テキスト入力 フォーム・フィールドのヘルプ・テキスト 説明
for-each G_INVOICE <?for-each@section:G_INVOICE?> G_INVOICEグループを開始し、要素をセクションとして定義します。G_INVOICEが出現するたびに、新規セクションを開始します。
<?TRX_NUMBER?> N/A Microsoft Wordでは、ヘッダーでのフォーム・フィールドの使用はサポートしていないため、TRX_NUMBER要素のプレースホルダ構文はテンプレートに直接配置します。
end G_INVOICE <?end for-each?> G_INVOICEグループを終了します。

これで、G_INVOICE要素が新たに出現するたびに、新規セクションが開始します。ページ番号が再び開始され、ヘッダーまたはフッターの情報がデータから抽出されると、同様にリセットされます。

クロス集計のサポート

クロス集計レポートの列は、データに依存します。設計時には、レポートされる列の数や適切な列ヘッダーは不明です。さらに、列が次のページに分割される場合は、後続のページで繰り返す行ラベル列の定義が必要になります。次の例では、これらの機能をサポートする単純なクロス集計レポートの設計方法を説明します。

この例では、次の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から、次の図に示すようなレポートを生成します。このレポートには、業種別に各年度の売上合計が表示されます。

テキストで説明されている画像

次の図に、このレポートを生成するテンプレートを示します。後続の表には、フォーム・フィールド入力を示します。

テキストで説明されている画像

テンプレートの各フォーム・フィールドの値は次のとおりです。

デフォルト・テキスト入力 フォーム・フィールドのヘルプ・テキスト 説明
header column <?horizontal-break-table:1?> 最初の列を、表の途中で改ページした場合に繰返し表示するヘッダーとして定義します。この構文の詳細は、「改ページ時に繰り返す列の定義」を参照してください。
for: <?for-each-group@column:RESULTS;YEAR?> 再グループ化構文(「XMLデータの再グループ化」を参照)を使用してデータをYEAR別にグループ化し、@columnコンテキスト・コマンドを使用して各グループ(YEAR)の表列を作成します。コンテキスト・コマンドの詳細は、「コンテキスト・コマンドの使用」を参照してください。
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?> 再グループ化構文(「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コンテキストを使用して列の表セルを作成する必要があります(コンテキスト・コマンドの詳細は、「コンテキスト・コマンドの使用」を参照)。

動的データ列

動的データ列の作成機能は、RTFテンプレートの強力な機能の1つです。この機能を使用すると、データによって必要な列の数が変化する場合に、表を正しくレンダリングするテンプレートを設計できます。

たとえば、特定範囲内のテスト・スコアの列を表示するテンプレートを設計するとします。ただし、レポート対象のデータを表示する範囲の数は不明です。この場合は、動的データ列を定義すると、実行時に適切な数の列に分割できます。

次のタグを使用して、データの正しいレンダリングに必要な動的書式設定を設定します。

改ページ時に繰り返す列の定義

表の列が拡張して複数のページにまたがる場合、毎ページごとに繰り返す行見出し列の個数を定義できます。次の構文を使用して、繰り返す列数を指定します。

<?horizontal-break-table:number?>

ここで、numberは繰り返す列の数(左から始めます)です。

この機能はPDF出力に対してのみサポートされます。

動的データ列の例

学校のテストについて、スコア範囲を表示するためのテンプレートが必要であるとします。論理的には、次の表に示すようにレポートを配置します。

テスト・スコア テスト・スコア範囲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> 

フォーム・フィールドで動的列タグを使用して、次の図に示すような2列の表を設定します。最初の列「Test Score」は静的な列です。2番目の列「Column Header and Splitting」は動的な列です。実行時に、この列はデータに応じて分割され、列ごとにヘッダーが適切に移入されます。次の表に、各フィールドのデフォルト・テキスト入力およびフォーム・フィールドのヘルプ・テキスト入力を示します(フォーム・フィールドの使用方法の詳細は、「フォーム・フィールド方式」を参照)。

テキストで説明されている画像

デフォルト・テキスト入力 フォーム・フィールドのヘルプ・テキスト入力
Group:TestScores <?for-each:TestScores?>
Test Category <?TestCategory?>
Column Header and Splitting <?split-column-header:TestScore?> <?split-column-width:@width?> <?TestScoreRange?>%
Content and Splitting <?split-column-data:TestScore?> <?NumofStudents?>
end:TestScores <?end for-each?>

テンプレートでは、次の図に示す出力がレンダリングされます。

テキストで説明されている画像

数値と書式設定

数値の書式設定

BI Publisherでは、数値の書式を指定するために、次の2つの方法をサポートしています。

注意: XSL固有のformat-number関数を使用して、数値を書式設定することもできます。「XSL固有の数値書式設定」を参照してください。

前述の方法のいずれかを使用してください。両方の方法を使用して数値書式マスクを指定すると、データが2回書式設定されるため、予期しない動作が発生します。

グループ・セパレータと数値セパレータは、テンプレート・ロケールに基づいて実行時に設定されます。これは、Oracle書式マスクとMS書式マスクの両方に適用されます。

データソース要件

Oracle書式マスクまたはMicrosoft書式マスクを使用するには、データソースの数値がRaw形式であること、つまり、書式設定が適用されていない(例: 1000.00)ことが必要です。数値が書式設定されている場合(たとえば、欧州形式に1.000,00と書式設定されている場合)、その書式は機能しません。

注意: BI Publisherパーサーでは、Java BigDecimal文字列表現が必要です。この表現は、オプション記号(-)、0(ゼロ)以上の10進数列(整数)、小数(オプション)および指数(オプション)で構成されます。たとえば、-123456.3455e-3のように設定します。

翻訳に関する考慮事項

翻訳可能なテンプレートを設計する場合、すべての翻訳で同じ通貨を使用したデータをレポートする場合を除いて、Microsoft書式マスクで設定した通貨を使用することはお薦めできません。MS書式マスクを使用して通貨をテンプレートに設定すると、実行時に通貨が更新されません。

かわりに、Oracle書式マスクを使用してください。たとえば、L999G999G999D99と設定すると、実行時にロケールに基づいて「L」が通貨記号に置換されます。

「%」記号は、数値表示でパーセント記号の位置を固定するため、書式マスクに含めないでください。この記号は、ロケールに基づいて、数値の先頭または後に配置できます。

Microsoft数値書式マスクの使用

数値を書式設定するには、Microsoft Wordのフィールド書式設定機能を使用します。この機能は、「Text Form Field Options」ダイアログ・ボックスで設定できます。次の図に例を示します。

テキストで説明されている画像

数値書式をフォーム・フィールドに適用する手順は、次のとおりです。

  1. プレースホルダ・フィールドに対して「Form Field Options」ダイアログ・ボックスを開きます。

  2. 「Type」を「Number」に設定します。

  3. 「Number format」のオプション・リストから適切な数値書式を選択します。

サポートされているMicrosoft書式マスク定義

次の表に、サポートされているMicrosoft書式マスク定義を示します。

記号 位置 意味
0 数値 数字。他に数字が存在しない場合には、明示的に0(ゼロ)が表示されます。
例:
書式マスク: 00.0000
データ: 1.234
表示: 01.2340
# 数値 数字。#に設定すると、受信したデータのみが表示されます。
例:
書式マスク: ##.####
データ: 1.234
表示: 1.234
. 数値 小数セパレータの位置を決定します。使用する小数セパレータ記号は、実行時にテンプレート・ロケールに基づいて決まります。
例:
書式マスク: #,##0.00
データ: 1234.56
表示(英国ロケールの場合): 1,234.56
表示(ドイツ・ロケールの場合): 1.234,56
- 数値 マイナスの数値のマイナス記号の位置を決定します。
, 数値 グループ・セパレータの位置を決定します。使用するグループ・セパレータ記号は、実行時にテンプレート・ロケールに基づいて決まります。
例:
書式マスク: #,##0.00
データ: 1234.56
表示(英国ロケールの場合): 1,234.56
表示(ドイツ・ロケールの場合): 1.234,56
E 数値 科学表記法で仮数および指数を区切ります。
例:
0.###E+0と指定すると、プラスの数値の場合にプラス記号が常に表示されます。
0.###E-0と指定すると、プラスの数値の場合にプラス記号が表示されません。
; サブパターンの境界 プラスおよびマイナスのサブパターンを区切ります。後述する「注意」を参照してください。
% プリフィクスまたはサフィックス 100を乗算してパーセントで表示します。
' プリフィクスまたはサフィックス プリフィクスまたはサフィックスに特殊文字を引用するために使用します。

注意: サブパターンの境界: パターンには、「#,##0.00;(#,##0.00)」のように、プラスおよびマイナスのサブパターンが含まれます。各サブパターンには、プリフィクス、数値部分およびサフィックスが含まれます。マイナスのサブパターンはオプションです。マイナスのサブパターンを指定しない場合、そのマイナスのサブパターンは、プラスのサブパターンの先頭にローカライズされたマイナス記号(ほとんどのロケールで「-」を使用)を付けて表します。つまり、「0.00」は「0.00;-0.00」と同じになります。明示的にマイナスのサブパターンを指定した場合、このサブパターンは単にマイナスのプリフィクスとサフィックスを指定するために使用されます。桁数、最小数字などすべての特性はプラスのパターンと同じです。つまり、「#,##0.0#;(#)」と「#,##0.0#;(#,##0.0#)」の動作は完全に同じになります。

Oracle書式マスクの使用

Oracle書式マスクをフォーム・フィールドに適用する手順は、次のとおりです。

  1. プレースホルダ・フィールドに対して「Form Field Options」ダイアログ・ボックスを開きます。

  2. 「Type」を「Regular text」に設定します。

  3. 「Form Field Help Text」フィールドに、次の例に従ってマスク定義を入力します。

    <?format-number:fieldname;'999G999D99'?>

各項目は次のとおりです。

fieldnameは、書式設定するデータ要素のXMLタグ名です。

999G999D99はマスク定義です。

次の図に、データ要素empnoに関する、「Form Field Help Text」ダイアログへの入力例を示します。

テキストで説明されている画像

次の表に、サポートされているOracle数値書式マスクの記号とその定義を示します。

記号 意味
0 数字。他に数字が存在しない場合には、明示的に0(ゼロ)が表示されます。
例:
書式マスク: 00.0000
データ: 1.234
表示: 01.2340
9 数字。指定桁数の値を戻し、正の数の場合は先頭に空白が付き、負の数の場合は先頭にマイナス記号が付きます。値がゼロの場合を除き、先頭のゼロは空白になります。値がゼロの場合、固定小数点数の整数部分についてゼロを戻します。
例:
書式マスク: 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(数値の後) プラスの値の場合は末尾に「+」を付け、マイナスの値の場合は末尾に「-」を付けて表示します。

日付の書式設定

BI Publisherでは、日付の書式を指定するために、次の3つの方法をサポートしています。

使用できる方法は1つのみです。OracleとMSの両方の書式マスクを指定すると、データが2回書式設定されるため、予期しない動作が発生します。

データソース要件

Microsoft書式マスクまたはOracle書式マスクを使用するには、XMLデータソースの日付が標準書式であることが必要です。標準書式は次のとおりです。

YYYY-MM-DDThh:mm:ss+HH:MM

各項目は次のとおりです。

次に、この書式の例を示します。

2005-01-01T09:30:10-07:00

「T」の後のデータはオプションであるため、2005-01-01という日付はどちらの書式設定オプションを使用しても書式設定できます。タイムゾーン・オフセットを指定しない場合、時刻はUTC時間で書式設定されることに注意してください。

翻訳に関する考慮事項

date_format

Microsoft日付書式マスクの使用

日付書式をフォーム・フィールドに適用する手順は、次のとおりです。

  1. プレースホルダ・フィールドに対して「Form Field Options」ダイアログ・ボックスを開きます。

  2. 「Type」を「Date」、「Current Date」または「Current Time」に設定します。

  3. 「Date format」のオプション・リストから適切な日付書式を選択します。

「Date format」フィールドでマスクを指定しないと、抽象書式マスク「MEDIUM」がデフォルトで使用されます。詳細は、「Oracle抽象書式マスク」を参照してください。

次の図に、日付書式が適用された「Text Form Field Options」ダイアログ・ボックスを示します。

テキストで説明されている画像

次の表に、サポートされているMicrosoft日付書式マスクのコンポーネントを示します。

記号 意味
d 月の日。1桁の日の場合、先頭に0(ゼロ)は付きません。
dd 月の日。1桁の日の場合は、先頭に0(ゼロ)が付きます。
ddd 曜日の略称。AbbreviatedDayNamesで定義されます。
dddd 曜日の正式名称。DayNamesで定義されます。
M 数値で表す月。1桁の月の場合、先頭に0(ゼロ)は付きません。
MM 数値で表す月。1桁の月の場合は、先頭に0(ゼロ)が付きます。
MMM 月の略称。AbbreviatedMonthNamesで定義されます。
MMMM 月の正式名称。MonthNamesで定義されます。
yy 世紀部分を除いた年。世紀部分を除いた年が10未満の場合は、先頭に0(ゼロ)を付けて表示されます。
yyyy 4桁の年。
gg 時代または年号。書式設定される日付に関連する時代または年号文字列がない場合、このパターンは無視されます。
h 12時間書式の時間。1桁の時間の場合、先頭に0(ゼロ)は付きません。
hh 12時間書式の時間。1桁の時間の場合は、先頭に0(ゼロ)が付きます。
H 24時間書式の時間。1桁の時間の場合、先頭に0(ゼロ)は付きません。
HH 24時間書式の時間。1桁の時間の場合は、先頭に0(ゼロ)が付きます。
m 分。1桁の分の場合、先頭に0(ゼロ)は付きません。
mm 分。1桁の分の場合は、先頭に0(ゼロ)が付きます。
s 秒。1桁の秒の場合、先頭に0(ゼロ)は付きません。
ss 秒。1桁の秒の場合は、先頭に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で定義されます。
' 引用符付き文字列。文字列のリテラル値の前後を‘文字で囲んで表示します。
" 引用符付き文字列。文字列のリテラル値の前後を“文字で囲んで表示します。

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'?>

次の表に、サポートされているOracle書式マスクのコンポーネントを示します。

記号 意味
-
/
,
.
;
:
"text"
記号および引用符が付いたテキストが再現されて表示されます。
AD
A.D.
ADの指標。ピリオドを伴う場合と伴わない場合があります。
AM
A.M.
午前の指標。ピリオドを伴う場合と伴わない場合があります。
BC
B.C.
BCの指標。ピリオドを伴う場合と伴わない場合があります。
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、JAN = 01)。
MON 月の略称。
MONTH 月の名称。9文字未満の場合は、9文字の長さまで空白で埋め込まれます。
PM
P.M.
午後の指標。ピリオドを伴う場合と伴わない場合があります。
RR 21世紀に、20世紀の日付を格納できます(2桁のみ)。
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は、その年の初日から7日目までです。
W 月の週(1〜5)。週1は、その月の初日から7日目までです。
X ローカル基数文字。
YYYY 4桁の年。
YY
Y
年の最後の2桁または1桁。

デフォルトの書式マスク

MS書式マスクまたはOracle書式マスクのいずれも指定しない場合は、マスク定義を省略してデフォルトの書式マスクを使用できます。デフォルトの書式マスクは、Oracleが提供するMEDIUM抽象書式マスクです(定義については、「Oracle抽象書式マスク」を参照)。

Microsoft書式マスクのデフォルト・オプションを使用するには、「Text Form Field Options」ダイアログで、「Type」を「Date」に設定し、「Date format」フィールドを空白のままにします。

Oracle書式マスクのデフォルト・オプションを使用するには、次のように、format-date関数コールにマスク定義を指定しないでください。

<?format-date:hiredate?>

Oracle抽象書式マスク

抽象日付書式マスクは、I18Nライブラリの日付/時刻書式設定のデフォルト実装を反映します。いずれかのマスクを使用すると、レポートに関連付けられているロケールに基づいて出力が生成されます。

抽象書式マスクは、次の構文を使用して指定します。

<?format-date:fieldname;'MASK'?>

ここで、fieldnameはXML要素タグです。

MASKは、Oracle抽象書式マスクの名称です。

例:

<?format-date:hiredate;'SHORT'?>
<?format-date:hiredate;'LONG_TIME_TZ'?>

次の表に、抽象書式マスク、および米国ロケールで生成されたサンプル出力を示します。

マスク 米国ロケールの出力
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

カレンダとタイムゾーンのサポート

カレンダの指定

「カレンダ」という用語は、発行レポートに表示されるカレンダ日付を指します。次のタイプがサポートされています。

次のいずれかの方法で、カレンダ・タイプを設定します。

注意: テンプレートで指定したカレンダ・タイプは、このプロファイル・オプションで設定したカレンダ・タイプより優先されます。

タイムゾーンの指定

タイムゾーン情報は、次の2つの方法で指定します。

タイムゾーンを指定しないと、UTCが使用されます。

テンプレートでタイムゾーンを指定する場合は、America/Los Angelesのように、Javaタイムゾーン文字列として指定する必要があります。次に、テンプレートのヘルプ・テキスト・フィールドに入力する構文の例を示します。

<?format-date:hiredate;'LONG_TIME_TZ';'Asia/Shanghai'?>

外部フォントの使用

BI Publisherでは、通常はサーバーで使用できないフォントを出力で使用できます。新規フォントをレポート出力に設定するには、クライアント・マシンでそのフォントを使用してテンプレートを設計します。次に、そのフォントをサーバーで使用可能にし、実行時にそのフォントにアクセスできるようにBI Publisherを構成します。

  1. フォントをテンプレートで使用します。

    1. フォントを<WINDOWS_HOME>/fontsディレクトリにコピーします。

    2. Microsoft Wordを開き、テンプレートを作成します。

    3. フォントをテンプレートに挿入します。テキストまたはフォーム・フィールドを選択し、任意のフォントをフォント・ダイアログ・ボックス(「Format」->「Font」)またはフォント・ドロップダウン・リストから選択します。

      次の図に、フォーム・フィールド・メソッドおよびテキスト・メソッドの例を示します。

      テキストで説明されている画像

  2. フォントをサーバーに配置します。

    フォントを、実行時に書式設定エンジンがアクセス可能なディレクトリに配置します。

  3. BI Publisherのfontプロパティを設定します。

    レポートのfontプロパティは、BI Publisherの「フォント・マッピング」ページか構成ファイルで設定できます。

    構成ファイルへのプロパティの設定

    BI Publisher構成ファイルのfontsセクションで、フォント名とサーバー上の位置を更新します。たとえば、TrueTypeを新規に設定するには、次のように入力します。

    <font family="MyFontName" style="normal" weight="normal">
        <truetype path="\user\fonts\MyFontName.ttf"/>
    </font>
    

    詳細は、「BI Publisher構成ファイル」を参照してください。

    テンプレートへのプロパティの設定

    「ランタイム・プロパティの設定」を参照してください。

ここで、レポートを実行すると、BI Publisherでは、出力で指定したフォントが使用されます。PDF出力の場合は、BI Publisherの拡張フォント処理機能によって、外部フォントの絵文字が最終出力に直接埋め込まれます。文書で必要な絵文字が含まれるのは埋め込まれたフォントのみで、フォント定義自体には含まれません。したがって、文書に必要な要素はすべて備わっているため、外部フォントをプリンタにインストールする必要はありません。

バーコードの拡張書式設定

BI Publisherには、バーコード・フォントを出力文書のデータに適用する前に、データに対して前処理を実行する機能があります。たとえば、データの書式を設定する前には、そのデータのチェックサム値やスタート・ビットとエンド・ビットの計算が必要な場合があります。

このソリューションには、バーコード・エンコーディング・クラスをBI Publisherに登録する必要があります。BI Publisherは、実行時にインスタンス化され、テンプレート内の書式設定を実行します。詳細は、「拡張バーコード・フォント書式設定の実装」を参照してください。

テンプレートで書式設定機能を有効にするには、テンプレート内で2つのコマンドを使用する必要があります。1つ目は、バーコード・エンコーディング・クラスをBI Publisherに登録するコマンドです。この登録は、エンコーディング・コマンドより前にテンプレートで宣言する必要があります。2つ目は、書式を設定するデータを識別するためのエンコーディング・コマンドです。

バーコード・エンコーディング・クラスの登録

次の構文をテンプレートのフォーム・フィールドで使用して、バーコード・エンコーディング・クラスを登録します。

<?register-barcode-vendor:java_class_name;barcode_vendor_id?>

このコマンドには、Javaクラス名(エンコーディングを実行する)と、クラス別に定義されたバーコード・ベンダーIDが必要です。このコマンドは、テンプレート内でデータをエンコーディングするコマンドの前に配置する必要があります。次に例を示します。

<?register-barcode-vendor:’oracle.apps.xdo.template.rtf.util.barcoder.BarcodeUtil’;'XMLPBarVendor'?>

各項目は次のとおりです。

oracle.apps.xdo.template.rtf.util.barcoder.BarcodeUtilはJavaクラスを示します。

XMLPBarVendorは、クラス別に定義されたベンダーIDです。

データのエンコード

データを書式設定するには、次の構文をテンプレートのフォーム・フィールドで使用します。

<?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メソッドがコールされ、最終出力のデータにバーコード・フォントが適用されます。

拡張設計オプション

XPathは、World Wide Web Consortium(W3C)によって開発された業界標準です。XML文書をナビゲートするために使用される方式であり、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文書要素内に含まれています。

データの検索

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]

参照の開始

XPath式の最初の文字で、XMLツリー内の開始位置が決まります。スラッシュ(/)で始まる文は絶対参照とみなされます。スラッシュが指定されない場合は相対参照を意味します。相対参照の例を次に示します。

CD/*

この文では、現行の参照ポイントで検索が開始されます。つまり、この例が1つの文グループ内で使用されている場合は、その前の文で使用された参照ポイントが使用されます。

前述のように、ダブル・スラッシュ(//)を使用すると、文書内の位置に関係なく、すべての一致要素が取得されます。

コンテキストおよび親

現行要素と親要素を選択するために、XPathでは、ディレクトリのナビゲートに通常使用されているドット表記法が認識されます。ピリオドを1つ(.)使用すると現行ノードが選択され、ピリオドを2つ(..)使用すると、現行ノードの親が戻されます。たとえば、現行ノードの親の子ノードをすべて取得するには、次の式を使用します。

../*

したがって、サンプルXMLからすべてのCDにアクセスするには、次の式を使用します。

/CATALOG/CD/..

また、次の式を使用して、1988年にリリースされたすべてのCDのタイトルにアクセスすることもできます。

/CATALOG/CD/TITLE[../YEAR=1988]

..は、要素ツリーを上にナビゲートしてTITLEと同じレベルでYEAR要素を検索し、そのYEAR要素で1988との一致をテストするために使用されます。この例では//も使用できますが、要素YEARがXML文書の他の場所でも使用されている場合は、誤った結果が戻される可能性があります。

XPathは、RTFテンプレートと組み合せた場合に非常に強力な標準であり、テンプレートで条件付き書式設定およびフィルタリングを使用できます。

ネームスペースのサポート

XMLデータにネームスペースが含まれている場合は、プレースホルダでネームスペースを参照する前にテンプレートで宣言する必要があります。テンプレートでネームスペースを宣言するには、基本RTF方式、またはフォーム・フィールドを使用します。次の構文を入力します。

<?namespace:namespace name= namespace url?>

例:

<?namespace:fsg=http://www.oracle.com/fsg/2002-30-20/?>

一度宣言すると、プレースホルダ・マークアップにネームスペースを使用できます。例: <?fsg:ReportName?>

コンテキスト・コマンドの使用

BI Publisherの構文は、簡略化されたXSL命令です。この構文は、テンプレートで使用可能なXSL固有のコマンドとともに、テンプレート・マネージャへのテンプレートのアップロード時にXSL-FOに変換されます。変換されたスタイルシートにおけるこれらの命令の配置によって、テンプレートの動作が決まります。

BI PublisherのRTFプロセッサでは、最も一般的なコンテキストに従って、XSL-FOスタイルシート内にこれらの命令が配置されます。ただし、特定の動作を作成するために、命令のコンテキストを別の方法で定義する必要がある場合もあります。この要件をサポートするために、BI Publisherには、処理命令のコンテキスト(配置)を定義できる一連のコンテキスト・コマンドが用意されています。たとえば、コンテキスト・コマンドを使用すると、次の処理を実行できます。

コンテキストは、BI Publisher構文を使用した処理コマンド、およびXSL固有の構文を使用した処理コマンドの両方に指定できます。

BI Publisherでは、次のコンテキスト・タイプがサポートされます。

コンテキスト 説明
section 文は、ヘッダーおよびフッターを含めてセクション全体に影響を与えます。たとえば、for-each@sectionコンテキスト・コマンドでは、出現ごとに、再開始されたページ番号およびヘッダーとフッターを使用して新規セクションが作成されます。
この使用方法の例は、「バッチ・レポート」を参照してください。
column 文は、表の列全体に影響を与えます。このコンテキストは通常、データに応じて表の列を表示または非表示にするために使用されます。
例については、「列の書式設定」を参照してください。
cell 文は、表のセルに影響を与えます。このコンテキストは通常、動的な列数を作成するために、クロス集計表で@columnとともに使用されます。
例については、「クロス集計のサポート」を参照してください。
block 文は、複数のfo:blocks(RTFの段落)全体に影響を与えます。このコンテキストは通常、if文およびfor-each文に対して使用されます。また、段落または表のセルに書式設定を適用するためにも使用されます。
例については、「セルの強調表示」を参照してください。
inline コンテキストは、fo:inlineブロック内の単一の文になります。このコンテキストは変数に使用されます。
incontext 文は、その文を囲んでいる文の直後に挿入されます。これは、その文を囲んでいるfor-eachの後に最初の要素として続く必要がある<?sort?>文に対するデフォルトです。
inblock 文は、fo:block(RTFの段落)内の単一の文になります。これは通常、制御文(ifやfor-eachなど)には有効ではなく、call-templateなど、テキストを生成する文に有効です。
inlines 文は、複数のインライン・セクション全体に影響を与えます。1つのインライン・セクションは、太字でレンダリングされる一続きの語など、同じ書式設定を使用するテキストです。
「ボイラープレート・テキストでのif文」を参照してください。
begin 文は、XSLスタイルシートの先頭に配置されます。これは、グローバル変数の場合は必須です。「パラメータの定義」を参照してください。
end 文は、XSLスタイルシートの最後に配置されます。

次の表に、各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

XSL要素の使用

テンプレートでXSL要素を使用するには、XSL構文をフォーム・フィールドに挿入します。

基本RTF方式を使用している場合は、XSL構文をテンプレートに直接挿入することはできません。BI Publisherでは、RTFテンプレートで使用できるように次のXSL要素が拡張されています。

これらを基本方式のRTFテンプレートで使用するには、XSL要素についてBI Publisherタグ・フォームを使用する必要があります。フォーム・フィールドを使用している場合は、いずれかのオプションを使用します。

テンプレート・ルールの適用

現行要素の子ノードにテンプレート・ルールを適用するには、この要素を使用します。

XSL構文: <xsl:apply-templates select="name">

BI Publisherタグ: <?apply:name?>

この関数は、<xsl:template-match="n">に適用されます。nは要素名です。

現行ノードのコピー

現行ノードのコピーを作成するには、この要素を使用します。

XSL構文: <xsl:copy-of select="name">

BI Publisherタグ: <?copy-of:name?>

テンプレートのコール

現行のテンプレートに挿入または適用される名前付きテンプレートをコールするには、この要素を使用します。たとえば、この機能を使用すると表を複数回レンダリングできます。

XSL構文: <xsl:call-template name="name">

BI Publisherタグ: <?call-template:name?>

テンプレートの宣言

指定したノードが一致した場合に一連のルールを適用するには、この要素を使用します。

XSL構文: <xsl:template name="name">

BI Publisherタグ: <?template:name?>

変数の宣言

ローカルまたはグローバル変数を宣言するには、この要素を使用します。

XSL構文: <xsl:variable name="name">

BI Publisherタグ: <?variable:name?>

:

 <xsl:variable name="color" select="'red'"/> 

"color"変数に値"red"を割り当てます。この変数をテンプレートで参照できます。

スタイルシートのインポート

スタイルシートの内容を別のスタイルシートにインポートするには、この要素を使用します。

注意: インポート対象のスタイルシートの優先順位は、インポート先のスタイルシートより低くなります。

XSL構文: <xsl:import href="url">

BI Publisherタグ: <?import:url?>

スタイルシートのルート要素の定義

この要素と<xsl:stylesheet>要素は完全に同じ要素です。両方とも、スタイルシートのルート要素を定義するために使用されます。

注意: 組込み対象のスタイルシートの優先順位は、組込み先のスタイルシートと同じになります。

XSL構文: <xsl:stylesheet xmlns:x="url">

BI Publisherタグ: <?namespace:x=url?>

注意: テンプレートでネームスペースを宣言する必要があります。「ネームスペースのサポート」を参照してください。

XSL固有の数値書式設定

XSL固有のformat-number関数では、次の基本書式が使用されます。

format-number(number,format,[decimalformat])
パラメータ 説明
number 必須。書式設定する数値を指定します。
format 必須。書式パターンを指定します。次の文字を使用してパターンを指定します。
  • #(桁数を指定します。例: ####)

  • 0(先頭および後続の0(ゼロ)を指定します。例: 0000.00)

  • .(小数点の位置。例: ###.##)

  • , (千単位のグループ・セパレータ文字。例: ###,###.##)

  • %(数値をパーセントで表示します。例: ##%)

  • ;(パターン・セパレータ文字。最初のパターンはプラスの数値に使用され、2番目のパターンはマイナスの数値に使用されます。)

decimalformat オプション。10進書式の詳細は、基本的なXSLTマニュアルを参照してください。

FO要素の使用

Microsoft Wordのフォーム・フィールド内でFO固有の構文を使用できます。

XSL-FOの詳細は、W3CのWebサイトhttp://www.w3.org/2002/08/XSLFOsummary.htmlを参照してください。

BI PublisherでサポートされるFO要素の全リストは、付録の「サポートされているXSL-FO要素」を参照してください。