変数、パラメータおよびプロパティの設定
変数の設定
更新可能な変数は、テンプレート・アプリケーション中にXMLデータに更新できるという点で、標準のXSL変数<xsl:variable>とは異なります。
これにより、更新可能な変数を必要とする多数の新しい機能をテンプレートに作成できます。
変数は、値の割当て、更新および取得にset and getアプローチを使用します。
次の構文を使用して、変数値を宣言または設定します:
<?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 = x + 1"と同様に、変数'x'の値を元の値に1を加えた値に設定します。
$_XDOCTXは、変数のグローバル・ドキュメント・コンテキストを指定します。 マルチスレッド環境では、同時に多くの変換が発生する可能性があるため、変数は単一の変換に割り当てる必要があります。
更新可能な変数の使用例については、「累計の挿入」を参照してください。
パラメータの設定
ランタイム・パラメータ値をテンプレートに渡すことができます。
パラメータは、多くの機能をサポートするためにテンプレート全体で参照できます。 たとえば、テンプレートのデータをフィルタ処理したり、条件付き書式設定ブロックの値を使用したり、プロパティ値(セキュリティ設定など)を最終文書に渡すことができます。
すべての名前と値のパラメータ・ペアがテンプレートに渡されます。 次に説明する構文を使用して、テンプレートで使用するパラメータを登録する必要があります。
テンプレートでパラメータを使用するには:
例12-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ループの閉じタグ。
このテンプレートでは、InvThreshパラメータ値より大きいAMOUNTを持つINVOICE要素のみが表示されます。 パラメータ値1,000を渡すと、次の図に示すレポートが生成されます。
2番目の請求書は、金額がパラメータ値より小さいため表示されません。
プロパティの設定
構成ファイルのプロパティは、RTFテンプレートに埋め込むこともできます。
テンプレートで設定されたプロパティは、実行時に解決されます。 テンプレート内の値をハード・コードするか、受信XMLデータに値を埋め込むことができます。 テンプレートにプロパティを埋め込むと、構成ファイルを使用できなくなります。
たとえば、テンプレートで非標準フォントを使用する場合、構成ファイルにフォントのロケーションを指定するのではなく、テンプレート内にフォント・プロパティを埋め込むことができます。 生成されたPDF出力を保護する必要がある場合は、PDFセキュリティ・プロパティを使用して、受信XMLデータからパスワード値を取得できます。
テンプレートにプロパティを追加するには、Microsoft「Wordのプロパティ」ダイアログ(「ファイル」メニューから使用可能)を使用して、次の情報を入力します:
-
「名前」-「xdo-」というプレフィクスが付いたプロパティ名を入力
-
「タイプ」-「テキスト」を選択
-
「値」-プロパティ値を入力します。 受信XMLデータから要素を参照するには、中カッコで囲まれたXML要素へのパスを入力します。 次に例を示します: {/root/password}
フォント参照の埋込み
この例では、"XMLPScript"というテンプレートでフォントを使用するとします。 このフォントはサーバーでは使用できないため、「font」プロパティを設定して、実行時にフォントを検索する場所を定義する必要があります。 フォントが/tmp/fontsにあると想定し、「プロパティ」ダイアログに次のように入力します:
-
「名前」-xdo-font.XMLPScript.normal.normal
-
「タイプ」-テキスト
-
「値」-truetype./tmp/fonts/XMLPScript.ttf
テンプレートがサーバー上のXMLデータに適用されると、/tmp/fontsディレクトリでフォントが検索されます。 テンプレートが複数のロケーションにデプロイされている場合は、パスが各ロケーションに対して有効であることを確認する必要があることに注意してください。
PDF出力の保護
この例では、XMLデータからのパスワードを使用してPDF出力ドキュメントを保護するとします。 XMLデータは次のとおりです:
<PO>
<security>true</security>
<password>welcome</password>
<PO_DETAILS>
..
</PO>
プロパティ・ダイアログで、2つのプロパティを設定: セキュリティ機能を有効または無効に設定するためのpdfセキュリティ、およびパスワードを設定するためのpdf-open-password。 プロパティ・ダイアログで次を入力します:
-
名前: xdo-pdf-security
-
タイプ: テキスト
-
値: {/PO/security}
-
名前: xdo-pdf-open-password
-
タイプ: テキスト
-
値: {/PO/password}
XMLがシステムに長期間存在する場合は、パスワードをXMLデータに格納することはお勧めしません。 この潜在的なセキュリティ・リスクを回避するために、実行時に生成されてテンプレートに渡されるテンプレート・パラメータ値を使用できます。
たとえば、次のパラメータを設定できます:
-
PDFSec-xdo-pdf-securityプロパティの値を渡すには
-
PDFPWD-パスワードの値を渡すには
次に、プロパティ・ダイアログに次のように入力します:
-
「名前」-xdo-pdf-security
-
「タイプ」-テキスト
-
「値」-{$PDFSec}
-
「名前」-xdo-pdf-open-password
-
「タイプ」-テキスト
-
「値」-{$PDFPWD}
テンプレート・パラメータを設定するには、「パラメータの設定」を参照してください。