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 レポートのトラブルシューティング” の章を参照してください。

Web ブラウザでの Zen レポートの起動

Zen レポートの .cls ファイルの URI をブラウザに入力すると、レポートをそのブラウザで表示できます。出力形式を指定するには、Zen レポート・クラスの DEFAULTMODE クラス・パラメータを使用するか、クエリ文字列に $MODE パラメータを指定します。以下の例では、これらのパラメータを使用して HTML レポートを生成する方法を示します。

Zen レポート・クラスの DEFAULTMODE:

Parameter DEFAULTMODE = "html"

URI の $MODE:

http://localhost:57772/csp/myPath/myApp.myReport.cls?$MODE=html

ここで、57772 は Caché サーバに割り当てられたポート番号です。このレポートは HTML 形式で表示されます。

DEFAULTMODE と $MODE の両方は、以下に示す指定可能な値のセットを共有します。

  • displayxlsx — Excel 生成で必要な形式に任意の XML を変換する ReportDisplay ブロックを使用して、Excel スプレッドシートとしてレポートを生成します。

  • "excel" — Excel スプレッドシートとしてレポートを生成します。“Excel スプレッドシート出力向け Zen レポートの設定” を参照してください。

  • fo2pdf — FO ファイルから直接 PDF 形式のレポートをレンダリングします。これにより、SVG をデータベースに保存してから、PDF の一部としてレンダリングできます。

  • foandpdf — 最初に FO ファイルを生成してから、PDF をFO ファイルから生成します。より適切に SVG をデータベースに保存し、PDF で表示するように取得できます。

  • html — HTML のレポートを生成します。これが既定値です。

  • pdf — PDF のレポートを生成します。まず、“PDF 出力向け Zen レポートの設定” の指示に従う必要があります。設定によっては、ブラウザからまず、ファイルを保存するように指示されることがあります。この場合、[保存] をクリックすると、PDF が表示されます。

  • pdfprint — 中間ファイルを生成せずに、レポートを PDF 形式で生成し、プリンタに直接送信します。まず、“PDF 出力向け Zen レポートの設定” の指示に従う必要があります。

    pdfprint では出力をディスクに書き込まないので、これは “PDF 出力の分割およびマージ” で説明されている PDF 出力の分割機能およびマージ機能では使用できません。Windows 7 以降、Caché は外部プロセスを開始できなくなったため、pdfprint を実行するには印刷サーバが必要になります。“印刷サーバ” を参照してください。

  • ps — PDF 形式のレポートを生成し、直接 PostScript プリンタに送信します。

  • tiff — TIFF イメージ・ファイルとしてレポートを生成します。JAI Advanced Imaging I/O をインストールして、TIFF 生成を行う必要があります。 TIFF 生成は FOP でのみサポートされています。RenderX ではサポートされていません。“TIFF 生成の構成” を参照してください。

  • xlsx — Office 2007 および Office 2010 にネイティブの xlsx 形式を使用して、Excel スプレッドシートとしてレポートを生成します。これは、これらのバージョンの Office の優先モードです。VMS ではサポートされていません。“Excel スプレッドシート出力向け Zen レポートの設定” を参照してください。

  • xml — XML 形式のレポートの原データを表示します。ブラウザに、XML がカラー表示されます。

    既定でインストールされている Chrome では、$MODE=xml で表示される Zen レポートを含めて、XML が適切に表示されません。XML Tree Chrome 拡張機能をインストールする必要があります。https://chrome.google.com/Opens in a new tab で “XML Tree” を検索するか、以下のリンクに直接アクセスします。

    https://chrome.google.com/extensions/detail/gbammbheopgpmaagmckhpjbfgdfkpadbOpens in a new tab

また、以下の値は一般的にデバッグで使用されます。詳細は、“中間ファイルを表示するための出力モードの変更” のセクションを参照してください。

  • toexcel — XSLT 形式の to-excel スタイルシートを生成します。VMS でのみサポートされています。

  • tohtml — XSLT 形式の to-HTML スタイルシートを生成します。

  • toxslfo — XSLT 形式の to-XSLFO スタイルシートを生成します。

  • xslfo — PDF を出力する際に生成される XSL-FO ファイルを表示します。

Zen レポートの URI クエリ・パラメータ

ブラウザで Zen レポートを起動するときに使用できる URI クエリ・パラメータは多数あります。Firefox では、これらのパラメータを自由に使用できますが、Internet Explorer では注意が必要です。問題が発生する場合がありますが (特に IE の場合)、解決することが可能です。問題が発生した場合は、“Zen レポートのトラブルシューティング” の章の “URI クエリ・パラメータによる XHTML の表示” を参照してください。

以下のテーブルは、Zen レポートの URI クエリ・パラメータおよび対応している Zen レポート・クラスのパラメータを示しています。各パラメータの詳細は、このテーブルに提示されているリンクを使用するか、“Zen レポート・クラスのパラメータ” を参照してください。規約により、これらのパラメータの名前はドル記号 (“$”) で始まる点に注意してください。

Zen レポートの URI クエリ・パラメータ
URI クエリ・パラメータ 対応するクラス・パラメータ 説明
$DATASOURCE DATASOURCE Zen レポートで使用するデータを格納する XML ドキュメントの URI。相対 URI は、現在の URI を基準にして処理されます。
$EMBEDXSL EMBEDXSL 1 (True) または 0 (False)。1 (True) のとき、出力 XHTML 内に埋め込み XSLT 命令が Zen レポートで生成されます。0 (False) のとき、別の XSLT ファイルが Zen レポートで生成されます。既定値は 0 (False) です。
$LOG 1 (True) または 0 (False)。1 (True) のとき、$MODE=html または $MODE=pdf を使用して、Zen によって生成される中間ファイルの 1 つを表示できます。
$MODE DEFAULTMODE。"STYLESHEETDEFAULTMODE" も参照してください。

$MODE に関する基本情報は、“Web ブラウザでの Zen レポートの起動” のセクションに記載されています。

また、値を指定して $MODE を使用することで、通常は削除される中間ファイルを表示できます。この使用方法は、“Zen レポートのトラブルシューティング” の章の “中間ファイルの表示” セクションで説明しています。

$NAMESPACEDECLARATIONS NAMESPACEDECLARATIONS ネームスペース宣言を定義できます。ネームスペース宣言は、生成される XML のルート要素に追加されます。また、生成される XSL のスタイルシート要素にも追加されます。
$NODELETE 1 (True) または 0 (False)。1 (True) のとき、中間ファイルが標準の Caché 一時ディレクトリに保存されます。
$PS PS

中間 PDF ファイルを生成せずに PostScript プリンタにレポートを直接送信するには、URI 文字列で $MODE=ps を使用して、$PS に PostScript プリンタの場所を設定します。以下はその例です。$PS=\\devD630\BrotherH

また、DEFAULTMODE クラス・パラメータを "ps" に設定することで、レポートをプリンタに直接送信でき、PS クラス・パラメータを使用して、PostScript プリンタの場所を設定できます。

$REPORTNAME 診断目的で中間ファイルを保存するときに使用するファイル名。$REPORTNAMEは、REPORTNAME に関連付けられません。
$STRIPPI 1 (True) または 0 (False)。True の場合、この URI で生成した XML 文の先頭から <?xml version="1.0"?> 処理命令が削除されます。詳細は、"<get>" セクションを参照してください。
$USETEMPFILES USETEMPFILES 1 (True) または 0 (False)。1 (True) のとき、アプリケーションの CSP ディレクトリに、生成された XSLT ファイルが保存されます。
$USEHTML5 USEHTML5 1 (True)、0 (False)、または "" (null)。null (既定) の場合は、ブラウザがサポートしている場合のみ、レポートは HTML5 を生成します。True または False の場合は、ブラウザのサポートに関係なく、強制的に生成されます (または生成されません)。
$XSLT XSLTMODE "browser" あるいは "server"。ブラウザまたはサーバでそれぞれ XSLT が処理され、出力が生成されます。既定値は "server" です。
$XSLTVERSION XSLTVERSION "1.0" または "2.0" を指定すると、それぞれこのレポートの XSLT が XSLT 1.0 または XSLT 2.0 として処理されます。既定値は、"1.0" です。

URI による Zen レポート・クラスのプロパティの設定

Zen レポート・クラスでは、データ型パラメータである ZENURL がサポートされています。このパラメータを使用すると、Zen レポートを表示する際にブラウザに渡す URI 文字列から、Zen レポート・クラスのプロパティを動的に設定できます。

例えば、以下のように Zen レポート・クラスでプロパティを定義すると仮定します。

Property employeeID As %ZEN.Datatype.string(ZENURL="ID");

URI 文字列をブラウザに渡してこの Zen レポートを起動する場合、ID クエリ・パラメータに指定された値は、クラス・プロパティ employeeID に割り当てられます。以下の例では、employeeID に値 48 を割り当てます。

MyApp.MyPage.cls?ID=48

内部的には、これによりレポートが表示される前に以下のコードが実行されます。

 Set %page.employeeID = $GET(%request.Data("ID",1))

あるプロパティに割り当てられている URI パラメータが、そのプロパティの MAXVAL を超える値を持っているなどの理由で、プロパティの検証テストに合格しなかった場合、Zen レポートではこのページは表示されず、代わりにエラー・メッセージが表示されます。

XSLT 処理がサーバで行われる場合、ZENURL の使用に制約はありません。XSLTMODE クラス・パラメータには、“server” の既定値があります。この値では、XSLT 処理はサーバで行われます。XSLTMODE を “browser” に設定するか、URI クエリ・パラメータの $XSLT=browser を使用すると、XSLT 処理をブラウザで行うことができます。

以下のいずれかのパラメータのあるレポートを PDF として生成するように Zen レポートに指示した場合は、XSLTMODE 設定とは関係なく、サーバ上で XSLT 処理が実行されます。

  • URI クエリ・パラメータ $MODE を "pdf" に設定する

  • クラス・パラメータ DEFAULTMODE を "pdf" に設定し、$MODE で DEFAULTMODE を無視しない

以下のいずれかのパラメータのある XSLT 命令を組み込むように Zen レポートに指示した場合は、XSLTMODE 設定とは関係なく、ブラウザ内で XSLT 処理が実行されます。

  • URI クエリ・パラメータ $EMBEDXSL を 1 に設定する

  • クラス・パラメータ EMBEDXSL を 1 に設定し、$EMBEDXSL で EMBEDXSL を無視しない

整合性のある動作を複数のブラウザ間で実現するために、Zen レポートは xml-stylesheet 処理命令で生成された XML の URI パラメータを渡しません。HTML レポートをブラウザで生成していて、XSLT 命令を生成された HTMLに埋め込んでいない場合 (これが既定の動作です) のみ、Zen レポートは xml-stylesheet 処理命令を生成します。このため、XData ReportDisplay ブロックのコードが ZENURL として渡されたプロパティ値に依存する場合、予測できない結果となることがあります。このプロパティでは、初期値がある場合、これは InitialExpression に設定され、そうでない場合は NULL になります。この制限は特に、%report を ReportDisplay ブロックで使用してレポートのプロパティにアクセスする場合に重要な考慮事項になります。

レポートを起動する URI で ZENURL として渡されたプロパティ値に依存するように %report を使用する場合、XSLT 処理をブラウザで行うと、予測できない結果となることがあります。

Zen ページでの Zen レポートの起動

Zen レポートを Zen ページに表示するには、Zen ページの XData Contents ブロックに <iframe> を指定して、その src の値に Zen レポート・クラスの名前を設定します。この Zen レポート・クラスは、<iframe> を指定した Zen クラスと同じ InterSystems ネームスペースに存在している必要があります。

<iframe> の詳細は、"Zen コンポーネントの使用法" の “その他の Zen コンポーネント” の章の “フレーム付きのコンテンツ” を参照してください。

メモリ構成用環境変数

PDF や Excel のレポート出力を生成する処理では、大量のメモリを使用する場合があります。Zen レポートには数個の環境変数が用意されており、これらの操作で使用可能なメモリの容量を構成できます。これらのすべての変数の既定値は 512 MB です。これらの環境変数の値を変更して、より多くのメモリを割り当てることができます。これらのメモリ値により、JVM に渡される -Xmx メモリ最大値が変更されます。

これらの環境変数は VMS では使用できません。

  • EXCELMEMSIZE – Zen レポートを Excel スプレッドシートとして生成する処理で使用できるメモリ。

  • EXCELSERVERMEMSIZE – Excel サーバで使用できるメモリ。

  • FOPMEMSIZE – FOP PDF レンダラで使用できるメモリ。

  • RENDERSERVERMEMSIZE – レンダリング・サーバで使用できるメモリ。

  • PRINTSERVERMEMSIZE – 印刷サーバで使用できるメモリ。

  • SAXMEMSIZE – SAX プロセッサで使用できるメモリ。

  • PDFMERGEMEMSIZE – PDF マージ操作で使用できるメモリ。

