高度なPublisher関数の使用

Publisherには、その他のレポート機能を実行するための一連の関数が用意されています。

これらの関数は、XDO_METADATAシートのData Constraintsリージョンで定義します。

これらの関数では、次に示すように、XDO_METADATAシートの列A、BおよびCを使用します。

列Aは、関数を宣言するか、計算またはXSL評価の結果をマップするオブジェクトの定義名を指定するために使用します。

列Bは、XDO関数に対するデータ制約を制御する方法を記述する特殊なXDO-XSL構文、またはXDO_名前付き要素に適用する特殊な制約を記述するXSL構文を入力するために使用します。

列Cは、一部の関数に対する追加の指示を指定するために使用します。

これらの関数については、次の各項で説明します。

レポート関数

次に示すコマンドおよびPublisher構文とXSLの組合せを使用して、テンプレートに関数を追加できます。

次の表に、コマンドのサマリー・リストを示します。使用法の詳細は、該当する項を参照してください。

関数 コマンド

複数のシートへのレポートのデータの分割

XDO_SHEET_?およびXDO_SHEET_NAME_?

パラメータの宣言と引渡し

XDO_PARAM_?n?

リンクの定義

XDO_LINK_?リンク・オブジェクト名?

サブテンプレートのインポートとコール

XDO_SUBTEMPLATE_?n?

Java拡張ライブラリの参照

XDO_EXT_?n?

複数のシートへのレポートのデータの分割

レポートから複数のシートにデータを分割するためのロジックを定義できます。

複数のシートにわたってイメージを挿入することはできません。テンプレート・シートにイメージが含まれている場合、データが複数のシートに分割されると、イメージは最初のシートにのみ表示されます。レポート・データを複数のシートに分割するには、次のコマンドのセットを使用します。

  • XDO_SHEET_?コマンド: 新規シートにデータを分割するためのロジックを定義します。
  • XDO_SHEET_NAME_?コマンド: 各シートのネーミング規則を指定します。

XDO_METADATAシートで、複数のシートを作成するために複数のテンプレートを指定できます。各テンプレートに対して、XDO_SHEET_?コマンドとXDO_SHEET_NAME_?コマンドのペアを定義します。XDO_SHEET_?コマンドとXDO_SHEET_NAME_?コマンドの各ペアに対して、元のテンプレート・シート名と同じ名前を定義してください。

次の表に、列のエントリを示します。

列Aのエントリ 列Bのエントリ 列Cのエントリ

XDO_SHEET_?

<?データを分割するためのxsl_evaluation?>

例:

<?.//DEPT?>

<?元のシート名?>

例:

<?Sheet2?>

XDO_SHEET_NAME_?

<?シートに名前を付けるためのxsl_expression?>

例:

<?concat(.//DEPARTMENT_NAME,'-',count(.//EMP_NAME))?>

<?元のシート名?>

例:

<?Sheet2?>

  1. 列Aに、XDO_SHEET_?およびXDO_SHEET_NAME_?コマンドを入力します。
  2. 列Bで、次のようにします。
    • XDO_SHEET_?コマンドは、XMLデータ内の既存の高レベル・ノードを参照する必要があります。この例で、<?.//DEPT?>は、データ内で<DEPT>が出現するたびに新規シートを作成します。データがフラットな場合、先にデータを前処理して適切な階層を作成しないかぎり、このコマンドは使用できません。データを前処理するには、XSLTファイルで変換を定義してから、XDO_METADATAシートのヘッダー・セクションのPreprocess XSLT Fileフィールドでこのファイルを指定します。
    • XDO_SHEET_NAME_?コマンドで、シートに適用する名前を定義する必要があります。新しいシート名を導出するためのXSL式を入力します。式はXMLデータ内の要素または属性の値を参照できます。または、これらの要素に対して文字列操作を実行して最終的なシート名を定義することもできます。次の例では、DEPARTMENT_NAMEの値にDEPTグループ内の従業員数を「-」で連結して、各シートに名前を付けます。
      <?concat(.//DEPARTMENT_NAME,'-',count(.//EMP_NAME))?>
      
  3. 列Cに、元のテンプレート・シートの名前を指定します。たとえば、レポートの最初の3つのワークシートにサマリー・データが含まれ、Sheet2およびSheet3にバースト・データがある場合は、XDO_SHEET_?コマンドとXDO_SHEET_NAME_?コマンドの最初のペアには、元のテンプレート・シート名として<?Sheet2?>を指定し、2つ目のコマンド・ペアには<?Sheet3?>を指定します。XDO_SHEET_?コマンドまたはXDO_SHEET_NAME_?コマンドのいずれかに対してテンプレート・シート名を指定しないと、Publisherでは定義ペアに対して何も実行されません。

例: 複数のシートへのデータの分割

この例では、従業員データを使用して次のことを行います。

  • 各部門の従業員を個別のシートにリストします。
    • 各部門に対して新しいワークシートを作成します。
    • 各ワークシートに部門の名前を付けます。たとえば、Marketingです。
  • 最初の100人の従業員を、最初の100人の従業員の部門用の個別のシートにリストします。
    • 最初の100人の従業員が属する各部門について、新しいワークシートを作成します。
    • 各ワークシートに、部門名とその部門内の従業員IDが100未満の従業員数で構成される名前を付けます。たとえば、人事部門に従業員IDが100未満の従業員が3人いる場合は、Human Resources-3となります。
複数のシートにデータを分割するには:
  1. 次の図に示すように、従業員データの各セルに対する定義名を入力し、繰返しの従業員データのグループを作成します。データは部門ごとに分割されるため、複数の部門を包含するグループを作成しないでください。
  2. XDO_METADATAシートのData Constraintsセクションに値を入力します。

これらのエントリを次の図に示します。

次の図は、生成されるレポートを示しています。各部門のデータは専用のシートに表示され、各シートには、指定した規則に従った名前が付いています。

パラメータの宣言と引渡し

パラメータを定義するには、XDO_PARAM_?n?関数を使用してパラメータを宣言してから、$parameter_name構文を使用して値をパラメータに渡します。パラメータはデータ・モデル内で定義されている必要があります。

列Aのエントリ 列Bのエントリ

XDO_PARAM_?n?

ここで、nはパラメータの一意の識別子です

<?param@begin:parameter_name;parameter_value?>

ここで、parameter_nameはデータ・モデルからのパラメータ名で、parameter_valueはオプションのデフォルト値です。

次に例を示します。

<?param@begin:Country;US?>

パラメータの値をセル内で直接使用するには、次の表で説明するように、XDO_定義名の定義内で、パラメータを$parameter_nameとして参照します。

列Aのエントリ 列Bのエントリ

XDO_PARAM_?parameter_name?

次に例を示します。

XDO_PARAM_?Country?

<?$parameter_name?>

次に例を示します。

<?$Country?>

$parameter_nameを使用して、XDO_METADATAシート内の他のロジックや計算内でパラメータを参照することもできます。

例15-1 例: パラメータの定義と引渡し

Countryという名前のパラメータを宣言して参照するには:

  1. テンプレート・シートで、セルを定義名でマークします。次の図では、セルが定義名XDO_?Country?でマークされています

  2. 非表示のシートで、次の図に示すように、そのセルにパラメータ値を割り当てます。

リンクの定義

次の表に示すように、データ・セルにハイパーリンクを定義するには、XDO_LINK_?コマンドを使用します。

例: リンクの定義

列Aのエントリ 列Bのエントリ

XDO_LINK_?セル・オブジェクト名?

次に例を示します。

XDO_LINK_?INVOICE_NO?

<動的URLを構築するxsl文>

次に例を示します。

<xsl:value-of select="concat('https://server.company.com/documents/invoice_print.show?c_rptno=',./INVOICE_NO)"/>

たとえば、会社で顧客向けの請求書を発行しているとします。請求書はWebサーバーからアクセス可能な中央の場所に保存されており、請求書番号(INVOICE_NO)で識別できます。

各請求書へのダイナミック・リンクを作成するレポートを生成するには:

  1. 次の図に示すように、テンプレート・シートで、INVOICE_NOを表示するセルに、XDO定義名XDO_?INVOICE_NO?を割り当てます。

  2. XDO_METADATAシートで、次に示す適切な値を入力します。

    • 列Aのエントリ: XDO_LINK_?INVOICE_NO?
    • 列Bのエントリ: <xsl:value-of select="concat('https://server.company.com/documents/invoice_print.show?c_rptno=',./INVOICE_NO)"/>

    Excelでのエントリを次の図に示します。

レポート出力は次の図に示すように表示されます。XDO_METADATAシートで定義したロジックが適用され、各INVOICE_NOエントリに対してハイパーリンクが作成されます。

サブテンプレートのインポートとコール

いずれのXDO_コマンドでもコールおよび参照できるXSLサブ・テンプレートを宣言するには、次のコマンドを使用します。

Template Builder for Excelでは、サブテンプレートをインポートするテンプレートに対するプレビューはサポートされていません。サブテンプレートをインポートするには、次の表に示すコマンドを入力します。

列Aのエントリ 列Bのエントリ

XDO_SUBTEMPLATE_?n? ここで、nは一意の識別子です。たとえば、XDO_SUBTEMPLATE_?1?となります。

<xsl:import href="xdoxsl:///subtemplate.xsbへのパス"/> 例: <xsl:import href="xdoxsl:///Shared Folders/Financial Reports/SubTemplates/MySubTemplate.xsb"/>

サブ・テンプレートをコールするには、列Aで、結果を返すセルの名前を宣言してから、実行するその他のXSL処理とともにcall-template構文を入力します。次の表にこれらのコマンドを示します。

列Aのエントリ 列Bのエントリ

XDO_?セル・オブジェクト名?

<xsl:call-template name="template_name"> </xsl:call-template>

XSLサブテンプレートおよびカタログ内でのサブテンプレート・オブジェクトの作成の詳細は、XSLサブテンプレートの設計を参照してください。

例: サブ・テンプレートのインポートとコール

次のサブテンプレートがPublisherカタログにPaymentsSummary-SubTemplate.xsbとしてアップロードされているとします。このサブ・テンプレートは、pPayTypeという名前のパラメータの値を評価し、その値に基づいて、支払いタイプを示す文字列を返します。

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="2.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="/">
    </xsl:template>
      <xsl:template name="BRM_PAY_TYPES">
         <xsl:param name="pPayType" select="string('ALL')"/>
         <xsl:choose>
            <xsl:when test="$pPayType = '0'">UNDEFINED</xsl:when>
            <xsl:when test="$pPayType=string('10000')">PREPAID</xsl:when>
            <xsl:when test="$pPayType=string('10001')">INVOICE</xsl:when>
            <xsl:when test="$pPayType=string('10003')">CREDIT CARD</xsl:when>
            <xsl:when test="$pPayType=string('10005')">DIRECT DEBIT</xsl:when>
            <xsl:when test="$pPayType=string('10011')">CASH</xsl:when>
            <xsl:when test="$pPayType=string('10012')">CHECK</xsl:when>
            <xsl:when test="$pPayType=string('ALL')">ALL</xsl:when>
            </xsl:choose>
        </xsl:template>
</xsl:stylesheet>

Excelテンプレートで、XDO定義名XDO_?TYPE?のフィールドを定義しています。このフィールドには、次の図に示すように、サブテンプレートで実行されるコードから返される文字列に基づいて移入されます。

Data Constraintsリージョンに、次の表に示されているコマンドを入力します。

列Aのエントリ 列Bのエントリ

XDO_SUBTEMPLATE_?1?

<xsl:import href="xdoxsl:///Shared Folders/Financial Reports/SubTemplates/PaymentsSummary-SubTemplate.xsb"/>

XDO_?TYPE?

<xsl:call-template name="BRM_PAY_TYPES"><xsl:with-param name="pPayType" select="string('10000')"/></xsl:call-template>

XDO_SUBTEMPLATE_?1?関数は、Publisherカタログからサブテンプレートをインポートします。

XDO_?TYPE?セル・エントリは、列Bに入力されたサブ・テンプレート処理の結果をマップします。

Java拡張ライブラリの参照

テンプレート内にJava拡張ライブラリへの参照を組み込み、このライブラリ内のメソッドをコールしてテンプレート内で処理を実行できます。

Java拡張ライブラリを参照するには、次の表に示されているコマンドを使用します。

列Aのエントリ 列Bのエントリ

XDO_EXT_?n? ここで、nは一意の識別子です。例: XDO_EXT?1?

<?namespace:xmlns:bipext="extension library"?> 例: <?namespace:xmlns:bipext="http://www.example.com/XSL/Transform/java/ example.com.xmlpublisher.reports.BIPExtension"?>

1つのテンプレート・ファイル内で複数の拡張ライブラリを定義することができます。

例: Java拡張ライブラリのコール

拡張ライブラリに、テンプレート内でコールする次の2つのメソッドが含まれるものとします。

  • bipext:infTimeToStr()

  • bipext:infStrToTimet()

前述のようにライブラリを宣言したら、列AにXDO定義名を入力し、列Bで関数をコールすることにより、メソッドを適用するセルを指定します。次の表に、コマンドの例を示します。

列Aのエントリ 列Bのエントリ

XDO_?PARAM_START_DATE?

<xsl:value-of select="bipext:infTimeToStr(bipext:infStrToTimet((.//PARAM_START_DATE)[1],2),3)"

Java拡張ライブラリを宣言してコールするためのXDO_METADATAシートのエントリを次の図に示します。

特定のデータ属性値に依存する書式設定関数

この表内のコマンドには、XMLデータ・ファイルに特定の書式設定属性が存在することが必要です。

次の表に、コマンドのサマリー・リストを示します。使用法の詳細は、該当する項を参照してください。

関数 コマンド

罫線と下線のスタイルの定義

XDO_STYLE_n_?セル・オブジェクト名?

行のスキップ

XDO_SKIPROW_?セル・オブジェクト名?

罫線と下線のスタイルの定義

Excelの書式設定を使用してテンプレートに一貫したスタイルを定義できますが、XDO_STYLEコマンドを使用すると、XMLデータに基づいて、任意のデータ・セルに対して別のスタイルを動的に定義することができます。

XDO_STYLEコマンドでは、スタイルを適用するセル、スタイルをいつ適用すべきかを決定するためのロジックおよび適用するスタイル・タイプを指定します。スタイル値はXMLデータ内に存在している必要があります。次の表に例を示します。

列Aのエントリ 列Bのエントリ 列Cのエントリ

XDO_STYLE_n_?cell_object_name?

次に例を示します。

XDO_STYLE_1_?TOTAL_SALARY?

<サポートされる値を返すxsl評価>

次に例を示します。

<xsl:value-of select=".//TOTAL_SALARY/@borderStyle"/>

スタイルの種類

次に例を示します。

BottomBorderStyle

Publisherでは、次の表に示す標準のExcelスタイルの種類および値がサポートされています。

スタイルの種類 サポートされる値(列Bの評価によって返される必要があります) サポートされるタイプ(列Cに入力します)

標準

BORDER_NONE

BORDER_THIN

BORDER_MEDIUM

BORDER_DASHED

BORDER_DOTTED

BORDER_THICK

BORDER_DOUBLE

BORDER_HAIR

BORDER_MEDIUM_DASHED

BORDER_DASH_DOT

BORDER_MEDIUM_DASH_DOT

BORDER_DASH_DOT_DOT

BORDER_MEDIUM_DASH_DOT_DOT

BORDER_SLANTED_DASH_DOT

BottomBorderStyle

TopBorderStyle

LeftBorderStyle

RightBorderStyle

DiagonalLineStyle

次の表に示す種類のいずれかを使用して色を設定することもできます。

スタイルの種類 サポートされる値(列Bの評価によって返される必要があります) サポートされるタイプ(列Cに入力します)

標準

色スタイルの設定時には、RRBBGG 16進フォーマットで値を指定します。例:

borderColor="0000FF"

BottomBorderColor

TopBorderColor

LeftBorderColor

RightBorderColor

DiagonalLineColor

Publisherでは、次の表に示す値の下線の種類もサポートされています。

スタイルの種類 サポートされる値(列Bの評価によって返される必要があります) サポートされるタイプ(列Cに入力します)

下線

UNDERLINE_NONE

UNDERLINE_SINGLE

UNDERLINE_DOUBLE

UNDERLINE_SINGLE_ACCOUNTING

UNDERLINE_DOUBLE_ACCOUNTING

UnderlineStyle

1つのセルに対して、複数の下線スタイルを定義できます。

例: スタイルの定義

テンプレートにスタイルを適用するには、スタイル値がデータ内に存在している必要があります。この例では、Excelテンプレートに示したDEPT_TOTAL_SALARYフィールドに、罫線スタイルと下線スタイルを適用します。

この例では、次のデータを使用します。データ内のDEPT_TOTAL_SALARY要素には、これらの属性が定義されています。

  • borderStyle

  • underLineStyle

  • borderColor

これらの各属性の値を使用して、テンプレート内に定義されたロジックに基づいて、定義済のスタイルを適用します。

<?xml version="1.0" encoding="UTF-8"?>

<EMPLOYEES>
  <G_DEPT>
    <DEPARTMENT_ID>10</DEPARTMENT_ID>
    <DEPARTMENT_NAME>Administration</DEPARTMENT_NAME>
    <LIST_G_EMP>
      <G_EMP>
        <EMPLOYEE_ID>200</EMPLOYEE_ID>
        <EMP_NAME>Jennifer Whalen</EMP_NAME>
        <EMAIL>JWHALEN</EMAIL>
        <PHONE_NUMBER>515.123.4444</PHONE_NUMBER>
        <HIRE_DATE>1987-09-17T00:00:00.000-06:00</HIRE_DATE>
        <SALARY>4400</SALARY>
      </G_EMP>
    </LIST_G_EMP>

    <DEPT_TOTAL_SALARY borderStyle="BORDER_DOUBLE" underLineStyle="UNDERLINE_DOUBLE_ACCOUNTING" borderColor="0000FF">4400</DEPT_TOTAL_SALARY>
  </G_DEPT>
  <G_DEPT>
    <DEPARTMENT_ID>20</DEPARTMENT_ID>
    <DEPARTMENT_NAME>Marketing</DEPARTMENT_NAME>
    <LIST_G_EMP>
      <G_EMP>
        <EMPLOYEE_ID>201</EMPLOYEE_ID>
        <EMP_NAME>Michael Hartstein</EMP_NAME>
        <EMAIL>MHARTSTE</EMAIL>
        <PHONE_NUMBER>515.123.5555</PHONE_NUMBER>
        <HIRE_DATE>1996-02-17T00:00:00.000-07:00</HIRE_DATE>
        <SALARY>13000</SALARY>
      </G_EMP>
      <G_EMP>
        <EMPLOYEE_ID>202</EMPLOYEE_ID>
        <EMP_NAME>Pat Fay</EMP_NAME>
        <EMAIL>PFAY</EMAIL>
        <PHONE_NUMBER>603.123.6666</PHONE_NUMBER>
        <HIRE_DATE>1997-08-17T00:00:00.000-06:00</HIRE_DATE>
        <SALARY>6000</SALARY>
        </G_EMP>
      </LIST_G_EMP>

      <DEPT_TOTAL_SALARY borderStyle="BORDER_DOUBLE" underLineStyle="UNDERLINE_DOUBLE_ACCOUNTING" borderColor="0000FF">19000</DEPT_TOTAL_SALARY>
  </G_DEPT>

...

</EMPLOYEES>

スタイルを定義するには:

  1. 次の図に示すように、Excelテンプレートで、データからのDEPT_TOTAL_SALARYを表示するフィールドに、定義名XDO_?DEPT_TOTAL_SALARY?を割り当てます。

  2. XDO_METADATAシートで、次のように入力します。

    • 上罫線のスタイルを定義するには、次のエントリを使用します。

      • 列Aのエントリ:XDO_STYLE_1_?DEPT_TOTAL_SALARY?
      • 列Bのエントリ: <xsl:value-of select=".//DEPT_TOTAL_SALARY/@borderStyle"/>
      • 列Cのエントリ: TopBorderStyle

      列Aのエントリは、このスタイル・コマンドを、名前XDO_?DEPT_TOTAL_SALARY?が割り当てられたセルにマップします。

      列Bのエントリは、DEPT_TOTAL_SALARY要素の属性borderStyleからスタイル値を取得します。サンプル・データからのborderStyleの値はBORDER_DOUBLEです。

      列Cのエントリは、TopBorderStyleをセルに適用するようにPublisherに指示します。

    • 上罫線の色を定義するには、次のエントリを使用します。

      • 列Aのエントリ: XDO_STYLE_2_?DEPT_TOTAL_SALARY?
      • 列Bのエントリ: <?.//DEPT_TOTAL_SALARY/@borderColor?>
      • 列Cのエントリ: TopBorderColor

      列Aのエントリは、このスタイル・コマンドを、名前XDO_?DEPT_TOTAL_SALARY?が割り当てられたセルにマップします。

      列Bのエントリは、DEPT_TOTAL_SALARY要素の属性borderColorからスタイル値を取得します。サンプル・データからのborderColorの値は0000FF (青)です。

      列Cのエントリは、TopBorderColorをセルに適用するようにPublisherに指示します。

    • 下線のスタイルを定義するには、次のエントリを使用します。

      • 列Aのエントリ: XDO_STYLE_3_?DEPT_TOTAL_SALARY?
      • 列Bのエントリ: <?.//DEPT_TOTAL_SALARY/@underLineStyle?>
      • 列Cのエントリ: UnderlineStyle

      列Aのエントリは、このスタイル・コマンドを、名前XDO_?DEPT_TOTAL_SALARY?が割り当てられたセルにマップします。

      列Bのエントリは、DEPT_TOTAL_SALARY要素の属性underLineStyleからスタイル値を取得します。サンプル・データからのunderLineStyleの値はUNDERLINE_DOUBLE_ACCOUNTINGです。

      列Cのエントリは、UnderLineStyleをセルに適用するようにPublisherに指示します。

次の図は、Data Constraintsリージョンの3つのエントリを示しています。

レポートを実行すると、次の図に示すように、スタイル・コマンドがXDO_?DEPT_TOTAL_SALARY?セルに適用されます。

行のスキップ

列Bに定義されている評価の結果が大文字・小文字を区別しない文字列"True"を返す場合に、1行のデータの表示を抑制するには、XDO_SKIPROWコマンドを使用します。

次の表に、エントリの例を示します。

列Aのエントリ 列Bのエントリ

XDO_SKIPROW_?cell_object_name?

次に例を示します。

XDO_SKIPROW_?EMPLOYEE_ID?

<文字列Trueを返すxsl評価/>

次に例を示します。

<xsl:if test="string-length(./EMPLOYEE_ID/@MANAGER) != 0"><xsl:value-of select="./EMPLOYEE_ID/@MANAGER"/></xsl:if>

例: データ要素属性に基づく行のスキップ

この例では、EMPLOYEE_ID要素に値TrueのMANAGER属性が含まれる場合、Excelテンプレートで従業員データ行の表示が抑制されます。

次のデータを想定します。従業員Michael HartsteinのEMPLOYEE_ID要素に、値が"True"のMANAGER属性があることに注目してください。このセット内の他のEMPLOYEE_ID要素にはこの属性はありません。

<?xml version="1.0" encoding="UTF-8"?>

<EMPLOYEES>
  <G_DEPT>
    <DEPARTMENT_ID>20</DEPARTMENT_ID>
    <DEPARTMENT_NAME>Marketing</DEPARTMENT_NAME>
    <LIST_G_EMP>
      <G_EMP>
        <EMPLOYEE_ID MANAGER="TRUE">201</EMPLOYEE_ID>
        <EMP_NAME>Michael Hartstein</EMP_NAME>
        <EMAIL>MHARTSTE</EMAIL>
        <PHONE_NUMBER>515.123.5555</PHONE_NUMBER>
        <HIRE_DATE>1996-02-17T00:00:00.000-07:00</HIRE_DATE>
        <SALARY>13000</SALARY>
       </G_EMP>
       <G_EMP>
        <EMPLOYEE_ID>202</EMPLOYEE_ID>
        <EMP_NAME>Pat Fay</EMP_NAME>
        <EMAIL>PFAY</EMAIL>
        <PHONE_NUMBER>603.123.6666</PHONE_NUMBER>
        <HIRE_DATE>1997-08-17T00:00:00.000-06:00</HIRE_DATE>
        <SALARY>6000</SALARY>
       </G_EMP>
       <G_EMP>
        <EMPLOYEE_ID>652</EMPLOYEE_ID>
        <EMP_NAME>William Morgan</EMP_NAME>
        <EMAIL>WMORGAN</EMAIL>
        <PHONE_NUMBER>219.123.7776</PHONE_NUMBER>
        <HIRE_DATE>1994-10-17T00:00:00.000-06:00</HIRE_DATE>
        <SALARY>8000</SALARY>
       </G_EMP>
      </LIST_G_EMP>
  </G_DEPT>

...

</EMPLOYEES>

MANAGER属性がTrueに設定されている場合に従業員データ行の表示を抑制するには、次の表に示すエントリを、Data Constraintsセクションに入力します。

列Aのエントリ 列Bのエントリ

XDO_SKIPROW_?EMPLOYEE_ID?

<xsl:if test="string-length(./EMPLOYEE_ID/@MANAGER) != 0"><xsl:value-of select="./EMPLOYEE_ID/@MANAGER"/></xsl:if>

このテンプレートからの出力を次の図に示します。従業員Michael Hartsteinはレポートに含まれていないことに注目してください。

グループ化関数

テンプレート内のデータをグループ化するには、次の表に示す関数を使用します。

関数 コマンド

データのグループ化

XDO_GROUP_?グループ要素?

データの再グループ化

XDO_REGROUP_?

グループ・データ

たとえば、データを複数のシートに分割する場合など、レイアウトに特定のデータのグループ化が必要なときは、XDO_GROUPコマンドを使用して、フラットなデータをグループ化します。

次の表に、エントリの例を示します。

列Aのエントリ 列Bのエントリ 列Cのエントリ

XDO_GROUP_?グループ要素?

次に例を示します。

XDO_GROUP_?STATE_GROUP?

<グループ化ロジックを開始するxsl/>

次に例を示します。

<xsl:for-each-group select="current-group()" group-by="./STATE"> <xsl:for-each-group select="current-group()" group-by="./RESOURCE_NAME"> <xsl:for-each select="current-group()">

<グループ化終了タグのxsl/>

次に例を示します。

</xsl:for-each> <xsl:for-each-group> <xsl:for-each-group>

XDO_?cell object name?でマークアップされたグループ定義セクションの始まりと終わりに配置するXSL文を定義します。対応するグループに適切な定義をそれぞれに指定することにより、テンプレート内に複数のグループをネストしてマークできます。

ネストされたグループでの生成されたXDO定義名の処理

ネストされたグループでXDO_GROUP_?が使用される場合は、最終的なレポートにおけるXDO定義名の範囲が無意味になります。この場合、最終的なレポート内の式における定義名を参照しないでください。コマンドXDO_MARKUP_?を使用して、最終的なレポート内のXDOマークアップ・アクティビティを無効にできます。

次の表は、XDO_METADATAシートでXDO_MARKUP_?を使用した状態を示しています。

列Aのエントリ 列Bのエントリ

XDO_MARKUP_?

falseまたはFALSE

(Excelの「セルの書式設定」ダイアログで「テキスト」としてセルを書式設定する必要があります。)

また、テンプレートに数多くの定義名が含まれていて、ネストされたグループの複数のレベルでそれらの定義名が使用されている場合は、Excelでは、生成された定義名の数を処理できないことがあります。この場合は、XDO_MARKUP_?コマンドを使用して、生成されたレポートのマークアップを無効にできます。

falseに設定されていると、Publisherでは、XDO_GROUP_?によって生成されたいずれの結果に対しても、定義名はいっさい生成されません

データの再グループ化

XDO_REGROUPは、定義名を使用して定義を宣言することにより、データを再グループ化します。

XDO_REGROUPロジックはXDO_GROUPロジックの短縮形であり、XDO_METADATAシートにおけるXSLTcoding要件が要求されません。したがって、その定義は直接、XDO_REGROUP_?定義名に作用するか、またはXDO_METADATAシートにおけるそれ以外の定義に作用する必要があります。次の表にエントリを示します。

列Aのエントリ 列Bのエントリ

XDO_REGROUP_?

XDO_REGROUP_?UniqueGroupID?levelName?groupByName?sortByName?sortByName?sortByName?

説明

  • UniqueGroupIDはグループのIDです。levelNameと同じにすることも、一意の名前を割り当てることもできます。

  • levelNameは、XMLデータ・ファイル内のXMLレベル・タグ名、またはネストされたグループ化のコンテキストでのcurrent-group()を表すXDO_CURRGRP_です。ネストしているグループがテンプレートに複数存在している場合は、内側のグループすべてに対してXDO_CURRGRP_を使用してください。

  • groupByNameは、現在のグループのGroupBy操作に使用するフィールド名です。XDO_REGROUP_?コマンドが最も内側のグループに使用されている場合は、この名前は空のことがあります。

  • sortByNameは、グループのソートの基準とするフィールド名です。複数のsortByフィールドを指定できます。sortByNameを宣言しない場合は、XMLファイルからのデータはソートされません。

次の3つの表は、3つのネストされたグループの作成方法を示しています。

列Aのエントリ 列Bのエントリ

XDO_REGROUP_?

XDO_REGROUP_?PAYMENTSUMMARY_Q1?PAYMENTSUMMARY_Q1?PAY_TYPE_NAME?

前述の表に示す定義では、最も外側のグループがPAYMENTSUMMARY_Q1として定義され、PAY_TYPE_NAMEによってグループ化されます

列Aのエントリ 列Bのエントリ

XDO_REGROUP_?

XDO_REGROUP_?COUNTRYGRP?XDO_CURRGRP_?COUNTRY?

前述の表に示す定義は、外から2番目のグループを作成します。このグループには名前COUNTRY_GRPが割り当てられ、要素COUNTRYによってグループ化されます。

列Aのエントリ 列Bのエントリ

XDO_REGROUP_?

XDO_REGROUP_?STATEGRP?XDO_CURRGRP_?STATE?

前述の表に示す定義は内側のグループSTATEGRPを作成し、sortByNameパラメータSTATEを含みます。