Skip to main content

This is documentation for Caché & Ensemble. See the InterSystems IRIS version of this content.Opens in a new tab

For information on migrating to InterSystems IRISOpens in a new tab, see Why Migrate to InterSystems IRIS?

Zen レポートの概要

Zen レポートを生成するには、最初に Zen レポート・クラスを生成します。これによって、2 つの主要機能を実行します。

  • レポートで示すデータを収集します。

  • データがレポートでフォーマットされて表示される方法を定義します。

多くの Zen レポートは、Zen レポート・クラス、XData ReportDefinition ブロック、および XData ReportDisplay ブロックにある 2 つの XML セクションでこれらの機能を実行します。ReportDefinition ではデータを (多くの場合、Caché データベースから) 取得し、XML ドキュメントを作成します。ReportDefinition で指定される XML に適用される XSLT スタイルシートを XData ReportDisplay で作成し、適切な出力形式に変換します。以下の図には、このプロセスの概要が示されています。

レポート生成の概要
generated description: report flow overview

Zen レポートの主な目的は、Caché データベースにあるデータに基づいてレポートの作成を可能にすることです。より柔軟にして強力にするため、Zen レポートでは他のソースからデータを組み込むこともできます。ReportDefinition によって生成される XML は、ReportDisplay によって生成される XSLT スタイルシートで処理されるために最適な構造にする必要があります。ReportDefinition ブロックで適切な形式の XML が指定されていない場合、レポート出力を生成する前に、追加手順を呼び出して、XML スタイルシートを使用してさらに変換を実行できます。以下の図に、指定できるデータ・ソースをまとめ、必要に応じた XML スタイルシートの使用を示します。

Zen レポートのデータ入力オプション
generated description: report flow inputs

ReportDefinition ブロックを使用せずに、Zen レポートを生成できます。アプリケーション・パラメータの DATASOURCE により、Zen レポートのデータを格納する XML ドキュメントを渡します。XML データ・ソースを渡すストリーム・オブジェクトをレポート・パラメータの xmlstream により指定します。“Zen レポート・クラスのプロパティ” のセクションで説明します。

Zenレポートの主要出力形式は、Excel、PDF、および HTML です。TIFF 形式の出力も可能です。

選択した出力形式に応じて、ReportDisplay ブロックにより異なる XSLT スタイルシートが生成されます。ReportDisplay によって生成された XML にスタイルシートが適用され、レポートが生成されます。PDF 出力の場合、PDF レンダリング・エンジンで使用され最終 PDF 出力を作成する XSL-FO ドキュメントが、XSLT スタイルシートにより作成されます。

Zen レポートの出力形式オプション
generated description: report flow outputs

VMS 以外のシステムでは、Excel 出力で必要な特有構造に ReportDefinition からの XML を変換する必要がある場合のみ、XData ReportDisplay ブロックは、Excel 形式のレポートの生成に関連します。Excel スプレッドシートの生成については、“Excel スプレッドシート出力向け Zen レポートの設定” のセクションで説明します。

Caché には、PDF のレンダリング・エンジンとして Apache FOP の 1 バージョンが用意されています。また、RenderX の XEP PDF レンダリング・エンジンを使用することも、Apache から FOP をダウンロードしてインストールすることも可能です。

背景知識に関する資料

Zen レポートを使用する前に、次のトピックを十分に理解しておく必要があります。

Zen レポートのチュートリアル

Zen レポートは %ZEN.Report.reportPageOpens in a new tab を拡張したクラスであり、%ZEN.Report.reportPageOpens in a new tab もまた Caché Server Pages の %CSP.PageOpens in a new tab のベース・クラスを拡張したクラスです。このトピックでは、順を追ってクラスを構築することにより、Zen レポート・クラスの構造について説明します。

Caché を新規にインストールした場合は、この演習を開始する前に、まず ZENDemo ホーム・ページを実行する必要があります。このページをロードすると、SAMPLES ネームスペースに対するデータ・レコードが暗黙的に生成されます。これは、Caché を 1 回インストールするごとに一度実行するだけですみます。

