Oracle Fusion Middleware Oracle Business Intelligence Publisherレポート・デザイナーズ・ガイド リリース11g (11.1.1) 部品番号 B63038-01 | ![]() 目次 | ![]() 前 | ![]() 次 |
この章では、次のトピックについて説明します。
リッチ・テキスト・フォーマット(RTF)は、Microsoft Wordなどの一般的な文書処理アプリケーションで使用されている仕様です。RTFは、文書を保存するときに選択できるファイル・タイプ・オプションの1つです。
BI Publisherは、RTFファイル・タイプとして保存されたドキュメントをXSL-FOに変換するため、ユーザーは、多くの標準的な文書処理アプリケーションの機能を使用して、レポート・レイアウトを作成できます。
設計時に、XSL表現対応の単純化されたBI Publisherのタグを使用して、データ・フィールドおよび他のマークアップをテンプレートに追加します。これらのタグは、XMLレポート・データとレポート・レイアウトの関連付けを行い、また他の処理に関する指示を含んでいます。
また、BI Publisherでは、使用している文書処理アプリケーションの書式設定機能に加えて、条件付き書式設定、動的データ列、総合計、チャートなどの拡張レポート機能もサポートしています。
XSLに精通していて、単純化されたタグを使用しない場合は、BI Publisherは、テンプレートにおいて純粋なXSL要素の使用もサポートしています。テンプレートにコードを直接含める場合は、任意のXSL要素、多数のFO要素、およびBI Publisherによって拡張された1組のSQL表現を含めることができます。
BI Publisherは、Oracle XDK 11.1.0.7.0によって提供されるXSLTプロセッサを使用します。これはW3C XSL変換1.0勧告をサポートしています。プロセッサは、XSLTおよびXPath 2.0標準の現在の作業草案も実装します。Oracle XDKの詳細は、Oracle XML開発者用キット・プログラマーズ・ガイド11g参照してください。
デフォルトでは、BI PublisherはXSLT 1.0と互換性があります。XSLTおよびXPath 2.0の機能をテンプレートで使用する場合は、XSLT 1.0の互換性を無効にする必要があります。この構成はテンプレート・レベルで実行されます。テンプレート・レベルの設定は、サーバーの設定を上書きします。
XSLTの互換性は、Template Builder for Wordではビルド・オプションとして設定されます。「「構築」オプションの設定」を参照してください。
この章では、レポート・テンプレートでXMLデータをレイアウト要素に関連付ける概念について説明します。また、複雑で高度な条件付きレポート・フォーマットを作成するための基本的な技術と高度な技術について説明します。
RTFテンプレートを作成するためにMicrosoft Wordを使用している場合は、この章を読み進める前に、「Template Builder for Wordを使用したRTFテンプレートの作成」を参照してください。Template Builderインストールで提供されるデモとサンプルは、Microsoft Wordでテンプレートを作成するプロセスを身に付けるのに役立ちます。
RTFテンプレートを作成するのに、Microsoft WordまたはTemplate Builderは必要ないため、この章では、Template Builderを使用せずにコンポーネントを追加する方法について説明します。この章で説明するレイアウト・コンポーネントの多くは、Template Builderを使用したテンプレートにも挿入できます。
テンプレートの設計には、次の前提条件が必要です。
データに適用するビジネス・ルールをソース・レポートから把握します。
レポート・データ・モデルからサンプル・データを生成します。
データ・モデルからのサンプル・データ生成の詳細は、Oracle Fusion Middleware Oracle Business Intelligence Publisherデータ・モデリング・ガイドのデータ・モデルのテストとサンプル・データの生成に関する項を参照してください。
使用している文書処理アプリケーションの書式設定機能に関する知識があります。
RTFテンプレートを作成するときは、BI PublisherコードをRTFドキュメントに追加します。BI Publisherは、コードの追加について次の方式をサポートしています。
BI Publisherの簡略化された構文を使用してテンプレートを設計するには、RTFバージョン1.6以上の書込みをサポートしている文書処理アプリケーションを使用します。
Microsoft Wordのフォーム・フィールド機能を使用することで、テンプレートの設計に直接ではなく、非表示のフォーム・フィールドに構文を配置できます。
注意: 簡略化された構文ではなくXSLまたはXSL:FOコードを使用する場合は、フォーム・フィールド方式を使用する必要があります。
この章では、前述の方式を使用してRTFテンプレートを作成する方法について説明します。
Microsoft Wordを使用している場合は、BI Publisher Template Builder for Wordを使用してBI Publisherコード・フィールドの挿入を支援できます。詳細は、「Template Builder for Wordを使用したRTFテンプレートの作成」を参照してください。
テンプレート・レイアウトを設計するときは、XML入力ファイルをレイアウトに関連付ける方法を理解する必要があります。この章では、XML入力ファイルを使用したテンプレート・レイアウトのサンプルを提示して、マークアップ・タグをテンプレートに追加するための適切な関連付けを行う方法を説明します。
次に、Payables Invoice Registerのサンプル・レイアウトを示します。
サンプル・テンプレート・レイアウト
次の点に注意してください。
テンプレートで定義されているデータ・フィールド
例: Supplier、Invoice Number、Invoice Date
レポートの実行時に繰り返されるテンプレートの要素
たとえば、テンプレートのすべてのフィールドは、レポート対象の仕入先ごとに繰り返されます。また、請求書表の各行は、レポート対象の請求ごとに繰り返されます。
次に、この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グループの繰返しフィールドで構成されています。
仕入先ごとに繰り返されるフィールド
請求書ごとに繰り返されるフィールド
請求書グループは仕入先グループ内にネストされています。これは、次のように表すことができます。
仕入先
仕入先名
請求書
請求書番号
請求日
GL日
通貨
入力値
報告値
合計入力値
合計報告値
この構造をXML入力ファイルの階層と比較します。前述の仕入先グループに属するフィールドは、要素G_VENDOR_NAMEの子になります。また、請求書グループに属するフィールドは、要素G_INVOICE_NUMの子になります。
グループを定義することによって、要素(親)の出現箇所ごとに、含まれているフィールド(子)を表示するようにBI Publisherに通知しています。実行時に、BI Publisherは要素の出現箇所をすべて処理し、毎回、フィールドを表示します。
設計を作成するには、使用している文書処理アプリケーションの書式設定機能を使用します。
例:
テキストのサイズ、フォントおよび配置の選択
箇条書きと番号の挿入
段落ごとの境界線の描画
透かしの挿入
イメージ(jpg、gifまたはpng)の挿入
表の自動書式設定機能の使用
ヘッダーとフッターの挿入
ヘッダーとフッターの挿入に関する追加情報は、「ヘッダーとフッターの定義」を参照してください。
Microsoft Wordでサポートされている書式設定機能の詳細は、「サポート対象のシステム固有の書式設定機能」を参照してください。その他の書式設定機能とレポート機能については、この項の最後に説明します。
BI Publisherは、文書処理アプリケーションで適用する書式設定をXSL-FOに変換します。マークアップを追加して、レイアウトとXMLファイル間のマッピングを作成し、書式で直接表現できない機能を挿入します。
最も基本的なマークアップ要素は、XMLデータ要素を定義するプレースホルダ、および繰返し要素を定義するグループです。
BI Publisherは、マークアップをテンプレートに追加するためのタグを提供します。
注意: BI Publisherのタグと同等のXSLについては、「XSLの同等要素」を参照してください。
プレースホルダによって、テンプレート・フィールドがXML要素データ・フィールドにマッピングされます。プレースホルダは、実行時に、XMLデータ・ファイル内にある同名の要素の値に置換されます。
プレースホルダは、次の構文を使用して文書に入力します。
<?XML要素のタグ名?>
注意: プレースホルダは、XML要素タグ名と正確に一致している必要があります。大文字と小文字が区別されます。
文書にプレースホルダを挿入するには、次の2つの方式があります。
フォーム・フィールド方式: (Microsoft Wordが必要)プレースホルダ構文をMicrosoft Wordの「Text Form Field Options」ウィンドウに挿入します。この方式を使用すると、テンプレートの外観を維持できます。
「Template Builder for Wordを使用したRTFテンプレートの作成」の章の「フィールドの挿入」も参照してください。
XMLデータ値を表示する文書にプレースホルダ構文を入力します。
次の構文を使用して、要素のXMLタグ名を入力します。
<?XML要素のタグ名?>
次の例では、テンプレート・フィールド「Supplier」がXML要素VENDOR_NAMEにマッピングされます。文書には次のように入力します。
<?VENDOR_NAME?>
次の図に、テンプレートへの入力を示します。
Microsoft Wordの「Text Form Field Options」ウィンドウを使用してプレースホルダ・タグを挿入します。
Microsoft Wordアプリケーションで、「Forms」ツールバーを使用可能にします。
プレースホルダを作成する位置にカーソルを置きます。
「Text Form Field」ツールバー・アイコンを選択します。この操作によって、フォーム・フィールド領域が文書に挿入されます。
フォーム・フィールド領域をダブルクリックして、「Text Form Field Options」ダイアログ・ボックスを起動します。
(オプション)「Default text」フィールドに、フィールドの説明を入力します。このフィールドに入力した内容がテンプレートのプレースホルダの位置に移入されます。
たとえば、「Supplier 1」と入力します。
「Add Help Text」ボタンを選択します。
次の構文を使用して、ヘルプ・テキスト入力フィールドにXML要素のタグ名を入力します。
<?XML要素のタグ名?>
テキスト入力フィールドには、複数の要素タグ名を入力できます。
次の例では、レポート・フィールド「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)」タブでは、より多くのテキストを入力できます。
「OK」を選択して適用します。
テンプレートのフォーム・フィールドに「Default text」の入力内容が表示されます。
次の図に、追加のフォーム・フィールド・マークアップが表示されたテンプレートの「Supplier」フィールドを示します。
次の表に、この例を作成するために入力したすべての内容を示します。テンプレート・フィールド名はテンプレートでの表示名です。デフォルト・テキスト入力は、「Text Form Field Options」ダイアログ・ボックスの「Default Text」フィールドに入力した値です(フォーム・フィールド方式の場合のみ)。プレースホルダ入力は、「Form Field Help Text」フィールド(フォーム・フィールド方式の場合)またはテンプレートに直接入力したXML要素タグ名です。
テンプレート・フィールド名 | デフォルト・テキスト入力(フォーム・フィールド方式) | プレースホルダ入力(XMLタグ名) |
---|---|---|
請求書番号 | 1234566 | <?INVOICE_NUM?> |
請求日 | 2004年1月1日 | <?INVOICE_DATE?> |
GL日 | 2004年1月1日 | <?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を参照してください。
注意: 「Template Builder for Wordを使用したRTFテンプレートの作成」の章の「繰返しグループの挿入」も参照してください。
グループを定義することによって、要素(親)の出現箇所ごとに、含まれているフィールドを表示するようにBI Publisherに通知しています。実行時に、BI Publisherは要素の出現箇所をすべて処理し、毎回、フィールドを表示します。
次の例では、XMLファイルのG_VENDOR_NAMEが出現するたびに、その子要素であるVENDOR_NAME(仕入先名)、G_INVOICE_NUM(請求書グループ)、入力済金額合計および計上済金額合計をテンプレートで表示します。さらに、G_INVOICE_NUM(請求書グループ)が出現するたびに、請求書番号、請求日、GL記帳日、通貨、入力済金額および計上済金額をテンプレートで表示します。
繰返しフィールドのグループを指定するには、繰り返す要素の前後にグループ・タグを挿入します。
<?for-each:XMLグループ要素のタグ名?>
最後の要素の後に、次のタグを挿入します。
<?end for-each?>
グループ要素は、XML入力ファイルの繰返し要素の親であることが必要です。
テキストまたは書式設定要素の前後にグループ・タグを挿入すると、グループ・タグに囲まれたテキストまたは書式設定要素が繰り返されます。
表の前後にタグを挿入すると、表が繰り返されます。
表セル内のテキストの前後にタグを挿入すると、タグに囲まれた表セル内のテキストが繰り返されます。
同じ表の行内にある2つの異なる表セルの前後にタグを挿入すると、その1行が繰り返されます。
表内の2つの異なる行の前後にタグを挿入すると、タグに囲まれた行が繰り返されます(グループ終了タグを含む行は繰り返されません)。
タグを文書に入力して、繰返し要素グループの開始と終了を定義します。
この例でSuppliersグループを作成するには、次のタグを挿入します。
<?for-each:G_VENDOR_NAME?>
このタグは、すでに作成してある「Supplier」フィールドの前に挿入します。
文書内の要約行の後に、<?end for-each?>を挿入します。
次の図に、基本RTFグループ化とプレースホルダ・マークアップを設定したPayables Invoice Registerを示します。
フォーム・フィールドを挿入して、グループの開始を指定します。
ヘルプ・テキスト・フィールドに、次のように入力します。
<?for-each:グループ要素タグ名?>
この例のSuppliersグループを作成するには、すでに作成してある「Suppliers」フィールドの前にフォーム・フィールドを挿入します。ヘルプ・テキスト・フィールドには次のように入力します。
<?for-each:G_VENDOR_NAME?>
この例では、デフォルト・テキスト「Group: Suppliers」を入力して、テンプレートのグループの開始を指定します。デフォルト・テキストは必須ではありませんが、テンプレートが理解しやすくなります。
グループ内の最後のプレースホルダの後にフォーム・フィールドを挿入します。ヘルプ・テキスト・フィールドに、<?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のタグを使用してヘッダーとフッターを作成し、レポートの本体部分を定義します。この方法は、フォーム・フィールドに配置する複雑なオブジェクトがヘッダーとフッターに含まれている場合にも使用できます。本体部分を定義すると、その本体部分の先頭より前にある要素によってヘッダーが構成され、本体部分の後にある要素によってフッターが構成されます。
レポートの本体部分は、次のタグを使用して囲みます。
<?end body?>
これらのタグは、テンプレートで直接使用するか、フォーム・フィールド内で使用します。
Payables Invoice Registerのヘッダーとフッターは単純であるため、start body/end bodyタグを使用する必要はありません。ただし、別のヘッダーをテンプレートに追加する場合は、次の手順で本体部分を定義します。
Suppliersグループのタグ<?for-each:G_VENDOR_NAME?>の前に<?start:body?>を挿入します。
Suppliersグループの終了タグ<?end for-each?>の後に<?end body?>を挿入します。
次の図に、start body/end bodyタグを挿入したPayables Invoice Registerを示します。
レポートの先頭ページに異なるヘッダーやフッターが必要な場合、または奇数ページと偶数ページで異なるヘッダーやフッターが必要な場合は、Microsoft Wordの「Page Setup」ダイアログを使用してこの動作を定義できます。
注意: この機能は、PDFおよびRTFの出力のみでサポートされています。
「File」メニューから「Page Setup」を選択します。
「Page Setup」ダイアログで「Layout」タブを選択します。
ダイアログの「Headers and footers」リージョンで、該当するチェック・ボックスを選択します。
「Different odd and even」
「Different first page」
必要に応じてテンプレートにヘッダーとフッターを挿入します。
実行時に、生成されたレポートに定義済のヘッダーとフッターの動作が表示されます。
BI Publisherでは、発行文書にイメージを挿入するための複数の方法をサポートしています。
jpg、gifまたはpngイメージをテンプレートに直接挿入します。
URL参照
ダミー・イメージをテンプレートに挿入します。
Microsoft Wordの「Format Picture」ダイアログ・ボックスで「Web」タブを選択します。イメージURLを参照するには、次の構文を「Alternative text」リージョンに入力します。
url:{'http://イメージの位置'}
たとえば、url:{'http://www.oracle.com/images/ora_log.gif'}と入力します。
ダミー・イメージをテンプレートに挿入します。
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)}
結果の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%">
...
注意: 「Template Builder for Wordを使用したRTFテンプレートの作成」の章の「チャートの挿入」も参照してください。
チャートをテンプレートに追加する手順の要約は次のとおりです。これらの手順の詳細は、後述する例で説明します。
ダミー・イメージをテンプレートに挿入して、チャートのサイズと位置を定義します。
ダミー・イメージの「Alternative text」ボックスに、チャートの定義を追加します。チャートの定義にはXSLコマンドが必要です。
実行時に、BI Publisherは、チャート・エンジンをコールしてイメージをレンダリングします。このイメージは、最終出力文書に挿入されます。
RTF出力がラスター・イメージに制限されていることに注意してください。PDFとHTMLの出力は、ラスター・イメージとベクトル・イメージをサポートしています。
次の例は、会社の部門別に売上合計を表示する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>
この例では、チャートをテンプレートに挿入し、次の図に示すように垂直棒グラフとして表示する方法を示します。
このチャートの次の属性に注目してください。
形式は垂直棒グラフです。
チャートの背景にはグリッドが表示されています。
各コンポーネントはカラーで表示されています。
売上合計はY軸ラベルで表示されています。
各部門はX軸ラベルで表示されています。
チャートにタイトルが付いています。
チャートに凡例が表示されています。
各プロパティは、個別のレポート要件にあわせてカスタマイズできます。
最初の手順では、テンプレートのチャートを表示する位置にダミー・イメージを追加します。イメージ・サイズによって、最終文書に表示するチャート・イメージのサイズが定義されます。
重要: ダミー・イメージはイメージとして挿入し、他の種類のオブジェクトとして挿入しないでください。
次の図に、ダミー・イメージの例を示します。
繰返しデータに基づいてチャートを出力に繰返し表示する場合は、他のフォーム・フィールドと同様に、イメージをfor-eachループ内に埋め込むことができます。この例では、チャートはsales yearグループ内で定義されているため、XMLファイルに存在するデータの年度ごとに生成されます。
イメージを右クリックして「Format Picture」パレットを開き、「Web」タブを選択します。「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出力またはHTML出力にレンダリングできます(他の出力タイプについてはサポートされていません)。
次のオートシェイプ・カテゴリがサポートされています。
線: 直線、矢印、双方向矢印、曲線、フリーフォーム、フリーハンドがあります。
双方向矢印: 直線の双方向矢印のみサポートされています。曲線の双方向矢印を作成するには、曲線を使用し、この曲線の終端スタイルを指定します。
基本図形: すべての図形がサポートされています。
ブロック矢印: すべての矢印がサポートされています。
フローチャート: すべてのフローチャート・オブジェクトがサポートされています。
星とリボン: すべてのオブジェクトがサポートされています。
吹き出し: 線の吹き出しはサポートされていません。
クリップアート: Microsoft Clip Artライブラリを使用してイメージをテンプレートに追加します。
Microsoft Wordのフリーハンド描画ツールを使用して、最終的なPDF出力にレンダリングする図をテンプレートに作成します。
図形にハイパーリンクを追加できます。「ハイパーリンク」を参照してください。
図形を相互に重ね合せ、Microsoft Wordの透過性設定を使用して、下位レイヤー上の図形を透かしで表示できます。次の図に、重ね合せた図形の例を示します。
BI Publisherでは、図形の3-Dオプションは現在サポートしていません。
数式エディタを使用して、出力に数式を生成します。次の図に、数式の例を示します。
テンプレートで組織図機能を使用すると、組織図が出力にレンダリングされます。次のイメージは、組織図の例を示しています。
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?>
このコマンドにより、次の図に示す出力が生成されます。
この例では、受信した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,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つの星が生成されます)。次の図に、このテンプレートおよび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*110、すなわち0となり、オブジェクトの最初のレンダリングがテンプレートで定義された位置に配置されます。後続の出現箇所は、X軸方向(右方向)に110ピクセル分オフセットした位置でレンダリングされます。
次の図に示すように、実行時に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の次の機能もサポートしています。
テキストの大きいブロック
(HTML出力ではサポートされていません)改ページを挿入するには、グループの終了タグの直前に[Ctrl]+[Enter]キーストロークを挿入します。たとえば、Payables Invoice Registerで、仕入先ごとに新規ページになるようにテンプレートを設定する手順は、次のとおりです。
Supplierグループの終了<?end for-each?>タグの直前にカーソルを置きます。
[Ctrl]+[Enter]を押して、改ページを挿入します。
これによって、実行時には、仕入先ごとに新規ページになります。
このMicrosoft Word固有の機能を使用すると、レポート出力の最後に空白ページが1ページ出力されます。この空白ページを出力しないようにするには、BI Publisherの改ページ別名を使用します。テンプレート機能の項の「改ページ」を参照してください。
使用している文書処理アプリケーションのページ番号付け方法を使用して、ページ番号を最終レポートに挿入します。たとえば、Microsoft Wordを使用している場合は、次の手順を実行します。
「Insert」メニューから「Page Numbers...」を選択します。
必要に応じて、「Position」、「Alignment」および「Format」を選択します。
実行時に、選択内容に従ってページ番号が表示されます。
HTML出力ではページ番号付けはサポートされておらず、RTF出力ではサポートに制限があります。RTFレポートの生成後に、[F9]を押すとページ番号がリセットされます。
Microsoft Wordではテキストを非表示として書式設定できます。非表示テキストはRTF出力レポートで保持されます。
テキスト、グラフィック、オブジェクトおよび表は、ワード・プロセッサの配置機能を使用して配置します。
注意: 双方向の言語は、文書処理アプリケーションの右/左揃え機能によって自動的に処理されます。
次の表機能がサポートされています。
ネスト表
セル配置
オブジェクトは、使用している文書処理アプリケーションの配置ツールを使用してテンプレートに配置できます。この配置は、最終レポート出力に反映されます。
行の拡張と列の拡張
テンプレート内の列および行は、次の手順で拡張できます。
マージするセルを選択します。
「Table」メニューから「Merge Cells」を選択します。
マージしたセル内にデータを通常の方法で配置します。
実行時に、セルがマージされて表示されます。
表の自動書式設定
BI Publisherは、Microsoft Wordで使用可能な表の自動書式設定を認識します。
書式設定する表を選択します。
「Table」メニューから「Autoformat」を選択します。
必要な表の書式を選択します。
実行時に、選択内容に従って表が書式設定されます。
セルのパターンと色
表のセルまたは行は、パターンまたは色で強調表示できます。
セル(複数可)または表を選択します。
「Table」メニューから「Table Properties」を選択します。
「Table」タブから「Borders and Shading...」ボタンを選択します。
必要に応じて、罫線および網かけを追加します。
注意: RTF出力ではこの機能はサポートされていません。
データを表に表示するときに、その表が複数ページにわたることが予想される場合は、各ページの冒頭で繰り返すヘッダー行を定義できます。
各ページで繰り返す行(複数可)を選択します。
「Table」メニューから「Heading Rows Repeat」を選択します。
表の1行に含まれるデータを同じページに表示する機能は、Microsoft Wordの「Table Properties」を使用してオプションとして設定できます。
途中で改ページしないようにする行(複数可)を選択します。
「Table」メニューから「Table Properties」を選択します。
「Row」タブで、「Allow row to break across pages」チェック・ボックスの選択を解除します。
表の列幅を設定する手順は、次のとおりです。
列を選択し、「Table」→「Table Properties」の順に選択します。
「Table Properties」ダイアログで「Column」タブを選択します。
「Preferred width」チェック・ボックスを選択し、列幅を「Percent」または「Inches」で入力します。
「Next Column」ボタンを選択して、次の列の幅を設定します。
列の幅の合計が表の幅の合計になることに注意してください。
次の図に、「Table Properties」ダイアログを示します。
デフォルトでは、表のセル内に入りきらない文字列はセル内で折り返されます。折り返さずに切り捨てる場合は、「Table Properties」ダイアログを使用します。
表内のテキスト切捨ては、PDFとPPTの出力のみでサポートされています。
文字列を切り捨てるセル内にカーソルを置きます。
マウスを右クリックして、メニューから「Table Properties...」を選択するか、「Table」→「Table Properties...」にナビゲートします。
「Table Properties」ダイアログから「Cell」タブを選択し、次に「Options...」を選択します。
「Wrap Text」チェック・ボックスの選択を解除します。
次の図に、「Cell Options」ダイアログを示します。
次の図に、切捨ての例を示します。
日付は、使用している文書処理アプリケーションの日付機能を使用して挿入します。この日付は発行日に対応しており、要求実行日ではないことに注意してください。
BI PublisherはMicrosoft Wordの列機能をサポートしているため、ページ内の複数の列に出力を公開できます(これはHTML出力ではサポートされていません)。
「Format」→「Columns」を選択して「Columns」ダイアログ・ボックスを表示し、テンプレートの段数を定義します。次の図に、「Columns」ダイアログを示します。
段組みページの例: ラベル
2段形式で所在地ラベルを生成する手順は、次のとおりです。
「Columns」コマンドを使用して、ページを2段に分割します。
最初の段に繰返し可能なグループを定義します。次の図に示すように、繰返し可能なグループを定義するのは最初の段のみであることに注意してください。
ヒント: 所在地ブロックが複数のページや段に分割されないようにするには、単一セルの表内にラベル・ブロックを埋め込みます。次に、行の途中で改ページしないように「Table Properties」で指定します。「行の途中で改ページしないようにする機能」を参照してください。
このテンプレートによって、次の複数の段がある出力が作成されます。
BI Publisherは、Microsoft Wordの背景機能をサポートしています。テンプレートがPDF出力で表示されるように、1つの段階的な色またはイメージの背景を指定できます。この機能は、PDF出力およびPPT出力のみでサポートされています。
テンプレートに背景を追加するには、「Format」→「Background」メニュー・オプションを使用します。
「Background」ポップアップ・メニューから、次の処理を実行できます。
カラー・パレットから単一色の背景を選択します。
「Fill Effects」を選択して「Fill Effects」ダイアログを開きます。次の図に、「Fill Effects」ダイアログを示します。
このダイアログから、次のサポートされるオプションのいずれかを選択します。
グラデーション: 1色または2色のいずれかを選択できます。
テクスチャ: 提供されたテクスチャのいずれかを選択するか、独自のテクスチャをロードします。
パターン: パターンおよび前景/背景色を選択します。
図: 背景イメージとして使用する図をロードします。
これらのバージョンのMicrosoft Wordでは、テキストまたはイメージの透かしを追加できます。
「Format」→「Background」→「Printed Watermark」ダイアログを使用して、次のいずれかを選択します。
Picture Watermark: イメージをロードし、文書上で拡大・縮小する方法を定義します。
Text Watermark: 事前定義済のテキスト・オプションを使用するか、独自のテキストを入力し、フォント、サイズおよびテキストのレンダリング方法を指定します。
次の図に、テキストの透かしを表示するために入力した「Printed Watermark」ダイアログを示します。
注意: 改ページは、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>
…
次の図に示すテンプレート・サンプルでは、PageBreakというフィールドにsplit-by-page-break構文が含まれています。
<?end for-each?>フィールドの直前に、<?split-by-page-break:?>構文を含むPageBreakフィールドを配置します。このPageBreakフィールドは、SUPPLIERループの最後に位置します。これによって、新規仕入先が出現する前に改ページが挿入されます。この方法では、グループの後にMicrosoft Word固有の改ページを使用した場合に、グループの最後に余分なページが出力されません。
注意: 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?>
注意: 最初に、テンプレートでパラメータを宣言する必要があります。「テンプレートでのパラメータの定義」を参照してください。
注意: この機能は、PDFおよびPPTの出力のみでサポートされています。
BI Publisherでは、先頭ページ、奇数ページおよび偶数ページに対して異なるページ・レイアウトを指定するMicrosoft Wordの機能をサポートしています。これらのオプションを実現するには、単に「File」メニューから「Page Setup」を選択して、「Layout」タブを選択します。BI Publisherでは、このダイアログの設定が認識されます。
ただし、Microsoft Wordには最終ページのみの設定が提供されていません。この機能は、最終ページにのみ特定の場所にチェックや要約などのコンテンツを必要とするような小切手、請求書または発注書などの文書に便利です。
BI Publisherには、この機能が提供されています。この機能を利用するには、次のように操作する必要があります。
テンプレート内にセクション区切りを作成して、最終ページの内容がレポートの残りの部分から分離されるようにします。
次の構文を最終ページに挿入します。
<?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」)を挿入します。最終ページの場合は、要約表をページの最下部に配置するために複数の改行文字を挿入します。次の図に、要約表を示します。
最終ページのみのレイアウト
この例では、次のように設定されています。
FおよびEのコンポーネントには、for-eachグループ文が含まれています。
グレー表示のレポート・フィールドは、XML要素のプレースホルダです。
「Last Page Placeholder」フィールドには、次の構文が含まれます。
<?start@last-page:body?> <?end body?>
これは、最終ページのレイアウトを宣言するためのものです。この文の上または下のコンテンツは、すべて最終ページにのみ表示されます。文の上のコンテンツはヘッダーとみなされ、文の下のコンテンツはフッターとみなされます。
最終ページに繰り越す必要があるヘッダーおよびフッターがレポートに含まれている場合は、最終ページ上で再挿入する必要があります。ヘッダーおよびフッターの詳細は、「ヘッダーとフッターの定義」を参照してください。
最終ページのレイアウトを指定するために、文書にセクション区切り(タイプ: 「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ページのみのレポートの最終ページ・レイアウトとなります。
注意: この機能は、PDFおよびPDFの出力のみでサポートされています。RTFおよびHTMLの出力ではサポートされていません。
レポートのレイアウトが奇数ページと偶数ページで異なる場合は、レポートを強制的に奇数または偶数ページで終了させることができます。たとえば、奇数/偶数フッター別指定機能を使用して、レポートのフッターに発注の条件を挿入し(「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'?>
注意: ハイパーリンクは、PDF、RTF、HTML、PPT、およびExcelの出力でサポートされています。
BI Publisherでは、いくつか異なるタイプのハイパーリンクがサポートされています。ハイパーリンクは、固定または動的なハイパーリンクが可能で、内部または外部のいずれかの宛先にリンクできます。図形に追加することもできます。
テキストまたは図形のいずれかに静的なハイパーリンクを挿入するには、使用している文書処理アプリケーションのハイパーリンク挿入機能を使用します。
テキストまたは図形を選択します。
マウスの右メニューを使用して「Hyperlink」を選択するか、「Insert」メニューから「Hyperlink」を選択します。
「Insert Hyperlink」ダイアログ・ボックスに提供されている方法のいずれかを使用してURLを入力します。
次のスクリーンショットに、Microsoft Wordの「Insert Hyperlink」ダイアログ・ボックスを使用した静的なハイパーリンクの挿入を示します。
入力XMLデータに、ハイパーリンクまたはその一部を含む要素が含まれている場合は、実行時に動的なハイパーリンクを作成できます。「Insert Hyperlink」ダイアログ・ボックスの「Type the file or Web page name」フィールドに、次の構文を入力します。
{URL_LINK}
ここで、URL_LINKは受信したデータ要素名です。
XMLデータ・ファイルから要素を追加して作成する固定のURLの場合、次の構文を入力します。
http://www.oracle.com?product={PRODUCT_NAME}
ここで、PRODUCT_NAMEは受信したデータ要素名です。
いずれの場合も、実行時に動的なURLが作成されます。
次の図に、Microsoft Wordの「Insert Hyperlink」ダイアログ・ボックスを使用した動的なハイパーリンクの挿入を示します。受信したXMLファイルのデータ要素SUPPLIER_URLには、実行時にレポートに挿入されるハイパーリンクが含まれます。
実行時にパラメータを渡して動的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.oracle.com??target=_top
ターゲット属性の値は次のとおりです。
_top
_blank
_self
_parent
フレーム名
次の構文を使用すると、ターゲットの値で動的に渡すことができます。
http://www.oracle.com/index.html??target={$myTarget}
ここで、myTargetは、値を保持するパラメータの名前です。
Microsoft Wordのブックマーク機能を使用して内部リンクを挿入します。
カーソルを文書内の希望する宛先に置きます。
「Insert」→「Bookmark...」を選択します。
「Bookmark」ダイアログで、このブックマークの名前を入力して「Add」を選択します。
ブックマークの宛先としてリンクする文書内のテキストまたは図形を選択します。
マウスの右メニューを使用して「Hyperlink」を選択するか、「Insert」メニューから「Hyperlink」を選択します。
「Insert Hyperlink」ダイアログで、「Bookmark」を選択します。
作成済のブックマークをリストから選択します。
実行時に、生成されたレポート内にリンクが保持されます。
注意: 目次機能は、PDFおよびPPTの出力でサポートされています。RTFのサポートは制限されていて、レポート生成後に、ユーザーは、[F9]を押してページ番号をリセットする必要があります。
BI Publisherでは、RTF仕様の目次生成機能をサポートしています。目次を挿入するには、使用している文書処理アプリケーションの手順に従ってください。
BI Publisherでは、XMLデータから、文書内に動的なセクション・ヘッダーを作成することもできます。作成したセクション・ヘッダーは目次に組み込むことができます。
動的なヘッダーを作成する手順は、次のとおりです。
ヘッダーのプレースホルダを文書の本体に入力し、文書処理アプリケーションのスタイル機能を使用して、そのプレースホルダをヘッダーとして書式設定します。この機能ではフォーム・フィールドを使用できません。
たとえば、レポート対象の会社ごとに、レポートにヘッダーを表示するとします。この場合、XMLデータ要素タグ名は<COMPANY_NAME>になります。テンプレートに、ヘッダーを表示する<?COMPANY_NAME?>を入力します。次に、テキストをヘッダーとして書式設定します。
目次は、文書処理アプリケーションの目次機能を使用して作成します。
実行時に、目次のプレースホルダとヘッダー・テキストが置換されます。
RTFテンプレート内に目次を定義した場合、目次の定義を使用して出力PDFのナビゲーション・ペインにある「しおり」タブにリンクを生成することができます。しおりは、静的または動的のいずれの方法でも生成できます。
重要: RTFテンプレートでのブックマーク・サポートは、単一ポイントのブックマークに制限されています。これによってドキュメント内でのリンク(Goto)機能が実現します。ブックマークでは配列はサポートされていません。
目次作成の詳細は、「目次」を参照してください。
静的な目次のリンクを作成するには、次の手順を実行します。
次の構文を入力します。
<?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:?>
(目次の直後)
注意: チェック・ボックスは、PDF出力のみでサポートされています。
テンプレートにチェック・ボックスを挿入し、受信したデータの値に基づいて選択済または選択解除済として表示するように定義できます。
チェック・ボックスをテンプレートに定義する手順は、次のとおりです。
テンプレート内で、チェック・ボックスを表示する位置にカーソルを置き、「Forms」ツールバーから「Check Box Form Field」(次の図を参照)を選択します。
フィールドを右クリックして「Check Box Form Field Options」ダイアログを開きます。
「Default value」で「Checked」または「Not Checked」のいずれかを指定します。
「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>値と実際の大陸名を相互参照する索引をテンプレートに作成できます。さらに、この大陸名を発行レポートに表示できます。
この大陸の例に対する索引を作成する手順は、次のとおりです。
テンプレート内で、ドロップダウン・リストを表示する位置にカーソルを置き、「Forms」ツールバーから「Drop-Down Form Field」(次の図を参照)を選択します。
フィールドを右クリックして「Drop-Down Form Field Options」ダイアログを表示します。
それぞれの値を「Drop-down item」フィールドに追加して「Add」をクリックすると、その値が「Items in drop-down list」グループに追加されます。値は、最初の値から始めて1から順に索引付けされます。たとえば、大陸のリストは次のように格納されます。
索引 | 値 |
---|---|
1 | Asia |
2 | North America |
3 | South America |
4 | Europe |
5 | Africa |
6 | Australia |
「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グループを終了します。 |
注意: 「Template Builder for Wordを使用したRTFテンプレートの作成」の章の「条件付きリージョンの挿入」および「条件付き書式の挿入」も参照してください。
条件付き書式設定は、特定の条件を満たした場合のみ書式設定要素を表示する場合に指定します。BI Publisherでは、単純なif文のほかに、複雑なchoose式の使用もサポートしています。
指定できる条件付き書式設定はXSLまたはXSL:FOコードで、実際のRTFオブジェクト(表やデータなど)を指定することもできます。たとえば、特定のしきい値に達したレポート番号を赤で網かけ表示するように指定できます。また、この機能を使用すると、受信したXMLデータに基づいて表の列や行を非表示にすることもできます。
if文を使用すると、単純な条件を定義できます(たとえば、データ・フィールドが特定の値かどうか)。
次の構文を挿入して、条件領域の開始を指定します。
<?if:条件?>
構文<?end if?>を条件領域の最後に挿入します。
たとえば、仕入先名が「Company A」の場合のみ請求書を表示するようにPayables Invoice Registerを設定するには、テンプレートの「Supplier」フィールドの前に、構文<?if:VENDOR_NAME='COMPANY A'?>を挿入します。
請求書表の後に<?end 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」の場合の結果です。
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、whenおよびotherwiseの各要素を使用して、複数の条件判断を表現します。受信したXMLデータで特定の条件が満たされると、テンプレートの指定セクションがレンダリングされます。これは、RTFテンプレートの強力な機能です。通常のXSLプログラミングでは、chooseコマンドである条件が満たされると、後続のXSLコードが実行されます。ただし、テンプレートでは、条件フローに視覚的なウィジェットを実際に使用できます(次の例では表を使用)。
これらの要素については、次の構文を使用します。
<?choose:?>
<?when:式?>
<?otherwise?>
次の例では、EXEMPT_FLAGフィールドとPOSTED_FLAGフィールドの値に基づいてデータ行を表示するchoose式を示します。EXEMPT_FLAGが「^」の場合、データ行は明るい灰色でレンダリングされ、POSTED_FLAGが「*」の場合、データ行は濃い灰色の網かけでレンダリングされます。それ以外の場合、データ行は網かけなしでレンダリングされます。
次の図には、フォーム・フィールドのデフォルト・テキストが表示されています。この後の表に、フォーム・フィールドのヘルプ・テキスト入力を示します。
この例のフォーム・フィールドのデフォルト・テキスト入力 | フォーム・フィールドのヘルプ・テキスト入力 |
---|---|
<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グループを終了します。 |
データの列は、条件に基づいて、文書出力に表示したり非表示にできます。次の例では、列が要素属性の値に基づいてのみ表示されるように、表を設定する方法を示します。
この例では、次の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 | 該当なし | ボイラープレート・ヘッダー。 |
end-if | <?end if?> | if文を終了します。 |
IF | <?if@column: /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句は、コンテキスト・コマンドの例の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要素のプレースホルダ。 重要: <?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など)を使用できます。
次の図に、このテンプレートからの出力を示します。
この項で説明したページ・レベルの計算はすべて、PDFとPPTの出力のみでサポートされています。
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' number-separators="{$_XDONFSEPARATORS}"?>
説明:
TotalFieldNameは、前述のページ合計フィールドを指定する際に割り当てた名称です。
Oracle数値書式は、Oracle書式マスクを使用して表示する際に使用する書式です(例: 'C9G999D00')。Oracle書式マスクの記号のリストは、「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>
次の図に、値を保持するためにテンプレートに挿入する表を示します。
この表の例について、テンプレートのフォーム・フィールドへの入力を次の表に示します。
デフォルト・テキスト入力 | フォーム・フィールドのヘルプ・テキスト入力 | 説明 |
---|---|---|
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}"?>
次の図に、このレポートの出力を示します。
多くのレポートでは、レポート出力全体にわたるページ合計を保持し、各ページの最初と最後に表示する必要があります。これらの合計は、前からの繰越/次への繰越の合計と呼ばれます。
注意: 前からの繰越と次への繰越フィールドの合計計算は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" number-separators="{$_XDONFSEPARATORS}"/>/>
</xdofo:inline-total>
次の表に、前からの繰越の構文を構成する要素を説明します。
コード要素 | 説明と使用方法 |
---|---|
inline-total | この要素には、次の2つのプロパティがあります。
|
Brought Forward: | この文字列はオプションで、レポートのフィールド名として表示されます。 |
show-brought-forward | ページに値を表示します。次の2つのプロパティがあります。
|
前からの繰越合計を表示するテンプレートの先頭に、前からの繰越オブジェクトを挿入します。このオブジェクトをテンプレート本体に配置すると、構文をフォーム・フィールドに挿入できます。
前からの繰越合計をヘッダーに表示する場合、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" 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論理計算の正しい動作は、これらのコマンドが正しく機能することに依存しています。
変数機能(「変数の使用」を参照)を使用して、請求書一覧レポートに総合計を追加できます。この例では、次の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:要素名; 順序; データ・タイプ?>
説明:
要素名は、グループをソートする要素の名前です。
順序は「昇順」または「降順」です。
データ・タイプは、要素のデータ・タイプです。有効な値は、「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'?>
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?>
RTFテンプレートでは、XSL 2.0のfor-each-group標準をサポートしているため、元のデータに存在しない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?> |
フォーム・フィールド・タグについて次の点に注目してください。
<?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?>タグは、このグループを終了します。
更新可能な変数は、標準的な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ユーザーの場合は、パラメータの名前と値のすべてのペアがテンプレートに渡されます。次に説明する構文を使用して、利用するパラメータをテンプレートに登録する必要があります。
テンプレートでのパラメータの使用
パラメータをテンプレートで宣言します。
次の構文を使用して、パラメータを宣言します。
<?param@begin:parameter_name;parameter_value?>
説明:
parameter_nameは、パラメータの名称です。
parameter_valueは、パラメータのデフォルト値です(parameter_valueはオプションです)。
param@begin:は、実行時にテンプレートの先頭にパラメータ宣言をプッシュするために必要な文字列です。これによって、テンプレートでパラメータをグローバルに参照できます。
この構文は、フォーム・フィールドの「Help Text」フィールドで宣言する必要があります。このフォーム・フィールドは、テンプレート内の任意の位置に配置できます。
テンプレートでパラメータを参照するには、パラメータ名の前に$文字を付けます。たとえば、パラメータ名をInvThreshと宣言した場合は、$InvThreshを使用してその値を参照します。
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の構成ファイルと利用可能なプロパティの詳細は、Oracle Fusion Middleware Oracle Business Intelligence 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ディレクトリでフォントを検索します。テンプレートが複数の場所に配置されている場合は、各場所に対してパスが有効であることを確認してください。
フォント・プロパティの設定の詳細は、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}
テンプレート・パラメータの詳細は、「テンプレートでのパラメータの定義」を参照してください。
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?> | 該当なし | Microsoft Wordでは、ヘッダーでのフォーム・フィールドの使用はサポートしていないため、TRX_NUMBER要素のプレースホルダ構文はテンプレートに直接配置します。 |
end G_INVOICE | <?end for-each?> | G_INVOICEグループを終了します。 |
これで、G_INVOICE要素が新たに出現するたびに、新規セクションが開始します。ページ番号が再び開始され、ヘッダーまたはフッターの情報がデータから抽出されると、同様にリセットされます。
BI Publisherコマンドのfor-eachまたはfor-each-groupで@sectionを使用し(例:<?for-each@section:ELEMENT_NAME?>)、入力データ・ファイルにデータがない場合、空または無効のPDF出力ドキュメントが、そのfor-eachループに対して生成される可能性があります。これが発生するのを防ぐには、RTFテンプレートに次を入力します。
RTFテンプレートの終わりに、セクション区切りを追加します。
最後のページ(新しい項のページ)で、コマンド<?if@section:not(ELEMENT_NAME)?>No Data Found<?end if?>を追加します。
ここで、ELEMENT_NAMEは、for-each@sectionループで使用しているのと同じデータ要素です。
ELEMENT_NAMEにデータが存在しない場合は、「データが見つかりません」というテキストとともに有効なPDFが生成されます。
注意: 「Template Builder for Wordを使用したRTFテンプレートの作成」の章の「ピボット・テーブルの挿入」も参照してください。
ピボット・テーブルの列は、データに依存します。設計時には、レポートされる列の数や適切な列ヘッダーは不明です。さらに、列が次のページに分割される場合は、後続のページで繰り返す行ラベル列の定義が必要になります。次の例では、これらの機能をサポートする単純なピボット・テーブル・レポートの設計方法を説明します。
この例では、次の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つです。この機能を使用すると、データによって必要な列の数が変化する場合に、表を正しくレンダリングするテンプレートを設計できます。
たとえば、特定範囲内のテスト・スコアの列を表示するテンプレートを設計するとします。ただし、レポート対象のデータを表示する範囲の数は不明です。この場合は、動的データ列を定義すると、実行時に適切な数の列に分割できます。
次のタグを使用して、データの正しいレンダリングに必要な動的書式設定を設定します。
動的列ヘッダー
<?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フォントで表示される文字の近似の幅です。乗数が定義されていない場合、列の幅は、表の全幅の割合として計算されます。これについて、次の表に示します。
幅の定義 | 列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ポイント |
表の列が拡張して複数のページにまたがる場合、毎ページごとに繰り返す行見出し列の個数を定義できます。次の構文を使用して、繰り返す列数を指定します。
<?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」は動的な列です。実行時に、この列はデータに応じて分割され、列ごとにヘッダーが適切に移入されます。次の表に、各フィールドのデフォルト・テキスト入力およびフォーム・フィールドのヘルプ・テキスト入力を示します(フォーム・フィールドの使用方法の詳細は、「フォーム・フィールド方式」を参照)。
デフォルト・テキスト入力 | フォーム・フィールドのヘルプ・テキスト入力 |
---|---|
グループ:TestScores | <?for-each:TestScores?> |
テスト・カテゴリ | <?TestCategory?> |
列ヘッダーと分割 | <?split-column-header:TestScore?> <?split-column-width:@width?> <?TestScoreRange?>% |
コンテンツと分割 | <?split-column-data:TestScore?> <?NumofStudents?> |
終了: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」列が後続のページで繰り返され、最初のページに収まらなかった残りの列とともに表示されます。
テンプレートでは、次の図に示す出力がレンダリングされます。
BI Publisherでは、数値の書式を指定するために、次の2つの方法をサポートしています。
Oracleのformat-number関数(推奨)
Microsoft Word固有の数値書式マスク
注意: XSL固有のformat-number関数を使用して、数値を書式設定することもできます。「XSL固有の数値書式設定」を参照してください。
前述の方法のいずれかを使用してください。両方の方法を使用して数値書式マスクを指定すると、データが2回書式設定されるため、予期しない動作が発生します。
グループ・セパレータと数値セパレータは、テンプレートのロケールに基づいて実行時に設定されます。en-US以外のロケールで作業していたり、テンプレートに翻訳が必要な場合は、Oracleの書式マスクを使用します。
Oracle書式マスクまたはMicrosoft書式マスクを使用するには、データソースの数値がRaw形式であること、つまり、書式設定が適用されていない(例: 1000.00)ことが必要です。数値が書式設定されている場合(たとえば、欧州形式に1.000,00と書式設定されている場合)、その書式は機能しません。
注意: BI Publisherパーサーでは、Java BigDecimal文字列表現が必要です。この表現は、オプション記号(-)、0(ゼロ)以上の10進数列(整数)、小数(オプション)および指数(オプション)で構成されます。たとえば、-123456.3455e-3のように設定します。
en-US以外のロケールで作業していたり、テンプレートに翻訳が必要な場合は、Oracleの書式マスクを使用します。Microsoftの書式マスクは、異なるロケール設定で実行されるテンプレートにおいて予期しない結果を生じる可能性があります。
「%」記号は、数値表示でパーセント記号の位置を固定するため、書式マスクに含めないでください。この記号は、ロケールに基づいて、数値の先頭または後に配置できます。
数値を書式設定するには、Microsoft Wordのフィールド書式設定機能を使用します。この機能は、「Text Form Field Options」ダイアログ・ボックスで設定できます。次の図に例を示します。
数値書式をフォーム・フィールドに適用する手順は、次のとおりです。
プレースホルダ・フィールドに対して「Form Field Options」ダイアログ・ボックスを開きます。
「Type」を「Number」に設定します。
「Number format」のオプション・リストから適切な数値書式を選択します。
次の表に、サポートされている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書式マスクをフォーム・フィールドに適用する手順は、次のとおりです。
プレースホルダ・フィールドに対して「Form Field Options」ダイアログ・ボックスを開きます。
「Type」を「Regular text」に設定します。
「Form Field Help Text」フィールドに、次の例に従ってマスク定義を入力します。
<?format-number:ファイル名;'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つの方法をサポートしています。
Microsoft Word固有の日付書式マスクを使用して、明示的な日付書式マスクを指定します。
Oracleのformat-date関数を使用して、明示的な日付書式マスクを指定します。
Oracleの抽象日付書式マスクを使用して、抽象日付書式マスクを指定します(多言語テンプレートの場合に推奨)。
使用できる方法は1つのみです。OracleとMSの両方の書式マスクを指定すると、データが2回書式設定されるため、予期しない動作が発生します。
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)。
日付書式をフォーム・フィールドに適用する手順は、次のとおりです。
プレースホルダ・フィールドに対して「Form Field Options」ダイアログ・ボックスを開きます。
「Type」を「Date」、「Current Date」または「Current Time」に設定します。
「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書式マスクを日付フィールドに適用する手順は、次のとおりです。
プレースホルダ・フィールドに対して「Form Field Options」ダイアログ・ボックスを開きます。
「Type」を「Regular Text」に設定します。
「Add Help Text...」ボタンを選択して、「Form Field Help Text」ダイアログを開きます。
次の構文を挿入して、日付書式マスクを指定します。
<?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. | AM/PM表示(ピリオドありまたはピリオドなし)。 |
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. | AM/PM表示(ピリオドありまたはピリオドなし)。 |
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?>
抽象日付書式マスクは、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'?>
次の表に、抽象書式マスク、および米国ロケールで生成されたサンプル出力を示します。
マスク | 米国ロケールの出力 |
---|---|
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 |
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';?>
BI Publisherを使うと、特定の通貨書式マスクを定義して、実行時に公開したデータに適用できます。
通貨の書式設定を利用するには、RTFテンプレートで次の操作を実行します。
BI Publisherの実行時構成プロパティで通貨書式を設定します。通貨書式は、システム・レベルまたはレポート・レベルで定義できます。
通貨書式プロパティを設定するには、国際標準化機構(ISO)の通貨コードを使用して、指定された通貨に使用する形式を定義します。サンプルを次の図に示します。
詳細は、「通貨書式の構成」を参照してください。
RTFテンプレートにformat-currencyコマンドを入力して、実行時に形式をフィールドに適用します(使用方法は以下に示します)。
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'と入力するか、または単にパラメータを指定しないでください。
次の例では、レポート・プロパティで次の通貨書式が設定されていると想定しています。
通貨コード | 書式マスク |
---|---|
USD | 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'?>
次の図は、INDIA_SALESのエントリを示す「BI Publisherのプロパティ」ダイアログを表示するテンプレートの2つのフィールドを示しています。
実行時に、フィールドは次のように表示されます。
次に示すシンプルな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'?>
次の図は、達成できるサンプル出力を示しています。
「カレンダ」という用語は、発行レポートに表示されるカレンダ日付を指します。次のタイプがサポートされています。
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';?>
次の例は、この定義を使用して生成された出力を示します(ロケールはzh-TW、タイムゾーンはAsia/Taipeiに設定)。
プロファイル・オプション「XDO: カレンダ・タイプ」(XDO_CALENDAR_TYPE)を使用して、カレンダ・タイプを設定します。
注意: テンプレートで指定したカレンダ・タイプは、このプロファイル・オプションで設定したカレンダ・タイプより優先されます。
タイムゾーン情報は、次の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'?>
BI Publisherでは、通常はサーバーで使用できない外部フォントを出力で使用できます。新規フォントをレポート出力に設定するには、クライアント・マシンでそのフォントを使用してテンプレートを設計し、次に、そのフォントをサーバーで使用可能にして、実行時にそのフォントにアクセスできるようにBI Publisherを構成します。
注意: 外部フォントは、PDF出力のみでサポートされています。
フォントをテンプレートで使用します。
フォントを<WINDOWS_HOME>/fontsディレクトリにコピーします。
Microsoft Wordを開き、テンプレートを作成します。
フォントをテンプレートに挿入します。テキストまたはフォーム・フィールドを選択し、任意のフォントをフォント・ダイアログ・ボックス(「Format」→「Font」)またはフォント・ドロップダウン・リストから選択します。
次の図に、フォーム・フィールド・メソッドおよびテキスト・メソッドの例を示します。
ORACLE_HOME/common/fontsディレクトリのBI Publisherサーバーにフォントを配置します。
注意: 定義済フォントは、Oracle Business Intelligence OracleのホームのORACLE_HOME/common/fontsに配置されています。フォントの位置はXDO_FONT_DIR変数によって設定されます。ご利用の環境でこの変数が設定されていない場合は、フォントは$JAVA_HOME/jre/lib/fontsに配置されます。
BI Publisherのfontプロパティを設定します。
レポートのfontプロパティは、BI Publisherの「フォント・マッピング」ページか構成ファイルで設定できます。
「フォント・マッピング」ページでプロパティを設定するには:
「フォント・マッピング」ページでプロパティを設定するには、レポート・エディタでレポートを開き、「プロパティ」をクリックしてから「フォント・マッピング」をクリックします。「レポート・プロパティの構成」を参照してください。
構成ファイルへのプロパティの設定
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構成ファイルに関する項を参照してください。
ここで、レポートを実行すると、BI Publisherでは、出力で指定したフォントが使用されます。PDF出力の場合は、BI Publisherの拡張フォント処理機能によって、外部フォントの絵文字が最終出力に直接埋め込まれます。文書で必要な絵文字が含まれるのは埋め込まれたフォントのみで、フォント定義自体には含まれません。したがって、文書に必要な要素はすべて備わっているため、外部フォントをプリンタにインストールする必要はありません。
BI Publisherには、次のバーコードが付属しています。
フォント・ファイル | サポートされているアルゴリズム |
---|---|
128R00.TTF | code128a、code128bおよびcode128c |
B39R00.TTF | code39、code39mod43 |
UPCR00.TTF | upca、upce |
事前パッケージ済フォントの1つを使用する場合、BI Publisherでは、バーコード・フォントを出力文書のデータに適用する前に、データに対して前処理を実行します。たとえば、書式を設定する前には、データのチェックサム値やスタート・ビットとエンド・ビットを計算します。
設計時には、Microsoft Wordのフィールドにバーコード・フォントを適用する必要はありません。かわりに、BI Publisherのフォント・マッピングを使用して、フィールドに適用するフォントをマップできます。実行時に、BI Publisherはフォント・マッピングで指定したベース・フォントを使用して、任意のフィールドにバーコード・フォントを適用します。テンプレートの他の場所で使用されていないフォントを選択してください。フォント・マッピングの詳細は、「レポート・プロパティの構成」を参照してください。
Microsoft Wordでフォントを直接使用する場合、適切な.TTFファイルをC:\WINDOWS\Fontsディレクトリに追加します。Template Builderのプレビュー機能を使用するには、Template Builderの構成ファイルでフォントをマップします。詳細は、「BI PublisherのTemplate Builder用フォントの構成」を参照してください。
レポート出力でこれらを使用するには、次を実行します。
テンプレートにおいて、レポート出力でバーコードを表示する場所にフィールドを挿入します。
フォーム・フィールドで、次のコマンドを入力します。
<?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'?>
Microsoft Wordで、フォントをフィールドに適用します。クライアント・マシンにバーコード・フォントをインストールしていない場合は、Bookmanなど、テンプレートの他の場所で使用されていないフォントを選択します。
「フォント・マッピング」ページでフォントを構成します。「フォント・マッピング」ページの詳細は、「レポート・プロパティの構成」を参照してください。次に示すのは、「フォント・マッピング」ページの図です。
次の点に注意してください。
バーコード・フォントがクライアントにインストールされている場合でも、Microsoft Wordによって適切に表示されない場合があります。この問題を回避するには、別のフォントをフィールドに適用し、前述のようにフォントをマップします。
upcaアルゴリズムは、UPC-Aメッセージ文字列のみを受け入れて、UPC-Aバーコードへとエンコードします。
12文字の文字列は、検査数字付のUPC-Aメッセージとして処理されます。11文字には検査数字がありません。
upceアルゴリズムは、UPC-Eメッセージ文字列だけを受け入れて、UPC-Eバーコードへとエンコードします。
8文字の文字列は、前部と後部の両方にガード・バーを持つUPC-Eメッセージとして処理されます。6文字の文字列にはガード・バーがありません。
上に示したバーコード・フォントの1つを使用しない場合は、この手順を使用してカスタム・バーコードを実装します。
BI Publisherには、バーコード・フォントを出力文書のデータに適用する前に、データに対して前処理を実行する機能があります。たとえば、データの書式を設定する前には、そのデータのチェックサム値やスタート・ビットとエンド・ビットの計算が必要な場合があります。
このソリューションでは、BI Publisherにバーコードのエンコーディング・クラスを登録する必要があります。それを実行時にインスタンス化してテンプレートで書式設定を実行できます。これについては、Oracle Fusion Middleware Oracle Business Intelligence Publisher管理者ガイド の高度なバーコード・フォントの書式設定クラスの実装に関する項で説明されています。
テンプレートで書式設定機能を有効にするには、テンプレート内で2つのコマンドを使用する必要があります。1つ目は、バーコード・エンコーディング・クラスをBI Publisherに登録するコマンドです。この登録は、エンコーディング・コマンドより前にテンプレートで宣言する必要があります。2つ目は、書式を設定するデータを識別するためのエンコーディング・コマンドです。
次の構文をテンプレートのフォーム・フィールドで使用して、バーコード・エンコーディング・クラスを登録します。
<?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です。
データを書式設定するには、次の構文をテンプレートのフォーム・フィールドで使用します。
<?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メソッドがコールされ、最終出力のデータにバーコード・フォントが適用されます。
BI Publisher構文は、XSL命令を単純化したものです。この構文は、テンプレートで使用する従来のXSLコマンドとともに、実行時にXSL-FOに変換されます。変換されたスタイル・シート内のこれらの命令の配置によって、テンプレートの動作が決定されます。
BI PublisherのRTFプロセッサでは、最も一般的なコンテキストに従って、XSL-FOスタイルシート内にこれらの命令が配置されます。ただし、特定の動作を作成するために、命令のコンテキストを別の方法で定義する必要がある場合もあります。この要件をサポートするために、BI Publisherには、処理命令のコンテキスト(配置)を定義できる一連のコンテキスト・コマンドが用意されています。たとえば、コンテキスト・コマンドを使用すると、次の処理を実行できます。
表にif文を指定して、セル、行、列または表全体を参照できます。
for-eachループを指定して、(新規ヘッダーとフッターの作成、およびページ番号付けの再開始のため)現行データまたはセクション全体のいずれかを繰り返すことができます。
現在のループまたは文書の先頭に変数を定義できます。
コンテキストは、BI Publisher構文を使用した処理コマンド、およびXSL固有の構文を使用した処理コマンドの両方に指定できます。
簡略化されたBI Publisher構文を使用した処理コマンドに対してコンテキストを指定するには、@contextを構文命令に追加します。例:
<?for-each@section:INVOICE?>: グループINVOICEの出現ごとに新規セクションを開始することを指定します。sectionコンテキストを追加すると、ヘッダーとフッターおよびページ番号をリセットできます。
ページ番号付けを再開しない場合は、@sectionコマンドの後に<?initial-page-number:'auto'?>コマンドを追加してセクション全体でページ番号付けを継続します。
<?if@column:VAT?>: if文をVAT列にのみ適用することを指定します。
XSLコマンドに対してコンテキストを指定するには、タグにxdofo:ctx="context"属性を追加して、命令の挿入に対するコンテキストを指定します。コンテキストの値によって、コードが配置される場所が決まります。
例:
<xsl:for-each xdofo:ctx="section" select ="INVOICE">
<xsl:attribute xdofo:ctx="inblock" name="background-color">red</xsl:attribute>
BI Publisherでは、次のコンテキスト・タイプがサポートされます。
コンテキスト | 説明 |
---|---|
section | 文は、ヘッダーおよびフッターを含めてセクション全体に影響を与えます。たとえば、for-each@sectionコンテキスト・コマンドでは、出現箇所ごとに、再開始されたページ番号およびヘッダーとフッターを使用して新規セクションが作成されます。 <?initial-page-number:'auto'?>コマンドを使用することで、セクション全体で連続的なページ番号付けを維持できます。 この使用方法の例は、「バッチ・レポート」を参照してください。 |
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 |
属性 | inline |
call-template | inblock |
choose | block |
for-each | block |
if | block |
import | begin |
param | begin |
sort | incontext |
template | end |
value-of | inline |
variable | end |
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つの文グループ内で使用されている場合は、その前の文で使用された参照ポイントが使用されます。
すでに述べたように、2本のスラッシュ(//)を使うと、ドキュメント内の位置にかかわらず、すべての一致する要素が取得されます。このため、パフォーマンスを改善するのに必要な場合のみ、2本のスラッシュ(//)を使用する必要があります。
現行要素と親要素を選択するために、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:ネームスペース名= ネームスペースのurl?>
例:
<?namespace:fsg=http://www.oracle.com/fsg/2002-30-20/?>
一度宣言すると、プレースホルダ・マークアップにネームスペースを使用できます。例: <?fsg:ReportName?>
テンプレートで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固有のformat-number関数では、次の基本書式が使用されます。
format-number(number,format,[decimalformat])
パラメータ | 説明 |
---|---|
number | 必須。書式設定する数値を指定します。 |
format | 必須。書式パターンを指定します。次の文字を使用してパターンを指定します。
|
decimalformat | オプション。10進書式の詳細は、基本的なXSLTマニュアルを参照してください。 |
Microsoft Wordのフォーム・フィールド内でFO固有の構文を使用できます。
XSL-FOの詳細は、W3CのWebサイトhttp://www.w3.org/2002/08/XSLFOsummary.htmlを参照してください。
BI PublisherでサポートされるFO要素の全リストは、付録の「サポートされているXSL-FO要素」を参照してください。
BI Publisherでは、RTFテンプレートをPowerPointの出力として生成することができます。これにより、レポート・データを主要なビジネスのプレゼンテーションに使用できます。現時点では、生成されるPowerPointドキュメントは、書式付きデータとチャートがPowerPointに単純にエクスポートされたものになります。
PowerPointに出力して作業する場合、次のような制限があります。
PowerPointスライド用に表を設計する場合、表の境界線タイプを単一の実線で定義する必要があります(二重線、点線やその他のタイプはサポートされていません)。
ハイパーリンクはサポートされていません。
図形はサポートされていません。
右揃えを使用すると、テキストの位置が若干ずれる場合があります。
用紙サイズはRTFテンプレートのすべてのページで同じにする必要があります。同じドキュメントで異なる用紙サイズを組み合せることはできません。
双方向の言語はサポートされていません。
中国語、日本語および韓国語のフォントでは、太字や斜体を文字で使用すると、文字の位置が若干ずれる場合があります。これは、太字や斜体のフォントがない場合、Microsoft製品では太字や斜体のエミュレーションを使用するためです。
双方向の言語を除いてすべてのUnicode言語がサポートされています。
BI Publisherのフォント代替メカニズムは、PowerPointテンプレートではサポートされていません。インストールされていないフォントを使用する場合、BI Publisherで構成するようにしてください。
次に、PowerPointに出力するためにRTFテンプレートを設計する場合に役立つガイドラインを示します。
PowerPointの出力は、RTFテンプレートで定義されたページ方向(縦向きまたは横向き)が維持されます。ほとんどのプレゼンテーションは横向きなので、RTFテンプレートの方向もこれに合せることをお薦めします。
RTFテンプレートに改ページがあると、新しいスライドが生成されます。
スライドの背景色は常に白色に生成されます。別の背景色にする場合、PowerPointファイルが生成された後に色を変更する必要があります。
ページ・ヘッダーまたはフッターの文字を強調表示する場合、フォントがxdo.cfgで事前に定義されていない場合は、「<?」と「?>」をテンプレートに含めて「<?XXXXXX?>」のようにタグ全体のフォントを指定します。
BI Publisherは、PowerPoint2007出力で表示される特定のチャート・タイプの従来のPowerPointチャートをサポートしています。チャートがネイティブ・チャートとして挿入された場合は、PowerPointで変更できます。チャートがネイティブ・チャートとして挿入されていない場合は、BI Publisherは、更新できないPNGイメージを挿入します。
次のチャート・タイプは、PowerPoint2007出力でネイティブのPowerPointチャートとして表示できます。
円
ドーナツ
線
面グラフ
レーダー
バブル
パレート
組合せ
株価
PowerPointでネイティブでないチャート・タイプは棒グラフに変換されます(ゲージやファンネルなど)。
デフォルトでは、ネイティブ・チャートの挿入が有効化されています。レポートのネイティブ・チャート挿入を無効にするには、「PPTXネイティブ・チャート・サポートの有効化」レポート・プロパティをfalseに設定します。詳細は、「レポート処理および出力文書のプロパティの設定」を参照してください。
「PPTXネイティブ・チャート・サポートの有効化」をfalseに設定すると、すべてのチャートはPowerPoint2007出力のイメージとして表示されます。そのため、ネイティブでないチャート・タイプがレポートに含まれている場合にかぎり、このオプションをfalseに設定してください。
PowerPoint出力のサポートでは、BI Publisherにおいて他のタイプの出力に使用されるフォント代替メカニズムは含まれていません。テンプレートに標準でないフォントが使用されている場合、RTFテンプレートで使用する各フォントを、PowerPointで出力を生成できるようにBI Publisherサーバーを構成する必要があります。これらのフォントをBI Publisherサーバーにコピーして、RTFテンプレートのフォント・マッピングを定義する必要があります。システム全体か個々のレポートに対してこれを実行できます。詳細は、「フォント・マッピングの定義」を参照してください。
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のエンコーディングで保存し、定義されたフォントごとに絶対フルパスを明記する必要があります。そうしないと、文字が重なったり折返しが正常に動作しないなどの問題が発生します。
C:\Oracle\BI Publisher\BI Publisher Desktop\Template Builder for Word\config\にナビゲートします。
xdo.cfgファイルを開き、フォント・マッピングを更新します。xdo.cfgファイルでフォント・マッピングを直接更新する方法の詳細は、Oracle Fusion Middleware Oracle Business Intelligence Publisher管理者および開発者ガイドのフォント定義に関する項を参照してください。
xdo.cfgをUTF-8フォーマットで保存します。
次の図は、xdo.cfgファイルの例を示します。
Copyright © 2010, 2011, Oracle and/or its affiliates. All rights reserved.