PDF 出力向け Zen レポートの設定

出力を PDF として表示する要求によってブラウザに Zen レポート・クラスをロードすると、Caché では、Java を使用してサードパーティの PDF レンダリング・ツールが実行されます。このレンダリング・ツールは XSLT スタイルシートを XML データに適用して、XML を XSL-FO に変換し、最後に XSL-FO を PDF に変換します。Zen レポートをブラウザから実行する方法の詳細は、"Web ブラウザでの Zen レポートの起動" を参照してください。

Caché には、Zen レポートが PDF のレンダリング・エンジンとして使用する Apache FOP の 1 バージョンが用意されています。また、RenderX の XEP PDF など、別のレンダリング・エンジンを使用することも、Apache から FOP をダウンロードすることも可能です。OpenVMS プラットフォームでは、JDK 6.0 と Motif の両方がインストールされている必要があります。完全な要件は、v8.3 以降が動作している Itanium プラットフォームで ODS-5 ディスク構造を使用していることですが、これはシステム・ディスクである必要はありません。Alpha VMS では、ZEN レポートで必要な JDK 1.7 がサポートされていません。

組み込みの PDF レンダリング・エンジンの使用法

PDF のレンダリング・プロセスは、規定の構成手順を実行している場合にのみ機能します。このセクションでは、組み込みの FOP の構成について説明します。代替の PDF レンダラの構成については、“他のレンダリング・エンジンの使用法” のセクションを参照してください。

  1. Java Virtual Machine (JVM) および Java Developers Kit (JDK) バージョン 1.7 以降がまだインストールされていない場合は、これらのツールをダウンロードしてシステムにインストールします。Caché が Java を検出できるようにするために、JAVA_HOME 環境変数を定義して、この環境変数に、Java をインストールした場所を設定する必要があります。JAVA_HOME については、Java ドキュメントを参照してください。

  2. Zen レポートでセキュリティ機能を使用しない場合でも、ユーザ特権が正しく設定されているかどうか確認する必要があります。PDF 出力形式でレポートを実行するには、%System_CallOut:USE 特権があるユーザ・アカウントでログインする必要があります。

    Zen レポートが Zen アプリケーションの一部であり、[ウェブ・アプリケーション] ページ ([システム管理][セキュリティ][アプリケーション][ウェブ・アプリケーション]) の [許可された認証方法] フィールドを使用して [認証なし] アクセスを有効にしている場合、UnknownUser アカウントには %System_CallOut:USE 特権が必要です。

    すべてのタイプの Zen アプリケーション設定を構成するには、"Zen アプリケーションの開発" の “Zen アプリケーション” の章の “Zen アプリケーションの構成” のセクションを参照してください。%System_CallOut:USE などの特権の詳細は、"Caché セキュリティ管理ガイド" の “アセットおよびリソース” のセクションを参照してください。

    Zen レポート・クラス・パラメータの RESOURCE を使用して特権要件を追加することができます。

  3. Foxit または Adobe Reader を使用して直接 PDF を印刷する場合、Zen レポートに対して実行可能ファイルが存在するサーバ上の場所を指定する必要があります。管理ポータルの [Zen レポートの設定] ページ ([システム管理][構成][Zen レポート][設定]) の [Foxit/Adobe Path for PdfprintFoxit/pdfprint の Adobe パス :] フィールドで、この情報を入力できます。実行可能ファイルへのパスを入力するか、[参照] をクリックして、ファイルを検索し、選択します。

    別の方法として、ターミナル・プロンプトでコマンドを入力して、対応する Caché グローバルを設定することもできます。以下はその例です。

     ZN "%SYS"
     SET ^%SYS("zenreport","adobepath")="C:\Program Files\Adobe\Reader\AcroRd32.exe"
  4. 以下の Apache FOP Web サイトの資料で説明されているとおり、組み込みの FOP 用にカスタム構成ファイルを作成できます。

    http://xmlgraphics.apache.org/fopOpens in a new tab

    カスタム構成ファイルを使用するために、Caché から FOP を呼び出す場合は、グローバル ^%SYS("zenreport","transformerconfig") を、この構成ファイルへのパスに設定します。FOP にフォントを追加するには、構成ファイルが重要です。まず、フォント・メトリックを作成し、これを FOP に登録する必要があります。この手順は、Apache FOP Web サイトで説明されています。

    FOP 構成ファイル fop.xconf を変更した場合、VMS システムを除いて、Caché は、そのファイルへのコピーを実行しません。Caché ディストリビューションに付属の FOP 構成ファイル名は fop.xconf_dist です。fop.xconf ファイルが何らかの理由で破損した場合には (パラメータ USEINSTALLEDFOP が 0 に設定されていない状態で RenderX を実行し、ファイルが削除された場合など)、fop.xconf_distfop.xconf にコピーすることで、Caché と共に配布されたものと同じ状態にファイルを戻すことができます。

Note:

PDF レンダリングは大量のメモリを消費します。問題が発生した場合は、FOP.bat ファイルまたは XEP.bat ファイルを編集して、Java 仮想マシンで使用できるメモリの量を増やします。この方法については、使用している製品に付属のドキュメントを参照してください。

他のレンダリング・エンジンの使用法

Apache FOP の 1 バージョンが、Caché と共にインストールされます。別の PDF レンダリング・ツールを使用する場合は、以下の追加の構成手順を実行する必要があります。

  1. XSL-FO を PDF としてレンダリングするツールをインストールします。次の 2 種類のツールが使用できます。

    • Apache のオープン・ソース・プロジェクトである FOP。これは以下の Web サイトからダウンロードできます。

      http://xmlgraphics.apache.org/fopOpens in a new tab

      インストールするには、このキットからファイルを解凍します。

    • RenderX の提供する XEP 製品。無料の試用版をダウンロードするか、XEP 製品を購入します。試用版の場合、各出力ページには RenderX の透かしが残ります。詳細は、以下の Web サイトを参照してください。

      http://www.renderx.com/tools/xep.htmlOpens in a new tab

      インストール方法については、キットに付属の指示に従ってください。

    • Zen レポートと RenderX XEP との連携を構成するには、%JAVA_HOME% 環境変数と %XEP_HOME% 環境変数を定義する必要があります。 %JAVA_HOME% については、Java ドキュメントで説明します。 %XEP_HOME% は、XEP をインストールした場所を指定する環境変数です。

  2. レンダリング・ツールを起動するコマンド・ファイルのフルパス名を使用して Zen レポートを構成します。以下の方法でパス名を特定できます。

    • Windows または UNIX® 上の XEP または FOP の場合、手順 1 に従ってツールをインストールした時点で、このコマンド・ファイルはシステム上のツール用のインストール・ディレクトリ (例 : Window の場合は C:\fop-0.95\fop.bat、UNIX® の場合は /fop-0.95/fop) の下に存在します。

    • OpenVMS 上で FOP を使用するには、手順 4 で作成するコマンド・ファイルのフルパス名を使います。

    管理ポータルの [Zen レポート設定] ページ ([システム管理][構成][Zen レポート設定]) から、以下のように Zen レポートを構成できます。

    • PDF 生成用のパスとファイル名 : — 実行可能ファイルへのパスを入力します。[参照] をクリックして、コマンド・ファイルを検索し、選択します。

    • Foxit/Pdfprint の Adobe パス : — サーバ における Foxit または Adobe Reader 実行可能ファイルへのパスを入力します。[参照] をクリックして、ファイルを検索し、選択します。PDF を直接印刷する必要があります。

    • PDF レンダリング・エンジン用の構成ファイル : — このフィールドはオプションです。[使用] または [なし] を選択します。[使用] を選択した場合、FOP 構成ファイルへのパスを入力します。FOP 構成ファイルを指定しない場合、FOP レンダリング・ツールは、組み込みの FOP に付属の構成ファイルを使用します。

      XEP レンダリング・ツールを使用している場合、このフィールドにはパスを入力しないでください。XEP レンダリング・ツールは、ここで指定されたファイルを 0 の長さに切り捨てます。[参照] をクリックして、構成ファイルを検索し、選択します。

      ツール・プロバイダの Web サイトで説明されているとおり、カスタム構成ファイルを作成できます。XEP にカスタム構成ファイルを指定するには、XEP のマニュアルに従う必要があります。

    • 既定の HotJVM レンダリング・サーバ・ポート — HotJVM レンダリング・サーバを実行するポート番号を入力します。ポート番号を指定すると、すべての Zen レポートはこのポート上で実行される HotJVM を使用します。

    • 今すぐ確認 — このボタンをクリックして、レンダリング・ツールが正しく構成されているかどうかをテストします。

    別の方法として、ターミナル・プロンプトでコマンドを入力して、対応する Caché グローバルを設定することもできます。例えば、レンダリング・ツールの実行ファイルを設定するには、以下のようにします。

     Set ^%SYS("zenreport","transformerpath")="VMSIT3$DKA100:[MP.fop.build]fop1.com"
    

    構成ファイルを設定するには、^%SYS("zenreport","transformerconfig") を構成ファイルのパスに設定します。

  3. Zen レポート・システムの既定の動作は、管理ポータルの [Zen レポートの設定] ページ ([システム管理][構成][Zen レポート][設定]) で代替のレンダリング・ツールを設定していない場合、インストール済みの FOP を使用してレポートをレンダリングします。レンダリング・ツールを指定していない場合に Zen レポートでエラーを生成する場合、各 Zen レポートまたは Zen レポートのアプリケーションで、クラス・パラメータ USEINSTALLEDFOP を既定値の 1 から 0 に設定します。この変更をすべての Zen レポートに一度に適用するために、Zen レポートの既定のアプリケーションでパラメータ %ZEN.Report.defaultApplicationOpens in a new tab を設定できます。

  4. OpenVMS で FOP を使用する場合

    OpenVMS をインストールした環境では、Java 環境の設定、FOP クラス・パスの定義、および渡されたパラメータによる FOP の起動を実行する OpenVMS コマンド・スクリプト (.com ファイル) を作成する必要があります。コマンド・ファイルは以下の例のようになります。以下の詳細は、実際に使用する特定のディレクトリおよびファイル名に応じて変わります。

    $ @sys$manager:java$142_setup.com
    $ def JAVA$CLASSPATH VMSIT3$DKA100:[MP.fop.build]fop.jar,-
    VMSIT3$DKA100:[mp.fop.build]avalon-framework.jar,-
    VMSIT3$DKA100:[mp.fop.build]commons-io.jar,-
    VMSIT3$DKA100:[mp.fop.build]commons-logging.jar,-
    VMSIT3$DKA100:[mp.fop.build]serializer.jar,-
    VMSIT3$DKA100:[mp.fop.build]xalan.jar,-
    VMSIT3$DKA100:[mp.fop.build]xercesImpl.jar,-
    VMSIT3$DKA100:[mp.fop.build]xml-apis.jar,-
    VMSIT3$DKA100:[mp.fop.build]xml-apis-ext.jar,-
    VMSIT3$DKA100:[mp.fop.build]xmlgraphics.jar
    $ IF P1.EQS."" THEN EXIT
    $ FLAGS = P1 + " " + P2 + " " + P3 + " "
    $ FLAGS = FLAGS + P4 + " " + P5 + " " + P6 + " "
    $ FLAGS = FLAGS + P7 + " " + P8
    $ java1 :== $ SYS$COMMON:[000000.JAVA$142.JRE.BIN]java$java
    $ java "org.apache.fop.cli.Main" 'FLAGS' 
    
  5. FOP バージョン 0.94 以前の場合

    FOP バージョン 0.94 以前を使用している場合、レンダリング・ツールに古いバージョンの FOP を使用していることを Zen レポートが認識できるようにするために、フラグを設定する必要があります。そのためには、以下のコマンドをターミナル・プロンプトで入力します。

     ZN "%SYS"
     SET ^%SYS("zenreport","oldfop")=1 

    この方法を使用しても、レンダリング・エンジンが FOP 0.94 以前の場合、<block><caption><img>、および <p> の各要素ではパーセンテージ幅を使用できません。これらの要素や他の Zen レポートの表示要素で幅の指定に使用できる別の構文については、“Zen レポートのページのフォーマット” の章の “ディメンジョンとサイズ” を参照してください。

  6. XEP および FOP 以外のレンダリング・エンジンの場合

    PDF レンダリング・エンジンの一般的な選択肢は、XEP または FOP です。XSL-FO から PDF の変換に関して、それぞれ同じコマンド・ライン・オプションのセットをサポートしています。このリストの前述の手順を完了していれば、Zen レポートで XEP エンジンまたは FOP エンジンを使用するために必要な構成作業はこれ以上ありません。

    Zen レポートで XEP や FOP 以外の PDF レンダリング・エンジンを使用する場合は、そのエンジンの呼び出しで別のコマンド・ライン・オプションが必要になることがあります。その場合は、Zen レポート・クラスのクラス・パラメータを使用して、正しいオプション構文を指定します。

    以下のテーブルでは、さまざまな PDF レンダリング・エンジンで Zen レポートを使用する際に関連するクラス・パラメータとそれに設定する値について説明します。このリストにないエンジンについては、そのエンジンのドキュメントを参照して、これらのパラメータに使用する値を確認してください。

    クラス・パラメータ コマンド・ライン・オプションで特定するファイル Zen レポートの既定値 XEP の値 FOP の値 Antenna House XSL Formatter の値
    PDFSWITCH PDF 出力ファイル -pdf -pdf -pdf -o
    XMLSWITCH XSL-FO データ・ファイル -xml -xml -xml -d
    XSLSWITCH XSL-FO スタイルシート・ファイル -xsl -xsl -xsl -s

    詳細は、付録 “Zen レポート・クラスのパラメータ” の “一般的に使用するクラス・パラメータ” を参照してください。

