ヘッダーをスキップ

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

データ・テンプレートの作成

概要

BI Publisherのデータ・エンジンでは、データベースに対してあらゆる種類のXMLデータ構造をスケーラブルかつ効率的な方法で迅速に生成します。データ・テンプレートという手段により、データ・エンジンにデータの要求を送信します。データ・テンプレートはXML文書であり、データ・エンジンがテンプレートを処理してXMLを生成する方法を、XML文書の要素が一括して定義します。

データ・エンジンでは、次の機能をサポートしています。

データ・エンジンにより生成されるXML出力では、次の要素がサポートされています。

データ・テンプレート定義

データ・テンプレートは、パラメータの定義、トリガーの定義、データ問合せの定義、データ構造の定義という4つの基本セクションで構成されるXML文書です。次の図に、この構造を示します。

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

サンプル図に示すように、データ・テンプレートは、<parameters>セクション、<dataQuery>セクションおよび<dataStructure>セクションで構成されています。<parameters>セクションでは、パラメータが子<parameter>要素で宣言されています。<dataQuery>セクションでは、SQL問合せが子<sqlStatement>要素で定義されています。<dataStructure>セクションでは、出力XML構造が定義されています。

次の表に、XMLデータ・テンプレートを構成する要素をリストしています。各要素について、以降の各項で詳細に説明しています。必須要素にはその旨を記しています。

要素 属性/説明
dataTemplate(必須) 属性:
  • name(必須)

  • description

  • version(必須)

  • defaultPackage: テンプレートで定義された字句参照、グループ・フィルタまたはデータ・トリガーを解決するPL/SQLパッケージ名です。

  • dataSourceRef: (必須)データ・テンプレート全体のデフォルトのデータソース参照です。

properties XML出力およびデータ・エンジン固有のプロパティをサポートする1つ以上の<property>要素で構成されます。
property 属性:
  • name(必須): プロパティ名です。

  • value: このプロパティの有効な値です。

parameters 1つ以上の<parameter>要素で構成されます。
parameter 属性:
  • name(必須): テンプレートで参照されるパラメータ名です。

  • dataType: 有効な値は"character"、"date"、"number"です。

  • defaultValue: データから値が指定されない場合にパラメータに使用する値です。

  • include_in_output: XML出力に表示するかどうかを指定します。有効な値は“true”および“false”です。

lexicals (Oracle E-Business Suiteに対する問合せでのみサポート)フレックスフィールドをサポートする1つ以上の字句要素で構成されます。
lexical キー・フレックスフィールド関連の字句には、次の4つのタイプがあります。
  • oracle.apps.fnd.flex.kff.segments_metadata

  • oracle.apps.fnd.flex.kff.select

  • oracle.apps.fnd.flex.kff.where

  • oracle.apps.fnd.flex.kff.order_by

dataQuery(必須) 1つ以上の<sqlstatement>または<xml>要素で構成されます。
sqlstatement(必須) 属性:
  • name(必須): 一意の問合せ識別子です。この名前識別子は、データ・テンプレート全体で同一になる点に注意してください。CDATAセクション内部に問合せを入力します。

xml 属性:
  • name(必須): 一意の問合せ識別子です。

  • expressionPath: Xpath式です。

url 属性:
  • method: GETまたはPOSTです。

  • realm: 認証名です。

  • username: 有効なユーザー名です。

  • password: 有効なパスワードです。

link 属性:
  • parentQuery: 親問合せ名を指定します。

  • parentColumn: 親列名を指定します。

  • childQuery: 子問合せ名を指定します。

  • childColumn: 子列名を指定します。

  • condition: 親列と子列の関連を定義するSQL演算子です。conditionでは次の値がサポートされています。=、<、<=、>、>=

dataTrigger 属性:
  • name(必須): このトリガーを起動するイベント名です。

  • source(必須): PL/SQLの<パッケージ名>.<ファンクション名>です。

dataStructure (複数問合せでは必須)出力XMLの構造を定義します。構造を指定する<group>要素および<element>要素で構成されます。このセクションは、単一問合せではオプションです。指定しない場合、データ・エンジンによりフラットXMLが生成されます。
group 1つ以上の<element>要素およびサブ<group>要素で構成されます。
  • name(必須): グループに割り当てられるXMLタグ名です。

  • source(必須): グループの要素が導出される、対応するsqlstatementの一意の問合せ識別子です。

  • groupFilter: 出力データ・グループ・セットに適用されるフィルタです。フィルタを次のように定義します。<パッケージ名>.<ファンクション名>

    注意: フィルタを適用するとパフォーマンスに影響します。必要でないかぎりこの機能は使用しないでください。可能な場合は、問合せでWHERE句を使用してデータをフィルタ処理してください。

element(必須) 属性:
  • name: XMLデータ出力内の要素に割り当てられるタグ名です。

  • value(必須): SQL文の列名です。列名が別のグループに含まれる集計の場合、この値は<グループ名>.<列/別名>の書式で定義する必要があるので注意してください。

  • function: サポートされるファンクションは次のとおりです。SUM()、COUNT()、AVG()、MIN()、MAX()

データ・テンプレートの作成

データ・テンプレートを作成するには、任意のテキスト・エディタまたはXMLエディタを使用できます。

データ・テンプレートの宣言

<dataTemplate>要素はルート要素です。<dataTemplate>タグ内に表わされる関連属性のセットがあります。

属性名 説明
name (必須)データ・テンプレート名を入力します。
description (オプション)このデータ・テンプレートの説明を入力します。
version (必須)このデータ・テンプレートのバージョン番号を入力します。
defaultPackage データ・テンプレートに、字句参照またはPL/SQLに対するその他のコールが含まれる場合、この属性は必須です。
dataSourceRef (必須)データ・テンプレート全体のデフォルトのデータソース参照です。

プロパティ・セクション

<properties>セクションでプロパティを設定すると、XML出力およびデータ・エンジンの実行に影響を与えられます。

例:

<properties>
   <property name="include_parameters" value="false" />
   <property name="include_null_Element" value="false" />
   <property name="include_rowsettag" value="false" />
   <property name="scalable_mode" value="on" />
</properties>

次の表に、サポートされているプロパティを示します。

プロパティ名 説明
include_parameters 出力にパラメータを含めるかどうかを示します。
有効な値は次のとおりです。
  • true(デフォルト)

  • false

include_null_Element 出力にnull要素を含めるかどうかを示します。
有効な値は次のとおりです。
  • true(デフォルト)

  • false

xml_tag_case 出力XMLの要素名の大文字/小文字を指定できます。
有効な値は次のとおりです。
  • upper(デフォルト)

  • lower

  • as_are(dataStructureセクションの定義に従って大文字と小文字が使用される)

db_fetch_size jdbc接続で一度にフェッチされる行数を設定します。デフォルト値は500です。
scalable_mode データ・エンジンがスケーラブル・モードで実行されるように設定します。これは大容量データを処理するときに必要です。
有効な値は次のとおりです。
  • on

  • off(デフォルト)

include_rowsettag 出力にRowsetタグをインクルードするかどうかを指定できます。
有効な値は次のとおりです。
  • true(デフォルト)

  • false

debug_mode デバッグ・モードをオンまたはオフにします。
有効な値は次のとおりです。
  • on

  • off(デフォルト)

パラメータ・セクション

パラメータは、実行時に値を設定できる変数です。パラメータは、SELECT文を変更したり、実行時にPL/SQL変数を設定する際に、特に便利です。データ・テンプレートのパラメータ・セクションはオプションです。

パラメータの定義方法

<parameter>要素は、<parameters>のオープン・タグとクローズ・タグの間に配置されます。<parameter>要素には、関連属性のセットが含まれます。これらの属性は、<parameter>タグ内で表されます。たとえば、name、dataTypeおよびdefaultValue属性は次のように表されます。

<parameters>
   <parameter name="dept" dataType="number" defaultValue="10"/>
