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>