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 レポートのデータの表示

ここでは、レポートに視覚上のコンテンツを表示する要素について説明します。これらの要素の多くは、<pageheader><pagefooter><pagestartsidebar><pageendsidebar><body><block><div><group>、または <table> の子にできます。

表示要素は以下のとおりです。

  • <barcode> — 生成された PDF にバーコードを追加します。HTML ではサポートされていません。

  • <barcodeOptions> — <barcode> にオプションを追加します。

  • <block> — インラインで扱う項目のグループ

  • <bidioverride> — 生成された XSL-FO に <fo:bidi-override> 要素を、生成された HTML に <bdo> 要素をそれぞれ追加します。

  • <br/> — ブロック内の改行

  • <container> — 通常、背景イメージ上に重ねて表示する項目のグループ

  • <div> — ブロックとして扱う項目のグループ

  • <footer> — ページ・フッタの項目のグループ

  • <group> — 繰り返しアクションの項目のグループ

  • <header> — ページ・ヘッダの項目のグループ

  • <img> — イメージ

  • <inline> — インライン・テキストのスタイル

  • <inlinecontainer> — 生成された XSL-FO に <fo:inline-container> 要素を追加します。

  • <item> — データ値

  • <line> — ブロック間の水平の線

  • <link> — 他の URI へのリンク

  • <list> — 単純なリスト、あるいは箇条書きまたは番号付きリスト

  • <p> — 任意の長さのテキスト

  • <pagebreak> — 改ページ

  • <small-multiple> — ページで繰り返される一連のグラフ要素。

  • <table> — テーブル

  • <timeline> — エピソードのグラフィック要約

さらに、Zen レポートでは、グラフの作成が可能な複数の要素をサポートしています。Zen レポートのコールバック・グラフでは、Zen ページのグラフが提供するグラフ作成機能が複製されます。“Zen コンポーネントの使用法” の章の “Zen のグラフ” のセクションでは、Zen ページと Zen レポートがサポートするすべてのタイプのグラフについて説明しています。このドキュメント内の “Zen レポートのコールバック・グラフ” の章では、Zen レポートのグラフに固有のトピックについて説明します。

レポートの表示属性

この章で示す各表示要素は、以下のテーブルで説明する属性を持ちます。これ以外の属性を持つこともあります。

レポートの表示属性
属性 説明
class

要素に適用する CSS スタイル・クラス。 スタイル・クラスは <class> 要素で定義できます。また、標準スタイル・シートで指定するスタイル・クラスもあります。詳細は、このテーブルの後に示す説明を参照してください。

htmlstyle このテーブルの style 属性と同様に機能しますが、htmlstyle 属性を使用して指定したスタイルは HTML 出力にのみ適用されます。
selectstylecond

ObjectScript 式のコンマ区切りのリスト。実行時、selectstylecond 式が左から右へ評価されます。selectstylecond の最初の True の条件と一致する selectstylelist のスタイルが、表示要素に適用されます。

詳細は、このテーブルの後に示す “CSS スタイルの条件付き適用” を参照してください。

selectstylelist

selectstylecond で使用する CSS 文のコンマ区切りのリスト。

style

CSS のスタイル属性と似ていますが、この属性には「属性名:値」のペアをセミコロンで区切ったリストを指定できます。以下はその例です。

style="fill:yellow;font-size:6pt;"

style<block> などのコンテナに適用する場合、コンテナ内のすべてのノードには適用されない場合があります。このために問題が発生する場合、style 属性を <item> などの下位レベルのノードに適用してみてください。

stylecall

実行する <xsl:template> の名前。テンプレートは、同じ Zen レポート・クラスの XData HtmlXslt ブロックまたは XData XslFoXslt ブロック (あるいは両方) で定義する必要があります。

このテーブルの styleparamNamesstyleparams、および “スタイルを適用する XSLT テンプレートの呼び出し” セクションを参照してください。

styleparamNames

この <item> のために呼び出す <xsl:template><xsl:param> 引数の名前のセミコロン区切りリスト。

このテーブルの stylecallstyleparams、および “スタイルを適用する XSLT テンプレートの呼び出し” セクションを参照してください。

styleparams

この <item> のために呼び出す <xsl:template> で定義された <xsl:param> 引数に値を提供する式のセミコロン区切りリスト。これらの式には、リテラル値、ノード・セット、XPath 式、または XSLT 関数呼び出しを使用できます。XSLT の <xsl:with-param> の値として有効な値であれば、styleparams にも使用できます。

このテーブルの stylecallstyleparamNames、および “スタイルを適用する XSLT テンプレートの呼び出し” セクションを参照してください。

template

この要素を指定するテンプレートの名前。その形式は以下のとおりです。

templateClass:templateName

以下はその説明です。

  • templateClass は、テンプレートを定義する %ZEN.Report.Display.reportTemplateOpens in a new tab のサブクラスの名前です。

  • templateName は、この要素のテンプレートを指定する templateClass 内の特定の XData ブロックの名前です。

テンプレート名の先頭が感嘆符 (!) の場合、COS 実行時式として解釈されます。

テンプレートを作成するには、“Zen レポート・クラスの構築” の章の “Zen レポートのテンプレートの使用法” を参照してください。

width

要素の幅を定義する、HTML の長さの値。正確な意味は要素によって異なります。width を省略すると、PDF レンダリング・ツールによっては予期しない結果となる可能性があります。

"2in"、"5cm"、"12px"、"14pt"、"3em"、または "75%" は、すべて HTML の長さの値として使用可能な形式です。パーセント (%) は、width 属性を使用している要素のコンテナを基準とします。

xslfostyle このテーブルの style 属性と同様に機能しますが、xslfostyle 属性を使用して指定したスタイルは PDF 出力用の XSLFO スタイルシートにのみ適用されます。

class 属性の値を指定するときに、このクラスを作成するときに付けた要素名は使用しないでください。したがって、使用するスタイル・クラスの名前が table.myTable である場合、<report> で次のように指定します。

<table class="myTable"> 

以下の <table> 要素では、class 属性を使用して Zen レポートのテーブルに table.grid スタイルを適用します。

<table class="grid" group="Step">
 <item width="0.8in" field="@Number" />
 <item width="0.8in" field="./AllSet" />
 <item field="./DemoText" />
</table>

class を指定していない子要素には、その親要素の class 属性の値が継承されます。したがって、table.myTableth.myTable、および td.myTable を定義する場合、<table> 要素では class 属性を指定するだけで十分です。さらに、<body> 要素の中に class 属性を記述して、レポートにあるすべての要素にクラスを定義することもできます。少なくとも、自身の class 属性でクラスをオーバーライドしていない要素にクラスを定義できます。

class の値には、以下の例のように、スペース文字で区切った複数のクラス名を記述できます。

<document width="8.5in" height="11in"
          marginLeft="1.25in" marginRight="1.25in"
          marginTop="1.0in" marginBottom="1.0in">
  <class name="p.class1">
    <att name="background-color" value="red" />
  </class>
  <class name="p.class2">
    <att name="color" value="white" />
  </class>
</document>
<body>
  <p class="class1 class2">Can CSS use two classes?</p>
</body>

Zen レポートの定義済みスタイル・クラスの詳細は、以下を参照してください。

定義済みスタイルを使用するかどうかにかかわらず、<class> 要素を使用してカスタム・スタイル・クラスを定義し、class 属性を使用して Zen レポートの要素に適用できます。

CSS スタイルの条件付き適用

表示要素の最も単純なスタイル属性は、style です。これにより、表示要素に適用する CSS スタイルのセミコロン区切りのリストを指定します。

表示要素は、スタイルのリストを定義するための条件のリストを定義することが可能です。selectstylecond 属性は、ObjectScript 式のコンマ区切りのリストです。これらの式には、プライベート変数を記述することはできませんが、特殊変数 %report を使用してレポート・クラスを指定したり、%report にドット構文を使用して Zen レポート・クラスのプロパティを参照したりすることができます。実行時、selectstylecond 式が左から右へ評価されます。selectstylecond の最初の True の条件と一致する selectstylelist のスタイルが、表示要素に適用されます。

次の例は、Month プロパティの値が 1、数字が赤、それ以外の場合は黄色である場合です。

<item special="number" width="75%"
  selectstylecond="%report.Month=1,1" selectstylelist=
  "border:none;padding-right:4px;color:red,padding-right:4px;color:yellow"/>

上記の例では、以下の 3 つの異なる区切り記号が使用されています。

  • コンマ (,) を使用して、Zen レポートの selectstylelist リストのエントリを区切っています。selectstylelist の各エントリは、CSS スタイル定義のリストで構成します。

  • セミコロン (;) を使用して、同じ Zen レポートの selectstylelist リストにある CSS スタイル定義のエントリを区切っています。各エントリは、CSS スタイルの名前とその値で構成します。

  • コロン (:) を使用して、各 CSS スタイルの名前と値を区切っています。

スタイル属性で指定した情報は、class で指定したスタイル情報よりも優先します。

レポートを起動する URI で ZENURL として渡されたプロパティ値に依存するように selectstylelist リストで %report を使用する場合、XSLT 処理をブラウザで行うと、予測できない結果となることがあります。この問題の詳細は、“URI による Zen レポート・クラスのプロパティの設定” を参照してください。

<barcode>

Zen レポートでは、Barcode4J によるバーコードの生成がサポートされます。バーコード・サポートは、Caché に用意された FOP レンダリング・エンジンによって提供され、これには、barcode4j-fop-ext-complete.jar ファイルがインストールされています。Zen レポートでは、HTML または RenderX PDF レンダリング・エンジンに対するバーコード表示をサポートしていません。

以下のコードで示されるように、レポートの XData ReportDisplay セクションの本文にバーコード要素を簡単に追加できます。

<body>
 <barcode value="hello world"/>
</body>

より実際的な例では、データベースからのデータの使用が必要になります。以下の XData ReportDefinition が指定されます。

<report xmlns="http://www.intersystems.com/zen/report/definition"
 name="MyReport" sql="Select top 10 Name From Sample.Person">
 <group name="Person">
  <!-- commas are not valid in barcode code39 -->
  <attribute field="Name" name="name" 
   expression='$replace(%val,","," ")'/>
 </group>
</report>

この XData ReportDisplay では、各名前とその名前に対応するバーコードが出力されます。

<report xmlns="http://www.intersystems.com/zen/report/display"
 name="MyReport">
 <body>
  <table group="Person">
   <item field="@name" />
   <barcode field="@name" />
  </table>
 </body>
 </report>

以下のコード・サンプルでは、同じ XData ReportDefinition を使用して、<barcodeOptions> の使用方法を示します。

<report xmlns="http://www.intersystems.com/zen/report/display"
 name="MyReport">
 <body>
  <table group="Person">
   <item field="@name" />
   <barcode field="@name" barcodeType="code128">
    <barcodeOptions>
     
     <barcode:height>8mm</barcode:height>
     <barcode:module-width>0.6mm</barcode:module-width>
     
    </barcodeOptions>
   </barcode>
  </table>
 </body>
</report>

<barcode> には以下の属性があります。

属性 説明
表示の条件式 <block> 要素を条件付きで出力するための属性の詳細は、“要素を表示するための条件式” のセクションを参照してください。
表示属性 stylewidthclass などの属性の説明は、この章の冒頭の “レポートの表示属性” のセクションを参照してください。
barcodeNamespacePrefix

http://barcode4j.krysalis.org/nsOpens in a new tab ネームスペース内の BarCode4J バーコード要素に対するネームスペース接頭語。

barcodeOrientation

出力されたバーコードの向きを指定します。使用可能な値は、0、90、-90、180、-180、270 および -270 で、既定値は 0 です。

barcodeType

このバーコードのタイプ。バーコード・タイプの詳細は、http://barcode4j.sourceforge.net/2.1/barcode-xml.htmlOpens in a new tab を参照してください。

field

情報を指定する XPath 式がバーコードに表示されます。NULL の場合は、value にバーコード・メッセージを指定できます。

htmlErrorMessage

バーコードのプレースホルダとして、HTML 出力内で使用できるテキスト・メッセージ。初期値は、“Barcode elements are only supported in PDF output.” です。

この属性に普通のテキストを入力できる場合でも、基本となるデータ型 %ZEN.Datatype.captionOpens in a new tab が与えられます。 “Zen レポート属性のデータ型” を参照してください。

value

バーコードに表示される情報は、field が NULL の場合のみ使用されます。

<barcodeOptions>

<barcodeOptions> 要素によってバーコードのオプションを指定できます。これには、<write> 要素と同じ構文が含まれます。以下の例では、CDATA の使用方法に注意してください。

<barcodeOptions>
 
 <barcode:height>8mm</barcode:height>
 <barcode:module-width>0.6mm</barcode:module-width>
 
</barcodeOptions> 

<barcodeOptions> には以下の属性があります。

属性 説明
表示の条件式 <block> 要素を条件付きで出力するための属性の詳細は、“要素を表示するための条件式” のセクションを参照してください。
表示属性 stylewidthclass などの属性の説明は、この章の冒頭の “レポートの表示属性” のセクションを参照してください。
XMLEscape

バーコードに XML エスケープを使用するかどうかを指定します。<barcodeOptions> が true の場合は、<barcodeOptions> コンテンツが CDATA 構文に囲まれ、false の場合は囲まれません。

この属性で基本となるデータ型は %ZEN.Datatype.booleanOpens in a new tab です。 “Zen レポート属性のデータ型” を参照してください。

特定の barcodeType に <barcodeOptions> を書き込む場合、sourceforge.netOpens in a new tabBarcode4j ドキュメントOpens in a new tabを参照してください。

<block>

<block> 要素は、そのすべての子要素を順番に表示します。出力は、XHTML では <span>、XSL-FO では <inline> になります。これは、<report> の任意の位置で使用できますが、<table> の中でコンテナとして使用すると最も便利です。通常、<table> ではすべての子要素を新しい行または列として扱うので、複数の要素を 1 行または 1 列にグループ化するには <block> 要素を使用します。<block> に記述できる要素のリストは、この章の冒頭の “Zen レポートのデータの表示” を参照してください。

<block> には以下の属性があります。

属性 説明
表示の条件式 <block> 要素を条件付きで出力するための属性の詳細は、“要素を表示するための条件式” のセクションを参照してください。
表示属性 stylewidthclass などの属性の説明は、この章の冒頭の “レポートの表示属性” のセクションを参照してください。
caption

(オプション) このブロックのキャプション・テキスト。

この属性に普通のテキストを入力できる場合でも、基本となるデータ型 %ZEN.Datatype.captionOpens in a new tab が与えられます。 “Zen レポート属性のデータ型” を参照してください。

id オプションの識別子。この属性を設定しておくと、%GetComponentById(id) メソッドを呼び出すことにより、サーバ側コードでのこの要素の取得に使用できます。

<bidioverride>

<bidioverride> 要素によって、生成された XSL-FO に <fo:bidi-override> 要素が追加されます。これは、Unicode の双方向アルゴリズムの決定に従ってテキストの向きをオーバーライドし、複数言語のドキュメント内で異なるスクリプトのテキストを適切に表示するために使用されます。

次に例を示します。

<div> <bidioverride direction="rtl" unicode-bidi="bidi-override" > 
<inline>Normal text</inline> </bidioverride> </div>

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

generated description: bidioverride text

<bidioverride> の実際の使用方法は、テキストに異なる向きで記述されたテキストを追加したり、ヘブライ語やアラビア語のテキストにヨーロッパ数字を表示したりする方法があります。

<fo:bidi-override> には <fo:block> が含まれないため、<inline> を使用することに注意してください。付録 “生成された XSL-FO と HTML” には、ブロック XSL-FO 出力およびインライン XSL-FO 出力を生成する Zen レポート要素がリストされています。

<bidioverride> には以下の属性があります。

属性 説明
表示の条件式 <block> 要素を条件付きで出力するための属性の詳細は、“要素を表示するための条件式” のセクションを参照してください。
表示属性 stylewidthclass などの属性の説明は、この章の冒頭の “レポートの表示属性” のセクションを参照してください。
direction

テキストの向きを指定します。可能な値:

  • inherit — 親要素からテキストの向きの値を取得します。

  • ltr — テキストが左から右に記述されます。

  • rtl — テキストが右から左に記述されます。

unicode-bidi

オーバーライドの動作を指定します。可能な値:

  • bidi-override。インライン要素では、これでオーバーライドを作成します。ブロック・コンテナ要素では、これによりインラインレベルの子孫に対してオーバーライドを作成し、別のブロック・コンテナ要素内には作成しません。つまり、要素の内部での順序変更は、direction プロパティに基づいた厳格な順序になり、双方向アルゴリズムの暗黙的な部分は無視されます。これは、要素の開始位置、または匿名の子の各ブロック・ボックスの開始位置への LRO (U+202D、'direction: ltr' に対応) または RLO (U+202E、'direction: rtl' に対応) の追加に対応し、もし存在する場合は、要素の終了位置に PDF (U+202C) を追加します。

  • embed。要素がインラインの場合は、この値によって、Unicode の双方向アルゴリズムに関する高レベルの組み込みが開始されます。この組み込みレベルの向きは、direction プロパティで指定します。要素の内部では、順序変更は暗黙的に行われます。

  • 継承

  • normal。この要素では、Unicode の双方向アルゴリズムに関する高レベルの組み込みは開始されません。インライン要素では、暗黙的な順序変更が要素の全域で行われます。

id オプションの識別子。この属性を設定しておくと、%GetComponentById(id) メソッドを呼び出すことにより、サーバ側コードでのこの要素の取得に使用できます。

<br/>

<br/> 要素は、現在の要素の中に改行を挿入します。この要素の正しい構文は XHTML 構文であり、要素を閉じる山括弧の前にスラッシュ文字を置くことによってその要素が有効な XML になります。

以下は正しい例です。

<br/>

以下は誤った例です。

<br>

以下の例では、<item> の <caption> の中に改行が挿入されます。

<item field="EAST" formatNumber='###,###,###,###,###,###,###'>  
  <caption multiline="true"> 
    <inline> 
      EAST 
    </inline> 
    <br/> 
    <inline> 
      WEST 
    </inline> 
  </caption>
</item>

<container>

<container> 要素は、他のコンテンツのコンテナとして機能します。<container> には背景イメージを割り当てることができ、そのイメージは <container> のコンテンツの背景にタイル表示されます。複数の <container> 要素をページに指定できるほか、<container> 要素を入れ子にすることもできます。

<container> 要素は、フォームのフィールドを表すイメージ上にテキストを重ねて、事前に印刷したフォームのようなレポートを作成する場合に役立ちます。また、<container> を使用して、レポートのページ全体に “社外秘” や “草案” などの透かしを入れることもできます。