</parameters>
属性名 説明
name 必須です。パラメータを識別する、指定のデータ・テンプレート内で一意のキーワードです。
dataType オプションです。パラメータのデータ型を"character"、"date"または"number"に指定します。デフォルト値は"character"です。
dataTypeが"date"の場合、次の3つの書式(標準ISO日付書式に基づく)がサポートされています。
  • YYYY-MM-DD(例: 1997-10-24)

  • YYYY-MM-DD HH24:MI:SS(例: 1997-10-24 12:00:00)

  • YYYY-MM-DDTHH24:MI:SS.FF3TZH:TZM

defaultValue オプションです。この値は、実行時にデータから他の値が指定されていない場合にパラメータに対して使用されます。
include_in_output オプションです。XML出力に表示するかどうかを指定します。有効な値は“true”および“false”です。

パラメータの受渡し方法

パラメータを渡すには(問合せを制限する場合など)、問合せにバインド変数を使用します。次に例を示します。

問合せ:

SELECT * FROM EMP
WHERE deptno=:department

実行時に、部門の値が問合せに渡されます。

SELECT * FROM EMP
WHERE deptno=10

データ問合せセクション

データ・テンプレートの<dataQuery>セクションは必須です。

サポートされている列タイプ

次の列の型を選択できます。

SQL問合せの定義方法

<sqlStatement>要素は、dataQueryのオープン・タグとクローズ・タグの間に配置されます。<sqlStatement>要素には、関連属性nameが含まれます。この属性は、<sqlStatement>タグ内で表されます。問合せはCDATAセクションに入力されます。次に例を示します。

<dataQuery>
  <sqlStatement name="Q1">
  <![CDATA[SELECT DEPTNO,DNAME,LOC from dept]]>
  </sqlStatement>
</dataQuery>
属性名 説明
name 問合せの一意の識別名です。この名前は、データ・テンプレート全体を通して参照される点に注意してください。

列名が一意でない場合、SELECT文で別名を使用し、列名を一意にする必要があります。別名を使用しない場合、デフォルトの列名が使用されます。これは、dataStructureセクションでXML出力を指定する際に重要となります。問合せから出力XML要素を指定するには、elementタグについてソース列に対応するvalue属性を宣言します。

ヒント: データ・テンプレートまたはPL/SQLよりも、SQLで操作を実行する方が簡単です。次の操作ではSQLを使用することをお薦めします。

XMLデータソースの定義方法

<xml>要素は、dataQueryのオープン・タグとクローズ・タグの間に配置します。<xml>要素には、一意の識別子であるname関連属性と、SQL問合せおよびXMLデータをリンクするためのexpressionPathという関連属性があります。SQL問合せとXMLデータをリンクすると、集計やサマリーなどの機能を使用できるようになります。

例:

<xml name="empxml" expressionPath=".//ROW[DEPTNO=$DEPTNO]">
<url method="GET" realm="" username="" password="">file:///d:/dttest/employee.xml</url>
</xml> 

字句参照

字句参照を使用して、SELECT、FROM、WHERE、GROUP BY、ORDER BYまたはHAVINGの後にくる句を置換できます。実行時にパラメータで複数の値を置換する場合は字句参照を使用します。

次の構文を使用して字句参照を作成します。

&parametername

次のように字句パラメータを定義します。

例:

Package employee
AS
 where_clause varchar2(1000);
  .....

Package body employee
 AS
 .....
where_clause := 'where deptno=10';
.....

データ・テンプレート定義:

<dataQuery>
 <sqlstatement name="Q1">
 <![CDATA[SELECT ENAME, SAL FROM EMP &where_clause]]>
</sqlstatement>
</dataQuery>

問合せ間にデータ・リンクを定義する方法

複数の問合せがある場合、これらをリンク付けして適切なデータ出力を作成する必要があります。データ・テンプレートでは、問合せのリンク付けには、バインド変数を使用する方法と、<link>要素を使用して問合せ間にリンクを定義する方法の2つがあります。

ヒント: データ・テンプレートでデータ問合せを作成する際のパフォーマンスを最大限にするには、次のテスト結果を参考にしてください。

BI Publisherテストでは、リンク・タグを使用するよりもバインド変数を使用した方が効率的であることが示されています。

次の例では、バインド変数を使用した問合せリンクを示します。

<dataQuery>
 <sqlstatement name="Q1">
 <![CDATA[SELECT EMPNO, ENAME, JOB from EMP
   WHERE DEPTNO = :DEPTNO]]>
 </sqlstatement>
</dataQuery>

<link>要素には属性セットが含まれます。これらの属性を使用して、必須リンク情報を指定します。任意の数のリンクを指定できます。次に例を示します。

<link name="DEPTEMP_LINK" parentQuery="Q1" parentColumn="DEPTNO" childQuery="Q_2" childColumn="DEPARTMENTNO"/>
属性名 説明
name 必須です。リンクの一意の名前を入力します。
parentQuery 親問合せ名を指定します。この名前は、対応する<sqlstatement>要素に割り当てた名前である必要があります。「問合せの定義方法」を参照してください。
parentColumn 親列名を指定します。
childQuery 子問合せ名を指定します。この名前は、対応する<sqlstatement>要素に割り当てた名前である必要があります。「問合せの定義方法」を参照してください。
childColumn 子列名を指定します。

データ・トリガーの使用

データ・トリガーは、XML出力の実行および生成時に、特定の時点でPL/SQLファンクションを実行します。これらのトリガーにPL/SQLの条件付き処理機能を使用することで、初期化タスクの実行およびデータベースへのアクセスなどの操作を実行できます。

データ・トリガーはオプションであり、必要数の<dataTrigger>要素を使用できます。

<dataTrigger>要素には、関連属性のセットが含まれます。これらの属性は、<dataTrigger>タグ内で表されます。たとえば、nameおよびsource属性は次のように表されます。

<dataTrigger name="beforeReport" source="employee.beforeReport()"/>
<dataTrigger name="beforeReport" source="employee.beforeReport(:Parameter)"/>
属性名 説明
name このトリガーを起動するイベント名です。
source 実行可能ファイル・コードが含まれるPL/SQLの<パッケージ名>.<ファンクション名>です。

トリガーの位置は、トリガーが起動されるポイントを示します。

データ構造セクション

データ構造セクションでは、XML出力の内容とその構成方法を定義します。全グループ階層が出力に使用できます。各グループ内のすべての列を指定し、これらの列の順序を変更できます。つまり、要約およびプレースホルダを使用して、グループ内部でさらにカスタマイズできます。dataStructureセクションは、複数の問合せには必須であり、単一の問合せにはオプションです。単一の問合せで省略した場合、データ・エンジンによりフラットXMLが生成されます。

グループ階層の定義

データ・テンプレートでは、<dataStructure>のオープン・タグおよびクローズ・タグの間に<group>要素が配置されます。各<group>には関連要素のセットが含まれます。グループ階層を定義し、XML出力の要素タグに名前を付けることができます。

ブレーク・グループの作成

小計を算出し、プレースホルダ列を追加するには、ブレーク・グループを使用します。ブレーク・グループにより、連続するレコード内の重複する値が非表示になります。重複する値を非表示にするには、SQL問合せにORDER BY句を設定する必要があります。

グループに名前を割り当て、ソース問合せを宣言してから、そのグループに含める要素を指定します。要素を指定するときは、XML出力タグ名として使用される名前を要素に割り当て、ソース列を値として宣言します。名前を割り当てない場合、値(またはソース列名)がタグ名として使用されます。

例:

<dataStructure>
    <group name="G_DEPT" source="Q1" ">
        <element name="DEPT_NUMBER" value="DEPTNO"  />
        <element name="DEPT_NAME"   value="DNAME"/>
         <group name="G_EMP" source="Q2">
                <element name="EMPLOYEE_NUMBER" value="EMPNO" />
                <element name="NAME" value="ENAME"/>
                <element name="JOB" value="JOB" />
         </group>
     </group>
   </dataStructure>

