![]() | |
Sun™ Identity Manager 8.0 ワークフロー、フォーム、およびビュー |
第 2 章
Identity Manager フォームこの章では、SunTM Identity Manager の管理者向けおよびユーザー向けインタフェースの各種ページを定義するフォームを編集することで、選択したページの外観や動作をカスタマイズする方法について説明します。
Identity Manager IDE を使用して、Identity Manager のフォームおよびその他の汎用オブジェクトを表示および編集できます。Identity Manager IDE をインストールおよび設定する手順については、https://identitymanageride.dev.java.net を参照してください。
この章の内容
この章は、次の各節で構成されています。
- フォームについて - フォームの基本概念を紹介し、Identity Manager にフォームを統合する方法について説明します。
- フォームのカスタマイズ - フォームを操作するときに使用する、プログラミングの構文とロジックに関するガイドラインについて説明し、各種フォーム要素の例を示します。
- カスタマイズしたフォームの検証 - フォームの構文を検証したり、カスタムフォームのフィールドロジックを追跡したりする方法について説明します。
関連する章
- 「Identity Manager のビュー」- ユーザービューと呼ばれる Identity Manager の内部データ構造と連携する Identity Manager フォームについて説明します。フォームをカスタマイズするときは、ビューの属性を呼び出します。
- 「HTML 表示コンポーネント」- フォームを編集するときは、フィールド定義の作成に HTML コンポーネント言語を使用します。
- 「XPRESS 言語」- 式を使用して、フォームにロジックを設定します。
フォームについてIdentity Manager の Web ベースのユーザーインタフェースの外観と機能をカスタマイズするには、編集する Web ページに関連するフォームを修正します。
「フォーム」という用語は、ユーザーが情報を入力する Web ページと、ビューへのデータの表示方法に関する規則を含むオブジェクトの両方を意味します。このガイドでは、「フォーム」という用語を、主に、ビューへのデータの表示方法に関する規則を含むオブジェクトという意味で使用します。
この節で説明する内容は次のとおりです。
フォームとは
フォームは、ページに関連付けられたオブジェクトであり、そのページでユーザービュー属性をブラウザ上にどのように表示するかについての規則が含まれています。フォームにはビジネスロジックを組み込むことができ、通常はユーザーに表示する前に、表示データを処理するためにフォームが使用されます。
たとえば、新しいユーザーアカウントを作成するときは、新規ユーザーに関する情報を入力するための「ユーザーの作成」ページを使用します。このページは、Tabbed User Form という Identity Manager リポジトリに含まれるオブジェクト (フォーム) から生成されます。このフォームは、「ユーザーの作成」ページにどのフィールドを表示するか、および各フィールドの表示にどの HTML フォーム要素 (たとえば、テキストボックス、チェックボックス、選択ボックスなど) を使用するかを指定します。また、このフォームは、フィールドの無効化、空のフィールドへのデフォルト値の挿入、別フィールドの値からのフィールド値の計算を行う追加ロジックも指定します。
フォームが制御する内容
フォームによって制御されるオブジェクトやアクティビティーは次のとおりです。
フォームは、Web ページ用のインタフェースにもなりますが、ActiveSync リソースのように対話的でないシステムのインタフェースとなることもできます。この場合、フォームは表示フィールドを持ちませんが、デフォルト値やその他のフィールド値を設定する規則を提供できます。
たとえば、「Full Name」フィールドは、ページを使用する管理者には表示されないかもしれませんが、ユーザーが「First Name」、「Middle Name」、「Last Name」の各フィールドに入力した値に基づいて設定させることができます。別のフィールドからフィールドに値を取り込むことで、ユーザーや管理者が行うデータ入力が減り、そのためデータ入力エラーが生じる可能性も低くなります。同様に、テキスト入力フィールドにオプションメニューを用意することで、管理者は部署名を入力する代わりに、リストから選択することができます。デフォルトの Identity Manager フォームを定義する各種 HTML コンポーネントについては、「HTML 表示コンポーネント」を参照してください。
Identity Manager では、バックグラウンド処理にもフォームが使用されます。たとえば、フォームとリソースアダプタを一緒に使用して、外部リソースから得た情報を処理し、Identity Manager リポジトリにこれを保存できます。
ユーザーに表示されないフォームでは、外観は意味を持たないため、バックグラウンドでデータを操作するフォームを作成するときは、主にエンコーディングのロジックに注意します。非表示のコンポーネントの詳細については、「非表示コンポーネントの使用」の節を参照してください。
フォームの例
次の XML コード例は、ユーザーがアカウント ID、姓、名、およびフルネームを入力するときに使用するフォームフィールドを定義しています。この例は、「First Name」フィールドと「Last Name」フィールドに入力された情報から、ユーザーのフルネームがどのように構築されるのかを示しています。
フォームの編集が必要な理由
デフォルトの Identity Manager ページには、製品でのアクションの実行に必要なすべてのフィールドがすでに用意されていますが、なぜこれをカスタマイズするのでしょうか。これは、デフォルトのフォームをカスタマイズすることで、企業のポリシーとプロセスをより確実に適用できるからです。
Identity Manager フォームのデフォルトフィールドをカスタマイズすることで、実際の環境に合わせてアプリケーションを拡張し、カスタマイズすることができます。具体的には、デフォルトフォームを次のようにカスタマイズできます。
- 組織内のユーザーの固有のニーズに対応します。これは、複数の異なる種類の管理者が、同じビューデータの異なる部分にアクセスする必要があり、記録されているすべてのデータ属性を表示できない場合に特に重要です。たとえば、人事担当の管理者は、ヘルプデスクの管理者とは異なるサブセットのユーザーアカウント属性にアクセスする必要があります。
- ユーザーアカウント属性の表示と内容、特に「ユーザーの作成」ページと「ユーザーの編集」ページに表示される属性を制御します。これらのページには、制御が必要なほとんどの属性が含まれます。
- ユーザービュー属性のデフォルト値、および関連するその他の属性を定義します。たとえば、管理者がホームディレクトリのパスを入力する代わりに、ユーザーのデフォルトのホームディレクトリを定義できます。
- 画面に表示する前にユーザービュー属性を処理できます。たとえば、頭字語や数値 ID としてリソースに記録されている部署コードを、ユーザーにわかりやすいフルネーム表記で表示することができます。
- 入力後にユーザービュー属性データを処理できます。たとえば、場所のフィールドの値に基づいて、メールアカウントを自動的に作成できます。
- 複数のフィールドを 1 つの行に配置することで、画面の構成を制御できます。Identity Manager フォームのフィールドの配置をカスタマイズすることで、印刷時の形式や、以前からの Web フォームにより近づけることができます。
- 非表示の属性を計算するための規則を定義します。たとえば、ユーザーの名前、ピリオド、ユーザーの姓、次にメールドメイン (joe.user@sun.com) となるように、ユーザーの電子メールアドレスを計算できます。
シナリオの例
さまざまなニーズや目的を持つ人々が同じデータにアクセスする環境では、フォームは特に便利です。
たとえば、企業で採用を担当するマネージャー用のフォームを作成し、新規従業員アカウントの作成に使用できます。デフォルトの Tabbed User Form には、採用責任者に必要な情報より多くの情報が表示されます。99 個のフィールドがすべて表示される冗長で込み入ったフォームでは、ユーザータスクが複雑になる可能性があります。その代わりに、採用責任者は 10 個の属性フィールドだけを記入し、それ以外の 89 個の属性は管理者が定義した規則に従って設定されるようなフォームを作成できます。
フォームが使用される Identity Manager ページ
通常は、Identity Manager フォームは次のいずれかのカテゴリに分類されます。
Identity Manager に付属するデフォルトのフォームは、独自のカスタムフォームを作成するためのたたき台として使用できます。これらのフォームのサブセットのみをコピーし、直接編集する必要がある場合は (「編集されたフォーム」の節を参照)、たとえば、特定の属性や動作をエンコードする方法について、別のフォームを参考にできます。
次の表は、最初のタイプのフォームを使用する Identity Manager ページの一部を示しています。編集するページの表示特性を制御するフォームを特定するときは、この表を使用してください。
表 2-1 ページ、および関連 JSP とフォーム
編集するページ
関連する JSP
関連するフォーム
ユーザーの作成/ユーザーの編集
account/modify.jsp
タブ付きユーザーフォーム
ユーザーアカウント属性の変更
user/changeAll.jsp
エンドユーザーフォーム
ようこそ
user/anonmmain.jsp
匿名ユーザーメニュー
作業項目の編集
approval/itemEdit.jsp
承認フォーム
編集されたフォーム
Identity Manager に付属するデフォルトフォームの中で、次の 5 つのフォームのいずれかの編集が必要となることが考えられます。
これらの編集されたフォームは、ユーザーの作成と修正を制御し、ユーザーに表示されるメインメニューの表示を制御します。各フォームについては、次の節でさらに詳しく説明します。
注
ビューとフォームが要求を呼び出すために管理者インターフェース JSP を介して対話する間 (ワークフローを呼び出すまで) は、ビューは直接編集されます。このため、フォームはフォーム属性に指定されているネームスペース内で実行されます。代表的な属性ネームスペースには、次のものがあります。
承認ページには適用されません。
エンドユーザーメニューフォーム
エンドユーザーメニューフォームは、Identity Manager のユーザーインタフェースのメインメニューの表示を制御します。通常、このフォームには、ユーザーパスワードの変更、アカウント属性の編集、秘密質問の回答の変更などを行うためのリンクが含まれます。
エンドユーザーメニューフォームをカスタマイズして、ユーザーがアクセスできる特別なワークフロープロセス (たとえば、システムへのアクセスを要求するプロセス) を呼び出すリンクを追加できます。
注
End User Interface Change Password Form では、ユーザーが自分のアカウントのパスワードを変更するときに現在のパスワードの再入力を求めるように RequiresChallenge プロパティーを設定できます。このプロパティーの設定方法の例については、enduser.xml で Basic Change Password Form を参照してください。
たとえば、エンドユーザーページでクリックするリンクとしてエンドユーザーテストプロセスを表示するときは、次のコード例のようなエントリを追加します。
コード例 2-2 エンドユーザーメニューフォームへのエンドユーザーテストプロセスリンクの追加
<Configuration id='#ID#Configuration:EndUserTasks' name='End User Tasks' >
<Extension>
<List>
<List>
<String>End-User Test Process</String>
<String>An example end-user workflow</String>
<List>
</List>
Identity Manager のユーザーインタフェースには、選択可能なセルフサービスプロセスリストが表示されます。これは、リストのサブリストとなります。サブリストの最初の要素はプロセス名を示し、2 番目の要素はプロセスの機能を示します。
注
ページの表示を更新するたびに、Identity Manager はフォームの <Default> 式を再評価します。エンドユーザーメニューフォームに doNotRegenerateEndUserMenu プロパティー (true に設定) を追加することで、このフォームの再生成を無効にできます。
ページの表示を更新するたびに、Identity Manager はフォームの <Default> 式を再評価します。エンドユーザーメニューフォームに doNotRegenerateEndUserMenu プロパティー (true に設定) を次のように追加することで、このフォームの再生成を無効にできます。
<Properties>
<Property name='doNotRegenerateEndUserMenu'>
<Boolean>true</Boolean>
</Property>
</Properties>
Anonymous User Menu Form
Anonymous User Menu Form は、未知のユーザーがログインしたときに、Identity Manager のユーザーインタフェースのメインメニューの表示を制御します。
ユーザーセルフプロビジョニングのプロセス経由でシステムに定義されていないユーザーに対しては、Identity Manager は匿名エンドユーザーページを使用します。たとえば、Identity Manager 管理者は、Active Directory リソースのパススルー認証を設定することができます。それにより、Active Directory アカウントを持つ人であれば、Identity Manager のユーザーインタフェースにログインできるようになります。ユーザーが Identity Manager アカウントログインを持たない場合に、Identity Manager のユーザーオブジェクトが作成され、Active Directory リソースが追加されるように、これらのページをカスタマイズできます。それに続いて一連の質問を設けることで、システムはユーザーのロール、組織、およびその他のリソースを設定できます。
Identity Manager ユーザーが作成される前に、サービスを要求するワークフロープロセスを呼び出すよう Anonymous User Menu Form をカスタマイズすることができます。
Tabbed User Form
Tabbed User Form は、Identity Manager の管理者インタフェースでユーザーを作成、修正するときに使用されるデフォルトフォームです。独自にデザインしたフォームとして、このフォームの拡張版を作成するためには、このフォームのコピーをカスタマイズします。
ヒント
Tabbed User Form を直接編集しないでください。代わりに、これらのフォームのコピーを作成して一意の名前を付け、このファイル名を変更したコピーフォームを編集することをお勧めします。こうすることにより、カスタマイズしたコピーがサービスパックの更新やアップグレードの際に上書きされるのを防止できます。
Tabbed User Form のコピーは、次の処理を行うようにカスタマイズできます。
- 「ユーザーの編集」ページに表示される属性の数を制限します。デフォルトでは、このページにリソースのスキーママップに定義されているすべての属性が表示されるため、採用責任者に入力や設定が求められる属性のリストが多くなり過ぎてしまいます。
- デフォルトのフィールドタイプを、より便利な選択ボックス、チェックボックス、および複数の値を示すフィールドに設定します。デフォルトでは、ユーザーに割り当てられるリソースに定義されるすべての属性は、「ユーザーの作成」ページと「ユーザーの編集」ページにテキストボックスとして (または、Boolean 型の場合はチェックボックスとして) 表示されます。
- 複数のページで共通のフォームを使用できるように、追加のフォームを含めます。
Tabbed User Form には、次のフィールドが含まれます。
- accountId
- firstname
- lastname
- role
- organization
- password
- confirm password
- resource list
- application list
- MissingFields
注
本稼働環境で MissingFields 要素は使用しないでください。この要素は、教育の目的にのみ用意されています。
MissingFields 要素は、Tabbed User Form からユーザーフォームを作成またはカスタマイズするときに、割り当てられているリソースにプッシュできる属性への明示的な参照によって置き換える必要があります。この置き換えは、グローバルネームスペースを使いすぎることでよく発生する問題を回避するために行う必要があります。たとえば、グローバル構文を使用しない場合は、リソースは割り当てられません。
MissingFields フィールドは、実際にはフィールドではありません。Tabbed User Form で明示的に宣言されていない割り当て済みリソースへプッシュ可能なすべての属性に対して、グローバルネームスペースにテキストフィールドを自動生成するようにフォームジェネレータに指示する要素です。
デフォルトでは、ユーザーに割り当てられるリソースに定義されるすべての属性は、「ユーザーの作成」ページと「ユーザーの編集」ページにテキストボックスとして (または、ブール型の値ではチェックボックスとして) 表示されます。
エンドユーザーフォーム
エンドユーザーフォームは、ユーザーが Identity Manager のユーザーインタフェースで /user/main.jsp からアカウント属性を選択した場合に、システムによって自動的に表示されるページを制御します。ユーザーはこのページで、自分自身のパスワード、秘密の質問、および電子メールアドレスを変更できます。
エンドユーザーフォームをカスタマイズして、電話番号、住所、事務所の地理的な場所などを扱うフィールドをユーザーが制御できるように権限を与えることができます。
承認フォーム
承認フォームは、ユーザー要求の承認者を指定するときに、リソース、ロール、または組織の所有者に表示される情報を制御します。デフォルトでは、このページには、プロセスを開始した管理者の名前を示す、一連の読み取り専用フィールドが表示されます。また、アカウント ID、ロール、組織、電子メールアドレスなど、ユーザーに関する情報も表示されます。
このフォームは、ユーザーの作成前に、ユーザーの値を変更する最後の機会をリソースの所有者に提供できるようにします。デフォルトでは、ユーザーを承認すると、読み取り専用フィールドにすべてのユーザー属性が表示されます。
承認フォームは、次の処理を行うようにカスタマイズできます。
フォームが機能するしくみ
ブラウザによるフォームの表示には、さまざまな要因が影響します。ただし、ブラウザでのフォームの動作は、主に次の要素によって決定されます。
- フォームに関連付けられているビュー。すべてのフォームは、ビューとともに使用されます。フォームとともに使用されるもっとも一般的なビューは、ユーザービューです。ビューは、フォームが評価されるときに使用できるデータを定義します。
- 未定義の属性。Tabbed User Form は、フィールドが明示的に定義されていないリソースアカウント属性を編集するためのテキストフィールドを自動的に生成するメカニズムを提供します。この機能は、フォームで無効にすることができます。
- フォームとその他の Identity Manager コンポーネントとの連携。これには、Identity Manager がフォームまたは フォーム評価 を評価するためのプロセスが含まれます。フォームによって駆動されるすべてのページは、同様に処理されます。Identity Manager がフォームを評価する方法については、この章の「フォームの評価」を参照してください。
- フォームで使用される表示コンポーネント。フォームフィールドには、ブラウザにフィールドをどのように表示するかを決定する、表示コンポーネントを関連付けることができます。
ユーザービューとフォーム
ユーザービューは、Identity Manager ユーザーの利用可能な全情報が含まれるデータ構造です。このビューには、次の項目が含まれます。
ビューには多くの属性があります。ビュー属性とは、ビュー内にある名前付きの値です。たとえば、waveset.accountId は、Identity Manager のアカウント名を値とするユーザービュー中の属性です。
ほとんどのフォームフィールドの名前は、ビュー属性と関連付けられています。フォームフィールドの名前として、ビュー属性の名前を指定することで、フィールドとビュー属性を関連付けます。詳細については、「フィールド名の定義」を参照してください。
ユーザービューの全属性の参照情報など、ユーザービューの詳細については、「Identity Manager のビュー」を参照してください。
未定義の属性
管理者インタフェースでユーザーにリソースやロールを割り当てると、表示が更新されます。新しいリソースアカウントの属性は、ユーザービューで定義されます。Tabbed User Form の <FormRef name = 'Missing Fields'/> は、対応するフィールドがフォームに明示的に定義されていないリソースアカウント属性について、テキストフィールドを生成するようにフォーム生成ツールに伝えます。この機能を無効にするときは、Tabbed User Form から <FormRef name = 'Missing Fields'/> を削除します。
フォームの評価
システムがフォームをどのように処理するかを理解することは、ブラウザでのフォームの動作を決定するときに役立ちます。フォームによって駆動されるすべてのページは、次のように同様に処理されます。
- ページは、Identity Manager のユーザーインタフェースまたは管理者インタフェースから要求されます。
- インタフェースは、サーバーからビューを要求します。ビューは、編集が可能な、名前が付けられた値の集合です。それぞれのビューは、ビューの値をユーザーにどのように表示するかを定義するフォームと関連付けられます。
- サーバーは、リポジトリ内の 1 つまたは複数のオブジェクトからデータを読み込むことで、ビューを構築します。ユーザービューの場合は、リソースアダプタを通じてリソースからアカウント属性も取得されます。
- Derivation 式が評価されます。これらの式は、リソースからの暗号化され、エンコードされた値を、ユーザーにとって意味のある値に変換するときに使用されます。この Derivation 式は、フォームが最初に読み込まれるとき、あるいは、1 つまたは複数のリソースからデータがフェッチされるときに評価されます。
- Default 式が評価されます。フィールドが NULL の場合は、フィールドにデフォルト値が設定されます。
- HTML コードが生成されます。システムはビューデータとフォームを処理し、HTML ページを生成します。この処理では、式に含まれる allowedValues プロパティーが評価され、Select または MultiSelect HTML コンポーネントが構築されます。
- ブラウザにページが表示されます。ユーザーは、表示される値を編集できます。編集時にユーザーがフィールドを修正すると、多くの場合は、それによってページの表示が更新されたり、再計算されたりします。これにより、ページが再生成されます。ただしこの時点では、システムは編集後のデータをリポジトリにまだ格納しません。
- 変更した値が、ビューに同化されます。表示更新イベントが発生した場合は、インタフェースはブラウザで編集されたすべてのフォームフィールドの値を受信します。
- Expansion 式が評価されます。これにより、追加の値がビューに配置される場合があります。Expansion 規則は、ページを再計算するとき、またはフォームを保存するときに実行されます。
- ビューの表示が更新されます。インタフェースは、ビューの表示を更新し、編集された値の現在の設定を提供するようにサーバーに要求します。サーバーは、リポジトリまたはリソースからデータを読み込んで、より多くの値をビューに挿入する場合があります。
- Derivation 式が評価されます。通常は、ビューの表示を更新するときには、Derivation 式は評価されません。一部の複雑な事例では、表示の更新後にシステムが導出を要求する場合があります。
- システムは、表示が更新されたビューとフォームを処理し、ブラウザに返される別の HTML ページを構築します。ユーザーは、表示更新の結果を確認し、編集を継続します。ユーザーは、変更を保存またはキャンセルするまで、任意の回数だけビューの表示を更新できます (毎回、手順 7 〜 12 を繰り返す)。
- A. 編集をキャンセルすると、ビューに取り込まれたすべてのデータは破棄され、サーバーにそれが通知されます。これにより、サーバーは任意のリポジトリロックを解除し、別のページへのパスを制御できます。
- B. 編集を保存すると、インタフェースは変更された値を受信し、それをビューに同化させます (手順 8 を参照)。
- Validation 式が評価されます。フィールドの値が必要な仕様を満たしていない場合は、エラーが示され、フィールドの値を修正できます。変更を加えると、プロセスは手順 13 に戻ります。
- 最後にもう一度、Expansion 式が評価されます (手順 9 を参照)。
- サーバーがビューを保存すると、通常は、リポジトリ内の 1 つまたは複数のオブジェクトが修正されます。ユーザービューでは、リソースアカウントも更新される場合があります。
これらの手順の一部は、フォームのすべてのフィールドに対して繰り返す必要があります。これには、Derivation 式の評価、Default および Validation 式の評価、HTML の生成、および Expansion 式の評価が含まれます。すべてのフィールドに対する繰り返しでは、このフィールドの処理が必要であるかどうかを判断するために、Disable 式が評価されます。Disable 式の評価結果が true であれば、そのフィールド、および入れ子になっているすべてのフィールドは無視されます。これら特別な種類の式の詳細については、この章の「フィールド名の定義」を参照してください。
空フォーム
空フォームとは、フィールドのないフォームです。空フォームを配備することで、フォーム処理中にユーザービューに変更が適用されるのを防止できます。
コード例 2-3 空フォームオブジェクト
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE Configuration PUBLIC 'waveset.dtd' 'waveset.dtd'>
<Configuration wstype='UserForm'name='Empty Form'>
<Extension>
<Form name='Empty Form'>
</Form>
</Extension>
<MemberObjectGroups>
<ObjectRef type='ObjectGroup' name='Top'/>
</MemberObjectGroups>
</Configuration>
注
空フォームは、MissingFields の代わりとして実装できます。MissingFields は、ユーザービューのアカウントリスト全体に対して、自身の機能を実行しようとします。一方、空フォームを使用することで、フォーム処理中にユーザービューに変更が適用されるのを効果的に防止できます。
空フォームを使用する状況
空フォームは次のようなときに使用します
- 二次的な影響を最小限に抑えてビューをチェックアウトするとき。
- Active Sync リソースから、および「ファイルから読み込み」時にデータを同期するとき。デプロイヤは通常、データを同期するためにカスタマイズした入力フォームを作成します。Identity Manager はすべての属性変換をその入力フォーム内で行うため、追加のフォーム処理は必要ありません。ただし、この処理には管理コンテキストが必要であり、すべての管理者がフォームを使用する必要があるため、管理者のフォームを空フォームに割り当てて、対象のビューで不必要なフォーム処理が行われないようにするべきです。
- ユーザービューに対して特定のアクションを実行するが、予期しないその他の副次的な影響を回避する必要があるカスタムワークフローを実装するとき。このようなカスタムワークフローでは、一般にビューのチェックアウト処理時に空フォームを指定します。
Active Sync 処理時に空フォームを使用
Active Sync を正常に処理するには、空フォームを使用する必要があります。
Identity Manager が Active Sync リソースのレコードを処理するときは、Identity Managerシステム用に設定されたデフォルトフォーム (Tabbed User Form)、または管理者アカウント用に定義されたフォームがある場合はそれを使用します。
デフォルトの Tabbed User Form では Active Sync リソースのデータに予期しない効果が発生する可能性があるため、デフォルトフォームを使用するのではなく、空フォームを作成してプロキシ管理者に直接割り当てることをお勧めします。
注
空フォームをプロキシ管理者に関連付ける場合は、管理者ロールを使って関連付けるのではなく、直接関連付けてください。管理者ロールレベルで空フォームを設定すると、Active Sync 処理時に Tabbed User Form が呼び出されてしまいます。
Active Sync フォームActive Sync 対応アダプタでは、Active Sync 処理時にリソースフォームとユーザーフォームの 2 種類のフォームが一般的に使用されます。
フォームの処理は、次の 3 段階で行われます。
$WSHOME/sample/forms ディレクトリには、ActiveSyncForm.xml で終わるサンプルフォームが用意されています。これらのサンプルフォームには、新規および既存のユーザーのケースを処理するロジック、およびリソース上で削除が検出されたときに Identity Manager ユーザーを無効または削除するロジックが含まれます。
ActiveSync ユーザーフォーム
Identity Manager が ActiveSync ユーザーイベントを処理するときには、次の 2 つのフォームが使用されます。
リソースフォーム
リソースフォームは、リソースが作成または編集されるときに管理者がプルダウンメニューから選択するフォームです。選択したフォームへの参照が、リソースオブジェクトに格納されます。
リソースフォームは、Active Sync 対応アダプタで次のように使用されます。
- スキーママップから受け取った属性を変換する。
- パスワード、ロール、組織などのフィールドを生成する。
- 新規および既存のユーザーのケースを処理するロジックや、削除が検出されたときに Identity Manager ユーザーを無効または削除するロジックなど、カスタム処理用の簡単な制御ロジックを提供する。
- activeSync から取り込んだ属性をユーザーフォームが入力として使用するフィールドへコピーし、必要に応じて変換する。作成処理に必要なフィールドは、waveset.accountId および waveset.password です。accounts[AD].email、waveset.resources など、その他のフィールドも設定できます。
- IAPI.cancel を true に設定することで、ユーザーの処理をキャンセルする。特定のユーザーに対する更新を無視するときによく使用されます。
リソースフォームには、新規および既存のユーザーのケースを処理するロジック、および削除が検出されたときに Identity Manager ユーザーを無効または削除するロジックが含まれます。
ユーザーフォーム
ユーザーフォームは、Identity Manager インタフェースから編集するために使用されます。割り当てるときは、アダプタに「プロキシ管理者」を割り当てます。プロキシ管理者にユーザーフォームが割り当てられている場合は、このフォームは処理時にユーザービューに適用されます。
プロキシ管理者とユーザーフォーム
アダプタのプロキシ管理者は、ProxyAdministrator 属性を使用して設定します。任意の Identity Manager 管理者に設定できます。Active Sync 対応アダプタのすべての処理は、プロキシ管理者が実行しているように実行されます。プロキシ管理者が割り当てられていない場合は、デフォルトのユーザーフォームが指定されます。
属性を処理するための代替フォーム
姓と名からフルネームを作成するなどの一般的な変更は、ユーザーフォームで行うことをお勧めします。リソースフォームでは、HR 状態が変わったときはそのユーザーを無効にするなど、リソース固有の変更を行うようにしてください。ただし、受け取った属性などの必要な属性が共通パスに置かれたあとに、リソースフォームを別のフォームに取り込むことはできます。
ActiveSync フォームの処理
ActiveSync フォームの処理は、大きく分けて次の段階で構成されます。
- Proxy Admin Form を使用してビューを作成します。MissingFields FieldRef によって Proxy Admin Form からグローバル属性が取り込まれることを回避するために、空フォームを管理者に割り当ててください。
- ActiveSync Form が処理される前に、Identity Manager は特定の ActiveSync ビュー属性をビューに追加します。
- Identity Manager は、入力フォームまたはパラメータ化した ActiveSync Form を処理します。このフォーム処理手順中に、通常はリソース、ロール、および組織と、関連付けられたリソースアカウント属性が指定されます。イベントのタイプに基づいてフィールドを無効または有効にするために、feedOp フラグが使用されます。特定のイベントを無視するために、IAPI.cancel 属性が設定されることもあります。viewOptions.process フラグを使用して、ActiveSync イベントを処理するためのカスタムプロビジョニングタスクを指定することもできます。
- Identity Manager は、ビューをチェックインして Proxy Admin Form を処理します。
エンドユーザーフォームこのセクションで説明するフォームは、エンドユーザーインタフェースにあります。
エンドユーザー委任フォーム
エンドユーザーインタフェースでは、「委任」タブから次のフォームにアクセスできます。
End User View WorkItem Delegations Form
このフォームは、現在および過去のすべての委任が表示される 1 つのテーブルで構成されます。このテーブルは、委任状態に基づいてフィルタリングできます。有効な状態値は、「現在」、「将来の委任」、「終了済み」です。ユーザーは現在の委任を終了したり、新しい委任を作成したり、既存の委任を編集したりできます。
このフォームに表示される過去の委任のリストを設定するために、SystemConfiguration オブジェクトの delegation.historyLength 属性を設定できます。詳細については、『Identity Manager の配備に関する技術概要』の設定オブジェクトの編集に関する章を参照してください。このフォームのその他の動作を設定するときは、このガイドの「Identity Manager のビュー」章の「作業項目の委任ビュー」を参照してください。
End User Delegate WorkItems Form
このフォームは、新しい委任を作成したり、既存の委任を編集したりするときに使用されます。
エンドユーザー匿名登録フォーム
Identity Manager アカウントを持たないユーザーは、アカウントを要求するときにこれらのフォームを使用します。
- End User Anonymous Enrollment Form。インタフェースのこの部分のメインフォームで、エンドユーザー匿名登録ワークフローを実行するときの呼び出しフォームとして参照されます。このフォームは次の 2 つのフォームを参照します。
- End User Anonymous Enrollment Validation Form。このフォームは、ユーザーから初期情報を収集して、完了フォームを表示する前にユーザーの関係 (雇用) を検証するためのサンプルです。
- End User Anonymous Enrollment Completion Form。このフォームは、ユーザーアカウントを作成するプロビジョニングタスクの呼び出しに必要な情報を収集します。
フォームのカスタマイズIdentity Manager 製品のデフォルトの動作を理解すると、カスタマイズが必要なページを特定できます。
- 編集可能なページと、それに対応するフォームについては、「編集されたフォーム」の節を参照してください。
- フォームを編集するときは、Identity Manager IDE を起動し、「リポジトリオブジェクトを開く」を選択します。表示されるポップアップダイアログから、編集するフォームを選択します。
この節で説明する内容は次のとおりです。
カスタマイズの概要
フォームをカスタマイズして、よりわかりやすくし、表示特性を変更したり、フィールドデータを処理するロジックを含めたりすることができます。
基本的な手順
Identity Manager システムでフォームをカスタマイズする基本的な手順は次のとおりです。
一般的なタスク
フォームを編集するときは、通常、次のタスクを実行します。
- フォームのフィールドを追加、削除します。一般的なタスクには、一部のデフォルトフィールドの削除と、環境に合わせてカスタマイズされたフィールドの追加が含まれます。
- フィールドをフォームにどのように表示するかを定義します。この操作には、Identity Manager に付属する HTML コンポーネントのライブラリを使用する必要があります。フィールドの表示特性の編集については、「フィールドの表示プロパティー」の節を参照してください。
- フィールドの値を定義する論理式を設定します。この操作では、XPRESS 言語を使用して論理式を作成する必要があります。XPRESS の使用については、「XPRESS 言語」を参照してください。
表 2-2 フォームの要素
プロパティー
説明
Title
フォームフィールドの横に表示されるテキストを指定します。
Class
要素が属す HTML 表示クラスを指定します。
Required
フォームの処理にその要素が必須であるかどうかを指定します。送信の時点では、このフィールドに NULL 以外の値が入力されている必要があります。必須に設定すると、フィールドの右に赤いアスタリスクが表示されます。フォームの下部にはメッセージテキストが表示され、フィールドの横の赤いアスタリスクが、送信時にフィールドへの値の入力が必須であることを示していることを通知します。
Action
これを設定すると、変更によって、すべての Select コントロールまたは MultiSelect コントロールの表示が更新されます。Identity Manager の管理者インタフェースでは、この設定によって、基本となるビューの表示が更新されます。ロールの選択は、この動作のよい例です。Tabbed User Form で新しいロールを選択すると、編集セッション中にそのロールを通じて割り当てられるリソースを反映して、ビューの表示が更新されます。ビューの表示が更新されると、新たに割り当てられたリソースのリソースアカウント属性を明示的に設定できるようになります。
No New Row
フォームのレイアウトに限定して使用されます。true に設定すると、そのフィールドが直前のフィールドの右に強制的に表示されます。たとえば、Name フィールドでは、この設定が便利です。ユーザーは、姓、名、およびミドルネームのイニシャルを上から下へではなく、右から左に入力できるようになります。
Hidden
そのフィールドをユーザーに表示しないことを指定します。このようなフィールドは、姓と名を連結してフルネームを構築する場合のように、通常は別のフィールドから計算される属性値の設定に使用されます。
Title
コントロール (テキストボックス) の文字の幅を指定します。
Class
コントロールバッファー (テキストボックス) の文字の幅を指定します。ユーザーが、size プロパティーに指定した値より長い文字列を入力した場合は、文字がスクロールされます。
Required
このフォームフィールドの名前を指定します。通常は、このフォームで使用されるビューのパス式が指定されます。
次の特性は、メインタブビューから設定します。
表 2-3 メインタブビューから設定する特性
フィールド
説明
Name
このフィールドの名前を入力します。多くの場合、フィールド名は、このフォームで使用されるビューのパス式です。テキストボックス、チェックボックス、選択フィールドなどの編集コンポーネントとして表示されるすべてのフィールドには、ビューのパスを示す名前が必要です。SectionHead や Javascript のように編集コンポーネントとして表示されないフィールドは、名前を必要としません。ただし、フィールド参照を通じて別のフォームから参照する必要がある場合は、編集コンポーネント以外のフィールドにも名前を付けることができます。
Title
そのフィールドのタイトルを指定します。このタイトルは、フォーム上のフィールドの横に表示されます。このフィールドの横にあるドロップダウンメニューから、この要素のデータ型を選択してください。このフィールドに表示されるテキストを編集するには、横に表示される「編集」ボタンをクリックします。
Sub Title
(省略可能) フォームタイトルの下に表示されるテキストを指定します。このフィールドの横にあるドロップダウンメニューから、この要素のデータ型を選択してください。このフィールドに表示されるテキストを編集するには、横に表示される「編集」ボタンをクリックします。
Help Catalog
フィールドにガイダンスヘルプを関連付けるヘルプキーを指定します。この値は、フォームによって指定される、関連するヘルプカタログに含まれるエントリの名前です。ヘルプキーを指定すると、フィールドの左にアイコンが表示されます。このアイコンにカーソルを合わせると、ヘルプカタログから参照されるテキストが表示されます。
Base Context
(標準のユーザーフォームでは、通常、使用されない) すべてのフィールドに完全パスを指定する必要をなくすためのベースコンテキストを指定します。ベースコンテキストは、基本となるマップを特定します。具体的には com.waveset.object.Genericobject で、通常は user または userview という名前が付けられます。Identity Manager の管理者インタフェースでは、編集コンテキストはユーザーであり、ベースコンテキストの参照は空白のまま残されます。承認のように、手動アクションによって呼び出されるフォームでは、フォームのコンテキストはワークフローコンテキストとなります。
Options
フィールドの、1 つまたは複数の表示オプションを選択します。
Required - フォームの処理にその要素が必須であるかどうかを指定します。送信の時点では、このフィールドに NULL 以外の値が入力されている必要があります。必須に設定すると、フィールドの右に赤いアスタリスクが表示されます。フォームの下部にはメッセージテキストが表示され、フィールドの横の赤いアスタリスクが、送信時にフィールドへの値の入力が必須であることを示していることを通知します。
Button - フォーム下部の 1 つの水平行にフィールドを表示します。このオプションを選択しない場合、フィールドはフォームの次の行に表示されます。ほとんどの場合、このオプションは Button 表示クラスを使用するフィールドに設定されます。
Action - これを設定すると、変更によって、すべての Select コントロールまたは MultiSelect コントロールの表示が更新されます。Identity Manager の管理者インタフェースでは、この設定によって、基本となるビューの表示が更新されます。ロールの選択は、この動作のよい例です。Tabbed User Form で新しいロールを選択すると、編集セッション中にそのロールを通じて割り当てられるリソースを反映して、ビューの表示が更新されます。ビューの表示が更新されると、新たに割り当てられたリソースのリソースアカウント属性を明示的に設定できるようになります。
Library - 宣言したときではなく、参照した場合にのみフィールドを表示することを指定します。このオプションは、フォームで評価されるフィールドの順序が、ユーザーに表示されるフィールドの順序と異なる場合に便利です。
Default
フィールドのデフォルト値を計算するための式を指定します。このフィールドの現在の値が NULL の場合は、フォームの表示前に Default 式が呼び出されます。
Derivation
表示前にフィールドの値を計算するための式を指定します。これは Default 式に似ていますが、現在のフィールド値が NULL 以外でも、この式は評価されます。Derivation 式は、フォームが最初に表示される前に評価され、その後、フォームの表示が更新されるたびに評価されます。
Validation
フォームに入力した値が有効であるかどうかを判断するためのロジックを指定します。Validation 式は、成功を示す場合は NULL を返し、失敗を示す場合は判読可能なエラーメッセージを含む文字列を返します。
Expansion
フォームの送信後にフィールドの値を計算するための式を指定します。多くの場合、Expansion 式は非表示のマークが付けられたフィールドで使用されます。非表示フィールドは、ユーザーが直接編集することができないため、値は Expansion 式を使用して計算できます。「フィールドの非表示」を参照してください。
Disable
true と評価された場合に、フィールドと、その入れ子フィールドを無効にする式を指定します。無効化されたフィールドは、フォームに表示されません。このオプションは、ユーザーが特定タイプのリソースを持っているかどうかを判断するときに使用されます。ユーザーがこのようなリソースを持っている場合は、フォームにはそのリソースに適したフィールドが表示されます。
Display Class
このフォームコンポーネントをブラウザに表示するときに使用される HTML コンポーネントクラスを指定します。デフォルトでは、EditForm 表示クラスが選択されます。フォームがエンドユーザーメニューのようなリンクフォームの場合は、Display Class オプションから LinkForm を選択します。
「HTML 表示コンポーネント」の HTML 表示クラスの表を参照してください。
size
コントロール (テキストボックス) の文字の幅を指定します。
maxLength
この要素の最大文字数を指定します。
ヒント
多くの場合、フィールド名はこのフォームで使用されるビューのパス式で、通常はリソースの特定の属性と関連付けられます。リソースとその属性のリストを表示するには、「リソースの表示」をクリックします。展開可能なリソースタイプのツリーを示す「リソースの表示」ダイアログが表示されます。リソースインスタンスと、その属性名のリストを表示するときは、リソースタイプの名前をクリックします。新しいフォームフィールドの名前として、リソースの属性名を使用するときは、リソースの属性名をクリックし、「OK」をクリックします。これにより、Name フィールドに属性名が挿入されます。
表 2-4 表示クラスのオプション
HTML コンポーネント
目的
Apple
ページにアプレット参照を挿入します。
BackLink
前のページに戻るリンクを表示します。
BorderedPanel
コンポーネントを、東西南北と中央の 5 つの領域に配置するコンテナ。
Button
ボタンを表示します。
ButtonRow
それぞれの間に隙間を設けて、コンポーネントを水平の行に配置するコンテナ。通常は、Button コンポーネントの行の表示に使用されます。
CheckBox
それぞれの間に隙間を設けて、コンポーネントを水平の行に配置します。通常は、Button コンポーネントの行の表示に使用されます (Container)。
DatePicker
ページにカレンダのアイコンを表示します。ユーザーは、このアイコンをクリックして日付を選択し、ページフィールドに値を適用できます。
EditForm
フォームのデフォルトコンテナ。1 つの列にコンポーネントのタイトルを表示し、もう 1 つの列にコンポーネントを表示します。各行の背景は、交互に灰色と白になります。
FileUpload
アップロードするファイルの名前を指定するための、Text コンポーネントの形式。
Hidden
表示されないデータを HTML ページに含めるときに使用されるコンポーネント。
Html
事前にフォーマットされている HTML をページに挿入します。
Javascript
JavaScript 関数を定義します。
Label
読み取り専用のテキストを表示します。
Link
ページにリンクを配置します。
LinkForm
縦の箇条書きリストに、タイトルなしでコンポーネントを配置します。通常は、Link コンポーネントのリストを含むページで使用されます。EditForm コンテナの代わりに使用されます (Container)。
MultiSelect
複数の選択項目を持つボックスを表示します。これは、1 つのボックスに含まれる定義済みの値セットを選択ボックスに移動できる、2 つの部分から構成されるオブジェクトです。
NameValueTable
ベージュ色の背景を持つ簡易テーブルに、名前と値のペアのリストを表示します。
Panel
コンポーネントを水平の行、または垂直の列に配置します (Container)。
Radio
1 つまたは複数のラジオボタンの水平リストを表示します。ユーザーが一度に選択できるラジオボタンは 1 つだけです。コンポーネントの値が NULL の場合、または許可される値のいずれとも一致しない場合は、ボタンは選択されません。
SectionHead
セクションの見出しを表示します。これは EditForm コンテナで認識され、タイトルとコンポーネントの列を太字で表示します。
Select
1 つの項目を選択できるリストボックスを表示します。
SimpleTable
列のタイトル行を持つ、簡単なグリッドにコンポーネントを配置します。
SubTitle
フォームタイトルの下に表示されるテキストを指定します。
Text
読み取り専用のテキストを表示します。
TextArea
ページにリンクを配置します。
Title
フォーム上部に表示されるテキストを指定します。
表 2-5 フォームの要素
フォーム要素
説明
Name
このフィールドの名前を入力します。多くの場合、フィールド名は、このフォームで使用されるビューのパス式です。テキストボックス、チェックボックス、選択フィールドなどの編集コンポーネントとして表示されるすべてのフィールドには、ビューのパスを示す名前が必要です。SectionHead や Javascript のように編集コンポーネントとして表示されないフィールドは、名前を必要としません。ただし、フィールド参照を通じて別のフォームから参照する必要がある場合は、編集コンポーネント以外のフィールドにも名前を付けることができます。
Title
そのフィールドのタイトルを指定します。このタイトルは、フォーム上のフィールドの横に表示されます。このフィールドの横にあるドロップダウンメニューから、この要素のデータ型を選択してください。このフィールドに表示されるテキストを編集するには、横に表示される「編集」ボタンをクリックします。
Help Key
フィールドにガイダンスヘルプを関連付けるヘルプキーを指定します。この値は、フォームによって指定される、関連するヘルプカタログに含まれるエントリの名前です。ヘルプキーを指定すると、フィールドの左にアイコンが表示されます。このアイコンにカーソルを合わせると、ヘルプカタログから参照されるテキストが表示されます。
Options
フィールドの、1 つまたは複数の表示オプションを選択します。
Required - このフィールドへの入力または選択が、フォームを処理する上で必須であるかどうかを指定します。
Button - フォーム下部の 1 つの水平行にフィールドを表示します。このオプションを選択しない場合、フィールドはフォームの次の行に表示されます。ほとんどの場合、このオプションは Button 表示クラスを使用するフィールドに設定されます。
Action - これを設定すると、変更によって、すべての Select コントロールまたは MultiSelect コントロールの表示が更新されます。Identity Manager の管理者インタフェースでは、この設定によって、基本となるビューの表示が更新されます。ロールの選択は、この動作のよい例です。Tabbed User Form で新しいロールを選択すると、編集セッション中にそのロールを通じて割り当てられるリソースを反映して、ビューの表示が更新されます。ビューの表示が更新されると、新たに割り当てられたリソースのリソースアカウント属性を明示的に設定できるようになります。
Library - 宣言したときではなく、参照した場合にのみフィールドを表示することを指定します。このオプションは、フォームで評価されるフィールドの順序が、ユーザーに表示されるフィールドの順序と異なる場合に便利です。
Default
フィールドのデフォルト値を計算するための式を指定します。このフィールドの現在の値が NULL の場合は、フォームの表示前に Default 式が呼び出されます。
Derivation
表示前にフィールドの値を計算するための式を指定します。これは Default 式に似ていますが、現在のフィールド値が NULL 以外でも、この式は評価されます。Derivation 式は、フォームが最初に表示される前に評価され、その後、フォームの表示が更新されるたびに評価されます。
Validation
フォームに入力した値が有効であるかどうかを判断するためのロジックを指定します。Validation 式は、成功を示す場合は NULL を返し、失敗を示す場合は判読可能なエラーメッセージを含む文字列を返します。Validation 規則は、フォームの送信時にのみ評価され、表示を更新したり、再計算したりした場合には評価されません。
Expansion
フォームの送信後にフィールドの値を計算するための式を指定します。多くの場合、Expansion 式は非表示のマークが付けられたフィールドで使用されます。非表示フィールドは、ユーザーが直接編集することができないため、値は Expansion 式を使用して計算できます。
Disable
true と評価された場合に、フィールドと、その入れ子フィールドを無効にする式を指定します。無効化されたフィールドは、フォームに表示されません。このオプションは、ユーザーが特定タイプのリソースを持っているかどうかを判断するときに使用されます。ユーザーがこのようなリソースを持っている場合は、フォームにはそのリソースに適したフィールドが表示されます。
Display Class
このフォームコンポーネントをブラウザに表示するときに使用される HTML コンポーネントクラスを指定します。デフォルトでは、EditForm 表示クラスが選択されます。フォームがエンドユーザーメニューのようなリンクフォームの場合は、Display Class オプションから LinkForm を選択します。
「HTML 表示コンポーネント」の HTML 表示クラスの表を参照してください。
value
プロパティーの属性を指定します。通常は文字列です。
maxLength
この要素の最大文字数を指定します。
表 2-6 フォームツールボックスのデフォルトサービス
サービス
説明
Text
通常のテキスト入力ボックスを表示します。
Secret Text
テキストをアスタリスク (*) として表示します。通常は、パスワードのように暗号化されるデータで使用されます。
Select
1 つの項目を選択できるリストボックスを表示します。このリストボックスの値は、allowedValues プロパティーで指定します。
MultiSelect
複数の選択項目を持つテキストボックスを表示します。これは、1 つのボックスに含まれる定義済みの値セットを選択ボックスに移動できる、2 つの部分から構成されるオブジェクトです。左のボックスの値は allowedValues プロパティーで指定します。多くの場合、この値は FormUtil.getResources などの Java メソッドを呼び出すことで動的に取得されます。複数選択ボックスの右側部分に表示される値には、フィールド名によって特定される関連ビュー属性の現在値が適用されます。
Checkbox
チェックボックスを表示します。チェックマークが付けられると、そのボックスの値は true となります。選択されていないボックスの値は false となります。
Label
複数行のテキスト入力ボックスを表示します。
TextArea
1 つまたは複数のラジオボタンの水平リストを表示します。ユーザーが一度に選択できるラジオボタンは 1 つだけです。コンポーネントの値が NULL の場合、または許可される値のいずれとも一致しない場合は、ボタンは選択されません。
Radio
ページにリンクを配置します。
Link
ボタンを表示します。
Button
このフォームで使用されるビューによって定義される変数を参照します。
accountId
複数行のテキスト入力ボックスを表示します。
カスタマイズに関連するその他のトピック
ここでは、次のトピックについて説明します。
フォームの構造
フォームは、XML オブジェクトとして Identity Manager リポジトリに格納されます。各フォームは、次の構造を持つ独自のオブジェクトとして格納されます。
注
フォームの XML 構造を理解している必要はありません。Identity Manager IDE を使用することで、フォームの構造を簡単に操作できます。次に示す情報は、参照のみを目的としています。
次のスタブフォームは、フォームの一般的な構造を示しています。
コード例 2-4
<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE Configuration PUBLIC 'waveset.dtd' 'waveset.dtd'>
<!-- id="#ID#UserForm:EndUserMenu" name="End User Menu"-->
<Configuration id='#ID#UserForm:EndUserMenu' name='End User Menu'
reateDate='1012185191296' lastModifier='Configurator'
lastModDate='1013190499093' lastMod='44' counter='0' wstype='UserForm'>
<Extension>
<Form name='End User Menu'>
<Display class='LinkForm'>
<Property name='title' value='User Self Service'/>
<Property name='subtitle' value='Select one of the following options'/>
</Display>
Field content
</Form>
</Extension>
<MemberObjectGroups>
<ObjectRef type='ObjectGroup' id='#ID#Top' name='Top'/>
</MemberObjectGroups>
</Configuration>
注
Identity Manager のユーザーインタフェースは、ナビゲーションバーを含む 2 番目の XPRESS フォームを実装しています。これは、描画されるページに 2 つの <FORM> タグがあり、各タグで name 属性の設定が次のように異なることを意味します。
<form name="endUserNavigation">
および
<form name="mainform">
フォームのコンポーネント
次の表は、フォームに表示される順序でフォームコンポーネントを示しています。各フォームコンポーネントの詳細については後述します。
表 2-7 フォームのコンポーネント
フォームコンポーネント
目的
ヘッダー
フォームのオブジェクト定義に関する情報を示します。<Form>、<Extension>、および <Configuration> 要素の開始タグが含まれ、フォームのプロパティー (フォームの呼び出し時に表示される title、subtitle、titleWidth など) を定義します。
フォーム本文
フィールド定義、フォーム関数、およびフォーム変数が含まれます。これは、フォームの中で編集する部分です。
フッター
<Form>、<Extension>、および <Configuration> 要素の終了タグが含まれます。
ヘッダー
フォームヘッダーに含まれる内容は次のとおりです。
ヘッダーには、作成日、ファイルを最後に修正したユーザーのログイン、フォームタイプなどの内部識別情報をはじめとする、フォームに関する情報が含まれます。この情報は、通常、ページプロセッサによって生成されます。
表 2-8 フォームヘッダーのコンポーネント
要素
定義
構文/例
<Extension>
<Form> 要素を囲むために使用されます。
<Element>…</Element>
<Configuration>
最後の修正日や、このフォームを最後に修正したユーザーのログインなど、フォームオブジェクトを処理するときにシステムが内部的に使用する情報が含まれます。これらの情報のほとんどは、通常、Identity Manager リポジトリに格納されているいずれかの持続オブジェクトと関連付けられています。多くの場合、この情報を編集する必要はありません。
Configuration id='#ID#UserForm:EndUserMenu' name='End User Menu' createDate='1012185191296' lastModifier='Configurator' lastModDate='1013190499093' lastMod='44' counter='0' wstype='UserForm'>
フォーム本文
フォーム本文は、次の内容から構成されます。
次の表は、フォームヘッダーのプロパティーを示しています。
表 2-9 フォームヘッダーのプロパティー
プロパティー
目的
title
フォーム上部に表示されるテキストを指定します。多くの場合、このタイトルは、画面のその他のフォントより大きな太字で表示されます。フォームの title は、Identity Manager ページの下に表示されます。タイトルの表示特性は編集できません。
「フォームのコンポーネント」の節で示した例では、title の値は User Self Service です。
subtitle
このフォームによって定義されるページのフォームタイトルの下に表示されるテキストを指定します。タイトルの表示特性は編集できません。
前述の例では、subtitle の値は Select one of the following options です。
titleWidth
ブラウザウィンドウのタイトルの幅を、ピクセル単位で指定します。
例
<Display>
<Property name='titleWidth'>
<Integer>120</Integer>
</Property>
</Display>
次の表は、フォーム本文で使用されるすべての要素を示しています。
表 2-10 フォーム本文で使用される要素
コンポーネント
定義
例
defun
XPRESS 関数を定義します。この要素は、フォーム内のどのフィールド要素からも呼び出すことができます。
<defun name='add100'>
<def arg name='x'/>
<add><i>x</i><i>100</i>
</add>
</defun>
defvar
計算結果を保持するための、XPRESS 変数を定義します。
<defvar name='nameLength'
<length>
<ref>fullname</ref>
</length>
</defvar>
Display
フィールドの外観を定義する表示コンポーネントを指定します。詳細については、「Display 要素」の節を参照してください。
<Display class='LinkForm'>
<Property name='title' value='User Self Service'/>
<Property name='subtitle' value='Select one of the following options'/>
</Display>
フィールド
フォーム本文で使用される主要要素。詳細については、「Field 要素」の節を参照してください。
<Field name='fullname'/>
FieldRef
含まれるフォームに定義されているフィールドへの参照を設定します。
<FieldRef name='fieldName'/>
Include
別のフォームオブジェクトへの参照を設定します。現在のフォームにこのコンポーネントを含めると、そのフォームに定義されるフィールドを参照し、表示できるようになります。
<Include>
<ObjectRef type='UserForm' id='#ID#UserForm:UserFormLibrary'/>
</Include>
FormRef
別のフォームオブジェクトへの参照を設定します。
<FormRef name='formName'/>
Namespace
ビューへのショートカットを定義するときに使用されます。フィールド名と参照に、長い名前の代わりに短縮名を使用できます。代替名を使用するときは、名前のあとにコロン (:) を続けます。
<Namespace name='w' value='waveset'/>
Form 要素
<Form> 要素は、すべての Field 要素を囲み、フォームの一意の名前を含みます。前のページに示される要素は、Form の開始タグと終了タグの間に記述されます。
コード例 2-5
<Form name='Create User Form'
<Field name='waveset.accountId'>
additional fields
</Form>
別の例:
<Form name='Task Launch Form'>
<Display class='EditForm'>
<Property name='title' value='Task Launch'/>
<Property name='subTitle' value='Enter task launch parameters'/>
</Display>
...
</Form>
Display 要素
Form 要素内の Display 要素は、フォームの表示に使用されるコンポーネントを表現します。デフォルトでは、この Display 要素は EditForm コンポーネントで使用されます。Form コンポーネントクラスの変更が必要となることはあまりありませんが、コンポーネントのプロパティーは設定可能です。もっとも多く指定される 2 つのプロパティーは title と subTitle です。
EditForm は、隣接するフィールドのタイトルの幅を設定する adjacentTitleWidth プロパティーもサポートします。このプロパティーが定義されていない場合は、デフォルト値のゼロが適用されます。
adjacentTitleWidth の値をゼロに設定すると、列のタイトルの大きさは自動的に変更されます。ゼロ以外の値を設定した場合は、隣接する列 (たとえば、2 番目と 3 番目の列) のタイトルの幅は adjacentTitleWidth の値に設定されます。
<Form name='Default User Form' help='account/modify-help.xml'>
<Display class='EditForm'>
<Property name='titleWidth' value='120'>
<Property name='adjacentTitleWidth' value='60'>
</Display>
Field 要素
Field 要素は、フォーム本文で使用される主要要素です。フィールドは、ユーザーの各属性の定義に使用されます。Field 要素を使用して、フォームフィールドに XPRESS ロジックを含めることができます。フォームの Field 要素の操作の詳細については、「フィールドの定義」の節を参照してください。
次の例は、Email Address というラベルを持つ編集フィールドを作成します。
<Field name='waveset.email'>
<Display class='Text'>
<Property title='Email Address'/>
<Property size='60'/>
<Property maxLength='128'/>
</Display>
...
</Field>
編集フィールドの名前は、多くの場合、フォームで使用されるビュー内のパス式です。この例で waveset.email は、Identity Manager リポジトリ内のユーザーオブジェクトに関連付けられている電子メールアドレスを参照します。
フッター
フッターには、フォームが関連付けられている Identity Manager オブジェクトグループまたは組織に関する情報が含まれます。また、</Form>、</Extension>、および</Configuration> 要素の終了タグ、またはヘッダー内で開始したその他の要素の終了タグも含まれます。前述の例には、次のようなフッターが含まれます。
</Form>
</Extension>
<MemberObjectGroups>
<ObjectRef type='ObjectGroup' id='#ID#Top' name='Top'/>
</MemberObjectGroups>
</Configuration>
<MemberObjectGroups> は、システムがオブジェクトを格納するオブジェクトグループまたは組織を特定します。オブジェクトグループを指定しない場合は、システムはデフォルトの組織である Top にオブジェクトを割り当てます。多くの場合、フォームを含む Configuration オブジェクトは、次の構文で All グループに含まれます。
<MemberObjectGroups>
<ObjectRef type='ObjectGroup' name='All'/>
</MemberObjectGroups>
フォームフィールドとは
フォーム本文には、Web ページの各要素の外観と動作を定義する Field 要素が含まれます。各 Field 要素には、それぞれが独自の表示コンポーネントを持つその他のフィールドを含めることができます。
フォームフィールドは、<Field> タグのセットに囲まれた、いくつかの部分から構成されます。
- 値の式: フィールドには、フィールドの値を計算したり、許可される値のセットを定義したりする XPRESS 式を数多く含めることができます。たとえば、フィールドのデフォルト値を定義するときは <Default> を使用し、フォームを最初に読み込んだときに計算されるフィールド値を定義するときは <Derivation> を使用します。すべてのフィールド要素が式を含むわけではありません。「フィールド名の定義」の節を参照してください。
- HTML 表示コンポーネント: 表示コンポーネントは、可視要素をどのように表示するかを決定します。Identity Manager のフォームフィールドでは、フォーム内の <Display> 要素で定義された表示コンポーネントが、フォームフィールドの動作と外観を設定します。それぞれのフィールドに設定できる表示コンポーネントは 1 つだけです。これらの表示コンポーネントの詳細については、第 6 章「HTML 表示コンポーネント」を参照してください。
- Disable 式: Disable 式を使用することで、条件に応じて、フィールドをフォームに含めることができます。Disable 式が true と評価される場合は、フィールドは無視されます。
変数の作成
定数または静的データの長いリストを含む変数を作成するときは、次の構文を使用します。この構文は、静的なリストを 1 回作成し、それぞれの参照で再利用します。
<defvar name='states'>
<List>
<String>Alabama</String>
...
</List>
</defvar>
参照のたびに新しいリストを作成するときは、<list><s>Alabama</s>...</list> という構文を使用します。
注
フォーム変数の値や、Identity Manager オブジェクトに名前を付けるときは、かっこの対応を取る必要があります。オブジェクト名やフォーム変数でかっこを使用する場合は、対応が取れている (つまり「(」のそれぞれに対応する「)」がある) 必要があります。これにより、すべてのフォーム変数を適切に展開できます。かっこの対応が取れていないと、エラーになります。
たとえば、リソース名でかっこの対応が取れていないと、このリソースが割り当てられたユーザーのユーザーオブジェクトを編集または削除することはできません。ただし、特定のリソース名でかっこが対応していないためにエラーが発生した場合には、それに関連するエラーメッセージが表示されます。
フィールドの定義
ここでは、フォームをカスタマイズするときに実行する手順について説明します。次の手順が含まれます。
次に、設定するフィールド特性について、より詳しく説明します。
フィールド名の定義
リソースに定義されている属性と、Web ページに表示されるテキスト入力フィールドを一致させるには、フィールド名を使用します。リソースを定義すると、システムはリソースのアカウント属性と Identity Manager の属性をマップするスキーママップを設定します。たとえば、Active Directory リソースには、firstname、lastname、Office Phone などの属性が含まれる可能性があります。フォームでこれらの属性を参照するときは、Identity Manager スキーマに記録されている属性名と、ビューから属性へのパスがわかっていなければなりません。
Field 要素の name 属性を定義するには、2 つの方法があります。
Field 名がビューのパス式を表すか、単なる参照名を表すかは、Display 要素で選択した class 属性の値によって決まります。編集するコンポーネントクラスの名前が Display クラスである場合は、その名前はビューのパス式であると考えられます。コンポーネントクラスの詳細については、「HTML 表示コンポーネント」の節を参照してください。
ビュー属性へのパス式の作成
Field 名を定義するときは、通常、ユーザービュー内の属性へのパス (パス式) を指定します。これらの属性のリストについては、「Identity Manager のビュー」を参照してください。
次のフィールド定義は、Identity Manager の電子メールアドレスを編集できるようにテキストフィールドを表示します。
<Field name='waveset.email'>
<Display class='Text'>
<Property name='size' value='60'/>
</Display>
</Field>
waveset.email という文字列は、Identity Manager のリポジトリに格納される電子メールアドレスをターゲットとした、ユーザービューのパス式です。
例:
このフィールド例は、特定のリソースアカウント用に定義されている電子メールアドレスを編集します。フィールド名は、アカウント内のリソースを参照します。
<Field name='accounts[Active Directory].email'>
<Display class='Text'>
<Property name='size' value='60'/>
</Display>
</Field>
accounts[Active Directory].email という文字列は、指定されたリソースのアカウント属性に関する情報を保持するユーザービュー内の別の場所へのパス式です。この例では、リソースの名前は Active Directory です。
例:
このフィールド例は、スキーママップの左側部分に email という属性を持つ、Identity Manager を含むすべてのリソースの電子メールアドレスを定義します。
<Field name='global.email'>
<Display class='Text'>
<Property name='size' value='60'/>
</Display>
</Field>
参照するフィールドの指定
フィールドに名前を付けることで、別のフィールドからそのフィールドの値を参照できます。別のフィールドからフィールド値を参照するときは、<ref></ref> のタグセットを使用します。次の例は、firstname フィールドと lastname フィールドの値を取得し、lastname, firstname のように、フィールドの文字列、コンマ、および空白文字を連結して、fullname フィールドの値を導出します。文字列の指定には、<s> タグを使用します。
コード例 2-6
<Field name='global.firstname'>
<Display class='Text'/>
</Field>
<Field name='global.lastname'>
<Display class='Text'/>
</Field>
<Field name='global.fullname'>
<Expansion>
<concat>
<ref>global.lastname</ref><s>, </s>
<ref>global.firstname</ref>
</concat>
</Expansion>
</Field>
すべての Field 名がビューのパス式を表すわけではありません。一部のフィールドは、別のフィールドのコンテナを表すように定義され、ビューのその他の属性に対応しません。このような場合は、FieldRef 要素によって参照できるように、Field 名を使用してフィールドを特定します。フィールドを参照する必要がない場合は、名前を指定する必要はありません。
たとえば、フォームボタンはアクションを実行しますが、値を持たず、別のフォームから参照する必要がありません。このため、フィールド名の指定も必要ありません。
<Field>
<Display class='Button'>
<Property name='label' value='再計算'/>
<Property name='command' value='再計算'/>
</Display>
</Field>
ユーザービューの詳細については、「ユーザービューとフォーム」の節を参照してください。
フィールドの表示プロパティー
Display 要素は、すべての可視フォームフィールドに共通です。Display 要素には、ブラウザに表示されるフィールドの特性を定義する Property 要素が含まれます。フィールドに true と評価される Disable 要素が含まれる場合を除き、フォームの Display 要素を定義すると、その要素を画面に表示できます。フィールドを再計算するフォームが画面に表示されないように設定できる場合に、別のフィールドまたは値が設定されるまでフォームを表示する、という条件を指定することができます。「フィールドの無効化」の節を参照してください。
Display
可視フィールドのクラスとプロパティーを表現します。この要素は、インスタンス化するコンポーネントクラスと、そのインスタンスに割り当てるプロパティー値のセットを指定します。
<Display class='Text'>
<Property name='size' value='20'/>
<Property name='maxLength' value='100'/>
</Display>
Display 要素の class 属性は、Component クラスの名前である必要があります。デフォルトでは、これらのクラスは Applet、Button、DatePicker などを含み、com.waveset.ui.util.html パッケージに格納されています。デフォルトのすべてのクラスとその説明については、「HTML 表示コンポーネント」の「基本コンポーネントクラス」の節を参照してください。このパッケージに含まれないクラスを参照するときは、class 属性の完全修飾クラス名を指定します。このマニュアルで説明するすべてのクラスはデフォルトパッケージに含まれるので、修飾名を指定する必要はありません。
プロパティー
Display 要素内に指定されます。Property の値は、コンポーネントに割り当てられるプロパティーの名前と、その値を定義します。プロパティー名は、常に name 属性で指定されます。
Display 要素の Property 値の指定
Display 要素の Property の値は、次の方法で指定できます。
ほとんどのプロパティーの値は、value 属性を使用して、値に適切なタイプを割り当てるようにシステムに強制することで設定できます。
value 属性の使用
プロパティーの値を設定するもっとも一般的な方法は、value 属性の使用です。value 属性の値は文字列として認識されますが、システムは必要に応じてコンポーネントに適したデータ型を強制します。前述の例では、size には整数値 20 が設定され、maxLength には整数値 100 が設定されています。
次の例では、SimpleTable を使用して、いくつかのサブフィールドを構成するフィールドを作成します。XML フォームでもっとも一般的に使用される Container コンポーネントは、SimpleTable と ButtonRow です。
コード例 2-7
<Field name='SelectionTable'>
<Display class='SimpleTable'>
<Property name='columns'>
<List>
<String>Account</String>
<String>Description</String>
</List>
</Property>
</Display>
<Field name='accounts[LDAP].selected'>
<Display class='Checkbox'>
<Property name='label' value='LDAP'/>
</Display>
</Field>
<Field>
<Display class='Label'>
<Property name='text' value='Primary Corporate LDAP Server'/>
</Display>
</Field>
<Field name='accounts[W2K].selected'>
<Display class='Checkbox'>
<Property name='label' value='Windows 2000'/>
</Display>
</Field>
<Field>
<Display class='Label'>
<Property name='text' value='Primary Windows 2000 Server'/>
</Display>
</Field>
</Field>
Display 要素には、ゼロ個以上の Property 要素が含まれます。これらの要素は、そのコンポーネントに割り当てられるプロパティーの名前と値を定義します。Property 要素の名前は、常に name 属性で指定されます。プロパティー値の設定には、多くの場合、value 属性が使用されます。value 属性の値は文字列として認識されますが、必要に応じて、コンポーネントに適したデータ型が強制されます。
XML オブジェクト言語の使用
XML オブジェクト言語を使用してプロパティー値を指定することもできます。これは、主にリストの値を指定するときに便利です。この言語の構文を使用することで、いくつかの標準 Java オブジェクトと、Identity Manager によって定義されるその他オブジェクトを表現できます。
もっとも一般的な Java XML オブジェクトは次のとおりです。
XML オブジェクト構文を使用してプロパティー値を指定するときは、要素が Property 要素内に配置されます。XML オブジェクト言語の詳細については、「XML オブジェクト言語」を参照してください。
コード例 2-8
<Property name='size'>
<Integer>10</Integer>
</Property>
<Property name='title'>
<String>New Password</String>
</Property>
<Property name='leftLabel'>
<Boolean>true</Boolean>
</Property>
<Property name='allowedValues'>
<List>
<String>Texas</String>
<String>Iowa</String>
<String>Berkshire</String>
</List>
</Property>
リストの値を認識するすべてのプロパティーは、List 要素を認識します。また、ほとんどの属性は、リストを指定するコンマ区切りのリスト構文を認識します。
値を計算する式の使用
Property の値を式で指定することもできます。これにより、固定のリテラル値と、ページプロセッサによって定義される変数の値を組み合わせるなどの方法で、実行時に値を計算することができます。例:
コード例 2-9
<Property name='title'>
<concat>
<s>Welcome </s>
<ref>waveset.accountId</ref>
<s>, select one of the following options.</s>
</concat>
</Property>
この例では、waveset.accountId が変数を参照しています。システムがこのコンポーネントの HTML を生成するときに、ページプロセッサシステムが waveset.accountId 変数の値を供給します。参照できる変数の名前は、ページプロセッサによって定義されます。ほとんどの場合、これらの変数の定義には、XML フォームで使用される view が使用されます。フォームは、そのフォームを使用するビューと、そのビューによって定義される参照属性のみに注意するだけで設計できます。
Disable 要素
ブール型の値を計算します。計算結果が true となる場合は、現在のフォームの処理で、そのフィールドと、すべての入れ子フィールドが無視されます。
Disable 要素で時間のかかる可能性がある処理を作成しないでください。これらの式は、フォームが再計算されるたびに実行されます。代わりに、この計算を頻繁には実行しない別のフォーム要素を使用してください。
例
この例は、<Disable> 要素内の式を使用してフィールドの可視性を制御するフィールド定義を示しています。accountInfo.typeNames は、そのユーザーが割り当てられているすべてのリソースのタイプの検出に使用されます。これらのタイプは、ユーザーのすべてのリソースタイプのリストとして返されます。返されるタイプ名のリストに Solaris が含まれるときは、そのフィールドは画面に表示されます。含まれない場合は、そのフィールドは無効化されます。
コード例 2-10
<Field name='HomeDirectory' prompt='Home Directory'>
<Display class='Text'/>
<Disable>
<not>
<contains>
<ref>accountInfo.typeNames</ref>
<s>Solaris</s>
</contains>
</not>
</Disable>
</Field>
Disable 要素は一般的に、フォーム上のほかのフィールドの値を確認するために使用されます。別のフィールドが特定の値を持つ場合は無効化し、そうでない場合は無効化しません。NULLの場合は特殊なケースになります。多くの場合、参照している別のフィールドはほかの入力フィールドに基づいて計算されます。
コード例 2-11
<Field name='special value subfield'>
<Comment>otherField の値が「special value」の場合のみ表示します
</Comments>
<Disable>
<neq>
<ref>otherField</ref>
<s>special value</s>
</neq>
</Disable>
...
</Field>
コード例 2-12
<Field name='account correlation rule'>
<Comment>リソースでの同期でアカウント相関規則がサポートされている場合は、その規則を選択できます。そうでない場合、フィールドは表示されません。処理規則が選択された場合は、相関規則が実行されないため、フィールドは表示されません。
</Comments>
<Disable>
<or>
<isnull>
<ref>resourceAttributes[correlationRule].displayName</ref>
</isnull>
<notnull>
<ref>resourceAttributes[processRule].value</ref>
</notnull>
</or>
</Disable>
...
</Field>
Default 要素
NULL 以外の値がフィールドに設定されていない場合にのみ、このフィールドの値として使用される値を計算します。Default は基本的には Derivation と同じですが、現在値が NULL 以外の場合にのみ値が適用されます。Default 式は、次の場合に計算されます。
例
この例は、文字列操作式を使用して、ユーザーの名の頭文字と姓から構成されるデフォルトのアカウント ID を返すフィールド定義を示しています。
コード例 2-13
<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>
<ref>accounts[AD].lastname</ref>
</substr>
</concat>
</Default>
</Field>
Derivation 要素
フィールドの値を無条件で計算します。Derivation 式が評価されると、フィールドの現在値は常に置き換えられます。
Derivation 式は、フォームが最初に読み込まれるとき、あるいは、1 つまたは複数のリソースからデータが返されるときに計算されます。
次の例は、条件ロジックを使用して、値のセットを別のセットにマップするフィールド定義を示しています。このフィールドを処理すると、<Derivation> 要素内の式が評価され、リソースから返される場所のコードに基づいて、このフィールドに表示される説明的な値が決定されます。
コード例 2-14
<Field name='location'>
<Display class='Text'>
<Property name='title' value='Location'/>
</Display>
<Derivation>
<switch>
<ref>accounts[Oracle].locCode</ref>
<case>
<s>AUS</s>
<s>Austin</s>
</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>
Expansion 要素
フィールドの値を無条件で計算します。この要素は、式の評価のタイミングが Derivation 要素とは異なります。
Expansion ステートメントは、次の場合に計算されます。
次の例は、条件ロジックを使用して、前述の例の location フィールドから得られる値を、Oracle リソースに格納される 3 文字の略号に変換するフィールド定義を示しています。フィールド名の違いに注意してください。location フィールドの値は、どのリソースにも格納されません。これは、別のフィールドの計算に使用されます。
コード例 2-15
<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>
Validation 要素
フォームに入力された値が有効であるかどうかを検証します。Validation 規則は、フォームを送信するたびに評価されます。
この例では、ユーザーの郵便番号が 5 桁であるかどうかが Validation 規則によって確認されます。
コード例 2-16
<Validation>
<cond>
<and>
<eq><length><ref>global.zipcode</ref></length>
<i>5</i>
</eq>
<gt><ref>global.zipcode</ref><i>99999</i></gt>
</and>
<null/>
<s>zip codes must be five digits long</s>
</cond>
</Validation>
編集フィールドとコンテナフィールド
Field 要素に指定された Display 要素は、フィールドの表示に使用されるコンポーネントを表現します。これには、次の 2 種類のフィールドが使用されます。
編集フィールドは必ず名前を持ち、常に Text や Checkbox など、いずれかの編集コンポーネントとともに使用されます。
編集フィールドの例
<Field name='waveset.email'>
<Display class='Text'>
<Property title='Email Address'/>
<Property size='60'/>
<Property maxLength='128'/>
</Display>
...
</Field>
編集フィールドの名前は、多くの場合、フォームで使用されるビュー内のパス式です。前述の例で waveset.email は、Identity Manager リポジトリ内のユーザーオブジェクトに関連付けられている電子メールアドレスを参照します。
コンテナフィールドは名前を持たない場合があり、常に ButtonRow、SimpleTable、EditForm などのいずれかのコンテナコンポーネントとともに使用されます。
よく使用されるコンテナのタイプには、1 つの列にタイトル、別の列にコンポーネントを持つ HTML テーブルを作成する EditForm コンテナがあります。これらのタイトルは title プロパティーに定義され、そのフォームに関連付けられている Identity Manager ページに表示されます。
フィールドの無効化
フィールドを無効にすると、フィールドと、その入れ子フィールドはページに表示されなくなります。その値の式は評価されないか、またはどの global.* 属性にも組み込まれません。無効化されたフィールドの値がすでにビューに含まれる場合、その値は変更されません。
<Disable></Disable>
例
<Field name='waveset id'>
<Display class='Text'>
<Property title='accountId'>
</Display>
<Disable>
<eq><ref>userExists</ref><s>true</s></eq>
</Disable>
</Field>
注
Disable 式は、その他の式よりも頻繁に評価されます。このため、Disable 式は、比較的単純に記述してください。データベースのルックアップのように、負荷の大きい処理を実行する Java クラスは呼び出さないようにしてください。
Disable 式の規則でフィールドを参照するときは注意が必要です。誤って設定すると、コンテナ内のフィールドが無効化される場合があります。
フィールドの非表示
フィールドを非表示に設定すると、フィールドと、その入れ子フィールドはページに表示されなくなります。ただし、フォームの処理によって、フィールドの値は設定されます。
フィールドに Display クラスを割り当てないだけで、フィールドは簡単に非表示にできます。
<Field name='field A'/>
フィールド値の計算
フィールドの値は、別のフィールドの値や、任意の論理式の値から計算できます。たとえば、ユーザーの姓、ミドルネームのイニシャル、および名からフルネームを導出できます。
コード例 2-17
<Field name='global.fullname'>
<Expansion>
<concat>
<ref>global.firstname</ref>
<s> </s>
<ref>global.middle</ref>
<ref>global.lastname</ref>
<s> </s>
</concat>
</Expansion>
</Field>
デフォルト値の設定
ユーザーの名の頭文字と、姓の最初の 7 文字を使用して、電子メールアドレスを設定することができます。この例では、それらを連結する前に値が設定されていることを確認するため、システムが追加チェックを行います。この追加チェックの目的は次のとおりです。
- アカウントの最初の作成時にのみ、電子メールアドレスを設定できるようにする。
- 姓、名の各フィールドに値が設定されていることを確認する。
コード例 2-18
<Field name='global.email'>
<Default>
<and>
<notnull><ref>global.firstname</ref></notnull>
<notnull><ref>global.lastname</ref></notnull>
</and>
<concat>
<downcase>
<substr>
<ref>global.firstname</ref>
<i>0</i>
<i>1</i>
</substr>
</downcase>
<downcase>
<substr>
<ref>global.lastname</ref>
<i>0</i>
<i>6</i>
</substr>
</downcase>
<s>@waveset.com</s>
</concat>
</Default>
</Field>
フィールド値の導出
一部のフィールドは、別のフィールドを計算するときにだけ、フォーム上で使用されます。これらのフィールドは、ユーザーが属すどのリソースにも格納できません。ユーザーレコードを編集すると、それぞれのリソースが参照され、属性のフィールド値が取り込まれます。計算に使用されるフィールドの値を取り込むときは、Derivation 規則を記述します。
例
電話番号のフィールドは、1 つのテキストボックスとしてフォームに表示されます。しかし、より高度なフォームには、リソースに保存する電話番号の計算に使用される、市外局番と電話番号の 3 つのフィールドが含まれる場合があります。
電話番号を表す単純な例では、次のようなフォームフィールドを使用できます。
コード例 2-19
<Field name='P1'>
<Display class='Text'>
<Property name='title' value='Office Phone Number'/>
<Property name='size' value='3'/>
<Property name='maxLength' value='3'/>
</Display>
</Field>
<Field name='P2'>
<Display class='Text'>
<Property name='title' value='-'/>
<Property name='size' value='3'/>
<Property name='maxLength' value='3'/>
</Display>
</Field>
<Field name='P3'>
<Display class='Text'>
<Property name='title' value='-'/>
<Property name='size' value='4'/>
<Property name='maxLength' value='4'/>
</Display>
</Field>
<Field name='global.OfficePhone'>
<Expansion>
<concat>
<ref>P1</ref><s>-</s>
<ref>P2</ref><s>-</s>
<ref>P3</ref>
</concat>
</Expansion>
</Field>
例
次の例は、前述の例で定義されている P1 フィールドのフィールド定義を拡張します。これは、電話番号の属性をフォームに読み込む方法を定義し、それを 3 つのフィールドの表示に展開します。
コード例 2-20
<Field name='P1'>
<Display class='Text'>
<Property name='title' value='Office Number'/>
<Property name='size' value='3'/>
<Property name='maxlength' value='3'/>
</Display>
</Field>
ユーザーが Identity Manager にデータを入力すると、データが適切に入力されかどうかがフォームによって確認されます。しかし、リソースに直接入力された場合は、リソースが同じ要件を満たしているかどうかについて Identity Manager が検証することはできません。たとえば、長年にわたって、管理者が電話番号を 123-4567 (8 文字) と入力したり、123-123-4567 (12 文字) または (123) 123-4567 (14 文字) のように入力したりしている可能性もあります。
例
OfficePhone フィールドの定義は、これまでの例と同様ですが、Derivation 規則を使用するには、3 つのフィールド (P1、P2、および P3) のそれぞれを更新する必要があります。この例は、P1 フィールドの更新を表しています。
コード例 2-21
<defvar name='lenOfficePhone'>
<length><ref>Office Phone</ref></length>
</defvar>
<Field name='P1'>
<Display class='Text'>
<Property name='title' value='Office Phone Number'/>
<Property name='size' value='3'/>
<Property name='maxLength' value='3'>
</Display>
<Derivation>
<or>
<cond><eq>
<ref>lenOfficePhone</ref>
<s>8</s></eq>
<s> </s></eq>
</cond>
<cond><eq>
<ref>lenOfficePhone</ref>
<s>12</s></eq>
<substr>
<ref>Office Phone</ref>
<i>0</i>
<i>1</i>
</substr>
</cond>
<cond><eq>
<ref>lenOfficePhone</ref>
<s>14</s></eq>
<substr>
<ref>Office Phone</ref>
<i>0</i>
<i>1</i>
</substr>
</cond>
</or>
</Derivation>
</Field>
フィールドを計算するときは、データの現在の形式と、リソースの品質に注意してください。新規ユーザーを作成するときは、正しいフィールド値の確認は比較的容易です。リソースから読み込む場合に、既存のデータをフィールドに適合させることのほうがずっと困難です。どのフィールドにも Derivation 規則を適用し、読み込むときに属性の形式を確認することができます。
フィールドの再計算
ユーザーがフォームを操作するときに、システムは何度もフィールドを計算します。フィールドの計算は、フィールドを最初に表示したときにデフォルト値を設定するために行われ、フォームの計算は、ユーザーが「保存」をクリックしたときに行われます。これ以外に、「ユーザーの編集」ページの「再計算」をクリックすると、フォームが評価されます。また、action フィールドを使用してフォームを評価することもできます。
例
<Field>
<Display class='Button'>
<Property name='label' value='再計算'/>
<Property name='command' value='再計算'/>
</Display>
</Field>
システムがフィールドの値を再計算するように設定するときは、次のように、Display クラス要素の action を true に設定します。
<Display class='Select' action='true'>
この値は、ユーザーが選択またはクリックするフィールドのみに追加します。テストエリアやテキストエリアのフィールドに追加しないでください。フィールドに action=true が設定されると、ブラウザでフィールドを変更するたびにフォームが再計算されます。
例
<Field name='Region'>
<Display class='Select' action='true'>
<Property name='title' value='Geographic Region'/>
<Property name='allowedvalues' value='North, South,
Central, Midwest'./>
<Property name='nullValue' value='Select a region'/>
</Display>
</Field>
フォームの作成に関するガイドライン
新しいフォームの構造を作成したり、既存のフォームを編集したりするときは、次のガイドラインに注意してください。
フォームフィールド内の式の最適化
フォームで実行される一部のアクティビティーは、Identity Manager の外部にあるリソースを呼び出すことができます。これらのリソースへのアクセスは、Identity Manager のパフォーマンスに影響します。特に、グループや電子メール配信のリストのコンパイルのように、結果が値の長いリストになる場合は大きく影響します。このような呼び出し実行中のパフォーマンスを改善する方法については、「フィールドデータを取得する Java クラスの使用」の節のガイドラインを参照してください。
シナリオの例
次に、式を最適化する例を示します。
Identity Manager に格納されていない情報や、リソースアカウント属性としてアクセスできない情報をデータベースに照会する場合の一般的な手順は次のとおりです。
フィールドデータを取得する Java クラスの使用
情報の取得時に呼び出されるメソッドを持つ Java クラスを記述します。次の節「非表示フォームフィールドの定義」で紹介する例は、カスタムメソッドである getJobGrade メソッドを使用します。このカスタムクラスは、idm¥WEB-INF¥classes¥com¥waveset¥custom ディレクトリ構造に配置してください。システムにこれらのディレクトリが存在しない場合は、作成する必要があります。
このクラスを記述するときは、次のガイドラインに注意してください。
非表示フォームフィールドの定義
まず、Java クラスを呼び出す Default 式を使用する非表示フォームフィールドを、フィールド定義に Display クラスを含めずに定義します。
<Field name='jobGrade'>
<Default>
<invoke name='getJobGrade' class='com.waveset.custom.DatabaseAccessor'>
<ref>waveset.accountId</ref>
</invoke>
</Default>
</Field>
</Derivation>
Default 式は、jobGrade 属性の値がビューに含まれない場合にのみ評価されます。一度 Default 式を実行すると、結果が jobGrade に格納され、再実行されません。
要素の「フォーム要素」ダイアログで次の操作を行います。
Hidden 表示クラスは、HTML の <input type=hidden> コンポーネントに相当します。このコンポーネントは、1 つの値をとるデータ型のみをサポートします。複数の値をとるデータ型を確実に直列化および直列化復元する方法を持たないためです。
List 要素を文字列として表示する場合は、次の例のように String 要素に明示的に変換する必要があります。
<Field name='testHiddenFieldList' >
<Display class='Hidden'/ >
<Derivation>
<invoke name='toString'>
<List>
<String>aaaa</String> <String>bbbb</String>
</List>
</invoke>
</Derivation>
</Field>
非表示属性の参照
非表示属性を定義すると、次のように別の式からその属性を参照できるようになります。
<Field name='secureKey'>
<Disable><lt><ref>jobGrade</ref><i>10</i></lt></Disable>
...
</Field>
XPRESS の defvar 変数を使用して計算結果を保持することもできますが、通常は非表示フォームフィールドを使用する場合ほど効率的ではありません。
繰り返し時の変数の最適化に関する注意点
XPRESS 変数の値は、通常、フォームフィールドに対する 1 回の実行の間だけ持続します。このため、Expnasion 式に変数を使用することはできますが、それに続く Derivation 式では使用できません。計算結果の値を複数回の実行でも有効にする必要があるときは、代わりに非表示フォームフィールドを使用します。非表示フィールドの値はビューに格納され、変数セッションをキャンセルまたは保存するまで持続します。
新しいリソースとユーザーの自動リンク設定の無効化
Identity Manager には、ユーザーに新しいリソースを割り当てるときに、既存のアカウントとのリンクを制御する方法が用意されています。
ユーザーに新しいリソースを割り当てるときに、ID を割り当てられたアカウントがすでにリソースに存在する場合は、Identity Manager はデフォルトで、そのアカウントを自動的に Identity Manager ユーザーにリンクしてからプロビジョニングを継続します。反対に、この自動リンク設定を無効にし、ユーザーの新規アカウントを作成するときに別のアカウント ID を入力することもできます。
ユーザーに新規アカウントをどのようにリンクさせるかは、次の 2 つの方法で制御できます。
ユーザーフォームでの手動リンク設定の有効化
手動リンク設定を有効にする方法は次のとおりです。
手順 1: プロパティー定義の設定
フォームの先頭に次のようなプロパティー定義を追加します。
<Form>
<Properties>
<Property name='InteractiveLinking' value='true'/>
</Properties>
...
</Form>
手順 2: 標準フォームライブラリに含まれるフィールドの参照
フォーム内の任意の場所にフィールド参照を追加します。次に例を示します。
<FieldRef name='DiscoveredAccountFields'/>
このフィールドを参照するには、ユーザーフォームに次の Include ステートメントを設定してください。この Include 式は、通常、すべてのユーザーフォームにすでに存在します。
<Include>
<ObjectRef type='UserForm' name='User Library'/>
</Include>
これらのフォーム変更を完了すると、Identity Manager はフォームの表示を更新するたびに、また、フォームを保存する前に、既存のアカウントを調べます。Identity Manager が既存のアカウントを検出すると、フォームの最上部に警告メッセージが表示され、検出されたアカウントごとに新しいフィールドが挿入されます。これらの新規フィールドには、リンクを設定するアカウントを手動で指定するためのチェックボックスがあります。
さらに、Identity Manager は、各属性のフィールドをリソースのアイデンティティーテンプレート内に生成します。このフィールドを使用して、アカウントに別のアイデンティティーを指定することができます。Identity Manager は既存アカウントの属性をフェッチし、それをビューに含めます。
これらの属性は、MissingFields 参照または独自のカスタムフィールドを使用して表示できます。存在しないアカウントには別のアイデンティティーを指定するか、フォームを保存する前に既存アカウントとのリンクを設定できるようにチェックボックスを選択してください。
プロビジョニング時の自動リンク設定の回避
対話的でない方法でワークフローからプロビジョニングを行うときは、Identity Manager にアカウントのリンク設定を自動的に行わせるかどうかも制御できます。checkinView の呼び出しに NoLinking ビューオプションを渡すことで、リンクの自動設定を回避できます。このオプションは、いくつかの方法で指定できます。
- 次のように、このオプションを引数として WorkflowServices メソッドに渡します。
<Action application='com.waveset.provision.WorkflowServices'>
<Argument name='op' value='checkinView'/>
<Argument name='view' value='$(user)'/>
<Argument name='NoLinking' value='true'/>
</Action>
- このオプションをビューの属性として設定します。この場合のビュー属性の名前は、viewOptions.NoLinking となります。この属性をワークフローに設定するときは、次のように XPRESS ロジックを使用します。
<set name='user.viewOptions.NoLinking'>
<s>true</s>
</set>
結果ページでのクリアテキストによる属性の表示の回避
Identity Manager では、編集フォームにアスタリスク付きで表示されるように属性を設定した場合でも、結果ページの属性の値は平文形式で表示されます。
属性が結果ページにクリアテキストとして表示されないようにするには、その属性をシークレット属性として登録します。シークレット属性を登録するには、次のようにしてシークレット属性を System Configuration オブジェクトに追加します。
<Attribute name='secretAttributes'>
<List>
<String>email</String>
<String>myAttribute</String>
</List>
</Attribute>
フォームからのリソースメソッドの呼び出し
invoke メソッドを使用することで、フォームからリソースのメソッドを呼び出すことができます。
invoke メソッドを呼び出すには、クラス名とメソッド名を指定します。invoke タグ内部のメソッドには、次の例のように引数を渡すこともできます。
コード例 2-22
<Default>
<block>
<defvar name='vmsResName'>
<index i='0'>
<ref>accountInfo.accounts[type=vms].name</ref>
</index>
<defvar>
<invoke name='callResourceMethod' class='com.waveset.ui.FormUtil'>
<ref>display.session</ref>
<ref>vmsResName</ref>
<null/>
</invoke>
</Default>
フィールドの「フォーム要素」ダイアログで次の操作を行います。
別のフォームからのフォームの参照
<FormRef> 要素を使用することで、完全なフォームではなく、別のフォーム内の特定のフィールドを参照できます。
外部フォームからの別のフォームを含めるには、<FormRef> 要素を使用します。次の例は、MissingFields というフォームを呼び出します。
<FormRef name='MissingFields'/>
<FieldRef name='AuthenticationAnswers'/>
<FieldRef name='AccountInformation'/>
<Field name='waveset.backgroundSave'>
<Display class='Hidden'/>
</Field>
別のフォームからのフィールドの参照
<FieldRef> 要素を使用することで、完全なフォームではなく、別のフォーム内の特定のフィールドを参照できます。
外部フォームからの特定のフィールドを含めるには、<FieldRef> 要素を使用します。このとき、次の項目を指定します。
- フィールドが存在するフォームの名前。このフォーム名は、<ObjectRef> 要素を使用して、フォームヘッダーの Include セクションのリストに含めてください。フォーム名 (UserForm) と一意の設定 ID は、プロパティータイプで指定します。name プロパティーは、後で参照するフィールドの名前を識別します。
- ページ上に表示する位置に対応したフォームセクションに挿入されるフィールド名。
<Include>
<ObjectRef type='UserForm'
id='#ID#04F5F14E01889DFE:2E5C94:F131DD723D:-7FE4'
name='Password Library'/>
<ObjectRef type='UserForm'
id='#ID#04F5F14E01889DFE:2E5C94:F131DD723D:-7FE3'
name='Account Summary Library'/>
<ObjectRef type='UserForm'
id='#ID#UserForm:UserFormLibrary'/>
<ObjectRef type='UserForm' name='Global Attributes'/>
</Include>
次の例では、ページ上に表示する位置に対応したフォームセクションにフィールド名が挿入されています。
<Field name='global.fullname' hidden='true'>
<Expansion>
<cond>
<and>
<ref>global.firstname</ref>
<ref>global.lastname</ref>
</and>
<concat>
<ref>global.firstname</ref>
<s> </s>
<ref>global.lastname</ref>
</concat>
</cond>
</Expansion>
</Field>
次の例の <FieldRef> 要素は、参照する属性の名前を識別します。
<Field>
<Disable>
<isnull>
<ref>waveset.id</ref>
</isnull>
</Disable>
<FieldRef name='DynamicChangePasswordFields'/>
</Field>
フォームの編集フォームを編集することで表示特性を変更したり、論理処理を追加してフィールドやコンポーネントを選択したりできます。ここでは、次の 2 つのカテゴリに分けて、フォーム関連編集タスクについて説明します。
- Display 要素の操作: ここでは、Identity Manager のフォームを編集するときに、特にユーザーに表示される基本ページコンポーネントの表示特性の変更について説明します。このようなコンポーネントには、ボタン、ラジオボタン、チェックボックスなどがあります。
- 非表示コンポーネントの操作: このセクションでは、バックグラウンド処理や、表示されるフォームへの論理処理の追加などの目的で Identity Manager のフォームに追加される、HTML 要素コンポーネントについて説明します。このような要素には、<Disable> コンポーネントや <Expansion> コンポーネント、FormUtil メソッドなどがあります。
タスク関連のセクションで説明される HTML コンポーネントは、「HTML 表示コンポーネント」でアルファベット順に説明されています。
Display 要素の操作
Identity Manager フォームでの変更や追加がもっとも多い Display 要素は、ボタン、フィールド、およびテキスト入力ボックスです。Display 要素には、これ以外にテーブルやセクションのヘッダーがあります。
クラスが指定されていない Display 要素は非表示となります。
ボタン
一般的な押しボタンを作成するときは、<Button> コンポーネントを使用します。
複数のボタンを水平に並べるときは、<ButtonRow> コンポーネントを使用します。
<Field>
<Display class='Button'>
<Property name='location' value='true'/>
<Property name='label' value='キャンセル'/>
<Property name='command' value='Cancel'/>
</Display>
</Field>
ボタンをボタン行に配置するときは、ボタンの定義に <Property name='location ' value=' button '/> というコードを追加します。この Property フィールドを設定しない場合、ボタンはフォームに記述されている順序で縦に表示されます。
ボタンラベルの割り当てと変更
ボタンを定義するとき、ラベルの値は、次のように label プロパティーの value の設定によって指定されます。
<Display class='Button'>
<Property name='label' value='キャンセル'/>
ブラウザは、このコードに指定されている「キャンセル」をボタンのラベルとして表示します。
デフォルトのボタン名の変更
Identity Manager フォームの下部には、通常は 2 つのボタンが表示されます。デフォルトでは、これらのボタンは「保存」と「キャンセル」という名前が付けられています。これらのボタン名を変更するときは、フォームを次のように変更します。
フォームの下部に次のような「保存」ボタンと「キャンセル」ボタンのフィールドを追加し、任意のラベル名に変更します。
<Field>
<Display class='Button'>
<Property name='label' value='Submit'/>
<Property name='name' value='submitButton'/>
<Property name='value' value='true'/>
<Property name='command' value='保存'/>
</Display>
</Field>
<Field>
<Display class='Button'>
<Property name='label' value='キャンセル'/>
<Property name='command' value='Cancel'/>
<Property name='location' value='true'/>
</Display>
</Field>
command パラメータの値とボタン
Identity Manager のインタフェースのすべてのページでは、クリックされたフォーム送信ボタンを伝達するメカニズムとして、command というデータ送信パラメータが使用されてきました。この条件は、コンポーネントを使用するページプロセッサシステムには適用されませんが、特に Button などの一部のコンポーネントには、command パラメータ用の特別サポートが含まれます。
XML フォームを処理するシステムをはじめとする一部のページプロセッサシステムは、command パラメータの使用を前提としています。さらに、特定のアクションを示すために、いくつかの command パラメータの値が使用されています。次の表は、このような値について説明しています。
表 2-11 command パラメータに指定できる値
パラメータ
説明
Save
フォームコンテンツを保存すべきであることを示します。
Cancel
フォームコンテンツを破棄すべきであることを示します。
Recalculate
入力データに基づいてフォーム表示を更新すべきであることを示します。
command パラメータでは、どのような値も使用できますが、認識されない値がページの再表示につながることを覚えておいてください。
<ButtonRow> 要素によるボタンの整列
複数のボタンを 1 行に整列させるときは、ButtonRow 要素を使用します。
<Field name='OrganizeButtons'>
<Display class='ButtonRow'>
<Property name='title' value='Choose a Button'/>
</Display>
<Field name='ChangePassword'>
<Display class='Button'>
<Property name='label' value='Change Password'/>
<Property name='value' value='Recalculate'/>
</Display>
</Field>
<Field name='ResetPassword'>
<Display class='Button'>
<Property name='label' value='Reset Password'/>
<Property name='value' value='Recalculate'/>
</Display>
</Field>
テキストフィールド
フォームには、単一行と複数行の両方のテキスト入力ボックスを含めることができます。単一行のテキスト入力フィールドを作成するときは、<Text> 要素を使用します。複数行のテキスト入力フィールドを作成するときは、<TextArea> 要素を使用します。
<Display class='Text'>
<Property name='title' value='Zip Code'/>
<Property name='size' value='10'/>
<Property name='maxLength' value='10'/>
<Property name='required' value='true'/>
</Display>
フィールドラベルの割り当てと変更
テキストフィールドまたはエリアを定義するとき、ラベルの値は、次のように label プロパティーの value プロパティーで設定されます。
<Display class='Text'>
<Property name='label' value='入力'/>
ブラウザは、このコードに指定されている「入力」をテキスト入力フィールドのラベルとして表示します。
コンテナ
一部の Display 要素は、コンテナコンポーネントというコンポーネント内に配置されます。コンテナコンポーネントには、次のような用途があります。
コンテナクラスを作成すると、通常は HTML table タグが生成されます。
次の表は、代表的なコンテナコンポーネントについて説明しています。
表 2-12 代表的なコンテナコンポーネント
コンポーネント
説明
<SimpleTable>
コンポーネントをグリッドに配置します。オプションとして、上部に列のタイトル行も設定できます。
<ButtonRow>
ボタンを横方向で 1 行に配置します。このコンポーネントは、基本的には、水平レイアウトが事前に設定されたパネルです。
<BorderedPanel>
コンポーネントを、東西南北と中央の 5 つの領域に配置します。
<SortingTable>
ソートに対応した列を持つ、行の背景色が交互に青とベージュで示される表を表示します。
簡単な表の作成
Identity Manager フォームのコンテナコンポーネントでは、<SimpleTable> というコンポーネントが頻繁に使用されます。これは、コンポーネントをグリッドに配置します。オプションとして、上部に列のタイトル行も設定できます。この表示コンポーネントの唯一のプロパティーは、列にタイトルを割り当て、プロパティー文字列のリストで表の幅を定義する columns です。
次の例は、複数のサブフィールドの配置に SimpleTable を使用するフィールドを示しています。
コード例 2-23
<Field name='SelectionTable'>
<Display class='SimpleTable'>
<Property name='columns'>
<List>
<String>Account</String>
<String>Description</String>
</List>
</Property>
</Display>
<Field name='accounts[LDAP].selected'>
<Display class='Checkbox'>
<Property name='label' value='LDAP'/>
</Display>
</Field>
<Field>
<Display class='Label'>
<Property name='text' value='Primary Corporate LDAP Server'/>
</Display>
</Field>
<Field name='accounts[W2K].selected'>
<Display class='Checkbox'>
<Property name='label' value='Windows 2000'/>
</Display>
</Field>
<Field>
<Display class='Label'>
<Property name='text' value='Primary Windows 2000 Server'/>
</Display>
</Field>
</Field>
コンポーネントのグループ化
フォームの複数のコンポーネントをグループ化して非表示または無効にするときは、<SimpleTable> コンテナを次の例のように使用します。
コード例 2-24 フォームのコンポーネントのグループ化
<Field>
<Disable>
<not>
<contains>
<ref>accountInfo.typeNames</ref>
<s>Windows Active Directory</s>
</contains>
</not>
</Disable>
<Field name='accounts[AD].HomeDirectory'>
<Display class='Text'>
<Property name='title' value='Home Directory'>
</Display>
</Field>
</Field>
リストの操作
リストの作成に使用するコンポーネントは、リストの長さと、ユーザーが複数のオプションを同時に選択できるかどうかによって異なります。
多くのテキストボックスには、選択可能な複数のオプションを示すリストを備えています。これらのリストのデータを取り込むときは、allowedValues というプロパティーの内部でリストを指定して選択するか、リソースのメソッド呼び出し (FormUtil クラスメソッド) を利用して動的に取得します。リストのテキストエリアへの情報の取り込みについては、この章の「リストデータの取り込み」の節を参照してください。
次の表は、代表的なリストタイプと、その作成に使用される HTML Display コンポーネントについて説明しています。
表 2-13 代表的なリストタイプと関連する Display コンポーネント
リストタイプ
HTML コンポーネント
true と false のように、互いに排他的な値を持つオプションリスト
<CheckBox>
「チェックボックスの作成」の節を参照してください。
ユーザーが 1 つのオプションのみを選択できる複数オプションのリスト
<RadioButton>
「ラジオボタンの作成」の節を参照してください。
ユーザーが 1 つのオプションのみを選択できる複数オプションのリスト (オプション数が多いリスト)
<Select>
「単一選択リストの作成」の節を参照してください。
複数のオプションを同時に選択できる複数オプションのリスト
<MultiSelect>
「複数選択リストの作成」の節を参照してください。
チェックボックスの作成
チェックボックスの表示には、<Checkbox> コンポーネントを使用します。チェックボックスを選択すると、そのボックスの値は true となります。選択していないボックスの値は false です。label プロパティーの値を編集することで、チェックボックス名を変更できます。
例 1
<Field name='accounts[LDAP].selected'>
<Display class='Checkbox'>
<Property name='label' value='LDAP'/>
</Display>
</Field>
例 2
<Field name='global.Password.Expired'>
<Display class='CheckBox'>
<Property name='title' value='User must change password at
next login'/>
<Property name='alignment' value='left'/>
</Display>
</Field>
ラジオボタンの作成
1 つまたは複数のラジオボタンの水平リストを表示するには、<Radio> コンポーネントを使用します。ユーザーが一度に選択できるラジオボタンは 1 つだけです。コンポーネントの値が NULL の場合、または許可される値のいずれとも一致しない場合は、ボタンは選択されません。
<Field name='global.EmployeeType'>
<Display class='Radio'>
<Property name='title' value='EmployeeType'/>
<Property name='labels' value='Employee, Contractor, Temporary, Part Time'/>
<Property name='required' value='true'/>
</Display>
</Field>
単一選択リストの作成
<MultiSelect> コンポーネント以外に、<Select> コンポーネントも、選択できる項目のリストを作成できます。選択できる値のリストが長くなる場合、ラジオボタンではフォームを占める面積が大きくなります。一方、select リストでは、選択できる値の長いリストからユーザーが値を選択できます。リストが整っている場合は、このリストは先行入力をサポートします。ユーザーが選択できる項目を指定するには、allowedValues プロパティーを使用します。
コード例 2-25
<Field name='global.title'>
<Display class='Select'>
<Property name='title' value='Title'/>
<Property name='allowedValues'>
<List>
<String>Staff</String>
<String>Manager</String>
<String>Director</String>
<String>VP</String>
</List>
</Property>
</Display>
</Field>
複数選択リストの作成
複数のオプションを選択できるリストボックスの表示には、<MultiSelect> コンポーネントを使用します。このテキストボックスは、1 つのボックスに含まれる定義済みの値セットを選択ボックスに移動できる、2 つの部分から構成されるオブジェクトを表示します。リストボックスの値の指定には、allowedValues 要素を使用するか、getResources などのメソッド呼び出しを利用して動的に値を取得します。
<Select> コンポーネント以外に、<MultiSelect> コンポーネントも、選択できる項目リストを動的に作成できます。これらのリストのデータを取り込むときは、allowedValues というプロパティーの内部でリストを指定して選択するか、リソースのメソッド呼び出しを利用して動的に取得します。複数選択入力ボックスに表示するリストの取り込みについては、「リストデータの取り込み」の節を参照してください。
コード例 2-26
<Field name='waveset.roles'>
<Display class='MultiSelect' action='true'>
<Property name='title' value='Roles'/>
<Property name='availableTitle' value='Available Roles'/>
<Property name='selectedTitle' value='Current Roles'/>
<Property name='allowedValues'>
<invoke name='getObjectNames' class='com.waveset.ui.FormUtil'>
<ref>display.session</ref>
<s>Role</s>
<ref>waveset.original.roles</ref>
</invoke>
</Property>
</Display>
</Field>
選択リストの別の表示値セット
フィールドに実際に割り当てられている値セットとは異なる値セットを表示する選択リストを作成できます。このリストは、暗号化された複数の値の判読可能な名前を表示したり、フォームを国際化するために別の表示言語に対応したりする場合によく使用されます。このようなリストを作成するには、valueMap プロパティーを使用して、実際の値と表示値を関連付けます。次の例を参照してください。
コード例 2-27 valueMap プロパティーによる選択リストの値の変更
<Field name='waveset.organization'>
<Display class='Select'>
<Property name='title' value='Add Account'/>
<Property name='nullLabel' value='Select...'/>
<Property name='valueMap'>
<list>
<s>Top</s>
<s>Top Level</s>
<s>Top:OrgB</s>
<s>Ted's Organization</s>
<s>Top:OrgC</s>
<s>Super Secret Org</s>
</list>
</Property>
</Display>
</Field>
前述の例では、値のマップが文字列ペアのリストとして指定されます。リスト項目の奇数行の文字列は、このフィールドに割り当てられる実際の値です。偶数行の文字列は、選択リストに表示される値です。たとえば、選択リストから Ted's Organization を選択すると、このフィールドの値は Top:Orgb となります。
リストデータの取り込み
リストには、ユーザーオブジェクトや外部リソースに格納されている情報から動的に計算されたオプションが取り込まれることがよくあります。このようなリストを作成するには、まず、リストデータを取り込む前に、HTML List コンポーネントを作成します。HTML テキストボックスコンポーネントの使用についての詳細は、「単一選択リストの作成」と「複数選択リストの作成」の節を参照してください。
ここで説明するメソッドを含め、これらのリストデータの取り込みには 2 つの方法があります。
特定のタスクの実行に、XPRESS ではなく XML オブジェクト言語を使用する利点については、「XML オブジェクト言語と XPRESS でのリストの表現」の節を参照してください。
リストへの選択可能値セットの取り込み
フォームで使用されるリストにデータを取り込むためのもっとも一般的な方法は、allowedValues プロパティーを使用することです。このプロパティーを使用することで、<Select> 要素と <MultiSelect> 要素で選択できる値のオプションリストを指定できます。このコンポーネントの値は常にリストであり、その値は通常、文字列です。
<Field name='department'>
<Display class='Select' action='true'>
<Property name='title' value='Department'/>
<Property name='allowedValuesgt;
<List>
<String>Accounting</String>
<String>Human Resources</String>
<String>Sales</String>
<String>Engineering</String>
</List>
</Property>
</Display>
</Field>
グループの複数選択リストへの動的なデータ取り込み
複数選択リストは、通常、2 つの部分から構成されます。
グループの複数選択リストの追加
リソースから動的に取得されたデータを、グループの複数選択リストに追加する方法は次のとおりです。
次の例の display.session の直前の : (コロン) は、フォームのベースコンテキストを無視し、ワークフローコンテキストのルートからオブジェクトを参照できることを表します。
<Field name='global.AD Groups'>
<Display class='MultiSelect' action='true'>
<Property name='title' value='AD Group Membership'/>
<Property name='availableTitle' value='Available AD Groups'/>
<Property name='selectedTitle' value='Selected AD Groups'/>
<Property name='allowedValues'>
<invoke class='com.waveset.ui.FormUtil' name='listResourceObjects'>
<!-- メソッドがユーザー権限の検証に使用するセッション情報を送信します -->
<ref>:display.session</ref>
<!-- リソースオブジェクトタイプ - これはリソースごとに異なりますが、アカウント、グ ループ、および "配信リスト" のタイプは共通です -->
<s>Group</s>
<! -- 呼び出されるリソースの名前 -->
<s>AD Resource Name</s>
<!-- オプションマップ - 一部のリソースにはコンテキストのようなオプションがあり、グ ループのリストが含まれます。たとえば、Active Directory の場合は、複数のコンテナが含まれま す。デフォルトでは、リソースに指定されているコンテナが使用されます。ここに指定する値は、デ フォルト値に優先して適用されます。リソースがオプションをサポートしない場合は、値を <null/> にしてください -->
<Map>
<MapEntry key='context' value='ou=Austin,ou=Texas,dc=Sun,dc=com'/>
</Map>
<!-- cacheList - このリストをリソースオブジェクトのリストキャッシュに取り込むかど うかに応じて、true または false に設定します-->
<s>true</s>
</invoke>
</Property>
</Display>
</Field>
注
リソースがオプションをサポートしない場合は、options map の値を null にしてください。一部のリソースにはコンテキストのようなオプションがあり、グループのリストが含まれます。たとえば、Active Directory の場合は、複数のコンテナが含まれます。デフォルトでは、リソースに指定されているコンテナが使用されます。ここに指定する値は、デフォルト値に優先して適用されます。
cacheList の値は、このリストをリソースオブジェクトのリストキャッシュに格納するかどうかに応じて、true または false に設定します。これにより、メソッドは 1 回実行され、結果はサーバーに格納されます。
選択リストのテキスト入力フィールドの作成
項目を選択するだけでなく、ユーザーが値を入力できる選択リストが必要となる場合もあります。このようなリストを作成するには、次の例のように 3 つのフィールドを実装します。
次の例には、説明的なテキストが組み込まれています。
<defvar name='titleList'>
<list>
<s>Manager</s>
<s>Accountant</s>
<s>Programmer</s>
<s>Assistant</s>
<s>Travel Agent</s>
<s>Other</s>
</list>
</defvar>
この例の次の部分には、title と otherTitle という 2 つの可視フィールドが含まれます。otherTitle フィールドは、ユーザーが選択リストから「Other」オプションを選択した場合にのみ表示されます。3 番目の非表示フィールドは global.Title です。これは、Title と otherTitle のいずれかから設定されます。
ユーザーが選択するためのメインフィールドは Title フィールドです。リストに必要な項目を見つけられなかった場合、ユーザーは「Other」オプションを選択できます。これは一時的なフィールドであり、ユーザーが「保存」をクリックしたときに、格納されたり、ワークフロープロセスに渡されることはありません。リソースからの値の送信と、値がリストに含まれるかどうかの判断には、Derivation 規則が使用されます。
コード例 2-28
<Field name='Title'>
<Display class='Select' action='true'>
<Property name='title' value='Title'/>
<Property name='allowedValues'>
<Property name='nullLabel' value='Select ・/>
<expression>
<ref>titleList</ref>
</expression>
</Property>
</Display>
<Derivation>
<cond>
<isnull><ref>global.Title</ref></isnull>
<null/>
<cond>
<eq>
<contains>
<ref>titleList</ref>
<ref>global.Title</ref>
</contains>
<i>1</i>
</eq>
<ref>global.Title</ref>
<s>Other</s>
</cond>
</cond>
</Derivation>
</Field>
Other フィールドは、ユーザーが Title フィールドから「Other」を選択した場合にのみフォームに表示されます。Other フィールドの値は、フォームの読み込み時に設定されます。この値は、Titleフィールドと global.title フィールドの値に基づきます。
コード例 2-29
<Field name='otherTitle'>
<Display class='Text'>
<Property name='title' value='Other Title'/>
<Property name='rowHold' value='true'/>
<Property name='noWrap' value='true'/>
<Property name='size' value='15'/>
<Property name='maxLength' value='25'/>
</Display>
<Disable>
<neq>
<ref>Title</ref>
<s>Other</s>
</neq>
</Disable>
<Derivation>
<cond>
<eq>
<ref>Title</ref>
<s>Other</s>
</eq>
<ref>global.Title</ref>
</cond>
</Derivation>
</Field>
Field の値は、Title フィールドの値に基づきます。このフィールドの値が Other に設定されると、フィールドの値は otherTitle フィールドの値となります。それ以外の値に設定された場合は、Title フィールドの値となります。
コード例 2-30
<Field name='Title'>
<Expansion>
<cond>
<eq>
<ref>global.fieldTitle</ref>
<s>Other</s>
</eq>
<ref>otherTitle</ref>
<ref>Title</ref>
</cond>
</Expansion>
</Field>
フォームに表示する前のリソースアカウントリストのフィルタリング処理
フォームに表示する前に、リソースアカウントのリストをフィルタリングできます。ユーザーに表示されるリストから無効化されたアカウントを除去するデフォルトのフィルタリング動作が維持されるユーザーインタフェースの「Change Password Form」を除き、デフォルトでは、フィルタは適用されません。
この除去フィルタは、Form プロパティーとして定義されます。このフィルタは、1 つまたは複数の属性条件のリストです。これは、指定されたリソースアカウントを表示リストから除外するかどうかを決定するときに評価されます。
この機能をサポートするフォーム
次のフォームは、Form プロパティーによる除去フィルタの指定をサポートします。
Change Password Form (ユーザーインタフェース)
管理者インタフェースのフォーム:
排除プロパティーの形式
フォームの排除 (Exclude Form) プロパティーの形式は次のとおりです。
<Configuration wstype='UserForm' ...
<Extension>
<Form noDefaultButtons='true'>
...
<Properties>
表示されるアカウントのリストに、無効化されたリソースアカウントを含めるときは、リストから無効化属性条件を削除します。
コード例 2-31
</Property>
<Property name='Exclude'>
<list>
<new class='com.waveset.object.AttributeCondition'>
<s>disabled</s>
<s>equals</s>
</new>
</list>
</Property>
</Properties>
...
</Form>
</Extension>
</Configuration>
有効なビュー属性
有効な属性名は、currentResourceAccounts オブジェクトの各インスタンスの、前述の各フォームと関連付けられているビューによって参照される名前です。次の属性は、有効な属性です。
例: リソースアカウントリストからの LDAP リソースタイプの排除
指定されたフォームリストから、直接割り当てられない、LDAP タイプのすべてのリソースアカウントを排除するには、排除プロパティーを次のように設定します。
コード例 2-32
<Property name='Exclude'>
<list>
<new class='com.waveset.object.AttributeCondition'>
<s>type</s>
<s>equals</s>
<s>LDAP</s>
<s>LDAP</s>
</new>
<new class='com.waveset.object.AttributeCondition'>
<s>directlyAssigned</s>
<s>equals</s>
<s>false</s>
</new>
</list>
</Property>
allowedValues プロパティー内からの FormUtil メソッドの呼び出し
データベースのような Identity Manager の外部にあるリソースから情報を動的に取得し処理するための FormUtil メソッドは、allowedValues プロパティー内からも呼び出すことができます。
この例は、FormUtil メソッドを呼び出して、選択リストにデータを取り込む方法を示しています。次の例では、allowedValues プロパティーの内部からメソッドが呼び出されます。getOrganizationsWithPrefixes メソッド (または任意の FormUtil メソッド) は、式の内部から呼び出されます。
コード例 2-33
<Field name='waveset.organization'>
<Display class='Select'>
<Property name='title' value='Organization'/>
<Property name='autoSelect' value='true'/>
<Property name='allowedValues'>
<expression>
<invoke class='com.waveset.ui.FormUtil'
name='getOrganizationsWithPrefixes'>
<ref>:display.session</ref>
</invoke>
</expression>
</Property>
</Display>
</Field>
XPRESS は、リソースまたは ActiveSync アダプタ内から Java メソッドを呼び出す機能もサポートしています。呼び出しの結果として得られるデータは、複数選択リストまたは単一選択リストに取り込むことができます。式の内部からのメソッドの呼び出しについては、「XPRESS 言語」を参照してください。
ラベルフィールドの作成
ラベルは、読み取り専用フィールドの値を表示するときに便利なコンポーネントです。<Label> コンポーネントのプロパティーを使用することで、色、値 (文字列)、フォントスタイルなどの表示特性を定義できます。
<Field>
<Display class='Label'>
<Property name='text' value='Primary Corporate LDAP
Server'/>
</Display>
</Field>
value 属性の値は常に文字列です。
その他の Display 要素の操作
これまでに説明した要素以外に、次の Display 要素をフォームに組み込むことができます。
フォームへのセクション見出しの追加
長いフォームを目立つラベルで分割するときは、セクション見出しが便利です。<SectionHead> 要素は、title (prompt) プロパティーの値によって定義される、新しいセクション見出しを表示します。これは Label クラスを拡張したもので、font プロパティーに大きな太字のテキストとなるスタイルを設定します。また、pad プロパティーはゼロに設定され、デフォルトの 2 文字分の隙間は取り除かれます。
<Field>
<Display class='SectionHead'>
<Property name='title' value ='Calculated Fields'/>
</Display>
</Field>
フォームへのカレンダアイコンの追加
DatePicker 要素を使用することで、ページにカレンダアイコンを追加できます。ユーザーは、このアイコンをクリックして日付を選択し、ページフィールドに値を適用できます。たとえば、Identity Manager の「監査レポートの作成」ページは、開始日と終了日の選択に、このコンポーネントを使用しています。
DatePicker 要素は、日付オブジェクトを返します。DatePicker 要素を使用して設定するほとんどのリソース属性は、文字列形式の日付を必要とします。追加のテキストフィールドは、新しい日付オブジェクトから文字列への変換、または現在の設定の表示に使用されます。
次の表に示される、さまざまな形式の文字列を渡して dateToString メソッドを呼び出すことで、形式が異なるいずれかの日付を取得できます。
<Field name='aix_account_expire'>
<Display class='DatePicker'>
<Property name='title' value='Set Password Expiration Date'/>
</Display>
</Field>
次のフィールドは、/etc/security/user ファイルに指定されている、パスワードの有効期限日を表示します。このフィールドは、新しい日付を選択したあとに表示の更新や再計算を行なった場合、aix_account_expire フィールドによって選択される新しい日付も表示します。Identity Manager は、aix_account_expire 日付フィールドに DatePicker フィールドから NULL 以外の値が設定されたかどうかを確認します。
この日付フィールドが設定されている場合、Identity Manager は invoke メソッドを呼び出して、指定された形式 (MMddHHmmyy) で日付オブジェクトを文字列に変換します。
設定されていない場合は、AIX OS に設定されている現在の日付 (accounts[AIX].aix_expires) が表示されます。
コード例 2-34
<Field name='accounts[AIX].aix_expires'>
<Display class='Text'>
<Property name='title' value='Current Password Expiration Date'/>
<Property name='noNewRow' value='true'/>
<Property name='readOnly' value='true'/>
<Property name='size' value='10'/>
</Display>
<Expansion>
<cond>
<notnull>
<ref>aix_account_expire</ref>
</notnull>
<invoke name='dateToString' class='com.waveset.util.Util'>
<!-- dateToString メソッドの最初の引数は日付オブジェクトです -->
<ref>aix_account_expire</ref>
<!-- 2 番目の引数は、変換後の日付/文字列の形式です -->
<s>MMddHHmmyy</s>
</invoke>
<ref>accounts[AIX].aix_expires</ref>
</cond>
</Expansion>
</Field>
バックリンクの追加
ブラウザの「戻る」ボタンと同じように動作するコンポーネントを追加できます。このコンポーネントを使用することで、フォーム上の任意の場所にバックリンクを追加できます。
<Field name='back'>
<Display class='BackLink'>
<Property name='title' value='Back'/>
<Property name='value' value='previous page'/>
</Display>
</Field>
フォーム上のコンポーネントの位置
フォーム上でのコンポーネントの位置は、次の要因によって決定されます。
非表示コンポーネントの使用
多くのフォームはユーザーに表示されず、リソースアダプタを通じて外部リソースから取得したデータを、Identity Manager に渡す前に処理するために使用されます。表示されるフォームでも、一部のコンポーネントは非表示に設定できます。非表示コンポーネントは、この入力データの処理と、判読可能な形式へのデータ変換にも使用されます。
フォーム内の一部の非表示処理は、FormUtil Java クラス内のメソッドによって実行されます。これは、フォーム内のリストの情報を、外部リソースから動的に取得する場合に頻繁に使用されます。
ここでは、データを処理し、フォームで行われるその処理をオプションとして非表示に設定するタスクについて説明します。代表的なタスクには、次のものがあります。
Derivation 要素と Expansion 要素による XPRESS ロジックの追加
一般に、フィールドには Derivation 規則または Expansion 規則のいずれかが適用されます。フィールドに両方の規則が含まれる場合は、これらのフィールドが相互に競合しないことを確認してください。
XPRESS を使用してフォームフィールドの値を計算するときは、<Expansion> コンポーネントと <Derivation> コンポーネントを実装します。これらの式は、式が評価されるタイミングが異なるだけで、基本的には同じです。多くの場合、Derivation 規則は、フォームの読み込み時にフィールドの値を設定する場合に使用されます。Expansion 規則は、ページを再計算するとき、またはフォームを保存するときにフィールドの値を設定する場合に使用されます。
表 2-15 Derivation 式と Expansion 式
コンポーネント
説明
評価
<Derivation>
このフィールドの値として使用される任意の値を無条件で計算します。Derivation 式が評価されると、フィールドの現在値は常に置き換えられます。
Derivation 規則は、フォームが最初に読み込まれるとき、あるいは、1 つまたは複数のリソースからデータがフェッチされるときに実行されます。
<Expansion>
フィールドの値を無条件で計算します。
Expansion 規則は、ページを再計算するとき、またはフォームを保存するときに実行されます。
ユーザービュー以外のすべてのフォームでは、Expansion 規則は、ページを再計算するとき、またはフォームを保存するときに実行されます。ユーザービューでは、ユーザーフォームを最初に読み込むときにも <Expansion> タグが実行されます。
<Validation>
フォームに入力された値が有効であるかどうかを検証します。
Validation 規則は、フォームを送信するたびに評価されます。
<Derivation> ステートメントの例
次の 2 つの例は、Derivation 要素の使用例を示しています。
例 1:
最初の値が定義されている場合、次の例はその値を使用します。最初の値が定義されていない場合は、2 番目の値が使用されます。
<Derivation>
<or>
<ref>accounts[AD].fullname</ref>
<ref>accounts[LDAP].fullname</ref>
</or>
</Derivation>
例 2:
次の <Derivation> 要素の使用例は、条件ロジックを使用して、値のセットを別のセットにマップするフィールド定義を示します。
この例では、リソースアカウント属性 accounts[Oracle].locCode が、まず、case 要素 AUS に対して評価されます。結果が true となる場合は、返される値が 2 番目の値となり、location フィールドに表示されます。いずれの case 要素とも一致しない場合は、case 式のデフォルト値が返されます。case 式に含まれる最初の式で一致する略号が見つかった場合は、case 式に含まれる 2 番目の式の値が、switch 式の結果として返されます。
コード例 2-35
<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>
<Expansion> ステートメントの例
次の 2 つの例は、Expansion 要素の使用例を示しています。
例 1:
Expansion 規則は、フィールドに入力された情報を、リソース側で前提とされる形式、または規則によって指定される形式と一致する値に変換します。たとえば、ユーザーが名前を入力する自由形式のテキストボックスに Expansion 規則を含め、頭文字を大文字、残りの文字を小文字にそろえることができます。
フィールドでグローバル変数を使用すると、フォームの保存時に、この値を持つすべてのリソースが設定されます。このフォームを読み込むと、Identity Manager は各リソースから値を取り込みます (フィールドが無効化されている場合を除く)。最後のリソースの読み込みによって、フォームの値が設定されます。ユーザーがローカルに変更を加えた場合は、その変更は表示されない可能性があります。このため、フィールドの信頼できるソースとして 1 つまたは複数のリソースを指定する Derivation 規則を使用することで、正しい値を確実に属性に適用することができます。
コード例 2-36
<Field name='global.lastname'>
<Display class='Text'>
<Property name='title' value='Last Name'/>
<Property name='size' value='32'/>
<Property name='maxLength' value='128'/>
<Property name='noNewRow' value='true'/>
<Property name='required'>
<Boolean>false</Boolean>
</Property>
</Display>
<Expansion>
<block>
<defvar name='lname'>
<downcase>
<ref>global.lastname</ref>
</downcase>
</defvar>
<defvar name='nlength'>
<sub>
<length>
<ref>global.lastname</ref>
</length>
<s>1</s>
</sub>
</defvar>
<concat>
<substr>
<upcase>
<ref>global.lastname</ref>
</upcase>
<s>0</s>
<s>1</s>
</substr>
<substr>
<ref>lname</ref>
<s>1</s>
<ref>nlength</ref>
</substr>
</concat>
</block>
</Field>
この XPRESS ロジックが複数のフィールドに実装される場合は、それを規則に含めることを検討してください。
例 2:
次の例には Display クラス定義が含まれないため、このフィールドは非表示にも設定されます。Display クラス定義を取り除くことで、フィールドはフォームに表示されなくなります。ただし、フィールドは依然としてフォームのアクティブ部分と見なされ、<Expansion> 式を利用してリソース属性の値を生成します。
<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>
この例では、location フィールドによるマッピングとは逆のマッピングが行われます。
<Validation> ステートメントの例
Validation 式を使用することで、フォームに入力した値が有効であるかどうかを判断するためのロジックを指定できます。
Validation 式は、成功を示す場合は NULL を返し、失敗を示す場合は判読可能なエラーメッセージを含む文字列を返します。Validation 式のエラーメッセージは、フォーム最上部に赤のテキストで表示されます。
次の例には、ユーザーがフィールドに入力した年齢の値が、0 より大きいことを確認するロジックが含まれます。入力された年齢が 0 より大きいか、または 0 である場合、この式は NULL を返します。
<Field name='age'>
<Validation>
<cond>
<lt>
<ref>age</ref>
<i>0</i>
</lt>
<s>Age may not be less than zero.</s>
</cond>
</Validation>
</Field>
メソッドを呼び出して、リストにデータを取り込む
単一選択リストと複数選択リストのテキストボックスには、外部リソースから取得した情報が取り込まれることがよくあります。Sun でサポートされるいずれかの FormUtil メソッドを呼び出すことで、この情報を動的にリストに取り込むことができます。これらの一般的なメソッドは、次のタスクを実行できます。
<Select> コンポーネントと <MultiSelect> コンポーネント、および allowedValues プロパティーについては、「リストデータの取り込み」の節を参照してください。
リソースオブジェクトの名前について
リソース上の情報を検索または要求し、Identity Manager にインポートするには、Identity Manager がサポートするオブジェクト定義を使用する必要があります。
次の表は、Identity Manager でサポートされるオブジェクトタイプを示しています。
表 2-16
サポートされるオブジェクトタイプ
説明
account
ユーザーアカウント ID のリスト
Administrator_Groups
ユーザーが所属できる管理者グループの名前
Applications
アプリケーションのリスト
Distribution Lists
電子メール配信エイリアスのリスト
Entitlements
PKI 権利書のリスト
group
セキュリティーオブジェクトと配信リストグループオブジェクトのリスト
Group
セキュリティーグループ
Nodes
SP2 ノードのリスト
PostOffices
GroupWise ポストオフィスのリスト
profile
トップシークレットプロファイルのリスト
PROFILE
DBA_PROFILES テーブルからの Oracle プロファイルのリスト
ROLE
DBA_ROLES テーブルからの Oracle ロールのリスト
shell
使用できる UNIX シェルのリスト
Template
NDS テンプレートのリスト
USERS
DBA_USERS テーブルからの Oracle プロファイルのリスト
UnassignedTokens
使用できる未割り当てトークンのリスト
User_Properties
ユーザープロパティー定義 (ユーザーに設定できるプロパティー) のリスト
リソースオブジェクト名のリストの取得
使用している特定のリソースに定義されたオブジェクト名のリストを取得するときは、listResourceObjects メソッドを使用します。マップオプションを持つ、または持たないリストを取得できます。マップオプションは、完全なリストを返す代わりに、返される値をフィルタリングして 1 つのコンテナに集約できるディレクトリ構造を持つリソースのみで使用されます。
サーバーのキャッシュからではなく、必ずリソースからリソースオブジェクトリストを取得するには、まず、clearResourceObjectListCache() メソッドを呼び出すか、cacheList 引数を false に設定します。ただし、大規模なリストでは、キャッシュを使用するほうがパフォーマンスが向上します。リソースへのアクセスは 1 回のみで、結果はキャッシュに格納されます。このため、キャッシュを利用することをお勧めします。
また、オブジェクトリストの要求対象となるリソースを指定する、キーと文字列値の 1 つまたは複数のペアのセットを指定することもできます。
次の表は、各リソースでサポートされるオブジェクトタイプを示しています。
表 2-17 サポートされるオブジェクトタイプ
リソース
サポートされるオブジェクトタイプ
AIX
account、Group
ACF2
account
ClearTrust
account、Group、group、Administrator_Groups、Applications、Entitlements、User_Properties
Entrust
Group、Role
GroupWise
account、Distribution Lists、PostOffices
HP-UX
account、Group、shell
LDAP
account、Group
Oracle
USERS、ROLE、PROFILE
NDS
account、Group
PeopleSoft
account
RACF
account、Group
SAP
account、table、profiles、activitygroups
SecurID
UnassignedTokens
SP2
Nodes
Solaris
account、Group、shell
TopSecret
account
VMS
account
Windows Active Directory
account、Group
Active Directory のどの有効オブジェクトクラス名も、オブジェクトタイプとして指定できます。オブジェクトクラス名のリストは Active Directory スキーマドキュメントに記載されています。返されるリストには、オブジェクトの識別名が含まれます。デフォルトでは、メソッドは、Container リソース属性によって指定されるコンテナを検索します。ただし、listResourceObjects の呼び出し時のオプションとして、コンテナを指定することができます。その名前は、コンテナの識別名としてください。この場合、そのコンテナに含まれるオブジェクトの名前のみがリストに取得されます。
マップオプションを持たないリソースオブジェクトのリストの取得
マップオプションを持たないリソースオブジェクトのリストを取得するには、リソースオブジェクトのタイプとリソース名を指定します。一部のリソースは、リストのサブセットでの機能をサポートすることに注意してください。これは、開始ディレクトリを指定することで実行できます。
次の例の詳細は次のとおりです。
- <UnassignedTokens> という文字列は、取得するリソースのオブジェクトタイプを表します。一般的なリソースオブジェクトタイプには、これ以外にも groups、distribution lists、および accounts があります。
- <SecurID> という文字列は、オブジェクトタイプの取得元リソースを表します。
- null という値は、マップオプションを含めないことを表します。
- true という値は、結果をキャッシュに格納することをサーバーに伝えます。
<invoke name='listResourceObjects'
class='com.waveset.ui.FormUtil'>
<ref>:display.session</ref>
<s>UnassignedTokens</s>
<s>SecurID</s>
<null/>
<s>false</s>
</invoke>
マップオプションを持つリソースオブジェクトのリストの取得
マップオプションを持つリソースオブジェクトのリストを取得するには、リソースオブジェクトのタイプ、リソース名、および検索を開始するディレクトリを表すマップオプションを指定します。リソースは、ディレクトリベースで指定してください。
たとえば、Software Access ディレクトリ内のすべての Active Directory グループのリストを取得するには、指定したディレクトリパス (ou=Software Access, dc=mydomain, dc=com) で検索を行うマップオプションを作成します。
例:
次の例の詳細は次のとおりです。
- Group という文字列は、取得するリソースのオブジェクトタイプを表します。リソースオブジェクトのタイプを表す文字列は、Available Resource Object Types というテーブルに指定されます。
- AD という文字列は、オブジェクトタイプの取得元リソース名を表します。マップオプションは、リストの取得元ディレクトリを指定します。
- true という値は、結果をキャッシュに格納することをサーバーに伝えます。
- false という値は、結果をキャッシュに格納しないことをサーバーに伝えます。
<invoke name='listResourceObjects'
class='com.waveset.ui.FormUtil'>
<ref>:display.session</ref>
<s>Group</s>
<s>AD</s>
<Map>
// この設定により、指定したコンテナ/組織の単位、
およびその下部に含まれるグループのみのリストを
取得できます
<MapEntry key='container'
value='LDAP://hostX.domainX.com/cn=Users,dc=domainX,dc=com'/>
</Map>
<s>false</s>
</invoke>
DN 文字列の作成
指定したユーザー ID とベースコンテキストから、識別名のリスト、または単一の識別名を動的に作成できます。このメソッドでは、リストは返されません。通常は、Expansion 規則で使用されます。
DN 文字列のリストの動的な作成
ユーザー ID とベースコンテキストを指定して、DN 文字列のリストを動的に作成することができます。
次の例は、ユーザー ID とベースコンテキストを使用して DN 文字列のリストを動的に作成する方法を示しています。
次のコードでは、まず、ユーザーに追加するベースコンテキストが定義されます。
<Field name='baseMemberContextContractor'>
<Default>
<s>ou=Contractors,dc=example,dc=com</s>
</Default>
</Field>
<Field name='baseMemberContextEmployee'>
<Default>
<s>ou=Employees,dc=example,dc=com</s>
</Default>
</Field>
このフォームのユーザーは、次のフィールドにデータを入力します。多くの場合、これは、動的に生成したユーザー ID のリストの格納場所を表します。
<Field name='userIds'>
<Display class='TextArea'>
<Property name='title' value='UserIds'/>
</Display>
</Field>
次の非表示フィールドには、値を計算するロジックが含まれます。
<Field name='Members'>
<Expansion>
<switch>
// ユーザーに割り当てられているロールを参照します
<ref>waveset.role</ref>
<case>
// ユーザーに "Contractor ロール" が割り当てられている場合に、次のような DN を生成し ます:
// ex: CN=jsmith,ou=Contractors,dc=example,dc=com
<s>Contractor Role</s>
<invoke name='buildDns' class='com.waveset.ui.FormUtil'>
<ref>userId</ref>
<ref>baseMemberContextContractor</ref>
</invoke>
</case>
<case>
// また、ユーザーに "Employee ロール" が割り当てられている場合は、次のような DN を生成します :
// ex: CN=jdoe,ou=Employees,dc=example,dc=com
s>Employee Role</s>
<invoke name='buildDns' class='com.waveset.ui.FormUtil'>
<ref>userId</ref>
<ref>baseMemberContextEmployee</ref>
</invoke>
</case>
</switch>
</Expansion>
</Field>
単一 DN 文字列の作成
1 つの DN を指定して、リストまたはテキストエリアにデータを取り込む buildDn メソッドを呼び出すことができます。例:
<invoke name='buildDn' class='com.waveset.ui.FormUtil'>
<s>jdoe</s>
<s>dc=example,dc=com</s>
</invoke>
この例は、CN=jdoe,dc=example,dc=com という文字列を返します。
未割り当てリソースのリストの取得
指定したユーザー ID には表示する権限はあるが、現時点では割り当てられていないすべてのリソースのリストを取得するときは、getUnassignedResources メソッドを使用します。
<ref> ステートメントは、指定したユーザーに関する情報を持つビュー属性を表します。例:
<invoke name='getUnassignedResources' class='com.waveset.ui.FormUtil'>
<ref>:display.session</ref>
<ref>waveset.role</ref>
<ref>waveset.original.resources</ref>
</invoke>
アクセス可能なオブジェクトタイプのリストの取得
セッション所有者が現時点でアクセスできるオブジェクトタイプのリストを取得するときは、getObjectNames メソッドを使用します。
検索できるオブジェクトタイプは次のとおりです。
すべてのオブジェクトタイプのリストは、「デバッグ」ページの「List Objects」オプションで表示できます。例:
<invoke name='getObjectNames' class='com.waveset.ui.FormUtil'>
<ref>:display.session</ref>
<s>UserForm</s>
</invoke>
セッション所有者がアクセスできるオブジェクトタイプのリストの取得
セッション所有者がアクセスできるオブジェクト名のリストを取得するときは、getObjectNames メソッドを使用します。例:
<invoke name='getObjectNames' class='com.waveset.ui.FormUtil'>
<ref>:display.session</ref>
</invoke>
プレフィックスを持つ組織のリストの取得
プレフィックス (たとえば、TOP, TOP:IT, TOP:HR) を持つ組織のリストを取得するときは、getOrganizationsWithPrefixes メソッドを使用します。例:
<invoke name='getOrganizationsWithPrefixes' class='com.waveset.ui.FormUtil'>
<ref>:display.session</ref>
</invoke>
プレフィックスを持たない組織のリストの取得
プレフィックス (たとえば、TOP, TOP, TOP) を持たない組織のリストを取得するときは、getOrganizations メソッドを使用します。例:
<invoke name='getOrganizations' class='com.waveset.ui.FormUtil'>
<ref>:display.session</ref>
</invoke>
プレフィックスを持つ組織表示名のリストの取得
プレフィックスを持つ組織表示名のリストを取得するときは、getOrganizationsDisplayNamesWithPrefixes メソッドを使用します。
<invoke name='getOrganizationsDisplayNamesWithPrefixes' class='com.waveset.ui.FormUtil'>
<ref>:display.session</ref>
</invoke>
ユーザーに割り当てられていないアプリケーションのリストの取得
現時点でユーザーに割り当てられていないアプリケーションのリストを取得するときは、getUnassignedApplication メソッドを使用します。例:
<invoke name='getUnassignedApplications' class='com.waveset.ui.FormUtil'>
<ref>:display.session</ref>
<ref>waveset.roles</ref>
<ref>waveset.original.applications</ref>
</invoke>
ハッシュマップの作成
listResourceObjects メソッドと callResourceMethods メソッドは、ハッシュマップを受け付けます。ハッシュマップは、<Map> 要素を使用して作成できます。
次の例の <Map> 要素は、変更されない制的なマップを作成します。
<Map>
<MapEntry name='key1' value='value1'/>
<MapEntry name='key2' value='value2'/>
</Map>
<map> 要素を使用して、XPRESS 式でマップを作成することもできます。<map> 要素は、コンテンツが別の式によって定義されるマップを動的に作成することができます。
XPRESS 言語によるマップの作成については、「XPRESS 言語」を参照してください。
フィールドの無効化
フィールドを無効にすると、フィールドと、その入れ子フィールドはページに表示されなくなります。また、値の式も評価されません。無効化されたフィールドの値がすでにビューに含まれる場合、その値は変更されません。
<Disable></Disable>
注
global.* 属性は、有効なフィールドのみから取得されます。フォームがフィールドを非表示にするのではなく、動的に無効にする場合は、global.* 属性を使用して、そのフィールドの値を取得することはできません。
例:
<Disable>
<eq><ref>userExists</ref><s>true</s></eq>
</Disable>
注
Disable 式は、その他の式よりも頻繁に評価されます。このため、Disable 式は、比較的単純に記述してください。データベースのルックアップのように、負荷の大きい処理を実行する Java クラスは呼び出さないようにしてください。
フィールドの非表示
フィールドを非表示に設定すると、フィールドと、その入れ子フィールドはページに表示されなくなります。ただし、フォームの処理によって、フィールドの値は設定されます。
フィールドを非表示にするには、表示しない特定のフィールドの Display プロパティーを定義しません。これは条件に依存しません。
<Field name='field A'/>
値の計算
フォーム内での動的な値の計算には、次の方法があります。
フィールド値の生成
一部のフォームでは、最初は抽象的な導出フィールドのセットをユーザーに表示し、その後のフォームの送信時に、リソースアカウントの実際の属性値のさまざまなセットを生成することが必要となる場合があります。これは、フォームの展開と呼ばれます。展開されたフィールドは、よく導出フィールドと組み合わせて使用されます。
フォーム内での規則の使用
フォームでは、通常、allowedValues 表示プロパティーを計算する規則を呼び出したり、<Disable> 式の中でフィールドの可視性を制御したりします。フォーム内で次の項目を格納および再利用するもっとも効率的なメカニズムは、規則の使用であると考えられます。
規則の詳細については、『Identity Manager 配備ツール』の「規則」の章を参照してください。
XPRESS ステートメントの使用
XPRESS 言語は、式とスクリプトを記述するための XML ベースの言語です。この言語で記述されたステートメントは式と呼ばれ、フォームにデータ変換機能を追加したり、ワークフローやフォームなどの Identity Manager オブジェクトに状態遷移ロジックを組み込んだりするために、Identity Manager 全体で使用されます。
XPRESS は、XML に基づいた構文を使用する関数言語です。この言語で記述されるすべてのステートメントは、0 個以上の引数をとる関数を呼び出し、値を返します。製品には関数が組み込まれていますが、新しい関数を定義することもできます。XPRESS は、任意の Java クラスでのメソッドの呼び出しと、式に含まれる Javascript の評価もサポートします。
XPRESS の機能の詳細については、「XPRESS 言語」を参照してください。
XPRESS を使用する理由
式は、主に次の Identity Manager タスクに使用されます。
これらの要素に含まれる式は、Identity Manager 全体で使用できます。
式の例
次の例の <add> 要素は、add という XPRESS 関数の呼び出しを表します。
<add> <ref>counter</ref> <i>10</i> </add>
この関数には、2 つの引数が渡されます。
add 関数から返される値は、counter 変数の現在値に整数 10 を加えた結果となります。すべての関数呼び出しは、次の処理で使用される値を返します。たとえば、ref の呼び出しによってカウンタの値が得られると、<i> 呼び出しは整数 10 を返し、<add> 呼び出しは 2 つの呼び出しの結果を合計します。
フォームに組み込まれた式の例
次の例は、Identity Manager フォームに組み込まれた XPRESS ロジックの使用例を示しています。XPRESS は、ブラウザに表示するロール関連の選択項目を生成するいずれかの FormUtil Java メソッドの呼び出しに使用されています。式全体が <expression> というタグに囲まれていることに注目してください。
<Field name='waveset.role'>
<Display class='Select' action='true'>
<Property name='title' value='Role'/>
<Property name='nullLabel' value='None'/>
<Property name='allowedValues'>
<expression>
<invoke class='com.waveset.ui.FormUtil' name='getRoles'>
<ref>:display.session</ref>
<ref>waveset.original.role</ref>
</invoke>
</expression>
</Property>
</Display>
</Field>
ユーザー編集フォーム
Identity Manager では、リソースのスキーママップ内でその属性が必須かどうかが画面上でわかるようになっています。ユーザー編集フォームでは、これらの属性を * (アスタリスク) で示します。デフォルトの Identity Manager では、属性名に続くテキストフィールドの後ろにこのアスタリスクが表示されます。
アスタリスクの位置をカスタマイズする手順は次のとおりです。
フォームへのガイダンスヘルプの追加
Identity Manager には、次の 2 種類のオンラインヘルプが用意されています。
コンポーネントにガイダンスヘルプを指定する方法
ガイダンスヘルプのテキストは、どのコンポーネントにも関連付けることができます。ただし、現時点では、表示に EditForm コンテナが必要です。ガイダンステキストを指定するには、コンポーネントの title プロパティーとヘルプカタログ内のエントリを一致させることで、コンポーネントに割り当てます。「コンポーネントの title プロパティーとヘルプエントリの一致」の節を参照してください。
コンポーネントの title プロパティーとヘルプエントリの一致
コンポーネントタイトルにサフィックス _HELP が付加されたものをヘルプカタログ内のキーの値として使用することで、カタログエントリをコンポーネントに自動的に関連付けることができます。たとえば _FM_DELEGATEWORKITEMSFORM_SELECT_WORKITEM_TYPE キーのヘルプカタログエントリは、_FM_DELEGATEWORKITEMSFORM_SELECT_WORKITEM_TYPE_HELP です。XML フォームの使用時は、Property 要素を使用して、コンポーネントのタイトルを明示的に指定できます。このプロパティーが設定されていない場合は、Field 要素に含まれる prompt 属性の値が適用されます。
ガイダンスヘルプの優先指定
カスタムメッセージカタログを使用して、ポップアップウィンドウに表示されるガイダンステキストを優先指定できます。カスタムメッセージカタログに defaultCustomCatalog という名前を付けると、Identity Manager はこれを認識し、このカタログを自動的に使用します。また、別のカタログ名を付け、customMessageCatalog という属性名のあとに、System Configuration オブジェクトの値としてそのカタログ名を指定することもできます。
たとえば、次のようにします。
<Attribute name='customMessageCatalog' value= 'sampleCustomCatalog' />
次の例では、_FM_DELEGATEWORKITEMSFORM_SELECT_WORKITEM_TYPE というコンポーネントのカスタムガイダンスヘルプが設定されます。
<Waveset>
<Configuration name="sampleCustomCatalog">
<Extension>
<CustomCatalog id="defaultCustomCatalog" enabled="true">
<MessageSet language="en" country="US">
<Msg id="_FM_DELEGATEWORKITEMSFORM_SELECT_WORKITEM_TYPE">作業項目のタイプ を選択してください</Msg>
<Msg id="_FM_DELEGATEWORKITEMSFORM_SELECT_WORKITEM_TYPE_HELP>作業項目のタ イプ: 作業項目のタイプをリストから選択してください。</Msg>
</MessageSet>
</CustomCatalog>
</Extension>
</Configuration>
</Waveset>
フォームに関連するその他のタスク
フォーム関連では、ほかに次のようなタスクがあります。
FormUtil メソッドの呼び出し
FormUtil クラスは、フォームオブジェクトを使用して XPRESS 式から呼び出せるユーティリティーメソッドの集合です。これは、許可される値のリストへの取り込みと、入力の検証に使用できます。一般に、FormUtil メソッドは、リストまたはフィールドの許可される値の定義を支援するために呼び出されます。
<invoke class='com.waveset.ui.FormUtil'
name = 'listResourceObjects'>
</invoke>
この name フィールドは、メソッドの名前を表します。
フォーム内でのこれらのメソッドの使用例については、「非表示コンポーネントの使用」の節を参照してください。
フォームへの JavaScript の挿入
事前にフォーマットされた Javascript をフォームに挿入するときは、<script> コンポーネントを次のように使用します。
<Field>
<Expansion>
<script>
............
オブジェクトまたはユーザーの存在確認
アクションを実行する前に、オブジェクトの存在を確認できると便利かもしれません。たとえば、新規ユーザーを作成したり、フィールドに入力したマネージャー名が有効であることを確認したりする前に、ユーザー名が Identity Manager に存在するかどうかを確認できます。
オブジェクトの存在を確認するときは、testObject メソッドを使用します。このメソッドの使用時にオブジェクトタイプを指定するときは、「アクセス可能なオブジェクトタイプのリストの取得」の節に記載されているオブジェクトタイプを使用してください。次の例では、<s>User</s> というユーザータイプが指定されています。2 番目の文字列は、オブジェクトタイプの値 (この例では jdoe) を指定します。
例:
<invoke name='testObject' class='com.waveset.ui.FormUtil'>
<ref>:display.session</ref>
<s>User:</s>
<s>jdoe</s>
</invoke>
オブジェクトが検出されると、testObject メソッドは true を返します。検出に失敗した場合は、NULL が返されます。
ユーザーの存在を確認するときは、testUser メソッドを使用します。検索するユーザーオブジェクトの名前は、<s> 要素で指定されます。例:
<invoke name='testUser' class='com.waveset.ui.FormUtil'>
<ref>:display.session</ref>
<s>jdoe</s>
</invoke>
検出に成功した場合は、true が返されます。検出に失敗した場合は、NULL が返されます。
XPRESS フォームへのアラートメッセージの挿入
警告 (WARNING)、エラー (ERROR)、または情報 (OK) アラートメッセージを XPRESS フォームに挿入できます。
- Identity Manager IDE を使用して、警告を追加するフォームを開きます。
- <Property name='messages'> をメインの EditForm または HtmlPage 表示クラスに追加します。
- 次のサンプルコードの <defvar name='msgList'> コードブロックを追加します。
- コードサンプル文字列のメッセージキー (アラートボックスに表示されるメッセージテキストを識別するキー) を置き換えます。
<message name='UI_USER_REQUESTS_ACCOUNTID_NOT_FOUND_ALERT_VALUE >
- ファイルを保存して閉じます。
コード例 2-37
<Display class='EditForm'>
<Property name='componentTableWidth' value='100%'/>
<Property name='rowPolarity' value='false'/>
<Property name='requiredMarkerLocation' value='left'/>
<Property name='messages'>
<ref>msgList</ref>
</Property>
</Display>
<defvar name='msgList'>
<cond>
<and>
<notnull>
<ref>username</ref>
</notnull>
<isnull>
<ref>userview</ref>
</isnull>
</and>
<list>
<new class='com.waveset.msgcat.ErrorMessage'>
<invoke class='com.waveset.msgcat.Severity' name='fromString'>
<s>warning</s>
</invoke>
<message name='UI_USER_REQUESTS_ACCOUNTID_NOT_FOUND_ALERT_VALUE'>
<ref>username</ref>
</message>
</new>
</list>
</cond>
</defvar>
警告以外の重要度レベルを表示するには、前述の例の <s>warning</s> を次の 2 つの値のいずれかに置き換えます。
次の場合、Identity Manager の InlineAlert は警告アイコンで表示されます。
<invoke class='com.waveset.ui.FormUtil' name='getRoles'>
<s>warning</s>
</invoke>
前述の warning は、error または ok にすることができます。
ウィザードフォームとタブ付きフォーム
ウィザードフォームとタブ付きフォームはどちらも、扱いにくい単一ページのフォームを、管理がより容易な、複数ペインのフォームに変えるメカニズムです。どちらのフォームも、論理セクションまたはページの間にセパレータを持ちます。これらのページセパレータは、Tabbed User Form のようにフォームの上部に配置されるタブである場合と、前後のページに移動するためのナビゲーションボタンを利用してページを切り替えながらユーザーに操作を促すウィザードである場合があります。
デフォルトの Tabbed User Form の XML バージョンについては、この章の「Tabbed User Form」を参照してください。
ウィザードフォームとは
次のような場合は、タスクから複数のフォームを呼び出すよりも、ウィザードフォームを使用するほうが便利です。
ウィザードフォームには、次に説明する 2 つのボタン行があります。
表 2-18 最初のボタン行
ボタン行
説明
上の行
フォームペインを切り替えるための「次へ」および「戻る」ボタン
次の行
次の表に示される、標準のユーザーフォームボタン。この行は、noDefaultButtons オプションを true に設定して、独自のボタンを実装することで制御できます。
2 番目のボタン行は、次のように異なります。
表 2-19 2 番目のボタン行
ウィザードのページ
デフォルトボタン
最初のページ
「次へ」、「キャンセル」
中間のページ
「戻る」、「次へ」、「キャンセル」
最後のページ
「戻る」、「OK」、「キャンセル」
ウィザードフォームの実装
ウィザードフォームの構文は、Tabbed User Form の構造によく似ています。ウィザードフォームを作成する方法は次のとおりです。
次の例には、説明のためのコメントが含まれます。
<Form>
<Display class="HtmlPage"/> ----- これを設定しないと、インデントと色に問題が生じます
<Field name='MainTabs'> -- タブページを格納した最上位コンテナの名前
<Display class='TabPanel'/> -- 最上位コンテナの表示クラス、TabPanel または WizardPanel のいずれか
<Field name='Identity'> -- タブのラベル
<Display class='EditForm'> -- 各 "ページ" は編集フォームである必要があります
<Property name='helpKey' value='Identity and Password Fields'/>
</Display>
<Field name='waveset.accountId'>
<Display class='Text'>
<Property name='title' value='_FM_ACCOUNT_ID'/>
</Display>
<Disable> <ref>waveset.id</ref> </Disable>
</Field>
</Field>
</Field>
ヒントおよび対策
- 検証エラーは、属性が表示されるページではなく、ユーザーが最後に表示したページに表示されます。これに対応するには、適切なページに戻るように促すように、検証メッセージに説明を追加します。
- 複雑なウィザードでは、プロセス全体のどの段階にいるかを視覚的にユーザーに表示してください。各ページの上部に表示されるラベルまたはセクション見出しを使用して、「ページ 1」のようなテキストを表示します。
- ウィザードフォームでは、条件付きナビゲーションを使用しないでください。この機能の実装が必要なときは、WizardPanel の直下にある各子要素の Disable 式を使用します。たとえば、次のようにします。
<Field name='Page2'>
<Display class='EditForm'/>
<Disable><neq><ref>showPage2</ref><s>true</s></neq></Disable>
...
</Field>
- フィールドやボタンは、ゲート変数を設定する、直前のページに配置します。無効化されたページは、遷移ロジックから自動的に削除されます。
デフォルトのユーザー作成フォームとユーザー編集フォームの代替フォーム
管理者がデフォルトのユーザーフォームを使用してユーザーを編集する場合、管理者がユーザーアカウントの編集を開始するのと同時に、そのユーザーが所有するすべてのリソースがフェッチされます。ユーザーが多くのリソースにアカウントを持つ場合、この処理に時間がかかる可能性があり、パフォーマンスを低下させかねません。このような環境に Identity Manager を配備したときは、デフォルトのユーザー作成インタフェースやユーザー編集インタフェースの代わりに、スケーラブルフォームを使用してみてください。
スケーラブルフォームの概要
スケーラブルフォームは、ユーザー数とリソース数が多い環境で、Identity Manager のユーザー作成インタフェースとユーザー編集インタフェースのパフォーマンスを改善するようにカスタマイズされたフォームです。パフォーマンスの改善は、次のような機能によるものです。
Identity Manager には、デフォルトのユーザー編集フォームとユーザー作成フォームのスケーラブルバージョンが用意されています。
リソースの差分フェッチ
リソースの差分フェッチは、ネットワーク接続などの方法で、Identity Manager サーバーがリソースから直接、情報を取得する手段の 1 つです。管理者がデフォルトのユーザーフォームを使用してユーザーを編集する場合、通常は、管理者がユーザーアカウントの編集を開始するのと同時に、そのユーザーが所有するすべてのリソースがフェッチされます。これに対し、スケーラブルフォームの設計に込められた目的は、管理者が表示または変更するリソースのみをフェッチすることで、フェッチに制限をかけることです。
選択的な参照
選択的な参照は、スケーラブルフォームに組み込まれたもう 1 つの機能です。管理者は、所有ロール、リソースタイプ、またはリソースリストに基づいて、リソースを差分表示できます。
複数リソースの編集
複数リソースの編集により、管理者はリソースのサブセットを選択してリソース属性を編集できます。管理者は、ロール、リソースタイプ、またはリソースリストに基づいてサブセットを選択できます。
スケーラブルフォームの使用
次のようなケースでは、スケーラブルフォームの使用を検討してください。
別のリソースを参照する属性がフォームロジックに含まれる場合は、スケーラブルフォームを使用しないでください。この設定では、対象リソースをまとめてフェッチしない限り、このような相互参照属性に最新データが取り込まれません。
新規ユーザーは、最初はリソースを持たないため、ユーザー作成フォームのスケーラブルバージョンには、限定的ではありますが、標準のデフォルトバージョンに対してメリットがあります。
使用できるスケーラブルフォーム
Identity Manager には、次の 2 つのスケーラブルユーザーフォームが用意されています。各フォームについては後述します。
Dynamic Tabbed User Form
管理者が編集を開始するのと同時にすべてのリソースをフェッチする、デフォルトのTabbed User Form の代替フォームです。Dynamic Tabbed User Form には、差分フェッチ機能と、リソースタイプに基づいて複数のリソースを編集する機能が用意されています。
フォームのインポートとマッピング
Dynamic Tabbed User Form によるデフォルトの Tabbed User Form の代用には、次の 3 つのフォームが関連します。
表 2-20 Dynamic Tabbed User Form と関連するフォーム
フォーム
説明
Dynamic Tabbed User Form
デフォルトの Tabbed User Form の機能を持ちますが、リソースタイプごとに 1 つのタブを動的に作成します。
動的ユーザーフォーム
ユーザーフォームのリソースタイプタブを作成するためのフィールドを持ちます。
動的フォームの規則ライブラリ
指定されたユーザーフォームを持たないリソースの属性を動的に出力するための規則ライブラリを持ちます。
動的リソースフォーム
現時点で Dynamic Tabbed User Form との互換性を持つすべてのフォームを持ちます。ユーザーは、このリストをカスタマイズできます。
Dynamic Tabbed User Form のインストールは、フォームのインポートと、フォームマッピングの変更という 2 段階で行われます。
手順 1: フォームのインポート
手順 2: フォームマッピングの変更
ユーザーフォームをエンドユーザーに割り当てるには、2 つの方法があります。これらのフォームマッピングを編集する方法は、実際の環境で管理者がこれらのフォームをどのように使用するかによって異なります。次の方法があります。
- すべての管理者のデフォルトユーザーフォームとしてスケーラブルユーザーフォームを割り当てる。この方法で割り当てるときは、「デフォルトユーザーフォームとしてのスケーラブルユーザーフォームの割り当て」を参照してください。Identity Manager の管理者は、すべての管理者が使用する 1 つのフォームを割り当てることができます。
- 特定の管理者に、個別にスケーラブルユーザーフォームを割り当てる。この方法で割り当てるときは、「管理者ごとのスケーラブルユーザーフォームの割り当て」を参照してください。
デフォルトユーザーフォームとしてのスケーラブルユーザーフォームの割り当て
管理者ごとのスケーラブルユーザーフォームの割り当て
リソーステーブルユーザーフォーム
リソーステーブルユーザーフォームには、ユーザー編集フォームのスケーラブルバージョンのほとんどの駆動ロジックが含まれます。このフォームは、差分フェッチ機能と、リソースタイプに基づいて複数リソースを編集する機能を実装します。
実装の詳細については、WSHOME/samples/resourcetableformsinit.xml に記載されているコメントを参照してください。
フォームのインポートとマッピング
リソーステーブルユーザーフォームによるデフォルトの Tabbed User Form の代用には、次の 5 つフォームが関連します。
表 2-21 リソーステーブルユーザーフォームと関連するフォーム
フォーム
説明
リソーステーブルユーザーフォーム
ナビゲーション、差分フェッチ、およびフォームのレイアウトに使用される、グローバルに利用できるすべてのフィールドを持ちます。リソース関連のその他すべてのスケーラブルフォームは、このメインフォームによって駆動されます。
リソーステーブルユーザーフォームライブラリ
リソーステーブルユーザーフォームのプライマリフィールドを持ちます。ブレッドクラムフィールドとナビゲーションフィールドが含まれます。
リソーステーブルアカウント情報フォーム
リソーステーブルフォームのアカウント情報セクションのフィールドを持ちます。
リソーステーブル規則ライブラリ
ユーザーのリソースの取得、カウント、分析に適用される規則ライブラリを持ちます。これは、主にユーザーフォームライブラリで使用され、ロールとリソースに基づいてテーブルデータを生成します。
リソーステーブルユーティリティーライブラリ
たとえば、ロールごと、またはタイプごとにリソースを取得する規則のように、リソーステーブルフォームでの選択プロセスで使用される規則を持ちます。
リソーステーブルユーザーフォームのインストールは、フォームのインポートと、フォームマッピングの変更という 2 段階で行われます。
手順 1: フォームのインポート
手順 2: フォームマッピングの変更
スケーラブルフォームのカスタマイズ
スケーラブルユーザーフォームのインポートとマッピングが完了したら、それをカスタマイズしてください。差分フェッチを有効にするには、次の情報を指定しなければなりません。
動的なユーザーフォームとリソーステーブルユーザーフォームはどちらも、ユーザーのリソースに固有の属性を表示するのに、リソース固有のフォームを使用します。次のユーザーフォームは、スケーラブルフォームで使用するために WSHOME/sample/forms ディレクトリに追加されました。
- ./ACF2UserForm.xml
- ./ActivCardUserForm.xml
- ./ADUserForm.xml
- ./AIXUserForm.xml
- ./BlackberryUserForm.xml
- ./ClearTrustUserForm.xml
- ./HP-UXUserForm.xml
- ./NDSUserForm.xml
- ./OS400UserForm.xml
- ./PeopleSoftCompIntfcUserForm.xml
- ./RACFUserForm.xml
- ./SAPPortalUserForm.xml
- ./SolarisUserForm.xml
- ./SunISUserForm.xml
- ./TopSecretUserForm.xml
これらのフォームは、Dynamic Tabbed User Form とリソーステーブルユーザーフォームの両方とともに自動的にインポートされます。
配備したシステムが上記以外のリソースタイプを使用している場合は、スケーラブルフォームには、スキーママッピングに指定されているすべての属性名と値を示すデフォルトのユーザーフォームが表示されます。上記以外の既存のカスタムリソースユーザーフォームを使用するときは、スケーラブルフォームとの互換性を維持するために、特定の修正を加えてください。次に、互換性の維持に必要な手順の一部について説明します。
スケーラブルユーザーフォームとの互換性を維持するためのリソースフォームのカスタマイズ
独自にカスタマイズしたリソースフォームを追加して、Dynamic Tabbed User Form またはリソーステーブルユーザーフォームと併用する場合は、次の一般的な手順に従ってください。
手順 1: 動的リソースフォームの修正
独自のリソースフォームを追加する方法については、dynamicformsinit.xml ファイルを参照してください。このファイルで動的リソースフォームを検索し、フォームに記載されている手順を実行します。
手順 2: リソースフォームの修正
前述のリストに含まれないフォームを使用している場合は、互換性を維持できるようにリソースフォームに修正を加えます。前述のリストに含まれるいずれかのファイルを例として参照してください。方法は、各リソースフォームの冒頭に記載されています。
Tabbed User Form のカスタマイズ: 属性エリアへのパスワードフィールドの移動
同時に異なるパスワードを持つ 2 つのリソースを更新するには、割り当てられているリソースごとにパスワードフィールドを作成します。たとえば、「アカウント」ページの AD リソースの属性エリアに「AD」パスワードフィールドを設けることによっても、その他のリソースとは別に設定できるパスワードポリシーを適用できます。
デフォルトパスワードポリシーの表示
デフォルトでは、パスワードポリシーの情報は、「アカウント」>「ID」タブに次のように表示されます。
パスワードフィールドを、デフォルトの位置である ID エリアから属性エリアに移動するには、次の 3 段階の手順を実行して、Identity Manager のデフォルトのパスワード同期メカニズムを無効にしなければなりません。
次に、これらの手順について詳しく説明します。
手順 1: manualPasswordSynchronization チェックアウトプロパティーの設定
フォームに次のプロパティーを追加して、manualPasswordSynchronization ビューチェックアウトオプションを設定します。
<Form>
<Properties>
<Property name='manualPasswordSynchronization' value='true'/>
...
</Properties>
...
</Form>
manualPasswordSynchronization を true に設定すると、Identity Manager は、パスワードシンクロナイザを使用する代わりに、リソースごとのパスワードフィールドを表示します。
手順 2: パスワードの同期の無効化
「パスワード」ビューの下の selectAll フラグをオフにすることで、パスワードの同期を無効にできます。このためには、デフォルトフォームに次のフィールドを追加します。
<Field name='password.selectAll'>
<Comments>
同期を行わないように、selectAll フラグを強制的にオフにします。
ビューハンドラによって true に設定されることがあるため、この無効化が必要です。
</Comments>
<Expansion><s>false</s></Expansion>
</Field>
<FieldLoop for='res'>
<expression>
<remove>
<ref>password.targets</ref>
<s>Lighthouse</s>
</remove>
</expression>
<Comments>
また、新規アカウントではビューハンドラによってデフォルトで true に設定されるため、
個々の選択フラグも強制的に false に設定し、リソースごとに
パスワードプロンプトを表示する必要があります。
</Comments>
<Field name='password.accounts[$(res)].selected'>
<Expansion><s>false</s></Expansion>
</Field>
</FieldLoop>
手順 3: 「属性」ページへのリソース固有のパスワードフィールドの追加
各リソースに固有のパスワードフィールドを次のように記述します。
<Field name='accounts[resname].password'>
ポリシー検証の無効化
次のフィールドをユーザーフォームに追加することで、フォームでのポリシー検証を無効にすることができます。
<Field name='viewOptions.CallViewValidators'>
<Display class='Hidden'/>
<Expansion>
<s>false</s>
</Expansion>
</Field>
このフィールドは、modify.jsp の OP_CALL_VIEW_VALIDATORS フィールドの値より優先されます。
ユーザーパスワード履歴の追跡
Identity Manager では、管理者が行うユーザーパスワードの変更はデフォルトでは追跡されません。次の方法を利用すれば、管理者はこのデフォルトの動作を変更できます。配備に合わせて最適なオプションを選択してください。
オプション 1: フォームへのビューオプションの追加
次の方法でビューオプションをターゲットフォームに追加できます。このビューオプションは、あらゆるシステム設定より優先されることに注意してください。つまり、このビューオプションを true に設定し、関連するシステム設定属性が false の場合は、Identity Manager はこのビューオプションに従ってシステム設定を無視します。
ActiveSync 処理に関係のないターゲットフォームを操作している場合は、ターゲットフォーム (一般にユーザーフォーム) の savePasswordHistory 属性を次のように設定します。
Active Sync が設定されているときにパスワード変更を記録する場合は、別の方法で savePasswordHistory ビューオプションを設定する必要があります。Synchronize User Password TaskDefinition は、次のアクションを SetPasswordView アクティビティーに追加することで変更できます。
コード例 2-39
<Activity id='5' name='SetPasswordView'>
<Action id='0'>
<expression>
<set name='PasswordView.resourceAccounts.password'>
<ref>password</ref>
</set>
</expression>
</Action>
<!-- アクションをここに追加 -->
<Action id='1'>
<expression>
<set name='PasswordView.savePasswordHistory'>
<Boolean>true</Boolean>
</set>
</expression>
</Action>
<!-- 終わり -->
<Action id='2'>
<expression>
<dolist name='account'>
<ref>PasswordView.resourceAccounts.currentResourceAccounts</ref>
オプション 2: システム設定オブジェクトの設定の変更
関連するシステム設定オブジェクトの設定を編集することもできます。ログインアプリケーションの savePasswordHistory オプションを設定できます。
- 該当するインタフェースの savePasswordHistory の値を false から true に切り替えます (次の例を参照)。デフォルトでは、これらの値は false です。
コード例 2-40 システム設定オブジェクトの設定の変更
<Attribute name='security'>
<Object>
<Attribute name='admin'>
<Object>
<Attribute name='changePassword'>
<Object>
<Attribute name='Administrator Interface'>
<Object>
<Attribute name='savePasswordHistory'>
<Boolean>false</Boolean>
</Attribute>
</Object>
</Attribute>
<Attribute name='Command Line Interface'>
<Object>
<Attribute name='savePasswordHistory'>
<Boolean>false</Boolean>
</Attribute>
</Object>
</Attribute>
<Attribute name='IVR Interface'>
<Object>
<Attribute name='savePasswordHistory'>
<Boolean>false</Boolean>
</Attribute>
</Object>
</Attribute>
<Attribute name='SOAP Interface'>
<Object>
<Attribute name='savePasswordHistory'>
<Boolean>false</Boolean>
</Attribute>
</Object>
</Attribute>
<Attribute name='User Interface'>
<Object>
<Attribute name='savePasswordHistory'>
<Boolean>false</Boolean>
</Attribute>
</Object>
</Attribute>
</Object>
</Attribute>
</Object>
</Attribute>
<Attribute name='authn'>
<Object> ..
SPML インタフェースを使用してパスワード履歴の記録を許可するには、システム設定オブジェクトで次のように設定する必要があります。
security.admin.changePassword.Command Line Interface
カスタマイズしたフォームの検証実行時環境に実装する前に、編集したフォームに関する情報を、次の方法で収集できます。
エラーロギングの有効化と無効化
Identity Manager のエラーロギングユーティリティーは、フォームに含まれる式の構文に関する問題を標準出力に出力します。XPRESS のトレースを有効にすると、<block> タグを使用して、フォームのサブセットの XPRESS ステートメントにログメッセージを限定できます。XPRESS ステートメントの処理の詳細情報を取得するには、waveset.properties ファイルの設定オプション、xpress.trace を true に設定します。このオプションを true に設定すると、XPRESS ステートメントのすべての評価が、トレースメッセージとしてコンソールに出力されます。これは、XPRESS API によるトレースを有効にするためにコードを変更できない実行中アプリケーションで評価される、ステートメントのデバッグに使用できます。
すべての XPRESS フィールドの XPRESS トレースは、コマンド行または Identity Manager の管理者インタフェースから有効にできます。この方法で有効にしたトレースは、すべてのフィールドに影響します。ログメッセージをフォームのサブセットに限定するときは、<block> タグセットを使用して、エラートレースの対象を <block></block> タグ内のコードのみに制限します。
Identity Manager のすべての式の評価に関するエラーロギングをコマンド行から有効にする方法は次のとおりです。
これとは別に、Identity Manager の管理者インタフェースからエラーロギングの有効化と無効化を切り替えることもできます。
XPRESS のトレースを無効にするときは、xpress.trace の値を false に変更し、waveset.properties ファイルを読み込みなおします。
フォームとフォームフィールドのサンプルここでは、製品に付属するデフォルトフォームのサンプルを示します。また、環境にサンプルフォームを組み込む方法についても説明します。
ユーザーフォームライブラリ
フォームは、フォーム自体としてではなく、フィールドの集合を格納したコンテナとして使用できます。Identity Manager は、ユーザーフォームライブラリというオブジェクトを利用して、フォームのこの用途をサポートしています。このライブラリには、パスワードの変更などに使用される、リソースの詳細な選択に関連する複雑なフィールドが含まれます。
次のリストは、ユーザーライブラリに割り当てられている各ライブラリの概要を示しています。
ユーザーライブラリ
ユーザーフォームのプライマリライブラリ。このライブラリは、このリストに示されるその他のライブラリを含み、秘密質問の回答を表示、編集するための AuthenticationAnswers フィールドを定義します。
パスワードライブラリ
パスワードの仕様と同期に関するフィールドを持ちます。
アカウント概要ライブラリ
ユーザーに関連付けられているアカウントに関する、読み取り専用の概要情報を表示するフィールドを持ちます。
アカウントリンクライブラリ
アカウントのリンクと、リソースごとの複数のアカウントに関するフィールドを持ちます。
ユーザーセキュリティーライブラリ
機能、フォームの割り当て、承認の転送など、ユーザーセキュリティーに関するフィールドを持ちます。
ユーザーフォームライブラリ
このライブラリには、次のような、リソースアカウントビューに関連するフィールドのみが含まれます。
このライブラリは主に、Identity Manager ユーザーに関連付けられているリソースアカウントの情報を表示したテーブルから構成され、各種操作で使用されるこれらの情報を選択できます。
サンプルフォームライブラリの使用
<FormRef> 要素を使用することで、Identity Manager に付属するサンプルフォームは、カスタマイズしているどのフォームにも含めることができます。
環境にサンプルフォームを追加する一般的な手順は次のとおりです。
手順 1: 規則のインポート
手順 2: フォームのインポート
手順 3: デフォルトフォームからの新規フォームの作成 (Include 参照の追加と、フォーム参照の追加)
手順 1: 規則のインポート
Identity Manager の管理者インタフェースを使用して、サンプル規則を読み込みます。次の手順で実行します。
サンプル規則のリソースファイルの名前は次のとおりです。
手順 2: フォームのインポート
Identity Manager の管理者インタフェースを使用して、サンプルフォームを読み込みます。次の手順で実行します。
- Identity Manager のメニューバーから、「設定」>「交換ファイルのインポート」を選択します。
- サンプルファイル名を入力するか、「参照」をクリックして、idm¥sample¥forms ディレクトリからファイルを探します。サンプルフォームのファイル名は次のとおりです。
- sample¥forms¥ACF2UserForm.xml
- sample¥forms¥AIXUserForm.xml
- sample¥forms¥HP-UXUserForm.xml
- sample¥forms¥NDSUserForm.xml
- sample¥forms¥NTform.xml
- sample¥forms¥OS400UserForm.xml
- sample¥forms¥SecurIDUserForm.xml
- sample¥forms¥SolarisUserForm.xml
- sample¥forms¥TopSecretUserForm.xml
- sample¥forms¥vitalStatform.xml
- 「インポート」をクリックします。Identity Manager にインポートに成功したことを示すメッセージが表示されます。
手順 3: Tabbed User Form の更新 (Include 参照の追加)
Tabbed User Form または作成するメインフォームから、サンプルフォームに Include 参照を追加します。次の手順で実行します。
- Tabbed User Form をコピーし、名前を変更します (たとえば、<CompanyName>tabbedUserForm)。
- Web ブラウザのアドレス行にこの URL を入力し、Enter キーを押します。
http://ApplicationServerHost:Port/idm/debug
- 認証が完了すると、「システム設定」ページが表示されます。
- 「タイプ」リストから UserForm オプションを選択し、「List Objects」をクリックします。
- <CompanyName>tabbedUserForm または、作成したメインフォームの横の「編集」をクリックします。
- フォームの Include エリアを変更し、次の例に太字で表示されている各サンプルフォームを追加します。
<Include>
<ObjectRef type='UserForm' id='#ID#UserForm:UserformLibrary' name='UserForm Library'/>
<ObjectRef type='UserForm' name='UserFormName'/>
<Include>
UserFormName に設定できる値は次のとおりです。
- ACF2 User Form
- AIX User Form
- HP-UX User Form
- LDAP Active Sync User Form
- Netegrity Siteminder Admin Form
- Netegrity Siteminder LDAP User Form
- Netegrity Siteminder ExampleTable User Form
- NDS User Form
- NT User Form
- Open Networks User Form
- OS400 User Form
- Oracle ERP User Form
- RACF User Form
- RSA ClearTrust User Form
- SecurID User Form
- Skeleton Database Active Sync User Form
- Solaris User Form
- Tivoli Access Manager
- Top Secret User Form
- グローバル属性 (vitalStatform.xml)
フォームを保存する前に、継続して次の手順を実行します。
手順 4: Tabbed User Form の更新 (フォームの追加)
各サンプルフォームの FormRef を追加するには、それをメインフォームに追加します。
コンプライアンス関連のフォーム
表 2-22 コンプライアンス関連のフォーム
フォーム名
一般的な目的
アクセス承認リスト
アテステーション作業項目のリストを表示します
アクセスレビュー削除確認
アクセスレビューの削除を確認します
アクセスレビューアボート確認
アクセスレビューの終了を確認します
アクセスレビューダッシュボード
すべてのアクセスレビューのリストを表示します
アクセスレビュー概要
特定のアクセスビューの詳細を表示します
アクセススキャンフォーム
アクセススキャンを表示または編集します
アクセススキャンリスト
すべてのアクセススキャンのリストを表示します
アクセススキャン削除確認
アクセススキャンの削除を確認します
UserEntitlementForm
ユーザーエンタイトルメントの内容を表示します
ユーザーエンタイトルメント概要フォーム
違反詳細フォーム
コンプライアンス違反の詳細を表示します
是正リスト
是正作業項目のリストを表示します
監査ポリシーリスト詳細
監査ポリシーのリストを表示します
監査ポリシー削除確認フォーム
監査ポリシーの削除を確認します
相反違反詳細フォーム
SOD 違反マトリックスを表示します
コンプライアンス違反概要フォーム
FormUtil メソッドの使用ここでは、このクラスのメソッドに関する検討事項の概要と使用方法のヒントについて説明します。FormUtil メソッドは、ビューを変換するときにフォームが使用するユーティリティーです。各メソッドについて具体的な情報は、FormUtil の Javadoc に記載されています。
各メソッドについては、<distribution>¥REF¥javadoc (<distribution> はインストールディレクトリ) を参照してください。
FormUtil クラスメソッド
FormUtil クラスは、フォームオブジェクト内の XPRESS 式から呼び出せるユーティリティーメソッドの集合です。FormUtil メソッドは、通常、Select フィールドと MultiSelect フィールドの valueMap 内で、使用できる値のリストを制限するために使用されます。また Identity Manager には、日付やディレクトリ DN などの文字列値をフォーマットするための追加メソッドも用意されています。
メソッドのコンテキストについて
FormUtil メソッドから Identity Manager リポジトリにアクセスする必要のあるときは、コンテキストオブジェクトが必要になります。Lighthouse コンテキストは認証済みセッションを表現しているので、可視性およびアクションの制限を適用するための認証チェックが必要となります。
コンテキストのフェッチ
ほとんどの FormUtil メソッドでは、ビュー属性 display.session を参照し、最初の引数として LighthouseContext または Session オブジェクトを渡す必要があります。フォームは、ベースコンテキストプレフィックスとともに使用されることが多いので、ベースコンテキストプレフィックスを削除できるように、display.session を参照する際には先頭に常にコロンを付けて (:display.session) 参照することをお勧めします。
メソッドの呼び出し
フォーム内から FormUtil メソッドを呼び出すときは、次の構文を使用します。
<invoke class='com.waveset.ui.FormUtil'
name = 'method_name'>
<ref>:display.session</ref>
<s>arg2</s>
</invoke>
この name フィールドは、メソッドの名前を表します。
コンテキストが不明な状態での FormUtil メソッドの呼び出し
select は、どの変数に Lighthouse コンテキストが指定されているかがわからなくても使用できます。これにより、メソッド呼び出しを再使用することが簡単になります。
<select>
<ref>:display.session</ref>
<ref>context</ref>
</select>
フォームでは、<ref>:display.session</ref> を使ってコンテキストを指定します。ただしワークフローでは、同じ FormUtil 呼び出しで <ref>context</ref> を代わりに使用します。
コンテキストをフェッチするための 3 番目の方法は、WF_CONTEXT オブジェクトを使用して getLighthouseContext メソッドの呼び出しを行う方法です。3 つすべての手法を 1 つのルールにまとめたものを次に示します。これは後で使用できます。
コード例 2-41
<rule name='Get Context'>
<select>
<ref>:display.session</ref>
<ref>context</ref>
<invoke name='getLighthouseContext'>
<ref>WF_CONTEXT</ref>
</invoke>
</select>
</rule>
ベストプラクティス
簡単な <select> ステートメントを含む、Get Context のような名前の規則を作成できます。この規則は、次の例のように、必要とする FormUtil メソッドを呼び出すときに任意のフォームまたはワークフローから呼び出すことができます。
コード例 2-42
<invoke name='getObject'>
<!-- 通常は、:display.session などをここに記述します。代わりに前述の規則を呼び出しま す -->
<rule name='Get Context'/>
<s>User:</s
<s>SamUser</s>
</invoke>
この呼び出しをより大きなユーティリティー規則の中で行えば、フォームとワークフローの両方で使用できます。
よく呼び出されるメソッド
もっともよく使用される FormUtil メソッドの簡単な説明を次の表に示します。
メソッド
説明
callResourceMethod
引数を指定して、リソース上の指定メソッドを呼び出します。
buildDn、buildDns
名前 (1 つまたは複数) とその名前に付加するベースコンテキストを受け取ります。このメソッドは、完全修飾識別 (DN) 名を返します。たとえば、group1 と dc=example,dc=com を渡すと、cn=group1, dc=example, dc=com という文字列が返されます。
checkStringQualityPolicy
文字列ポリシーに対して、指定された文字列の値を検証します。
controlsAtLeastOneOrganization
現在認証されているユーザーが、1 つまたは複数の組織 (ObjectGroup) 名のリストに含まれるいずれかの組織を制御できるかどうかを返します。サポートされる組織リストには、ObjectGroup タイプのすべてのオブジェクトのリスト表示で返される組織が含まれます。
getObject
リポジトリからオブジェクトを取得します (認証されていることが前提)。
getObjectNames
指定されたタイプのオブジェクトでセッションの所有者 (または現在のログインユーザー) がアクセスできるオブジェクトの名前のリストを返します。オプションマップに追加パラメータを指定し、返される名前のリストを制御できます。
オブジェクト名のリストを返すときは、session.getObjects() を実行するよりも、このメソッドを使用することをお勧めします。メソッドは、まず、ObjectCache を検索し、必要に応じて次にリポジトリを検索します。
getOrganizationsDisplayNames
現在の管理者がアクセスできる、組織ハンドルのリストを返します。組織の選択リストおよび複数選択リストを使用するフォームでは、このメソッドを使用する必要があります。
getResources
特定のリソース属性値 (type=LDAP など) と一致するリソースの名前リストを作成します。現在のリストを渡すと、リストはマージされます。
getResourceObjects
各オブジェクトが、タイプ、名前、ID (DN または完全修飾名)、および要求される searchAttrsToGet の値の属性セットを持つオブジェクトのリストを返します。返される値は、GenericObjects のリストです。それぞれの GenericObject には、マップへのアクセスと同様の方法でアクセスできます。各オブジェクトで get メソッドを呼び出します。このとき、属性名が渡され、属性値が返されます。
getRoles
現在の管理者がアクセスできる、ロール名のリストを返します。現在の値、または現在のリストを指定すると、返されるロール名にリスト内のロール名が追加されます。
geUnassignedApplications
ユーザーのプライベートアプリケーションに適したアプリケーション名のリストを作成します (プライベートアプリケーションは、ユーザーに直接割り当てられているアプリケーション)。これは、ロールを通じてすでにユーザーに割り当てられているアプリケーションの名前を除く、すべての利用可能なアプリケーションのリストです。
作成されるリストは、フォームでのプライベートアプリケーションの割り当てに便利です。
getSubordinates
ユーザーの、指定された管理対象部下のリストを取得します。
getUnassignedResources
ユーザーのプライベートリソースに適したリソース名のリストを作成します (プライベートリソースは、ユーザーに直接割り当てられているリソース)。これは、ロールを通じてすでにユーザーに割り当てられているリソースの名前を除く、すべての利用可能なリソースのリストです。
作成されるリストは、フォームでのプライベートリソースの割り当てに便利です。
getUsers
このメソッドの最初の変数は、すべてのユーザーを返します。2 番目の変数は、デフォルトではすべてのユーザーを返しますが、リストをさらにフィルタリングするためのオプションのマップを指定できます。
listResourceIObjects
指定したタイプ (たとえば、group) のリソースオブジェクトのリストを取得します。このメソッドの最初の試行では、サーバーの resourceObjectListCache からリストが取得されます。見つかった場合は、リストが返されます。
リストが見つからなかった場合は、結果リストのマージ、ソート、および重複削除を行う前に、メソッドは各リソースで listResourceObjects メソッドを呼び出します。最後に、同じリソースからの同じリソースオブジェクトタイプを求める次回以後の要求に備えて、この新しいリストをサーバーの resourceObjectListCache にキャッシュします。
このメソッドは、現在認証されている管理者 (たとえば、subject) として実行されます。変数は、単一のリソース ID、または subject 文字列と既存のセッションを値としてとります。
このメソッドは、次の条件に応じて、異なる複数の変数をとります。
メソッドが、単一のリソースを返すか、リソースリストを返すか。
キャッシュをクリアする必要があるかどうか。
メソッドが、セッション ID (ユーザーがすでに認証されている場合に実装される) を送信するか、主体を表す文字列 (subjectString) を送信するか。通常は、Session を使用します。
testObject
主体がオブジェクトの表示を認証されていない場合でも、指定したオブジェクトが存在するかどうかを確認します。ツリー全体を表示できない管理者がユーザーの新規作成プロセスを開始するときは、このメソッドを使用して、重複オブジェクトの作成を防止してください。
testUser
主体がオブジェクトの表示を認証されていない場合でも、指定したユーザーが存在するかどうかを確認します。ツリー全体を表示できない管理者がユーザーの新規作成プロセスを開始するときは、このメソッドを使用して、重複オブジェクトの作成を防止してください。
hasCapability、hasCapabilities
ユーザーが指定された 1 つまたは複数の機能 (文字列) を持つかどうかを確認します。このメソッドは、直接割り当てられている機能、または AdminGroups、AdminRoles、またはその両方によって間接的に割り当てられている機能を調べます。session の値が必要です。
FormUtil を使用するときのヒント
一般的な FormUtil メソッドを実装するときには、オブジェクトを取得するメソッドで注意が必要になります。特に、次のメソッドは注意して使用する必要があります。
ここでは、これらのメソッドを使用する際の基本的なヒントを紹介します。
getObject を使用してオブジェクトをリポジトリからフェッチ
getObject メソッドは、リポジトリ内からオブジェクトを取得するためにもっともよく使用されるメソッドです。このメソッドを使用するときは、実際の (Java) オブジェクトを取得していることに注意してください。このオブジェクトの属性にアクセスするには、オブジェクトを取得するメソッドの呼び出し元にオブジェクトをラップする必要があります。各オブジェクトでは固有の取得操作が使用されるため、詳細については個々のオブジェクトの Javadoc を参照してください。
WSUser オブジェクトを操作するときは、WSUser オブジェクトの toHashMap() メソッドを使用できます。このメソッドは、次の例のように、オブジェクトを Java の HashMap と同等の GenericObject に変換します。
コード例 2-43
<set name='wsUserObj'>
<invoke name='getObject'>
<!-- 通常は、:display.session などの値をここに記述します。代わりに前述の規則を呼び出 します -->
<rule name='Get Context'/>
<s>User:</s>
<s>SamUser</s>
</invoke>
</set>
<set name='wsGenericObj'>
<invoke name='toHashMap'>
<ref>wsUserObj</ref>
</invoke>
</set>
WSUser オブジェクトから accountId を取得するときは、次を使用します。
<invoke name='getAccountId'>
<ref>wsUserObj</ref>
</invoke>
ただし、ユーザーを操作しているときは、このメソッドが面倒なことがあります。WSUser オブジェクトを使った処理が次のように GenericObject に変換されています。
<ref>wsGenericObj.waveset.accountId</ref>
基本的に、ビューなどの GenericObject は WSUser オブジェクトよりも操作が大幅に簡単です。オブジェクトを直接操作することがわずらわしいときは、関連するオブジェクトのビューをチェックアウトすることを検討してください。
注
処理によっては、基本となる PersistentObject がリポジトリによってロックされます。一般に、checkout という語句で始まるメソッドはオブジェクトをロックし (checkin はロック解除)、get で始まるメソッドはオブジェクトをロックしません。
getResourceObject を使用してオブジェクトをリソースからフェッチ
getResourceObject 処理は、指定されたリソースから指定されたオブジェクトを GenericObject として返します。フェッチできるオブジェクトおよびリストでサポートされる属性については、『リソースリファレンス』を参照してください。このメソッドにより、対応するリソースアダプタが呼び出されます。
getUnassigned* メソッドの使用
getUnassigned* メソッドは、lh コンテキストから渡されたユーザーに現在割り当てられていない機能を取得します。これらのメソッドは、現在は割り当てられていない機能を選択できる (それらの機能へのアクセスを要求できる) ユーザーフォームを作成する必要があるときに便利です。たとえば、次のようにします。
コード例 2-44
<Field name='waveset.resources'>
<Display class='MultiSelect' action='true'>
<Property name='title' value='_FM_PRIVATE_RESOURCES'/>
<Property name='availableTitle' value='_FM_AVAILABLE_RESOURCES'/>
<Property name='selectedTitle' value='_FM_SELECTED_RESOURCES'/>
<Property name='allowedValues'>
<invoke name='getUnassignedResources' class='com.waveset.ui.FormUtil'>
<ref>:display.session</ref>
<map>
<s>current</s>
<ref>waveset.resources</ref>
</map>
</invoke>
</Property>
</Display>
</Field>
listResourceObject メソッドの使用
listResourceObject メソッドには 10 個のバージョンがあります。バージョンによっては、1 つのリソース ID を指定したり、リソースのリストを指定したり、キャッシュまたはその他のキャッシュ詳細をクリアするためのブール型を指定する必要があります。また、メソッドを別のユーザーとして実行するように指定できるバージョンもあります。
フォームまたは規則内でこのメソッドを実装するときは、このメソッドのどのバージョンを使用しているのかについてコメントで明らかにしてください。次に例を示します。
Lists the Groups on the AD-Austin resource starting at the OurGroups OU. It will leverage the server cache should this list be found there.
Additional details in the Identity Manager formUtil javadocs under:
public static java.util.List listResourceObjects(java.lang.String subjectString,
java.lang.String objectType,
java.lang.String resourceId,
java.util.Map options,
java.lang.String cacheList)
FormUtil メソッドを使用するシナリオで注意が必要なもの
ほとんどの FormUtil 処理ではビューが使用されます。このため、フォームで使用されるビュー関連のメソッドでもっともよく使用されるのは、checkoutView メソッドと checkinView メソッドになります。
一般的なチェックアウト処理は次のようになります。
コード例 2-45
<Action id='-1' application='com.waveset.session.WorkflowServices'>
<Argument name='op' value='checkoutView'/>
<Argument name='type' value='User'/>
<Argument name='id' value='mfairfield'/>
<Variable name='view'/>
<Return from='view' to='user'/>
</Action>
チェックアウトおよびチェックイン呼び出しとオプションのマップの使用
チェックアウトおよびチェックイン呼び出しのオプション引数として、どのオプションを使用できるかを判断するのが難しいことがあります。これらのオプション引数は、UserViewConstants クラスの一部として定義されます。Javadoc には、次の形式でオプションが記載されています。
OP_TARGETS
OP_RAW
OP_SKIP_ROLE_ATTRS
オプションを確認するときにこれらのリテラル文字列をコードにハードコードする代わりに、コードベース全体で使用できるように文字列を表現する定数を定義します。これはよいコーディング手法ですが、XPRESS やワークフローでは OP_TARGET_RESOURCES などの静的フィールドを参照できません。
正しい値を渡すことができる有効な文字列であることを調べるために、正しい文字列であることを確認するためのテスト規則を作成できます。たとえば、次の規則は TargetResources を返します。
コード例 2-46
<block>
<set name='wf_srv'>
<new class='com.waveset.provision.WorkflowServices'>
</set>
<script>
var wfSvc = env.get( 'wf_srv' );
var constant = wfSvc.OP_TARGETS;
constant;
</script>
</block>
この規則は文字列を調べるのに便利ですが、すべての呼び出しに同じ文字列を返すため、本稼働配備には適していません。
有効な文字列であることがわかったら、ビューのチェックアウト呼び出しを次のように更新できます。このコードでは、Identity Manager および AD に変更が反映されるだけのビューがチェックアウトされます。
コード例 2-47
<Action id='-1' application='com.waveset.session.WorkflowServices'>
<Argument name='op' value='checkoutView'/>
<Argument name='type' value='User'/>
<Argument name='id' value='mfairfield'/>
<Argument name='options'>
<map>
<s>TargetResources</s>
<list>
<s>Lighthouse</s>
<s>AD</s>
</list>
</map>
</Argument>
<Variable name='view'/>
<Return from='view' to='user'/>
</Action>
ベストプラクティス
パフォーマンス上の観点から、可能な場合はユーザービューのサイズを制限することをお勧めします。ビューを小さくすると、リソースから取得されてネットワークに送信されるデータが少なくなります。たとえば、ユーザーが特定のリソースへのアクセスを要求するカスタムワークフローを顧客が実装することにした場合、そのワークフローは、(適切な承認が得られるまでの間) 変更を送信できるようにユーザービューをチェックアウトするはずです。この例では、取得する必要がある情報はビューの Identity Manager ユーザー部分だけで、waveset.resources リストおよび accountInfo オブジェクトがそれに合わせて更新されるようです。このような場合は次のようにして、ユーザービューをチェックアウトするときに TargetResources オプションを使用して、ユーザービューの Identity Manager ユーザー部分とオプションマップだけがチェックアウトされるようにします。
追加オプション
FormUtil メソッドのサブセットでは、次のオプションが使用されます。
scopingOrg
このオプションは、ユーザーに複数の AdminRole が割り当てられているときに使用します。このオプションの値には、組織名を指定するようにしてください。この値を指定することによって、AdminRole によって制御される組織が利用できる名前だけが返されるようになるはずです。AdminRole は、scopingOrg 組織を制御する必要があり、ログイン中のユーザーに割り当てられます。
このオプションは、通常、ユーザーが別のユーザーを作成または編集するときに割り当てる名前 (たとえば、Resourcenames) が、必ず編集対象ユーザーが属す組織に適した名前となるようにするために使用されます。
scopingOrg パラメータの使用
次のような状況では、この属性を設定します。
次に例を示します。
このような場合、そのユーザーに割り当てることができるリソースは、Engineering AdminRole によって制御される組織が利用できるリソースに制限されます。
scopingOrg 属性の実装
前述の動作を実装するには、ユーザーフォームの waveset.resources フィールドに scopingOrg 属性を追加します。
現在の組織で使用できる値を参照する方法は次のとおりです。
コード例 2-49
<Field name='waveset.resources'>
<Display class='MultiSelect'>
<Property name='title' value='_FM_PRIVATE_RESOURCES'/>
<Property name='availableTitle'
value='_FM_AVAILABLE_RESOURCES'/>
<Property name='selectedTitle' value='_FM_SELECTED_RESOURCES'/>
<Property name='allowedValues'>
<invoke class='com.waveset.ui.FormUtil'
name='getUnassignedResources'>
<ref>:display.session</ref>
<map>
<s>currentRoles</s>
<ref>waveset.roles</ref>
<s>currentResourceGroups</s>
<ref>waveset.applications</ref>
<s>current</s>
<ref>waveset.original.resources</ref>
<s>scopingOrg</s>
<ref>waveset.organization</ref>
</map>
</invoke>
</Property>
</Display>
</Field>
current
返される値とマージされる名前のリストを指定します。たとえば、選択されたすべての名前が必ず MultiSelect のリストから選択できるようにするときは、通常、MultiSelect フィールドで選択される名前のリストを指定します。
conditions
この値には、特定の属性、それらの期待値、および比較演算子が指定された AttributeCondition の組み合わせを設定します。AttribueCondition は、3 つの方法で指定できます。
表 2-23 conditions 属性の値
値の形式
説明
Map
複数の <MapEntry> 要素で構成されるマップ。各 <MapEntry> 要素には、key に対応する属性名と、value に対応する値を指定します。演算子は「equals」であるとみなされます。属性名と値の複数のペアを指定した場合は、それらは論理 and で連結されます。
例
<Map>
<MapEntry key='memberObjectGroups' value='Top'/>
</Map>
map
<MapEntry> を含まないマップ。最初のエントリは、このオブジェクトタイプがサポートする、クエリー可能な属性の名前です。2 番目のエントリは、関連付けられているクエリー可能属性を取得するために必要な、このタイプのオブジェクトの値です (演算子は「equals」と見なされる)。
属性名と値の複数のペアを指定した場合は、それらは論理 and で連結されます。
例
<map>
<s>memberObjectGroups</s>
<ref>waveset.organizations</ref>
</map>
list
AttributeCondition オブジェクトのリスト。複数の AttributeCondition を指定した場合は、それらは論理 and で連結されます。「equals」以外の演算子を指定する必要がある場合は、この形式を使用する必要があります。
例
<list>
<newclass= 'com.waveset.object.AttributeCondition'>
<s>MemberObjectGroups</s>
<s>equals</s>
<ref>waveset.organization</ref>
</new>
</list>
conditions 属性の使用
オブジェクトタイプに固有の、1 つまたは複数のクエリー属性条件のリストを指定して、特定の FormUtil メソッドから返される名前のリストをフィルタリングできます。これらのメソッドには、引数として options マップを受け付けるメソッドが含まれます。これらのクエリー属性条件を、conditions をキーとしたクエリーオプションとして指定することができます。オプションの値にはマップ、または AttributeConditions のリストを指定できます。
例: condition 属性による名前のフィルタリング
次の例は、conditions 属性を使用して、オプションマップを引数として受け付ける FormUtil メソッドから返される名前のリストに、追加のフィルタを適用する方法を示しています。この例では、conditions を使用して、タイプ LDAP のコンテナオブジェクトグループをサポートするリソースだけが返されるように指定します。
コード例 2-50 conditions 属性の使用の例 1
<Field name='waveset.resources'>
<Display class='MultiSelect' action='true'>
...
<Property name='allowedValues'>
<invoke class='com.waveset.ui.FormUtil'
name='getUnassignedResources'>
<ref>:display.session</ref>
<map>
<s>currentRoles</s>
<ref>waveset.roles</ref>
<s>currentResourceGroups</s>
<ref>waveset.applications</ref>
<s>current</s>
<ref>waveset.original.resources</ref>
<s>conditions</s>
<map>
<s>supportsContainerObjectTypes</s>
<s>true</s>
<s>type</s>
<s>LDAP</s>
</map>
</map>
</invoke>
</Property>
</Display>
</Field>
この 2 番目の例では、名前が ldap で始まるリソースのうち、コンテナオブジェクトをサポートするリソースを要求します。クエリー可能属性の値を比較するときは、大文字と小文字が区別されます。
コード例 2-51 conditions 属性の使用の例 2
<Field name='orgResource'>
<Display class='Select' action='true'>
...
<Property name='allowedValues'>
<invoke class='com.waveset.ui.FormUtil'
name='getResourcesSupportingContainerObjectTypes'>
<ref>:display.session</ref>
<map>
<s>conditions</s>
<list>
<new class='com.waveset.object.AttributeCondition'>
<s>name</s>
<s>starts with</s>
<s>ldap</s>
</new>
</list>
</map>
</invoke>
</Property>
</Display>
</Field>
コード例 2-52 conditions 属性の使用の例 3
<Field name='accounts[Lighthouse].capabilities'>
<Display class='MultiSelect'>
...
<Property name='allowedValues'>
<invoke class='com.waveset.ui.FormUtil'
name='getUnassignedCapabilities'>
<ref>:display.session</ref>
<ref>waveset.original.capabilities</ref>
<map>
<s>conditions</s>
<list>
<new class='com.waveset.object.AttributeCondition'>
<s>name</s>
<s>starts with</s>
<s>bulk</s>
</new>
</list>
</map>
</invoke>
</Property>
</Display>
</Field>
サポートされるクエリー可能属性の名前
サポートされるクエリー可能属性の名前は、オブジェクトタイプごとに次のように分類されます。
上記以外のクエリー可能属性の名前は Identity Manager のスキーマ設定設定オブジェクトに定義されます (たとえば、firstname と lastname)。
サポートされる演算子
Identity Manager では、クエリー可能属性のすべての比較が大文字と小文字を区別する方式で実行されます。また、Identity Manager では、文字列を比較する方式を使用して比較が実行されるため、1000<999 になります。これは、文字列比較では文字単位で比較されるので、9 が 1 よりも大きくなるためです。
- equals または is equal
- notEquals または is 馬ot equal/span>
- greaterThan または span class="cCode">greater than/span>
- greaterThanOrEqualTo または span class="cCode">not less than/span>
- lessThan または span class="cCode">less than/span>
- lessThanOrEqualTo または span class="cCode">not greater than/span>
- startsWith または span class="cCode">starts with/span>
- endsWith または span class="cCode">ends with/span>
- contains または span class="cCode">contains'
- isPresent または exists
- 馬otPresent'
- isOneOf または is one of'
- containsAll