Hitachi

Cosminexus V11 BPM/ESB基盤 サービスプラットフォーム 開発ガイド 基本開発編


5.6.19 アクティビティ定義ダイアログのXPathの指定

一部のアクティビティのダイアログでは,入力欄にXPathを指定して変数の情報を取得できます。アクティビティの定義とXPathを指定するダイアログの入力欄を次の表に示します。

表5‒16 アクティビティの定義とXPathを指定するダイアログの入力欄

項番

アクティビティ名

ダイアログの入力欄

1

代入アクティビティ

[代入アクティビティ]サブダイアログの[コピー元]の[値]

2

分岐アクティビティ

[条件設定]ダイアログ(分岐アクティビティ)の[条件式]

3

並列処理アクティビティ(リンクコネクション)

リンクコネクションの[条件設定]ダイアログの[条件式]

4

繰り返しアクティビティ

[繰り返し条件設定]ダイアログの[条件式]

[繰り返しリスト設定]ダイアログの[繰り返しリスト]

5

待機アクティビティ

[待機アクティビティ]ダイアログの[待機時間]の[式]

XPathの中では,拡張関数を使用して変数内の情報を取得する方法と,変数名を直接指定して情報を取得する方法の2つがあります。拡張関数については,「5.6.19(3) 拡張関数」を参照してください。

〈この項の構成〉

(1) 拡張関数を使用して変数内の情報を取得する方法

拡張関数を使用して変数内の情報を取得する方法を次に示します。

(a) 代入アクティビティサブダイアログでの指定

コピー元の値を取得するために,[値]には拡張関数でXPathを指定します。

属性propertyNameの値を取得する場合

拡張関数bpws:getVariablePropertyを使用して,属性propertyNameの値を取得します。変数の型がメッセージ型(XMLまたはnon-XML)の場合に使用できます。

指定方法
bpws:getVariableProperty('variableName','propertyName')
  • variableName:変数名を指定します。

  • propertyName:variableNameで指定した変数内で定義されている,xml型以外の部分名を指定します。

指定例
bpws:getVariableProperty('VariableX','PropertyY')
変数の値を直接指定する場合

拡張関数csc:getVariableDataを使用して変数の値を取得します。変数の型がメッセージ型(XMLまたはnon-XML),string型,numeric型,またはboolean型の場合に使用できます。

指定方法(メッセージ型(XMLまたはnon-XML)のとき)
csc:getVariableData('variableName','locationPath')
  • variableName:変数名を指定します。

  • locationPath:XMLスキーマのノードを示すパス([変数の表示]ダイアログの[選択パス]で取得したパス)を指定します。

指定例
csc:getVariableData('VariableX','input/forInvoke/depositData/id')
指定方法(string型,numeric型,またはboolean型のとき)
csc:getVariableData('variableName')
  • variableName:変数名を指定します。

指定例
csc:getVariableData('VariableX')
ヘッダ割当変数の初期化状態を取得する場合

拡張関数csc:getMessageInitializeを使用して,ヘッダ割当変数の初期化状態を取得します。変数の型がメッセージ型(XML,non-XMLまたはany)の場合に使用できます。

指定方法
csc:getMessageInitialize('variableName')
  • variableName:ヘッダ割当変数名を指定します。

指定例
csc:getMessageInitialize('VariableX')
メッセージ型変数(non-XML)の16進数形式の文字列を取得する場合

拡張関数csc:getHexVariableDataを使用して,メッセージ型変数(non-XMLまたはany)の16進数形式の文字列(半角英数大文字)を取得します。

変数の型がメッセージ型(non-XMLまたはany)の場合に使用できます。

指定方法
csc:getHexVariableData('variableName','beginIndex','compNumber')
  • variableName:取得元のメッセージ型(non-XMLまたはany)の変数名を指定します。

  • beginIndex:取得開始位置のバイト数を指定します。

  • compNumber:取得するバイト数を指定します。

指定例
csc:getHexVariableData('VariableX','2','1')
文字列を16進数形式で取得する場合