PDF 出力の分割およびマージ

非常に大きなレポートを PDF で出力する場合、FOP レンダリング・エンジンのメモリ制限を超えることがあります。このような場合、レポートをいくつかの小さなセクションに分割することができます。各セクションは個別の一時ファイルとしてディスクに書き込まれ、レポート全体が処理されると 1 つの PDF ファイルとしてマージされます。以下のパラメータをレポートに設定する必要があります。

  • SPLITANDMERGE : このパラメータを true に設定すると、複数の中間ファイルが生成されます。既定値は、false です。

  • REPEATINGELEMENT : 生成される XML 内のどのレポート要素でレポートを分割するかを指定します。この要素は、レポートで生成する XML データのルート要素の直接の子である必要があります。

  • COUNTREPEATINGELEMENT : REPEATINGELEMENT に設定されている繰り返し要素を各中間ファイルに配置する回数を指定します。既定値は 100 ですが、各繰り返し要素のレポート出力が大きいと、この値では高すぎる場合があります。

計算されたページ数は、マージされたレポートでは有効ではない場合があります。これは、再計算またはページ集計の変更を行うロジックがマージ処理にはないためです。最初または最後のページの特殊なフォーマット用に定義した <masterreference> 要素はいずれも、各分割セクションに独立して適用されます。また、繰り返し要素に含まれていない要素 (最終的な集約など) は、最終レポートには表示されないということに注意してください。

上記の各パラメータには対応するプロパティが用意されているので、このプロパティを使用してレポートを分割およびマージすることも可能です。以下の例では、GenerateReport を使用して、Caché ターミナルでレポートを分割およびマージする際のこれらのプロパティの設定を示しています。

 zn "SAMPLES"
 do ##class(ZENDemo.Home).CreateDemoData() 
 s rpt1=##class(ZENApp.MyReport).%New()
 s rpt1.RepeatingElement="SalesRep"
 s rpt1.CountRepeatingElement=5
 s rpt1.SplitAndMerge=1
 s rpt1.Month=1
 s Status=rpt1.GenerateReport("c:\temp\MyReport1.pdf",0)
 d $System.Status.DisplayError(Status)
 w $System.Status.DisplayError(Status)

これらのパラメータの記号名の前に $ を付加して $SPLITANDMERGE、$REPEATINGELEMENT、および $COUNTREPEAINGELEMENT とし、レポートの URL に設定することもできます。

以下のサンプル URI では、これらのパラメータを URL で渡しています。正しい URI は、1 行にすべてを記述しますが、このサンプルではわかりやすくするために改行が追加されています。

http://localhost:57772/csp//samples/ZENApp.MyReport.cls
?$MODE=pdf&$SPLITANDMERGE=1&$REPEATINGELEMENT=SalesRep
&$COUNTREPEATINGELEMENT=5

また、SPLITANDMERGE を使用して、レポートをいくつかの PDF ファイルとして生成することもできます。この方法は、請求書作成アプリケーションで、大きなマスタ XML ファイルから各顧客の請求書用に個別の PDF ファイルを生成する必要がある場合などに使用できます。前述した 3 つのパラメータの設定に加えて、SplitOnly プロパティを true に設定する必要があります。既定値は、false です。SplitOnly が true の場合、PDF ファイルが生成されディスクに書き込まれますが、最後にマージはされません。個々の PDF ファイル名は、プロパティ %SplitReturnedPDF で返されます。デバッグ時など、生成される PDF ファイルのディレクトリやファイル名の指定が必要になる場合もあります。ディレクトリをプロパティ SplitDir に指定し、生成されるファイルのルート名をプロパティ SplitRootName に指定すると、各ファイルに連続した整数が付加されます。

HotJVM レンダリング・サーバ

Zen レポートには、PDF レンダリングのパフォーマンスを向上させる HotJVM レンダリング・サーバ機能があります。HotJVM レンダリング・サーバは、バックグラウンドで動作し、Zen レポートを PDF ファイルとしてレンダリングする Java 仮想マシンのプロセスです。バックグラウンド・プロセスとして実行することによって、HotJVM は、Java 仮想マシンを起動するオーバヘッドを排除し、高速の PDF レンダリングを可能にします。

管理ポータルの [レンダリング・サーバ] ページ ([システム管理][構成][Zen レポート][レンダリング・サーバ]) に、現在構成されているレンダリング・サーバが表示されます。Caché を最初にインストールしたとき、構成済みのレンダリング・サーバはありません。レンダリング・サーバはシステム・メモリを消費するため、レンダリングのパフォーマンスを向上させる必要がない場合、レンダリング・サーバを構成して実行しないでください。レンダリング・サーバを構成済みの場合、レンダリング・サーバのポートを使用してレポートを生成しようとすると、レンダリング・サーバは自動的に起動します。

HotJVM レンダリング・サーバの作成

[新規レンダリング・サーバ] ボタンにより、[新しい ZEN レポート・レンダリング・サーバ] ページが開き、新しいレンダリング・サーバを構成できます。最初の 3 つのフィールドは必須ですが、残りのフィールドはオプションです。

  • 名前 : レンダリング・サーバの一意の名前。

  • ポート : レンダリングするレポートを受信するためにレンダリング・サーバが使用する TCP ポート。

  • Ping ポート : ステータスのクエリ、シャットダウン要求など、他のすべての通信のためにレンダリング・サーバが使用する TCP ポート。

  • スレッド数 : レンダリング・サーバがマルチスレッドの Java を使用している場合、このフィールドは、レポートをレンダリングするためにレンダリング・サーバが使用するスレッド数を指定します。

  • Ping スレッド数 : レンダリング・サーバがマルチスレッドの Java を使用している場合、このフィールドは、その他の通信用にレンダリング・サーバが使用するスレッド数を指定します。

  • PDF レンダリング・ツール : Zen レポートの PDF レンダリングのためにレンダリング・サーバが使用するレンダリング・ツール。値 FOP は既定値で、Caché と共にインストールされている Apache FOP のバージョンを表します。RenderX XEP を選択した場合、XEP_HOME 環境変数を指定して、構成ファイル xep.xml の場所を指定する必要があります。

  • レンダリング・ツール構成ファイル : 組み込みの FOP レンダリング・ツールの構成情報を格納しているファイル。このフィールドには、既定のファイル名 C:\MyCache\fop\conf\fop.xconf が自動的に入力されます。このファイルは、組み込みの FOP に付属しています。これをカスタム・ファイルのテンプレートとして使用できます。ファイル C:\MyCache\fop\conf\fop.xconf_dist は、バックアップ・コピーです。別の構成ファイルを使用する場合、ここにファイル名を入力します。

    RenderX XEP PDF レンダリング・ツールを選択した場合、このフィールドはフォームに表示されません。XEP_HOME 環境変数を使用して、xep.xml (RenderX XEP 構成ファイル) の場所を指定する必要があります。

  • ログ・レベル : ロギングを制御する Java の標準パラメータ。ロギングを有効にすることを選択した場合、以下の 3 つの項目がフォームに表示されます。

    • ログ・ファイル : 既定では、レンダリング・サーバのログ・ファイルは、ホーム・ディレクトリに作成されます。ここで別の場所を指定できます。Unix システムでは、特権問題を回避するために、ユーザが適切な権限を保持する場所を指定します。

      レンダリング・サーバを停止して再起動するたびに、新しいログ・ファイルが作成されます。レンダリング・サーバは、ファイル・サイズが [最大ファイル・サイズ] で設定された制限を超えた場合にも新しいログ・ファイルを開始します。ログ・ファイル名には、数字の接尾語が付きます。.0 で終わるファイルが最新です。新しいファイルが作成されると、前のファイルの名前が大きい数字の接尾辞に変更されます。この名前変更は、ファイル数が [ローテーション・カウント] によって設定された制限に到達するまで続きます。この制限に到達すると、名前がリサイクルされ、古い情報が失われます。このフィールドは、ログ・ファイルのパスおよびベース・ファイル名を指定します。

      複数のレンダリング・サーバを構成する場合、ログ・ファイル名を指定すると、ログ・ファイルとログ・ファイルを作成したレンダリング・サーバの一致が容易になります。

    • 最大ファイル・サイズ : レンダリング・サーバのログ・ファイルの最大サイズ。レンダリング・サーバは、現在のログ・ファイルのサイズがこの制限に到達すると、新しいログ・ファイルを作成します。

    • ローテーション・カウント : 最大ログ・ファイル数。レンダリング・サーバは、ログ・ファイル数がこの制限に到達すると、ファイル名をリサイクルし、古い情報を失います。

  • 初期化タイムアウト : レンダリング・サーバが起動するまで Zen レポートが待機する時間 (秒単位)。レンダリング・サーバがこの時間内に起動できない場合、エラーが発生します。

  • 接続タイムアウト : レポートをレンダリングするときに、レンダリング・サーバが接続するまで Zen レポートが待機する時間 (秒単位)。通常、接続にかかる時間は初期化にかかる時間より短くなります。レンダリング・サーバがこの時間内に接続できない場合、エラーが発生します。

  • キューの初期サイズ : レンダリング・キューの初期サイズ。

  • メモリのしきい値 : メモリ使用量のしきい値を定義するバイト数。例えば、1,000,000 は 100 万バイトを意味します。100 万バイトを表すために、1000K などの省略表記は使用できません。

  • しきい値のポーリング期間 (ms) : メモリのしきい値をポーリングする前の待機時間 (ミリ秒)。

[キューの初期サイズ][メモリのしきい値]、および [しきい値のポーリング期間 (ms)] の追加情報は、"HotJVM レンダリング・サーバのメモリ管理" を参照してください。

RenderX XEP を使用するようにレンダリング・サーバを構成する場合、次の追加フィールドが構成ページに表示されます。

  • クリーンアップ頻度 (XEP) : RenderX がクリーンアップが必要なほど多くのファイルを処理したかどうかをレンダリング・サーバが確認する間隔 (秒単位)。既定値は 300 秒 (5 分) です。

  • [クリーンアップ前のファイル数 (XEP)] : レンダリング・サーバがクリーンアップ処理を開始する前に、RenderX が処理できるファイル数。既定値は 100 です。

  • XEP_HOME 環境変数 : XEP のインストール・ディレクトリへのパスです。

RenderX は、実行するにつれてメモリを消費していく可能性があるため、クリーンアップ処理を定期的に実行する必要があります。クリーンアップもリソースを消費するため、クリーンアップを実行するタイミングを決定するパラメータを設定できるように、フィールドが提供されています。クリーンアップの必要性は、RenderX が処理したファイル数によって決まります。フィールド [クリーンアップ前のファイル数 (XEP)] を使用して、この数を設定します。[クリーンアップ頻度 (XEP)] で設定する値は、RenderX がファイル数制限に到達したかどうかをレンダリング・サーバが確認する頻度を決定します。

変更を保存したら、[キャンセル] ボタンを使用して [レンダリング・サーバ] ページに戻り、ここで新しいレンダリング・サーバがリストに追加されていることを確認します。

HotJVM レンダリング・サーバの使用

