Oracle Business Intelligence Publisherユーザーズ・ガイド リリース10.1.3.2 E05037-01 | ![]() 目次 | ![]() 前へ | ![]() 次へ |
BI Publisherのデータ・エンジンでは、データベースに対してあらゆる種類のXMLデータ構造をスケーラブルかつ効率的な方法で迅速に生成します。データ・テンプレートという手段により、データ・エンジンにデータの要求を送信します。データ・テンプレートはXML文書であり、データ・エンジンがテンプレートを処理してXMLを生成する方法を、XML文書の要素が一括して定義します。
データ・エンジンでは、次の機能をサポートしています。
単一および複数のデータ問合せ
問合せリンク
パラメータ
集計関数(SUM、AVG、MIN、MAX、COUNT)
イベント・トリガー
複数のデータ・グループ
データ・エンジンにより生成される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(必須) | 属性:
|
properties | XML出力およびデータ・エンジン固有のプロパティをサポートする1つ以上の<property>要素で構成されます。 |
property | 属性:
|
parameters | 1つ以上の<parameter>要素で構成されます。 |
parameter | 属性:
|
lexicals | (Oracle E-Business Suiteに対する問合せでのみサポート)フレックスフィールドをサポートする1つ以上の字句要素で構成されます。 |
lexical | キー・フレックスフィールド関連の字句には、次の4つのタイプがあります。
|
dataQuery(必須) | 1つ以上の<sqlstatement>または<xml>要素で構成されます。 |
sqlstatement(必須) | 属性:
|
xml | 属性:
|
url | 属性:
|
link | 属性:
|
dataTrigger | 属性:
|
dataStructure | (複数問合せでは必須)出力XMLの構造を定義します。構造を指定する<group>要素および<element>要素で構成されます。このセクションは、単一問合せではオプションです。指定しない場合、データ・エンジンによりフラットXMLが生成されます。 |
group | 1つ以上の<element>要素およびサブ<group>要素で構成されます。
|
element(必須) | 属性:
|
データ・テンプレートを作成するには、任意のテキスト・エディタまたは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 | 出力にパラメータを含めるかどうかを示します。 有効な値は次のとおりです。
|
include_null_Element | 出力にnull要素を含めるかどうかを示します。 有効な値は次のとおりです。
|
xml_tag_case | 出力XMLの要素名の大文字/小文字を指定できます。 有効な値は次のとおりです。
|
db_fetch_size | jdbc接続で一度にフェッチされる行数を設定します。デフォルト値は500です。 |
scalable_mode | データ・エンジンがスケーラブル・モードで実行されるように設定します。これは大容量データを処理するときに必要です。 有効な値は次のとおりです。
|
include_rowsettag | 出力にRowsetタグをインクルードするかどうかを指定できます。 有効な値は次のとおりです。
|
debug_mode | デバッグ・モードをオンまたはオフにします。 有効な値は次のとおりです。
|
パラメータは、実行時に値を設定できる変数です。パラメータは、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日付書式に基づく)がサポートされています。
|
defaultValue | オプションです。この値は、実行時にデータから他の値が指定されていない場合にパラメータに対して使用されます。 |
include_in_output | オプションです。XML出力に表示するかどうかを指定します。有効な値は“true”および“false”です。 |
パラメータを渡すには(問合せを制限する場合など)、問合せにバインド変数を使用します。次に例を示します。
問合せ:
SELECT * FROM EMP
WHERE deptno=:department
実行時に、部門の値が問合せに渡されます。
SELECT * FROM EMP
WHERE deptno=10
データ・テンプレートの<dataQuery>セクションは必須です。
次の列の型を選択できます。
VARCHAR2、CHAR
NUMBER
DATE、TIMESTAMP
BLOB/BFILE(条件に応じてサポート)
BLOBイメージの取得は、次の2つの状況でサポートされます。
SetSQL APIの使用時(「SQL-XMLプロセッサ」を参照)
構造セクションの定義がないデータ・テンプレート。戻されるデータは、フラットXMLである必要があります。
BLOBまたはBFILEはイメージです。イメージは結果のXMLにbase64エンコーディングで取得されます。RTFテンプレートでサポートされているイメージのタイプ(jpg、gifまたはpng)を取得できます。テンプレートに取得したイメージをレンダリングするには、特別な構文を使用する必要があります。「BLOBデータから取得したイメージのレンダリング」を参照してください。
CLOB(条件に応じてサポート)
CLOBには、テキストまたはXMLを含める必要があります。CLOB列ではデータをエスケープできません。
XMLType(条件に応じてサポート)
XMLTypeは、getClobVal()メソッドを使用してCLOBに変換されたときにのみサポートされます。
REF CURSOR(条件に応じてサポート)
REF CURSORは、1つの結果セットのみを戻す場合、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を使用することをお薦めします。
レコードを除外する際にグループ・フィルタではなくWHERE句を使用する場合。
テンプレートではなく問合せで直接計算を実行する場合。
<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の後にくる句を置換できます。実行時にパラメータで複数の値を置換する場合は字句参照を使用します。
次の構文を使用して字句参照を作成します。
¶metername
次のように字句パラメータを定義します。
問合せを作成する前に、問合せの字句参照ごとに、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つがあります。
ヒント: データ・テンプレートでデータ問合せを作成する際のパフォーマンスを最大限にするには、次のテスト結果を参考にしてください。
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の<パッケージ名>.<ファンクション名>です。 |
トリガーの位置は、トリガーが起動されるポイントを示します。
データ・テンプレート内の<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データベースに問い合せる目的で記述されたデータ・テンプレートに適用されます。
フレックスフィールドは、字句パラメータを使用してデータ・テンプレート内に定義されます。
レポート・データに使用するSELECT文を定義します。
SELECT文の内部で、各フレックスフィールドを字句として定義します。SELECT文にフレックスフィールド関連字句を埋め込むには、&LEXICAL_TAGを使用します。
データ・テンプレートに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字句の説明を次に示します。
フレックスフィールド関連メタデータを取得するには、このタイプの字句を使用します。この字句を使用する場合、このメタデータの取得に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>
このタイプの字句は、文の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>
このタイプの字句は、文の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>
このタイプの字句は、文の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を使用し、BI Publisher Enterpriseのユーザー・インタフェース外で、BI Publisherのデータ・エンジンを利用する方法について説明します。この項の説明は、インストレーション・ファイルに付属しているJavadocとあわせて参照してください。
データ・エンジン・ユーティリティJava APIは、次のクラスで構成されています。
oracle.apps.xdo.oa.util.DataTemplate(OAラッパーAPI)
oracle.apps.xdo.dataengine.DataProcessor(コア・ラッパー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文には、最終的な処理の前に値を指定できるパラメータも含めることができます。
このプロセッサでは、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つのサンプル・データ・テンプレートを示しています。
従業員リスト
General Ledger仕訳リスト
サンプル・ファイルには、データ・テンプレートの構成要素をより詳しく説明するために注釈を付けています。その他のデータ・テンプレート・サンプルを参照するには、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;
/
このデータ・テンプレートでは、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>
このデータ・テンプレートでは、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>