拡張関数csc:getHexStringを使用して,16進数形式の文字列(半角英数大文字)を取得します。

指定方法
csc:getHexString('convertString','characterCode')
  • convertString:16進数形式に変換する文字列を指定します。

  • characterCode:文字列からバイトデータにエンコードする場合に使用する文字コードを指定します。指定できる文字コードは,この関数を使用する環境のJavaVMに依存します。

指定例
csc:getHexString('PNG','UTF-8')

(b) 条件設定ダイアログでの指定

変数の値を判定する条件式を設定するために,[条件式]に条件となる式をXPathで指定します。

属性propertyNameの値を条件式にする場合

拡張関数bpws:getVariablePropertyを使用して,属性propertyNameの値により条件文を指定します。変数の型がメッセージ型(XMLまたはnon-XML)の場合に使用できます。

指定方法

次のどちらかの方法で指定します。

方法1

bpws:getVariableProperty('variableName','propertyName') = "比較対象の値"

方法2

bpws:getVariableProperty('variableName','propertyName') = bpws:getVariableProperty('variableName','propertyName')
  • variableName:変数名を指定します。

  • propertyName:variableNameで指定した変数内で定義されている,xml型以外の部分名を指定します。

指定例
bpws:getVariableProperty('VariableX','PropertyY') = "HITACHI"
変数の値を条件式にする場合

拡張関数csc:getVariableDataを使用して,属性propertyNameの値により条件文を指定します。変数の型がメッセージ型(XMLまたはnon-XML),string型,numeric型,またはboolean型の場合に使用できます。

指定方法(メッセージ型(XMLまたはnon-XML)のとき)
csc:getVariableData('variableName','locationPath') = "比較対象の値"
  • variableName:変数名を指定します。

  • locationPath:XMLスキーマのノードを示すパス([変数の表示]ダイアログの[選択パス]で取得したパス)を指定します。

指定例
csc:getVariableData('VariableX','input/forInvoke/depositData/userName/firstName') = "Taro"
指定方法(string型,numeric型,またはboolean型のとき)
csc:getVariableData('variableName') = "比較対象の値"
  • variableName:変数名を指定します。

指定例
csc:getVariableData('VariableX') = false()

注 VariableXがboolean型の場合です。

ヘッダ割当変数の初期化状態を条件式にする場合

拡張関数csc:getMessageInitializeを使用して,ヘッダ割当変数の初期化状態を条件式に指定します。変数の型がメッセージ型(XML,non-XMLまたはany)の場合に使用できます。

指定方法
csc:getMessageInitialize('variableName') = "比較対象の値"
  • variableName:ヘッダ割当変数名を指定します。

指定例
csc:getMessageInitialize('VariableX') = false()
メッセージ型変数(non-XML)の16進数形式の文字列を条件式にする場合

拡張関数csc:getHexVariableDataを使用して,メッセージ型変数(non-XMLまたはany)の16進数形式の文字列(半角英数大文字)を取得します。

変数の型がメッセージ型(non-XMLまたはany)の場合に使用できます。

指定方法
csc:getHexVariableData('variableName','beginIndex','compNumber') = 
"比較対象の値の16進表記"
  • variableName:取得元のメッセージ型(non-XMLまたはany)の変数名を指定します。

  • beginIndex:取得開始位置のバイト数を指定します。

  • compNumber:取得するバイト数を指定します。

指定例1(先頭から3バイト目の値を取得して判定する場合)
csc: getHexVariableData ('VariableX','2','1') = "4e"
指定例2(先頭から3バイトの値を取得し,その文字列を拡張関数csc:getHexStringを使用して判定する場合)
csc: getHexVariableData ('VariableX','0','3') = 
csc:getHexString('PNG','UTF-8')
16進数形式で取得した文字列を条件式にする場合

拡張関数csc:getHexStringを使用して,16進数形式の文字列(半角英数大文字)を条件式に指定します。