[レンダリング・サーバ] ページ ([システム管理][構成][Zen レポート][レンダリング・サーバ]) の各リストの右側にある [管理] ボタンを使用すると、値を編集したり、次に示す追加のタスクを実行できます。

  • 削除 : レンダリング・サーバを削除します。実行中のレンダリング・サーバの編集または削除はできません。

  • 開始 : レンダリング・サーバを開始します。確認を求め、そのステータスに関する情報を提供します。レンダリング・サーバ・ポートを使用してレポートを生成する場合は、レンダリング・サーバが自動的に起動されます。

  • 停止 : レンダリング・サーバを停止します。確認を求め、そのステータスに関する情報を提供します。

  • 確認 : レンダリング・サーバに割り当てられたポートのステータスをチェックします。レンダリング・サーバが動作中には、ポートは使用中であると予測されます。レンダリング・サーバが動作していない場合は、ポートは使用されていません。

  • アクティビティ : 最後のシャットダウン以後のこのサーバのアクティビティを要約します。

  • ログ : ログ・ファイルを開きます。

Zen レポートでは、RENDERSERVER クラス・パラメータをレンダリング・サーバが待ち受けるポートに設定できます。続いて、モードを PDF に設定してページをロードします。RENDERSERVER クラス・パラメータを Zen アプリケーション全体に設定することもできます。もう一つの選択肢として、予約キーワード $RENDERSERVER を URL で使用して、ポート番号を渡す方法もあります。また、このキーワードを使用して、コマンド行からサーバ上でレポートを実行し、ユーザ定義の出力ファイルにレポートを生成することもできます。以下のサンプルは、その概要を示しています。

 zn "SAMPLES"
 set rpt1=##class(ZENApp.MyReport).%New()
 set rpt1.Month=1
 set Status=rpt1.GenerateReport("c:\temp\MyReport.pdf",2,0,57777)
 do $System.Status.DisplayError(Status)

GenerateReport の 4 番目のパラメータには、HotJVM のレンダリング・サーバのポートを指定しています。

Zen レポートの RenderTimeOut プロパティでは、レンダリング・サーバがタイムアウトする前にレポートを待つ時間の長さを制御します。正の整数の場合は、タイムアウトする前の待機時間 (秒) を指定します。値が 0 の場合は直ちにタイムアウトすることを示し、値が –1 の場合はタイムアウトしないことを示します。また、$RENDERTIMEOUT を使用して、URL 内のタイムアウト間隔を渡すことができます。既定値は NULL (Caché では "") で、タイムアウトしないことを示します。

HotJVM レンダリング・サーバとの通信

%ZEN.Report.PingOpens in a new tab クラスには ping メソッドが用意されており、HotJVM レンダリング・サーバとの通信に使用できます。

ping によって、ポートやサーバの種類のほかに、使用可能な最大メモリ、コミットされたメモリ、および使用されているメモリの量が返されます。レンダリング・サーバでは、Java Tenured Generation プールを使用して、メモリに関する情報を取得し、その情報を ping に返します。レンダリング・サーバが Java Tenured Generation プールを見つけられない場合は、最大メモリおよび使用されているメモリの値に空白の文字列 ("") を返します。

また、ping メソッドでは、pid@hostname 形式のランタイム名が返されます。$PIECE を使用することで、その文字列を処理し、プロセス ID を取得できます。

以下の例は、ping の使用方法を示しています。

 set Status=##class(%ZEN.Report.Ping).ping("1234",30,.port,.servertype,.memMax,.memCommitted,.memUse,.runtimeName)
 write !,"port="_port
 write !,"servertype="_servertype
 write !,"memMax="_memMax
 write !,"memCommitted="_memCommitted
 write !,"memUse="_memUse
 write !,"runtimeName="_runtimeName

HotJVM レンダリング・サーバのメモリ管理

PDF レンダリングは、特に非常に大きいレポートを生成している場合、大量のメモリを消費する可能性があります。レンダリング・エンジンが使用可能な物理メモリを使い果たした場合は、パフォーマンスが低下し、メモリ不足エラーが発生します。メモリ不足エラーの最も確実な解決方法は、レンダリング・サーバを実行しているマシンに十分な量の物理メモリを配置することで、これによりメモリ不足エラーが発生しなくなります。Charlie Hunt 氏と Binu John 氏の著書 Java Performance では、JVM を設定してメモリ不足エラーを記録する方法が説明されています。さらに、最も負荷がかかると思われる設定でシステムをテストすることで、そのログを使用してメモリ不足エラーが発生するタイミングを特定できます。マシンのメモリがすべてのレポートを表示できる十分な量になるまでメモリを追加します。

Zen レポートには、レポートを表示する間のメモリ使用量を管理できる機能があります。まずは、レンダリング・サーバ上でのキューイング統制機能があります。レンダリング要求を直接処理するのではなく、レンダリング・サーバのキューにそれらを格納します。レンダリング・サーバのキューでは、以下の方法でレンダリングをゲート制御します。

  • レポートがキューに入ります。

  • そのキュー・サイズがキュー・サイズの初期値より小さい場合は、レポートを表示します。

  • そのキュー・サイズがキュー・サイズの初期値より大きい場合は、レポートをキューに保持します。

  • キューにあるレポートがスレッドに表示されます。

  • キューからスレッドを削除して、キュー・サイズを小さくします。

キュー・サイズを使用することで、スレッドに送るレポートの数を減らせるほか、レンダリング要求の処理に使用可能なスレッド数までその要求をキューに保持できます。[レンダリング・サーバ] ページ ([システム管理][構成][Zen レポート][レンダリング・サーバ]) の [キューの初期サイズ] フィールドで、キューの最大サイズを設定できます。キュー・サイズの既定値は、レンダリング・スレッドの数に該当し、通常はスレッド数以下の値を設定します。キュー・サイズが小さくなるほど、同時に表示されるレポートの数が少なくなります。ベンチマークによって最適なキュー・サイズを割り出す必要があります。スレッド数がコアまたはプロセッサの数を超えている場合は、パフォーマンスがほとんど向上しない結果につながる可能性が高くなります。レンダリングの実行に使用可能なスレッドより、レンダリング・サーバに届いたレンダリング要求のほうが多い場合は、限定された数のスレッドを指定することですでにキューが発生していることに注意してください。

レンダリング・サーバのキューイング統制機能によって、多すぎるレポートを一度に表示して発生するメモリ不足は防げますが、これでメモリ使用量の問題をすべて解決できるわけではありません。それは、メモリ不足エラーを引き起こすのに十分な大きさがある、単一のレポートについてはまだ、レンダリング・サーバに送信できるからです。

追加のメモリ管理機能では、Tenured Generation プールのしきい値のサイズを定義できます。 レンダリング・サーバがレンダリング要求を受け取り、そのサイズがしきい値を超えている場合は、指定した時間 (ミリ秒) の間、レンダリング・サーバが休止します。レンダリング・サーバでは、メモリ使用量がしきい値のサイズを下回るまで Tenured Generation プールのサイズをポーリングし、その後にレンダリング要求を実行します。このアルゴリズムによって、レンダリング・サーバが低いメモリ状態に適応できるように、メモリ使用量がしきい値の設定を下回るまでレンダリングを遅らせることができます。[レンダリング・サーバ] ページ ([システム管理][構成][Zen レポート][レンダリング・サーバ]) の [メモリのしきい値] フィールドで、メモリのしきい値を設定できます。[メモリのしきい値] および管理ポータルを使用したその他のメモリ管理パラメータの設定の詳細は、"HotJVM レンダリング・サーバの作成" を参照してください。

レンダリング・サーバでは、メモリ不足の状態が発生した場合は常に、System.exit(1) が実行されます。 これにより、レンダリング・サーバは、メモリ不足の状態が発生した場合により確定的に動作できます。

印刷サーバ

Zen レポートには、PDF 印刷のパフォーマンスを向上させる印刷サーバ機能があります。印刷サーバは、バックグラウンドで動作し、Zen レポートの PDF ファイルを印刷する Java 仮想マシンのプロセスです。Windows 7 以降、Caché は外部プロセスを開始できなくなったため、pdfprint を実行するには印刷サーバが必要になります。バックグラウンド・プロセスとして実行することで、印刷サーバは、Java 仮想マシンを起動するオーバヘッドを排除しています。印刷サーバは VMS ではサポートされていません。

管理ポータルの [印刷サーバ] ページ ([システム管理][構成][Zen レポート][印刷サーバ]) に、現在構成されている印刷サーバが表示されます。Caché を最初にインストールしたときには、構成済みの印刷サーバはありません。印刷サーバが構成済みの場合は、印刷サーバのポートを使用してレポートを印刷しようとしたときに、印刷サーバが自動的に起動します。

Tip:

以下の手順に従うことに加え、Caché インスタンスを実行する名前を持つユーザに適切なプリンタへのアクセス許可があることを確認します。

印刷サーバの作成

[新規印刷サーバ] ボタンにより、[新規印刷サーバ] ページが開き、新しい印刷サーバを構成できます。最初の 3 つのフィールドは必須ですが、残りのフィールドはオプションです。

  • 名前 : 印刷サーバの一意の名前。

  • ポート : 印刷するレポートを受信するために印刷サーバが使用する TCP ポート。

  • Ping ポート : ステータスのクエリ、シャットダウン要求など、他のすべての通信のために印刷サーバが使用する TCP ポート。

  • スレッド数 : 印刷サーバがマルチスレッドの Java を使用している場合、このフィールドは、レポートをレンダリングするために印刷サーバが使用するスレッド数を指定します。

  • Ping スレッド数 : 印刷サーバがマルチスレッドの Java を使用している場合、このフィールドは、その他の通信用に印刷サーバが使用するスレッド数を指定します。

  • 印刷エンジン : Zen レポートを印刷するために印刷サーバが使用する印刷エンジン。選択肢は Qoppa ソフトウェアの jPDFPrint、Foxit ソフトウェアの Foxit、または Adobe です。“印刷エンジン” を参照してください。

  • キー : Qoppa jPDFPrint を購入すると提供されるライセンス・キー。Qoppa を使用しない場合、このフィールドは表示されません。

  • ログ・レベル : ロギングを制御する Java の標準パラメータ。ロギングを有効にすることを選択した場合、以下の 3 つの項目がフォームに表示されます。

    • ログ・ファイル : 既定では、印刷サーバのログ・ファイルはホーム・ディレクトリに作成されます。ここで別の場所を指定できます。Unix システムでは、特権問題を回避するために、ユーザが適切な権限を保持する場所を指定します。

      印刷サーバを停止して再起動するたびに、新しいログ・ファイルが作成されます。印刷サーバは、ファイル・サイズが [最大ファイル・サイズ] で設定された制限を超えた場合にも、新しいログ・ファイルを開始します。ログ・ファイル名には、数字の接尾語が付きます。.0 で終わるファイルが最新です。新しいファイルが作成されると、前のファイルの名前が大きい数字の接尾辞に変更されます。この名前変更は、ファイル数が [ローテーション・カウント] によって設定された制限に到達するまで続きます。この制限に到達すると、名前がリサイクルされ、古い情報が失われます。このフィールドは、ログ・ファイルのパスおよびベース・ファイル名を指定します。

      複数の印刷サーバを構成する場合は、ログ・ファイル名を指定すると、ログ・ファイルとログ・ファイルを作成した印刷サーバの照合が容易になります。

    • 最大ファイル・サイズ : 印刷サーバのログ・ファイルの最大サイズ。印刷サーバは、現在のログ・ファイルのサイズがこの制限に到達すると、新しいログ・ファイルを作成します。

    • ローテーション・カウント : 最大ログ・ファイル数。印刷サーバは、ログ・ファイル数がこの制限に到達すると、ファイル名をリサイクルするため、古い情報が失われます。

  • 初期化タイムアウト : 印刷サーバが起動するまで Zen レポートが待機する時間 (秒単位)。印刷サーバがこの時間内に起動できない場合、エラーが発生します。

  • 接続タイムアウト : レポートを印刷するときに、Zen レポートが印刷サーバの接続を待機する時間 (秒単位)。通常、接続にかかる時間は初期化にかかる時間より短くなります。印刷サーバがこの時間内に接続できない場合、エラーが発生します。

[保存] ボタンを使用して変更を保存するか、[キャンセル] ボタンを使用して、[Zen レポート印刷サーバ] ページに戻ります。変更を保存すると、新しい印刷サーバがリストに追加されていることがわかります。

印刷エンジン

利用可能な印刷サーバの印刷エンジンは、Qoppa ソフトウェアの jPDFPrint、Foxit、および Adobe Reader 印刷エンジンです。これらはすべてサードパーティの製品です。Windows 7 の場合は、バックグラウンド・ジョブはデスクトップとやり取りできません。印刷サーバにより、この問題が回避されます。 Windows 7 の場合、システム・サービスに属する Caché サービスは、動作する pdfprint または印刷サーバの管理権限を持つ実ユーザとしてログインする必要があります。

Adobe の場合、<cacheinstall>/lib/PrintServer ディレクトリに PrintServer.properties ファイルを作成する必要があります。このファイルにより、印刷サーバは Adobe の場所を認識できます。PrintServer.properties ファイルの例を、次に示します。

