変数、パラメータおよびプロパティの設定
変数の設定
更新可能な変数は、標準的なXSL変数<xsl:variable>とは異なり、XMLデータに対してテンプレートが適用されているときに更新できます。
このため、更新可能な変数を必要とする多くの新機能をテンプレートに作成できます。
変数では、「設定および取得」という方法を使用して、値の割当て、更新および取得を行います。
次の構文を使用して、変数値を宣言(設定)します。
<?xdoxslt:set_variable($_XDOCTX, 'variable name', value)?>
次の構文を使用して、変数値を取得します。
<?xdoxslt:get_variable($_XDOCTX, 'variable name')?>
<?if:'column name'=xdoxslt:get_variable($_XDOCTX, 'variable name')?>
<?xdoxslt:set_variable($_XDOCTX, 'x', xdoxslt:get_variable($_XDOCTX, 'x' + 1)?>
これによって、変数'x'の値は元の値に1を加算した値に設定されます(x = x + 1を使用した場合に類似しています)。
$_XDOCTXは、変数のグローバル文書コンテキストを指定します。マルチスレッド環境では、同時に多数の変換が発生する場合があるため、変数には1つの変換のみを割り当てる必要があります。
更新可能な変数の使用例については、累積合計の挿入を参照してください。
パラメータの設定
テンプレートには、ランタイム・パラメータ値を渡すことができます。
パラメータをテンプレート全体で参照して多くの機能をサポートできます。たとえば、テンプレートでデータをフィルタ処理したり、条件付き書式設定ブロックで値を使用できます。また、セキュリティ設定などのプロパティ値を最終文書に渡すこともできます。
すべてのname-valueパラメータのペアがテンプレートに渡されます。次に説明する構文を使用して、テンプレートで使用するパラメータを登録する必要があります。
パラメータをテンプレートで使用するには:
例13-1 例: 請求書しきい値パラメータの引渡し
次の例では、パラメータの値に基づいてデータをフィルタ処理するテンプレートで、パラメータを宣言する方法を示しています。
次のXMLサンプルには、請求書データがリストされています。
<INVOICES>
<INVOICE>
<INVOICE_NUM>981110</INVOICE_NUM>
<AMOUNT>1100</AMOUNT>
</INVOICE>
<INVOICE>
<INVOICE_NUM>981111</INVOICE_NUM>
<AMOUNT>250</AMOUNT>
</INVOICE>
<INVOICE>
<INVOICE_NUM>981112</INVOICE_NUM>
<AMOUNT>8343</AMOUNT>
</INVOICE>
. . .
</INVOICES>
次の図に、パラメータ値を受け取り、そのパラメータ値に基づいて最終文書に表示する請求書を制限するテンプレートを示します。
前述の図のテンプレートに示されているパラメータを定義するためのフィールド:
- InvThreshDeclaration - フォーム・フィールドのヘルプ・テキスト入力:
<?param@begin:InvThresh?>
- パラメータInvThreshを宣言します。 - FE - フォーム・フィールドのヘルプ・テキスト入力:
<?for-each:INVOICE?>
- INVOICE要素の繰返しグループを開始します。 - IF - フォーム・フィールドのヘルプ・テキスト入力:
<?if:AMOUNT>$InvThresh?>
- AMOUNT要素の値を調べて、InvThreshの値より大きいかどうかを判断します。 - 13222-2 - フォーム・フィールドのヘルプ・テキスト入力:
<?INVOICE_NUM?>
- INVOICE_NUM要素のプレースホルダ。 - $100.00 - フォーム・フィールドのヘルプ・テキスト入力:
<?AMOUNT?>
- AMOUNT要素のプレースホルダ。 - EI - フォーム・フィールドのヘルプ・テキスト入力:
<?end if?>
- if文の終了タグ。 - EFE - フォーム・フィールドのヘルプ・テキスト入力:
<?end for-each?>
- for-eachループの終了タグ。
このテンプレートでは、AMOUNTがInvThreshパラメータ値より大きいINVOICE要素のみが表示されます。パラメータ値1,000を渡した場合、次の図に示すレポートが作成されます。
2番目の請求書は、AMOUNTがパラメータ値より小さいため、表示されないことに注目してください。
プロパティの設定
構成ファイル内のプロパティは、RTFテンプレートに埋め込むこともできます。
テンプレートに設定されたプロパティは、実行時に解決されます。値は、テンプレートにハードコードするか、または受信したXMLデータに埋め込むことができます。プロパティをテンプレートに埋め込む場合、構成ファイルの使用は不要になります。
たとえば、非標準フォントをテンプレートで使用する場合は、構成ファイルでフォントの位置を指定するのではなく、テンプレート内にフォント・プロパティを埋め込むことができます。生成されたPDF出力を保護する必要がある場合は、PDFセキュリティ・プロパティを使用して、受信したXMLデータからパスワード値を取得できます。
プロパティをテンプレートに追加するには、Microsoft Wordの「プロパティ」ダイアログ(「ファイル」メニューから使用可能)を使用して、次の情報を入力します。
-
名前 - 先頭に"xdo-"を付けて、プロパティ名を入力します
-
種類 - 「テキスト」を選択します
-
Value - プロパティ値を入力します。受信したXMLデータから要素を参照するには、XML要素へのパスを中カッコで囲んで入力します。たとえば、{/root/password}のように入力します。
フォント参照の埋込み
次の例では、XMLPScriptというフォントをテンプレートで使用するとします。このフォントは、サーバーでは使用できないため、"font"プロパティを設定して実行時にそのフォントを検索する場所を定義する必要があります。フォントが/tmp/fontsに格納されている場合は、「Properties」ダイアログに次のように入力します。
-
名前 - xdo-font.XMLPScript.normal.normal
-
種類 - テキスト
-
Value - truetype./tmp/fonts/XMLPScript.ttf
テンプレートがサーバーのXMLデータに適用される際、/tmp/fontsディレクトリでフォントが検索されます。テンプレートが複数の場所に配置されている場合は、場所のそれぞれでこのパスが有効であることを確認してください。
PDF出力の保護
次の例では、XMLデータからパスワードを使用して、PDF出力文書を保護するとします。XMLデータは次のとおりです。
<PO>
<security>true</security>
<password>welcome</password>
<PO_DETAILS>
..
</PO>
「Properties」ダイアログでは、次の2つのプロパティを設定します。pdf-securityプロパティではセキュリティ機能を有効にするかどうかを設定し、pdf-open-passwordプロパティではパスワードを設定します。「Properties」ダイアログで次のように入力します。
-
名前: xdo-pdf-security
-
種類: テキスト
-
値: {/PO/security}
-
名前: xdo-pdf-open-password
-
種類: テキスト
-
値: {/PO/password}
XMLがシステム内に長期間保持される場合、XMLデータにパスワードを格納するのはお薦めできません。潜在的なセキュリティ・リスクを回避するには、実行時に生成してテンプレートに渡すテンプレート・パラメータ値を使用できます。
たとえば、次のパラメータを設定できます。
-
PDFSec: xdo-pdf-securityプロパティの値を渡すために使用します。
-
PDFPWD: パスワードの値を渡すために使用します。
次に、「Properties」ダイアログで次のように入力します。
-
名前 - xdo-pdf-security
-
種類 - テキスト
-
値 - {$PDFSec}
-
名前 - xdo-pdf-open-password
-
種類 - テキスト
-
値 - {$PDFPWD}
テンプレート・パラメータの設定については、パラメータの設定を参照してください。