指定方法
csc:getHexString('convertString','characterCode') = "比較対象の値の16進表記"
  • convertString:16進数形式に変換する文字列を指定します。

  • characterCode:文字列からバイトデータにエンコードする場合に使用する文字コードを指定します。指定できる文字コードは,この関数を使用する環境のJavaVMに依存します。

指定例
csc:getHexString('PNG','UTF-8') = "504E47"

(c) 待機アクティビティダイアログでの指定

[待機時間]の[式]には拡張関数でXPathを指定します。

属性propertyNameの値を取得する場合

拡張関数bpws:getVariablePropertyを使用して,属性propertyNameの値を取得します。変数の型がメッセージ型(XMLまたはnon-XML)の場合に使用できます。

指定方法
bpws:getVariableProperty('variableName','propertyName')
  • variableName:変数名を指定します。

  • propertyName:variableNameで指定した変数内で定義されている,xml型以外の部分名を指定します。

指定例
bpws:getVariableProperty('VariableX','PropertyY')
変数の値を直接指定する場合

拡張関数csc:getVariableDataを使用して,属性propertyNameの値を取得します。変数の型がメッセージ型(XMLまたはnon-XML)またはstring型の場合に使用できます。

指定方法(メッセージ型(XMLまたはnon-XML)のとき)
csc:getVariableData('variableName','locationPath')
  • variableName:変数名を指定します。

  • locationPath:XMLスキーマのノードを示すパス([変数の表示]ダイアログの[選択パス]で取得したパス)を指定します。

指定例
csc:getVariableData('VariableX','input/forInvoke/depositData/id')
指定方法(string型のとき)
csc:getVariableData('variableName')
  • variableName:変数名を指定します。

指定例
csc:getVariableData('VariableX')
ヘッダ割当変数の初期化状態を取得する場合

拡張関数csc:getMessageInitializeを使用して,ヘッダ割当変数の初期化状態を取得します。変数の型がメッセージ型(XML,non-XMLまたはany)の場合に使用できます。

指定方法
csc:getMessageInitialize('variableName')
  • variableName:ヘッダ割当変数名を指定します。

指定例
csc:getMessageInitialize('VariableX')
メッセージ型変数(non-XML)の16進数形式の文字列を取得する場合

拡張関数csc:getHexVariableDataを使用して,メッセージ型変数(non-XMLまたはany)の16進数形式の文字列(半角英数大文字)を取得します。

変数の型がメッセージ型(non-XMLまたはany)の場合に使用できます。

指定方法
csc:getHexVariableData('variableName','beginIndex','compNumber')
  • variableName:取得元のメッセージ型(non-XMLまたはany)の変数名を指定します。

  • beginIndex:取得開始位置のバイト数を指定します。

  • compNumber:取得するバイト数を指定します。

指定例
csc:getHexVariableData('VariableX','2','1')
文字列を16進数形式で取得する場合

拡張関数csc:getHexStringを使用して,16進数形式の文字列(半角英数大文字)を取得します。

指定方法
csc:getHexString('convertString','characterCode')
  • convertString:16進数形式に変換する文字列を指定します。

  • characterCode:文字列からバイトデータにエンコードする場合に使用する文字コードを指定します。指定できる文字コードは,この関数を使用する環境のJavaVMに依存します。

指定例
csc:getHexString('PNG','UTF-8')
注意事項

待機時間を指定する場合は,次の点に注意してください。

  • 待機時間に「間隔」を指定する場合

    XPath式を評価して得ることができる文字列は,XML Schema型duration(xsd:duration)に従っている必要があります。

  • 待機時間に「期限」を指定する場合

    XPath式を評価して得ることができる文字列は,XML Schema型dateTime(xsd:dateTime)に従っている必要があります。

これらの仕様はBPEL標準規格により定められています。そのため,ビジネスプロセスのnumeric型およびboolean型の変数は指定できません。

なお,XPath式を指定する代わりに,「"」または「'」で囲むことで,直接間隔または期限を指定することもできます。