adobe=C:/Program Files (x86)/Adobe/Reader 11.0/Reader/AcroRd32.exe

このファイルではスラッシュを使用することに注意してください。これは、ファイル・パスの名前を Java プログラムが解釈し、Java ではバックスラッシュ (“\”) がエスケープ文字になるためです。

Qoppa を選択する場合は、jPDFPrint jar ファイルの場所を示す環境変数を定義する必要があります。Windows では、この変数をシステム環境変数に含めます。例えば、環境変数 JPDFPRINT_HOMEc:\Program Files\jPDFPrint に設定します。

印刷サーバの管理

[印刷サーバ] ページ ([システム管理][構成][Zen レポート][印刷サーバ]) の各リストの右側にある [管理] ボタンを使用すると、値を編集したり、次に示す追加のタスクを実行できます。

  • 削除 : 印刷サーバを削除します。実行中の印刷サーバの編集または削除はできません。

  • 開始 : 印刷サーバを開始します。確認を求め、そのステータスに関する情報を提供します。印刷サーバ・ポートを使用してレポートを生成する場合、印刷サーバが自動的に起動します。

  • 停止 : 印刷サーバを停止します。確認を求め、そのステータスに関する情報を提供します。

  • 検証 : 印刷サーバに割り当てられたポートのステータスをチェックします。印刷サーバの動作中はポートも使用中であり、印刷サーバが動作していないときはポートも使用されていないと予測できます。

  • アクティビティ : 最後にシャットダウンした後の、この印刷サーバのアクティビティについての要約を示します。

  • ログ : ログ・ファイルを開きます。ブラウザで表示されるファイルの最大サイズは 1 MB で、この制限よりも大きなファイルは切り捨てられます。

Zen レポートでは、PRINTSERVER クラス・パラメータを印刷サーバが待ち受けるポートに設定できます。その後で、モードを pdfprint に設定してページをロードします。PRINTSERVER クラス・パラメータを Zen アプリケーション全体に設定することもできます。

Zen レポートの PrintTimeOut プロパティでは、タイムアウトするまでにレポートが印刷サーバを待機する時間の長さを制御します。正の整数の場合は、タイムアウトする前の待機時間 (秒) を指定します。値が 0 の場合は直ちにタイムアウトすることを示し、値が –1 の場合はタイムアウトしないことを示します。また、$PRINTTIMEOUT を使用して、URL でタイムアウト間隔を渡すことができます。既定値は NULL (Caché では "") で、タイムアウトしないことを示します。

印刷サーバとの通信

%ZEN.Report.PingOpens in a new tab クラスには ping メソッドが用意されています。このメソッドは、印刷サーバとの通信に使用できます。

ping によって、ポートやサーバの種類のほかに、使用可能な最大メモリ、コミットされたメモリ、および使用されているメモリの量が返されます。印刷サーバでは、Java Tenured Generation プールを使用して、メモリに関する情報を取得し、その情報を ping に返します。印刷サーバは、Java Tenured Generation プールを見つけられない場合、最大メモリと使用されているメモリの値に空白の文字列 ("") を返します。

また、ping メソッドでは、pid@hostname 形式のランタイム名が返されます。$PIECE を使用することで、その文字列を処理し、プロセス ID を取得できます。

以下の例は、ping の使用方法を示しています。

 set Status=##class(%ZEN.Report.Ping).ping("1234",30,.port,.servertype,.memMax,.memCommitted,.memUse,.runtimeName)
 write !,"port="_port
 write !,"servertype="_servertype
 write !,"memMax="_memMax
 write !,"memCommitted="_memCommitted
 write !,"memUse="_memUse
 write !,"runtimeName="_runtimeName

Excel スプレッドシート出力向け Zen レポートの設定

Zen レポートを使用して、Caché データベースのデータから Excel スプレッドシートを生成することができます。パラメータ DEFAULTMODE を "excel"" に設定するか、URI のクエリ・パラメータに $MODE=excel を設定して、Excel スプレッドシートを生成するように Zen レポートを設定する必要があります。コンピュータに Excel 2003 以降のバージョンがインストールされているか、Office 2003 の Microsoft XML ファイル形式を読み取るためのプラグインまたはプログラムが登録されている必要があります。Java 仮想マシン (JVM) と Java Developers Kit (JDK) バージョン 1.7 以降もインストールされている必要があります。

Office 2007 または Office 2010 を使用している場合は、DEFAULTMODE を "xlsx" に設定するか、URI クエリ・パラメータ $MODE=xlsx を設定する必要があります。この値によって、Zen レポートは、Office 2007 および Office 2010 固有の Excel xlsx フォーマットを使用してスプレッドシートを生成するようになります。xlsx モードは、VMS ではサポートされていません。

レポート出力に ReportDisplay ブロックを使用していなくても、これを定義し、この name 属性を ReportDefinition の name 属性と同じにする必要があります。

Excel スプレッドシートを生成するために、ReportDefinition ブロックは非常に特殊な構造を持つ必要があります。Zen レポートでは ReportDefinition の要素を使用して XML を生成し、その XML を使用して Excel スプレッドシートを生成します。以下の図は、ReportDefinition の要素が Excel スプレッドシートのコンポーネントへどう対応するかを示しています。以降のセクションでこのプロセスの詳細を示します。

generated description: zen excel structure

Caché バージョン 2015.1 以降では、DEFAULTMODE を "displayxlsx" に設定する処理が Zen レポートでサポートされています。このモードにより、ReportDisplay ブロックを使用して、任意の ReportDefinition ブロックの出力を、Excel スプレッドシートの生成に適切な XML に変換できます。"任意の XML からの Excel スプレッドシートの生成" を参照してください。

以下のリストに、Excel スプレッドシート生成で使用できるモードをまとめます。

  • excel – Excel 2003 以降、Office 2007 および Office 2010 以前の Excel スプレッドシート用。

  • xlsx – Office 2007 および Office 2010 用。

  • displayxlsx – ReportDefinition 出力が必要とされる形式ではない場合の Office 2007 および Office 2010 用。

スプレッドシートへのデータの格納

既定では、<element> 要素のデータのみがスプレッドシートに使用されます。以下の <report> ブロックでは、TheaterName と AdultPrice に <element> が使用されていますが、ChildPrice には <attribute> が使用されています。

<report xmlns="http://www.intersystems.com/zen/report/definition"
    name="ReportExample"
    sql="Select Top 2 TheaterName, AdultPrice, ChildPrice from Cinema.Theater">
  <group name="Theater">
   <element name="TheaterName" field="TheaterName" />
   <element name="AdultPrice" field="AdultPrice" />
   <attribute name="ChildPrice" field="ChildPrice" />
  </group>
 </report>

以下のような XML 出力が生成されます。

<ReportExample>
  <Theater ChildPrice="5.75">
    <TheaterName>General Cinema Cambridge</TheaterName>
    <AdultPrice>7.25</AdultPrice>
  </Theater>
  <Theater ChildPrice="4.75">
     <TheaterName>Boston Multiplex</TheaterName>
    <AdultPrice>6.25</AdultPrice>
  </Theater>
</ReportExample>

これにより、以下のような Excel スプレッドシートが生成されます。スプレッドシートには、<element> 要素の値のみが表示されています。

generated description: elements

クラス・パラメータ EXCELMODE によって、スプレッドシートの値が <element> と <attribute> のどちらの要素から取得されるかが決まります。既定値は、"element" です。EXCELMODE = "attribute" に設定すると、この <report> ブロックは以下のようになります。

<report
 xmlns="http://www.intersystems.com/zen/report/definition"
 name="ReportExample"
 sql="Select Top 10 TheaterName, AdultPrice, ChildPrice from Cinema.Theater">
  <group name="Theater">
    <attribute name="TheaterName" field="TheaterName" />
    <element name="AdultPrice" field="AdultPrice" />
    <attribute name="ChildPrice" field="ChildPrice" />
  </group>
</report>

以下の XML が生成されます。

<ReportExample>
  <Theater TheaterName="General Cinema Cambridge" ChildPrice="5.75">
    <AdultPrice>7.25</AdultPrice>
  </Theater>
  <Theater TheaterName="Boston Multiplex" ChildPrice="4.75">
    <AdultPrice>6.25</AdultPrice>
  </Theater>
</ReportExample>

これにより、以下のような Excel スプレッドシートが生成されます。スプレッドシートには、<attribute> 要素の値のみが表示されています。

generated description: attributes

EXCELMODE = "attribute" は、柔軟性がなく、Excel メタデータを保持できないため、これを使用することは推奨できません。例えば、属性で isExcelNumber または isExcelDate を指定できないため、すべてのデータがテキストとして扱われます。このため、Excel がテキストで算術演算を実行しようとすると、集約が正常に動作しなくなります。また、ある状況では、スプレッドシートで列がレポートで指定された順序ではなく属性名のアルファベット順に表示されます。このため、集約が属性と同じアルファベット順に並べられていない場合、集約で不一致が発生する可能性があります。以下は、関連する状況です。

  • mode = "excel" で EXCELMULTISHEET が既定値の 0 の場合、EXCELMODE = "attribute" は、アルファベット順ではなく、XML で指定された順序で属性から列を生成します。

  • mode = "xlsx" または EXCELMULTISHEET が 1 の場合、EXCELMODE = "attribute" は、属性名のアルファベット順に属性から列を生成します。

数値、日付および集約

前のセクションで示した例では、どちらの Excel スプレッドシートでも数値がテキストとして解釈されています。Zen レポートでは、値を数値、日付、または時間として解釈するように Excel に指示することができます。この機能は、EXCELMODE = "element" の場合にのみ使用できます。

Zen レポートは、Excel スプレッドシートの数値、日付値、および時間値を 2 とおりの方法でサポートしています。この方法は、スプレッドシートを excel (Excel 2003) モードと xlsx (Excel 2007 と 2010) モードのどちらで生成したかによって決まります。excel モードの場合は、isExcelNumberisExcelDate または isExcelTime を使用すると、<element> から得られる値をスプレッドシートで数値、日付または時間のいずれかとして扱う必要があることを指定できます。また、xslx モードで生成したスプレッドシートの場合、Zen レポートでは追加の書式設定情報を excelNumberFormat で指定できます。

時間要素を含むグループの runtimeMode が 1 (ODBC) または 2 (display) の場合、時間式は表示形式にする必要があります。例えば、$ztime($P($h,",",2)) のようにします。 runtimeMode が 0 (logical) の場合、時間式は論理形式にする必要があります。例えば、$P($h,",",2) のようにします。

excelNumberFormat での使用がサポートされる数値、日付および時間の形式は、Microsoft Excel のファイル形式を定義している ISO 標準規格を元にしています。これについては、c051463_ISOIEC 29500-1_2008(E).pdf を参照してください。このドキュメントは、次の場所にあります。

http://standards.iso.org/ittf/PubliclyAvailableStandards/index.htmlOpens in a new tab

29500、パート 1 を検索してください。

次に示す例は、数値、日付、および時間を含むスプレッドシートを excel モードで生成します。

<report xmlns="http://www.intersystems.com/zen/report/definition"
 name="MyReport" runonce="true" >
 <group name="Persons" 
  sql="SELECT top 5 name,Home_City as city,age,dob from Sample.Person 
  order by Home_City" runtimeMode="1" 
  excelSheetName="Sample People" >
  <group name="Person" >
   <element field="age" name="age" excelName="Age" 
    isExcelNumber="true"/>
   <element field="dob" name="dob" excelName="Date of Birth" 
    isExcelDate="true"/>
   <element name="time" 
    expression='$ztime($P($h,",",2))' excelName="Time" 
    isExcelTime="true"/>
  </group>
 </group>
</report>

以下のような Excel 出力が生成されます。

generated description: excel ndt

次の例では、xlsx モードでサポートされている、いくつかの数値形式を示しています。