以下の例では、imagetest グループにある person ごとに 1 行の <list> を出力します。各出力行には、該当する個人の Name の値が記述されています。この例では、<container> によってレポートのリストの背後に barchartblue.png イメージがタイル表示されて、<list> 出力の背景になります。

<report xmlns="http://www.intersystems.com/zen/report/display"
        name="imagetest">
  <body> 
    <container backgroundImage="barchartblue.png" >
      <list group="person">
        <item field="Name"/>
      </list>
    </container>
  </body>
</report>

既定では、コンテナ領域の左上角を起点として左から右に背景イメージをタイル表示し、これを上から下に向かって繰り返して、イメージとコンテナ領域の相対的なサイズに基づいて可能な範囲の幅と高さに描画します。XHTML および PDF では、イメージの反復と配置のスタイルを変更できます。それには、以下の例のように、“レポートの表示属性” の stylehtmlstyle、および xslfostyle を <container> に適用します。また、この例では、同じ 1 つのレポート・ページでコンテナを入れ子にして使用する際の規約についても示しています。

Note:

この例では、属性の値に改行を追加して、ドキュメント・ページのコードを見やすくしています。実際のコードでは、このような改行は使用しません。

<group name="SalesRep" pagebreak="true"> 
  <container 
  backgroundImage="ssmocreport.png" 
  style="width:9.47in;height:7.76in;background-repeat:no-repeat;
         margin-top:0cm;margin-bottom:0cm;margin-left:0cm;
         margin-right:0cm;padding-top:0cm;padding-bottom:0cm;
         padding-left:0cm;padding-right:0cm;
         background-position:top left;" > 
    <container 
    style="font-size:.5in;margin-top:0cm;margin-bottom:0cm;
           margin-left:0cm;margin-right:0cm;padding-top:0cm;
           padding-bottom:0cm;padding-left:0cm;padding-right:0cm;" 
    htmlstyle="top:5.2in;left:4in;position:relative" 
    xslfostyle="top:4.8in;left:3in;absolute-position:absolute"> 
        <p field="@name"> 
            Hi there! 
        </p> 
    </container> 
  </container> 
</group>

PDF 出力を正しく生成するには、<container> の中で指定する要素を何らかのブロックとする必要があります。<p>、<list>、<table> などの複雑な要素はブロックですが、<item> のような単純な要素はブロックではありません。そのため、<container> にある単独の <item> を出力する場合は、そのコンテナとなるブロックを使用する必要があります。簡単な方法としては、<container> と <item> の間に <div> を挿入します。以下はその例です。

<report xmlns="http://www.intersystems.com/zen/report/display"
        name="imagetest">
  <body> 
    <container backgroundImage="barchartblue.png" >
      <div>
        <item field="grandTotal"/>
      </div>
    </container>
  </body>
</report>

<container> では、以下の属性がサポートされています。

属性 説明
表示の条件式 <img> 要素を条件付きで出力するための属性の詳細は、“要素を表示するための条件式” のセクションを参照してください。
表示属性 stylewidthclass などの属性の説明は、この章の冒頭の “レポートの表示属性” のセクションを参照してください。
backgroundImage

背景イメージのソース・ファイルの URI。URI は、現在のネームスペース内のアプリケーション用のサポート・ファイルを CSP が格納するサブディレクトリを基準としています。Zen レポートが存在するネームスペースの名前が myNameSpace であると仮定します。次に、イメージが格納されることが予期される Caché インストール・ディレクトリの下に、/csp/mynamespace というサブディレクトリがあると仮定します。以下のように指定するとします。

<img src="images/myPic.png" />

Zen レポート・クラスは、myPic.png ファイルを Caché インストール・ディレクトリの下の /csp/mynamespace/images サブディレクトリ内で検索します。

先頭に感嘆符が付いている backgroundImage 属性の値は、<item> 要素の field 属性の場合と同様、XPath 式として解釈されます。これにより、XML データの中で動的に URI を生成し、これらのカスタマイズした URI をイメージ・ソースとして使用できるようになります。イメージの URI を動的に生成するために ! (感嘆符) を使用する場合、その文字列では絶対 URI を指定する必要があります。指定しないと、PDF レポートに表示されません。

組み込みの FOP には、.jpg 形式のイメージ・ファイルのレンダリングによって問題が発生するおそれがあります。問題を避けるためには、.png 形式のファイルを使用します。

caption

(オプション) このコンテナのキャプション・テキスト。

この属性に普通のテキストを入力できる場合でも、基本となるデータ型 %ZEN.Datatype.captionOpens in a new tab が与えられます。 “Zen レポート属性のデータ型” を参照してください。

height レポートの中でコンテナを表示する領域を指定する、HTML の長さの値。既定では、コンテナのコンテンツがこの領域全体に出力されます。
id オプションの識別子。この属性を設定しておくと、%GetComponentById(id) メソッドを呼び出すことにより、サーバ側コードでのこの要素の取得に使用できます。
width コンテナの幅を指定する、HTML の長さの値。既定では、コンテナのコンテンツがこの領域全体に出力されます。
writing-mode

生成された XSL-FO の <fo:page-sequence> 要素に writing-mode 属性を追加します。writing-mode では、テキストを記述する方向に関連するページ・レイアウト機能を制御します。writing-mode 属性の詳細は、“書き込みモード” のセクションを参照してください。

可能な値は以下のとおりです。

  • “lr-tb” — 多くのインド・ヨーロッパ語のように、左から右、上から下に記述するテキストに対応します。

  • “rl-tb” — アラビア語やヘブライ語のように、右から左、上から下に記述するテキストに対応します。

  • “tb-rl” 中国語や日本語のように、上から下、右から左に記述するテキストに対応します。

  • “lr” — “lr-tb” と同じです。

  • “rl” — “rl-tb” と同じです。

  • “tb” — “tb-lr” と同じです。

  • “inherit” — 親要素から writing-mode の値を取得します。

すべての XSL-FO レンダラがすべての指定可能な値をサポートしているわけではありません。

<div>

<div> 要素を使用すると、複数の要素をレポート出力の 1 つのブロックにグループ化できます。これは、ブロックを境界線で囲むなど、ブロック全体に特定のスタイルを適用する場合に便利です。出力は、XHTML では <div>、XSL-FO では <block> になります。Zen レポートの <div> 要素の中に記述できる要素のリストは、この章の冒頭の “Zen レポートのデータの表示” を参照してください。

以下の例では、黒い境界線で囲んだブロックにテーブルを表示するために、境界線スタイルを定義しています。<div> をテーブルで使用すると、テーブルの中に境界線で囲んだ領域を定義し、そこに別のテーブルを表示できます。

<div style="border-style:solid;border-width:4px" > 
  <p style="text-align:center;text-decoration:underline"> 
    "Current Address Data" 
  </p> 
  <table orient="row" class="subtable"> 
    <item field="@patient_add_street_1" class="subtable" defaultWidth="none" >
      <caption value="Street(1):" class="subtable" defaultWidth="none"/> 
    </item> 
    <item field="@patient_add_street_2" class="subtable" defaultWidth="none">
      <caption value="Street(2):" class="subtable" defaultWidth="none"/> 
    </item> 
  </table> 
</div> 

<div> には以下の属性があります。

属性 説明
表示の条件式 <div> 要素を条件付きで出力するための属性の詳細は、“要素を表示するための条件式” のセクションを参照してください。
表示属性 stylewidthclass などの属性の説明は、この章の冒頭の “レポートの表示属性” のセクションを参照してください。
id オプションの識別子。この属性を設定しておくと、%GetComponentById(id) メソッドを呼び出すことにより、サーバ側コードでのこの要素の取得に使用できます。
linefeed-treatment

XSL-FO プロパティ linefeed-treatment をサポートします。詳細は、このテーブルの後に示す説明を参照してください。可能な値は以下のとおりです。

  • ignore

  • preserve

  • treat-as-space

  • treat-as-zero-width-space

詳細は、このテーブルの後に示す説明を参照してください。

linefeed-treatment 値の “preserve” を使用して、PDF 出力の生成時に改行文字をソース・データに保持できます。以下の要素が ReportDefinition にある場合

<element 
 name='Finding' 
 expression=
 '"AAA"_$C(13,10)_" "_$C(13,10)_"BBB"_$C(13,10)_" "_$C(13,10)_" "_$C(13,10)_"CCC"_$C(13,10)'
 /> 

以下の例では linefeed-treatment を ReportDisplay で使用してアイテムを出力し、改行文字を保持します。

<item 
 field="Finding" width="2.65in" 
 linefeed-treatment="preserve"> 
  <caption value="Finding"/> 
</item>  

breakOnLineFeed="true"linefeed-treatment="preserve" と組み合わせて使用することはできません。

<group>

XData ReportDisplay ブロックで <group> 要素を使用すると、XML で多用する階層構造のデータを、Zen レポート・クラスに対応付けて扱うことができます。

Important:

XData ReportDefinition ブロックで使用するには、別の <group> 要素があります。

<group> は、XData ReportDisplay で以下の属性を持ちます。

属性 説明
表示の条件式 <group> 要素を条件付きで出力するための属性の詳細は、“要素を表示するための条件式” のセクションを参照してください。
表示属性 stylewidthclass などの属性の説明は、この章の冒頭の “レポートの表示属性” のセクションを参照してください。
breakCheck

レポートに改ページを追加するかどうかを決めるために使用する条件を指定する XPath 式。

caption

(オプション) このグループのキャプション・テキスト。

この属性に普通のテキストを入力できる場合でも、基本となるデータ型 %ZEN.Datatype.captionOpens in a new tab が与えられます。 “Zen レポート属性のデータ型” を参照してください。

id オプションの識別子。この属性を設定しておくと、%GetComponentById(id) メソッドを呼び出すことにより、サーバ側コードでのこの要素の取得に使用できます。
line

グループの繰り返しごとにグループの間に描画する線の太さを指定する、HTML の長さの値line が 0 の場合、線は描画されません。

"2in"、"5cm"、"12px"、"14pt"、"3em"、または "75%" は、すべて HTML の長さの値として使用可能な形式です。パーセント (%) は、width 属性を使用している要素のコンテナを基準とします。

name

必須項目。XML データ・ソースにあるグループの中から、目的の表示部分のデータを提供するグループを指定する XPath 式。

このデータが表示上でどのように処理されるかは、<group> コンテナにある要素によって決まります。<group> には、<body> と同じ要素を記述できます。この章 “Zen レポートのデータの表示” の冒頭の要素リストを参照してください。

<group> 要素は入れ子にできます。XML データに <SalesRep> 要素がある場合、XData ReportDisplay ブロックには以下を記述できます。 <group name="SalesRep">...</group>

また、<SalesRep> 要素それぞれに複数の <sale> 要素があるとします。営業担当者ごとにその売り上げをどのように表示するかを指定するには、以下のようにします。 <group name="SalesRep"> <group name="sales"> ... </group> ... </group>

グループをテーブルとして表示するには、"<table>" の "group 属性" を参照してください。

pagebreak

True の場合、グループの繰り返しごとに改ページが挿入されます。

この属性で基本となるデータ型は %ZEN.Datatype.booleanOpens in a new tab です。 “Zen レポート属性のデータ型” を参照してください。

pagebreakBefore

True の場合、グループの繰り返し前に改ページが挿入されます。

この属性で基本となるデータ型は %ZEN.Datatype.booleanOpens in a new tab です。 “Zen レポート属性のデータ型” を参照してください。

primaryGroup

True の場合、<report> の primaryGroup 属性によって設定されたプライマリ・グループを処理しているグループを特定します。

この属性で基本となるデータ型は %ZEN.Datatype.booleanOpens in a new tab です。 “Zen レポート属性のデータ型” を参照してください。

removeEmpty

XData ReportDisplay ブロックで removeEmpty 属性を指定することで、レポートのこの <group> によって生成された XHTML 出力または PDF 出力に、このレポートの XML データ内で検出された空の要素や属性が表示されるようにするかどうかを制御します。removeEmpty には以下のいずれかの値を設定できます。

  • 指定なし。<group> では、その親の removeEmpty の値が継承されます。この <group> の祖先の要素で removeEmpty の値が指定されていない場合、既定値は 0 です。

  • 0。空の要素および属性の値は、レポートのこの <group> 用に生成された XHTML または PDF に出力されます。

  • 1。空の要素および属性の値は、レポートのこの <group> 用に生成された XHTML または PDF に出力されません

この属性で基本となるデータ型は %ZEN.Datatype.booleanOpens in a new tab です。 “Zen レポート属性のデータ型” を参照してください。

separator

表示される項目を区切るために使用します。以下の値のいずれかを指定できます。

  • "none" — グループの項目の間には、区切り記号は表示されません。separator が指定されていない場合は、これが既定になります。

  • "line" — 細い水平の線でグループの項目が区切られます。

small-multiple

グループのコンテンツをスモール・マルチプルとして出力する場合に使用します。

  • "false" — グループの項目は、スモール・マルチプルとして出力されません。small-multiple が指定されていない場合は、これが既定になります。

  • "true" — グループの項目は、スモール・マルチプルとして出力されます。<small-multiple> を参照してください。

small-multiple-name

スモール・マルチプルの名前。small-multiple と一緒に使用します。

testEachifxpath

レポートに要素を含めるかどうかを決めるためにグループの各要素に適用する条件を指定する XPath。primaryGroup を使用していない場合に使用されます。

<header> と <footer>

<header> と <footer> 要素は単純なコンテナです。その主な目的は、レポート内のスタイルの伝播を構成することです。<header> および <footer> の各要素は、その子に自身の class 属性の値を付与できます。

<header> および <footer> では、次のテーブルで示す属性がサポートされています。

属性 説明
表示の条件式 <header> 要素または <footer> 要素を条件付きで出力するための属性の詳細は、“要素を表示するための条件式” のセクションを参照してください。
表示属性 stylewidthclass などの属性の説明は、この章の冒頭の “レポートの表示属性” のセクションを参照してください。
foStyle

PDF の生成用に、XSL-FO のスタイルを定義できるようにします。Zen レポートの XData ReportDisplay ブロック内の以下のエントリは、

<header foStyle="font-family='Arial' font-size='14pt'">

レポート用に生成された XSL-FO スタイルシートに、以下の出力を生成します。

<fo:block font-family="Arial" font-size="14pt">

この属性は、XHTML 形式の出力には適用できません。

id オプションの識別子。この属性を設定しておくと、%GetComponentById(id) メソッドを呼び出すことにより、サーバ側コードでのこの要素の取得に使用できます。

<img>

<img> 要素は、レポートにイメージを挿入します。<img> には以下の属性があります。

属性 説明
表示の条件式 <img> 要素を条件付きで出力するための属性の詳細は、“要素を表示するための条件式” のセクションを参照してください。
表示属性 stylewidthclass などの属性の説明は、この章の冒頭の “レポートの表示属性” のセクションを参照してください。
caption

(オプション) このイメージのキャプション・テキスト。

この属性に普通のテキストを入力できる場合でも、基本となるデータ型 %ZEN.Datatype.captionOpens in a new tab が与えられます。 “Zen レポート属性のデータ型” を参照してください。

contentHeight

イメージの実際の高さを指定する、HTML の長さの値。PDF 出力では、contentHeight には、レポート内のイメージを表示する領域に指定した height とは異なる値を指定できます。

"2in"、"5cm"、"12px"、"14pt"、"3em"、または "75%" は、すべて HTML の長さの値として使用可能な形式です。パーセント (%) は、width 属性を使用している要素のコンテナを基準とします。

contentType

PDF 出力の場合、contentType は、データベースからストリームとして提供するイメージの MIME コンテンツ・タイプの指定に必要です。以下はその例です。

<img src="!test" contentType="content-type:image/jpg"/>

イメージをストリームとして提供する操作の詳細は、このテーブルの後の説明を参照してください。

contentWidth イメージの実際の幅を指定する、HTML の長さの値。PDF 出力では、contentWidth には、イメージを表示する領域に指定した width とは異なる値を指定できます。
height レポートのイメージを表示する領域を指定する、HTML の長さの値。既定では、イメージ・コンテンツがこの領域に出力されます。
id オプションの識別子。この属性を設定しておくと、%GetComponentById(id) メソッドを呼び出すことにより、サーバ側コードでのこの要素の取得に使用できます。
src

イメージのソース・ファイルの URI。URI は、現在のネームスペース内のアプリケーション用のサポート・ファイルを CSP が格納するサブディレクトリを基準としています。Zen レポートが存在するネームスペースの名前が myNameSpace であると仮定します。次に、イメージが格納されることが予期される Caché インストール・ディレクトリの下に、/csp/mynamespace というサブディレクトリがあると仮定します。以下のように指定した場合、

<img src="images/myPic.png" />

Zen レポート・クラスは、myPic.png ファイルを Caché インストール・ディレクトリの下の /csp/mynamespace/images サブディレクトリ内で検索します。

先頭に感嘆符が付いている src 属性の値は、<item> 要素の field 属性の場合と同様、XPath 式として解釈されます。これにより、XML データの中で動的に URI を生成し、これらのカスタマイズした URI をイメージ・ソースとして使用できるようになります。イメージの URI を動的に生成するために ! (感嘆符) を使用する場合、その文字列では絶対 URI を指定する必要があります。指定しないと、PDF レポートに表示されません。

width イメージの幅を指定する、HTML の長さの値。既定では、イメージ・コンテンツがこの領域に出力されます。

以下の例では、データベースに格納されているストリームを取得して、Zen レポートでイメージとして使用する方法を示しています。XData ReportDefinition で、レポートに使用するデータのストリームを参照する <element> または <attribute> を指定します。この参照では、expression で cookie を用意して、パラメータを共有する必要があります。この expression 値は、実際には 1 行で記述しますが、ここでは読みやすくするために数行で表しています。

XData ReportDefinition 
      [ XMLNamespace = "http://www.intersystems.com/zen/report/definition" ]
{
<report xmlns="http://www.intersystems.com/zen/report/definition"
 name="streamtest" sql="select * from mine.myStream">
 <group name="group">
  <element name="test" field="ID" 
   expression='"http://localhost:57777/csp/samples/%25CSP.StreamServer.cls?
   STREAMOID="_..Encrypt(##class(mine.myStream).%OpenId(%val).myStream.%Oid())_"
   &amp;CSPCHD="_%session.CSPSessionCookie_"&amp;CSPSHARE=1"'
  />
 </group>
</report>
}

例の続きとして、以下の XData ReportDisplay では、上記の XData ReportDisplay で得られたイメージ・ストリーム・データを参照しています。このレポートから PDF 出力を生成する場合は、contentType 値を指定する必要があります。

