ヘッダーをスキップ

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

## 概要

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

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

1. スキーマの生成

2. デフォルトのRTFテンプレートの生成

3. フレックスフィールド

4. 単一および複数のデータ問合せ

5. 問合せリンク

6. パラメータ

7. 集計関数（SUM、AVG、MIN、MAX、COUNT）

8. イベント・トリガー

9. 複数のデータ・グループ

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

- XML出力対応のUnicode

  Unicodeは、多言語テキストを単一アプリケーションで表示できるグローバル・キャラクタ・セットです。これにより、単一の多言語アプリケーションを開発し、世界中に配布できます。

- 標準書式

  データ・エンジンは、マッピングされたデータ要素には標準ISOデータ書式YYYY-MM-DDTHH24:MI:SS.FF3TZH:TZMを、またデータ・テンプレートXML出力の数値要素には######.##を使用して、データ要素を生成します。

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

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

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

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

要素 | 属性/説明
--- | ---
dataTemplate（必須） | 属性: name（必須） description version（必須） defaultPackage: テンプレートで定義された字句参照、グループ・フィルタまたはデータ・トリガーを解決するPL/SQLパッケージ名。 dataSourceRef: データ・テンプレート全体のデフォルトのデータ・ソース参照です。次の場合に必要です。 XML Publisher Enterprise実装: 常に必要です。 Oracle E-Business Suite実装: 複数のデータ・ソースにまたがる分散問合せの場合にのみ必要です。
parameters | 1つ以上の<parameter>要素で構成されます。
parameter | 属性: name（必須）: テンプレートで参照されるパラメータ名。 dataType: 有効な値は"character"、"date"、"number" defaultValue: データから値が指定されない場合にパラメータに使用する値です。
lexicals | フレックスフィールドをサポートする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>要素で構成されます。
sqlstatement（必須） | 属性: name（必須）: 一意の問合せ識別子です。この名前識別子は、データ・テンプレート全体で同一になる点に注意してください。CDATAセクション内部に問合せを入力します。 dataSourceRef: （分散問合せの場合のみ、XML Publisher Enterprise実装では適用不可）問合せを実行するデータベースを指定します。この属性が指定されない場合は、dataTemplate要素で定義されたデフォルトのデータ・ソースが使用されます。
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 | データ・テンプレート全体のデフォルトのデータ・ソース参照です。次の場合に必要です。 XML Publisher Enterprise実装: 常に必要です。 Oracle E-Business Suite実装: 複数のデータ・ソースにまたがる分散問合せの場合にのみ必要です。

### パラメータ・セクション

パラメータは、実行時に値を設定できる変数です。パラメータは、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 | オプションです。この値は、実行時にデータから他の値が指定されていない場合にパラメータに対して使用されます。

#### パラメータの受渡し方法

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

問合せ:

    SELECT * FROM EMP
    WHERE deptno=:department

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

    SELECT * FROM EMP
    WHERE deptno=10

### データ問合せセクション

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

#### サポートされている列の型

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

- VARCHAR2、CHAR

- NUMBER

- DATE、TIMESTAMP

- BLOB

  BLOBはXMLまたはイメージです。イメージは結果のXMLにbase64エンコーディングで取得されます。RTFテンプレートでサポートされているイメージのタイプ（jpg、gifまたはpng）を取得できます。テンプレートに取得したイメージをレンダリングするには、特別な構文を使用する必要があります。「BLOBデータから取得したイメージのレンダリング」を参照してください。

- CLOB

  CLOBには、テキストまたはXMLが含まれている必要があります。

- XMLType

#### 問合せの定義方法

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

    <dataQuery>
      <sqlStatement name="Q1">
      <![CDATA[SELECT DEPTNO,DNAME,LOC from dept]]>
      </sqlStatement>
    </dataQuery>

属性名 | 説明
--- | ---
name | 問合せの一意の識別名です。この名前は、データ・テンプレート全体を通して参照される点に注意してください。
dataSourceRef | （E-Business Suite実装のみ、XML Publisher Enterpriseでは適用不可）問合せを実行するデータベースを指定します。この属性が指定されない場合は、dataTemplate要素で定義されたデフォルトのデータ・ソースが使用されます。

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

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

- レコードを除外する際にグループ・フィルタではなくWHERE句を使用する場合。

- テンプレートではなく問合せで直接計算を実行する場合。

#### 字句参照

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

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

    &parametername

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

- 問合せを作成する前に、問合せの字句参照ごとに、PL/SQLデフォルト・パッケージでパラメータを定義します。データ・エンジンでは、これらの値を使用して字句パラメータを置換します。

- 字句参照を含む問合せを作成します。

例:

    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つがあります。

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

XML 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の<パッケージ名>.<ファンクション名>です。

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

- データ・テンプレート内の<dataStructure>セクション前の任意の場所に、beforeReportトリガーを配置します。beforeReportトリガーは、dataQueryが実行される前に起動されます。

- <dataStructure>セクションの後にafterReportトリガーを配置します。afterReportトリガーは、操作を終了してXML出力が生成された後に起動されます。

### データ構造セクション

データ構造セクションでは、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つのタイプがあります。

- oracle.apps.fnd.flex.kff.segments_metadata

- oracle.apps.fnd.flex.select

- oracle.apps.fnd.flex.kff.where

- oracle.apps.fnd.flex.kff.order_by

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

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

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

- oracle.apps.xdo.oa.util.DataTemplate（OAラッパーAPI）

- oracle.apps.xdo.dataengine.DataProcessor（コア・ラッパーAPI）

DataProcessorクラスは、XML 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 and 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();

### その他の有効なメソッド

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

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

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

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

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

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

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

- 従業員リスト

- General Ledger仕訳リスト

サンプル・ファイルには、データ・テンプレートの構成要素をより詳しく説明するために注釈を付けています。その他のデータ・テンプレート・サンプルを参照するには、Oracle Technology Network（OTN）の「XML 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>

Copyright © 2005, 2006, Oracle. All rights reserved.