プライマリ・コンテンツに移動
Oracle® Fusion Middleware Oracle Reports ServicesレポートWeb公開ガイド
12c (12.2.1.2)
E82763-01
  ドキュメント・ライブラリへ移動
ライブラリ
製品リストへ移動
製品
目次へ移動
目次
索引へ移動
索引

前
 
次
 

22.3 XMLデータ・モデルの作成

Oracle Reports Servicesでは、Oracle Reports XMLのタグを使用して、より高度なデータ・モデルのタイプを作成できます。次の処理にXMLを使用できます:

この項では、XMLを使用した処理の例を示します。

これらのデータ・モデル・タイプに加えて、Oracle Reports ServicesではXMLにおけるPL/SQLの使用をサポートしています。これには、ローカルなプログラム・ユニット、レポートレベルのトリガーおよび連結PL/SQLライブラリに対するサポートが含まれます。

22.3.1 複数のデータソースの作成

<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>

22.3.2 データソース間のリンク

複数のデータ・ソースが存在するときは、それらのデータ・ソースをリンクして適切なデータ・モデルを作成することが必要となる場合もあります。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_ID1EMPLOYEES表におけるDEPARTMENT_ID列の別名として認識されます。この場合、ユーザーが明示的に別名を作成する必要はありません。

22.3.3 各データソース内でのグループ階層の作成

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>

22.3.4 クロス積(マトリックス)グループの作成

クロス積グループを使用すると、データ・モデルに任意の数のグループのマトリックスを定義できます。クロス積の各ディメンション・グループは、同じデータ・ソースに属している場合でも、様々なデータ・ソースから結合されている場合でも、マトリックスを作成できます。この柔軟性に対応して、<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>

22.3.5 あらゆるレベルでの式、サマリーおよびプレースホルダの作成

式、サマリーおよびプレースホルダは、データ・モデル内のあらゆるレベルに配置できます。さらに、これらの各オブジェクトの属性は、どれも完全に制御することができます。

次の例では、ソースがグループ・レベルの式列に基づいている、レポートレベルのサマリーを作成しています。

<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>

22.3.6 パラメータの作成

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>