<report xmlns="http://www.intersystems.com/zen/report/definition"
 name="MyReport" runonce="true" >
 <group name="Cinemas" 
  sql="SELECT top 10 TheaterName,AdultPrice,ChildPrice from 
  Cinema.Theater order by TheaterName" >
  <group name="Cinema">
   <element field="AdultPrice" excelName="N0" 
    isExcelNumber="true" excelNumberFormat="0"/>
   <element field="AdultPrice" excelName="N1" 
    isExcelNumber="true" excelNumberFormat="0.00"/>
   <element field="AdultPrice" excelName="N2" 
    isExcelNumber="true" excelNumberFormat="#,##0"/>
   <element field="AdultPrice" excelName="N3" 
    isExcelNumber="true" excelNumberFormat="#,##0.00"/>
   <element field="AdultPrice" excelName="N4" 
    isExcelNumber="true" excelNumberFormat="0%"/>
   <element field="AdultPrice" excelName="N5" 
    isExcelNumber="true" excelNumberFormat="0.00%"/>
   <element field="AdultPrice" excelName="N6" 
    isExcelNumber="true" excelNumberFormat="0.00E+00"/>
   <element field="AdultPrice" excelName="N7" 
    isExcelNumber="true" excelNumberFormat="# ?/?"/>
   <element field="AdultPrice" excelName="N8" 
    isExcelNumber="true" excelNumberFormat="# ??/??"/>
   <element field="AdultPrice" excelName="N9" 
    isExcelNumber="true" excelNumberFormat="#,##0 ;(#,##0)"/>
   <element field="AdultPrice" excelName="N10" 
    isExcelNumber="true" excelNumberFormat="[Blue]#,##0 ;[Red](#,##0)"/>
   <element field="AdultPrice" excelName="N11" 
    isExcelNumber="true" excelNumberFormat="#,##0.00;(#,##0.00)"/>
   <element field="AdultPrice" excelName="N12" 
    isExcelNumber="true" excelNumberFormat="[Blue]#,##0.00;[Red](#,##0.00)"/>
  </group>
 </group>
</report>

以下のような出力が生成されます。

generated description: excel numbers

次の例では、xlsx モードでサポートされている、数種の日付形式を示しています。

<report xmlns="http://www.intersystems.com/zen/report/definition"
 name="MyReport" runonce="true" >
 <group name="Persons" 
  sql="SELECT top 5 name,Home_City as city,age,dob from Sample.Person" 
  runtimeMode="1" excelSheetName="Sample People" >
  <group name="Person" >
   <element field="dob" excelName="Date"
    isExcelDate="true" excelNumberFormat="mm-dd-yy"/>
   <element field="dob" excelName="Date1"
    isExcelDate="true" excelNumberFormat="d-mmm-yy"/>
   <element field="dob" excelName="Date2"
    isExcelDate="true" excelNumberFormat="d-mmm"/>
   <element field="dob" excelName="Date3"
    isExcelDate="true" excelNumberFormat="mmm-yy"/>
   <element field="dob" excelName="Date4"
    isExcelDate="true" excelNumberFormat="m/d/yy h:mm"/>
  </group>
 </group>
</report>

以下のような Excel 出力が生成されます。

generated description: excel dates

次の例では、xlsx モードでサポートされている、数種の時間形式を示しています。

<report xmlns="http://www.intersystems.com/zen/report/definition"
 name="MyReport" runonce="true">
 <group name="Time">
  <group name="TimeFormats">
   <element name="base" expression='$ztime($P($h,",",2))'/>
   <element name="time1" expression='$ztime($P($h,",",2))'
       isExcelTime="true" excelNumberFormat="h AM/PM" />
   <element name="time2" expression='$ztime($P($h,",",2))'
       isExcelTime="true" excelNumberFormat="h:mm AM/PM" />
   <element name="time3" expression='$ztime($P($h,",",2))'
       isExcelTime="true" excelNumberFormat="h:mm:ss A/P" />
   <element name="time4" expression='$ztime($P($h,",",2))'
       isExcelTime="true" excelNumberFormat="h:mm:ss.00" />
  </group>
 </group>
</report>

以下のような Excel 出力が生成されます。

generated description: excel time xlsx

集約

クラス・パラメータ AGGREGATETAG を設定すると、スプレッドシートに集約を追加することもできます。AGGREGATETAG の一般的な値は "aggregate" ですが、有効な XML 属性名であれば任意の値を使用できます。AGGREGATETAG の値は、レポートの <aggregate> 要素から取得された項目を識別するための、生成される XML の属性を作成するために使用されます。属性 excelFormula は、この集約で指定された値がスプレッドシート内で Excel 式になるように指定します。excelFormula は、<aggregate> の type 属性の値と一致する Excel 式でなければなりません。生成可能な Excel 式は、集約の type 属性で指定可能な計算と同等のものに限られます。<aggregate> を参照してください。

集約では、xlsx モードの excelNumberFormat もサポートしています。

集約を使用する場合、生成される Excel スプレッドシートの各列に <aggregate> 要素を指定する必要があります。集約の計算を実行したくない <aggregate> 要素では、type="PLACEHOLDER" を設定できます。AGGREGATETAG="aggregate" を設定した場合は、次に示す <report> ブロックで xlsx モードの Excel スプレッドシートが生成されます。このスプレッドシートでは、AdultPrice および ChildPrice の値は数値として扱われます。また、これらの列の平均値を求める式が組み込まれています。

<report xmlns="http://www.intersystems.com/zen/report/definition"
  name="ReportExample"
  sql="Select Top 3 TheaterName, AdultPrice, ChildPrice from Cinema.Theater">
 <group name="Theater">
  <element name="TheaterName" field="TheaterName"/>
  <element name="AdultPrice" field="AdultPrice" isExcelNumber="true"/>
  <element name="ChildPrice" field="ChildPrice" isExcelNumber="true"/>
 </group>
 <aggregate type="PLACEHOLDER" />
 <aggregate field="AdultPrice" type="AVG" excelFormula="AVERAGE"
  excelNumberFormat="0.00"/>
 <aggregate field="ChildPrice" type="AVG" excelFormula="AVERAGE"
  excelNumberFormat="0.00"/>
</report>

上記のレポートから生成された XML を、次に示します。レポート内の isExcelNumber="true" によって、XML の isExcelNumber="1" が生成されている点に注目してください。属性 aggregate="1" は、その項目が集約であることを示しています。また、属性 excelFormula では、生成されたスプレッドシートで使用される式を指定しています。

<ReportExample>
  <Theater>
    <TheaterName isExcelNumber="0">General Cinema Cambridge</TheaterName>
    <AdultPrice isExcelNumber="1">7.25</AdultPrice>
    <ChildPrice isExcelNumber="1">5.75</ChildPrice>
  </Theater>
  <Theater>
  <TheaterName isExcelNumber="0">Boston Multiplex</TheaterName>
    <AdultPrice isExcelNumber="1">6.25</AdultPrice>
    <ChildPrice isExcelNumber="1">4.75</ChildPrice>
  </Theater>
  <Theater>
    <TheaterName isExcelNumber="0">Loews Downtown</TheaterName>
    <AdultPrice isExcelNumber="1">7.50</AdultPrice>
    <ChildPrice isExcelNumber="1">6.00</ChildPrice>
  </Theater>
  <item aggregate="1" placeholder="1"/>
  <item aggregate="1" excelFormula="AVERAGE" 
   excelNumberFormat="0.00">6.083333333333333333</item>
  <item aggregate="1" excelFormula="AVERAGE" 
   excelNumberFormat="0.00">4.583333333333333333</item>
</ReportExample>

次のイメージは、生成された Excel スプレッドシートであり、ChildPrice の平均を求める式が示されています。

generated description: formula

複数シートのレポート

複数の Excel ワークシートを 1 つの Zen レポート・クラスから作成できます。クラス・パラメータ EXCELMULTISHEET を 1 に設定すると、Zen は、<report> の直接の子である各グループを使用して、Excel スプレッドシートにワークシートを作成します。各グループのコンテンツは、有効な Excel ワークシートを作成する必要があります。

Zen レポートは、EXCELMULTISHEET が 1 の場合、XSLTMODE="browser" または $XSLT=browser をサポートしません。それは、Excel へのレポートのエクスポートは、主に外部 Java プログラムによって行われるためです。複数のワークシートを持つレポートのエクスポート中に生成された一時ファイルは、レポートの REPORTDIR に格納されます。REPORTDIR が NULL の場合、一時ファイルは、Caché が一時ファイルを保持する場所に格納されます。この場所は、既定では C:\MyCache\Mgr\Temp です。“中間ファイルと最終ファイルのファイル名の設定” のセクションを参照してください。

既定では、Zen レポートは Excel の複数ワークシートの名前付け規約 (Sheet1、Sheet2、など) に従います。例えば、EXCELMULTISHEET=1 を設定している場合、以下の <report> ブロックは、Sheet1 および Sheet2 という名前の 2 つのワークシートを含んでいる Excel スプレッドシートを生成します。

<report xmlns="http://www.intersystems.com/zen/report/definition"
     name="MyReport" runonce="true">
  <group name="Persons"
    sql="SELECT top 2 name,Home_City as city,age,dob from Sample.Person order by Home_City"
    runtimeMode="1">
    <group name="Person">
      <element field="name" name="name"/>
      <element field="city" name="city"/>
      <element field="age" name="age" isExcelNumber="true"/>
      <element field="age" name="age1" isExcelNumber="true"/>
      <element field="dob" name="dob" isExcelDate="1"/>
    </group>
    <aggregate type="PLACEHOLDER" excelName="A1"/>
    <aggregate name="city" field="city" type="CUSTOM"
      class="%ZEN.Report.Aggregate.CountDistinct" excelName="A2"/>
    <aggregate field="age" type="SUM" excelFormula="SUM" excelName="A3"/>
    <aggregate field="age" type="SUM" excelFormula="SUM" excelName="A4"/>
    <aggregate type="PLACEHOLDER" excelName="A5"/>
  </group>
  <group name="Cinemas"
    sql="SELECT top 2 TheaterName,AdultPrice,ChildPrice from Cinema.Theater order by TheaterName">
    <group name="Cinema">
      <element field="TheaterName" name="TheaterName" excelName="Theater Name"/>
      <element field="AdultPrice" name="AdultPrice" isExcelNumber="true" excelName="Adult Price"/>
      <element field="ChildPrice" name="ChildPrice" isExcelNumber="true" excelName="Child Price"/>
    </group>
    <aggregate type="PLACEHOLDER"/>
    <aggregate name="TotalAdultPrice" field="AdultPrice" type="SUM" excelFormula="SUM"/>
  </group>
</report>

以下の画像は、結果として得られた Excel スプレッドシートに含まれる 2 つのワークシートを示しています。

generated description: multi persons

generated description: multi cinemas

<report> または <group> のプロパティ excelSheetName を使用すると、Excel ワークシートの名前を指定できます。

<report xmlns="http://www.intersystems.com/zen/report/definition"
name='myReport'
sql="SELECT ID,Customer,Num,SalesRep,SaleDate 
 FROM ZENApp_Report.Invoice 
 WHERE (Month(SaleDate) = ?) OR (? IS NULL)
 ORDER BY SalesRep,SaleDate">
 <parameter expression='..Month'/>
 <parameter expression='..Month'/>

  <group name='SalesRep' breakOnField='SalesRep'
   excelSheetName="SalesRep">
   <group name="record">
   <element name='salesrep' field="SalesRep" excelName="Sales Rep"/>
   <element name='id' field='ID' isExcelNumber="true"/>
   <element name='number' field='Num'
    isExcelNumber="true" excelName="Amount"/>
   <element name='date' field='SaleDate'
    isExcelDate="true" excelName="Date of Sale"/>
   <element name='customer' field='Customer' excelName="Customer"/>
  </group>
 </group>
</report>

以下の画像は、生成された 6 つのワークシートのうち最初の 4 つを示しています。このレポートでは、<report> の直接の子になるグループに excelSheetName の値を設定している点に注意してください。この値は、ワークシートに連続的な名前を生成する際に使用されます。

generated description: multi salesrep

実行時式を excelSheetName の値として使用することもできます。次の例では、この機能を使用して、販売担当者の販売情報を含んでいるシートの名前に、その担当者の名前を使用しています。

<report xmlns="http://www.intersystems.com/zen/report/definition"
name='myReport'
sql="SELECT ID,Customer,Num,SalesRep,SaleDate 
 FROM ZENApp_Report.Invoice 
 WHERE (Month(SaleDate) = ?) OR (? IS NULL)
 ORDER BY SalesRep,SaleDate">
 <parameter expression='..Month'/>
 <parameter expression='..Month'/>

  <group name='SalesRep' breakOnField='SalesRep'
   excelSheetName='!..GetName()'>
   <group name="record">
   <element name='salesrep' field="SalesRep" excelName="Sales Rep"/>
   <element name='id' field='ID' isExcelNumber="true"/>
   <element name='number' field='Num'
    isExcelNumber="true" excelName="Amount"/>
   <element name='date' field='SaleDate'
    isExcelDate="true" excelName="Date of Sale"/>
   <element name='customer' field='Customer' excelName="Customer"/>
  </group>
 </group>
</report>

このレポートには、次のメソッドが必要になります。

Method GetName() 
 {
  quit %val("SalesRep")
 } 

これにより、次に示すように、対応する販売担当者の名前が各シートに付けられたレポートが生成されます。

generated description: multi salesrep name

