![]() | |
Sun™ Identity Manager 8.0 ワークフロー、フォーム、およびビュー |
第 4 章
XPRESS 言語この章では、式とスクリプトを記述するための XML ベースの言語、XPRESS の基本機能について説明します。この言語で記述されたステートメントは式と呼ばれ、フォームにデータ変換機能を追加したり、ワークフローやフォームなどのオブジェクトに状態遷移ロジックを組み込んだりするために、Identity Manager 全体で使用されます。
この章の内容
この章で説明する主な内容は次のとおりです。
XPRESS 言語についてXPRESS は、XML に基づいた構文を使用する関数言語です。この言語で記述されるすべてのステートメントは、0 個以上の引数をとる関数を呼び出し、値を返します。Identity Manager には多数の関数が組み込まれているだけでなく、新しい関数を定義することもできます。XPRESS は、式の中で任意の Java クラスでのメソッドの呼び出しと、JavaScript の評価もサポートします。
プレフィックス表記
XPRESS 言語は、関数の呼び出しと、C などの言語が式の演算子として参照する内容を区別しません。このため、プレフィックス表記と呼ばれる構文スタイルが採用されています。プレフィックス表記は、式の演算子を記述したあとにオペランドを続けるという点で一般的なインフィックス表記とは異なります。たとえば、インフィックス表記を使用して C 言語で記述された簡単な論理式を考えてみましょう。
x == 42
このステートメントを、プレフィックス表記を使用した C 言語で記述すると、次のようになります。
== x 42
C 言語に式の演算子がなく、関数だけを利用できる場合は、このステートメントは次のように表記されます。
equals(x, 42)
式を記述するのではなく、関数を呼び出すという観点に立つと、プレフィックス表記は簡単に理解できます。
XML 構文と例
XPRESS は、解析と操作が簡単で、Identity Manager で使用されるその他の XML 表記に自然に組み込むことができる XML 構文を使用します。XML 要素の名前は、呼び出す関数の名前です。入れ子構造に含まれる要素は、関数に渡される引数です。また、各要素には、開始と終了のタグがあります (次の例では、<add></add>)。
例
<add> <ref>counter</ref> <i>10</i> </add>
この例の <add> 要素は、add という関数の呼び出しを表します。この関数には、2 つの引数が渡されます。
add 関数から返される値は、counter 変数の現在値に整数 10 を加えた結果となります。すべての関数呼び出しは、値を返すか、またはいずれかの引数に対する処理を実行します。たとえば、ref の呼び出しによってカウンタの値が得られると、<i> 呼び出しは整数 10 を返し、<add> 呼び出しは 2 つの呼び出しの結果を合計します。
次の例は、古典的な Hello World プログラムです。これは、XPRESS では次のように表記されます。
<print><s>Hello World!</s></print>
Identity Manager との統合
XPRESS はスタンドアロンインタプリタでも使用できますが、通常は、動作の制御とカスタマイズに XPRESS ステートメントを使用するアプリケーションに組み込まれます。このようなアプリケーションをホストアプリケーションと呼びます。Identity Managerシステムで利用される 2 つの重要なホストアプリケーションは、ワークフローとフォームです。
ホストアプリケーションは XPRESS インタプリタへの呼び出しを作成し、このインタプリタにサービスを提供します。ホストアプリケーションが提供する重要なサービスの 1 つに、外部変数参照の解決があります。多くの式は、式に定義されていない変数を参照します。これらの変数の値は、ホストアプリケーションによって提供されます。ワークフローホストアプリケーションでは、式は、ワークフロープロセスに定義されているあらゆる変数を参照できます。フォームホストアプリケーションでは、式は、フォームフィールドのあらゆる値、または式の評価前に設定される defvar の値を参照できます。
式を使用する理由
式は、主に次のタスクに使用されます。
ワークフロースクリプトとフォームの編集での式の使用については、第 1 章「ワークフロー」を参照してください。
式の操作ここでは、Identity Manager での一般的な式の使用、特に次の内容について説明します。
フィールドの可視性の制御
フォームの設計でよく問題となるのは、特定の条件と一致するまで、一部のフィールドの表示を抑制する必要がある場合です。たとえば、特定のリソースに固有のフィールドは、そのリソースがユーザーに割り当てられた場合にのみ意味を持ちます。このようなフィールドは、そのようなリソースが割り当てられた場合にのみ表示されるようにします。それ以外の場合は、これらのフィールドが表示されないようにし、評価の対象からも外します。次の例は、このようなフィールドの可視性を制御するために、<Disable> 要素内の式を使用するフィールド定義を示しています。
<Disable> 要素は、フォーム XML 言語の一部です。<Disable> 要素には、XPRESS 言語で記述された任意の式を含めることができます。この例の式は、accountInfo.typeNames という外部変数に格納されているリストに、Solaris という文字列が含まれているかどうかを確認します。フォームでは、この変数には、ユーザーに現在割り当てられているすべてのリソースタイプのリストが格納されます。
画面表示のためにフォームが処理されると、<Disable> 要素に定義されている式が評価されます。true が返される場合は、このフィールドは表示されません。
NULL および 0 という値は、論理 false を表します。NULL 以外またはゼロ以外の値が設定されたフィールドは、論理 true を表します。つまり、<s>false</s> という式で表される文字列は、NULL 値ではないので、論理 true となります。
フィールド宣言に指定された Derivation、Default、Expansion のいずれかの要素を使った XPRESS によりフィールド値を算出することができます。
フィールドのデフォルト値の計算
フィールドの値は、別のフィールドから計算することも、<Default> 要素を使用して初期値として単純に設定することもできます。<Default> 要素は、編集可能なフィールドの初期化でよく使用され、フィールドにまだ値が割り当てられていない場合にのみ評価されます。また、<Default> 要素は、ユーザーの姓と名に基づいてアカウント ID を算出する場合にもよく使用されます。次の例は、文字列操作式を使用して、ユーザーの名の頭文字と姓を組み合わせたデフォルトのアカウント ID を算出するフィールド定義を示しています。
<Field name='waveset.accountId'>
<Display class='Text'/>
<Property name='title' value='AccountID'/>
</Display>
<Default>
<concat>
<substr>
<ref>accounts[AD].firstname</ref>
<i>0</i>
<i>1</i>
</substr>
<ref>accounts[AD].lastname</ref>
</concat>
</Default>
</Field>
<Default> 要素は、フォーム XML 言語の一部です。この要素には、XPRESS 式か、または XML オブジェクトという別の言語で表現された要素を含めることができます。XML オブジェクト言語の詳細については、「XML オブジェクト言語」の章を参照してください。
このフィールドを処理すると、システムはまず、waveset.accountId 属性にすでに値が設定されているかどうかを確認します。値が存在しない場合は、<Default> 要素内の式を評価します。この例では、名の頭文字と姓を組み合わせることで値が計算されます。
次の例のように、firstname フィールドと lastname フィールドに値が設定されていることを確認しなければならない場合もあります。
<cond>
<and>
<notnull><ref>accounts[AD].firstname</ref></notnull>
<notnull><ref>accounts[AD].lastname</ref></notnull>
</and>
<concat>
<substr>
<ref>accounts[AD].firstname</ref>
<i>0</i>
<i>1</i>
</substr>
<ref>accounts[AD].lastname</ref>
</concat>
</cond>
このコード例は、その他のプログラミング言語の IF-THEN ステートメントのように構築されています。この cond 式には、次の 2 つの引数があります。
まず、条件式が評価されます。この式の結果が論理 true であれば、cond の値が THEN 式の値となります。条件式の結果が false となる場合は、cond の値は NULL になります。
この例の cond ステートメントは、2 つのアカウント属性に値が設定されていることを確認した上で、それぞれの値を使用して accountID を計算します。Default 式は、前提条件が最終的に満たされるまで、またはユーザーがフィールドに値を指定するまで、フォームの表示を更新またはフォームを保存するたびに評価されます。関連するフィールドに NULL 以外の値が設定されている場合は、Default 式は評価されません。
フィールド値の導出
<Derivation> 式は <Default> 式に似ていますが、フィールドに NULL 以外の値が設定されている場合でもフィールドの値を常に計算するという点で異なっています。一般的には、別のフィールドの値によって値が置き換えられるフィールドの表示に使用されます。これは、リソースの属性値がエンコードされ、ユーザーに明示されない場合に有効な設計機能です。
次の例は、条件ロジックを使用して、値のセットを別のセットにマップするフィールド定義を示しています。
<Field name='location' prompt='Location'>
<Display class='Text'/>
<Derivation>
<switch>
<ref>accounts[Oracle].locCode</ref>
<case>
<s>AUS</s>
<s>Austin</s>
</case>
<case>
<s>HOU</s>
<s>Houston</s>
</case>
<case>
<s>DAL</s>
<s>Dallas</s>
</case>
<case default='true'>
<s>unknown</s>
</case>
</switch>
</Derivation>
</Field>
<Derivation> 要素は、式を含めることができるフォーム XML 言語の一部です。このフィールドを処理すると、<Derivation> 要素内の式が評価され、このフィールドに表示される値が決定されます。
この例では、リソースアカウント属性 accounts[Oracle].locCode の値と、各 case 式の最初の値が比較されます。一致が見つかると、switch 式の結果は、一致した case 式の 2 番目の値となります。一致が見つからない場合、switch 式の結果は、デフォルトの case 式の値となります。
フィールド値の生成
一部のフォームでは、最初は抽象的に生成されたフィールドのセットをユーザーに表示し、その後のフォームの送信時に、また別の、具体的なリソースアカウントの属性値のセットを生成することが必要となる場合があります。これは、フォームの展開と呼ばれます。<Expansion> 要素は、通常は、フォーム内の編集可能フィールドに依存する非表示フィールドで使用されます。<Expansion> 要素の目的の 1 つは、エンドユーザーが慣れ親しんだ判読可能な形式のデータを、リソースが認識できる形式のデータに変換することです。たとえば、ユーザーはフォームでマネージャーのフルネームを確認できますが、システムが受け取るのは、そのマネージャーを認識するための一意の ID です。
次の例は、条件ロジックを使用して、前述の例の location フィールドから得られる値を、3 文字の略号に変換するフィールド定義を示しています。
<Field name='accounts[Oracle].locCode'>
<Expansion>
<switch>
<ref>location</ref>
<case>
<s>Austin</s>
<s>AUS</s>
</case>
<case>
<s>Houston</s>
<s>HOU</s>
</case>
<case>
<s>Dallas</s>
<s>DAL</s>
</case>
</switch>
</Expansion>
</Field>
<Expansion> 要素は、式を含めることができるフォーム XML 言語の一部です。このフィールドを処理すると、<Expansion> 要素内の式が評価され、このフィールドの値が決定されます。
この例では、location フィールドによるマッピングとは逆のマッピングが行われます。また、Display クラスが割り当てられていないため、このフィールドは非表示になります。Display クラスを取り除くことで、フィールドはフォームに表示されなくなります。ただし、フィールドは依然としてフォームのアクティブな部分と見なされ、<Expansion> 式を利用してリソース属性の値を生成します。
注
ユーザービュー以外のすべてのフォームでは、Expansion 規則は、ページを再計算するとき、またはフォームを保存するときに実行されます。ユーザービューでは、ユーザーフォームを最初に読み込むときにも <Expansion> タグが実行されます。
ワークフローの遷移条件
ワークフロープロセスを定義するときは、あるワークフローアクティビティーから別のワークフローアクティビティーにコントロールを移行するための規則を指定します。2 つのアクティビティー間の移行を遷移と呼びます。遷移の使用を制御する規則は、遷移条件と呼ばれます。
たとえば、次のようなアクティビティー定義を考えてみましょう。
<Activity name='Check Results'>
<Transition to='Log Errors'>
<gt> <ref>ERROR_COUNT</ref> <i>0</i> </gt>
</Transition>
<Transition to='end'/>
</Activity>
このアクティビティーは Log Errors と end という別々のアクティビティーへの 2 つの異なる遷移を定義しています。ワークフローがこのアクティビティーを処理するときは、条件が true を返す最初の遷移が採用されます。
この例の最初の遷移には、ERROR_COUNT 変数の値がゼロより大きいかどうかを調べる条件が設定されています。この遷移は、エラーカウントが正の値である場合にのみ採用されます。2 番目の遷移には、条件は設定されていません。このため、最初の遷移条件の結果が false となる場合は、常にこの遷移が採用されます。
ワークフローアクション
ワークフローアクティビティーは、1 つまたは複数のアクションを実行できます。アクションの 1 つに XPRESS 式の評価があります。次に例を示します。
<Activity name='Increment Counter'>
<Action>
<expression>
<set name='counter'>
<add> <ref>counter</ref> <i>1</i> </add>
</set>
</expression>
</Action>
<Transition to='Next'/>
</Activity>
XPRESS によってワークフローアクションが実装されると、XPRESS 式は expression 要素に囲まれ、Action 要素内に配置されます。この例では、式は counter という変数の現在値を参照して、その値に 1 を追加し、加算後の値を同名の変数に割り当てます。
ワークフローアクションからの Java メソッドの呼び出し
複雑なワークフローアクションは、Java によって実装できます。複雑なワークフローアクションの代表的な例には、リレーショナルデータベースへのデータの格納や、ヘルプデスクシステムへのメッセージの送信などがあります。これらの Java クラスは、XPRESS を使用してワークフローに統合できます。
<Activity name='Log Status'>
<Action>
<expression>
<invoke name='logStatus'
class='custom.OracleStatusLog'>
<ref>accountId</ref>
<ref>email</ref>
<ref>status</ref>
</invoke>
</expression>
</Action>
<Transition to='Next'/>
</Activity>
この例では、カスタム Java クラス custom.OracleStatusLog に定義されている logStatus という静的なメソッドが、XPRESS の invoke 関数を使用して呼び出されます。このメソッドに渡される 3 つの引数は、ワークフロー変数から取得された値です。
このような場合、主な計算は Java クラスで実行され、XPRESS によってそのクラスがワークフローに統合されます。
式の検証
式の検証は、次の 2 段階で行われます。
lh コマンドによる式構文の検証
ロジックを実際に評価せずに、式の XML 構文を検証する方法は次のとおりです。
XPRESS 評価のトレース
式を正しく記述し、それをリポジトリに格納すると、XPRESS トレースを有効にして、式が正しく機能するかどうかを確認することができます。XPRESS トレースメッセージは、標準出力デバイスに送信されます。多くの場合、XPRESS はアプリケーションサーバー内で評価されるため、トレースメッセージはコンソールウィンドウ、またはアプリケーションサーバーの起動時にアクティブであったログファイルに出力されます。
XPRESS トレースには、次の 2 つの形式があります。
トレース出力の量を減らして分析しやすくできるため、通常はブロックレベルトレースが利用されます。
トレースの有効化
グローバルトレースを有効にするには、Waveset.properties ファイルの xpress.trace というエントリの値を true に設定します。アプリケーションサーバーの稼動中、Waveset.properties ファイルに変更を加えたときは、アプリケーションサーバーを再起動するか、「デバッグ」ページの「Reload Properties」をクリックしてください。
ブロックレベルトレースを実行するときは、トレースする式を <block> 要素で囲みます。ブロックの開始タグには、trace='true' という属性を設定してください。
<block trace='true'>
<invoke name='getTime' class='java.util.Date'/>
</block>
or
<Default>
<block trace='true'>
<ref>global.accountId</ref>
</block>
</Default>無効な設定の例
<block> 要素を、次のように使用しないでください。
<block trace='true'>
<Field name ='field1'>
...</Field>
</block>
or
<Field name='Field2'>
<block trace='true'>
<Default>
<ref>global.accounts</ref>
</Default>
</block>
</Field>トレースメッセージには、関数名、各引数の値、戻り値が含まれます。
XPRESS のトレースを無効にするときは、xpress.trace の値を false に変更し、Waveset.properties ファイルを読み込みなおします。
関数Identity Manager には、式で使用できる XPRESS 関数のライブラリが含まれます。これらの関数は、次のように分類されます。
値コンストラクタ式
XPRESS では、リテラル値は XML 要素内のテキストとして記述されます。要素名は関数の名前で、リテラルテキストはその関数の引数として扱われます。次に、簡単な原子データ型を構成する関数の例を示します。
array 関数
各引数式を評価し、その戻り値を連結することで、list 型の値を構成します。この関数は、複数の引数をとることができます。NULL 値はフィルタリングされません。
例
<array>
<s>apples</s>
<s>oranges</s>
<s>wiper blades</s>
</array>
i 関数
整数値を構成します。この関数は 1 つの引数をとり、その引数がリテラルテキストとして扱われます。テキストに含めることができるのは数値のみで、オプションとして先頭にプラスまたはマイナス記号を追加できます。
例 1
<i>0</i>
例 2
<i>42</i>
例 3
<i>-1234</i>
list 関数
各引数式を評価し、その戻り値を連結することで、list 型の値を構成します。この関数は、複数の引数をとることができます。NULL 値はフィルタリングされません。
例
<list>
<s>apples</s>
<s>oranges</s>
<s>wiper blades</s>
</list>map 関数
キーと値の部分式のペアから構成されるマップを作成します。
例
<map>
<!--キー 1-->
<!--値 1-->
<!--キー n-->
<!--値 n-->
</map>
null 関数
NULL 値を構成します。
例 1
<null/>
例 2
<null></null>
s 関数
文字列値を構成します。この関数は 1 つの引数をとり、その引数がリテラルテキストとして扱われます。文字列の長さは、Java 環境で利用できる隣接メモリーの容量のみによって制限されます。
例
<s>Now is the time</s>
演算式
式で演算処理を行うには、次の関数を使用します。
add 関数
すべての引数の値に整数を加算します。整数以外の引数は、強制的に整数として扱われます。
例
次の式の結果は、整数 (42) となります。
<add> <i>40</i> <i>1</i> <s>1</s> </add>
div 関数
すべての引数の値を整数値で割ります。整数以外の引数は、強制的に整数として扱われます。
例
次の式の結果は、整数 (42) となります。
<div> <i>84</i> <i>2</i> </div>
mod 関数
すべての引数の値を、整数値でモジュロ演算します。引数の値は、強制的に整数として扱われます。NULL が指定された引数は無視されます。
例
次の式の結果は、整数 (42) となります。
<mod> <i>142</i> <i>100</i> </mod>
mult 関数
すべての引数の値に整数値を掛けます。整数以外の引数は、強制的に整数として扱われます。
例
次の式の結果は、整数 (42) となります。
<mult> <i>7</i> <i>3</i> <i>2</i> </mult>
sub 関数
すべての引数の値を整数値で減算します。整数以外の引数は、強制的に整数として扱われます。
例
次の式の結果は、整数 (42) となります。
<sub> <i>50</i> <i>6</i> <i>2</i> </sub>
論理式
式で論理操作を行うには、次の関数を使用します。ほとんどの論理関数は、true または false を表す 1 および 0 を返します。例外は、cmp、ncmp、and、および or です。
and 関数
すべての引数の値を取得し、いずれかの引数値が論理 false である場合にゼロを返します。1 つの子が false と評価された場合は、後続の子は評価されません。すべての引数が論理 true となる場合は、最後の引数の値が返されます。ゼロ (<i>0</i> または <s>0</s>) と <null> は論理 false と見なされます。
例 1
次の式はゼロを返します。
<and> <i>42</i> <s>cat</s> <i>null</i> </and>
例 2
次の式は cat を返します。
<and> <i>42</i> <s>cat</s> </and>
cmp 関数
2 つの文字列値を比較します。この関数を使用して、文字列のリストをソートできます。
この関数から返される値は次のとおりです。
引数の値は、必要に応じて、強制的に文字列として扱われます。
例 1
次の式は -1 を返します。
<cmp>
<i>20</i>
<i>100</i>
</cmp>例 2
次の式は -16 を返します。この式は、r と b の間にアルファベット順序の違いがあることを示します。b と r の間に 16 文字分の開きがあるため、ray に対して bob を比較した場合は、-16 という値が返されます。反対に、b に対して r を比較した場合は、返される値は 16 となります。
<cmp>
<s>bob</s>
<s>ray</s>
</cmp>例 3
次の式は 0 (ゼロ) を返します。
<cmp>
<s>daryl</s>
<s>daryl</s>
</cmp>eq 関数
等価性を検証します。この関数は、通常は 2 つの値をとりますが、複数の値をとることもできます。等価性の検証方法は、最初の引数のデータ型によって決定されます。最初の引数のデータ型に応じて、検証方法が次のように切り替わります。
この関数から返される値は次のとおりです。
0 - ステートメントが論理 false となる
1 - ステートメントが論理 true となる
例
<eq> <ref>role</ref> <s>engineering</s> </eq>
gt 関数
2 つの引数をとります。
この関数から返される値は次のとおりです。
例
<gt>
<ref>age</ref>
<i>42</i>
</gt>gte 関数
2 つの引数をとります。
この関数から返される値は次のとおりです。
例
次の式は 1 を返します。
<gte>
<i>10</i>
<i>5</i>
</gte>isFalse 関数
0 と 1 の数値ではなく、true と false の文字列で表現されるブール型の値を参照するときに使用されます。1 つの引数をとります。
この関数から返される値は次のとおりです。
例
次の式は 1 を返します。
<isFalse>
<s>false</s>
</isFalse>isnull 関数
1 つの引数をとります。
この関数から返される値は次のとおりです。
例 1
次の式は 1 を返します。
<isnull> <null/> </isnull>
例 2
次の式は 0 を返します。
<isnull> <i>0</i> </isnull>
isTrue 関数
0 と 1 の数値ではなく、true と false の文字列で表現されるブール型の値を参照するときに使用されます。1 つの引数をとります。
この関数から返される値は次のとおりです。
例
次の式は 0 を返します。
<isTrue>
<s>false</s>
</isTrue>lt 関数
2 つの引数をとります。
この関数から返される値は次のとおりです。
例 1
次の式は 0 (ゼロ) を返します。
<lt>
<i>10</i>
<i>5</i>
</lt>例 2
次の式は 1 を返します。
<lt>
<i>5</i>
<i>10</i>
</lt>lte 関数
2 つの引数をとります。
この関数から返される値は次のとおりです。
例
<lte>
<ref>age</ref>
<i>42</i>
</lte>ncmp 関数
大文字と小文字を区別せずに、2 つの文字列値を比較します。
この関数から返される値は次のとおりです。
引数の値は、必要に応じて、強制的に文字列として扱われます。
例
次の式は 0 を返します。
<ncmp>
<s>Daryl</s>
<s>daryl</s>
</ncmp>neq 関数
非等価性を検証します。この関数は、eq 関数で行われる等価性検証の否定形のように機能します。
この関数から返される値は次のとおりです。
例
<neq>
<ref>role</ref>
<s>management</s>
</neq>not 関数
入れ子構造の式のロジックを反転させます。
この関数から返される値は次のとおりです。
例
次の例は 1 を返します。
<not> <eq> <i>42</i> <i>24</i> </eq> </not>
or 関数
複数の引数をとります。
この関数から返される値は次のとおりです。
0 - すべての引数の値が論理 false となる
式の中で最初に論理 true と評価される引数の値
例 1
次の式は論理 false となり、0 を返します。
<or> <i>0</i> <i>0</i> </or>
例 2
次の式は、論理 true となる cat という文字列を返します。
<or> <i>0</i> <s>cat</s> </or>
notnull 関数
1 つの引数をとります。
この関数から返される値は次のとおりです。
0 - 引数の値が NULL である
1 - 引数の値が NULL 以外である
例 1
次の式は、firstname に値が設定されている場合は 1 を返し、firstname が NULL の場合は 0 (ゼロ) を返します。
<notnull>
<ref>firstname</ref>
</notnull>例 2
次の式は、値が NULL であるため、0 を返します。
<notnull><null/></notnull>
文字列操作式
式で文字列操作を行うには、次の関数を使用します。
indexOf 関数
別の文字列に含まれる、指定文字列の位置を返します。
例
次の関数は 3 を返します。
<indexOf>
<s>abcabc</s>
<s>abc</s><s>l</s>
</indexOf>concat 関数
複数の文字列値を連結します。
例
次の式は、<s>Now is the time</s> という文字列を返します。
<concat>
<s>Now </s><s>is </s><s>the </s><s>time</s>
</concat>downcase 関数
強制的に文字列として扱われる、1 つの引数をとります。この関数は、すべての大文字を小文字に変換した状態で、引数の値を返します。
例
次の式は <s>abc</s> を返します。
<downcase><s>ABC</s></downcase>
length 関数
リスト内の要素の数を返します。この関数を使用して、文字列の長さを取得することもできます。
最初の引数 - リストまたは文字列
例 1
次の式は 2 を返します。
<length>
<list>
<s>apples</s>
<s>oranges</s>
</list>
</length>例 2
<length>
<s>Hello world!</s>
</length>この式は、11 という値を返します。
ltrim 関数
強制的に文字列として扱われる、1 つの引数をとります。
この関数は、先頭の空白文字を削除した状態で、引数の値を返します。
例
次の式は <s>hello</s> を返します。
<ltrim><s> hello</s></ltrim>
match 関数
非推奨です。代わりに、contains 関数を使用してください。
message 関数
メッセージカタログキーによってメッセージをフォーマットします。
例
<message severity-賓kname=疋EFAULT_MESSAGEgt;
<!--メッセージパラメータ 0-->
<!--メッセージパラメータ n-->
</message>
pad 関数
文字列が指定の長さになるように、文字列に空白文字を挿入します。
最初の引数 - pad 文字が挿入される文字列
2 番目の引数 - 指定する文字列の長さ
3 番目の引数 - (省略可能) pad 文字 (デフォルトは空白文字)
例
次の式は <s> email </s> を返します。
<pad>
<s> email</s>
<i>10</i>
</pad>rtrim 関数
強制的に文字列として扱われる、1 つの引数をとります。この関数は、最後に続く空白文字を削除した状態で、引数の値を返します。
例
次の例は 0 (ゼロ) を返します。
<cmp>
<s>hello</s><rtrim><s>hello </s></rtrim>
</cmp>
split 関数
文字列を文字列のリストに分割します。
最初の引数 - 分割する文字列
2 番目の引数 - 1 つまたは複数の区切り文字のセット。ここに指定された文字が文字列に含まれると、そのたびに文字列が分割されます。
区切り文字の間の各下位文字列から構成されるリストが作成されます。
例 1
<split>
<s>Austin City Limits</s>
<s> </s>
</split>この式は、次のリストを返します。
<list>
<s>Austin</s>
<s>City</s>
<s>Limits</s>
</list>例 2
次の式では、複数の区切り文字が使用されます。
<split>
<s>(512)338-1818</s>
<s>()-</s>
</split>この式は、次のリストを返します。
<list>
<s>512</s>
<s>338</s>
<s>1818</s>
</list>substr 関数
文字列から文字の範囲を抽出します。
この関数には、次の 2 つの形式があります。
たとえば、次の 2 つは同じ呼び出しを表します。
<substr>
<s>Hello World</s>
<i>3</i>
<i>4</i>
<substr>および
<substr s='3' l='4'>
<s>Hello World</s>
<substr>どちらの関数が返す文字列も lo W です。
<block>
<substr s='3' l='4'>
<s>Hello World</s> --> Hello World
</substr> --> lo W
</block> --> lo Wstart パラメータと length パラメータの指定は省略可能です。次のように文字列が substr ノードの子として文字列のみが指定され、start 引数を省略した場合を考えてみましょう。
<substr>
<s>Hello World</s>
<substr>この場合、substr ノードの s 属性も省略され、開始位置 (start) は文字列の先頭と見なされます。つまり、明示しなかった場合は、デフォルト値のゼロが適用されます。
最初の引数 - 文字列
2 番目の引数 - 開始位置
3 番目の引数 - 抽出する文字の数
例
次の式は <s>Now</s> を返します。
<substr>
<s>Now is the time</s>
<i>0</i>
<i>3</i>
</substr>次の例では、start 属性が省略されているため、0 と見なされます。
<block>
<substr l='4'>
<s>Hello World</s> --> Hello World
</substr> --> Hell
</block> --> Helllength 引数も省略できます。length 引数を省略した場合は、この関数は残りの文字列を返します。次のように、substr の子ノードとして string 引数と start 引数のみを指定する場合は、length を省略できます。
<substr>
<s>Hello World</s>
<i>3</i>
<substr>または、substr ノードで l 属性が省略されている場合にも、省略できます。次の例には length 引数が指定されていませんが、指定されている開始位置より後の残りの文字列が返されます。
<block>
<substr s='3'>
<s>Hello World</s> --> Hello World
</substr> --> lo World
</block> --> lo Worldtrim 関数
強制的に文字列として扱われる、1 つの引数をとります。
この関数は、先頭の空白文字と最後に続く空白文字を削除した状態で、引数の値を返します。
例
次の式は <s>hello</s> を返します。
<trim><s> hello </s></trim>
upcase 関数
強制的に文字列として扱われる、1 つの引数をとります。
この関数は、すべての小文字を大文字に変換した状態で、引数の値を返します。
例
次の式は <s>ABC</s> を返します。
<upcase><s>abc</s></upcase>
ztrim 関数
先頭のゼロを削除した状態で、部分式の文字列値を返します。
例
<ztrim>
<s>00000sample</s>
</ztrim>
この関数は <s>sample</s> と評価されます。
リスト操作式
ほとんどのリスト操作関数には、関数要素に name 属性が含まれているかどうかに応じて 2 つの形式があります。
関数要素に名前が含まれない場合は、新しいリストが生成されます。次の例では、someList 変数に格納されているリストの要素と 2 つの追加要素を組み合わせて、新しいリストを作成します。someList 変数の値自体は変更されません。
<append>
<ref>someList</ref>
<s>Hello</s>
<s>World</s>
</append>リスト要素を操作するときは、次の関数を使用します。
append 関数
リストに値を追加します。name 属性が指定されているかどうかに応じて、引数のリストには 2 つの形式があります。name が指定されていない場合は、最初の引数がリスト名と見なされ、残りの引数はリストに追加する要素と見なされます。返されるのは、要素が追加されたリストのコピーであり、元のリストは変更されません。name 引数が指定されている場合は、すべての引数が追加オブジェクトと見なされ、その名前の変数に格納されているリストに追加されます。この場合は、リストが直接変更されます。
例 1
次の式は、srclist 変数に格納されているリストをコピーし、1 つの要素を追加します。
<append>
<ref>srclist</ref>
<s>oranges</s>
</append>例 2
次の式は、値を追加して既存のリストを変更します。
<set name= 'somelist'>
<List>
<s>We</s>
<s>say</s>
</List>
</set><append name= 'somelist'>
<s>Hello</s>
<s>World</s>
</append>
<ref>someList</ref>appendAll 関数
複数のリストの要素をマージします。name 属性が指定されている場合は、既存のリストが変更されます。指定されていない場合は、新しいリストが作成されます。
例 1
次の式は、srclist リストの要素と 3 つの追加要素を組み合わせて、新しいリストを作成します。
<appendAll>
<ref>srclist</ref>
<list>
<s>apples</s>
<s>oranges</s>
<s>peaches</s>
</list>
</appendAll>例 2
次の式は、srclist 変数に格納されているリストに 3 つの要素を追加します。
<appendAll name='srclist'>
<list>
<s>apples</s>
<s>oranges</s>
<s>peaches</s>
</list>
</appendAll>contains 関数
最初の引数 - リストまたは文字列
2 番目の引数 - リストから検索する任意のオブジェクトまたは文字列から検索する下位文字列
この関数から返される値は次のとおりです。
1 -- 指定した値がリストに含まれる、または指定した下位文字列が文字列に含まれる
例 1
次の式は 1 を返します。
<contains>
<list>
<s>apples</s>
<s>oranges</s>
</list>
<s>apples</s>
</contains>例 2
次の式は 1 を返します。
<contains>
<s>foobar</s>
<s>foo</s>
</contains>
containsAll 関数
2 つのリスト引数をとります。
この関数から返される値は次のとおりです。
1 -- 指定したリストに、もう一方のリストのすべての要素が含まれる
0 (ゼロ) -- 指定したリストに、2 番目のリストの一部またはすべての要素が含まれない
例
次の式は 0 を返します。
<containsAll>
<ref>fruitlist</ref>
<list>
<s>oranges</s>
<s>wiper blades</s>
</list>
</containsAll>containsAny 関数
最初の引数 - 検索される側のリスト
2 番目の引数 - 最初のリストから検索する要素または要素リスト
この関数から返される値は次のとおりです。
1 -- 2 番目のリストの一部またはすべての要素が、最初のリストに含まれる
0 (ゼロ) -- 2 番目のリストのどの要素も、最初のリストに含まれない
例
次の式は 1 を返します。
<containsAny>
<ref>fruitlist</ref>
<list>
<s>oranges</s>
<s>wiper blades</s>
</list>
</containsAny>filterdup 関数
リストの重複要素をフィルタリングします。リストを指定すると、重複要素が削除された新しいリストが返されます。
例 1
<filterdup>
<list>
<s>apples</s>
<s>oranges</s>
<s>apples</s>
</list>
</filterdup>この式は、次のリストを返します。
<list>
<s>apples</s>
<s>oranges</s>
</list>例 2
この関数を使用して、新しいリストを作成する代わりに既存のリストを操作することもできます。
<filterdup name = 'namedlist'/>
filternull 関数
リストの NULL 要素をフィルタリングします。
この関数に 1 つのリストを指定すると、すべての NULL 要素が削除された 1 つのリストが返されます。
例
<filternull>
<list>
<s>apples</s>
<null>
<s>oranges</s>
<null/>
</list>
</filternull>この式は、次のリストを返します。
<list>
<s>apples</s>
<s>oranges</s>
</list>例 2
この関数を使用して、新しいリストを作成する代わりに既存のリストを操作することもできます。
<filternull name = 'namedlist'/>
expand 関数
$() 変数参照を展開した状態で、部分式の文字列値を返します。
例
<expand><s>$(sample)</s></expand>
get 関数
リスト内の n 番目の要素の値を取得します。リストのインデックスは、ゼロ (0) カウントから始まります。引数はリストと整数です。
例
<get>
<list>
<s>apples</s>
<s>oranges</s>
</list>
<i>1</i>
</get>この式は <s>oranges</s> を返します。
indexOf 関数
最初の引数 - 値が検索されるリスト
2 番目の引数 - 検索する値
3 番目の引数 - (省略可能) 開始インデックス
この関数は、指定した値がリストに存在する場合はその要素の位置番号を返し、指定した値がリストに存在しない場合は -1 を返します。
例 1
次の式は 1 を返します。
<indexOf>
<list>
<s>apples</s>
<s>oranges</s>
</list>
<s>oranges</s>
</indexOf>例 2
次の式は 3 を返します。
<indexOf>
<list
<s>apples</s>
<s>oranges</s>
</list>
<s>oranges</s>
<i>2</i>
</indexOf>
insert 関数
リストに値を挿入します。新しい要素を追加するスペースを作るために、挿入インデックスより下の要素は下に移動されます。
最初の引数 - 要素が挿入されるリスト
2 番目の引数 - 新しい要素を挿入するリスト内の位置を示す整数
3 番目の引数 - リストに挿入される値
例 1
<insert>
<list>
<s>apples</s>
<s>oranges</s>
</list>
<i>1</i>
<s>wiper blades</s>
</insert>この式は、次のリストを返します。
<list>
<s>apples</s>
<s>wiper blades</s>
<s>oranges</s>
</list>この関数は名前付きリストをとることもできます。
<insert name='name_of_list'>
<! -- リストを挿入する位置>
<! -- 挿入する値>
</insert>
例 2
<insert name=夫ariable name of listgt;
<!-- 挿入位置 -->
<--! 挿入する値 -->
</insert>
length 関数
リスト内の要素の数を返します。この関数を使用して、文字列の長さを取得することもできます。
最初の引数 - リストまたは文字列
例 1
次の式は 2 を返します。
<length>
<list>
<s>apples</s>
<s>oranges</s>
</list>
</length>例 2
<length>
<s>Hello world!</s>
</length>この式は、11 という値を返します。
remove 関数
リストから 1 つまたは複数の要素を削除します。name 属性が指定されているかどうかに応じて、引数のリストには 2 つの形式があります。name が指定されていない場合は、最初の引数がリスト名と見なされ、残りの引数はリストから削除する要素と見なされます。返されるのは、要素が削除されたリストのコピーです。元のリストは変更されません。name 引数が指定されている場合は、すべての引数が削除オブジェクトと見なされ、その名前の変数に格納されているリストから削除されます。この場合は、リストが直接変更されます。
例 1
次の式は、srclist 変数に格納されているリストをコピーして、1 つの要素を削除し、結果リストを返します。
<remove>
<ref>srclist</ref>
<s>oranges</s>
</remove>例 2
次の式は、値を削除して既存のリストを変更します。
<set name= 'somelist'>
<List>
<s>We</s>
<s>say</s>
</List>
</set><remove name= 'somelist'>
<s>say</s>
<s>say</s>
</remove>
<ref>someList</ref>removeAll 関数
指定したリストに含まれるすべての要素を、もう一方のリストから削除します。name 属性が指定されている場合は、既存のリストが変更されます。指定されていない場合は、新しいリストが作成されます。
例 1
次の式は、srclist リストの要素から 3 つの要素を削除して、新しいリストを作成します。
<removeAll>
<ref>srclist</ref>
<list>
<s>apples</s>
<s>oranges</s>
<s>peaches</s>
</list>
</removeAll>例 2
次の式は、srclist 変数に格納されているリストから 3 つの要素を削除します。
<removeAll name='srclist'>
<list>
<s>apples</s>
<s>oranges</s>
<s>peaches</s>
</list>
</removeAll>この式によって、リストは次のように変更されます。
<list>
<s>wiper blades</s>
</list>retainAll 関数
2 つのリストの共通部分を計算し、両方のリストに含まれる要素を返します。
この関数には 2 つの形式があります。
例 1
名前付きリストを、このリストともう一方のリストの共通部分のリストにします。
<retainAll name=夫ariable name of listgt;
<!-- もう一方のリスト -->
</retainAll>
例 2
2 つのリストの共通部分を返します。
<retainAll>
<!-- 最初のリスト>
<!-- 2 番目のリスト -->
</retainAll>
setlist 関数
リスト内の指定位置に値を割り当て、現在の値を上書きします。インデックスが付けられた要素を含めるために必要となる場合は、リストが拡張されます。リストの拡張時に作成される新しい要素は、NULL になります。
最初の引数 - リスト
2 番目の引数 - 新しい要素を挿入するリスト内の位置を示す整数 (要素の位置番号はゼロから開始)
3 番目の引数 - 要素
例 1
<setlist>
<list>
<s>apples</s>
<s>oranges</s>
<s>wiper blades</s>
</list>
<i>2</i>
<s>bassoons</s>
</setlist>この式によって、リストは次のように変更され、NULL が返されます。
<list>
<s>apples</s>
<s>oranges</s>
<s>bassoons</s>
</list>例 2
<setlist>
<list>
<s>apples</s>
<s>oranges</s>
<s>wiper blades</s>
</list>
<i>5</i>
<s>bassoons</s>
</setlist>この式によって、リストは次のように変更され、NULL が返されます。
<list>
<s>apples</s>
<s>oranges</s>
<s>wiper</>
</null>
</null>
<s>bassoons</s>
</list>条件、繰り返し、およびブロックの式
式で条件処理とブロック処理を行うには、次の関数を使用します。
block 関数
複数の式を 1 つの式にグループ化します。block 関数の値は、最後の引数の値となります。
注
<set> 関数は値を返しません。block ステートメントの最後の行で set の操作が行われている場合、その block ステートメントは値を返しません。block ステートメントが変数の値を返すようにするには、block ステートメントの最後の行に <ref>variable_name</ref> を追加してください。
例
<block>
<s>Hello there!</s>
<add> <i>100</i> <i>2</i> </add>
<i>42</i>
</block>このブロックは、最後の引数の値である 42 を返します。
trace ステートメントでの block の使用例については、「デバッグと検証の式」を参照してください。
break 関数
式の早期終了を強制します。break を使用できる式は、block、dolist、while、and、or です。break 式の値は、それを含む式の値となります。オプションとしてブロック名を指定すると、break を使用して、式のいくつかのレベルを終了できます。
例 1
次の式には、ループの単純な break 終了が含まれます。
<dolist name='el'>
<ref>list</ref>
<cond><eq><ref>el</ref><s>000</s></eq>
<break>
<ref>el</ref>
</break>
</cond>
<null/>
</dolist>この例では、リストに含まれる要素に対して dolist 関数が繰り返され、000 という値が検索されます。dolist 関数の値は、各繰り返しの最後の部分式から返された値を連結して構成されたリストとなります。
例 2
次の式は、ブロック名を使用して複数のレベルを終了する例を示しています。
<block name='outer block'>
<dolist name='el'>
<ref>listOfLists</ref>
<dolist name='el2'>
<ref>el</ref>
<cond><eq><ref>el</ref><s>000</s></eq>
<break name='outer block'>
<ref>el</ref>
</break>
</cond>
</dolist>
<null/>
</dolist>
</block>ループが 2 つ存在する以外は、この式は前の例と同じです。外側のループは、それ自体がリストである要素を持つリストに対して繰り返されます。内側のループは、各要素リストに対して繰り返されます。000 という値が検出されると、両方のループが終了し、break 式の outer block というブロック名が参照されます。
cond 関数
この関数は、2 つの式の値を条件付きで選択する機能を持ちます。これは、C と Java の ternary 条件演算子 (a?b:c) と類似した機能です。
例
cond 関数は 3 つの引数をとることができます。最初の引数は条件です。条件の値が論理 true であれば、cond の値は、2 番目の引数の値となります。条件の値が false の場合は、cond の値は、3 番目の引数の値となります。条件の値が false で、3 番目の引数が指定されていない場合は、cond の値は NULL となります。
<cond>
<gt>
<ref>age</ref>
<i>40</i>
</gt>
<s>old</s>
<s>young</s>
</cond>dolist 関数
リストの要素に対して繰り返されます。name 属性の値は、ループ内で参照できる変数の名前となります。
この変数の値は、以後のリスト要素の値となります。
最初の部分式は、ループを適用するリストを返します。残りの部分式は、リスト内の要素ごとに 1 回繰り返されます。
dolist 関数の値は、各繰り返しの最後の部分式から返された値を連結して構成されたリストとなります。
例
次の式は、subset というリストを作成します。このリストには、srclist に格納されている要素の中で、値が 10 を超える要素のサブセットが含まれます。
<set name='subset'>
<dolist name='el'>
<cond>
<gt>
<ref>el</ref>
<i>10</i>
</gt>
<ref>el</ref>
</cond>
</dolist>
</set>switch 関数
最初の引数 - 任意の XPRESS 式
2 番目の引数 - 一連の <case> 要素
最初の引数が評価されてから、一致が見つかるまで各 <case> 要素と比較されます。<switch> 関数は、一致が存在する最初の <case> に評価されます。一致が見つからない場合は、<switch> は default='true' である <case> 要素に評価されます。
例
次の式は apples を返します。
<switch>
<s>A</s>
<case default='true'>
<s>unknown</s>
</case>
<case>
<s>A</s>
<s>apples</s>
</case>
<case>
<s>B</s>
<s>oranges</s>
</case>
</switch>select 関数
リスト内の最初の NULL 以外 (およびゼロ以外) の値を返します。
例
<select>
<ref>:display.session</ref>
<ref>context</ref>
</select>
次のステートメントがあるとします。
<select>
<ref>first/ref>
<ref>second</ref>
<ref>third</ref.
</select>
このステートメントはまず、first が NULL かどうかをチェックします。NULL でない場合は、first の値を返します。NULL の場合は次の項目に移り、true を返すかすべての項目をチェックするまで繰り返します。
この関数は、ワークフローなどから正しいコンテキストを取得する必要があるとき、または formUtil メソッドを呼び出すときに使用できます。
このように select を使用することで、Lighthouse コンテキストがどの変数にあるかがわからなくても、Identity Manager 内の任意の場所から formUtil メソッドを呼び出すことができます。フォームでは、<ref>:display.session</ref> を使ってコンテキストを指定します。ただしワークフローでは、同じ FormUtil 呼び出しで <ref>context</ref> を代わりに使用する必要があります。
while 関数
条件と一致するまで一連の式を繰り返します。最初の部分式は条件で、ループのたびに評価されます。条件が論理 false になると、ループは終了します。while 式の値は、最後の繰り返しでの、ループの最後の式の値となります。
例
次の式は NULL を返します。
<while>
<gt>
<ref>counter</ref>
<i>0</i>
</gt><set name='counter'>
<sub> <ref>counter</ref>
<i>1</i>
</sub>
</set>
</while>変数と関数の定義式
式で変数と関数を参照、定義するときは、次の関数を使用します。
ref 関数
変数の値を参照します。変数には、ホストアプリケーションがサポートする外部変数と、<defvar> を使用して定義される内部変数があります。
例 1
<ref>waveset.role</ref>
例 2
<defvar name='milk'><s>milkvalue</s></defvar>
<defvar name='shake'><s>milk</s></defvar>
<ref><ref>shake</ref>
<s>milkshake</s> と評価される
defvar 関数
新しい変数を定義します。定義した変数は、その変数を定義した式とそれ以降の式で自由に参照できます。変数名の指定には、XML 属性 name を使用します。
defvar ステートメント自体がその変数を参照することはできません。このような参照を設定すると、ループが生じます。
注
次のような構造は使用できません。
<defvar name='fullname'>
<ref>fullname</ref>
</defvar>または
<defvar name='counter'/>
<add><ref>counter</ref>
<i>0</i>
</add>
</defvar>
例 1
次の式は変数を定義し、2 つの要素を持つリストとしてその値を初期化します。
<defvar name='theList'>
<list>
<s>apples</s>
<s>oranges</s>
</list>
</defvar>例 2
次の式は変数を定義し、その値を整数ゼロに初期化します。
<defvar name='counter'>
<i>0</i>
</defvar>defarg 関数
<defun> を使用して定義された関数に、引数を定義します。引数は変数に似ていますが、関数に渡す順に定義する必要があります。
例
<defarg name='arg1'/>
<defarg name='arg2'/>defun 関数
新しい関数を定義します。関数の引数を宣言するときは、<defarg> 関数を使用します。関数の実行には、<call> 関数を使用します。関数は、通常はフォーム内で定義されます。
例
<defun name='add100'>
<defarg name='input'/>
<add>
<ref>input</ref>
<i>100</i>
</add>
</defun>call 関数
ユーザー定義の関数を呼び出します。呼び出しの引数には、<defarg> 関数で定義した引数が適用されます。call 関数の引数の順序は、<defarg> の順序と同じである必要があります。以前のリリースでは、call 関数を使用して規則を呼び出すことができました。今後は、rule 関数を使用してください。
例
次の式は 142 を返します。
<call name='add100'>
<i>42</i>
</call>rule 関数
規則を呼び出します。規則の引数は、argment 要素を使用して、名前で指定して割り当てます。引数の値は、単純な文字列であれば、value 属性を使用して設定できます。value 属性を省略し、argment 要素の本文に式を記述することで、引数の値をその式で計算することもできます。
呼び出す別の規則の名前を動的に計算することで、<rule> 要素は別の規則も呼び出すことができます。
フォームやワークフロー内での規則の作成または呼び出しの詳細については、「規則」の章を参照してください。
例
次の式は、指定したユーザーの従業員 ID を返します。
<rule name='getEmployeeId'>
<argument name='accountId' value='maurelius'/>
</rule>
<rule name='getEmployeeId'>
<argument name='accountId'>
<ref>username</ref>
</argument>
</rule>次の式は、返される値を計算する別の規則を呼び出します。
<rule>
<cond>
<eq><ref>var2</ref><s>specialCase</s></eq>
<s>Rule2</s>
<s>Rule1</s>
</cond>
<argument name='arg1'>
<ref>variable</ref>
</argument>
</rule>オブジェクト操作式
式に含まれる任意のオブジェクトの値を操作するときは、次の関数を使用します。
get 関数
オブジェクト内から値を取得します。
最初の引数 - リスト、マップ、またはオブジェクトである必要があります。
2 番目の引数 - 文字列または整数である必要があります。最初の引数がリストの場合は、2 番目の引数は強制的に整数と扱われ、リストのインデックスとして使用されます。最初の引数が GenericObject の場合は、2 番目の引数は JavaBean プロパティーの名前と見なされます。
最初の引数のデータ型が list である場合、この関数の動作は異なります。最初の引数が list である場合は、2 番目の引数は整数のリストインデックスと見なされます。そのインデックスに該当する要素が返されます。
例
次の式は、ユーザーに現在割り当てられているロールの名前の文字列を返します。
<get>
<!-- リスト、マップ、またはオブジェクト -->
<!-- 文字列 -->
</get>この式は、Java コードで userView.getRole() を呼び出した場合と同じ機能を持ちます。
putmap 関数
オブジェクトにマップ要素を割り当てます。
map - マップを指定します。
key - マップキーを指定します。
value - マップキーに割り当てる値を指定します。
例
<putmap>
<ref>userView</ref>
<s>waveset.role</s>
<s>engineering</s>
</putmap>
setlist 関数
オブジェクトにリスト要素を割り当てます。
list - リストを指定します
index - リスト内の要素の順序を指定します
value - リスト要素に割り当てる値を指定します
例
<setlist>
<ref>myList</ref>
<i>s</i>
<s>accounts</s>
</setlist>
setvar 関数
変数の値を設定します。この関数は、静的な変数名を受け付けます。
name - 変数の名前を指定します
value - 変数に割り当てる値を指定します
例
<setvar>
<ref>var</ref>
<s>text</s>
</setvar>
instanceof
オブジェクトが、name パラメータに指定されたタイプのインスタンスであるかどうかを判断します。
name - 調べるオブジェクトタイプを指定します。
この関数は、部分式のオブジェクトが name パラメータに指定されたタイプのインスタンスであるかどうかに応じて、1 または 0 (true または false) を返します。
例
ArrayList のデータ型は List であるため、次の式は 1 を返します。
<instanceof name='List'>
<new class='java.util.ArrayList'/>
</instanceof>Java および JavaScript 式
式で Java クラスまたは JavaScript の呼び出しと操作を行うには、次の関数を使用します。
invoke 関数
Java オブジェクトまたはクラスでメソッドを呼び出します。
この関数には、次の 2 つの形式があります。
静的メソッド
<invoke class=苗lass namename=瀕ethod namegt;
<!-- メソッド引数 0 -->
<!-- メソッド引数 n-->
</invoke>
インスタンスメソッド
<invoke class=瀕ethod namegt;
<!-- メソッドが呼び出されるオブジェクト -->
<!-- メソッド引数 0 -->
<!-- メソッド引数 n-->
</invoke>
この関数を使用するには、呼び出すクラスとメソッドの名前、それぞれがとる引数、およびメソッドの機能を理解する必要があります。この関数は、次の Identity Manager クラスの呼び出しに頻繁に使用されます。
詳細については、各クラスのドキュメントを参照してください。
new 関数
Java クラスのインスタンスを作成します。XML 属性 class を使用して指定されるクラス名は、クラスのパッケージ名で完全に修飾してください。
この関数を使用して新しいオブジェクトを作成し、メソッドを呼び出さずに、式または規則の値として返すこともできます。
例
<new class='classname'/>
<!-- コンストラクタ引数 0 -->
<!-- コンストラクタ引数 n -->
</new>
script 関数
JavaScript のフラグメントをカプセル化します。この式の評価時に、JavaScript インタプリタが呼び出され、スクリプトが処理されます。この式の値は、最後の JavaScript ステートメントの値です。スクリプト内では、env オブジェクトを使用して、ホストアプリケーション内の変数にアクセスできます。
フォームの <Disable> 式のように、パフォーマンスに大きく影響する式で JavaScript を使用することは避けてください。組み込まれているトレース機能を使用すると、短い XPRESS 式でより簡単にデバッグできます。ワークフローアクションの複雑なロジックには JavaScript を使用します。
例
<script>
var arg1 = env.get('arg1');
arg1 + 100;
</script>
<script>
importPackage(Packages.java.util);
var cal Now = Calendar.getInstance();
cal Now.getTime()
</script>デバッグと検証の式
トレースを有効にすると、豊富なトレースデータが生成されます。
式の問題の診断に役立つ式のトレース、またはテキストの出力を有効にするには、次の関数を使用します。
注
トレースをグローバルに有効化すると、出力されるトレースデータが膨大になる可能性があります。ブロックレベルでのトレースを有効にしたほうが便利なときは、ブロック要素の trace 属性を true に設定します。
trace 関数
式のトレースを有効または無効にします。引数の評価が true になると、トレースが有効になります。
トレースを有効にすると、トレースデータが標準出力に出力されます。
例 1
<trace><i>1</i></trace>
例 2
<trace><i>0</i></trace>
print 関数
各部分式の値を標準出力に出力します。
例
<print>
<s>Ashley World!</s>
</print>
データ型すべての関数は、次の表に示されるいずれかのデータ型の値を返します。
表 4-1 戻り値のデータ型
データ型
定義
integer
符号が付けられた整数値を表します。値の精度は、32 ビット以上です。
list
順序が付けられた、その他の値のリストを表します。リストに含まれる値は、要素と呼ばれます。NULL もリスト要素になることができます。要素を持たないリストの値は、NULL 値として認識されません。
null
データの欠落を表します。副次的な影響のみを目的として呼び出された場合や、指定された引数から意味のある値を計算できない場合、関数は NULL を返すことがあります。NULL 値の処理方法は、NULL 引数が渡された関数によって異なります。一般的には、NULL 値は論理 false と見なされ、演算式では無視されます。
object
XPRESS 言語以外で定義された任意のオブジェクトへの参照を表します。
string
文字列を表します。XML 構文では、文字列は常に Unicode 文字セットを使用します。string 値に文字を含めないこともできます。このような文字列は空と見なされますが、これは NULL ではありません。
一部の関数は、引数の値を論理 true または false と見なします。XPRESS では、ブール型は使用されません。その代わりに、NULL 値または整数のゼロが false と見なされます。それ以外の値は、true と解釈されます。
ブール型の値を返す eq などの論理関数は、false を表すために整数のゼロを返し、true を表すために整数の 1 を返します。