![]() | |
Sun™ Identity Manager 8.0 ワークフロー、フォーム、およびビュー |
第 5 章
XML オブジェクト言語XML オブジェクト言語は、ストリング、リスト、マップなどの一般的な Java オブジェクトを表現できる XML 要素の集合です。
この章の内容
関連する章
- 「XPRESS 言語」 - 式を使用して、フォームにロジックを設定します。
XML オブジェクト言語についてXML オブジェクトはフォームで頻繁に使用されますが、ワークフローと規則で使用することもできます。もっとも一般的な用途は、フォームの Select フィールドまたは MultiSelect フィールドで許可される値のリストの作成です。次に例を示します。
例
<Field name='global.state'>
<Display class='Select'>
<Property name='title' value='State'/>
<Property name='allowedValues'>
<List>
<String>Alabama</String>
<String>Alaska</String>
<String>Arizona</String>
<String>Arkansas</String>
<String>California</String>
<String>Washington</String>
<String>Washington D.C.</String>
<String>West Virginia</String>
<String>Wisconsin</String>
<String>Wyoming</String>
</List>
</Property>
</Display>
</Field>XML オブジェクト言語の要素は、XPRESS 言語の要素に似ていますが、値が静的な場合は、XML オブジェクト言語を使用するほうが効率的です。
この 2 つの言語の主な相違点は、XML オブジェクト言語では、オブジェクトの内容を、式を使用して計算できないことです。この制限があるために、システムはオブジェクトをより効率的に作成することができ、オブジェクトが大きい場合の処理が迅速になります。
XML オブジェクト言語を使用してリストを定義すると、リポジトリからフォームが読み込まれるときにリストが作成され、以後はそれが再利用されます。XPRESS でリストを定義した場合は、フォームを表示するたびに新しいリストが作成されます。
XML オブジェクト言語とそれに対応する XPRESS次の表は、基本的な XML オブジェクトと、それに対応する XPRESS 式 (存在する場合) を示しています。
XML オブジェクト内で XPRESS ステートメントを使用することはできません。
XPRESS での XML オブジェクトの使用
式の記述が許可される場所であれば、XPRESS 内で XML オブジェクトを使用できます。次の例では、呼び出されたメソッドの引数としてマップが渡されます。
<invoke name='printTheMap'>
<ref>mapPrinter</ref>
<Map>
</Map>
</invoke>2.0 より前のリリースの XPRESS では、すべての XML オブジェクトを <o> 要素で囲む必要がありました。この制約は適用されなくなりましたが、XPRESS を含む古いファイルでは、このような設定をまだ見かけることがあります。
XPRESS の代わりに使用される XML オブジェクト言語
XML オブジェクト言語と XPRESS はどちらもフォーム内のリストを表現する方法を提供しますが、リストが長く、静的なデータを含んでいる場合は、XML オブジェクト構文を使用するほうが XPRESS より効率的です。リストはメモリ内に 1 回作成され、参照のたびにそれが再利用されます。一方、XPRESS のリスト構文は、参照のたびに評価され、毎回新しいリストが作成されます。
次の表に示される情報のリストを作成するときは、通常、XML オブジェクト言語が使用されます。
XML オブジェクト言語と XPRESS でのリストの表現
XML オブジェクト言語と XPRESS は、どちらもフォーム内のリストを表現する方法を提供します。
XPRESS によるリストの表現
XPRESS でリストを表現するときは、<list> 要素を使用します。<list> 要素には、任意の XPRESS 式を含めることができます。
注
計算される要素を含むリストで使用できるのは、<list> XPRESS 要素のみです。<list> 要素を使用すると、その要素が含まれるフォームの実行速度が低下する場合があります。リストに大量の要素が含まれる場合を除き、このパフォーマンス低下に気が付くことはほとんどありません。フォームでの <list> の使用は許容範囲内であり、よく使用されます。
次の例では、XPRESS リストで文字列定数 <s> を使用していますが、<invoke> 要素または <concat> 要素を使用して、リスト要素を動的に作成することもできます。
例
<list>
<s>cat</s>
<s>dog</s>
</list>XML オブジェクト言語によるリストの表現
XML オブジェクト言語でリストを表現するときは、<List> 要素を使用します。<List> 要素に含めることができるのは、その他の XML オブジェクトのみです。次の例の <List> 要素の内容は、<String> 要素です。
例
<List>
<String>cat</String>
<String>dog</String>
</List>両タイプの構文を使用したフォームの例
次のフォームには、XML オブジェクト構文と XPRESS の両方によって定義されたリストを含むフィールドが組み込まれています。
<Form>
<Field name='department'>
<Display class='Select'>
<Property name='allowedValues'>
<List>
<String>Engineering</String>
<String>Marketing</String>
<String>Sales</String>
</List>
</Property>
</Display>
</Field>
<Field name='department2'>
<Display class='Select'>
<Property name='allowedValues'>
<expression>
<list>
<s>Engineering</s>
<s>Marketing</s>
<s>Sales</s>
</list>
</expression>
</Property>
</Display>
</Field></Form>
department フィールドの allowedValues リストは、<List> を使用して作成される静的なリストとして定義されています。このフォームを何回使用する場合でも、作成されるリストは 1 つのみです。反対に、department2 フィールドの allowedValues リストは、<list> 式を使用して定義されています。このフォームを使用するたびに、新しいリストが作成されます。
XML オブジェクト構文と XPRESS によるマップオブジェクトの定義
XML オブジェクト構文と XPRESS のどちらを使用しても、マップオブジェクトを動的に作成できます。XPRESS の <map> 要素の使用は、XML オブジェクト言語の <Map> 要素と <MapEntry> 要素の使用に似ています。これらの要素の違いは、<map> の内容を式を使用して計算できることです。一方、<Map> 要素を使用して定義できるのは、静的なマップのみです。
XPRESS によるマップの表現
XPRESS の <map> 要素の内容は、名前と値のペアの式です。偶数番号の式はマップキーを定義し、奇数番号の式はマップ値を定義します。キー式の評価が NULL となる場合は、そのエントリは無視されます。
XPRESS の <map> 要素を使用することで、java.util.HashMap オブジェクトを動的に作成することができます。
<map>
<s>name</s>
<s>Jeff</s>
<s>phone</s>
<s>338-1818</s>
</map>XML オブジェクト構文によるマップオブジェクトの定義
XML オブジェクト構文を使用して、マップオブジェクトを次のように定義できます。
<Map>
<MapEntry key='name' value='Jeff'/>
<MapEntry key='phone' value='338-1818'/>
</Map>