XData ReportDisplay 
      [ XMLNamespace = "http://www.intersystems.com/zen/report/display" ]
{
<report xmlns="http://www.intersystems.com/zen/report/display" 
              name="streamtest">
  <body>
    <group name="group">
      <img src="!test" contentType="content-type:image/jpg" />
    </group>
  </body>
</report>
}

<inline>

<inline> 要素は、さまざまなスタイルのテキストを表示するための単一行が必要な場合に便利です。以下に例を示します。ここでは、インライン・コンテンツの最後で強制改行するために <br/> を使用しています。

<inline>This is a test of </inline>
 <inline style="font-size:14pt">14 point text</inline>
 <br/>

<inline> 要素は、別の要素の中で自由に入れ子にすることはできません。表示要素では、子を含むことができるほか、テキストのみを記述可能な要素を表示できます。<inline> は、<pageheader><pagefooter><pagestartsidebar><pageendsidebar><body><block><group>、または <bidioverride> の子としてのみ表示できます。<inline> は、<link>、<inline>、<p>、または <write> などのコンテンツ要素の子としては表示できません。

<inline> には以下の属性があります。中でも、style 属性が <inline> で最も重要です。

属性 説明
表示の条件式 <item> 要素を条件付きで出力するための属性の詳細は、“要素を表示するための条件式” のセクションを参照してください。
値の条件式 <item> 要素の値を条件付きで表示できる expression 属性と if 属性の詳細は、“値を表示するための条件式” のセクションを参照してください。“ ”
bidi-override-direction

インライン・テキストの双方向オーバーライドの方向を設定します。指定可能な値は、"rtl” および “ltr" です。既定は “ltr" です。<p> でもサポートされています。

双方向のテキストの詳細は、"<bidioverride>" を参照してください。

表示属性

style 属性を使用して、<inline> 要素内のコンテンツにスタイルを適用します。次に例を示します。

stylewidthclass などの属性の説明は、この章の冒頭の “レポートの表示属性” のセクションを参照してください。

id オプションの識別子。id を使用すると、<inline> 要素にアクセスしてそのコンテンツをプログラムで変更できます。詳細は、このテーブルの後に示す content プロパティの説明を参照してください。
linefeed-treatment

XSL-FO プロパティ linefeed-treatment をサポートします。詳細は、"<div>" のセクションの末尾にある説明を参照してください。

<inline> 要素は、Zen レポート・クラス %ZEN.Report.Display.inlineOpens in a new tab の XML プロジェクションです。オンラインのクラスリファレンス情報でこのクラスについて参照すると、content というプロパティが含まれていることがわかります。Zen では、ここに XData ReportDisplay の <inline> 要素と </inline> 要素の間に置いたテキストが格納されます。レポートを表示する前にサーバ側で <inline> 要素のテキストをプログラムで変更する必要がある場合は、クラス・メソッドの %GetComponentById(id) を呼び出して、%ZEN.Report.Display.inlineOpens in a new tab オブジェクトへのポインタを取得します。これにより、必要に応じてこのオブジェクトの content プロパティにアクセスして、その値を変更できます。

content プロパティをプログラムで操作する場合は、このテキスト文字列に、基本となるデータ型 %ZEN.Datatype.captionOpens in a new tab が実際に含まれるように留意してください。 “Zen レポート属性のデータ型” を参照してください。

<inlinecontainer>

<inlinecontainer> 要素によって、生成された XSL-FO に <fo:inline-container> 要素が追加されます。 これによって、現在有効な writing-mode をオーバーライドする属性を記述できます。<inline> 要素が表示されている場合でも、これには、<fo:block> 要素を記述する必要があります。付録 “生成された XSL-FO と HTML” には、ブロック XSL-FO 出力およびインライン XSL-FO 出力を生成する Zen レポート要素がリストされています。

次に例を示します。

<inlinecontainer writing-mode="lr"> 
 <div><p>123</p></div> </inlinecontainer>

<inlinecontainer> 要素には以下の属性があります。

属性 説明
表示の条件式 <item> 要素を条件付きで出力するための属性の詳細は、“要素を表示するための条件式” のセクションを参照してください。
値の条件式 <item> 要素の値を条件付きで表示できる expression 属性と if 属性の詳細は、“値を表示するための条件式” のセクションを参照してください。“ ”
表示属性

style 属性を使用して、<inline> 要素内のコンテンツにスタイルを適用します。以下はその例です。

<inline style="font-size:14pt">14 Point Text</inline>

stylewidthclass などの属性の説明は、この章の冒頭の “レポートの表示属性” のセクションを参照してください。

id オプションの識別子。id を使用すると、<inline> 要素にアクセスしてそのコンテンツをプログラムで変更できます。詳細は、このテーブルの後に示す content プロパティの説明を参照してください。
writing-mode

生成された XSL の <fo:page-sequence> 要素に writing-mode 属性を追加します。writing-mode では、テキストを記述する方向に関連するページ・レイアウト機能を制御します。writing-mode 属性の詳細は、“書き込みモード” のセクションを参照してください。

可能な値は以下のとおりです。

  • “lr-tb” — 多くのインド・ヨーロッパ語のように、左から右、上から下に記述するテキストに対応します。

  • “rl-tb” — アラビア語やヘブライ語のように、右から左、上から下に記述するテキストに対応します。

  • “tb-rl” 中国語や日本語のように、上から下、右から左に記述するテキストに対応します。

  • “lr” — “lr-tb” と同じです。

  • “rl” — “rl-tb” と同じです。

  • “tb” — “tb-lr” と同じです。

  • “inherit” — 親要素から writing-mode の値を取得します。

すべての XSL-FO レンダラがすべての指定可能な値をサポートしているわけではありません。

<item>

<item> 要素は、XML からレポートにリテラル値またはデータを出力します。<item> では、属性 fieldspecial、または value のうち 1 つしか出力できないため、いずれか 1 つを指定することをお勧めします。これらの属性間での相互作用、および expression 属性との相互作用の詳細は、“値を表示するための条件式” のセクションを参照してください。“ ”

<item> には以下の属性があります。

属性 説明
表示の条件式 <item> 要素を条件付きで出力するための属性の詳細は、“要素を表示するための条件式” のセクションを参照してください。
値の条件式 <item> 要素の値を条件付きで表示できる expression 属性と if 属性の詳細は、“値を表示するための条件式” のセクションを参照してください。
表示属性 stylewidthclass などの属性の説明は、この章の冒頭の “レポートの表示属性” のセクションを参照してください。
クロス集計テーブルの属性 この特殊タイプのテーブルの作成に使用する属性の詳細は、"タイプ 2 クロス集計テーブルの作成" を参照してください。
appendToZenLastPage 総ページ数を計算するために、Zen レポートは、最終ページ・マーカを生成します。複数の独立した番号セクションを持つレポートは、事実上複数の ‘最終‘ ページがあります。special 属性を使用してページ番号を追加する場合は、この属性を使用して、項目を含むセクションに一意の最終ページ・マーカを生成する値を指定する必要があります。これを <body> の属性 appendIdToZenLastPage と共に使用します。この値は、appendIdToZenLastPage に指定される id の値と一致する必要があります。

appendToZenLastPage 属性の使用の詳細は、"マルチセクション・レポートのページ番号付け" のセクションを参照してください。

breakOnLineFeed breakOnLineFeed が True の場合、要素のデータに記述された改行は、PDF 出力では改行に表示されます。改行は、属性値の中では保持もサポートもされません。XML 要素のテキスト・コンテンツの中でのみ、有効です。

breakOnLineFeed が False の場合、通常の XML 処理同様に、改行は空白として処理され、無視されます。breakOnLineFeed の既定値は False です。

literalSpaces も参照してください。

この属性で基本となるデータ型は %ZEN.Datatype.booleanOpens in a new tab です。 “Zen レポート属性のデータ型” を参照してください。

call 実行する <xsl:template> の名前。テンプレートは、同じ Zen レポート・クラスの AllXslt、HtmlXslt、または XslFoXslt という XData ブロックで定義する必要があります。このテーブルの paramNamesparams、および “項目のレンダリング時の XSLT テンプレートの呼び出し” のセクションを参照してください。
caption (オプション) この項目のキャプション・テキスト。displayCaption を参照してください。この属性に普通のテキストを入力できる場合でも、基本となるデータ型 %ZEN.Datatype.captionOpens in a new tab が与えられます。 “Zen レポート属性のデータ型” を参照してください。
copyxml True の場合、この <item> の field の値は、<xsl:copy-of> 処理の入力とする XPath として解釈されます。False の場合、field の値は、<xsl:value-of> 処理の入力とする XPath として解釈されます。

この属性で基本となるデータ型は %ZEN.Datatype.booleanOpens in a new tab です。 “Zen レポート属性のデータ型” を参照してください。

displayCaption True の場合、caption のテキストが出力項目の接頭語になります。詳細は、<caption> を参照してください。

この属性で基本となるデータ型は %ZEN.Datatype.booleanOpens in a new tab です。 “Zen レポート属性のデータ型” を参照してください。

field

field 属性を指定すると、<item> によって XML データにそのフィールドの値が表示されます。詳細は、"field" のセクションを参照してください。

fieldname テーブルで sql または queryClass、および queryName を使用してデータを収集する場合、fieldname 属性の使用により、sql 属性のデータ・フィールドを指定するか、もしくは名前によってクエリを指定することができます。“クラス・クエリからのテーブル作成” および “SQL を使用したテーブル作成” のセクションを参照してください。
fieldnum テーブルで sql または queryClass、および queryName を使用してデータを収集する場合、fieldnum 属性の使用により、sql 属性のデータ・フィールドを指定するか、もしくは番号によってクエリを指定することができます。また、コールバック・メソッドによりテーブルに返されるデータのフィールドを指定するためにも使用されます。“コールバック・メソッドを使用したテーブル作成” を参照してください。
formatNumber 数に使用する形式を指定する文字列。この文字列には、XSLT の format-number 関数と同じ規約を適用します。例えば、小数点以下 1 桁を持つ 3 桁の数字には、###.# を使用します。call を使用して <item> の値を取得する場合、formatNumber 属性を使用して結果をフォーマットすることはできません。代わりに、call 属性で参照している <xsl:template> の中で XSLT の format-number 関数を使用します。詳細は、“項目のレンダリング時の XSLT テンプレートの呼び出し” のセクションを参照してください。
id オプションの識別子。この属性を設定しておくと、%GetComponentById(id) メソッドを呼び出すことにより、サーバ側コードでのこの要素の取得に使用できます。
insert-zero-width-spaces

<item> のコンテンツでテキストの折り返しを有効にするには、以下の例のようにこの属性を True に設定します。

<item field="@BedCode" width=".25in" insert-zero-width-spaces="true"/>

insert-zero-width-spaces を True に設定すると、<item> のコンテンツでは、最後の文字を除く文字の後ろに 1 文字おきに長さゼロの非表示スペースが挿入されます。これにより、FOP レンダリング・エンジンおよび XEP レンダリング・エンジンでは、これらのスペースを探し出して、表示列の中でデータを折り返す処理に使用できます。

True に設定していない既定の場合、FOP ではテキストが隣の列にはみ出し、XEP では領域に収まるようにデータの文字が縮小されます。いずれの既定でも、テキストが読みにくくなる可能性があります。

この属性で基本となるデータ型は %ZEN.Datatype.booleanOpens in a new tab です。 “Zen レポート属性のデータ型” を参照してください。

linefeed-treatment XSL-FO プロパティ linefeed-treatment をサポートします。詳細は、"<div>" のセクションを参照してください。
link

項目のデータの周囲に記述するオプションのハイパーリンク。

先頭に感嘆符が付いた link 属性は、field 属性の場合と同様、XPath 式と解釈されます。これにより、XML データの中で動的に URI を生成し、これらのカスタマイズした URI を表示に使用できるようになります。

以下は、有効な If 構文の例です。

<item value="click to open" link='!concat("MyApp.EmpDetails.cls?ID=",@id)'/>

concat などの XPath 関数への文字列引数を一重引用符で囲むことはできません。二重引用符または &quot エンティティを使用する必要があります。

link を指定した場合は、項目の style クラスで "a" オプションが使用されます。

literalSpaces True の場合、この属性によって、スキップされずにスペースとして表示されるリテラル・スペースが生成されます。改行文字に同様の操作を行う場合、breakOnLineFeed を True に設定します。

この属性で基本となるデータ型は %ZEN.Datatype.booleanOpens in a new tab です。 “Zen レポート属性のデータ型” を参照してください。

paramNames この <item> のために呼び出す <xsl:template><xsl:param> 引数の名前のセミコロン区切りリスト。詳細は、このテーブルの callparams、および “項目のレンダリング時の XSLT テンプレートの呼び出し” のセクションを参照してください。
params この <item> のために呼び出す <xsl:template> で定義された <xsl:param> 引数に値を提供する式のセミコロン区切りリスト。これらの式には、リテラル値、ノード・セット、XPath 式、または XSLT 関数呼び出しを使用できます。XSLT の <xsl:with-param> の値として有効な値であれば、params にも使用できます。詳細は、このテーブルの callparamNames、および “項目のレンダリング時の XSLT テンプレートの呼び出し” のセクションを参照してください。
special

special 属性を指定すると、<item> によって、あらかじめ定義されている動的なデータが表示されます。詳細は、"special" のセクションを参照してください。

suppressDuplicates

テーブルに順番に設定されている重複値を表示するかどうかをコントロールします。詳細は、"suppressDuplicates" のセクションを参照してください。

suppressEmpty suppressEmpty は、removeEmpty の代わりに使用できます。removeEmpty は、<table>、<group>、<report> に適用できる属性です。removeEmpty を True に設定すると、出力から空の項目が実際に削除されます。これにより、データ・セットの位置が合わなくなることがあります。アプリケーションによっては、これによって致命的なまたは多大な影響が生じる場合があります。

この問題が発生する場合は、それぞれの <item> 要素で suppressEmpty 属性を使用します。suppressEmpty では、空の <item> の代わりに空白のプレースホルダを表示するので、位置が合わなくなることはありません。suppressEmpty は、それが記述された個々の <item> にのみ適用されます。

この属性で基本となるデータ型は %ZEN.Datatype.booleanOpens in a new tab です。 “Zen レポート属性のデータ型” を参照してください。

value value 属性を指定すると、<item> ではそれがリテラル値として表示されます。この属性に普通のテキストを入力できる場合でも、基本となるデータ型 %ZEN.Datatype.captionOpens in a new tab が与えられます。“Zen レポート属性のデータ型” を参照してください。field 属性や special 属性と value 属性との相互作用、およびこれらの属性と expression 属性との相互作用の詳細は、“値を表示するための条件式” のセクションを参照してください。

以下の属性は、Excel スプレッドシートを displayxlsx モードで生成する場合に使用します。

属性 説明
excelFormula この集約が生成されたスプレッドシートの Excel 式であることを示します。この値は、集約の type と同等の Excel 式の名前にする必要があります。この属性は、Excel スプレッドシートを displayxlsx モードで生成する場合にのみ使用します。

excelFormula が ReportDefinition で使用される方法の詳細は、"<element>" を参照してください。

excelName Excel 出力の列名を指定します。この属性は、Excel スプレッドシートを displayxlsx モードで生成する場合にのみ使用します。excelName が ReportDefinition で使用される方法の詳細は、"<element>" を参照してください。

excelName 属性ではローカライズがサポートされています。"Zen レポートのローカライズ" を参照してください。

excelNumberFormat 数値の書式を設定する方法を Excel に指示する文字列を指定します。この属性は、Excel スプレッドシートを displayxlsx モードで生成する場合にのみ使用します。

excelNumberFormat が ReportDefinition で使用される方法の詳細は、"<element>" を参照してください。

isExcelAggregate この項目が Excel 集約を生成することを示します。Excel 出力で集約を表示するには、レポートで AGGREGATETAG パラメータを設定する必要があります。この属性は、Excel スプレッドシートを displayxlsx モードで生成する場合にのみ使用します。

この属性で基本となるデータ型は %ZEN.Datatype.booleanOpens in a new tab です。“Zen レポート属性のデータ型” を参照してください。

isExcelNumber

既定では、<item> によって指定された値は、生成された Excel スプレッドシートのテキストとして解釈されます。属性 isExcelNumber="true" を設定すると、この値は、Excel の数値として解釈されます。Excel がこの値を数値として解釈できない場合、生成されたスプレッドシートを Excel で開こうとすると、エラーが表示されます。この属性は、Excel スプレッドシートを displayxlsx モードで生成する場合にのみ使用します。isExcelNumber が ReportDefinition で使用される方法の詳細は、"<element>" を参照してください。

xmlname 中間 XML でこの項目から生成されたタグの名前を指定します。既定のタグ名は、<item> です。カスタム・タグ名にすると、デバッグに便利な場合があります。この属性は、Excel スプレッドシートを displayxlsx モードで生成する場合にのみ使用します。“後で表示するための中間ファイルの保存” を参照してください。

field

field 属性は XPath 式として使用されます。例として、以下のデータがあると仮定します。

<SalesRep id="1"><customer>MegaPlex Systems</customer></SalesRep>

ここで、id 属性の値を取得するには、以下の XPath 式が必要です。

field= "@id"

一方、<customer> 要素の値を取得するには、以下の XPath 式が必要です。

field="customer"

field 属性は、一致する現在の <group> について解釈されます。<group name="SalesRep"> に記述する <item> については、<SalesRep> 属性および <SalesRep> の子のみを使用できます。

special 属性や value 属性と field 属性との相互作用、およびこれらの属性と expression 属性との相互作用の詳細は、“値を表示するための条件式” のセクションを参照してください。“ ”

special

special 属性には以下の値を指定できます。

  • number — グループ内でのレコード番号を表します。

  • page-number — PDF レポートにページ番号を挿入します。XHTML では '##' と表示されます。

  • page-count — PDF レポートにページ数を挿入します。XHTML では '##' と表示されます。

  • page-number-of — ページ番号を '2 of 18' の形式で挿入します。XHTML では '## of ##' と表示されます。

  • page-number-/ — ページ番号を '2/18' の形式で挿入します。XHTML では '##/##' と表示されます。

special の最後の 3 つの値によって、<item> の field 属性で定義された XPath 値に基づく最終ページ・マーカ ID を動的に生成できます。<body> の属性 genLastPageIdOn を設定している場合は、最終ページ・マーカを動的に生成する必要があります。

  • page-count-with-xpath — PDF レポートにページ数を挿入します。XHTML では '##' と表示されます。

  • page-number-of-with-xpath — ページ番号を '2 of 18' の形式で挿入します。XHTML では '## of ##' と表示されます。

  • page-number-/-with-xpath — ページ番号を '2/18' の形式で挿入します。XHTML では '##/##' と表示されます。