次の表に、<group>要素タグの属性をリストしています。

属性名 説明
name グループに一意の名前を指定します。この名前は、グループの出力XMLタグ名として使用されます。
source グループにソース・データを提供する問合せの名前です。ソースは、<sqlStatement>要素のname属性に基づいている必要があります。

次の表に、<element>要素タグの属性をリストしています。

属性名 説明
name 要素の名前を指定します。この名前は、要素の出力XMLタグ名として使用されます。名前はオプションです。名前を指定しない場合、ソース列名がXMLタグ名として使用されます。
value (問合せの)要素にソース・データを提供する列の名前です。

グループ・フィルタの適用

抽出内容からレコードを除外する場合、グループ・フィルタではなくWHERE句を使用することをお薦めします。フィルタを使用すると、問合せで選択されたレコードを条件付きで削除できますが、この方法はパフォーマンスに影響します。グループには、PL/SQLを使用してユーザー作成フィルタを含めることができます。

PL/SQLファンクションは、ブール値(TRUEまたはFALSE)を戻す必要があります。ファンクションがTRUEとFALSEのどちらを戻すかによって、現行のレコードがXMLデータ出力に含められるか、または除外されます。

たとえば、PL/SQLファンクションのサンプルは次のようになります。

function G_EMPFilter return boolean is
begin
  if sal < 1000 then
    return (FALSE);
  else
    return (TRUE);
end if;
end;

データ・テンプレート定義のグループ・フィルタの例を次に示します。

<group name="G_DEPT" source="Q1" groupFilter="empdata.G_EMPFilter(:DEPTSAL)">
   <element name="DEPT_NUMBER" value="DEPTNO"  />
   <element name="DEPT_NAME"   value="DNAME"/>
   <element name="DEPTSAL"     value="G_EMP.SALARY" function="SUM()"/>

集計列の作成

集計列では、別の列のデータについて計算が実行されます。<element>タグのfunction属性を使用して、合計、平均、カウント、最小値および最大値の集計を作成できます。

集計列を作成するには、elementタグで次の3つの属性を定義する必要があります。

属性 説明
name XMLデータ出力で使用されるXMLタグ名です。
source 集計計算が実行されるデータが含まれる列の名前です。ソース列は変更されません。
function 実行される集計関数です。タイプにより、集計列値の計算方法がXDOデータ・エンジンに伝えられます。有効な値は次のとおりです。SUM()、AVG()、COUNT()、MAX()およびMIN()

ブレーク・グループにより、集計列の値をリセットするタイミングが決定されます。次に例を示します。

<group name="G_DEPT" source="Q1">
   <element name="DEPT_NUMBER" value="DEPTNO"  />
   <element name="DEPTSAL" value="G_EMP.SALARY" function="SUM()"/>
       <group name="G_EMP" source="Q2">
          <element name="EMPLOYEE_NUMBER" value="EMPNO" />
          <element name="NAME" value="ENAME"/>
          <element name="JOB" value="JOB" />
          <element name="SALARY" value="SAL"/>
        </group>
</group>

フレックスフィールドのサポート

注意: この項は、Oracle Applicationsデータベースに問い合せる目的で記述されたデータ・テンプレートに適用されます。

フレックスフィールドは、字句パラメータを使用してデータ・テンプレート内に定義されます。

フレックスフィールドの定義方法

  1. レポート・データに使用するSELECT文を定義します。

  2. SELECT文の内部で、各フレックスフィールドを字句として定義します。SELECT文にフレックスフィールド関連字句を埋め込むには、&LEXICAL_TAGを使用します。

  3. データ・テンプレートにXMLタグを使用して、フレックスフィールド関連字句を定義します。

<dataTemplate ...
     <parameters ...
     </parameters>

      <lexicals ...
         <lexical type="oracle.apps.fnd.flex.kff..."
                  name="<Name of the lexical>"
                  comment="<comment>"
                   />
         <lexical type="oracle.apps.fnd.flex.kff..."
                   name="<Name of the lexical>"
                   comment="<comment>"
                   />
        </lexicals>

        <dataQuery>
           <sqlStatement ...

              SELECT &FLEX_SELECT flex_select_alias
              FROM some_table st, code_combination_table cct
              WHERE st.some_column = 'some_condition'
                    AND &FLEX_WHERE
              ORDER BY st.some_column, &FLEX_ORDER_BY
            </sqlStatement>
         </dataQuery>
         <dataStructure .../>

</dataTemplate>

フレックスフィールド字句

KFF関連字句には、次の4つのタイプがあります。

各タイプのKFF字句の説明を次に示します。

oracle.apps.fnd.flex.kff.segments_metadata

フレックスフィールド関連メタデータを取得するには、このタイプの字句を使用します。この字句を使用する場合、このメタデータの取得にPL/SQLコードを作成する必要はありません。そのかわり、ダミーSELECT文を定義してから、この字句を使用してメタデータを取得します。

この字句のXML構文は次のとおりです。

<lexicals>
  <lexical
    type="oracle.apps.fnd.flex.kff.segments_metadata"
    name="Name of the lexical"
    comment="Comment"
    application_short_name="Application Short Name of the KFF"
    id_flex_code="Internal code of the KFF"
    id_flex_num="Internal number of the KFF structure"
    segments="For which segment(s) is this metadata requested?"
    show_parent_segments="Should the parent segments be listed?"
    metadata_type="Type of metadata requested"/>
</lexicals>

次の表に、segements_metadata字句の属性をリストしています。

属性 説明
application_short_name (必須)キー・フレックスフィールドのアプリケーション短縮名です。例: SQLGL
id_flex_code (必須)キー・フレックスフィールドの内部コードです。例: GL#
id_flex_num (必須)キー・フレックスフィールド体系の内部番号です。例: 101
segments (オプション)このデータが要求されるセグメントを識別します。デフォルト値は"ALL"です。構文については、『Oracle Applications開発者ガイド』を参照してください。
show_parent_segments (オプション)有効な値は"Y"および"N"です。デフォルト値は"Y"です。依存セグメントが表示される場合、セグメント属性に表示されるものとして指定されていなくても、親セグメントが自動的に表示されます。
metadata_type (必須)要求されるメタデータのタイプを識別します。有効な値は次のとおりです。
above_prompt: セグメントの上プロンプト。
left_prompt: セグメントの左プロンプト。

この例では、GL貸借一致セグメントのabove_promptおよびGL勘定科目セグメントのleft_promptを要求する方法を示しています。

SELECT &FLEX_GL_BALANCING_APROMPT alias_gl_balancing_aprompt, &FLEX_GL_ACCOUNT_LPROMPT alias_gl_account_lprompt
FROM dual

<lexicals>
  <lexical type="oracle.apps.fnd.flex.kff.segments_metadata"
   name="FLEX_GL_BALANCING_APROMPT"
   comment="Comment"
   application_short_name="SQLGL"
   id_flex_code="GL#"
   id_flex_num=":P_ID_FLEX_NM"
   segments="GL_BALANCING"
   metadata_type="ABOVE_PROMPT"/>
  <lexical type="oracle.apps.fnd.flex.kff.segments_metadata"
   name="FLEX_GL_ACCOUNT+LPROMPT"
   comment="Comment"
   application_short_name="SQLGL"
   id_flex_code="GL#"
   id_flex_num=":P_ID_FLEX_NUM"
   segments="GL_ACCOUNT"
   metadata_type="LEFT_PROMPT"/>
</lexicals>

oracle.apps.fnd.flex.kff.select

このタイプの字句は、文のSELECTセクションで使用されます。これは、字句定義に基づき、キー・フレックスフィールド(kff)コード組合せ関連データの取得および処理に使用されます。

構文は次のとおりです。