シート名の生成方法をさらに詳細に制御する必要がある場合は、メソッド %getUniqueExcelSheetName をオーバーライドします。次のサンプル・コードは、このメソッドの %ZEN.Report.reportPageOpens in a new tab 内での定義を示しています。

Method %getUniqueExcelSheetName(excelSheetName As %String) As %String
{
 Set count=$i(%excelSheetNames(excelSheetName))
 if count>1 {
  quit excelSheetName_" ("_count_")"
 } 
 else
 {
  quit excelSheetName
 }
}

任意の XML からの Excel スプレッドシートの生成

Caché バージョン 2015.1 より前のバージョンでは、特別な構造の ReportDefinition ブロックを持つレポートからのみ Excel スプレッドシートを生成できました。その構造により、スプレッドシートへの変換に適切な XML を生成していました。バージョン 2015.1 以降では、ReportDisplay ブロックを使用して、Excel スプレッドシートの生成に必要な構造に任意の ReportDefinition ブロックの XML 出力を変換できます。以下の図は、ReportDisplay の要素がスプレッドシートのコンポーネントへどう対応するかを示しています。

generated description: zen excel structure1

ReportDisplay の各テーブルは、Excel ワークブックのシートに対応しています。テーブルは入れ子にできません。EXCELMULTISHEET パラメータは displayxlsx モードで無視されます。<item> 要素では、isExcelNumber 属性と excelNumberFormat 属性がサポートされています。これらの属性は、類似した名前を持つ属性と同様に、Excel における出力の解釈を制御するために ReportDefinition で使用されます。<table> 要素で excelSheetName 属性を使用し、スプレッドシートの対応シートの名前を渡します。

Note:

Excel 出力を displayxlsx モードで生成する場合、日付は Excel 形式にする必要があります。ToExcelDate メソッドを呼び出して、$HORLOG 形式の日付を Excel 日付形式に変換する必要があります。最初に $HORLOG 形式に変換してから ToExcelDate を呼び出すことで、他の日付形式から Excel 日付形式に変換します。

以下のサンプル・コードは、XML を生成する ReportDefinition を示します。

<report 
 xmlns="http://www.intersystems.com/zen/report/definition"
 name="MyReport" runonce="true">
  <group name="Persons" 
   sql="SELECT top 10 name,age from Sample.Person " 
   runtimeMode="1" >
    <group name="Person" >
     <attribute name="name" field="Name"/>
     <attribute name="age" field="Age"/>
    </group>
  </group>
  <aggregate name="avgage" field="Age" type="AVG"/>
  <group name="Cinemas" 
   sql="SELECT TheaterName,AdultPrice,ChildPrice 
   from Cinema.Theater order by TheaterName" >
    <group name="Cinema">
     <element field="TheaterName" name="TheaterName" />
     <element field="AdultPrice" name="AdultPrice" /> 
     <element field="ChildPrice" name="ChildPrice" />
    </group>
    <aggregate name="TotalAdultPrice" 
     field="AdultPrice" type="SUM" />
  </group>
</report>

その次の例は、Excel レポート生成用に XML を構成する ReportDisplay です。ReportDefinition グループの “Persons/Person” と “Cinemas/Cinema” を参照し、追加 XML を ReportDisplay で生成しています。

<report 
 xmlns="http://www.intersystems.com/zen/report/display"
 name="MyReport">
 <body>
  <table group="Persons/Person" excelSheetName="Persons" 
   width="100%" oldSummary="false">
   <item field="@name" excelName="Name" width="25%"/>
   <item field="@age" isExcelNumber="true" 
    excelName="Age" width="10%">
    <summary value=" " isExcelAggregate="true" />
    <summary field="avgage" 
     formatNumber='###,###,##0.00;(#)' 
     isExcelAggregate="true" 
     excelFormula="AVERAGE"/>
   </item>
  </table>
  <table group="Cinemas/Cinema" 
   excelSheetName="Cinemas" >
    <item field="TheaterName"/>
    <item field="AdultPrice" isExcelNumber="true"/>
   </table>
   <table staticTable="true" 
    excelSheetName="SuperHeroes" >
    <tr>
     <item value="Superman" excelName="Name"/>
     <item value="Clark Kent" excelName="Secret Identity"/>
    </tr>
    <tr>
     <item value="Batman" excelName="Name"/>
     <item value="Bruce Wayne" excelName="Secret Identity"/>
    </tr>
    <tr>
     <item value="Green Lantern" excelName="Name"/>
     <item value="Hal Jordan" excelName="Secret Identity"/>
    </tr>
  </table> 
 </body>
</report>

以下の 3 つの図は Excel 出力を示します。

generated description: displayxlsx 1

generated description: displayxlsx 2

generated description: displayxlsx 3

Excel サーバ

Zen レポートには、Excel スプレッドシート作成時にパフォーマンスを向上させる Excel サーバ機能があります。Excel サーバは、バックグラウンドで動作し、Zen レポートの Excel 出力を作成する Java 仮想マシンのプロセスです。バックグラウンド・プロセスとして実行することで、Excel サーバは、Java 仮想マシンを起動するオーバヘッドを排除しています。

管理ポータルの [Excel サーバ] ページ ([システム管理][構成][Zen レポート][Excel サーバ]) に、現在構成されている Excel サーバが表示されます。Caché を最初にインストールしたときには、Excel サーバは構成されていません。Excel サーバを構成済みの場合、レポートを Excel スプレッドシートとして作成すると、自動的に起動します。

Excel サーバの作成

[新規 Excel サーバ] ボタンにより、[新規 Zen レポート Excel サーバ] ページが開き、新しい Excel サーバを構成できます。最初の 3 つのフィールドは必須ですが、残りのフィールドはオプションです。

  • 名前 : Excel サーバの一意の名前。

  • ポート : レポートを受信するために Excel サーバが使用する TCP ポート。

  • Ping ポート : ステータスのクエリ、シャットダウン要求など、他のすべての通信のために Excel サーバが使用する TCP ポート。

  • スレッド数 : Excel サーバがマルチスレッドの Java を使用している場合、レポートをレンダリングするために Excel サーバが使用するスレッドの数をこのフィールドで指定します。

  • Ping スレッド数 : Excel サーバがマルチスレッドの Java を使用している場合、その他の通信用に Excel サーバが使用するスレッドの数をこのフィールドで指定します。

  • ログ・レベル : ロギングを制御する Java の標準パラメータ。ロギングを有効にすることを選択した場合、以下の 3 つの項目がフォームに表示されます。

    • ログ・ファイル : 既定では、Excel サーバのログ・ファイルはホーム・ディレクトリに作成されます。ここで別の場所を指定できます。Unix システムでは、特権問題を回避するために、ユーザが適切な権限を保持する場所を指定します。

      Excel サーバを停止して再起動するたびに、新しいログ・ファイルが作成されます。Excel サーバは、ファイル・サイズが [最大ファイル・サイズ] で設定された制限を超えた場合にも、新しいログ・ファイルを開始します。ログ・ファイル名には、数字の接尾語が付きます。.0 で終わるファイルが最新です。新しいファイルが作成されると、前のファイルの名前が大きい数字の接尾辞に変更されます。この名前変更は、ファイル数が [ローテーション・カウント] によって設定された制限に到達するまで続きます。この制限に到達すると、名前がリサイクルされ、古い情報が失われます。このフィールドは、ログ・ファイルのパスおよびベース・ファイル名を指定します。

      複数の Excel サーバを構成する場合、ログ・ファイル名を指定すると、ログ・ファイルとログ・ファイルを作成した Excel サーバの照合が容易になります。

    • 最大ファイル・サイズ : Excel サーバのログ・ファイルの最大サイズ。Excel サーバは、現在のログ・ファイルのサイズがこの制限に到達すると、新しいログ・ファイルを作成します。

    • ローテーション・カウント : 最大ログ・ファイル数。ログ・ファイル数がこの制限に到達すると、Excel サーバはファイル名をリサイクルし、古い情報は失われます。

  • 初期化タイムアウト : Excel サーバが起動するまで Zen レポートが待機する時間 (秒単位)。Excel サーバがこの時間内に起動できない場合、エラーが発生します。

  • 接続タイムアウト : レポートをレンダリングするときに、Zen レポートが Excel サーバの接続を待機する時間 (秒単位)。通常、接続にかかる時間は初期化にかかる時間より短くなります。Excel サーバがこの時間内に接続できない場合、エラーが発生します。

[保存] ボタンを使用して変更を保存するか、[キャンセル] ボタンを使用して、[Zen レポート Excel サーバ] ページに戻ります。変更を保存すると、新しい Excel サーバがリストに追加されていることがわかります。

Excel サーバの管理

[Excel サーバ] ページ ([システム管理][構成][Zen レポート][Excel サーバ]) の各リストの右側にある [管理] ボタンを使用すると、値を編集したり、次に示す追加のタスクを実行できます。

  • 削除 : Excel サーバを削除します。実行中の Excel サーバの編集または削除はできません。

  • 開始 : Excel サーバを開始します。確認を求め、そのステータスに関する情報を提供します。Excel サーバ・ポートを使用してレポートを生成する場合、Excel サーバが自動的に起動します。

  • 停止 : Excel サーバを停止します。確認を求め、そのステータスに関する情報を提供します。

  • 検証 : Excel サーバに割り当てられたポートのステータスをチェックします。Excel サーバの動作中はポートも使用中であり、動作していないときはポートも使用されていないと予測できます。

  • アクティビティ : 最後にシャットダウンした後の、この Excel サーバのアクティビティについての要約を示します。

  • ログ : ログ・ファイルを開きます。ブラウザで表示されるファイルの最大サイズは 1 MB で、この制限よりも大きなファイルは切り捨てられます。

Zen レポートでは、Excel サーバが待ち受けるポートに EXCELSERVER クラス・パラメータまたは ExcelServer プロパティを設定できます。その後で、モードを excel に設定してページをロードします。EXCELSERVER クラス・パラメータを Zen アプリケーション全体に設定することもできます。

Zen レポートの ExcelServerTimeOut プロパティでは、タイムアウトするまでにレポートが Excel サーバを待機する時間の長さを制御します。正の整数の場合は、タイムアウトする前の待機時間 (秒) を指定します。値が 0 の場合は直ちにタイムアウトすることを示し、値が –1 の場合はタイムアウトしないことを示します。また、$EXCELSERVERTIMEOUT を使用して、URL でタイムアウト間隔を渡すことができます。既定値は NULL (Caché では "") で、タイムアウトしないことを示します。

Excel サーバとの通信

%ZEN.Report.PingOpens in a new tab クラスには ping メソッドが用意されています。このメソッドは、Excel サーバとの通信に使用できます。

ping によって、ポートやサーバの種類のほかに、使用可能な最大メモリ、コミットされたメモリ、および使用されているメモリの量が返されます。Excel サーバは、Java Tenured Generation プールを使用して、メモリに関する情報を取得し、その情報を ping に返します。Excel サーバが Java Tenured Generation プールを見つけられない場合、最大メモリおよび使用されているメモリの値に空白の文字列 ("") を返します。

また、ping メソッドでは、pid@hostname 形式のランタイム名が返されます。$PIECE を使用することで、その文字列を処理し、プロセス ID を取得できます。

以下の例は、ping の使用方法を示しています。

 set Status=##class(%ZEN.Report.Ping).ping("1234",30,.port,.servertype,.memMax,.memCommitted,.memUse,.runtimeName)
 write !,"port="_port
 write !,"servertype="_servertype
 write !,"memMax="_memMax
 write !,"memCommitted="_memCommitted
 write !,"memUse="_memUse
 write !,"runtimeName="_runtimeName

コマンド行での Zen レポートの起動

コマンド行から Zen レポートを呼び出して実行するには、3 つのメソッドがあります。

  • GenerateReport は、レポートを生成してファイルに保存します。

  • GenerateReportToStream は、レポートを生成してストリーム・オブジェクトとして返します。

  • GenerateToFile は、レポートを生成してファイルに保存します。他の 2 つのメソッドとは異なり、GenerateToFile はクラス・メソッドです。そのため、レポート・オブジェクトをインスタンス化しないで呼び出すことができます (GenerateReport および GenerateReportToStream では必要)。

Zen レポート・クラスには、ストリーム・オブジェクトを介してレポートに入力を提供するためのコマンド行メソッドと共に使用可能なプロパティもあります。これらのプロパティは、xmlstream、toexcelstream、tohtmlstream、および toxslfostream です。これらの全プロパティについては、“Zen レポート・クラスのプロパティ” のセクションで説明します。

GenerateReport メソッド