special 属性の使用の詳細は、"マルチセクション・レポートのページ番号付け" のセクションを参照してください。

ofString

属性 ofString は、'2 of 18' のようなページ番号付け書式で数字と数字の間に使用する文字列を指定します。既定値は、" of " です。

suppressDuplicates

suppressDuplicates を省略した場合、または 0 に設定した場合、<table> に順番に設定されている重複した <item> 値が表示されます。以下はその例です。

Name      Sales
John Doe  $100
John Doe  $150
John Doe  $345

1 に設定されている場合、<table> 内の重複した <item> は表示されません。以下はその例です。

Name      Sales
John Doe  $100
          $150
          $345

上記の出力を生成するコードは、以下のようになります。

<table group="SalesPerson" width="6in"
       class="table4" altcolor="#DFDFFF">
  <item caption="Name" field="Name"
        suppressDuplicates="1" />
  <item caption="Amount" field="Amount" />
</table>

この属性で基本となるデータ型は %ZEN.Datatype.booleanOpens in a new tab です。 “Zen レポート属性のデータ型” を参照してください。

マルチセクション・レポートのページ番号付け

総ページ数を計算するために、Zen レポートは、最終ページ・マーカを生成します。レポート内の複数の独立した番号セクションでは、各セクションに最終ページがあり、ページ番号付けを目的として、レポートには複数の最終ページがあります。 レポートの <body> 要素で appendIdToZenLastPage が true に設定されている場合は、レポートで <body> 要素の id 値をセクションの最終ページ・マーカに追加して、一意の最終ページ・マーカを生成します。<item> の属性 special を使用してページ番号とページ数を追加する場合は、appendToZenLastPage を使用して、項目を含むセクションの最終ページ・マーカを識別します。したがって、appendToZenLastPage で指定される値は、セクションの <body> 要素の id 値と一致する必要があります。

field 属性および special 属性と value 属性との相互作用、およびそれらと expression 属性との相互作用の詳細は、“値を表示するための条件式” のセクションを参照してください。“ ”

<line>

<line> 要素は、レポートの要素間に改行を挿入します。 実際には、水平方向の線、または空の改行が挿入されます。<line> には以下の属性があります。

属性 説明
表示の条件式 <line> 要素を条件付きで出力するための属性の詳細は、“要素を表示するための条件式” のセクションを参照してください。
表示属性 stylewidthclass などの属性の説明は、この章の冒頭の “レポートの表示属性” のセクションを参照してください。
align レポートのページ内での配置です。指定できる値は、"left"、"right"、および "center" です。
caption

(オプション) この行のキャプション・テキスト。

この属性に普通のテキストを入力できる場合でも、基本となるデータ型 %ZEN.Datatype.captionOpens in a new tab が与えられます。 “Zen レポート属性のデータ型” を参照してください。

color 線の色を指定する CSS カラー値。color は、実線または点線にのみ適用されます。
count 描画する改行の数。これは <line> 要素を繰り返すことと同じです。
id オプションの識別子。この属性を設定しておくと、%GetComponentById(id) メソッドを呼び出すことにより、サーバ側コードでのこの要素の取得に使用できます。
length

線の長さを指定する、HTML の長さの値length は、実線または点線にのみ適用されます。

"2in"、"5cm"、"12px"、"14pt"、"3em"、または "75%" は、すべて HTML の長さの値として使用可能な形式です。パーセント (%) は、width 属性を使用している要素のコンテナを基準とします。

lineHeight

線を表示する際に確保する縦方向のスペースを指定する、HTML の長さの値。これは、pattern が "solid" または "dashed" のときの線の thickness のことではありません。lineHeight は、"空" の線にも適用されます。

この属性を使用している場合でも、XHTML と XSL-FO (つまり、PDF) では、線の間隔は異なります。これをオーバーライドするには、<fo> 要素と <html> 要素を使用します。

pattern 指定できる値は、"empty"、"solid"、および "dashed" です。
thickness 線の太さを指定する、HTML の長さの値。既定値は 1px です。thickness は、実線または点線にのみ適用されます。

<list>

<list> 要素は、Zen レポートで箇条書きまたは番号付きリストを表示するために使用します。以下の例では、imagetest グループにある person ごとに 1 行を出力します。この場合、各出力行には、該当する個人の Name の値が記述されています。

<report xmlns="http://www.intersystems.com/zen/report/display"
        name="imagetest">
  <body>
    <list group="person">
      <item field="Name"/>
    </list>
  </body>
</report>

<list> には以下の属性があります。

属性 説明
表示の条件式 <list> 要素を条件付きで出力するための属性の詳細は、“要素を表示するための条件式” のセクションを参照してください。
表示属性 stylewidthclass などの属性の説明は、この章の冒頭の “レポートの表示属性” のセクションを参照してください。<list> 要素では、箇条書きの記号や番号に style 属性が適用されます。
group

必須項目。<list> に group を指定しない場合、リストに表示される項目は 1 つのみとなります。ほとんどのリストでは複数の項目が必要なので、各 <list> に group 属性を指定することが妥当です。このリストで <item> などの要素を 1 つ以上指定して、グループのどのデータをリストに表示するかを特定する必要があります。

一見すると、XData ReportDisplay の <list> で指定する group の値は、XData ReportDefinition の上位レベルにある <group> または <report> で指定した name の値と一致している必要があるように思われます。多くの場合、表面的にはそのとおりです。

しかし、実際のこの規則には興味深い側面があります。group 属性の値は、<list> の親である <report> または <group> を先頭とする暗黙の XPath 式の後に続く、部分的な XPath 式です。つまり、group および field の式は、<report> の階層の中でそれらの上位レベルにある他の group および field の式の後ろに連結されます。これを理解すると、グループやリストをより巧妙に設定して使用できるようになります。

Zen レポートで XPath 式を使用する方法の詳細は、“group、field、および XPath 式” のセクションを参照してください。

id オプションの識別子。この属性を設定しておくと、%GetComponentById(id) メソッドを呼び出すことにより、サーバ側コードでのこの要素の取得に使用できます。
image カスタマイズした箇条書きの記号として使用するイメージの URI。image 値を指定すると、type 属性は無視されます。
separator

リスト項目を区切るために使用します。以下の値のいずれかを指定できます。

  • "none" — リストの項目の間には、区切り記号は表示されません。separator が指定されていない場合は、これが既定になります。

  • "line" — 細い水平の線でグループの項目が区切られます。

startvalue 番号付きリストの先頭番号の値。startvalue は、必ず整数で指定します。type が "A" で startvalue が "3" の場合、リストの最初の要素のラベルは "C" になります。
type リスト項目に使用する箇条書き記号またはリスト番号のスタイル。指定可能な値は、"none"、"circle"、"square"、"disc"、"1"、"A"、"a"、"I"、"i" です。PDF レポートでは、"square" と "circle" はサポートされていません。

<p>

<p> 要素は、テキストのブロックを表示します。このスタイル・クラスに "p" オプションを使用します。<p> には以下の属性があります。

属性 説明
表示の条件式 <p> 要素を条件付きで出力するための属性の詳細は、“要素を表示するための条件式” のセクションを参照してください。
値の条件式 <item> 要素の値を条件付きで表示できる expression 属性と if 属性の詳細は、“値を表示するための条件式” のセクションを参照してください。“ ”
表示属性 stylewidthclass などの属性の説明は、この章の冒頭の “レポートの表示属性” のセクションを参照してください。
bidi-override-direction

段落に含まれるテキストの双方向オーバーライドの方向を設定します。指定可能な値は、"rtl” および “ltr" です。既定は “ltr" です。<inline> でもサポートされています。

双方向のテキストの詳細は、"<bidioverride>" を参照してください。

caption

(オプション) このブロックのキャプション・テキスト。

この属性に普通のテキストを入力できる場合でも、基本となるデータ型 %ZEN.Datatype.captionOpens in a new tab が与えられます。 “Zen レポート属性のデータ型” を参照してください。

id オプションの識別子。id を使用すると、<p> 要素にアクセスしてそのコンテンツをプログラムで変更できます。詳細は、このテーブルの後に示す content プロパティの説明を参照してください。

<p> 要素は、Zen レポート・クラス %ZEN.Report.Display.pOpens in a new tab の XML プロジェクションです。オンラインのクラスリファレンス情報でこのクラスについて参照すると、content というプロパティが含まれていることがわかります。Zen では、ここに XData ReportDisplay の <p> 要素と </p> 要素の間に置いたテキストが格納されます。レポートを表示する前にサーバ側で段落のテキストをプログラムで変更する必要がある場合は、クラス・メソッドの %GetComponentById(id) を呼び出して、%ZEN.Report.Display.pOpens in a new tab オブジェクトへのポインタを取得します。これにより、必要に応じてこのオブジェクトの content プロパティにアクセスして、その値を変更できます。

content プロパティをプログラムで操作する場合は、このテキスト文字列に、基本となるデータ型 %ZEN.Datatype.captionOpens in a new tab が実際に含まれるように留意してください。 “Zen レポート属性のデータ型” を参照してください。

<pagebreak>

<pagebreak> 要素は、PDF 出力に改ページを挿入します。これによって、画面上の XHTML レポートには点線が表示されます。この XHTML レポートを印刷すると、ここで改ページが行われます。

各 <pagebreak> 要素では、以下のテーブルで示す属性がサポートされています。

属性 説明
表示の条件式 <pagebreak> 要素を条件付きで出力するための属性の詳細は、“要素を表示するための条件式” のセクションを参照してください。
表示属性 stylewidthclass などの属性の説明は、この章の冒頭の “レポートの表示属性” のセクションを参照してください。
id オプションの識別子。この属性を設定しておくと、%GetComponentById(id) メソッドを呼び出すことにより、サーバ側コードでのこの要素の取得に使用できます。

<small-multiple>

<small-multiple> 要素を使用すると、<group> のデータを、そのページで繰り返される一連のグラフィックとして出力できます。スモール・マルチプルは、郵送ラベルの作成などの作業に役立ちます。Zen レポートでは、<group> から取得したデータを <small-multiple> 要素の形式にして、繰り返し要素を含む <table> を生成します。

スモール・マルチプルを定義するには、各 <small-multiple> 要素に入力するデータを含む <group> を最初に定義します。

<group name="Person" small-multiple="true" small-multiple-name="person-labels">
 <table orient="row" >
  <item field="@Name"/>
  <item field="@Street"/>
  <item field="@City"/>
  <item field="@State"/>
 </table>
</group>

属性 small-multiple には、このグループのデータをスモール・マルチプルとして出力するかどうかを指定します。既定値は、"false" です。属性 small-multiple-name には、このグループに関連するスモール・マルチプルの名前を指定します。既定値は、"small-multiple" です。レポート内のスモール・マルチプルには、それぞれ一意の名前を使用する必要があります。

次に、以下のようにスモール・マルチプルを定義します。

<small-multiple
 num-rows="1"
 num-cols="3"
 table-class="table4"
 table-width="5in"
 col-width="2.5in"
 name="person-labels"
/>

name 属性には <group> の small-multiple-name と同じ値を使用し、このスモール・マルチプルのデータを集約します。

各 <small-multiple> 要素では、以下のテーブルで示す属性がサポートされます。

属性 説明
表示の条件式 <small-multiple> 要素を条件付きで表示するための属性の詳細は、“要素を表示するための条件式” のセクションを参照してください。
表示属性 stylewidthclass などの属性の説明は、この章の冒頭の “レポートの表示属性” のセクションを参照してください。
id オプションの識別子。この属性を設定しておくと、%GetComponentById(id) メソッドを呼び出すことにより、サーバ側コードでのこの要素の取得に使用できます。
num-rows

スモール・マルチプルを保持するテーブルの行の数。

num-cols

スモール・マルチプルを保持するテーブルの列の数。

table-class

テーブルの CSS クラスまたは属性のセット。

table-style

テーブルの CSS スタイル。

table-width

テーブルの幅。

row-class

行の CSS クラスまたは属性のセット。

row-style

行の CSS クラスまたは属性のセット。

row-width

行の幅。

col-class

列の CSS クラスまたは属性のセット。

col-style

列の CSS スタイル。

col-width

列の幅。

name

スモール・マルチプルの名前。既定値は、“small-multiple” です。レポート内のスモール・マルチプルにはそれぞれ一意の名前を使用する必要があります。

fill-order

zr:small-multiple XML 要素のコレクションであるグループによって定義される一時ツリーによって、スモール・マルチプルのデータがどのように入力されるかを定義するために使用します。horizontal は、要素が検出されると、スモール・マルチプルの 1 つの行全体にデータが入力されてから次の行に入力されることを意味します。vertical は、スモール・マルチプルの最初の列にデータが入力されてから次の列に入力されることを意味します。既定は horizontal です。

Important:

スモール・マルチプルの生成では一時ツリーを使用するため、HTML および PDF の両方の出力に XSLTVERSION = 2.0 パラメータを設定し、XSLT バージョン 2.0 で処理する必要があります。XSLTMODE クラス・パラメータや $XSLT URI パラメータを使用して、XSLT 処理をブラウザに向けることはできません。既定では、XSLT 処理はサーバで行われます。グループのデータは、small-multiple-name という名前の変数に格納されます。

Zen レポート・クラスの例を以下に示します。

Class ZENSmallMultiple.JKSMailingLabel Extends %ZEN.Report.reportPage
{
Parameter DEFAULTMODE = "pdf";
Parameter XSLTVERSION = 2.0;
/// This XML defines the logical contents of this report.
// NEW STUFF
XData ReportDefinition [ XMLNamespace = "http://www.intersystems.com/zen/report/definition" ]
 {
  <report xmlns="http://www.intersystems.com/zen/report/definition"
   name="MailingLabel" 
   sql="SELECT top 9 name,Home_Street,Home_City,
      Home_State,Home_Zip from Sample.Person order by name">
    <group name="Person">
     <element field="name" name="name"/>
     <element field="Home_Street" name="Home_Street"/>
     <element field="Home_City" name="Home_City"/>
     <element field="Home_State" name="Home_State"/>
     <element field="Home_Zip" name="Home_Zip"/>
    </group>
  </report>
 }
 /// This XML defines the display for this report.
 /// This is used to generate the XSLT stylesheets for both HTML and XSL-FO.
 XData ReportDisplay [ XMLNamespace = "http://www.intersystems.com/zen/report/display" ]
 {
  <report xmlns="http://www.intersystems.com/zen/report/display"
         name="MailingLabel">
  <document width="8.5in" height="11in" 
    marginLeft=".175in" marginRight=".175in" marginTop=".5in" marginBottom=".5in" />
  <body>
   <group name="Person" small-multiple="true" small-multiple-name="person-labels">
    <table orient="row" >
     <item field="name"/>
     <item field="Home_Street"/>
     <item field="concat(Home_City,", ",Home_State," ",Home_Zip)"/>
    </table>
   </group>
   <small-multiple 
    num-rows="3" 
    num-cols="3"
    table-class="table4"
    table-width="8in"
    table-style="border:0pt;padding:0pt"
    row-style="border:0pt;padding:0pt;height:0.75in"
    col-width="2in"
    row-width="4in"
    name="person-labels"
   />  
   </body>
  </report>
  }
}

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

generated description: mailinglabels

<table>

<table> 要素は、レポートにテーブルを出力します。<table> には以下の属性があります。

Note:

Zen レポートのテーブルでは、PDF 出力の場合のみ、パーセント値を使用して比率による列幅の指定が可能です。Zen レポートの XHTML 出力では、テーブルの幅の指定にパーセントを使用することはできません。

属性 説明
表示の条件式 <table> 要素を条件付きで出力するための属性の詳細は、“要素を表示するための条件式” のセクションを参照してください。
表示属性

stylewidthclass などの属性の説明は、この章の冒頭の “レポートの表示属性” のセクションを参照してください。

テーブルに表示するすべてのセルでは、スタイル・クラスに td を使用します。ただし、ヘッダ・セルでは th を使用します。

align

指定できる align の値は、"left"、"right"、および "center" です。 HTML 出力では、align 属性でレポート内のテーブルの配置を指定します。

PDF 出力では、値を "center" にすると、テーブル内でテキストが中央に配置されますが、レポートのマージンに対してテーブルが中央に配置されることはありません。テーブルを中央に配置するには、<div> に <table> を配置し、その <div> を中央に配置する必要があります。詳細は、“PDF 出力における <table> の中央揃え” のセクションを参照してください。

altcolor

1 行おきに行の色を変える場合に偶数行 (2、4、6 など) の背景色を指定する、CSS カラー値。これは、orient を "col" として、group を指定した場合にのみ指定できます。TABLEALTCOLOR でレポート全体に設定されているカラー値をオーバーライドします。

caption

(オプション) このテーブルのキャプション・テキスト。

この属性に普通のテキストを入力できる場合でも、基本となるデータ型 %ZEN.Datatype.captionOpens in a new tab が与えられます。 “Zen レポート属性のデータ型” を参照してください。

crosstab テーブルがクロス集計テーブルであることを指定します。“タイプ 1 クロス集計テーブルの作成” を参照してください。
data-type, table data-type 属性は orderby で指定したソート列のデータのデータタイプを指定します。可能な値は以下のとおりです。“text”、“number”、および “qname”。
defaultWidth テーブルの既定の幅の HTML の長さの値、または列幅の値を生成しないことを意味する値 "none"
excelGroupName 中間 XML でこのテーブルから生成されたタグの名前を指定します。既定のタグ名は、<group> です。カスタム・タグ名にすると、デバッグに便利な場合があります。この属性は、Excel スプレッドシートを displayxlsx モードで生成する場合にのみ使用します。“後で表示するための中間ファイルの保存” を参照してください。
excelSheetName

excelSheetName 属性により、生成されたワークシートの名前を指定できます。既定では、ワークシートに Excel シート用の既定の名前付け規約 (Sheet1、Sheet2 など) が使用されます。単一シートのレポートに対しては <report> で excelSheetName を指定し、複数シートのレポートに対してはワークシートを定義する各 <group> でこれを指定します。excelSheetName 属性ではローカライズがサポートされています。"Zen レポートのローカライズ" を参照してください。

excelSheetName で最初の文字が ! (感嘆符) の場合、シート名を取得するために評価される ObjectScript 実行時式として後続の内容がレポートで解釈されます。実行時式により渡されるシート名は、ローカライズされません。

シート名の生成を詳細に制御する場合は、%ZEN.Report.reportPageOpens in a new tab に定義されているメソッド %getDisplayUniqueExcelSheetName をオーバーライドします。