<lexicals>
   <lexical
      type="oracle.apps.fnd.flex.kff.select"
      name="Name of the lexical"
      comment="Comment"
      application_short_name="Application Short Name of the KFF"
      id_flex_code="Internal code of the KFF"
      id_flex_num="Internal number of the KFF structure"
      multiple_id_flex_num="Are multiple structures allowed?"
      code_combination_table_alias="Code Combination Table Alias"
      segments="Segments for which this data is requested"
      show_parent_segments="Should the parent segments be listed?"
      output_type="output type"/>
</lexicals>

次の表に、この字句の属性をリストしています。

属性 説明
application_short_name (必須)キー・フレックスフィールドのアプリケーション短縮名です。例: SQLGL
id_flex_code (必須)キー・フレックスフィールドの内部コードです。例: GL#
id_flex_num (条件に応じて必須)キー・フレックスフィールド体系の内部番号です。例: 101。MULTIPLE_ID_FLEX_NUMが"N"の場合は必須です。
multiple_id_flex_num (オプション)この字句が複数の体系をサポートしているかどうかを示します。有効な値は"Y"および"N"です。デフォルトは"N"です。"Y"に設定した場合、フレックスでは、すべての体系が潜在的にデータ・レポートに使用されており、体系番号の取得に<code_combination_table_alias>.<set_defining_column_name>が使用されることが前提となります。
code_combination_table_alias (オプション)セグメント列名にこの別名が付加されます。
segments (オプション)このデータが要求されるセグメントを識別します。デフォルト値は"ALL"です。構文については、『Oracle Applications開発者ガイド』を参照してください。
show_parent_segments (オプション)有効な値は"Y"および"N"です。デフォルト値は"Y"です。依存セグメントが表示される場合、セグメント属性に表示されるものとして指定されていなくても、親セグメントが自動的に表示されます。
output_type (必須)レポート値として使用される必要がある出力の種類を示します。有効な値は次のとおりです。
value: ユーザーに表示されるセグメント値。
padded_value: ユーザーに表示される埋込みセグメント値。Number型の値は左側から空白が埋め込まれます。String型の値は右側に空白が埋め込まれます。
description セグメント定義で定義された説明サイズを上限とする、セグメント値の説明です。
full_description セグメント値の説明(フル・サイズ)です。
security 現在の組合せが現在のユーザーに対して保護されている場合はYが戻されます。保護されていない場合はNが戻されます。

この例では、単一の体系について、連結値、連結摘要、GL貸借一致セグメントの値およびGL貸借一致セグメントの完全な説明をレポートする方法を示しています。

SELECT &FLEX_VALUE_ALL alias_value_all,
      &FLEX_DESCR_ALL alias_descr_all,
      &FLEX_GL_BALANCING alias_gl_balancing,
      &FLEX_GL_BALANCING_FULL_DESCR alias_gl_balancing_full_descr,
      ...
       FROM gl_code_combinations gcc,
            some_other_gl_table sogt
      WHERE gcc.chart_of_accounts_id = :p_id_flex_num
        and sogt.code_combination_id = gcc.code_combination_id
       and <more conditions on sogt>


 <lexicals>
    <lexical
       type="oracle.apps.fnd.flex.kff.select"
       name="FLEX_VALUE_ALL"
       comment="Comment"
       application_short_name="SQLGL"
       id_flex_code="GL#"
       id_flex_num=":P_ID_FLEX_NUM"
       multiple_id_flex_num="N"
       code_combination_table_alias="gcc"
       segments="ALL"
       show_parent_segments="Y"
       output_type="VALUE"/>
    <lexical
       type="oracle.apps.fnd.flex.kff.select"
       name="FLEX_DESCR_ALL"
       comment="Comment"
       application_short_name="SQLGL"
       id_flex_code="GL#"
       id_flex_num=":P_ID_FLEX_NUM"
       multiple_id_flex_num="N"
       code_combination_table_alias="gcc"
       segments="ALL"
       show_parent_segments="Y"
       output_type="DESCRIPTION"/>
    <lexical
       type="oracle.apps.fnd.flex.kff.select"
       name="FLEX_GL_BALANCING"
       comment="Comment"
       application_short_name="SQLGL"
       id_flex_code="GL#"
       id_flex_num=":P_ID_FLEX_NUM"
       multiple_id_flex_num="N"
       code_combination_table_alias="gcc"
       segments="GL_BALANCING"
       show_parent_segments="N"
       output_type="VALUE"/>
    <lexical
       type="oracle.apps.fnd.flex.kff.select"
       name="FLEX_GL_BALANCING_FULL_DESCR"
       comment="Comment"
       application_short_name="SQLGL"
       id_flex_code="GL#"
       id_flex_num=":P_ID_FLEX_NUM"
       multiple_id_flex_num="N"
       code_combination_table_alias="gcc"
       segments="GL_BALANCING"
       show_parent_segments="N"
       output_type="FULL_DESCRIPTION"/>
 </lexicals>

oracle.apps.fnd.flex.kff.where

このタイプの字句は、文のWHEREセクションで使用されます。これは、キー・フレックスフィールド・セグメント・データに基づいてSELECT文がフィルタ処理できるようにWHERE句を変更する際に使用されます。

この字句の構文は次のとおりです。

<lexicals>
   <lexical
      type="oracle.apps.fnd.flex.kff.where"
      name="Name of the lexical"
      comment="Comment"
      application_short_name="Application Short Name of the KFF"
      id_flex_code="Internal code of the KFF"
      id_flex_num="Internal number of the KFF structure"
      code_combination_table_alias="Code Combination Table Alias"
      segments="Segments for which this data is requested"
      operator="The boolean operator to be used in the condition"
      operand1="Values to be used on the right side of the operator"
      operand2="High value for the BETWEEN operator"/>
</lexicals>

次の表に、この字句の属性をリストしています。

属性 説明
application_short_name (必須)キー・フレックスフィールドのアプリケーション短縮名です。例: SQLGL
id_flex_code (必須)キー・フレックスフィールドの内部コードです。例: GL#
id_flex_num (条件に応じて必須)キー・フレックスフィールド体系の内部番号です。例: 101。MULTIPLE_ID_FLEX_NUMが"N"の場合は必須です。
code_combination_table_alias (オプション)セグメント列名にこの別名が付加されます。
segments (オプション)このデータが要求されるセグメントを識別します。デフォルト値は"ALL"です。構文については、『Oracle Applications開発者ガイド』を参照してください。
operator (必須)有効な値は次のとおりです。
=、<、>、<=、>=、!=、<>、||、BETWEEN、LIKE
operand1 (必須)条件演算子の右側に使用される値です。
operand2 (オプション)BETWEEN演算子の上限値です。
full_description セグメント値の説明(フル・サイズ)です。
security 現在の組合せが現在のユーザーに対して保護されている場合はYが戻されます。保護されていない場合はNが戻されます。

この例では、GL勘定科目セグメントおよびGL貸借一致セグメントに基づくフィルタを示しています。

SELECT <some columns>
     FROM gl_code_combinations gcc,
          some_other_gl_table sogt
    WHERE gcc.chart_of_accounts_id = :p_id_flex_num
      and sogt.code_combination_id = gcc.code_combination_id
      and &FLEX_WHERE_GL_ACCOUNT
      and &FLEX_WHERE_GL_BALANCING
      and <more conditions on sogt>


<lexicals>
   <lexical
      type="oracle.apps.fnd.flex.kff.where"
      name="FLEX_WHERE_GL_ACCOUNT"
      comment="Comment"
      application_short_name="SQLGL"
      id_flex_code="GL#"
      id_flex_num=":P_ID_FLEX_NUM"
      code_combination_table_alias="gcc"
      segments="GL_ACCOUNT"
      operator="="
      operand1=":P_GL_ACCOUNT"/>
   <lexical
      type="oracle.apps.fnd.flex.kff.where"
      name="FLEX_WHERE_GL_BALANCING"
      comment="Comment"
      application_short_name="SQLGL"
      id_flex_code="GL#"
      id_flex_num=":P_ID_FLEX_NUM"
      code_combination_table_alias="gcc"
      segments="GL_BALANCING"
      operator="BETWEEN"
      operand1=":P_GL_BALANCING_LOW"
      operand2=":P_GL_BALANCING_HIGH"/>