詳細については,「5.6.11(2) 待機時間として指定できる文字列」を参照してください。

(2) 変数名を直接指定して情報を取得する方法

変数名を直接指定して情報を取得する方法を次に示します。

(a) 代入アクティビティサブダイアログでの指定

[コピー元]の[値]を取得するためのXPathを直接指定します。

属性propertyNameの値を取得する場合

拡張関数を使用して変数内の情報を取得する方法を実施してください。

変数の値を直接指定する場合

「$variableName」で変数名を直接指定します。変数の型がメッセージ型,string型,numeric型,またはboolean型の場合に使用できます。

指定方法(メッセージ型のとき)
$variableName/locationPath
  • variableName:変数名を指定します。

  • locationPath:XMLスキーマのノードを示すパス([変数の表示]ダイアログの[選択パス]で取得したパス)を指定します。

指定例
$VariableX/input/forInvoke/depositData/id
指定方法(string型,numeric型,またはboolean型のとき)
$variableName
  • variableName:変数名を指定します。

指定例
$VariableX

(b) 条件設定ダイアログでの指定

[条件式]のXPathを直接指定します。

属性propertyNameの値を条件式にする場合

拡張関数を使用して条件式を指定する方法を実施してください。

変数の値を条件式にする場合

「$variableName」で変数名を直接指定します。変数の型がメッセージ型,string型,numeric型,またはboolean型の場合に使用できます。

指定方法(メッセージ型のとき)
$variableName/locationPath
  • variableName:変数名を指定します。

  • locationPath:XMLスキーマのノードを示すパス([変数の表示]ダイアログの[選択パス]で取得したパス)を指定します。

指定例
$VariableX/input/forInvoke/depositData/userName/firstName = "Taro"
指定方法(string型,numeric型,またはboolean型のとき)
$variableName
  • variableName:変数名を指定します。

指定例
$VariableX = false()

注 VariableXがboolean型の場合です。

(c) 待機アクティビティダイアログでの指定

[待機時間]の[式]には拡張関数でXPathを指定します。

属性propertyNameの値を取得する場合

拡張関数を使用して変数内の情報を取得する方法を実施してください。

変数の値を直接指定する場合

「$variableName」で変数名を直接指定します。変数の型がメッセージ型またはstring型の場合に使用できます。

指定方法(メッセージ型のとき)
$variableName/locationPath
  • variableName:変数名を指定します。

  • locationPath:XMLスキーマのノードを示すパス([変数の表示]ダイアログの[選択パス]で取得したパス)を指定します。

指定例
$VariableX/input/forInvoke/depositData/id
指定方法(string型のとき)
$variableName
  • variableName:変数名を指定します。

指定例
$VariableX
注意事項

待機時間を指定する場合は,次の点に注意してください。

  • 待機時間に「間隔」を指定する場合

    XPath式を評価して得ることができる文字列は,XML Schema型duration(xsd:duration)に従っている必要があります。

  • 待機時間に「期限」を指定する場合

    XPath式を評価して得ることができる文字列は,XML Schema型dateTime(xsd:dateTime)に従っている必要があります。

これらの仕様はBPEL標準規格により定められています。そのため,ビジネスプロセスのnumeric型およびboolean型の変数は指定できません。

なお,XPath式を指定する代わりに,「"」または「'」で囲むことで,直接間隔または期限を指定することもできます。

詳細については,「5.6.11(2) 待機時間として指定できる文字列」を参照してください。

(d) 繰り返しリスト設定ダイアログでの指定

[繰り返しリスト]の[式]にXPathで直接指定します。なお,リスト指定方式の場合,拡張関数は使用できません。

繰り返し要素のノードを指定する場合
指定方法
$variableName/locationPath
  • variableName:変数名を指定します。

  • locationPath:XMLスキーマのノードを示す繰り返し要素のパス([変数の表示]ダイアログの[選択パス]で取得したパス)を指定します。