foHeaderStyle

PDF の生成用に、テーブル・ヘッダに対して XSL-FO のスタイルを定義できるようにします。Zen レポートの XData ReportDisplay ブロック内の以下のエントリは、

<table foHeaderStyle="font-weight='bold'">

レポート用に生成された XSL-FO スタイルシートに、以下のような出力を生成します。

<fo:table-header font-weight="bold">

この属性は、XHTML 形式の出力には適用できません。

foStyle

PDF の生成用に、テーブル全体に対して XSL-FO のスタイルを定義できるようにします。Zen レポートの XData ReportDisplay ブロック内の以下のエントリは、

<table foStyle="font-family='Arial' font-size='9pt'">

レポート用に生成された XSL-FO スタイルシートに、以下のような出力を生成します。

<fo:table font-family="Arial" font-size="9pt">

この属性は、XHTML 形式の出力には適用できません。

group

<table> に group を指定しない場合、テーブルはデータの単一行に基づくため、テーブルに表示される行または列は 1 つのみとなります。ほとんどのテーブルでは複数の行や列が必要なので、各 <table> に group 属性を必ず指定することが妥当です。 このテーブルで <item> などの要素を 1 つ以上指定して、グループのどのデータをテーブルに表示するかを特定する必要があります。

一見すると、XData ReportDisplay の <table> で指定する group の値は、XData ReportDefinition の上位レベルにある <group> または <report> で指定した name の値と一致している必要があるように思われます。多くの場合、表面的にはそのとおりです。

しかし、実際のこの規則には興味深い側面があります。group 属性の値は、<table> の親である <report> または <group> を先頭とする暗黙の XPath 式の後に続く、部分的な XPath 式です。つまり、group および field の式は、<report> の階層の中でそれらの上位レベルにある他の group および field の式の後ろに連結されます。これを理解すると、グループやテーブルをより巧妙に設定して使用できるようになります。

Zen レポートで XPath 式を使用する方法の詳細は、“group、field、および XPath 式” のセクションを参照してください。

id オプションの識別子。この属性を設定しておくと、%GetComponentById(id) メソッドを呼び出すことにより、サーバ側コードでのこの要素の取得に使用できます。
layout

指定可能な layout の値は "auto"、"fixed"、および "none" です。 PDF 出力については、XEP レンダリング・ツールが "auto" と "fixed" の両方の形式をサポートしています。FOP では "fixed" のみをサポートしています。"none" は、生成されたスタイルシートへの、テーブルのレイアウト属性の値の出力を抑制することを意味します。

layout を "fixed" に設定した場合は、各列の幅を指定することが重要です。必要最低限の幅情報を指定するだけでも良好な結果がコードから得られますが、次のようにすることでさらに詳細に制御できます。

  • orient が "col" の場合は、テーブル・クラスの子それぞれについて、幅の属性を指定する必要があります。

  • orient が "row" の場合は、テーブルの子 1 つに幅を指定するだけですみます。ただし、テーブル内のその要素に <caption> 子要素または <summary> 子要素を指定してヘッダ列またはフッタ列を定義している場合は、これらの要素でも必ず幅を指定する必要があります。

oldSummary

<summary> は、テーブルのフッタを作成するために <table> の中に指定できる要素です。従来の Zen レポートと新しい Zen レポートでは、使用する <summary> の構文規約が異なります。"<summary>" セクションでは、それぞれの規約について以下のように説明しています。

  • oldSummary の既定値は True です。そのため、従来の Zen レポートでは <table> の定義を変更する必要はありません。oldSummary が True の場合の構文は、“<table> の oldSummary が True の場合” のセクションを参照してください。

  • インターシステムズでは、新しい構文の使用をお勧めします。この構文は、oldSummary を False に設定すると適用されます。新しい Zen レポートを使用する場合や、<summary> 要素を使用する Zen レポートからの出力に問題がある場合は、<table> の定義で oldSummary 属性を False に設定し、“<table> の oldSummary が False の場合” のセクションで説明する構文を使用してください。

この属性で基本となるデータ型は %ZEN.Datatype.booleanOpens in a new tab です。 “Zen レポート属性のデータ型” を参照してください。

ongetData テーブルのデータを指定するサーバ側コールバック・メソッドを指定します。“コールバック・メソッドを使用したテーブル作成” を参照してください。
orderby

<table> の並べ替えに使用する列を指定する文字列。<table> のデータを提供する XML の要素または属性について、コンマで区切られたリストで構成されます。orderby 文字列の最初の文字に ! (感嘆符) を使用した場合、Zen レポートでは、文字列の残りの部分がその文字列を指定する ObjectScript 式として解釈されます。

詳細は、このテーブルの後の “ReportDisplay の orderby 属性” を参照してください。レポートの ReportDefinition セクションでの orderby 使用に関する詳細は、“Zen レポートのデータの収集” の章の “ReportDefinition の orderby 属性” を参照してください。

orient テーブルに記述する個々の要素は、orient 属性の値に応じて、行または列として扱われます。orient が "row" である場合、テーブルの子要素はそれぞれ、新しい行に配置されます。同様に、orient が "col" である場合、子要素はそれぞれ新しい列に配置されます。指定できる値は、"row" および "col" です。既定では "col" です。
queryClass テーブルのデータを指定するクエリを含むクラスの名前を指定します。“クラス・クエリからのテーブル作成” を参照してください。
queryName テーブルのデータを指定するクエリの名前を指定します。“クラス・クエリからのテーブル作成” を参照してください。
removeEmpty

<table> の removeEmpty 属性を指定することで、レポートのこの <table> によって生成された XHTML 出力または PDF 出力に、このレポートの XML データ内で検出された空のノードが表示されるようにするかどうかを制御します。removeEmpty には以下のいずれかの値を設定できます。

  • 指定なし。<table> では、その親の removeEmpty の値が継承されます。この <table> の祖先の要素で removeEmpty の値が指定されていない場合、既定値の 0 がこの <table> に適用されます。

  • 0。空の要素および属性の値は、レポートのこの <table> 用に生成された XHTML または PDF に出力されます。

  • 1。空の要素および属性の値は、レポートのこの <table> 用に生成された XHTML または PDF に出力されません

    orient が "row" の場合、すべてのデータ値が空である行はすべて、出力から削除されます。orient が "col" の場合、すべてのデータ値が空である列はすべて、出力から削除されます。

    空のセルはあっても、行 (または列) 全体が空ではない場合、その行 (または列) は、空のセルが空白の状態で表示されます

removeEmpty を機能させるためには、group 属性を設定する必要があります。

この属性で基本となるデータ型は %ZEN.Datatype.booleanOpens in a new tab です。 “Zen レポート属性のデータ型” を参照してください。

rowAcrossPages

<table> の rowAcrossPages 属性は、複数行のコンテンツを持つテーブルの行を改ページで分割できるかどうかを制御します。既定値の “True“ では、行を分割できます。値が “False“ の場合、行が改ページによって分割される場合、この行を強制的に次のページに配置します。

この属性で基本となるデータ型は %ZEN.Datatype.booleanOpens in a new tab です。 “Zen レポート属性のデータ型” を参照してください。

selectmode

sql 属性で使用します。テーブルのデータを指定する SQL クエリの %SELECTMODE を指定します。可能な値は以下のとおりです。

  • 0 — Logical

  • 1 — ODBC

  • 2 — Display

詳細は、"Caché SQL の使用法" の “オブジェクト・インスタンスの作成” を参照してください。

sql

テーブルのデータを指定する SQL 文を指定します。“SQL を使用したテーブル作成” を参照してください。

writing-mode

生成された XSL の <fo:page-sequence> 要素に writing-mode 属性を追加します。writing-mode では、テキストを記述する方向に関連するページ・レイアウト機能を制御します。writing-mode 属性の詳細は、“書き込みモード” のセクションを参照してください。

可能な値は以下のとおりです。

  • “lr-tb” — 多くのインド・ヨーロッパ語のように、左から右、上から下に記述するテキストに対応します。

  • “rl-tb” — アラビア語やヘブライ語のように、右から左、上から下に記述するテキストに対応します。

  • “tb-rl” 中国語や日本語のように、上から下、右から左に記述するテキストに対応します。

  • “lr” — “lr-tb” と同じです。

  • “rl” — “rl-tb” と同じです。

  • “tb” — “tb-lr” と同じです。

  • “inherit” — 親要素から writing-mode の値を取得します。

すべての XSL-FO レンダラがすべての指定可能な値をサポートしているわけではありません。

以下のセクションでは、Zen レポートのテーブルについてより詳しく説明します。

ReportDisplay の orderby 属性

ReportDefinition ブロックの orderby と同様、orderby 属性により、<table> の項目の順序付け方法を指定するフィールドのコンマ区切りリストが提供されます。これは、テーブルのデータを提供するための生成された XML 内の既存順序をオーバーライドします。レポートの ReportDefinition セクションでの orderby 使用に関する詳細は、“Zen レポートのデータの収集” の章の“ReportDefinition の orderby 属性” を参照してください。

orderby リストの各項目は、生成される XML の属性または要素を指定する XPath となります。また、昇順と降順のどちらで並べ替えるかを指定することもできます。これを行うには、“\” (円記号)、および ASC または DESC のいずれかの文字列を orderby リストの XPath に追加します。既定の並べ替えは昇順となります。ASC や DESC の文字列では、大文字と小文字は区別されません。また、並べ替えるフィールドのデータ型を数値またはテキストとして指定することもできます。並べ替えの既定のデータ型はテキストです。これを行うには、“\” (円記号) を 1 つ追加して、文字列の数値またはテキストを orderby リストの XPath に追加します。

以下の例では、orderby にリテラル値を指定しています。この例では、フィールド "number" を使用して、テーブルの項目を数値データとして降順に並べ替えています。

<table orient="col" group="SortMe/item" orderby="number\DESC\number" >
  <item field="ID" width=".5in" caption="ID"/>
  <item field="number" caption="number"/>
</table>

orderby 文字列の最初の文字に ! (感嘆符) を使用した場合、Zen レポートでは、文字列の残りの部分がその値を指定する ObjectScript 式として解釈されます。以下の例では、Zen レポート・クラスのプロパティ SortBy を参照して、orderby 属性の値を指定しています。ReportDisplay ブロックでは、式を評価するための現在のクラスが、式を含むタグのクラスとなります。この例では、orderby の評価コンテキストは %ZEN.Report.Display.tableOpens in a new tab となります。これにより、ReportDefinition で行うように、二重ドット構文を使用して、レポート・クラスのプロパティを参照することはできません。Zen レポートの特殊変数 %report を使用してレポートを参照したり、ドット構文を使用してプロパティを参照したりすることができます。また、“Zen レポートでの実行時式の使用法” のセクションの説明に従って、式を指定することもできます。

/// Syntax appropriate for sorting via XSLT in ReportDisplay 
Property SortBy2 As %String(ZENURL = "SortBy") 
  [ InitialExpression = "number\ASC" ];

<table orient="col" group="SortMe/item" orderby="!%report.SortBy" >
  <item field="ID" width=".5in" caption="ID"/>
  <item field="number" caption="number"/>
</table>

PDF 出力における <table> の中央揃え

以下の例では、左右に 1.25 インチのマージンがある 8.5 インチのページに 4 インチのテーブルを中央揃えで配置しています。<div> style 属性の “start-indent” プロパティは、<table> width (4 インチ) と使用可能なページ幅 (6 インチ) を使用して、テーブルをページに配置します。“start-indent” は継承されるので、テーブルの各 <item> には 0 を設定する必要があります。

<div width="4in"
       style="start-indent:((6in - 4in) div 2)">
 <table style="border:1pt solid black" width="4in" >
  <item field="NAME"
        style="start-indent:0;text-align:left"/>
 </table>
</div>

<table> の要素の表示

<table> には、<item>、<block>、<img> などの Zen レポートのあらゆる表示要素を記述でき、すべてのタイプのグラフを配置できます。 テーブルに配置できるすべての表示要素の完全なリストは、“Zen レポートのデータの表示” の章の冒頭のリストを参照してください。

テーブルに配置した表示要素では、標準の属性のほかに以下の属性をサポートできます。

属性 説明
foblock

この属性を使用すると、現在の項目のブロックを XSL-FO 出力に表示するときに適用するスタイル設定の情報を詳しく指定できます。以下はその例です。

foblock="orphans='1'"

XHTML 出力では、foblock 属性は無視されます。

block-container-property

簡潔なオプションについては、truncate または too-long-text の説明を参照してください。

PDF 出力については、include-block-container が True の場合、目的のエントリが属するブロックのフォーマット命令を block-container-property で指定します。以下の命令によって、オーバーフローしたテキストは表示されなくなります。

block-container-property="overflow='hidden' width='.2in'"

colcount

クロス集計テーブルの 1 つの項目で集計する列の数を指定します。colcount には、リテラル値を指定できるほか、入力から計算した値が割り当てられるようにすることもできます。

colcount 属性は、クロス集計テーブルに配置する項目ごとに指定する必要があります。他のタイプのテーブルでは、この属性は無視されます。例については、“タイプ 1 クロス集計テーブルの作成” を参照してください。

grouppath

このクロス集計テーブルの項目の値を提供するグループを特定します。

grouppath 属性は、複数の列や行が存在するクロス集計テーブルに配置する項目ごとに指定する必要があります。クロス集計テーブルにある列または行が 1 つのみの場合は、この属性を指定する必要はありません。また、他のタイプのテーブルでは、この属性は無視されます。

grouppath 属性の目的は、クロス集計テーブルの列に対するラベルの割り当てや列数のカウントを入力に基づいて適切に実行できるようにすることです。例については、“タイプ 1 クロス集計テーブルの作成” を参照してください。

include-block-container

簡潔なオプションについては、truncate または too-long-text の説明を参照してください。

(PDF 出力の場合のみ) 長い文字列のデータが存在する場合、XEP では割り当てられた領域に収まるようにデータが圧縮されます。FOP では、データは隣のテーブル列など、現在の位置に続く領域にオーバーフローし、その領域に元々存在するデータの上に重ねて出力されます。

FOP のオーバーフローした部分を切り捨てて見やすくするには、<table> エントリがブロックに属するように設定し、そのブロックの属性を目的の動作が得られるように設定します。つまり、以下のようになります。

include-block-container="true"

True に設定した場合、ブロックに属するエントリとなり、block-container-property で指定したフォーマットが使用されます。False に設定した場合、エントリに対して特別なフォーマット設定は適用されません。

この属性で基本となるデータ型は %ZEN.Datatype.booleanOpens in a new tab です。 “Zen レポート属性のデータ型” を参照してください。

too-long-text

(PDF 出力の場合のみ) too-long-text 属性は以下のように設定できます。

  • ”none” (既定) — テキストの折り返しや削除は行われません。この場合の動作は、レンダリング・エンジン (FOP または XEP) によって異なります。FOP では、オーバーフローしたテキストはテーブルの隣のセル (複数のセルの場合もあります) にはみ出します。XEP では、領域に収まるようにテキストが縮小されます。これによって、テキストが読みにくくなる可能性があります。

  • ”truncate" — オーバーフローしたテキストは切り捨てられます。truncation-width を指定した場合は、その値が適用されます。

  • ”wrap” — テキストの最後の文字を除く各文字の後ろに長さゼロの文字が挿入されます。これにより、レンダリング・エンジンでテキストを折り返すことができます。

  • ”unset" — 現在の要素は値を親から継承できます。

truncate

(PDF 出力の場合のみ) truncate を True に設定すると、オーバーフローしたテキストはすべて切り捨てられ、表示されなくなります。これで、FOP によるレンダリングで発生する問題を簡単に解消できます。テキストを単に切り捨てるのであれば、他の属性を設定する必要はありません。

この属性で基本となるデータ型は %ZEN.Datatype.booleanOpens in a new tab です。 “Zen レポート属性のデータ型” を参照してください。

too-long-text の説明も参照してください。

truncation-height (PDF 出力の場合のみ) truncate を True に設定した場合や、too-long-text を ”truncate" に設定した場合に、切り捨てずにテキスト領域として残す高さを指定します。既定値は、テキストが記述されている列の高さです。
truncation-width (PDF 出力の場合のみ) truncate を True に設定した場合や、too-long-text を ”truncate" に設定した場合に、切り捨てずにテキスト領域として残す幅を指定します。既定値は、テキストが記述されている列の幅です。

空白要素をテーブルに追加して、PDF 形式の空白として表示するには、改行を禁止するスペース文字である &#160; を使用する必要があります。以下はコードの例です。

<table orient="row" width="3.45in" class='table1'>
   <item value="Sales by Sales Rep" width="2in">
    <caption value="Title:" width="1.35in"/>
   </item> 
   <item field="@month" caption="Month:"/>
   <item field="@author" caption="Author:"/>
   <item value="&#160;"/>
   <item field="@runBy" caption="Prepared By:"/>
   <item field="@runTime" caption="Time:"/>
</table>

以下の PDF 出力を生成します。

generated description: nbsp

<table> のスタイルでテーブルのセルに境界線を設定している場合、値が空のフィールドでは表示セルの境界線が表示されなくなることがあります。この場合、境界線が表示されているセルと表示されていないセルが存在することになり、テーブルの外観に不統一が生じます。この問題を解決するには、テーブルの CSS 属性である border-collapse の値を collapse に設定して、<table> のスタイルを調整します。これを実行する方法の 1 つとして、レポートの <document> 要素の中で <class> 要素を定義した後、<table> の class 属性を使用して <table> に目的のスタイルを適用する方法があります。以下はその例です。

<class name="table.main">
  <att name="border-collapse" value="collapse" />
</class>

次に以下を指定します。

<table class="main"> 
  <!-- Contents of table here -->
</table>

class の詳細は、この章の冒頭の “レポートの表示属性” のセクションを参照してください。

<caption>

テーブルの行または列にキャプションを追加するには、テーブル内の要素に <caption> 要素を記述します。<caption> 要素は <item> と同様に機能し、同じ属性を持ちます。属性の詳細は、"<item>" のセクションを参照してください。

<caption> を使用してテーブルの列にヘッダを設定するには、その列の <item> 要素の中で <caption> 要素を指定します。<caption> は、ヘッダを設定する要素の子として指定する必要があります。そのヘッダのテキストは、<caption> 要素の値で指定します。<summary> も参照してください。

入れ子になったテーブルでは、内側のテーブルに <caption> 要素を配置できますが、その <caption> は表示の面でテーブルにとって特別な意味は持ちません。実際には、外側のテーブルの中で、内側のテーブルにキャプションが指定されていることを示します。