ブラウザに以下の URI を入力します。

http://localhost:57772/csp/samples/ZENDemo.Home.clsOpens in a new tab

ここで、57772 は、Caché に割り当てた Web サーバのポート番号です。

これから、以下のとおり演習を開始します。

  1. Caché スタジオを起動します。

  2. [ファイル]→[ネームスペース変更] を選択するか、F4 キーを押します。

  3. SAMPLES ネームスペースを選択します。

  4. [ファイル]→[新規作成] を選択するか、Ctrl-N を押すか、generated description: studio new アイコンをクリックします。

  5. [Zen] タブを選択します。

  6. [新規 Zen レポート] アイコンをクリックします。

  7. [OK] をクリックします。

    次のテーブルに示すフィールドが、Zen レポート・ウィザードに表示されます。この演習では、テーブルの右側の列に表示されている値を入力します。

    フィールド 意味 入力する値
    パッケージ名 レポート・クラスを収めるパッケージ。 MyApp
    クラス名 レポート・クラス名。 ReportDemo
    アプリケーション このレポートに関連付けられたアプリケーションのパッケージとクラスの名前。 Zen レポートと Zen アプリケーションを関連付けます。これにより、組み込みクラス・パラメータの既定値が提供されます。レポートで指定された値が優先となります。指定していない場合、Zen レポートでは %ZEN.Report.defaultApplicationOpens in a new tab が使用されます。
    レポート名 アプリケーションでの、このレポートの論理名。 MyReport
    説明 このレポートを説明するための任意のテキスト。 新しいレポートの構築のサンプル

    [次へ] をクリックします。

  8. ウィザードで、レポートのデータを指定する SQL クエリの入力を求められます。次の内容を入力します。

    SELECT ID,Customer,Num,SalesRep,SaleDate
    FROM ZENApp_Report.Invoice ORDER BY SalesRep,Customer

    [完了] をクリックします。

    事前定義したパラメータ値、および XML ブロックである XData ReportDefinition と XData ReportDisplay を持つ Zen レポート・ページ・クラスが新規レポート・ウィザードで作成され、表示されます。

  9. XData ReportDefinition ブロックで以下のテキストを検索します。このコメントと </report> 終了要素の間にカーソルを置いてクリックし、その位置に挿入ポイントを移動します。

    <!-- add definition of the report here. -->
    
  10. レポートは、1 レベル以上の入れ子になったグループで構成されます。</report> の前の挿入ポイントに以下の <group> 要素を追加して、XData ReportDefinition ブロックの内部で最初のグループを定義します。

    <report xmlns="http://www.intersystems.com/zen/report/definition"
            name="MyReport"
            sql="SELECT ID,Customer,Num,SalesRep,SaleDate
                 FROM ZENApp_Report.Invoice ORDER BY SalesRep,Customer" >
      <group name="SalesRep" breakOnField="SalesRep">
      </group>
    </report>
  11. [ビルド]→[コンパイル] を選択するか、Ctrl-F7 を押すか、generated description: studio compile アイコンをクリックします。

  12. [表示]→[ブラウザで表示] または generated description: studio webpage アイコンを選択します。スタジオで Zen レポート・ページを正常に表示できない場合は、ブラウザ・セッションを開始し、以下のようにクラス名を入力します。

    http://localhost:57772/csp/samples/MyApp.ReportDemo.clsOpens in a new tab

    ここで、57772 は、Caché に割り当てた Web サーバのポート番号です。

    レポート・データの XML ビューが以下のように表示されます。この段階では構造があるだけで、内容はありません。

    <?xml version="1.0" ?>
    <MyReport>
      <SalesRep/>
      <SalesRep/>
      <SalesRep/>
      <SalesRep/>
      <SalesRep/>
      <SalesRep/>
    </MyReport>
  13. 次のように、XData ReportDefinition の <group> に <attribute> 要素を追加します。

    <report xmlns="http://www.intersystems.com/zen/report/definition"
            name="MyReport"
            sql="SELECT ID,Customer,Num,SalesRep,SaleDate
                 FROM ZENApp_Report.Invoice ORDER BY SalesRep,Customer" >
      <group name="SalesRep" breakOnField="SalesRep">
        <attribute name="name" field="SalesRep" />
      </group>
    </report>
  14. クラスをコンパイルし、レポートを表示します。XML 出力が以下のように表示されます。これで各 <SalesRep> 要素には、name 属性が追加されています。この属性の値は、SQL クエリで返された SalesRep フィールドです。

    <?xml version="1.0" ?>
    <MyReport>
      <SalesRep name="Jack"/>
      <SalesRep name="Jen"/>
      <SalesRep name="Jill"/>
      <SalesRep name="Jim"/>
      <SalesRep name="Joanne"/>
      <SalesRep name="John"/>
    </MyReport>
  15. 次のように、XData ReportDefinition のグループに <aggregate> 要素を追加します。

    <report xmlns="http://www.intersystems.com/zen/report/definition"
            name="MyReport"
            sql="SELECT ID,Customer,Num,SalesRep,SaleDate
                 FROM ZENApp_Report.Invoice ORDER BY SalesRep,Customer" >
      <group name="SalesRep" breakOnField="SalesRep">
        <attribute name="name" field="SalesRep" />
        <aggregate name="total" type="SUM" field="Num" />
      </group>
    </report>
  16. クラスをコンパイルし、レポートを表示します。XML 出力が以下のように表示されます。これで各 <SalesRep> 要素には、<total> という要素が追加されています。<total> 内の値は、SQL クエリによって返された、対応する SalesRep フィールドのすべての Num フィールドの値の合計です。

    <?xml version="1.0" ?>
    <ReportDemo>
      <SalesRep name="Jack">
        <total>833</total>
      </SalesRep>
      <SalesRep name="Jen">
        <total>774</total>
      </SalesRep>
      <SalesRep name="Jill">
        <total>983</total>
      </SalesRep>
      <SalesRep name="Jim">
        <total>826</total>
      </SalesRep>
      <SalesRep name="Joanne">
        <total>824</total>
      </SalesRep>
      <SalesRep name="John">
        <total>825</total>
      </SalesRep>
    </ReportDemo>
  17. さらに <aggregate>、<element>、および <group> の各要素を XData ReportDefinition 内に追加します。

    <report xmlns="http://www.intersystems.com/zen/report/definition"
            name="MyReport"
            sql="SELECT ID,Customer,Num,SalesRep,SaleDate
                 FROM ZENApp_Report.Invoice ORDER BY SalesRep,Customer" >
      <group name="SalesRep" breakOnField="SalesRep">
        <attribute name="name" field="SalesRep" />
        <aggregate name="total" type="SUM" field="Num" />
        <aggregate name="average" type="AVG" field="Num" />
        <aggregate name="clients" type="COUNT" field="Customer" />
        <group name="SalesTo" breakOnField="Customer" >
          <element name="customer" field="Customer" />
          <attribute name="date" field="SaleDate" />
        </group>
      </group>
    </report>
  18. クラスをコンパイルし、レポートを表示します。これで XML 出力には、各販売担当者について、より大きなデータ・セットが表示されるようになります。集約要素 <total>、<clients>、および <average> が、各 <SalesRep> レコードの末尾に表示されます。

  19. レポート・データを XML で構築したので、このデータを表示する方法を指定できます。

    XData ReportDefinition ブロックの後に続く、XData ReportDisplay ブロックを検索します。このセクションは、いくつかのオプション要素を含む、以下の既定のレポート定義構造で構成されます。

    <report xmlns="http://www.intersystems.com/zen/report/display"
      name="MyReport">
      <!-- Optional Init element inserts custom XSLT instructions at 
           the top level of the generated XSLT stylesheet. -->
      <init ></init>
      <!-- Optional Document element specifies page layout and style characteristics. -->
      <document width="8.5in" height="11in" marginLeft="1.25in" 
                marginRight="1.25in" marginTop="1.0in" marginBottom="1.0in" >
      </document>
      <!-- Optional Pageheader element. -->
      <pageheader ></pageheader>
      <!-- Optional Pagefooter element. Does not apply in HTML output. -->
      <pagefooter ></pagefooter>
      <!-- Required Body element. -->
      <body>
        <!-- add display definition of the report here. -->
      </body>
    </report>

    このチュートリアルでは、<body> 要素へのコードを追加します。

  20. レポートの <body> 要素で以下のテキストを検索します。このコメントと </body> 終了タグの間にカーソルを置いてクリックし、その位置に挿入ポイントを移動します。

    <!-- add display definition of the report here. -->
    
  21. 挿入ポイントで、レポートのタイトルのテキストを記述する <p> を配置します。

    <body>
     <p>Tutorial Sales Report</p>
    </body>
    

    また、<report> 要素に title 属性を追加して、ブラウザのウィンドウに表示するタイトルを設定します。

    <report xmlns="http://www.intersystems.com/zen/report/display"
     name="MyReport" title="Tutorial Sales Report">
     ...
    </report>  
  22. DEFAULTMODE クラス・パラメータの値を "xml" から "html" に変更します。

  23. クラスをコンパイルし、レポートを表示します。

  24. 以下のように、XData ReportDisplay にテーブルを追加します。

    <report xmlns="http://www.intersystems.com/zen/report/display"
            name="MyReport" title="Tutorial Sales Report">
      <body>
        <p>Tutorial Sales Report</p>
        <group name="SalesRep" line="1px">
          <table orient="row" width="4in">
            <item field="@name" width="2in">
              <caption value="Sales Rep:" width="2in"/>
            </item>
            <item field="total" formatNumber="##0.00">
              <caption value="Total Value of Sales:"/>
            </item>
            <item field="clients">
              <caption value="Number of Clients:"/>
            </item>
          </table>
        </group>
      </body>
    </report>

    以下はその説明です。

    • <group name="SalesRep"> は、生成された XML の <SalesRep> 要素への参照です。

    • <item field="@name"> は、<SalesRep> 要素の name 属性を参照する構文です。

    • <item field="total"> は、<SalesRep> 要素の <total> 要素を参照する構文です。

  25. クラスをコンパイルし、レポートを表示します。

  26. 事前定義したスタイル・クラスを使用して書式を適用し、見出しをハイライト表示します。XData ReportDisplay の <p> 要素を以下のように変更します。

    <p class="banner1">Tutorial Sales Report</p>

  27. クラスをコンパイルし、レポートを表示します。

  28. XData ReportDisplay 内に以下のような表示変更を追加することを検討します。これらの変更の中には、スタイルおよびレイアウトに影響を与えるものもあれば、表示するデータを追加するものもあります。

    <report xmlns="http://www.intersystems.com/zen/report/display"
            name="MyReport" title="Tutorial Sales Report">
      <body>
        <p class="banner1">Tutorial Sales Report</p>
          <group name="SalesRep" line="1px">
          <line pattern="empty"/>
          <table orient="row" width="4in">
            <item field="@name" width="2in">
              <caption value="Sales Rep:" width="2in"/>
            </item>
            <item field="total" formatNumber="##0.00">
              <caption value="Total Value of Sales:"/>
            </item>
            <item field="average" formatNumber="##0.00">
              <caption value="Average Individual Sale:"/>
            </item>
            <item field="clients">
              <caption value="Number of Clients:"/>
            </item>
          </table>
          <line pattern="empty"/>
          <table orient="col" group="SalesTo" altcolor="#FFDFDF" width="3.8in">
            <item field="customer" >
              <caption value="Customers:"/>
            </item>
            <item field="@date" >
              <caption value="Date of Sale:"/>
            </item>
          </table>
        </group>
      </body>
    </report>
  29. クラスをコンパイルし、レポートを表示します。

FeedbackOpens in a new tab