GenerateReport を使用する SAMPLES ネームスペースの MyReport というレポートを実行するためのコマンドは、次のようになります。この例での report.Month のように、レポートを生成する前にレポートの任意のプロパティを設定できます。

 ZN "SAMPLES"
 SET rpt1=##class(ZENApp.MyReport).%New()
 SET rpt1.Month=1
 SET Status=rpt1.GenerateReport("c:\temp\MyReport2.pdf",2)
 DO $system.Status.DisplayError(Status)

GenerateReport の呼び出しのパラメータは次のとおりです。

  • outputfile は、出力ファイルのパス名を指定する文字列です。

  • mode は、生成するレポート出力のタイプを指定する整数です。

    以下の値が指定できます。

    • 0 — XML

    • 1 — HTML

    • 2 — PDF。“PDF 出力向け Zen レポートの設定” の説明にある手順を既に実行済みの場合にのみ機能します。

    • 3 — ToHTML スタイルシート

    • 4 — ToXSLFO スタイルシート

    • 5 — XSD スキーマ

    • 6 — PrintPS。PS クラス・パラメータで指定される場所にあるプリンタに PostScript を送信します。

    • 7 — Excel スプレッドシート

    • 8 — XSLFO

    • 9 — ToEXCEL。VMS のみでサポートされます。

    • 10 — xlsx。固有フォーマットの Excel スプレッドシート。

    • 11 — tiff イメージ形式。JAI Advanced Imaging I/O のインストールが必要になります。“TIFF 生成の構成” を参照してください。

    • 12 — PDF 形式のレポートを生成し、印刷サーバを経由して直接プリンタに送信します。“印刷サーバ” を参照してください。DEFAULTMODE および $MODE 値 “pdfprint” に相当します。

    • 13 — displayxlsx。Excel スプレッドシート。Excel 生成で必要な形式に任意の XML を変換する ReportDisplay ブロックを使用します。

    • 14 — fo2pdf。FO ファイルから PDF を直接レンダリングします。これにより、SVG をデータベースに保存してから、PDF の一部としてレンダリングできます。

    • 15 — foandpdf。最初に FO ファイルを生成してから、PDF を FO ファイルから生成します。より適切に SVG をデータベースに保存し、PDF で表示するように取得できます。

  • log は、オプションの 3 番目のパラメータです。

     Do report.GenerateReport("C:\Temp\mySamplePDF.log",2,1)

    log の値が 1 (True) の場合、レポートではなく、変換ログがファイルに出力されます。このログは、クエリ・パラメータ $LOG=1 を指定したときにブラウザに表示される結果と似ています。このパラメータを省略すると既定値の False となり、ログ・ファイルは作成されません。

  • renderServer は、オプションの 4 番目のパラメータです。

     Do report.GenerateReport("C:\Temp\mySamplePDF",2,0,57777)

    この引数は RenderServer です。PDF ファイルをレンダリングする HotJVM レンダリング・サーバのポート番号を指定します。

  • ExcelMode は、オプションの 5 番目のパラメータです。

     Do report.GenerateReport("C:\Temp\mySampleEXC",7,0,"","attribute")

    この引数によって、要素または属性のデータから Excel スプレッドシートが生成されるかどうかが決まります。この引数は、あまり使用されません。レポートのこの属性は、通常レポート自体の EXCELMODE パラメータを設定して制御するからです。

以下の例では、PDF を生成しています。

 ZN "SAMPLES"
 SET %request=##class(%CSP.Request).%New()
 SET %request.URL = "/csp/samples/ZENApp.MyReport.xml"
 SET %request.CgiEnvs("SERVER_NAME")="127.0.0.1"
 SET %request.CgiEnvs("SERVER_PORT")=57777
 SET report = ##class(ZENApp.MyReport).%New()
 SET report.Month = 3
 SET Status = report.GenerateReport("C:\Temp\X.PDF",2)
 IF 'Status DO $system.Status.DecomposeStatus(Status,.Err) WRITE !,Err(Err) ;'
 WRITE !,Status 

%request が設定されます。レポートがそのメソッドのいくつかで %request を使用する場合など特殊な状況では、この設定が必要となる場合があります。例では、GenerateReport の呼び出しに続いてエラー処理も記述されています。この例で、Status は、この呼び出しに関する情報が含まれている %StatusOpens in a new tab オブジェクトであり、Err は、Status に関連付けられたテキスト・メッセージです。

以下の例では、PostScript を生成しています。

 SET %request=##class(%CSP.Request).%New() 
 SET %request.URL = "/csp/samples/ZENApp.MyReport.xml" 
 SET %request.CgiEnvs("SERVER_NAME")="127.0.0.1" 
 SET %request.CgiEnvs("SERVER_PORT")=57772 
 SET report=##class(ZENReports.CurrentAdmissions).%New() 
 SET %request.Data("$PS",1)="\\traksydfp1\ESTUDIO4511" 
 SET Status=report.GenerateReport("C:\temp\output.txt",6) 
 IF 'Status DO $system.Status.DecomposeStatus(Status,.Err) WRITE !,Err(Err) ;'
 WRITE !,Status 

TIFF イメージ形式でファイルを生成するには、JAI Advanced Imaging I/O をインストールする必要があります。 TIFF 生成は FOP でのみサポートされています。RenderX ではサポートされていません。“TIFF 生成の構成” を参照してください。

以下の例で、TIFF ファイルを生成しています。

 zn "SAMPLES"
 s rpt1=##class(ZENApp.MyReport).%New()
 s rpt1.Month=1
 s Status=rpt1.GenerateReport("c:\temp\MyReport.tiff",11)
 i 'Status d $SYSTEM.Status.DecomposeStatus(Status,.Err) w !,Err(Err) ;'
 w !,Status

GenerateToFile メソッド

GenerateToFile はクラス・メソッドであるということを除いて、GenerateReport と同様に機能します。そのため、レポート・オブジェクトをインスタンス化しないで呼び出すことができます。

GenerateReportToStream メソッド

GenerateReportToStream というメソッドは、その最初のパラメータがファイル名でなく、参照渡しの %Stream.ObjectOpens in a new tab であるということを除いて、GenerateReport と同様に機能します。メソッドが返されると、この %Stream.ObjectOpens in a new tab にレポートが含まれます。ログ・パラメータが True に設定されていると、%Stream.ObjectOpens in a new tab オブジェクトにはレポートではなくログ・ファイルが含まれます。

Zen レポート・クラスのプロパティ

一般的な方針は、Zen レポートで XML データ・ソースとさまざまなタイプの XSLT スタイル・シートを生成することですが、これらを外部ファイルからまたはストリーム・オブジェクトとして Zen に提供することもできます。また、Zen レポート・クラスには、レポートにストリーム・オブジェクトを入力するためのコマンド行メソッドと共に使用可能なプロパティが用意されています。

以下では、これらのプロパティの設定例をいくつか紹介します。これらのプロパティは、プログラムによって、またはコマンド行からのみ設定可能です。URI からは設定できません。以下の例で、httprequest.Get のそれぞれの呼び出しは通常 1 行で表示されますが、ここでは読みやすくするために改行が追加されています。これらのストリーム・オブジェクトのプロパティは、それぞれ %Library.RegisteredObjectOpens in a new tab タイプです。

xmlstream は、XML データ・ソースを指定するストリーム・オブジェクトです。以下に例を示します。

 ZN "SAMPLES"
 Set httprequest=##class(%Net.HttpRequest).%New()
 Set httprequest.Server="localhost"
 Set httprequest.Port="57777"
 Set sta=httprequest.Get(
 "/csp/my/my.mine.cls?$MODE=xml&CacheUserName=_SYSTEM&CachePassword=SYS")
 If $system.Status.IsError(sta) Do $system.OBJ.DisplayError(sta)
 Set rpt=##class(jsl.MyReportDisplay).%New()
 Set rpt.Month=1
 Set rpt.xmlstream=httprequest.HttpResponse.Data
 Set tSC=rpt.GenerateReport("C:\TEMP\MyReportDisplay.pdf",2)
 If 'tSC Do $system.Status.DecomposeStatus(tSC,.Err) Write !,Err(Err) ;'
 Write !,tSC 

tohtmlstream は、XHTML 出力用の XSLT スタイルシートを指定するストリーム・オブジェクトです。以下に例を示します。

 ZN "SAMPLES"
 Set httprequest=##class(%Net.HttpRequest).%New()
 Set httprequest.Server="localhost"
 Set httprequest.Port="57777"
 Set sta=httprequest.Get(
 "/csp/my/my.mine.cls?$MODE=tohtml&CacheUserName=_SYSTEM&CachePassword=SYS")
 If $system.Status.IsError(sta) Do $system.OBJ.DisplayError(sta)
 Set rpt=##class(ZENApp.MyReport).%New()
 Set rpt.tohtmlstream=httprequest.HttpResponse.Data
 Write !,httprequest.HttpResponse.Data
 Set rpt.Month=1
 Set tSC=rpt.GenerateReport("C:\TEMP\MyReport.html",1)
 If 'tSC Do $system.Status.DecomposeStatus(tSC,.Err) Write !,Err(Err) ;'
 Write !,tSC

toexcelstream は、Excel スプレッドシート出力用の XSLT スタイルシートを指定するストリーム・オブジェクトです。この使用法は、tohtmlstream と似ています。

toxslfostream は、PDF 出力用 XSL-FO に変換するための XSLT スタイルシートを指定するストリーム・オブジェクトです。以下はその例です。

 ZN "SAMPLES"
 Set httprequest=##class(%Net.HttpRequest).%New()
 Set httprequest.Server="localhost"
 Set httprequest.Port="57777"
 Set sta=httprequest.Get(
 "/csp/my/my.mine.cls?$MODE=toxslfo&CacheUserName=_SYSTEM&CachePassword=SYS")
 If $system.Status.IsError(sta) Do $system.OBJ.DisplayError(sta)
 Set rpt=##class(ZENApp.MyReport).%New()
 Set rpt.toxslfostream=httprequest.HttpResponse.Data
 Write !,httprequest.HttpResponse.Data
 Set rpt.Month=1
 Set tSC=rpt.GenerateReport("C:\TEMP\MyReport.pdf",2)
 If 'tSC Do $system.Status.DecomposeStatus(tSC,.Err) Write !,Err(Err) ;'
 Write !,tSC

Web サービスとしての Zen レポートのデータの公開

Zen レポートの閲覧者がレポートの基となる XML データの取得を希望する場合は、そのデータを Web サービスとして公開できます。

当然、Web サービスには、SOAP 要求とそれに対する応答のコンテンツを記述した WSDL が関連付けられています。WSDL は、Web サービス記述言語によるサービス記述です。閲覧者が Zen レポートのデータを希望する場合は、この WSDL を作成してその URI を閲覧者に提供できます。これにより、閲覧者は任意のツールを使用してこの Web サービスを利用し、データに対して目的の作業を実行できます。

Zen レポートのデータは、以下のように、プログラム処理またはコマンド・ライン操作で Web サービスとして公開できます。

  1. データ・クラス・ジェネレータ %ZEN.Report.reportDataClassesOpens in a new tab のインスタンスを作成します。このジェネレータ・クラスには以下の 2 つの機能があり、それぞれ単独で制御できます。

    • Zen レポートで生成した XML データを表すデータ・クラスのパッケージを作成する機能

    • データ・クラスで表される XML データの SOAP 要求を発行するためにユーザが使用できる Web サービスを生成する機能

  2. データ・クラス・ジェネレータの入力および出力を以下のように指定します。

    設定する値… ジェネレータ・クラスで設定するプロパティ… 既定値…
    Zen レポートのパッケージ名とクラス名 ZenReport
    出力データ・クラスのパッケージ名 DataPackage
    出力 Web サービスのパッケージ名 WebServicePackage
    Web サービスの SOAP ネームスペース Namespace http://tempuri.org
    参照先クラスのネームスペースが WSDL で使用されるかどうかを示すブーリアン・フラグ UseClassNamespaces 1 (True)
  3. データ・クラス・ジェネレータで実行する処理を以下のように指定します。

    生成する出力… 呼び出すジェネレータ・クラスのメソッド…
    Web サービスとデータ・クラス generateWebService()
    データ・クラスのみ generateDataClasses()
    Web サービスのみ generateWebServiceShell(zenReportPackageAndClassName)
  4. クラス・メソッドによって返されたエラーの有無を確認します。

以下はその例です。

 ZN "SAMPLES" 
 Set gen=##class(%ZEN.Report.reportDataClasses).%New() 
 Set gen.ZenReport="ZENApp.MyReport" 
 Set gen.DataPackage="ReportData1" 
 Set gen.WebServicePackage="WebService1" 
 Set Status=gen.generateWebService() 
 If 'Status Do $system.Status.DecomposeStatus(Status,.Err) Write !,Err(Err) ;' 
 Write !,Status 
 Kill
FeedbackOpens in a new tab