ダイナミックパラメータ値の置換
ほとんどの簡単な Windchill のインストールでは必要ありませんが、Webject パラメータ値を Web ベースフォームのユーザー入力から直接取得する必要がある場合や、データリポジトリからの不明なサイズまたは種類のグループとして取得する必要がある場合があります。Info*Engine には、以下のような場合に使用できるダイナミックパラメータ値の置換と呼ばれるメカニズムが用意されています。
情報が Web ベースフォームから取得されるか、または URL パラメータとして取得される場合
情報が VDB グループのデータオブジェクトから取得される場合
Webject に必要な置換は、webject の実行直前に一度適用されます。したがって、タスクの実行によって作成されたグループからの値を置換するには、置換定義式を含む Webject を実行する前にタスクを実行する必要があります。Webject 内からタスクを実行できません。
Info*Engine の置換定義式は、どの Webject でも使用されている param タグのデータ属性値で使用できます。
一般値の置換の構文
Info*Engine の置換定義式は必ず $() で区切られています。この区切り記号内で、置換を行うグループおよび属性を以下のように指定します。
$(group_name[element_selector]attribute_name[value_selector])
ここで、
group_name
VDB 内のグループに名前を付けます。このグループには、@FORM のようなコンテキストグループか、またはタスクの実行によって作成されたデータグループを指定できます。
element_selector
選択したグループ内の要素 (行) を識別します。セレクタを以下に示します。
整数。インデックスによって要素を識別します。最初の要素のインデックスは 0 です。したがって、グループに 10 個の要素がある場合、インデックスの範囲は 0 ~ 9 となります。
文字 N。グループの最後の要素を選択します。
空。要素をすべて選択して、セパレータを使用せずに 1 つの文字列に連結します。空セレクタは通常、要素が 1 つだけの場合に使用されます。
META。要素を選択するのではなく、グループからメタデータを選択します。
アスタリスク (*)。要素をすべて選択し、1 つの文字列に連結します。セミコロンで文字列の要素を区切ります。
attribute=value として指定された属性と値のペア。Info*Engine は、指定した属性の指定値があることが判明した最初の要素を選択します。たとえば、grp1 グループに name および phone 属性が含まれているとします。Doyle という名前の従業員の電話番号を検索するには、以下の置換定義式を使用します。
$(grp1[name=Doyle]phone[])
attribute_name
選択した要素にある属性 (コラム) に名前を付けます。
METAelement_selector に指定されている場合は、以下のいずれかの属性を attribute_name について指定できます。
COUNT はグループ内の要素の数です。
STATUS はグループに現在関連付けられているステータス値です。ステータス 0 は成功を意味します。0 以外のステータスは失敗を意味します。
NAME はグループの名前です。
TYPE はグループのタイプです。グループの作成者は、TYPE 属性のメタ値を設定できますが、これは必須ではありません。有効なグループのタイプを以下に示します。
Object -- データが含まれているグループ。
Status -- リクエストの成功または失敗が含まれているグループ。
Exception -- 例外発生時に生成されるエラー情報が含まれているグループ。
Unknown -- グループの作成者が、その TYPE 情報を設定しなかったグループ。
MESSAGE はグループに関連付けられている現在のメッセージです。グループに関連付けられたメッセージがない場合、置換は空の文字列となります。MESSAGE メタデータから複数のメッセージを読み込むことができます。たとえば、Grp123 と関連付けられているメッセージをすべて取得する場合は、以下の置換定義式を使用できます。
$(Grp123[META]MESSAGE[*])
さらに、attribute_name についてグループで定義されていれば、どのメタデータ属性でも指定できます。
value_selector
選択された属性値を識別します。セレクタを以下に示します。
整数。インデックスによって値を識別します。最初の要素のインデックスは 0 です。したがって、グループに 5 個の要素がある場合、インデックスの範囲は 0 ~ 4 となります。
文字 N。属性の最後の値を選択します。
空。値をすべて選択して、セパレータを使用せずに 1 つの文字列に連結します。空セレクタは通常、値が 1 つだけの場合に使用されます。
アスタリスク (*)。値をすべて選択し、1 つの文字列に連結します。コンマで文字列の値を区切ります。
以下の置換定義式では、@FORM グループの要素からすべての XYZ 値を選択して文字列に連結し、コンマを使用して値を区切ります。
$(@FORM[]XYZ[*])
以下の置換定義式によって、USERS グループの要素から最初の NAME 属性値を選択します。
$(USERS[]NAME[0])
以下の置換定義式によって、OUTGRP グループのメタデータから COUNT 値を選択します。
$(OUTGRP[META]COUNT[])
置換のデフォルト値
置換定義式の評価によって値が返されない可能性があります。これを防ぐには、定義式のデフォルトを組み込むようにしてください。以下の default 属性を param タグに組み込むことによってデフォルトを指定します。
default="value"
たとえば、以下の param タグでは、ATTRIBUTE パラメータのデフォルトを文字列 "*" に設定します。
<ie:param name="ATTRIBUTE" … default="*"/>
ユーザー指定の値の置換定義式
タスクの設計者ではなくユーザーが情報を指定する必要がある場合、テンプレートやタスクの設計時の正確な値を知らなくても、@FORM コンテキストグループにアクセスする置換定義式によってこの情報を Webject 内で利用できます。
置換定義式は、param タグのどのデータ属性値でも使用できます。
Web ベースフォームまたは URL でユーザーが 1 つのパラメータ値を入力として指定する場合は、以下のようなパラメータ値になります。
data="$(@FORM[]variable[])"
@FORM コンテキストグループには要素が 1 つしかないので、これらのフォーマットでは @FORM[] を使用します。変数と等しい値が 1 つしかないので、フォーム変数として空の値にセレクタである [] を使用します。
入力として複数のパラメータ値を指定するには、アスタリスク (*) を値セレクタとして含めます。複数のパラメータ値を正確にフォーマットするには、置換されている文字列でコンマをセパレータとして識別する delim 属性も含める必要があります。複数の値の場合は、以下のようなパラメータ値になります。
data="$(@FORM[]variable[*])" delim=","
値セレクタ内のアスタリスク ([*]) によって値をすべて選択し、コンマをセパレータとして使用して 1 つの文字列に連結します。Webject は、delim 属性によって、データ属性の複数の値がコンマで区切られていることを認識します。
* 
アップロードするファイルを選択するための file select という制御タイプを持つ INPUT 要素が、使用するファイルに組み込まれている場合、パラメータの置換で使用するフォーム変数はすべて INPUT 要素の前のフォームに設定する必要があります。詳細については、BLOB のアップロードおよびダウンロードを参照してください。
例: @FORM を使用した Display-Object の置換
以下の変数によって、ユーザーが参照するテーブルフォーマットと属性が設定されます。変数の値は、@FORM コンテキストグループで使用可能であり、このグループから取得できます。
border=2
att=ename
att=phone
headers=Name
headers=Telephone
また、以下の Display-Object Webject は Info*Engine JSP ページにあり、フォームからの変数を使用して従業員のリストを表示すると仮定します。
<ie:task uri="listemployees"/>
<ie:webject name="Display-Object" type="DSP">
<ie:param name="BORDER" data=$(@FORM[]border[])/>
<ie:param name="ATTRIBUTE" data=$(@FORM[]att[*]) delim=","
default="*"/>
<ie:param name="HEADER" data=$(@FORM[]headers[*]) delim=","/>
</ie:webject>
Info*Engine による置換処理の後、Webject のパラメータは以下のようになります。
<ie:webject name="Display-Object" type="DSP">
<ie:param name="BORDER" data="2"/>
<ie:param name="ATTRIBUTE" data="ename,phone" delim=","
default="*"/>
<ie:param name="HEADER" data="Name,Telephone" delim=","/>
</ie:webject>
例: @FORM を使用した Query-Object の置換
以下の URL が WebServer1 にサブミットされていると仮定します。
http://webServer1/Windchill/servlet/IE/tasks/QueryObject.xml?CLS=EMPLOYEES&ATTS=
NAME&ATTS =EMPNO&ATTS=SALARY&WHR=NAME='&SMITH'
このとき、@FORM コンテキストグループには以下の変数が含まれています。
CLS=EMPLOYEES
ATTS=NAME
ATTS=EMPNO
ATTS=SALARY
WHR=NAME='&SMITH'
また、以下の Query-Objects Webject は QueryObject.xml タスクにあり、URL の変数を使用して “jdbc” アダプタに接続されている情報システムを照会すると仮定します。
<ie:webject name="Query-Objects" type="ACT">
<ie:param name="INSTANCE" data="jdbc"/>
<ie:param name="ATTRIBUTE" data="$(@FORM[]ATTS[*])" delim=","
default="*"/>
<ie:param name="CLASS" data="$(@FORM[]CLS[0])" default="EMP"/>
<ie:param name="WHERE" data="$(@FORM[]WHR[0])" default="()"/>
<ie:param name="GROUP_OUT" data="queryStatus"/>
</ie:webject>
Info*Engine による置換処理の後、Webject のパラメータは以下のようになります。
<ie:webject name="Query-Objects" type="ACT">
<ie:param name="INSTANCE" data="jdbc"/>
<ie:param name="ATTRIBUTE" data="NAME,EMPNO,SALARY" delim=","
default="*"/>
<ie:param name="CLASS" data="EMPLOYEES" default="EMP"/>
<ie:param name="WHERE" data="NAME='&SMITH'" default="()"/>
<ie:param name="GROUP_OUT" data="queryStatus"/>
</ie:webject>
Info*Engine によって処理がすべて完了すると、Webject のパラメータは以下のようになります。
<ie:webject name="Query-Objects" type="ACT">
<ie:param name="INSTANCE" data="jdbc"/>
<ie:param name="ATTRIBUTE" data="NAME"/>
<ie:param name="ATTRIBUTE" data="EMPNO"/>
<ie:param name="ATTRIBUTE" data="SALARY"/>
<ie:param name="CLASS" data="EMPLOYEES"/>
<ie:param name="WHERE" data="NAME='&SMITH'"/>
<ie:param name="GROUP_OUT" data="queryStatus"/>
</ie:webject>
VDB データグループ指定の値の置換定義式
生成された VDB グループからの情報である必要がある場合、タスクの設計時に正確な値がわからなくても、VDB データグループにアクセスする置換定義式によって、この情報を Webject 内で利用できます。
* 
Webject を実行するには VDB グループが Webject で利用可能である必要があります。グループを作成するタスクは、Webject 内から実行できません。
置換定義式は、param タグのどの data 属性値でも使用できます。
VDB データグループから置換される 1 つのパラメータ値を指定する場合は、以下のようなパラメータ値になります。
data=$(grp_name[]att_name[])
grp_name という名前のグループには要素 (行) が 1 つしかないので、これらのフォーマットでは grp_name[] を使用します。att_name[] という名前の属性には値が 1 つしかないので、これらのフォーマットでは att_name を使用します。データグループに 1 つ以上の要素がある場合は、grp_name[0] を使用してグループ内の最初の要素にアクセスしたり、grp_name[N] を使用してグループ内の最後の要素にアクセスしたりできます。ほかの要素にアクセスする場合は、括弧内に要素のインデックスを指定できます。同様に、ブラケット内に 0N、またはほかのインデックスを指定すると、att_name[] によって指定された属性の特定の値にアクセスできます。
入力として複数のパラメータ値を指定するには、アスタリスク (*) を値セレクタとして含めます。複数のパラメータ値を正確にフォーマットするには、置換されている文字列でコンマをセパレータとして識別する delim 属性も含める必要があります。複数の値の場合は、以下のようなパラメータ値になります。
data=$(grp_name[]att_name[*]) delim=","
値セレクタ内のアスタリスク ([*]) によって値をすべて選択し、コンマをセパレータとして使用して 1 つの文字列に連結します。Webject は、delim 属性によって、data 属性の複数の値がコンマで区切られていることを認識します。
フォーマットの最後のセットでは、指定したグループ内に要素が 1 つしかないと見なします。データグループに 1 つ以上の要素がある場合は、grp_name[0] を使用してグループ内の最初の要素にアクセスしたり、grp_name[N] を使用してグループ内の最後の要素にアクセスしたりできます。ほかの要素にアクセスする場合は、括弧内に要素のインデックスを指定できます。
詳細については、このトピックの「一般値の置換の構文」を参照してください。
例: VDB データグループによる作成グループを使用した Create-Group の置換
以下のテーブルは、EMP VDB グループの要素 (行)、属性 (列ヘッディング)、および属性値 (列内のセル) を表していると仮定します。
ename
phone
Burton, Jack
873-2302
Law, Gracie
873-2200
LoPan, David
873-3313
以下の Create-Group Webject 内の置換を使用して、DEPT 属性列を EMP グループに追加することによって、salesEmp という新規グループを作成できます。
<ie:webject name="Create-Group" type="GRP">
<ie:param name="ELEMENT" data="NAME=$(EMP[0]ename[]):
TELEPHONE=$(EMP[0]phone[]):DEPT=Sales"/>
<ie:param name="ELEMENT" data="NAME=$(EMP[1]ename[]):
TELEPHONE=$(EMP[1]phone[]):DEPT=Sales"/>
<ie:param name="ELEMENT" data="NAME=$(EMP[2]ename[]):
TELEPHONE=$(EMP[2]phone[]):DEPT=Sales"/>
<ie:param name="CLASS" data="SalesEmployees"/>
<ie:param name="GROUP_OUT" data="salesEmp"/>
</ie:webject>
Info*Engine による置換処理の後、Webject のパラメータは以下のようになります。
<ie:webject name="Create-Group" type="GRP">
<ie:param name="ELEMENT" data="NAME=Burton, Jack:
TELEPHONE=873-2302:DEPT=Sales"/>
<ie:param name="ELEMENT" data="NAME=Law, Gracie:
TELEPHONE=873-2200:DEPT=Sales"/>
<ie:param name="ELEMENT" data="NAME=LoPan, David:
TELEPHONE=873-3313:DEPT=Sales"/>
<ie:param name="CLASS" data="SalesEmployees"/>
<ie:param name="GROUP_OUT" data="salesEmp"/>
</ie:webject>
Create-Group Webject を実行することによって、以下の表のような salesEmp グループが作成されます。
NAME
TELEPHONE
DEPT
Burton, Jack
873-2302
営業
Law, Gracie
873-2200
営業
LoPan, David
873-3313
営業
置換定義式における複数の戻り値
置換定義式の要素セレクタまたは値セレクタに (*) を使用すると、複数の値を含む文字列を返すことができます。文字列には以下の値が含まれます。
要素と属性の 1 つのペアからの複数の属性値
1 つの属性に対応する複数の要素からの属性値
これらの組み合わせが文字列内でどのように表現されるかを理解するために、tbl という名前のグループを以下のように図で表して考えてみます。
1 つの要素からの複数の属性値
要素 1 (A および A1) からの Y 属性値をすべて含む文字列を返すには、以下のデータ属性を含めます。
data="$(tbl[0]Y[*])"
返される文字列は以下のとおりです。
"A,A1"
コンマによって値が区切られていることに注意してください。
ほかのセパレータを指定するには、valueSeparator 属性を含める必要があります。たとえば、コロン区切りのリストを返すには、以下の属性を使用します。
data="$(tbl[0]Y[*])" valueSeparator=":"
返される文字列は以下のとおりです。
"A:A1"
各エレメントからの最初の属性値
各要素 (56 および 77) からの最初の Z 属性値を含む文字列を返すには、以下のデータ属性を含めます。
data="$(tbl[*]Z[0])"
デフォルトでは、返される文字列は以下のようになります。
"56;77;"
セミコロンによって他のセルの値と区切られており、第 3 の要素の値がないことに注意してください。
ほかのセパレータを指定するには、elementSeparator 属性を含める必要があります。たとえば、パーセント記号区切りのリストを返すには、以下の属性を使用します。
data="$(tbl[*]Y[0])" elementSeparator="%"
返される文字列は以下のとおりです。
"56%77%"
すべての要素からの複数の属性値
すべての要素 (AA1BB1、および C) からの Y 属性値をすべて含む文字列を返すには、以下のデータ属性を含めます。
data="$(tbl[*]Y[*])"
デフォルトでは、返される文字列は以下のようになります。
"A,A1;B,B1;C"
1 つのセル内の値はコンマで区切られており、異なるセルの値はセミコロンで区切られていることに注意してください。
ほかのセパレータを指定するには、valueSeparator および elementSeparator 属性を含める必要があります。たとえば、コロンとパーセント記号をセパレータとして使用する文字列を返すには、以下の属性を含めます。
data="$(tbl[*]Y[*])" valueSeparator=":" elementSeparator="%"
返される文字列は以下のとおりです。
"A:A1%B:B1%C"
置換定義式の属性と値のペアによる要素の選択
置換定義式の要素セレクタとして属性と値のペアを使用すると、要素のインデックス番号を知らなくても要素を選択できます。
どのように選択が行われるかについて理解するために、tbl という名前のグループを以下のように図で表して考えてみます。
要素の選択
X=221 である要素からの Y 属性値をすべて含む文字列を返すには、以下のデータ属性を含めます。
data="$(tbl[X=221]Y[*])"
値が 221X 属性値は要素番号にあるので、文字列として返される Y 属性値は以下のようになります。
"B,B1"
デフォルトでは、コンマによって値が区切られます。
これは役に立ちましたか?