<caption> では、改行を使用してテキストをフォーマットすることもできます。以下の例では、<br/> を使用して <item> の <caption> に改行を挿入しています。

<item field="EAST" formatNumber='###,###,###,###,###,###,###'>  
  <caption> 
    <inline> 
      EAST 
    </inline> 
    <br/> 
    <inline> 
      WEST 
    </inline> 
  </caption>
</item>

<item>caption 属性を指定し、<caption> 要素を指定しない場合には、<table> では <item> の列または行ヘッダとして caption 属性が使用されます。displayCaption 属性を True に設定した場合も、同様にキャプション属性のテキストが <item> の出力の接頭語になります。

<item> に対して caption 属性と <caption> 要素の両方を指定した場合、そのテーブルでは行または列ヘッダとして <caption> 要素が使用されます。displayCaption 属性が True の場合も、同様に caption 属性のテキストが <item> の出力の接頭語になります。これによって、ヘッダと接頭語に異なるテキストを指定できるようになります。displayCaption が False の場合、caption 属性のコンテンツは無視されます。

生成された XML からキャプション・テキストを動的に取得している場合、キャプションは、テーブルのグループ・コンテキストが有効になる前にテーブルのヘッダ領域に適用されることに注意してください。このため、テーブルを含む要素に関して XPath 仕様を指定する必要があります。例えば、生成される XML にこの構造がある場合、以下のようになります。

<City City="Albany">
  <Person Column1="Name" Column2="Age">
    <Name>Gaboriault,Frances E.</Name>
    <Age>4</Age>
  </Person>
</City>

以下のサンプル・コードに示すように、キャプションとして Column1 の値を使用するために、"Person/@Column1" などの XPath を使用する必要があります。

<group name="City" pagebreak="true">
  <table group="Person" orient="col" 
   class="table4" altcolor="#DFDFFF">
    <item field="Name">
      <caption field="Person/@Column1"/>
    </item>
    <item field="Age">
      <caption field="Person/@Column2"/>
    </item>
  </table>
</group>

<summary>

<summary> 要素は、行または列にヘッダではなくフッタを作成する点を除き、<caption> に似ています。<summary> 要素には、<item> と同じ属性があります。属性の詳細は、"<item>" のセクションを参照してください。

従来の Zen レポートと新しい Zen レポートでは、使用する <summary> の構文規約が異なります。新しい構文の使用をお勧めしますが、既存の Zen レポートとの下位互換性を確保するために、既定では古い構文が使用されます。それぞれの場合の <summary> 要素の構文について以下で説明します。

  • 新しい Zen レポートを使用する場合や、<summary> を使用している古い Zen レポートの出力に問題がある場合、<table> 定義に oldSummary="false" を追加し、“<table> の oldSummary が False の場合” のセクションで説明する構文を使用してください。

  • 古い Zen レポートを使用する場合は、<summary> の従来の構文について “<table> の oldSummary が True の場合” のセクションを参照してください。<table> の定義に oldSummary="true" を追加すると必ず従来の規約が使用されますが、oldSummary の既定値は True なので必ずしも明示的に指定する必要はありません。

<table> の oldSummary が False の場合

ここでは、以下の <table> 例を取り上げます。この例では、テーブルにある各列の最後にその合計が表示されます。このテーブルに適用する 5 つの <summary> 要素すべてを、<table> 定義にある最後の <item> 要素の中で指定しています。Zen では、<table> の <item> 要素の中で <summary> 要素が上から下に向かって検索されます。<summary> 要素が見つかると、それらの要素のコンテンツは、フッタのテキストとして左から右の順で出力先のテーブル列に割り当てられます。最初の <summary> は最初の列、2 番目の <summary> は 2 番目の列にそれぞれ割り当てられ、以降同様の割り当てになります。この例で、最初のいくつかの <summary> 要素の属性に空の値を指定しているのは、これらに該当するフッタにはテキストを表示せず、色のみを表示するためです。テキストが生成されるのは最後の <summary> のみです。XData ReportDefinition で生成した XML データの値を field 属性を使用して参照し、目的のテキストを生成しています。

このルールは、どの <item> で <summary> 要素を指定しても適用されます。<summary> はフッタを指定する要素なので、この例のように <table> の最後の <item> の中でまとめて指定することが妥当です。

<table orient="col" group="record" width="6in" class="table4" 
 altcolor="#DFDFFF" oldSummary="false" >
 <item special="number" width=".45in" style="color: darkblue;">
  <caption value="#" />
 </item>
 <item field="@id" width=".7in" 
  style="border:none;padding-right:4px">
  <caption value="Sale ID"/>
 </item>
 <item field="date" width="1.5in" style="padding-left: 4px;">
  <caption value="Date"/>
 </item>
 <item field="customer" width="2.65in">
  <caption value="Customer"/>
 </item>
 <item caption="Amount" width=".7in" 
  style="text-align:right;" field="@number" 
  formatNumber='###,###,##0.00;(#)'>
  <caption value="Amount"/>
  <summary 
   style="font-style:italic;text-align:right;background-color:yellow" 
   value=" "/>
  <summary 
   style="font-style:italic;text-align:right;background-color:purple" 
   value=" "/>
  <summary 
   style="font-style:italic;text-align:right;background-color:orange" 
   value=" "/>
  <summary 
   style="font-style:italic;text-align:right;background-color:blue" 
             value=" "/>
  <summary field="subtotal" 
   style="font-weight:bold;text-align:right;background-color:red" 
   formatNumber='###,###,##0.00;(#)'/>
  </item>
</table>

以下の構文も同様に有効です。ここでは <item> ごとに <caption> と <summary> をまとめて指定しているので、わかりやすさを優先してこちらを使用してもかまいません。

<table orient="col" group="record" width="6in" class="table4" 
 altcolor="#DFDFFF" oldSummary="false" >
 <item special="number" width=".45in" style="color: darkblue;">
  <caption value="#" />
  <summary 
   style="font-style:italic;text-align:right;background-color:yellow" 
   value=" "/>
 </item>
 <item field="@id" width=".7in" style="border:none;padding-right:4px">
  <caption value="Sale ID"/>
  <summary 
   style="font-style:italic;text-align:right;background-color:purple" 
   value=" "/>
 </item>
 <item field="date" width="1.5in" style="padding-left: 4px;">
  <caption value="Date"/>
  <summary 
   style="font-style:italic;text-align:right;background-color:orange" 
   value=" "/>
 </item>
 <item field="customer" width="2.65in">
  <caption value="Customer"/>
  <summary 
   style="font-style:italic;text-align:right;background-color:blue" 
   value=" "/>
 </item>
 <item caption="Amount" width=".7in" 
  style="text-align:right;" field="@number" 
  formatNumber='###,###,##0.00;(#)'>
  <caption value="Amount"/>
  <summary field="subtotal" 
   style="font-weight:bold;text-align:right;background-color:red" 
   formatNumber='###,###,##0.00;(#)'/>
 </item>
</table>

<table> の oldSummary が True の場合

以下の XData ReportDisplay ブロックを例として考えてみます。この例では、Average 列、Max 列、および Count 列には要約が出力され、表示されますが、Name 列には表示されません。必要な 3 つの <summary> 要素のすべてが、最初の <summary> 要素 (つまり Average) に適用される <item> 要素内に左から右に順に記述されています。

<report xmlns="http://www.intersystems.com/zen/report/display"
        name="SummaryReport">
  <body>
  <table group="SalesByState">
    <item caption="Name" field="@state1" width="1in"/>
    <item field="average" formatNumber="######.##" width="4in">
       <summary value="AVERAGE" />
       <summary value="MAX" />
       <summary value="COUNT" />
    </item>
    <item field="max" formatNumber="#######.##" width="2in"/>
    <item field="count" width="2in"/>
</table>
</body>
</report>

<table> での複雑なヘッダの使用

複数の行や列にわたる複雑なヘッダをサポートするために、Zen レポートには <table> コンテナの中で指定する以下の要素が用意されています。これらの要素を使用すると、その要素と同じ名前の HTML 要素と同様の出力が XHTML や PDF の出力フォーマットで得られます。

Note:

Zen レポートの <table> でこれらの要素を使用する場合、定義が競合する <caption> 要素や <summary> 要素は使用できません。

  • <thead> — ヘッダ定義のコンテナ

    • <tr> — <thead> または <tfoot> の中にある行のコンテナ

      • <th> — <thead> 内の <tr> 内にあるセルのコンテナ

  • <tfoot> — フッタ定義のコンテナ

    • <tr> — <thead> または <tfoot> の中にある行のコンテナ

      • <td> — <tfoot> 内の <tr> 内にあるセルのコンテナ

<th> 要素と <td> 要素は、<th> がヘッダ、<td> がフッタに表示される点を除いて機能は類似しています。それぞれの <th> または <td> には、ヘッダやフッタに表示するテキストを指定する <item> 要素を記述します。以下は、ヘッダを定義した <table> の例です。

<table group="SaleRep" orient="col" width="6in" class="table4" 
       altcolor="#DFDFFF" orderby="@state" > 
  <thead style="color:red"> 
    <tr> 
      <th> 
        <item value="# " width=".45in"/> 
      </th> 
      <th> 
        <item value="name" width="2.65in"/> 
      </th> 
      <th> 
        <item value="state" width="2.65in"/> 
      </th> 
    </tr> 
  </thead> 
  <item special="number" width=".45in" style="color: darkblue;" /> 
  <item field="@name" width="2.65in" /> 
  <item field="@state" width="2.65in" /> 
</table> 

ヘッダとフッタの両方を定義する場合、<tfoot> コンテナを記述する位置は、<thead> コンテナの直後で、<table> の本体を指定する <item> 要素の前とする必要があります。以下はより複雑な例で、2 行に及ぶヘッダのほかに、フッタも定義しています。

ここで、<td> の定義と <th> の定義では colspan を使用しています。<td> と <th> では、colspan 属性と rowspan 属性がサポートされています。各属性の値には数字が指定できます。これにより、その親の <td> または <th> のコンテンツが、ヘッダまたはフッタの指定した数の列または行にまたがって適用されます。これらの各属性によって、その属性と同じ名前の HTML 属性と同様の出力が XHTML や PDF の出力フォーマットで得られます。

<table group="SaleRep" orient="col" width="6in" class="table4" 
       altcolor="#DFDFFF" orderby="@state" > 
  <thead style="color:red"> 
    <tr style="color:blue"> 
      <th colspan="2"> 
        <item value="identity"/> 
      </th> 
      <th> 
        <item value="loc"/> 
      </th> 
    </tr> 
    <tr> 
      <th> 
        <item value="# " width=".45in"/> 
      </th> 
      <th> 
        <item value="name" width="2.65in"/> 
      </th> 
      <th> 
        <item value="state" width="2.65in"/> 
      </th> 
    </tr> 
  </thead> 
  <tfoot> 
    <tr> 
      <td colspan="3"> 
        <item value="the end" /> 
      </td> 
    </tr> 
  </tfoot> 
  <item special="number" width=".45in" style="color: darkblue;" /> 
  <item field="@name" width="2.65in" /> 
  <item field="@state" width="2.65in" /> 
</table>

<table> での <table> の埋め込み

XData ReportDisplay の <table> の中には <table> を記述できます。これらは、埋め込みテーブルと呼ばれます。テーブルの中で通常は <item> などの要素を記述する位置に <table> 要素を使用するだけで、この操作が可能です。例については、次のセクションの “タイプ 1 クロス集計テーブルの作成” を参照してください。テーブルの埋め込みには、クロス集計テーブルを使用する必要はありません。表示レイアウトで必要であれば、どこにでもテーブルを埋め込むことができます。

Zen レポートのクロス集計テーブル

クロス集計テーブルは、水平方向のヘッダを表示するだけでなく、最も左側の列を垂直方向のヘッダとして使用するテーブルです。このテーブルでは、ヘッダの各ペアの交差するセルに、両方のヘッダに関連するデータが表示されます。

クロス集計テーブルはピボット・テーブルとも呼ばれますが、クロス集計テーブルとピボット・テーブルを区別して考える場合もあります。その場合は、クロス集計テーブルでは集約したデータのみを扱い、ピボット・テーブルでは集約していないデータも扱うことができることを相違点としています。また、行に基づいて集約するテーブルと列に基づいて集約するテーブルという考え方で区別することもできます。このドキュメントでは、クロス集計テーブルのようなテーブルをすべて指します。

Zen レポートでは、2 種類の方法でクロス集計テーブルが実装され、タイプ 1 クロス集計テーブルとタイプ 2 クロス集計テーブルとして判別されます。タイプ 1 テーブルは、Zen レポートで実装されたクロス集計テーブルの最初のタイプで、引き続きサポートされています。新規開発では、タイプ 2 クロス集計テーブルを使用することをお勧めします。レイアウトの管理が容易で、クロス集計テーブル作成上の問題に対するより一般的な解決策が用意されているからです。

タイプ 2 クロス集計テーブルの作成

最近実装されたタイプの Zen レポート・クロス集計テーブルでは、テーブルで特定の行と列が交差する場所にデータ値を配置できます。また、ヘッダとフッタのサポートが強化されています。このテーブルを作成する際は、<item> 要素の以下の属性を一緒に使用します。

属性 説明
crosstabDataGroup

crosstabRowGroup により確立したコンテキストでクロス集計テーブルのデータを検索する XPath 式。

crosstabFooterDataField クロス集計テーブルのフッタ・セルに配置するデータを検索する XPath 式。この式は、crosstabFooterGroup のコンテキストで評価されます。指定しないと、テーブルは crosstabFooterGroup の値を使用します。
crosstabFooterFormatNumber

NULL 以外の値の場合、フッタのデータをフォーマット処理する方法を指定します。

crosstabFooterGroup crosstabFooterDataField を評価するためのコンテキストを指定する XPath 式。crosstabFooterDataField を指定しないと、crosstabFooterGroup によってクロス集計テーブルのフッタ・セルに配置するデータが検索されます。
crosstabHeaderDataField クロス集計テーブルのヘッダ・セルに配置するデータを検索する XPath 式。この式は、crosstabHeaderGroup のコンテキストで評価されます。指定しないと、テーブルは crosstabHeaderGroup の値を使用します。
crosstabHeaderGroup crosstabHeaderDataField を評価するためのコンテキストを指定する XPath 式。crosstabHeaderDataField を指定しないと、crosstabHeaderGroup によってクロス集計テーブルのヘッダ・セルに配置するデータが検索されます。
crosstabHeaderGroupLabels crosstabHeaderLabelDataField を評価するためのコンテキストを指定する XPath 式。crosstabHeaderLabelDataField を指定しないと、クロス集計テーブルのヘッダ・セルでラベルとして使用する値は、crosstabHeaderGroupLabels によって検索されます。
crosstabHeaderGroupTooLongText 使用可能なスペースよりもテキストが長い場合のテキストの処理を指定します。可能な値は以下のとおりです。
  • ”none" (既定) — テキストの折り返しや削除は行われません。この場合の動作は、レンダリング・エンジン (FOP または XEP) によって異なります。FOP では、オーバーフローしたテキストはテーブルの隣のセル (複数のセルの場合もあります) にはみ出します。XEP では、領域に収まるようにテキストが縮小されます。これによって、テキストが読みにくくなる可能性があります。

  • ”truncate" — オーバーフローしたテキストは切り捨てられます。truncation-width を指定した場合は、その値が適用されます。

  • ”wrap” — テキストの最後の文字を除く各文字の後ろに長さゼロの文字が挿入されます。これにより、レンダリング・エンジンでテキストを折り返すことができます。

  • ”unset" — 現在の要素は値を親から継承できます。

crosstabHeaderLabelDataField クロス集計テーブルのヘッダ・セルでラベルとして使用する値を検索する XPath 式。この式は、crosstabHeaderGroupLabels のコンテキストで評価されます。指定しないと、テーブルは crosstabHeaderGroupLabels の値を使用します。
crosstabHeaderMatchField

crosstabHeaderGroup により提供された値に一致するデータを指定する XPath 式。

crosstabRowGroup

行データを検索する XPath 式。crosstabDataGroup を評価するためのコンテキストを指定します。

これらの各属性は、レポートに対して生成された XML でデータを検索する XPath 式を指定します。crosstabHeaderGroup は、テーブルの列ヘッダの値を指定します。crosstabRowGroup は、テーブルの行を指定します。

以下の例は、これらの属性を使用して、クロス集計テーブルを作成する方法を示しています。例では、SAMPLES データベース内の Cinema アプリケーションからデータを使用します。XData ReportDefinition ブロックのレポート定義を以下に示します。

<report xmlns="http://www.intersystems.com/zen/report/definition"
    name="MyReport" runonce="true">
  <group name="Beginning" 
 sql="select ID,Title,Category->CategoryName as Category,Rating 
         From Cinema.Film order by Category->CategoryName" >
    <group name='CategoryGrp' breakOnField="Category" >
      <attribute name="Category" field="Category"/>
      <group name="Film" breakOnField="ID">
        <attribute name="ID" field="ID"/>
        <attribute name="Title" field="Title" />
        <attribute name='FilmRating' field='Rating' />
      </group>
    </group>
  </group>
  <group name="ListRate" 
    sql="select DISTINCT Rating From Cinema.Film order by Rating" >
    <element name='Rating' field="Rating" />
  </group>
</report>

以下の構造がある XML を生成します。

generated description: checkboxtable xml

XData ReportDisplay ブロックのレポート定義を以下に示します。

<report xmlns="http://www.intersystems.com/zen/report/display"
  name="MyReport">
  <body>
    <group name='Beginning/CategoryGrp' pagebreak="true">
      <table orient='row' width="50%">
        <item field='@Category' 
         style='text-align:center;font-weight:bold;font-size:16pt' />
      </table>
      <table class="table2" group="Film" orient="col" >
        <item field="@Title" caption="Title"  width="50%"/>
        <!-- The crosstabRowGroup uses the variable "$prevmatch"
          to allow the absolute XPath expression
          to find the group's current iteration. -->
        <item 
         crosstabHeaderGroup="/MyReport/ListRate/Rating" 
         crosstabRowGroup=
          '/MyReport/Beginning/CategoryGrp[$prevmatch]/Film'  
         crosstabDataGroup="self::Film"  
         crosstabHeaderMatchField="@FilmRating"
         field="&quot;X&quot;"
         style='text-align:center;font-weight:normal' 
        />
      </table>
    </group>
  </body>
</report>

以下の構造があるレポートを生成します。

generated description: checkboxtable html

この図では、映画カテゴリが 1 つのみの出力を示しています。フル・レポートでは、同様のテーブルがカテゴリごとに生成されます。