</lexicals>

oracle.apps.fnd.flex.kff.order_by

このタイプの字句は、文のORDER BYセクションで使用されます。この字句では、出力結果をフレックス・セグメント値によりソートできるように列の式のリストが戻されます。

この字句の構文は次のとおりです。

<lexicals>
  <lexical
   type="oracle.apps.fnd.flex.kff.order_by"
   name="Name of the lexical"
   comment="Comment"
   application_short_name="Application Short Name of the KFF"
   id_flex_code="Internal code of the KFF"
   id_flex_num="Internal number of the KFF structure"
   multiple_id_flex_num="Are multiple structures allowed?"
   code_combination_table_alias="Code Combination Table Alias"
   segments="Segment(s)for which data is requested"
   show_parent_segments="List parent segments?"/>
</lexicals>

次の表に、この字句の属性をリストしています。

属性 説明
application_short_name (必須)キー・フレックスフィールドのアプリケーション短縮名です。例: SQLGL
id_flex_code (必須)キー・フレックスフィールドの内部コードです。例: GL#
id_flex_num (条件に応じて必須)キー・フレックスフィールド体系の内部番号です。例: 101。MULTIPLE_ID_FLEX_NUMが"N"の場合は必須です。
multiple_id_flex_num (オプション)この字句が複数の体系をサポートしているかどうかを示します。有効な値は"Y"および"N"です。デフォルトは"N"です。"Y"に設定した場合、フレックスでは、すべての体系が潜在的にデータ・レポートに使用されており、体系番号の取得に<code_combination_table_alias>.<set_defining_column_name>が使用されることが前提となります。
code_combination_table_alias (オプション)セグメント列名にこの別名が付加されます。
segments (オプション)このデータが要求されるセグメントを識別します。デフォルト値は"ALL"です。構文については、『Oracle Applications開発者ガイド』を参照してください。
show_parent_segments (オプション)有効な値は"Y"および"N"です。デフォルト値は"Y"です。依存セグメントが表示される場合、セグメント属性に表示されるものとして指定されていなくても、親セグメントが自動的に表示されます。

次の例は、単一の体系KFFについて、GL勘定科目セグメントおよびGL貸借一致セグメントに基づいてソートされた結果を示しています。

SELECT <some columns>
       FROM gl_code_combinations gcc,
            some_other_gl_table sogt
      WHERE gcc.chart_of_accounts_id = :p_id_flex_num
        and sogt.code_combination_id = gcc.code_combination_id
        and <more conditions on sogt>
      ORDER BY <some order by columns>,
               &FLEX_ORDER_BY_GL_ACCOUNT,
               &FLEX_ORDER_BY_GL_BALANCING

     <lexicals>
        <lexical
           type="oracle.apps.fnd.flex.kff.order_by"
           name="FLEX_ORDER_BY_GL_ACCOUNT"
           comment="Comment"
           application_short_name="SQLGL"
           id_flex_code="GL#"
           id_flex_num=":P_ID_FLEX_NUM"
           code_combination_table_alias="gcc"
           segments="GL_ACCOUNT"
           show_parent_segments="Y"/>
        <lexical
           type="oracle.apps.fnd.flex.kff.order_by"
           name="FLEX_ORDER_BY_GL_BALANCING"
           comment="Comment"
           application_short_name="SQLGL"
           id_flex_code="GL#"
           id_flex_num=":P_ID_FLEX_NUM"
           code_combination_table_alias="gcc"
           segments="GL_BALANCING"
           show_parent_segments="N"/>
     </lexicals>

データ・エンジンJava APIの使用

この項では、Java APIを使用し、BI Publisher Enterpriseのユーザー・インタフェース外で、BI Publisherのデータ・エンジンを利用する方法について説明します。この項の説明は、インストレーション・ファイルに付属しているJavadocとあわせて参照してください。

Java APIからのデータ・テンプレートのコール

データ・エンジン・ユーティリティJava APIは、次のクラスで構成されています。

DataProcessorクラスは、BI Publisherデータ・エンジンでデータ・テンプレートを実行する際に使用するメイン・クラスです。このAPIを使用するには、このクラスをインスタンス化し、データ・テンプレート、接続および出力先のパラメータ値を設定する必要があります。パラメータを設定したら、processData()メソッドをコールして処理を開始できます。

この例では、サンプルのデータ・テンプレート・ファイルを提供し、そのコール方法について注釈付きのJavaコード・サンプルを示しています。

サンプル・データ・テンプレートはEmpDataTemplate.xmlと呼ばれ、/home/EmpDataTemplate.xmlとして格納されています。

<?xml version="1.0" encoding="WINDOWS-1252" ?>
 <dataTemplate name="EmpData" description="Employee Details" Version="1.0">
 <parameters>
  <parameter name="p_DeptNo" dataType="character" />
 </parameters>
 <dataQuery>
  <sqlStatement name="Q1">
  <![CDATA[
   SELECT d.DEPTNO,d.DNAME,d.LOC,EMPNO,ENAME,JOB,MGR,HIREDATE,
    SAL,nvl(COMM,0)
   FROM dept d, emp e
   WHERE d.deptno=e.deptno
   AND d.deptno = nvl(:p_DeptNo,d.deptno)
   ]]>
   </sqlStatement>
  </dataQuery>
  <dataStructure>
  <group name="G_DEPT" source="Q1">
   <element name="DEPT_NUMBER" value="DEPTNO" />
   <element name="DEPT_NAME" value="DNAME" />
   <element name="DEPTSAL" value="G_EMP.SALARY"
    function="SUM()" />
   <element name="LOCATION" value="LOC" />
   <group name="G_EMP" source="Q1">
    <element name="EMPLOYEE_NUMBER" value="EMPNO" />
    <element name="NAME" value="ENAME" />
    <element name="JOB" value="JOB" />
    <element name="MANAGER" value="MGR" />
    <element name="HIREDATE" value="HIREDATE" />
    <element name="SALARY" value="SAL" />
   </group>
  </group>
  </dataStructure>
 </dataTemplate>

次のサンプル・コードは、データ・エンジンでデータ・テンプレートの処理に使用されるJavaコードの一部に注釈を付けたものです。

{
 try {

  //Initialization – instantiate the DataProcessor class//
  DataProcessor dataProcessor = new DataProcessor();

   //Set Data Template to be executed
  dataProcessor.setDataTemplate("/home/EmpDataTemplate.xml");

  //Get Parameters – this method will return an array of the
//parameters in the data template
  ArrayList parameters = dataProcessor.getParameters();
// Now we have the arraylist we need to iterate over
// the parameters and assign values to them
  Iterator it = parameters.iterator();

   while (it.hasNext())
  {
     Parameter p = (Parameter) it.next();
     if (p.getName().equals("p_DeptNo"))
// Here we assign the value ‘10’ to the p_DeptNo parameter.
// This could have been entered from a report submission
// screen or passed in from another process.
       p.setValue(new "10");
   }
// The parameter values now need to be assigned
// to the data template; there are two methods
// available to do this: 1. Use the setParameters
// method to assign the ’parameters’ object to the template:
   dataProcessor.setParameters(parameters);

// 2. or you can assign parameter values using a hashtable.

   Hashtable parameters = new Hashtable();
   parameters.put("p_DeptNo","10");
   dataProcessor.setParameters(parameters);

// Now set the jdbc connection to the database that you
// wish to execute the template against.
// This sample assumes you have already created
// the connection object ‘jdbcConnection’
   dataProcessor.setConnection(jdbcConnection);
// Specify the output directory and file for the data file
   dataProcessor.setOutput("/home/EmpDetails.xml")
// Process the data template
   dataProcessor.processData();
 } catch (Exception e)
  {
  }
 }

