10.2 ECMAScriptの例

この項では、ECMAScriptを使って実行できる一般的な操作の例を紹介します。

10.2.1 一般的な例

ECMA式ビルダで関数を作成する場合、次のようにインライン関数を作成します。

function abc() { var v1 = "" ; for ( i = 0; i < 9 ; i++) v1 += "$"; return v1; } ; abc();

10.2.2 フローデータの例

この項では、フローデータオブジェクトの使用方法を示すスクリプティングの例を紹介します。

フローデータ変数の値の取得

先ほどの例では、ApprovalStatusという属性を持つstart_reasonというXML要素とその子要素approval_reasonを作成して、フローデータに承認ステータスの情報を入力しました。AprovalStatus属性の値を取得するには、前動作マップ内で次の式を使用します。

flowdata.get('start_reason/approval_reason/@ApprovalStatus')

この式を入力するには、ECMA式ビルダの[ECMAScript変数]ペインで、[フローデータ]ノードを展開して、[ApprovalStatus]属性をダブルクリックします。

図 10-3 属性の選択

子要素を持つXML要素を作成し、フローデータに追加する

先ほどの例では、ApprovalStatusというフォームフィールドへのユーザ入力を取得しました。ここでは、この情報をフローデータに追加し、ダウンストリームのアクティビティで使用できるようにします。後動作マップ内で次の式を使用します。

flowdata.start_reason/approval_reason/@ApprovalStatus

10.2.3 フォームコントロールの例

この項では、フォームコントロールを使ったスクリプティングの例を紹介します。

フォームフィールドの値の取得

ApprovalStatusという名前のフォームフィールドがあるとします。 このフィールドの値を取得するには、前動作マップで次の式を使用します。

process.get('ApprovalStatus')

この式を入力するには、ECMA式ビルダの[ECMAScript変数]ペインで、[プロセス]ノードを開き、[ApprovalStatus]をダブルクリックします。

複数値コントロールからの個々の値の取得

複数値コントロール(たとえば[colors]というチェックボックス)からの個々の値を取得するには、まずそのコントロールをフローデータに追加する必要があります。アップストリームアクティビティの後動作マッピングで次の式を使用します。

flowdata.colors

[colors]から1つの値(たとえば最初の値)を取得するには、ダウンロードストリームアクティビティで次の式を使用します。

flowdata.getObject(‘colors[1]’)

リストやチェックボックス項目にデータを取り込む

スクリプトを使ってリストコントロール(PickList、MVEditorなど)や[MVCheckbox]コントロールにデータを取り込むには、前動作マッピングで次のような式を使用します。

function list() {var l=new java.util.Vector();l.add(‘Blue’);l.add(‘Red’); l.add(‘Green’); return l;} list();

DNの比較

複数のDNを比較してそれらが等しいかどうかを確認するには、次のような式を使用します。

if ( IDVault.DNcompare(flowdata.get('Activity3/CardRequest/Candidate'),recipient )) true; else false ;

この比較では、大文字と小文字は区別されません。たとえば、DNCompareで次のDNを比較した場合、Trueが返されます。

CN=jdoe,ou=users,ou=idmsample,o=acmecn=JDOE,ou=users,ou=idmsample,o=acme

10.2.4 エラー処理

エラー処理の方法は、前動作マップと後動作マップで異なります。後動作マップの場合、承認アクティビティまたは条件アクティビティのエラーフローパスを使って、後動作マッピング中に発生したエラーをキャッチできます。この方法は、前動作マップでは使用できません。なぜなら、データ取得の処理中のエラーは、フォームがユーザに表示される前に発生するからです。この場合、フォーム下部のフォームコントロールの代わりに、次のようなエラーメッセージがユーザに表示されます。

XXXX FAILED to generate form due to: No data items are available!

このシナリオでは、前動作マップ内のフィールドのソース式でtry-catchステートメントを使用できます。

function getTheData() {   var theData;   try {      theData = IDVault.get( 'cn=jsmith,ou=users,ou=idmsample1,o=acme' , 'user', 'FirstName') + ' ' + IDVault.get ( 'cn=jsmith,ou=users,ou=idmsample1,o=acme'  , 'user', 'LastName');     }   catch (error) { theData = 'Error retrieving data.'; }   return theData;};getTheData();