テーブルにある最初の項目を以下に示します。

<item field="@Title" caption="Title"  width="50%"/>

上記は、映画タイトルの列をテーブルの左側に作成します。2 番目の項目では専用の属性を使用して、列ヘッダ値を生成し、値をテーブルのセルに格納します。

以下の図では、クロス集計の <item> 要素にある属性が生成 XML のノードを参照する様子を示しています。crosstabRowGroupcrosstabHeaderGroup では絶対ロケーション・パスが必要なことに注意してください。絶対パスを使用することは、エンクロージング・グループにより作成されたコンテキストに依存できないことを意味します。このレポートでは、特殊変数 $prevmatch を使用して、レポートが処理しているカテゴリを追跡しています。

変数 $prevmatch には、レポートがテーブル・データの入力を開始したときに一致した親グループ内のノードの位置が格納されます。これより深い入れ子のレベルを処理する場合は、追加の変数を利用できます。このような変数には、$level0$level1$level2 という名前が、レポートで使用される最も深い入れ子のレベルまで同様の形式で付けられます。前述の例に示した ReportDisplay セクションでは、$level1$prevmatch とまったく同様に動作します。

crosstabDataGroup は、特定の処理対象データ・ノードを選択し、crosstabHeaderMatchField は、crosstabHeaderGroup で指定した列の 1 つに現在のノードが一致するかどうかを判断するためレポートで使用するデータ・ノードのフィールドを指定します。

generated description: checkboxtable nodes

以下の図は、crosstabHeaderGroupcrosstabHeaderMatchField との間で値が一致すると適切なテーブル・セルに値が設定される様子を示しています。この場合、値は ‘X’ 文字になります。これは、<item> 内の field の値として指定されます。@Title などの XPath 式も使用できます。これによって、要素や属性からデータを選択します。クロス集計テーブル内で、field 属性は、<table> のコンテキストではなく、<item> の crosstabDataGroup に関して解釈されます。

generated description: checkboxtable match

次の例では、より複雑なレポートが示されています。例では、SAMPLES データベース内の ZENApp アプリケーションのデータを使用します。以下のサンプル・コードでは、XData ReportDefinition ブロックのレポート定義を示しています。

<report xmlns="http://www.intersystems.com/zen/report/definition"
 name="Test" runonce="true">
 <group name="rowdata" 
  sql="select salesRep, month(saleDate) as saleMonth, num
  from ZENApp_Report.Invoice order by salesRep, month(saleDate) ">
  <group name="SalesRep" breakOnField="SalesRep" >
   <attribute name="SalesRep" field="SalesRep"/>
   <group name="row" breakOnField="saleMonth">
    <attribute name="saleMonth" field="saleMonth"/>
    <element name="num" field="num"/>
    <aggregate name="month_sum" type="SUM" field="num"/>
   </group>
   <aggregate name="row_sum" type="SUM" field="num"/>
  </group> 
  <aggregate name="total_sum" type="SUM" field="num"/>
 </group>
 <group name="coldata" 
  sql="select month(saleDate) as saleMonth, num
  from ZENApp_Report.Invoice order by month(saleDate) ">
  <group name="col" breakOnField="saleMonth">
   <attribute name="saleMonth" field="saleMonth"/>
   <attribute name="name" 
    field="saleMonth"
    expression=
    '$piece(##class(%SYS.NLS.Format).GetFormatItem("MonthName")," ",%val+1)'/>
   <aggregate name="col_sum" type="SUM" field="num"/>
  </group>
 </group> 
</report>

以下のサンプル・コードでは、XData ReportDisplay ブロックで定義されているレポートを示しています。

<report xmlns="http://www.intersystems.com/zen/report/display"
 name="Test">
 <body>
  <table group="rowdata/SalesRep" class="table2"  
   oldSummary="false" >
   <item field="@SalesRep" caption="SalesRep">
    <summary value="Total" />
   </item>
   <item crosstabHeaderGroup="/Test/coldata/col" 
    crosstabHeaderDataField="@saleMonth" 
    crosstabHeaderGroupLabels="/Test/coldata/col"
    crosstabHeaderLabelDataField="@name" 

    crosstabRowGroup="/Test/rowdata/SalesRep" 
    crosstabDataGroup="row" 
    crosstabHeaderMatchField="@saleMonth"  
    field='month_sum'

    crosstabFooterGroup="/Test/coldata/col/"
    crosstabFooterDataField="col_sum" >
   </item>
   <item field="row_sum" caption="Total" >
    <summary field="rowdata/total_sum" />
   </item>
  </table>
 </body>
</report>

crosstabHeaderGroupLabels 属性は、この例では冗長です。これが指定されていない場合、レポートは crosstabHeaderGroup の値を使用します。この値は、この例では同じになります。crosstabHeaderGroupLabels が存在していると、ヘッダ・ラベルの XML で別の場所を使用できます。

以下の図は、ReportDefinition ブロックで生成される XML を示します。ReportDisplay にある項目のどの属性が、XML にあるどのデータを参照しているかも示します。crosstabDataGroupcrosstabHeaderMatchField は、crosstabRowGroup に関して評価されることに注意してください。

この例では、crosstabHeaderGroupcrosstabHeaderGroupLabels、および crosstabFooterGroup はすべて、XML で同じノード ("/Test/coldata/col") を指しています。異なるデータ構造を持つレポートでは、これらの 3 つの属性は異なる値を持つことができます。これによって、クロス集計テーブルをさらに柔軟に作成することが可能になります。

generated description: crosstabaggsxml

フィールドを識別する項目属性が、XML のノードへの絶対 XPath を渡す別の属性のコンテキストで評価されます。レポートでは、コンテキスト属性とフィールド属性を連結することで、フィールドに対する XPath を構築します。以下のリストでこの例における 1 つの属性セットのこれらのリレーションシップを示します。

  • crosstabHeaderGroup の値 : "/Test/coldata/col"

  • crosstabHeaderDataField の値 : "@saleMonth"

  • crosstabHeaderDataField へのパス : "/Test/coldata/col/@saleMonth"

次の図では、項目属性で参照されるデータが、結果のクロス集計テーブルでどのように表示されるかを示しています。crosstabHeaderLabelDataField を使用して、crosstabHeaderDataField で渡された数字で表現された販売月 (saleMonth) を、月の名前で置き換えています。crosstabFooterGroup により、テーブル下部に表示される列の合計行が指定されます。field プロパティは、ここでも、前の例の場合と同じように機能します。crosstabHeaderMatchField に基づいて、営業担当者と月の交差位置にある各セルの値が渡されます。

またこれは、行ヘッダと行の合計を渡す追加の <item> 要素と <summary> 要素も示しています。これらは、item の caption プロパティにより列ヘッダを渡し、<summary> 要素によりフッタ値を渡します。

generated description: crosstabaggstable

XSLTVERSION = 1.0 の場合、$prevmatch は適切に更新されるとは限りません。これによって、出力が適切でない場合があります。特に、フッタを使用するクロス集計テーブルの場合です。この問題を回避するには、XSLTVERSION = 2.0 を設定します。

タイプ 1 クロス集計テーブルの作成

このセクションでは、Zen レポートで実装されたクロス集計テーブルの最初のタイプについて説明します。

クロス集計テーブルの概要

ここでは、ある保険会社が、保険契約を結んだ建物に関する情報を保有しているとします。その保険会社のデータベースには、建物ごとに以下のフィールドが存在します。

  • Policy — 識別番号

  • Start — 保険証書の発効日

  • Expiry — 保険証書の有効期限

  • Location — 所在地タイプ (地方 (Rural) または都市 (Urban))

  • State — 所在地の州または国内の地域

  • Region — 国内で複数の州にまたがる地域

  • InsuredValue — 建物の保険価額

  • Construction — 建築物のタイプ : 耐火 (Fire Resistant) 、木造 (Frame)、れんが積み (Masonry)、または金属外壁 (Metal Clad)。

  • BusType — 建物の目的 : 接客、オフィス、農業、アパートなど。

  • Flood — 所在地の洪水地域指定の有無

上記のデータを示すレポート用の項目テーブルは、以下の例のようになります。この例では、5 つのエントリを示しています。このレポートの値に対して加工や集約は一切行われていません。各値は、データベースから取得したままの値です。

実際のポートフォリオには、同様のエントリが数百件から数千件存在している可能性があります。そのようなテーブルからビジネスの状況を効率的に評価することは困難です。なによりも、調べるには扱うデータの量が多すぎます。また、ビジネスに関するどのような情報を求めるかにもよりますが、分析に関係のないフィールドも数多く混じっています。

すべてのデータ・フィールドを表示した単純な明細テーブル
generated description: line item table

ソース・データに基づいた効率的な分析を目指すには、このデータから選択したフィールドを集約して、以下のようなクロス集計テーブルを作成します。テーブルの各セルには、ポートフォリオにあるすべての建物について、Location タイプ別と Construction タイプ別の組み合わせで InsuredValue の合計が示されています。また右側には、それぞれの Construction タイプの InsuredValue の合計を示す列もあります。このテーブルを検討した研究部門は、都市エリアの木造建築で最も火災が発生しやすいと判断できます。この図の集約データから、ポートフォリオ全体の価額やリスクの分布が明確にわかります。

境界線がないクロス集計テーブル
generated description: crosstab borders no

以下の 2 つのコード例は、上の図で示したクロス集計テーブルの生成方法を示しています。最初の例は、XData ReportDefinition ブロックです。このブロックの内容は以下のとおりです。

  1. 該当する 3 つのフィールド (Construction、Location、および InsuredValue) を、データベースから取得します。

  2. すべての値を Construction ごとにグループ化します。

  3. Construction タイプ (Fire Resist、Frame、Masonry、または Metal Clad) を記録します。

  4. Construction の値を Location ごとにグループ化します。

  5. Location タイプ (Rural または Urban) を記録します。

  6. Construction タイプと Location タイプの組み合わせごとに InsuredValue を合計して、Rural 列および Urban 列に配置する値を生成します。これらの値を、各 Location グループの Total という名前の集約に格納します。

  7. Location とは無関係に Construction タイプごとに InsuredValue を合計して、“Total“ という名前の出力列に配置する値を生成します。この値を、各 Construction グループの TotalConstruction という名前の集約に格納します。

クロス集計テーブルに使用する XData ReportDefinition の例
generated description: crosstab report definition

その次の例は、このクロス集計テーブルの例で使用する XData ReportDisplay ブロックです。このブロックの機能は以下のとおりです。

  1. 埋め込みテーブルの定義の各 <table> に適用するスタイルを定義します。このスタイル (table.table) には境界線がないため、表示内容を構成する 5 つの埋め込みテーブルは、出力では 1 つのテーブルのように見えます。

  2. 最上位の <table> コンテナを列方向に定義します。

  3. 最上位の <table> の最初の列を作成するために、列方向に設定した <table> を 1 つ持つ <div> を定義します。このテーブルには列が 1 つあります。この列のエントリは、Construction グループの Construction 属性値から取得します。値は、データベースで定義されている Construction タイプ (Fire Resist、Frame、Masonry、または Metal Clad) です。エントリには赤の太字スタイル、列幅には 2 インチを指定します。この列の値のキャプションを、リテラル文字列の “Value by Construction Type” とします。

  4. 最上位の <table> の 2 番目の列を作成するために、列方向に設定した <table> コンテナを 1 つ持つ <div> を定義します。この <table> には 2 つの <table> 要素があり、それぞれは行方向に設定したテーブルを 1 つ定義しています。この部分の定義の出力は 2 つの列で構成しています。それぞれにいくつかの列や行を設定できます。

  5. 手順 4 で定義した <table> の最初の列で、方向を行および crosstab を 1 に設定した <table> を 1 つ定義します。このテーブルのエントリは、Location グループの Total の集約値から取得します。

    これは行方向のテーブルなので、Location タイプごとに 1 つの列、Construction タイプごとに 1 つの行で構成されます。これにより、このテーブルでは 2 つの列と 4 つの行が生成されます。このテキストには特別なスタイルを指定しません。このテーブルの列のキャプションは、Location グループの Location 属性値から取得するので、“Rural” および “Urban” になります。

    この <table> の <item> 要素および <caption> 要素で、以下のように grouppath および colcount の値をそれぞれ指定します。これは、複数の列や行を持つクロス集計テーブルで必要な処理です。

    • grouppath では、このクロス集計テーブルの項目の値を指定するグループを特定します。grouppath 属性は、複数の列や行が存在するクロス集計テーブルに配置する項目ごとに指定する必要があります。クロス集計テーブルにある列または行が 1 つのみの場合は、この属性を指定する必要はありません。他のタイプのテーブルでは、grouppath 属性は無視されます。grouppath の目的は、クロス集計テーブルの列に対するラベルの割り当てや列数のカウントを入力に基づいて適切に実行できるようにすることです。

    • colcount では、クロス集計テーブルの 1 つの項目で集計する列の数を指定します。colcount には、リテラル値を指定できるほか、入力から計算した値が割り当てられるようにすることもできます。colcount 属性は、クロス集計テーブルに配置する項目ごとに指定する必要があります。他のタイプのテーブルでは、colcount 属性は無視されます。

  6. 手順 4 で定義した <table> の 2 番目の列で、方向を行および crosstab を 1 に設定した <table> を 1 つ定義します。このテーブルのエントリは、Construction グループの TotalConstruction の集約値から取得します。

    これは行方向のテーブルなので、Construction タイプごとに 1 つの行で構成されます。これにより、このテーブルでは 1 つの列と 4 つの行が生成されます。エントリの色には青を指定します。この列の値のキャプションを、リテラル文字列の “Total” とします。

    この <table> の <item> 要素および <caption> 要素で、colcount の値をそれぞれ指定します。これは、複数の列や行を持つクロス集計テーブルで必要な処理です。列が 1 つのみなので、この値は 1 です。

クロス集計テーブルに使用する XData ReportDisplay の例
generated description: crosstab report display

以下の図は、実際には 5 つの埋め込みテーブルで構成されているテーブルを、上記のコード例で 1 つのテーブルのように表示している様子を、境界線を使用して示しています。黒い境界線で囲まれている部分が、クロス集計テーブルの定義にある各 <table> に相当します。

内部構造を示す境界線を表示したクロス集計テーブル
generated description: crosstab borders yes

ピボット・テーブル・ジェネレータの使用法

Zen には、次の操作を実現するピボット・テーブル・ジェネレータが用意されています。

  1. データ・ソースのフィールドのうち、集約の対象とするフィールドの指定

  2. データに基づいてクロス集計テーブル (ピボット・テーブル) を定義する Zen レポート・クラスの生成

ピボット・テーブル・ジェネレータでは、上記のセクションの説明にあるクロス集計テーブルの構文を使用した Zen レポート・クラスを出力します。クラスに直接記述しなくても構文を生成できるので、ページの外観よりもデータに集中して作業できます。その結果、作業時間の短縮や、より複雑で効果的なレポートの生成が可能になり、より高度なデータ分析を目指すことができます。

ピボット・テーブル・ジェネレータを呼び出すには、ターミナル・コマンド行プロンプトで ObjectScript コマンドのシーケンスを発行するか、Caché ルーチンまたはクラス・メソッドに文を配置します。以下のシーケンス例では、いくつかの保険証書の InsuredValue に対して COUNT 集約と SUM 集約を指定しています。

 zn "USER"
 set Gen=##class(%ZEN.Report.pivotTableGenerator).%New()
 set Gen.reportName="InsurancePolicies"
 set Gen.table="SQLUser.InsurancePolicies"
 set Gen.group="Policy"
 set Gen.cols="Region"
 set Gen.rows="Flood,Construction,BusType"
 set Gen.value="InsuredValue"
 set agg = ##class(%ZEN.Report.aggregate).%New()
 set agg.type="COUNT"
 set agg.name="Count"
 do Gen.aggs.Insert(agg)
 set agg = ##class(%ZEN.Report.aggregate).%New()
 set agg.type="SUM"
 set agg.name="Sum"
 do Gen.aggs.Insert(agg)
 set Gen.className="PivotTables.FloodRegionBusTypeConstrGen"
 set Gen.classNameForTotals="PivotTables.FloodRegionBusTypeConstrGenTotals"
 do Gen.genZenReport()
 kill

上記のコマンド・シーケンス例の内容は以下のとおりです。

  1. 現在のネームスペースを、新しいクラスを作成するネームスペースに変更します。

  2. 新しい %ZEN.Report.pivotTableGeneratorOpens in a new tab インスタンスを作成し、いくつかの基本的なプロパティを設定します。すべてのプロパティについては、この例の後に示すテーブルを参照してください。

  3. 新しい %ZEN.Report.aggregateOpens in a new tab オブジェクトを作成し、いくつかのプロパティを設定します (type の COUNT など)。設定可能なすべてのプロパティについては、"<aggregate>" セクションを参照してください。

  4. %ZEN.Report.pivotTableGeneratorOpens in a new tab インスタンスの aggs コレクションに、この新しい COUNT 集約を追加します。

  5. 新しい %ZEN.Report.aggregateOpens in a new tab オブジェクトを作成し、いくつかのプロパティを設定します (type の SUM など)。設定可能なすべてのプロパティについては、"<aggregate>" セクションを参照してください。

  6. %ZEN.Report.pivotTableGeneratorOpens in a new tab インスタンスの aggs コレクションに、この新しい SUM 集約を追加します。

  7. className プロパティと classNameForTotals プロパティの値を指定し、%ZEN.Report.pivotTableGeneratorOpens in a new tab インスタンスの定義を終了します。

  8. genZenReport() メソッドを呼び出し、指定した新しいクラスを生成してコンパイルします。手順 1 で指定したネームスペースに、これらのクラスが生成されます。

  9. KILL を呼び出し、このコマンド・セッションで生成したローカル変数を削除します。

  10. 生成したクラスは、スタジオで編集して詳細を調整できます。

%ZEN.Report.pivotTableGeneratorOpens in a new tab には、以下のプロパティがあります。

プロパティ 説明
aggs

%ZEN.Report.aggregateOpens in a new tab オブジェクトのコレクション。このコレクションの各メンバには次の特性があります。

  • value プロパティで指定された値に対して実行する処理を記述します。

  • "<aggregate>" セクションに説明があるプロパティを持ちます。