SQL-XMLプロセッサ

データ・エンジンは、データ・テンプレートからのデータ生成をサポートするのみでなく、単にSQL文を渡すことでデータを戻すこともできます。この機能は、システム固有のデータベースでサポートされるXML生成と類似していますが、それに加えて、パフォーマンスとメモリー消費を犠牲にすることなく、大量のデータを階層形式で取り出せるという利点があります。SQL文には、最終的な処理の前に値を指定できるパラメータも含めることができます。

このプロセッサでは、ROWSET/ROW形式のXMLが生成されます。タグ名は、setRowsetTag およびsetRowsTagメソッドを使用して上書きできます。

注釈付きの次のコード・サンプルでは、setSQLメソッドを使用してSQL文をデータ・エンジンに渡し、生成されるデータの要素名を設定する方法を示します。

//Initialization – instantiate the DataProcessor class
DataProcessor dataProcessor = new DataProcessor();
 // Set the SQL to be executed
 dataProcessor.setSQL(	"select invoicenum, invoiceval
                        from invoice_table where
                        supplierid = :SupplID");
//Setup the SuppID value to be used
Hashtable parameters = new Hashtable();
parameters.put("SupplID ","2000");
//Set the parameters
dataProcessor.setParameters(parameters);
//Set the db connection
dataProcessor.setConnection(jdbcConnection);
//Specify the output file name and location
dataProcessor.setOutput("/home/InvoiceDetails.xml")
//Specify the root element tag name for the generated output
dataProcessor.setRowsetTag(“INVOICES”);
//Specify the row elemen tag name for the generated outputt
dataProcessor.setRowsetTag(“INVOICE”);
//Execute the SQL
dataProcessor.processData();

その他の有効なメソッド

データ・エンジンには、他のBI Publisher APIで使用できるオブジェクトまたはファイルの生成に使用できる非常に有効な関数が複数用意されています。

writeDefaultLayout: DataTemplateがインスタンス化された後、このメソッドをコールして、FOProcessorで使用されるXSLテンプレートを作成する際にRTFProcessorで使用できる、デフォルトのRTFテンプレートを生成できます。あるいは、デフォルトのRTFをMicrosoft Wordにロードしてより詳細に書式を設定できます。このメソッドでは、文字列またはストリーム出力を生成できます。

writeXMLSchema: DataTemplateがインスタンス化された後、このメソッドをコールして、データ・テンプレートのXMLスキーマ表現を生成できます。PDFテンプレートを操作しており、PDF文書からXMLデータへのマッピングを作成する必要がある場合、このメソッドは非常に便利です。

setScalableModeOn: 大きなデータセットを戻すことがわかっている場合、または長時間実行問合せが含まれる場合、データ・エンジンがスケーラブル・モードに入るよう指定できます。こうすると、データ・エンジンでは出力の生成にメモリーではなくディスクが使用されます。

setMaxRows: このメソッドでは、エンジンにより戻される固定行数を指定できます。このメソッドは、レイアウト・テンプレート作成の基準となるサンプル・データを生成する際に、特に有効です。

サンプル・データ・テンプレート

この項では、2つのサンプル・データ・テンプレートを示しています。

サンプル・ファイルには、データ・テンプレートの構成要素をより詳しく説明するために注釈を付けています。その他のデータ・テンプレート・サンプルを参照するには、Oracle Technology Network(OTN)の「BI Publisher」ページを参照してください。このページからサンプルをコピー・アンド・ペーストし、独自のデータ・テンプレートで作業を開始できます。

従業員リストのデータ・テンプレート

このテンプレートでは、従業員データおよび部門詳細が抽出されます。部門番号というパラメータが1つ含まれ、実行時に移入される必要があります。データは、バインド変数メソッドを使用して親(Q1)問合せを子(Q2)問合せと結合した、2つの結合問合せを使用して抽出されます。また、PL/SQLパッケージ"employee"を使用したイベント・トリガー機能を使用し、Q1問合せにWHERE句を設定し、G_DEPTグループにグループ・フィルタを提供します。

サンプル・データ・テンプレートにより、次のXMLが生成されます。

<?xml version="1.0" encoding="UTF-8"?>
<dataTemplateName>
 <LIST_G_DEPT>
  <G_DEPT>
   <DEPT_NUMBER>10</DEPT_NUMBER>
   <DEPT_NAME>ACCOUNTING</DEPT_NAME>
   <LOCATION>NEW YORK</LOCATION>
   <LIST_G_EMP>
    <G_EMP>
     <EMPLOYEE_NUMBER>7782</EMPLOYEE_NUMBER>
     <NAME>CLARK</NAME>
     <JOB>MANAGER</JOB>
     <MANAGER>7839</MANAGER>
     <HIREDATE>1981-06-09T00:00:00.000-07:00</HIREDATE>
     <SALARY>2450</SALARY>
    </G_EMP>
    <G_EMP>
     <EMPLOYEE_NUMBER>7839</EMPLOYEE_NUMBER>
     <NAME>KING</NAME>
     <JOB>PRESIDENT</JOB>
     <MANAGER/>
     <HIREDATE>1981-11-17T00:00:00.000-08:00</HIREDATE>
     <SALARY>5000</SALARY>
    </G_EMP>
    ...
   </LIST_G_EMP>
   <DEPTSAL>12750</DEPTSAL>
  </G_DEPT>
  <G_DEPT>
   <DEPT_NUMBER>20</DEPT_NUMBER>
   <DEPT_NAME>RESEARCH</DEPT_NAME>
   <LOCATION>DALLAS</LOCATION>
   <LIST_G_EMP>
    <G_EMP>
     <EMPLOYEE_NUMBER>7369</EMPLOYEE_NUMBER>
     <NAME>SMITH</NAME>
     <JOB>CLERK</JOB>
     ...
    </G_EMP>
   </LIST_G_EMP>
   <DEPTSAL>10875</DEPTSAL>
  </G_DEPT>
</LIST_G_DEPT>
</dataTemplateName>

このデータの抽出に使用されるデータ・テンプレートを次に示します。

<?xml version="1.0" encoding="WINDOWS-1252" ?>
- The template is named, an optional description
- can be provided and the default package, if any, is identified:
<dataTemplate name="Employee Listing" description="List of
Employees" dataSourceRef="ORCL_DB1" defaultPackage="employee"
 version="1.0">
    <parameters>
- Defines a single parameter for the Department Number
- with default of 20:
       <parameter name="p_DEPTNO" dataType="character"
        defaultValue="20"/>
    </parameters>
    <dataQuery>
       <sqlStatement name="Q1">
- This extracts the department information based on a
- where clause from a pl/sql package:
          <![CDATA[SELECT DEPTNO,DNAME,LOC from dept
            where &pwhereclause
            order by deptno]]>
       </sqlStatement>
       <sqlStatement name="Q2">
- This second query extracts the employee data and joins to
- the parent query using a bind variable, :DEPTNO
           <![CDATA[SELECT  EMPNO,ENAME,JOB,MGR,HIREDATE,SAL,nvl
             (COMM,0) COMM
                 from EMP
                 WHERE DEPTNO = :DEPTNO ]]>
       </sqlStatement>
       </dataQuery>
- A call is made to a before fetch trigger to set the
- where clause variable in the department query, &pwhereclause: 
       <dataTrigger name="beforeReport"
        source="employee.beforeReportTrigger"/>
       <dataStructure>
- The following section specifies the XML hierarchy
- for the returning data:
         <group name="G_DEPT" source="Q1"
          groupFilter="employee.G_DEPTFilter(:DEPT_NUMBER)">
- There is a group filter placed on the DEPT group.
- This is returned from the employee.G_DEPTFilter plsql package.
- It passes the DEPT_NUMBER value ("name" attribute) rather
- than the DEPTNO value ("value" attribute)

         <element name="DEPT_NUMBER" value="DEPTNO"  />
         <element name="DEPT_NAME"   value="DNAME"/>
- This creates a summary total at the department level based
- on the salaries at the employee level for each department: 
         <element name="DEPTSAL" value="G_EMP.SALARY"
          function="SUM()"/>
		   <element name="LOCATION" value="LOC"  />
           <group name="G_EMP" source="Q2">
              <element name="EMPLOYEE_NUMBER" value="EMPNO" />
              <element name="NAME" value="ENAME"/>
              <element name="JOB" value="JOB" />
              <element name="MANAGER" value="MGR"/>
              <element name= "HIREDATE" value="HIREDATE"/>
              <element name="SALARY" value="SAL"/>
            </group>
       </group>
   </dataStructure>
</dataTemplate>

PL/SQLパッケージ:

- This is the package specification, it declares the global
- variables and functions contained therein
function BeforeReportTrigger return boolean;
p_DEPTNO NUMBER;
pwhereclause varchar2(3200);
function G_DEPTFilter(deptno number) return boolean;
END;

/
- This is the package body, it contains the code for the
- functions/procedures

create or replace package body employee as

- this is the event trigger called from the data template
- prior to the data fetch. It sets the where clause
- for the department query (Q1) based on the incoming
- data template parameter
 FUNCTION BeforeReportTrigger return boolean is
 begin
  IF (p_DEPTNO=10) THEN
    pwhereclause :='DEPTNO =10';
  elsif (p_DEPTNO=20) THEN
    pwhereclause:='DEPTNO =20';
  elsif (p_DEPTNO=30) THEN
    pwhereclause:='DEPTNO =30';
  elsif (p_DEPTNO=40) THEN
    pwhereclause:='DEPTNO =20';
  else
    pwhereclause:='1=1';
  end if;
 end;
  RETURN(TRUE);
- This function specifies a group filter on the Q1 group.
- If the department number is 30 then the data is not returned.
 FUNCTION G_DEPTFilter(deptno number) return boolean is
 BEGIN
   if deptno = 30 then
    return (FALSE);
  end if;

  RETURN (TRUE);
 end;
END;
/

General Ledger仕訳データ・テンプレートの例

このデータ・テンプレートでは、E-Business Suite General LedgerスキーマからGL仕訳データが抽出されます。このテンプレートは、データ・テンプレート書式に変換された既存のOracle Reportに基づいています。従業員データ・テンプレートと同じ書式に従っていますが、機能がいくつか追加されています。

<?xml version="1.0" encoding="UTF-8" ?>
<dataTemplate name="GLRGNJ" dataSourceRef="ORA_EBS"
 defaultPackage="GLRGNJ" version="1.0">
 <parameters>
- Parameter declaration, these will be populated at runtime.
  <parameter name="P_CONC_REQUEST_ID" dataType = "number"
   defaultValue="0"></parameter>
  <parameter name="P_JE_SOURCE_NAME" dataType="character">
  </parameter>
  <parameter name="P_SET_OF_BOOKS_ID" dataType="character"
   defaultValue="1"></parameter>
  <parameter name="P_PERIOD_NAME" dataType="character">Dec-97
  </parameter>
  <parameter name="P_BATCH_NAME" dataType="character"></parameter>
  <parameter name="P_POSTING_STATUS" dataType="character"
   defaultValue="P"></parameter>
  <parameter name="P_CURRENCY_CODE" dataType="character"
   defaultValue="USD"></parameter>
  <parameter name="P_START_DATE" dataType = "date"></parameter>
  <parameter name="P_END_DATE" dataType = "date"></parameter>
  <parameter name="P_PAGESIZE" dataType = "number"
   defaultValue="180"></parameter>
  <parameter name="P_KIND" dataType = "character"
   defaultValue="L"></parameter>
 </parameters>
 <lexicals>
- Flexfield lexical declaration, this specifies the setup required
- for these flexfield functions.
- The first will return the full accounting flexfield with
- the appropriate delimiter e.g. 01-110-6140-0000-000
<lexical type ="oracle.apps.fnd.flex.kff.select"
   name ="FLEXDATA_DSP"
   application_short_name="SQLGL"
   id_flex_code="GL#"
   id_flex_num=":STRUCT_NUM"
   multiple_id_flex_num="N"
   code_combination_table_alias="CC"
   segments="ALL"
   show_parent_segments="Y"
   output_type="VALUE" />
- The second will return ‘Y’ if the current combination is
- secured against the current user, ‘N’ otherwise
<lexical type ="oracle.apps.fnd.flex.kff.select"
         name ="FLEXDATA_SECURE"
         application_short_name="SQLGL"
         id_flex_code="GL#"
         id_flex_num=":STRUCT_NUM"
         multiple_id_flex_num="N"
         code_combination_table_alias="CC"
         segments="ALL"
         show_parent_segments="Y"
         output_type="SECURITY" />
 </lexicals>
<dataQuery>
<sqlStatement name="Q_MAIN">
<![CDATA[
 SELECT
 S.user_je_source_name               Source,
 B.name                              Batch_Name,
 B.default_effective_date            Batch_Eff_date,
 B.posted_date                       Batch_Posted_Date,
 B.je_batch_id                       Batch_Id,
 B.running_total_accounted_dr        B_TOT_DR,
 B.running_total_accounted_cr        B_TOT_CR,
 D.je_header_id                      Header_id,
 D.name                              Header_Name,
 C.user_je_category_name             Category,
 D.running_total_accounted_dr        H_TOT_DR,
 D.running_total_accounted_cr        H_TOT_CR,
 J.je_line_num                       Je_Line_Num,
 decode(nvl(CC.code_combination_id, -1), -1, 'A',null)
 FLEXDATA_H,
 J.effective_date                    Line_Effective_Date,
 J.description                       Line_Description,
 J.accounted_dr                      Line_Acc_Dr,
 J.accounted_cr                      Line_Acc_Cr,
 D.currency_code                     Currency_Code,
 D.external_reference                Header_Reference,
 &POSTING_STATUS_SELECT              Recerence1_4,
 nvl(J.stat_amount,0)                Line_Stat_Amount,
 GLL.description                     Batch_Type,
 B.actual_flag                       Actual_Flag,
 GLL2.meaning                        Journal_Type,
 SOB.consolidation_sob_flag          Cons_Sob_Flag,
	&FLEXDATA_DSP FLEXDATA_DSP,
	&FLEXDATA_SECURE FLEXDATA_SECURE
 FROM gl_lookups GLL, gl_je_sources S, gl_je_categories C,
  gl_je_lines J, gl_code_combinations CC, gl_je_headers D,
  gl_je_batches B, gl_lookups GLL2, gl_sets_of_books SOB
 WHERE GLL.lookup_code = B.actual_flag
 AND GLL.lookup_type = 'BATCH_TYPE'
 AND GLL2.lookup_type = 'AB_JOURNAL_TYPE'
 AND GLL2.lookup_code = B.average_journal_flag
 AND SOB.set_of_books_id = :P_SET_OF_BOOKS_ID
 AND S.je_source_name = D.je_source
 AND C.je_category_name = D.je_category
AND J.code_combination_id = CC.code_combination_id(+)
AND J.je_header_id = D.je_header_id
AND &CURRENCY_WHERE
AND D.je_source = NVL(:P_JE_SOURCE_NAME, D.je_source)
AND D.je_batch_id = B.je_batch_id
AND &POSTING_STATUS_WHERE
AND B.name = NVL(:P_BATCH_NAME, B.name)
AND &PERIOD_WHERE
AND B.set_of_books_id = :P_SET_OF_BOOKS_ID
ORDER BY S.user_je_source_name,
B.actual_flag,
B.name,
B.default_effective_date,
D.name,
J.je_line_num
]]>
 </sqlStatement>
</dataQuery>
- The original report had an AfterParameter
- and Before report triggers
<dataTrigger name="afterParameterFormTrigger"
 source="GLRGNJ.afterpform"/>
<dataTrigger name="beforeReportTrigger"
 source="GLRGNJ.beforereport"/>
<dataStructure>
- A very complex XML hierarchy can be built with summary
- columns referring to lower level elements
<group name="G_SOURCE" dataType="varchar2" source="Q_MAIN">
  <element name="Source" dataType="varchar2" value="Source"/>
  <element name="SOU_SUM_ACC_DR" function="sum" dataType="number"
   value="G_BATCHES.B_TOTAL_DR"/>
  <element name="SOU_SUM_ACC_CR" function="sum" dataType="number"
   value="G_BATCHES.B_TOTAL_CR"/>
  <element name="SOU_SUM_STAT_AMT" function="sum"
   dataType="number" value="G_BATCHES.B_TOT_STAT_AMT"/>
  <group name="G_BATCHES" dataType="varchar2" source="Q_MAIN">
   <element name="Actual_Flag" dataType="varchar2"
    value="Actual_Flag"/>
   <element name="Batch_Id" dataType="number" value="Batch_Id"/>
   <element name="Batch_Name" dataType="varchar2"
    value="Batch_Name"/>
   <element name="Batch_Eff_date" dataType="date"
    value="Batch_Eff_date"/>
   <element name="Journal_Type" dataType="varchar2"
    value="Journal_Type"/>
   <element name="Cons_Sob_Flag" dataType="varchar2"
    value="Cons_Sob_Flag"/>
   <element name="Batch_Type" dataType="varchar2"
    value="Batch_Type"/>
   <element name="Batch_Posted_Date" dataType="date"
    value="Batch_Posted_Date"/>
   <element name="B_TOT_DR" dataType="number" value="B_TOT_DR"/>
   <element name="B_TOTAL_DR" function="sum" dataType="number"
    value="G_HEADERS.H_Total_Dr"/>
   <element name="B_TOT_CR" dataType="number" value="B_TOT_CR"/>
   <element name="B_TOTAL_CR" function="sum" dataType="number"
    value="G_HEADERS.H_Total_Cr"/>
   <element name="B_TOT_STAT_AMT" function="sum" dataType="number"
    value="G_HEADERS.H_TOT_STAT_AMT"/>
   <element name="B_TOTAL_STAT" function="sum" dataType="number"
    value="G_HEADERS.H_Total_Stat"/>
   <group name="G_HEADERS" dataType="varchar2" source="Q_MAIN">
    <element name="Header_id" dataType="number"
     value="Header_id"/>
    <element name="Header_Name" dataType="varchar2"
     value="Header_Name"/>
    <element name="Category" dataType="varchar2"
     value="Category"/>
    <element name="Header_Reference" dataType="varchar2"
     value="Header_Reference"/>
    <element name="Currency_Code" dataType="varchar2"
     value="Currency_Code"/>
    <element name="H_TOT_DR" dataType="number" value="H_TOT_DR"/>
    <element name="H_Total_Dr" function="sum" dataType="number"
     value="G_LINES.Line_Acc_Dr"/>
    <element name="H_TOT_CR" dataType="number" value="H_TOT_CR"/>
    <element name="H_Total_Cr" function="sum" dataType="number"
     value="G_LINES.Line_Acc_Cr"/>
    <element name="H_TOT_STAT_AMT" function="sum"
     dataType="number"
     value="G_LINES.Line_Stat_Amount"/>
    <element name="H_Total_Stat" function="sum" dataType="number"
     value="G_LINES.Line_Stat_Amount"/>
    <group name="G_LINES" dataType="varchar2" source="Q_MAIN"
groupFilter="GLRGNJ.g_linesgroupfilter(:G_LINES.FLEXDATA_SECURE)">
     <element name="Je_Line_Num" dataType="number"
      value="Je_Line_Num"/>
     <element name="FLEXDATA_H" dataType="varchar2"
      value="FLEXDATA_H"/>
     <element name="FLEXDATA_DSP"  dataType="varchar2"
      value="FLEXDATA_DSP"/>
     <element name="Line_Description" dataType="varchar2"
      value="Line_Description"/>
     <element name="Recerence1_4" dataType="varchar2"
      value="Recerence1_4"/>
     <element name="Line_Acc_Dr" dataType="number"
      value="Line_Acc_Dr"/>
     <element name="Line_Acc_Cr" dataType="number"
      value="Line_Acc_Cr"/>
     <element name="Line_Stat_Amount" dataType="number"
      value="Line_Stat_Amount"/>
     <element name="Line_Effective_Date" dataType="date"
      value="Line_Effective_Date"/>
     <element name="FLEXDATA_SECURE"  dataType="varchar2"
      value="FLEXDATA_SECURE"/>
    </group>
   </group>
  </group>
 </group>
<element name="R_TOT_DR" function="sum" dataType="number"
 value="G_SOURCE.SOU_SUM_ACC_DR"/>
<element name="R_TOT_CR" function="sum" dataType="number"
 value="G_SOURCE.SOU_SUM_ACC_CR"/>
<element name="R_TOT_STAT_AMT" function="sum" dataType="number"
 value="G_SOURCE.SOU_SUM_STAT_AMT"/>
<element name="JE_SOURCE_DSP" function="first" dataType="number"
 value="G_SOURCE.Source"/>
<element name="REP_BATCH_ID" function="first" dataType="number"
 value="G_BATCHES.Batch_Id"/>
<element name="C_DATEFORMAT"  dataType="varchar2"
 value="C_DATEFORMAT"/>
</dataStructure>
- There is an after fetch trigger, this can be used to clean up
- data or update records to report that they have been reported
<dataTrigger name="afterReportTrigger"
 source="GLRGNJ.afterreport"/>
</dataTemplate>

従業員のXMLデータソース・データ・テンプレート

このデータ・テンプレートでは、dept表に存在するデータがemployee.xmlというxmlファイルのデータに結合されます。従業員データ・テンプレートと同じ書式に従っていますが、従業員データはemp表ではなくxmlファイルから取得されます。

<?xml version="1.0" encoding="WINDOWS-1252" ?>
<dataTemplate name="Employee Listing" description="List of Employees" v
 ersion="1.0">
    <parameters>- Defines a single parameter for the Department Number
              - with default of 20:
       <parameter name="p_DEPTNO" dataType="character"
        defaultValue="20"/>
    </parameters>
    <dataQuery>
       <sqlStatement name="Q1">
          <![CDATA[SELECT DEPTNO,DNAME,LOC from dept
                  order by deptno]]>
       </sqlStatement>
 <xml name="empxml" expressionPath=".//ROW[DEPTNO=$DEPTNO]"> - Defines name
    -  and link to DEPTNO in Q1
 <url method="GET" realm="" username="" password="">
  file:///d:/dttest/employee.xml</url> - Defines url for xml data
 </xml>
</dataQuery>-
     <dataStructure>- The following section specifies the XML hierarchy
                    - for the returning data:
         <group name="G_DEPT" source="Q1"
          <element name="DEPT_NUMBER" value="DEPTNO"  />
         <element name="DEPT_NAME"   value="DNAME"/>
- This creates a summary total at the department level based
- on the salaries at the employee level for each department:
         <element name="DEPTSAL" value="G_EMP.SALARY"
          function="SUM()"/>
		   <element name="LOCATION" value="LOC"  />
           <group name="G_EMP" source="empxml">
              <element name="EMPLOYEE_NUMBER" value="EMPNO" />
              <element name="NAME" value="ENAME"/>
              <element name="JOB" value="JOB" />
              <element name="MANAGER" value="MGR"/>
              <element name= "HIREDATE" value="HIREDATE"/>
              <element name="SALARY" value="SAL"/>
            </group>
       </group>
   </dataStructure>
</dataTemplate>