| Oracle® Fusion Middleware Oracle Reports ServicesレポートWeb公開ガイド 11g リリース 1 (11.1.1) B61375-04 |
|
![]() 前 |
![]() 次 |
Oracle Reports Servicesでは、Oracle Reports XMLのタグを使用して、より高度なデータ・モデルのタイプを作成できます。次の処理にXMLを使用できます:
この項では、XMLを使用した処理の例を示します。
これらのデータ・モデル・タイプに加えて、Oracle Reports ServicesではXMLにおけるPL/SQLの使用をサポートしています。これには、ローカルなプログラム・ユニット、レポートレベルのトリガーおよび連結PL/SQLライブラリに対するサポートが含まれます。
<data>タグが、新しいプラガブル・データソースと複数のデータソースの作成をサポートするようになりました。各データソースは、それぞれの<dataSource>タグ内に記述されます。dataSource要素のデータ型定義は、次のとおりです。
<!ELEMENT dataSource ((select|plugin|plsql), comment?, displayInfo?, formula*, group*)> <!ATTLIST dataSource name CDATA #IMPLIED defaultGroupName CDATA #IMPLIED maximumRowsToFetch CDATA #IMPLIED>
次の例では、2つのSQLデータソースを作成し、それぞれにQ_1およびQ_2という名前を付けます。また、各データソースに必要なすべての列を作成するとともに、デフォルト・グループを作成します。このグループの名前には、指定のdefaultGroupNameが設定されます。defaultGroupNameが指定されていない場合は、デフォルトで独自の名前が設定されます。
<report name="anyname" DTDVersion="9.0.2.0.0">
<data>
<dataSource name="Q_1" defaultGroupName="G_DEPARTMENTS">
<select>
select * from departments
</select>
</dataSource>
<dataSource name="Q_2" defaultGroupName="G_EMPLOYEES">
<select>
select * from employees
</select>
</dataSource>
</data>
</report>
複数のデータソースが存在するときは、それらのデータソースをリンクして適切なデータ・モデルを作成することが必要となる場合もあります。Oracle Reports XMLでは、データ・モデル・リンク・オブジェクトも公開されています。このオブジェクトは、グループレベルおよび列レベルのリンクをサポートします。任意の数のリンクを指定して、必要なデータ・モデルを作成できます。
link要素のデータ型定義は、次のとおりです。
<!ELEMENT link EMPTY> <!ATTLIST link name CDATA #IMPLIED parentGroup CDATA #IMPLIED parentColumn CDATA #IMPLIED childQuery CDATA #IMPLIED childColumn CDATA #IMPLIED condition (eq|lt|neq|gt|gteq|like|notLike) "eq" sqlClause (startWith|having|where) "where">
link要素は、data要素の内部に配置され、data要素内に定義されているdataSourceオブジェクトのうち任意の2つをリンクします。例:
<report name="anyname" DTDVersion="9.0.2.0.0">
<data>
<dataSource name="Q_1" defaultGroupName="G_DEPARTMENTS">
<select>
select * from departments
</select>
</dataSource>
<dataSource name="Q_2" defaultGroupName="G_EMPLOYEES">
<select>
select * from employees
</select>
</dataSource>
<link name="L_1" parentGroup="G_DEPARTMENTS"
parentColumn="DEPARTMENT_ID" childQuery="Q_2"
childColumn="DEPARTMENT_ID1" condition="eq" sqlClause="where"/>
</data>
</report>
link要素内では、Oracle Reportsのデフォルト設定メカニズムによって、DEPARTMENT_ID1がEMPLOYEES表におけるDEPARTMENT_ID列の別名として認識されます。この場合、ユーザーが明示的に別名を作成する必要はありません。
Oracle Reports Servicesでは、完全なグループ階層を利用できます。各グループ内ですべての列を指定し、それらの列の順序をブレークすることができます。式、サマリーおよびプレースホルダを使用して、グループ内でさらにオブジェクトをカスタマイズできます。
group要素のデータ型定義は、次のとおりです。
<!ELEMENT group (field|exception|rowDelimiter|xmlSettings|displayInfo|dataItem|formula| summary|placeholder|filter|comment)*> <!ATTLIST group name CDATA #IMPLIED fillColor CDATA #IMPLIED lineColor CDATA #IMPLIED formatTrigger CDATA #IMPLIED>
次の例では、group要素を使用して、データソースの下にブレーク・グループを作成しています。
<report name="anyname" DTDVersion="9.0.2.0.0">
<data>
<dataSource name="Q_1">
<select>
select * from employees
</select>
<group name="G_DEPARTMENTS">
<dataItem name="DEPARTMENT_ID"/>
</group>
<group name="G_EMPLOYEES">
<dataItem="EMPLOYEE_ID"/>
<dataItem="FIRST_NAME"/>
<dataItem="LAST_NAME"/>
<dataItem="JOB_ID"/>
<dataItem="MANAGER_ID"/>
<dataItem="HIRE_DATE"/>
<dataItem="SALARY"/>
<dataItem="COMMISSION_PCT"/>
</group>
</dataSource>
</data>
</report>
クロス積グループを使用すると、データ・モデルに任意の数のグループのマトリックスを定義できます。クロス積の各ディメンション・グループは、同じデータソースに属している場合でも、様々なデータソースから結合されている場合でも、マトリックスを作成できます。この柔軟性に対応して、<crossProduct>タグは、すべてのデータソースとグループが作成された後で、<data>タグ内に配置されます。
crossProduct要素のデータ型定義は、次のとおりです。
<!ELEMENT crossProduct (xmlSettings|displayInfo|dimension|(formula|summary|placeholder)*|comment)*> <ATTLIST crossProduct name CDDATA #IMPLIED mailText CDDATA #IMPLIED>
次の例では、単一問合せマトリックスを作成しています。
<report name="anyname" DTDVersion="9.0.2.0.0">
<data>
<dataSource name="Q_1">
<select>
select * from employees
</select>
<group name="G_DEPARTMENTS">
<dataItem name="DEPARTMENT_ID"/>
</group>
<group name="G_JOB_ID>
<dataItem name="JOB_ID"/>
</group>
<group name="G_MANAGER_ID">
<dataItem name="MANAGER_ID"
</group>
<group name="G_EMPLOYEE_ID">
<dataItem name="EMPLOYEE_ID"/>
<dataItem name="FIRST_NAME"/>
<dataItem name="LAST_NAME"/>
<dataItem name="HIRE_DATE"/>
<dataItem name="SALARY"/>
<dataItem name="COMMISSION_PCT"/>
</group>
</dataSource>
<crossProduct name="G_Matrix">
<dimension>
<group name="G_DEPARTMENTS">
</dimension>
<dimension>
<group name="G_JOB_ID">
</dimension>
<dimension>
<group name="G_MANAGER_ID">
</dimension>
</crossProduct>
</data>
</report>
式、サマリーおよびプレースホルダは、データ・モデル内のあらゆるレベルに配置できます。さらに、これらの各オブジェクトの属性は、どれも完全に制御することができます。
次の例では、ソースがグループ・レベルの式列に基づいている、レポートレベルのサマリーを作成しています。
<report name="anyname" DTDVersion="9.0.2.0.0">
<data>
<dataSource name="Q_1">
<select>
select * from employees
</select>
<group name="G_EMPLOYEES">
<dataItem="EMPLOYEE_ID"/>
<dataItem name="EMPLOYEE_ID"/>
<dataItem name="FIRST_NAME"/>
<dataItem name="LAST_NAME"/>
<dataItem name="HIRE_DATE"/>
<dataItem name="SALARY"/>
<dataItem name="COMMISSION_PCT"/>
<dataItem name="DEPARTMENT_ID"/>
<formula name="CF_REMUNERATION" source="cf_1formula"
datatype="number" width="20" precision="10"/>
</group>
</dataSource>
<summary name="CS_REPORT_LEVEL_SUMMARY" function="sum" width="20"
precision="10" reset="report" compute="report"/>
</data>
<programUnits>
<function name="cf_1formula" returnType="number">
<textSource>
<![CDATA[
function CF_1Formula return Number is
begin
return (:salary + nvl(:commission_pct,0));
end;
]]>
</textSource>
</function>
</programUnits>
</report>
Oracle Reports XMLでは、parameter要素がdataタグの開始と終了との間に配置されます。parameter要素のデータ型定義は、次のとおりです。
<!ELEMENT parameter (comment?|listOfValues?)> <!ATTLIST parameter name CDATA #REQUIRED datatype (number|character|date) "number" width CDATA "20" scale CDATA "0" precision CDATA "0" initialValue CDATA #IMPLIED inputMask CDATA #IMPLIED validationTrigger CDATA #IMPLIED label CDATA #IMPLIED defaultWidth CDATA #IMPLIED defaultHeight CDATA #IMPLIED>
次の例は、動的値リスト(LOV)、初期値および妥当性チェックトリガーを示しています。
<report name="anyname" DTDVersion="9.0.2.0.0">
<data>
<dataSource name="Q_1" defaultGroupName="G_DEPARTMENTS">
<select>
select * from departments
</select>
</dataSource>
<parameter name="P_LAST_NAME" datatype="character" precision="10"
initialValue="SMITH" validationTrigger="p_last_namevalidtrigger"
defaultWidth="0" defaultHeight="0">
<listOfValues restrictToList="yes">
<selectStatement hideFirstColumn="yes">
<![CDATA[select last_name, 'last_name||'-'||employee_id'
from employees]]>
</selectStatement>
</listOfValues>
</parameter>
</data>
<programUnits>
<function name="p_last_namevalidtrigger" returnType="character">
<textSource>
<![CDATA[function P_LAST_NAMEValidTrigger return boolean is
last_name char(20);
begin
select count(*) into last_name from employees
where upper(last_name)=upper(:p_last_name);
exception when OTHERS then return(FALSE);
end;
return(TRUE);
end;
]]>
</textSource>
</function>
</programUnits>
</report>