className 生成する Zen レポート・クラスのパッケージとクラスの完全な名前。
classNameForTotals レポートで使用する集約値を提供する補足クラスのパッケージとクラスの完全な名前。生成した Zen レポート・クラスでは、<get> を使用してこの補足クラスを参照します。
cols 出力したピボット・テーブルでは、各列に左から順番に 1 から始まる番号が割り当てられます。cols 属性には、出力テーブルの列 2 以降の列で列ラベルとして使用する文字列のコンマ区切りリストを指定します。
group レポートで使用するために生成する XML データのエントリをグループ化する際に基準とするフィールド。
reportName className で特定して生成する Zen レポート・クラスで、<report> の name 属性に使用する値。
rows 出力したピボット・テーブルでは、各列に左から順番に 1 から始まる番号が割り当てられます。rows 属性には、出力テーブルの列 1 で行ラベルとして使用する文字列のコンマ区切りリストを指定します。
table レポートのデータ・ソース。

以下のシーケンス例では、いくつかの保険証書の Policy 値に対して、CUSTOM の “一意値のカウント” 集約を指定しています。

 zn "USER" 
 set Gen=##class(%ZEN.Report.pivotTableGenerator).%New() 
 set Gen.reportName="InsurancePolicies" 
 set Gen.table="SQLUser.InsurancePolicies" 
 set Gen.group="Policy" 
 set Gen.cols="Region" 
 set Gen.rows="Flood" 
 set Gen.value="Policy" 
 set agg = ##class(%ZEN.Report.aggregate).%New() 
 set agg.type="CUSTOM" 
 set agg.class="%ZEN.Report.Aggregate.CountDistinct" 
 do Gen.aggs.Insert(agg) 
 set Gen.className="PivotTables.FloodRegionGen" 
 set Gen.classNameForTotals="PivotTables.FloodRegionGenTotals" 
 do Gen.genZenReport() 
 kill

上記のコマンド・シーケンス例の内容は以下のとおりです。

  1. 現在のネームスペースを、新しいクラスを作成するネームスペースに変更します。

  2. 新しい %ZEN.Report.pivotTableGeneratorOpens in a new tab インスタンスを作成し、いくつかの基本的なプロパティを設定します。すべてのプロパティについては、上記のテーブルを参照してください。

  3. 新しい %ZEN.Report.aggregateOpens in a new tab オブジェクトを作成し、いくつかのプロパティを設定します。type を CUSTOM とし、class プロパティを使用して、集約を計算するクラスを特定します。設定可能なすべてのプロパティについては、"<aggregate>" セクションを参照してください。

  4. %ZEN.Report.pivotTableGeneratorOpens in a new tab インスタンスの aggs コレクションに、この新しい CUSTOM 集約を追加します。

  5. className プロパティと classNameForTotals プロパティの値を指定し、%ZEN.Report.pivotTableGeneratorOpens in a new tab インスタンスの定義を終了します。

  6. genZenReport() メソッドを呼び出し、指定した新しいクラスを生成してコンパイルします。手順 1 で指定したネームスペースに、これらのクラスが生成されます。

  7. KILL を呼び出し、このコマンド・セッションで生成したローカル変数を削除します。

  8. 生成したクラスは、スタジオで編集して詳細を調整できます。

以下の 2 つの図は、上記のコマンド・シーケンス例によって生成した Zen レポート・クラスを示しています。シーケンスのテキストは、この Zen レポート・クラスにすべて表示されていますが、この図では切り捨てたテキスト部分を省略記号 (...) で表しています。最初の図で示しているのは、DEFAULTMODE パラメータと XSLTMODE パラメータおよび XData ReportDefinition ブロックを中心とした、クラスの左側上部です。2 番目の図で示しているのは、XData ReportDisplay ブロックを中心とした、同じクラスの左側下部です。

クロス集計テーブルで使用するために生成した XData ReportDefinition
generated description: crosstab generated definition
クロス集計テーブルで使用するために生成した XData ReportDisplay
generated description: crosstab generated display

コールバック・メソッドを使用したテーブル作成

テーブルのデータを指定するには、コールバック・メソッドを使用する方法もあります。ongetData 属性により、ObjectScript または他の適切な言語で記述され、かつサーバ上で実行されるメソッドの名前を指定します。これは参照により、ゼロ・ベースの 2 次元配列を返します。ongetData は、データの指定に Zen レポート・グラフで使用するコールバック・メソッドを指定する ongetData 属性と類似しています。“Zen レポートのグラフの値の指定” を参照してください。配列参照のほかに、2 番目の引数が ongetData コールバック・メソッドに渡されます。またこの引数は参照によって渡され、テーブルで定義されたパラメータ値を含みます。メソッド・シグニチャに parameters 引数がない場合は、エラーとなります。コールバック・メソッドには xmlfile Zen レポート・プロパティにアクセスできるので、Caché の組み込み XPATH 実装の使用により、XPATH 手法を使用したデータ生成が可能になります。コールバック・テーブルは、データをテーブルとグラフの両方で表示する場合に役立ちます。コールバック・テーブルの項目は fieldName 属性を使用できません。代わりに、fieldNum 属性を使用する必要があります。

以下のコードの例では、簡単なコールバック・テーブルを作成しています。レポートの ReportDefinition セクションはプレースホルダであることに注意してください。データはテーブル・コールバック・メソッドで生成されます。

Class MyApp.LoopTableCallback Extends %ZEN.Report.reportPage
{
/// ReportDefinition is a placeholder. 
XData ReportDefinition [ XMLNamespace = "http://www.intersystems.com/zen/report/definition" ]
{
  <report xmlns="http://www.intersystems.com/zen/report/definition"
    name="MyReport" runonce="true">
  </report>
}
XData ReportDisplay [ XMLNamespace = "http://www.intersystems.com/zen/report/display" ]
{
  <report xmlns="http://www.intersystems.com/zen/report/display"
   name="MyReport">
    <body>
      <table ongetData="NamesAndAddresses" >
        <parameter value="EpicFigures" />
        <item fieldnum="1" >
          <caption value="Name"/>
        </item>
        <item fieldnum="2" >
          <caption value="Address" />
        </item>
      </table>
    </body>
  </report>
}

Method NamesAndAddresses(ByRef var As %String, ByRef params)
  {
   if (params(1) = "EpicFigures")
     {
       Set var(0,0)="Santa Claus"
       Set var(0,1)="North Pole"
       Set var(1,0)="Zeus"
       Set var(1,1)="Olympus"
       Set var(2,0)="Robin Hood"
       Set var(2,1)="Sherwood Forest"
     }
    if (params(1) = "RegularGuys")
     {
       Set var(0,0)="Joe Smith"
       Set var(0,1)="Cleveland"
       Set var(1,0)="Bob Jones"
       Set var(1,1)="Boise"
       Set var(2,0)="Fred Small"
       Set var(2,1)="Deluth"
     }
  }
}

クラス・クエリからのテーブル作成

queryClass および queryName <table> 属性により、クラス・クエリのデータで直接的にテーブルを生成することが可能になります。queryClass でクラス名を指定し、queryName でクラス内のクエリ名を指定します。以下に例を示します。

<body>
  <table queryClass="Sample.Person" queryName="ByName" 
    selectmode="2" orient="col">
    <item fieldnum="1">
      <caption value="ID"/>
    </item>
    <item fieldnum="2">
      <caption value="Name"/>
    </item>
  </table>
</body>

また、テーブルでは orderBy 属性を使用して、結果の並べ替えを行うことができます。これは、クラスの書き換えにより目的の並べ替えができない場合に有効となります。suppressDuplicates 属性もサポートされています。

SQL を使用したテーブル作成

sql <table> 属性により、SQL 文のデータでテーブルを生成することが可能になります。sql 属性からデータを取得している場合、テーブルの <group> を使用することはできません。このようなテーブルの <item> 要素は、fieldnum 属性または fieldname 属性を使用することでデータを識別します。fieldnum により、SQL 文のプロジェクション・フィールドの 1 から始まる番号を指定します。fieldname により、SQL 文で返されるフィールドの名前を指定します。

<body>
  <table 
    sql="SELECT NAME,AGE,FAVORITECOLORS FROM SAMPLE.PERSON WHERE NAME %STARTSWITH ?" 
    selectmode="2" orient="col" class="table4" >
    <parameter value="B"/>
    <item fieldname="NAME" suppressDuplicates="true" width="1.5in">
      <caption value="Name"/>
    </item>
    <item fieldname="AGE" width=".5in">
      <caption value="Age"/>
    </item>
    <item fieldname="FAVORITECOLORS">
      <caption value="Favorite Colors"/>
    </item>
    <table sql="SELECT AGE,NAME FROM SAMPLE.PERSON WHERE NAME=?" selectmode="2" orient="col">
      <parameter fieldname="NAME"/>
      <item fieldname="AGE">
        <caption value="Years Old"/>
      </item>
    </table> 
  </table>
</body>

onCreateResultSet を使用したテーブル作成

onCreateResultSet <table> 属性により、コールバック・メソッドを使用してテーブルにデータを移入できるようになります。onCreateResultSet 属性からデータを取得している場合、テーブルに <group> は使用できません。このようなテーブルの <item> 要素は、fieldnum 属性または fieldname 属性を使用することでデータを識別します。fieldnum により、SQL 文のプロジェクション・フィールドの 1 から始まる番号を指定します。fieldname により、SQL 文で返されるフィールドの名前を指定します。

<body>
  <table onCreateResultSet="MyRS" selectmode="2" orient="col" class="table4">
    <parameter value="B"/>
    <item fieldname="NAME" suppressDuplicates="true" width="1.5in">
      <caption value="Name"/>
    </item>
    <item fieldname="AGE" width=".5in">
      <caption value="Age"/>
    </item>
    <item fieldname="FAVORITECOLORS">
      <caption value="Favorite Colors"/>
    </item>
  </table>
</body>
Method MyRS(ByRef pSC, ByRef tParams)
{
  set statement=##class(%SQL.Statement).%New() 
  set sql = "SELECT Name,Age,FavoriteColors FROM Sample.Person WHERE Name %STARTSWITH ?"
  Set pSC=statement.%Prepare(sql)
  Set statement.%SelectMode=2
  Set ^foobar($i(^foobar))="pSC="_pSC
  if $$$ISERR(pSC) quit ""
  ;zw tParams
  if $D(tParams) {
    Set rs=statement.%Execute(tParams(1))
  } else {
    Set rs=statement.%Execute()
  }
  quit rs
}

<timeline>

<timeline> 要素を使用して、エピソードのグラフィック要約を表示できます。エピソードとは、開始日と終了日のある期間のことです。

エピソードにはデータで生成されたことを示すものがあります。episode-type-node-setgenerated-type-code の属性を使用して、生成データを特定できます。generated-type-color で指定された、他とは異なる色を使用して、生成されたデータをグラフ化できます。<timeline> は、データから時間軸の開始日と終了日を指定します。static-start-datestatic-end-date の属性を使用して、自動計算をオーバーライドできます。変数は XPath 形式となります。定数文字列は、引用符で囲む必要があります。最初に <block>、<group>、<container> またはその他の “wrapper” 要素に <timeline> を配置しない限り、これを <table> 内に配置できません。

Important:

HTML および PDF の両方の出力に XSLTVERSION = 2.0 パラメータを設定し、XSLT バージョン 2.0 で処理する必要があります。XSLTMODE クラス・パラメータや $XSLT URI パラメータを使用して、XSLT 処理をブラウザに向けることはできません。既定では、XSLT 処理はサーバで行われます。

<timeline> には以下の属性があります。

属性 説明
background-color

時間軸グラフの背景色を指定する XPath 式。既定の background-color は白です。

current-date

日付が日付データの範囲内にある場合に時間軸上で下向き矢印によって示される日付。既定では、current-date は時間軸グラフの生成日ですが、この属性を使用して、別の日付を設定できます。この属性の値は、大部分の <timeline> 属性とは異なり、XPath 式ではありません。

end-date-node-set

終了日の XPath 式。

エピソードは、開始日、終了日、およびオプションのエピソード・タイプで構成されます。これらの 3 つのデータ型のノード・セットをグループ化して、XML ファイル内の位置に基づいてエピソードを形成します。まず開始日、終了日、そしてエピソード・タイプを検出すると、最初のエピソードを定義します。以後同様になります。

episode-type-node-set

エピソード・タイプの XPath 式。エピソード・タイプは、エピソードが生成されたエピソードであるかどうかを判別します。

エピソードは、開始日、終了日、およびオプションのエピソード・タイプで構成されます。これらの 3 つのデータ型のノード・セットをグループ化して、XML ファイル内の位置に基づいてエピソードを形成します。まず開始日、終了日、そしてエピソード・タイプを検出すると、最初のエピソードを定義します。以後同様になります。

generated-type-code

生成されるエピソードを示す文字列または整数を指定する XPath 式。Zen レポートでこの値がエピソード・タイプのノードに見つかると、エピソードは生成されたエピソードと見なされ、generated-type-color を使用してグラフが作成されます。

generated-type-color 生成されたエピソードを描画するために使用する色を指定する XPath 式。生成されたエピソードとは、エピソード・タイプのノードに generated-type-code 値があるエピソードです。既定の generated-type-color はグレーです。
interval-height エピソードの目盛りと X 軸の目盛りの高さを指定する XPath 式。
interval-type 時間軸上のグラフを作成する間隔のタイプを指定する XPath 式。間隔のタイプは、“year”、“quarter”、“month”、または “day” にできます。間隔のタイプを指定しないと、これはデータにより決定されます。

interval-type は、以下の方法で、on-color および off-color と対話します。

  • “year” および “quarter” の間隔の場合、on-color および off-color は、1 間隔おきに切り替わります。奇数の年および奇数の四半期 (第 1 四半期と第 3 四半期) は、on-color の色になります。

  • “month” 間隔の場合、色は四半期おきに切り替わります。この結果は、“quarter” 間隔の色パターンと似ており、奇数の四半期が on-color の色になります。

  • “day” 間隔の場合、1 週間の内 1 日が off-color の色になります。色が切り替わる日は、各月の 7 日、14 日、21 日、および 28 日、つまり月の各週の終りです。

max-height エピソード・グラフの最大の高さ。 データ全体が空き領域に収まらない場合、非表示のエピソードは上向き矢印で示されます。この属性の値は、大部分の <timeline> 属性とは異なり、XPath 式ではありません。
minimum-interval-width 時間軸における間隔の幅を指定する XPath 式。単位はミリメートル (mm) です。間隔は、日、月、四半期、または年にできます。定数は、"10mm" のように引用符で囲む必要があります。
number-of-intervals グラフに間隔がある場合、その数。既定では、この値はデータから計算しますが、この属性を使用して、自動計算をオーバーライドできます。この属性の値は、大部分の <timeline> 属性とは異なり、XPath 式ではありません。
off-color 間隔が "off" である場合に X 軸における間隔の色を指定する XPath 式。間隔のオンとオフの状態により、X 軸で間隔が視覚的にグループ化されます。どちらの間隔が “on” でどちらの間隔が “off” かは、interval-type 属性によって決定されます。既定の off-color は白です。
on-color 間隔が "on" である場合に X 軸における間隔の色を指定する XPath 式。間隔のオンとオフの状態により、X 軸で間隔が視覚的にグループ化されます。どちらの間隔が “on” でどちらの間隔が “off” かは、interval-type 属性によって決定されます。既定の on-color はグレーです。
plotting-color 生成されないエピソードをグラフ化するために使用される前景色を指定する XPath 式。generated-type-color を参照してください。既定の plotting-color は黒です。
start-date-node-set

開始日の XPath 式。

エピソードは、開始日、終了日、およびオプションのエピソード・タイプで構成されます。これらの 3 つのデータ型のノード・セットをグループ化して、XML ファイル内の位置に基づいてエピソードを形成します。まず開始日、終了日、そしてエピソード・タイプを検出すると、最初のエピソードを定義します。以後同様になります。

static-end-date データから終了日の自動計算をオーバーライドする XPath 式。右矢印は、静的な終了日の右にデータがあることを示します。
static-start-date データから開始日の自動計算をオーバーライドする XPath 式。右矢印は、静的な開始日の左にデータがあることを示します。

以下は、timeline 要素の使用例です。

<timeline 
  plotting-color="'black'" background-color="'white'" 
  max-height="9" generated-type-code="'1'" generated-type-color="'gray'" 
  interval-height="'5mm'" minimum-interval-width="'5mm'" width="'2000mm'" 
  on-color="'gray'" off-color="'white'" 
  start-date-node-set="/MyTimeLine/dates/start-date" 
  end-date-node-set="/MyTimeLine/dates/end-date" 
  episode-type-node-set="/MyTimeLine/dates/episode-type" 
  static-start-date="'2009-07-20'" static-end-date="'2009-08-05'"/> 

上記のコードにより、以下のデータ・セットで指定された時間軸グラフが生成されます。

<MyTimeLine>
  <dates>
    <start-date>2009-07-30</start-date>
    <end-date>2009-07-31</end-date>
    <episode-type>0</episode-type>
    <start-date>2009-06-30</start-date>
    <end-date>2009-07-31</end-date>
    <episode-type>1</episode-type>
    <start-date>2009-07-30</start-date>
    <end-date>2009-07-31</end-date>
    <episode-type>0</episode-type>
    <start-date>2009-07-30</start-date>
    <end-date>2009-07-31</end-date>
    <episode-type>0</episode-type>
    <start-date>2009-07-30</start-date>
    <end-date>2009-07-31</end-date>
    <episode-type>0</episode-type>
    <start-date>2009-07-29</start-date>
    <end-date>2009-08-15</end-date>
    <episode-type>0</episode-type>
    <start-date>2009-07-02</start-date>
    <end-date>2009-08-03</end-date>
    <episode-type>0</episode-type>
  </dates>
</MyTimeLine>

ファイルにおけるデータ要素の配置のされ方には相当の柔軟性があることに注意してください。例えば、以下のデータ・セットにより、前述のグラフと同じ時間軸グラフが生成されます。

<MyTimeLine>
  <dates>
    <start-date>2009-07-30</start-date>
    <start-date>2009-06-30</start-date>
    <start-date>2009-07-30</start-date>
    <start-date>2009-07-30</start-date>
    <start-date>2009-07-30</start-date>
    <start-date>2009-07-29</start-date>
    <start-date>2009-07-02</start-date>
    <end-date>2009-07-31</end-date>
    <end-date>2009-07-31</end-date>
    <end-date>2009-07-31</end-date>
    <end-date>2009-07-31</end-date>
    <end-date>2009-07-31</end-date>
    <end-date>2009-08-15</end-date>
    <end-date>2009-08-03</end-date>
    <episode-type>0</episode-type>
    <episode-type>1</episode-type>
    <episode-type>0</episode-type>
    <episode-type>0</episode-type>
    <episode-type>0</episode-type>
    <episode-type>0</episode-type>
    <episode-type>0</episode-type>
  </dates>
</MyTimeLine>
FeedbackOpens in a new tab