指定例
$VariableX/*[local-name()='loop-element' and namespace-uri()='http://example.com/sample']/*[local-name()='child-element' and namespace-uri()='http://example.com/sample']
繰り返し要素のノードを複数指定する場合
指定方法
($variableName/locationPath | $variableName/locationPath)
  • variableName:変数名を指定します。

  • locationPath:XMLスキーマのノードを示す繰り返し要素のパス([変数の表示]ダイアログの[選択パス]で取得したパス)を指定します。

指定例
($VariableX/*[local-name()='loop-element' and namespace-uri()='http://example.com/sample']/*[local-name()='child-element' and namespace-uri()='http://example.com/sample'][1] | $VariableX/*[local-name()='loop-element' and namespace-uri()='http://example.com/sample']/*[local-name()='child-element' and namespace-uri()='http://example.com/sample'][3])
特定の範囲の繰り返し要素のノードを指定する場合
指定方法(範囲指定)
$variableName/locationPath[position()<10]
  • variableName:変数名を指定します。

  • locationPath:XMLスキーマのノードを示す繰り返し対象のパス([変数の表示]ダイアログの[選択パス]で取得したパス)を指定します。

指定例
$VariableX/*[local-name()='loop-element' and namespace-uri()='http://example.com/sample']/*[local-name()='child-element' and namespace-uri()='http://example.com/sample'][position()<10]

(3) 拡張関数

拡張関数には,次に示す(i)〜(v)の5つがあります。拡張関数の形式,引数,および拡張関数を使用する場合の注意事項を説明します。

(i) bpws:getVariableProperty

形式

bpws:getVariableProperty('variableName','propertyName')

引数
variableName

変数名を指定します。

propertyName

variableNameで指定した変数内で定義されている,xml型以外の部分名を指定します。

(ii) csc:getVariableData

形式

csc:getVariableData('variableName','locationPath')

引数
variableName

変数名を指定します。

locationPath

XMLスキーマのノードを示すパスを指定します。

注意事項
  • 変数がメッセージ型以外の場合,引数にはvariableNameだけを指定してください。

  • 変数がメッセージ型以外の場合,関数は変数の型に応じたデータ型を返します。

  • variableNameで指定した変数のデータに対して,locationPathで指定したパスを評価した結果は,文字列型(java.lang.Stringへマッピング)で返します。

  • locationPathに「'」を含む場合,locationPathを「"」で囲んでください。

(iii) getMessageInitialize

形式

csc:getMessageInitialize('variableName')

引数
variableName

変数名を指定します。

注意事項
  • variableNameに指定する変数のvariable要素は,xml型で定義してください。

  • variableNameに指定した変数の初期化状態は,boolean型で返します。

    初期化済みの場合:true

    未初期化の場合:false

(iv) getHexVariableData

形式

csc:getHexVariableData('variableName','beginIndex','compNumber')

引数
variableName

変数名を指定します。

beginIndex

取得開始位置のバイト数を指定します。

compNumber

取得するバイト数を指定します。

注意事項
  • beginIndexには0以上,compNumberには1以上の値を指定できます。ただし,beginIndexの値とcompNumberの値を足した数が,variableNameに指定した変数のバイト数より小さくなるよう指定してください。beginIndexの値とcompNumberの値を足した数が,variableNameに指定した変数のバイト数以上の場合は,XPathFunctionExceptionが発生します。

  • beginIndexおよびcompNumberに数値以外の値を指定した場合,XPathFunctionExceptionが発生します。

  • variableNameに変数として存在しない値を指定した場合,XPathFunctionExceptionが発生します。

(v) getHexString

形式

csc:getHexString('convertString','characterCode')

引数
convertString

16進数形式に変換する文字列を指定します。

characterCode

文字列からバイトデータを取得する際に使用する文字コードを指定します。

注意事項
  • convertStringに空文字('')を指定した場合は,処理結果として空文字を返します。

  • 変数を使用する環境のJavaVMが対応する文字コード以外をcharacterCodeに設定した場合,XPathFunctionExceptionが発生します。