プライマリ・コンテンツに移動
Oracle® Fusion Middleware Oracle Identity Managerのためのアプリケーションの開発とカスタマイズ
11gリリース2 (11.1.2.3.0)
E61958-10
  目次へ移動
目次

前
 
次
 

19 インタフェースのカスタマイズ

この章では、Oracle Identity Managerで使用可能なユーザー・インタフェースの様々な側面のカスタマイズ方法について説明します。


注意:

Oracle Identity Manager 11gリリース2 (11.1.2.3.0)には、暫定UIと呼ばれる、従来のUIテクノロジに基づく多数のUIページが含まれています。技術上の相違のために、暫定UIはポップアップ・ウィンドウに表示され、そのルック・アンド・フィールは異なります。これらのUIについては、この章の関連する項で説明します。

この章では、UIの様々な側面のカスタマイズについて、次の各項で説明します。

19.1 サンドボックスの管理

すべてのカスタマイズとフォーム管理は、サンドボックスで実行されます。サンドボックスを使用すると、他のユーザーの環境に影響を与えることなく、カスタマイズを分離し、テストすることができます。サンドボックスに加えたユーザー・インタフェースの変更は、サンドボックス内でのみ参照可能です。カスタマイズおよびフォーム管理機能の使用を開始するには、サンドボックスを作成してアクティブにする必要があります。フォームのカスタマイズおよび拡張が完了したら、サンドボックスを公開してそのカスタマイズを他のユーザーが使用できるようにします。

いくつかのサンドボックス操作を、次に示します。

  • アクティブ化: サンドボックスを使用するには、アクティブにする必要があります。サンドボックスをアクティブにした後、UIメタデータ・オブジェクトへの変更はすべて(たとえば、ページやフォームなど)、サンドボックスにのみ格納されます。アクティブなサンドボックスは、一度に1つのみ存在できます。アクティブなサンドボックスに関する情報は、セッションに格納されます。したがって、カスタマイズを続行するには、Oracle Identity Managerにログインするたびに、サンドボックスをアクティブにする必要があります。

  • 非アクティブ化: サンドボックスのアクティブに対する逆の操作です。アクティブなサンドボックスがない場合、メタデータ・オブジェクトへの変更は許可されず、UIカスタマイズも許可されません。

  • 公開: サンドボックスに格納されている変更をメインラインにマージして、それを他のユーザーに使用可能にするには、サンドボックスを公開する必要があります。サンドボックスを公開すると、その変更はメインラインにマージされ、元に戻すことはできません。そのサンドボックスは、アクティブ化、非アクティブ化、エクスポートまたは削除できなくなります。


    注意:

    サンドボックスを公開する前に、サンドボックスをZIPファイルにエクスポートしてUIカスタマイズのバックアップを実行します。

    すべてのサンドボックスについて、その公開前にMDSのバックアップを作成することをお薦めします。MDSバックアップは、Oracle Enterprise Managerなどのツールを使用して作成できます。Oracle Enterprise Managerを使用したMDSのバックアップの作成の詳細は、「MDSバックアップの作成」を参照してください。


  • 一括および順序での公開: 複数のサンドボックスに様々なタイプの変更を格納している場合、すべての変更をメインラインにマージするために複数のまたはすべてのサンドボックスを一括で公開し、他のユーザーが使用できるようにすることができます。サンドボックスを一括で公開する際に、サンドボックスを公開する順序を指定できます。サンドボックスを一括および順序で公開する手順の詳細は、「一括および順序でのサンドボックスの公開」を参照してください。


    注意:

    順序機能でのサンドボックスの一括公開は、バンドル・パッチ11.1.2.3.170418を適用した後にのみ使用できます。バンドル・パッチ11.1.2.3.170418のダウンロードおよび適用手順は、バンドル・パッチのドキュメントを参照してください。

  • エクスポート: サンドボックス・メタデータなど、サンドボックスに格納されているすべての変更を、ZIPファイルにエクスポートできます。これらの変更は、同じ環境または別の環境にインポートできます。

  • インポート: サンドボックス・アーカイブ(ZIPファイル)を、任意の環境にインポートできます。通常、インポートされたサンドボックスは、その環境で作成されたように使用できます。サンドボックスをインポートすると、同じ名前を持つ使用可能なすべてのサンドボックスが、インポートされるサンドボックスによって上書きされることに注意してください。


    注意:

    同じ名前を持つ使用可能なすべてのサンドボックスが、インポートされるサンドボックスによって上書きされます。

サンドボックスの管理およびサンドボックスの操作は、同時バージョニング・システムでの操作に似ています。サンドボックスをバージョニング・システムのブランチと見なすことができます。サンドボックスの作成方法は、ブランチの作成方法に似ています。サンドボックスのアクティブ化はブランチの最上位での変更と似ており、サンドボックスの公開はメイン・ブランチ(トランクと呼ばれる場合もある)にブランチ・コンテンツをマージすることと似ています。


注意:

サンドボックスを作成すると、新しいブランチが作成されます。そのブランチ内でMDSの内容を変更できます。後で作成してメイン・ブランチに公開した、他のサンドボックスで行った変更を表示することはできません。同様に、このサンドボックスをマージしようとすると、同時変更例外が生成されます。サンドボックスの内容を手動で編集し、競合するファイル削除することをお薦めします。ただし、手動による編集ができない場合は、新しいサンドボックスを再度作成し、変更をやり直します。

この項では、サンドボックスを管理する方法について、次の各項で説明します。

19.1.1 同時実行の競合への対処

複数のユーザーが、サンドボックスを使用してアプリケーションをカスタマイズできます。その場合、次のタイプの同時実行の競合が発生する可能性があります。

  • サンドボックス内の競合: ユーザーが、他のユーザーによって作成された変更を、直接的に同じアーティファクトを変更するか、間接的にアーティファクト間で共有されるファイルに影響を与えることによって上書きする場合。

    複数のユーザーが同時に同じサンドボックスを使用してアプリケーションをカスタマイズしている場合に、複数のユーザーが同じアーティファクトをカスタマイズしようとしたか、または他の共有ファイルに間接的に影響を与えるカスタマイズ・タスクを実行したことが原因で、サンドボックス内の競合が発生する可能性があります。直接的な競合の1つの例は、異なるユーザーが同じレイヤー内の同じページ、同じフラグメント、または同じメタデータ・ファイルをカスタマイズしようとした場合です。間接的な競合の1つの例は、2人のユーザーが、それぞれ自分自身のオブジェクトを作成中に、どちらも同時間帯に自分の変更を保存したことによって、新しいオブジェクトの作成を追跡するメタデータ・ファイルで競合が発生した場合です。ユーザーが翻訳可能な文字列を追加または編集する操作を実行した場合など、ユーザーが共有アーティファクトの編集中に競合が発生することもあります。たとえば、あるユーザーがフィールドの表示ラベルやヘルプ・テキスト、検証ルールのエラー・メッセージを編集している一方で、別のユーザーが同時間帯に翻訳可能な文字列に同様に影響を与える操作を実行することがあります。共有アーティファクトの競合のもう1つの例として、アプリケーション全体で共有されるナビゲータ・メニューで複数のユーザーが作業する場合があります。

  • 公開を目的とするサンドボックス間の競合: メインラインに公開される同じカスタマイズ済アーティファクトを持つ複数のサンドボックスがある場合。

    公開を目的とする使用中のサンドボックスが複数存在する場合、サンドボックス間に競合が発生する可能性があります。同じアーティファクトに対する競合するカスタマイズ変更が2つのサンドボックスに含まれるときに、その両方を公開しようとすると、後に公開するサンドボックスについては公開が許可されず、競合について説明するエラーが表示されます。このような競合を回避するには、一度に1つのサンドボックスのみを作成して使用することをお薦めします。この種の競合は、翻訳可能な文字列を格納するリソース・バンドルなど、共有メタデータ・ファイルで発生する可能性もあります。

複数のユーザーが単一のサンドボックスで作業する場合、次のガイドラインに従う必要があります。

  • 同じサンドボックスの複数の同時ユーザーは、別の無関係なオブジェクトのみを操作する必要があります。たとえば、user1がobject1を更新する場合、user2はobject2を更新できますが、object1は更新しないでください。両方の修正に、翻訳可能な文字列に対する変更が含まれている場合、別々のオブジェクトに対する変更でも同時間帯に保存すると、翻訳可能な文字列を格納するリソース・バンドルで競合が発生する可能性があることに注意してください。

  • 同じサンドボックスのユーザーは、お互いが作成した変更を確認できます。各オブジェクトの最新バージョンは、それが最初に表示されるときにオンデマンドでロードされます。ADF Business Componentsのカスタマイズがある場合、ユーザーはログアウトしてから再度ログインし、変更がUIに反映されていることを確認する必要があります。

複数のユーザーが複数のサンドボックスで作業している場合は、単一のサンドボックスで作業する複数のユーザーに適用されるすべてのガイドラインに加えて、次のガイドラインに従う必要があります。

  • テストのみのサンドボックスについては、任意の数のサンドボックスが同時に存在できます。これらのサンドボックスが公開されない場合でも、複数のユーザーがテスト用の複数のサンドボックスを同時に使用できます。テストのみに使用される、公開されないサンドボックスは相互に競合を引き起こしませんが、単一のサンドボックスで動作している複数のユーザーを対象とするすべてのガイドラインに従う必要があります。ただし、サンドボックスが削除されると、すべての変更が失われます。

  • 公開されるサンドボックスについては、互いに排他的なアーティファクトで動作する場合にのみ、複数のサンドボックスを同時に持つことができます。たとえば、タスク・フローを追加するためにカスタマイズするページが含まれるサンドボックスと、異なるアプリケーションからの異なるページが含まれるサンドボックスを持つことができます。

  • 1つのアーティファクトがメインラインとサンドボックスの両方(または2つの異なるサンドボックス)で更新された場合に、そのサンドボックスを公開すると、その競合が検出され、エラーが生成されます。

19.1.1.1 同時実行性の問題のトラブルシューティング

表19-1に、サンドボックスの使用方法に同時実行性の競合がある場合に直面する問題点および考えられる解決策を示します。

表19-1 同時実行性の問題のトラブルシューティング

使用例 問題 解決策

同時公開のため複数のサンドボックスで作業:

サンドボックスS1を作成し、サンドボックスS2を作成し、S2に変更を加え、S2を公開し、S1に変更を加え、S1を公開します。

S1の公開を試行すると、エラーがスローされます。

新しいサンドボックスを作成して、変更をやり直します。

正常に動作しないサンドボックスの移行:

環境1で、サンドボックスS1を作成し、S1に変更を加え、S1をエクスポートおよび公開します。S2に対しても同様の操作を繰り返します。

環境2で、S2をインポートし、S2を公開します。その後、S1をインポートし、S1を公開します。

サンドボックスS1とサンドボックスS2は異なる順序で公開されます。

S1とS2の間で重複がある場合(たとえば、2つのサンドボックスが同じMDSドキュメントを更新した場合)、S2の一部として加えられた変更がS1により上書きされます。

たとえば、ADコネクタ・フォームがS1の一部として作成され、EBSコネクタ・フォームがS2の一部として作成されている場合、CatalogAM.xml.xmlおよびBizEditorリソース・バンドル・ファイルの間に重複が生じます。移行後、CatalogAM.xml.xmlおよびBizEditorリソース・バンドルには、S1の一部として開発されたADコネクタの変更のみ含まれます。

正しい順序でサンドボックスを公開します。これにより、再公開できます。

移行時のサンドボックスのスキップ:

環境1で、サンドボックスS1を作成し、S1に変更を加え、S1をエクスポートおよび公開します。S2に対しても同様の操作を繰り返します。

環境2で、S2をインポートし、S2を公開します。S1は移行しません。

環境1で公開されるS1は環境2へ移行しません。

S2が、S1の一部として加えられた変更に依存している場合、それらの変更は環境2では失われます。

両方のサンドボックスを公開します。これにより、再公開できます。

複数のソース環境からのサンドボックスの移行:

環境1で、サンドボックスS1を作成し、S1に変更を加え、S1をエクスポートおよび公開します。

環境2で、サンドボックスS2を作成し、S2に変更を加え、S2をエクスポートおよび公開します。

環境3で、S1をインポートし、S1を公開します。S2をインポートし、S2を公開します。

S1とS2の間で重複がある場合(たとえば、2つのサンドボックスが同じMDSドキュメントを更新した場合)、S1の一部として加えられた変更が失われます。

たとえば、ADコネクタ・フォームがS1の一部として作成され、EBSコネクタ・フォームがS2の一部として作成されている場合、CatalogAM.xml.xmlおよびBizEditorリソース・バンドル・ファイルの間に重複が生じます。移行後、CatalogAM.xml.xmlおよびBizEditorリソース・バンドルには、S2の一部として開発されたEBSコネクタの変更のみ含まれます。

手動により、サンドボックスを1つにマージします。


19.1.2 サンドボックスの作成

サンドボックスを作成するには、次の手順を実行します。

  1. Oracle Identity Self ServiceまたはOracle Identity System Administrationにログインします。

  2. 上部のナビゲーション・バーで、「サンドボックス」をクリックします。「サンドボックスの管理」ページが表示されます。このページには次のセクションがあります。

    • 使用可能なサンドボックス: UIカスタマイズをテストするために使用可能なすべてのサンドボックス(未公開)を表示します。

    • 公開済サンドボックス: 公開されたすべてのサンドボックスを表示します。

  3. ツールバーで、「サンドボックスの作成」をクリックします。「サンドボックスの作成」ダイアログ・ボックスが表示されます。

  4. 「サンドボックス名」フィールドに、サンドボックスの名前を入力します。これは必須フィールドです。

  5. 「サンドボックスの説明」フィールドに、サンドボックスの説明を入力します。これはオプションのフィールドです。

  6. 「保存して閉じる」をクリックします。メッセージに、サンドボックス名と作成ラベルが表示されます。


    注意:

    「サンドボックスのアクティブ化」オプションを選択すると、「サンドボックスの管理」タブ以外の開いているすべてのタブが閉じ、作成されたサンドボックスがアクティブになります。

  7. 「OK」をクリックします。このサンドボックスが、「サンドボックスの管理」ページの「使用可能なサンドボックス」セクションに表示されます。

19.1.3 サンドボックスのアクティブ化および非アクティブ化

サンドボックスをアクティブにするには、次の手順を実行します。

  1. 「サンドボックスの管理」ページの使用可能なサンドボックスが表示される表から、アクティブにするサンドボックスを選択します。

  2. ツールバーで、「サンドボックスのアクティブ化」をクリックします。

    表がリフレッシュされ、「アクティブ」列にマーカーが表示されます。また、上部のナビゲーション・バーの「サンドボックス」リンクに、カッコ内にアクティブなサンドボックス名が表示されます。


    注意:

    サンドボックスをアクティブにする前に「サンドボックスの管理」タブ以外のタブが開いている場合、Oracle Identity Managerからすべてのタブを閉じてからサンドボックスをアクティブにするように求められます。

サンドボックスを非アクティブ化するには、次の手順を実行します。

  1. 「サンドボックスの管理」ページの使用可能なサンドボックスが表示される表から、非アクティブにするアクティブなサンドボックスを選択します。

  2. ツールバーで、「サンドボックスの非アクティブ化」をクリックします。ページがリフレッシュされ、「アクティブ」表のマーカーが非表示になります。


    注意:

    サンドボックスを非アクティブ化する前に「サンドボックスの管理」タブ以外のタブが開いている場合、Oracle Identity Managerからすべてのタブを閉じてからサンドボックスを非アクティブ化するように求められます。

19.1.4 サンドボックスの詳細の表示および変更

サンドボックスの詳細を表示し、詳細を変更するには、次の手順を実行します。

  1. 「サンドボックスの管理」ページの使用可能なサンドボックスが表示される表で、サンドボックス名リンクをクリックします。サンドボックスの詳細が示されるダイアログ・ボックスが表示されます。

  2. 次の変更を行います。

    • 「説明」フィールドに、サンドボックスの説明を入力できます。

    • 「詳細の変更」表のサンドボックスに対するすべての変更が表示されます。

    • フィルタ・サンドボックスは「レイヤー名」、「レイヤー値」および「タイプの変更」リストおよび「フィルタ」ツールバー・アイコンを使用して変更します。

    • 表で変更を選択し、「カスタマイズの削除」をクリックして、サンドボックスで行った変更を削除します。

    • サンドボックスに変更が含まれる場合に、「サンドボックスのエクスポート」をクリックしてサンドボックスをエクスポートします。

19.1.5 サンドボックスのエクスポートおよびインポート

Oracle Identity Managerデプロイメント間から別のデプロイメントにサンドボックスをエクスポートするには、次の手順を実行します。

  1. 「サンドボックスの管理」ページの使用可能なサンドボックスが表示される表から、エクスポートするサンドボックスを選択します。

  2. ツールバーで、「サンドボックスのエクスポート」をクリックします。

    サンドボックスに変更が含まれる場合、サンドボックスのコンテンツZIPファイルがダウンロードを開始します。これでZIPファイルを取得し、同じ環境または別の環境にそれをインポートすることができます。


    注意:

    サンドボックスZIPファイルの名前は、サンドボックス名ではありません。サンドボックス名は通常、IdM_で始まり、/mdssys/sandbox/ディレクトリのZIP内にあるXMLファイルで指定されています。


    注意:

    サンドボックスのコンテンツZIPファイルがインポートされるデプロイメントに、すでに同じ名前のサンドボックスが含まれている場合、そのサンドボックスは上書きされます。

Oracle Identity Managerデプロイメントから別のデプロイメントにサンドボックスをインポートするには、次の手順を実行します。

  1. ツールバーで、「サンドボックスのインポート」をクリックします。「サンドボックスのインポート」ダイアログ・ボックスが表示されます。

  2. 「サンドボックス・アーカイブ」フィールドに、エクスポートしたサンドボックス・アーカイブへのパスを入力します。

  3. 「インポート」をクリックします。

  4. 「リフレッシュ」をクリックします。ターゲット・デプロイメントにインポートされたサンドボックスが、「使用可能なサンドボックス」タブに表示されます。

19.1.6 サンドボックスの公開

サンドボックスを公開するには、次の手順を実行します。


注意:

  • サンドボックスを公開する前にエクスポートしてください。サンドボックスの公開後はエクスポートできなくなるため、別の環境に移行する方法はありません。

  • サンドボックスを公開する前に、MDSのバックアップを作成することをお薦めします。MDSのバックアップは、Oracle Enterprise Managerを使用して作成できます。Oracle Enterprise Managerを使用したMDSのバックアップの作成の詳細は、「MDSバックアップの作成」を参照してください。


  1. 「サンドボックスの管理」ページの使用可能なサンドボックスが表示される表から、公開するサンドボックスを選択します。

  2. ツールバーで、「サンドボックスの公開」をクリックします。確認を求めるメッセージが表示されます。

  3. 「はい」をクリックして確認します。サンドボックスが公開され、それに含まれるカスタマイズがメインラインとマージされます。

  4. 「公開済サンドボックス」タブをクリックすると、公開されたサンドボックスのリストを表示できます。

19.1.7 一括および順序でのサンドボックスの公開

一括および順序でサンドボックスを公開する手順は次のとおりです。

  1. 公開する順序にサンドボックスの名前をカンマで区切って記載したテキスト・ファイルを作成します。ファイルを保存します。

  2. 「サンドボックスの管理」ページで「一括公開」をクリックします。一括インポートおよび公開ダイアログが表示されます。


    注意:

    「一括公開」ボタンは、バンドル・パッチ11.1.2.3.170418を適用した後にのみ「サンドボックスの管理」ページに表示されます。

  3. 「サンドボックス・アーカイブ」セクションで「参照」をクリック、サンドボックスのZIPファイルを含むディレクトリに移動し、公開するサンドボックスのリストに含めるファイルを選択します。公開するすべてのサンドボックスについて選択を繰り返します。

  4. アップロードするサンドボックス・フィールドの横にある「参照」をクリックして、サンドボックス名の記載されたテキスト・ファイルおよび手順1で保存した順序を選択します。

  5. 「サンドボックス・シーケンスの生成」をクリックします。サンドボックス名およびテキスト・ファイルで指定した公開される順序が「サンドボックス・シーケンス」フィールドに表示されます。

  6. 「サンドボックス・シーケンス」フィールドで、公開されるサンドボックス名および公開される順序を確認します。

  7. サンドボックスのアーカイブまたは順序を変更するには、正しいサンドボックス名および順序になるようにテキスト・ファイルを編集し、アップロードするサンドボックス・ファイル・フィールドで選択して再度「サンドボックス・シーケンスの生成」をクリックします。変更しない場合は、「公開」をクリックします。

19.1.8 サンドボックスの削除

サンドボックスを削除するには、次の手順を実行します。

  1. 「サンドボックスの管理」ページの使用可能なサンドボックスが表示される表から、削除するサンドボックスを選択します。

  2. ツールバーで、「サンドボックスの削除」をクリックします。確認を求めるメッセージが表示されます。

  3. 「はい」をクリックして確認します。サンドボックスが削除され、「サンドボックスの管理」ページに表示されなくなります。


注意:

サンドボックスを削除しても、サンドボックスがアクティブなときに作成されたフォームは削除されません。フォームの削除は、このリリースのOracle Identity Managerではサポートされていません。

19.1.9 変更をデフォルト設定に戻す

すべてのカスタマイズを1つのサンドボックスで実行する必要があります。サンドボックスが公開されるまでは、変更はそのユーザーのみが表示可能で、このサンドボックスを非アクティブ化または削除することで簡単に元に戻すことができます。サンドボックスが公開された後は、実行された変更を元に戻すことはできません。

次の方法のいずれかで、サンドボックスから特定の変更を削除できます。

  • サンドボックスをエクスポートし、手動でそれを変更します。

  • 「サンドボックスの管理」ページに移動し、サンドボックスの詳細を開き、変更を選択し、「カスタマイズの削除」をクリックして削除します。

MDSサンドボックスを公開すると、それらのドキュメントがメインラインにコミットされます。これらのドキュメントを使用してアプリケーションがただちに起動され、サンドボックスを公開した効果がアプリケーション・ユーザーに表示されます。場合によっては、意図せずに不完全なまたは誤ったサンドボックスを公開してしまうことがあります。そのような場合、誤ったサンドボックスを作成する直前の状態にメインラインを戻すことができます。

たとえば、時刻T1にShowAdminFeatureというサンドボックスを作成し、その中で時刻T2に公開したJSFFフラグメントをカスタマイズしたとします。公開したサンドボックスが誤りであった場合、時刻T1の状態を戻すことが必要になります。また、インタフェースのカスタマイズおよびサンドボックスの公開後にOracle Identity System Administrationにログインできない場合は、次の手順を実行します。

  1. Oracle Enterprise Managerにログインします。

  2. 「アプリケーション・デプロイメント」で、oracle.iam.ui.console.self-service.earを選択します。

  3. そのページの右上の「アプリケーション・デプロイメント」をクリックし、リストから「MDS構成」を選択します。

  4. 画面下部で、「拡張構成」セクションの下の「ランタイムMBeanブラウザ」を選択します。画面の右側がリフレッシュされます。

  5. 「操作」タブをクリックします。

  6. 下方向にスクロールし、listMetadataLabels MBean操作を特定して、呼び出します。パラメータを必要としないMBean操作を選択します。リストア対象の事前に作成されたサンドボックスを選択し、クリップボードにコピーします。

    たとえば、コピーする値はCreation_IdM_test_09:25:00となります。

  7. 「戻る」をクリックして、「操作」タブに戻ります。

  8. promoteMetadataLabel MBean操作を検索します。

  9. promoteMetadataLabel MBean操作を呼び出し、手順6でコピーした値を入力します。

  10. Oracle Identity Managerを再起動します。

  11. Oracle Identity System Administrationにログインします。


注意:

最後に成功したサンドボックスのポスト・ラベルにリストアすることで、公開したそのサンドボックスにリストアすることもできます。

19.2 Oracle Identity Managerでのスキンのカスタマイズ

Oracle ADFでは、アプリケーションの外観をカスタマイズするためにスタイルとともにスキンを使用します。これらの概念は、暫定UIのポップアップを除き、Oracle Identity Managerのすべてのインタフェースに適用されます。


関連項目:

スタイルシートをカスタマイズする前に、次のURLでFusion Middleware Webユーザー・インタフェース開発者ガイドのスタイルおよびスキンを使用した外観のカスタマイズに関する説明を参照してください。

http://docs.oracle.com/cd/E15523_01/web.1111/b31973/af_skin.htm#ADFUI330

次のURLでは、スタイルシートをカスタマイズするために使用できるCSSスタイル・セレクタすべてがリストされています。

http://download.oracle.com/docs/cd/E15523_01/apirefs.1111/e15862/toc.htm


19.2.1 新しいスキンの構成

oim-altaスキンを拡張してカスタム・スキンを構成できます。oim-altaスキンはOracle Identity Managerに付属しています。カスタム・スキン・ファイルとスキン定義はoracle.iam.ui.custom-dev-starter-pack.war共有ライブラリの一部としてデプロイされます。

oim-altaスキンを拡張するカスタム・スキンを作成、デプロイおよび構成するには、次の手順を実行します。

  1. 次に示すように、trinidad-skins.xmlファイルとともにMETA-INFディレクトリを作成します。

    <?xml version="1.0" encoding='utf-8'?>
    <skins xmlns="http://myfaces.apache.org/trinidad/skin">
        <skin>
            <id>my-skin.desktop</id>
            <family>my-skin</family>
            <version>
                <name>v1</name>
                <default>true</default>
            </version>
            <extends>oim-alta.desktop</extends>
            <render-kit-id>org.apache.myfaces.trinidad.desktop</render-kit-id>
            <style-sheet-name>skins/my-skin/my-skin.css</style-sheet-name>
      </skin>
    </skins>
    
  2. 『Oracle Fusion Middleware Oracle Application Development Framework Webユーザー・インタフェース開発者ガイド』のスタイルとスキンを使用した外観のカスタマイズに関する項の説明に従って、META-INF/skins/my-skin/my-skin.cssを作成し、カスタム・スキン・セレクタを追加します。

  3. META-INFディレクトリを含むJARファイルを作成します。たとえば、次のコマンドを使用してJARファイルを作成できます。

    jar cf skins.jar META-INF
    

    META-INFディレクトリの親ディレクトリからコマンドを実行する必要があります。スキンがカスタム・イメージまたはその他のファイルを参照している場合は、それらもJARファイルに含めます。

  4. 新規に作成したJARファイルをoracle.iam.ui.custom-dev-starter-pack.war共有ディレクトリのWEB-INF/lib/ディレクトリに含めます。デプロイしたバージョンのoracle.iam.ui.custom-dev-starter-pack.war共有ライブラリはIDM_HOME/server/apps/ディレクトリにあります。たとえば、次のコマンドを使用して、既存のoracle.iam.ui.custom-dev-starter-pack.warを更新し、追加のJARファイルを含めることができます。

    mkdir -p WEB-INF/lib
    cp skins.jar WEB-INF/lib
    jar uf oracle.iam.ui.custom-dev-starter-pack.war WEB-INF/lib/skins.jar
    
  5. 更新されたoracle.iam.ui.custom-dev-starter-pack.warIDM_HOME/server/apps/ディレクトリにコピーします。

  6. Oracle Identity System Administrationにログインし、次のシステム・プロパティの値を変更します。

    OIM UIのスキン・ファミリ: 値をmy-skin、またはtrinidad-skins.xmlファイルでファミリに対して指定した値に変更します。

    OIM UIのスキン・バージョン: 値をv1、またはtrinidad-skins.xmlファイルでファミリに対して指定した値に変更します。

  7. Oracle Identity Managerサーバーを再起動します。

19.2.2 ブランドおよびロゴの変更

UIアーティファクト(ロゴ、ボタン、メニュー項目など)のカスタマイズまたは変更は、実行時に実行できます。


注意:

この項で説明する手順は、Oracle Identity Self Serviceをカスタマイズすることでブランドおよびロゴを変更するためのものです。Oracle Identity System Administration (レガシー拡張コンソールとも呼ぶ)から開くウィンドウ(たとえば、「システム構成」の下の「構成プロパティ」をクリックしたときに開くウィンドウ)のUIアーティファクトをカスタマイズする場合は、次を参照してください。

http://docs.oracle.com/cd/E21764_01/doc.1111/e14309/uicust.htm#BABFCFID


ロゴ・イメージを変更するには、次の手順を実行します。

  1. システム管理者としてOracle Identity Self Serviceにログインします。

  2. サンドボックスを作成し、アクティブにします。


    注意:

    Web Composerを使用してUIをカスタマイズするには、サンドボックスの作成およびアクティブ化が必須です。アクティブなサンドボックスがないと、Oracle Identity Managerでページをカスタマイズ・モードで開くことができません。

  3. 「カスタマイズ」をクリックします。カスタマイズ・パネルがページの上部に表示されます。

  4. 「構造」をクリックします。コンポーネント・ツリーが表示されます。コンポーネント・ツリーに、ページのすべてのADFコンポーネントが表示されます。

  5. ロゴをクリックします。確認を求める共有コンポーネント編集の確認ダイアログ・ボックスが表示されます。

  6. 「編集」をクリックします。図19-1に示すように、コンポーネント・ツリーでロゴ・オブジェクトが選択されます。

    図19-1 WebCenter Composerのオブジェクト・ライブラリ

    図19-1の説明が続きます
    「図19-1 WebCenter Composerのオブジェクト・ライブラリ」の説明

  7. 「コンポーネントのプロパティ」を開くアイコンアイコンをクリックします。「コンポーネント・プロパティ」ダイアログ・ボックスが表示されます。

  8. 「コンポーネントのプロパティ」で、Iconプロパティの横の下矢印アイコンをクリックし、「式ビルダー」を選択します。

  9. 「式ビルダー」で、#{attrs.logoImagePath}のデフォルト値をロゴ・パスまたはURLで置換します。


    ヒント:

    • デフォルトのEARファイルおよびWARファイル(セルフ・サービスEAR、システム管理EARおよびxlWebApp.warなど)のカスタマイズはサポートされていません。

    • デフォルトでは、Oracleロゴは119x25ピクセルです。したがって、同じ寸法のカスタム・ロゴを使用できます。これよりも大きいロゴを使用する場合は、CSSを変更する必要があります。

    • 「コンポーネント・プロパティ」ダイアログ・ボックスの「スタイル」タブを使用することで、いずれかのADFコンポーネントのフォントを指定する場合は、ターゲット・ブラウザおよびプラットフォームで、その特定のフォント名がサポートされていることを確認してください。Mozilla Firefoxに対してサポートされているリストを調べるには、「ツール」「オプション」「コンテンツ」「フォントと配色」を選択します。Microsoft Internet Explorerの場合は、「ツール」「インターネット オプション」「全般」「フォント」を選択します。


  10. 「適用」をクリックします。ロゴは、指定した新しいロゴに変更されました。

  11. Identity Self Serviceのグローバル・バナーを変更するには、Identity Self Serviceのテキストをクリックし、「コンポーネントのプロパティ」ダイアログ・ボックスを開きます。


    ヒント:

    Oracle Identity Managerログイン・ページのバナーを変更するには、ログイン・ページをカスタマイズ・モードで開く必要があります。ただし、ログイン・ページに「カスタマイズ」リンクはありません。したがって、カスタマイズ・モードでログイン・ページを開くには、次の手順を実行します。
    1. UIをカスタマイズする権限を持つ管理者として、Oracle Identity Self Serviceにログインします。

    2. アクティブなサンドボックスで、「カスタマイズ」リンクをクリックします。Oracle Identity Self Serviceは、カスタマイズ・モードになりました。

    3. 「認証されていないページのカスタマイズ」に記載された手順を実行します。


  12. 「コンポーネントのプロパティ」ダイアログ・ボックスの「表示オプション」タブで、「値」フィールドの横の下矢印アイコンをクリックし、「式ビルダー」を選択します。「式エディタ」ダイアログ・ボックスが表示されます。

  13. 値または式の入力が選択された状態で、テキストを入力してIdentity Self Serviceを置換し、「OK」をクリックします。

  14. 「適用」をクリックします。

  15. 「閉じる」をクリックして、WebCenter Composerを閉じます。

  16. サンドボックスを公開します。

19.3 実行時のページのカスタマイズ

Oracle Identity Managerのカスタマイズを大きく分類すると、UIのカスタマイズ、またはユーザー、ロール、組織、カタログおよびプロビジョニング・ターゲット・リソース・エンティティのオブジェクト定義の拡張に分けられます。

表19-2に、各エンティティのカスタマイズ可能なアーティファクトを示します。

表19-2 カスタマイズ可能なエンティティ・アーティファクト

エンティティ アーティファクト

ユーザー

「作成」ページ

「変更」ページ

ユーザー属性の詳細

「拡張検索」インタフェース

本人情報

自己登録

ロール

「作成」ページ

「変更」ページ

「拡張検索」インタフェースとその内容:

- 問合せ基準

- 結果表の列

組織

「作成」ページ

「変更」ページ

「拡張検索」インタフェースとその内容:

- 問合せ基準

- 結果表の列

カタログ

カタログ検索ページとその内容:

- 結果表の列

- カタログ項目詳細

ターゲット・リソースのプロビジョニング

ターゲット・リソース作成フォームのプロビジョニング

ターゲット・リソース変更フォームのプロビジョニング

ターゲット・リソース・バルク・フォームのプロビジョニング



関連項目:

フォーム・デザイナを使用したフォームの作成および管理の詳細は、『Oracle Fusion Middleware Oracle Identity Manager管理者ガイド』のフォームの管理およびカスタム属性の構成に関する説明を参照してください。

この項には次のトピックが含まれます:

Web Composerは、実行時にUIをカスタマイズ可能にします。この項では、次のUIのカスタマイズについて説明します。

19.3.1 UIカスタマイズでの式言語の使用

式言語(EL)は、JavaBeansコンポーネントに格納されているアプリケーション・データへのアクセスを許可します。ELおよびEL式構文の概要については、次のURLを参照してください。

http://docs.oracle.com/javaee/6/tutorial/doc/gjddd.html

19.3.1.1 ユーザー・コンテキストで使用可能なEL式

OIMContext Beanは、ADFセッションスコープBeanとして定義され、ログイン・ユーザーに関する情報にアクセスできるようにします。表19-3に、Oracle Identity Managerユーザー・コンテキストで使用可能なEL式を示します。

表19-3 ユーザー・コンテキストのEL式

EL 説明
#{oimcontext.currentUser['ATTRIBUTE_NAME']}

ログイン中のユーザーのATTRIBUTE_NAME属性の値にアクセスします。

#{oimcontext.currentUser['UDF_NAME']}

ログイン中のユーザーのUDF_NAME属性の値にアクセスします。UDF属性は、フォーム・デザイナを使用して定義できます。

#{oimcontext.currentUser.roles}

ログイン中のユーザーに割り当てられているロールを含むROLE_NAMEおよびRoleEntityマッピングにアクセスします。RoleEntityは、name、description、keyおよびdisplayNameプロパティがあるJava Beanです。

#{oimcontext.currentUser.roles['SYSTEM ADMINISTRATORS'] != null}

ログイン中のユーザーがシステム管理者の管理ロールを持つ場合にtrueと評価されるブールEL。同様に、その他のロールを持つかどうかを調べるようにELを変更することもできます。

#{oimcontext.currentUser.adminRoleMap['OrclOIMSystemAdministrator'] != null}

ログイン中のユーザーがOrclOIMSystemAdministrator管理ロールを持つ場合にtrueと評価されるブールEL。同様に、その他の管理ロールを持つかどうかを調べるようにELを変更することもできます。


次の例に示すように、EL式を使用して、oimcontext Beanからすべての使用可能なユーザー属性値を取得することができます。

  • 現在ログイン中のユーザーのユーザー・キーを取得するには、次の手順を実行します。

    #{oimcontext.currentUser.usr_key}
    

    または

    #{oimcontext.currentUser['usr_key']}
    
  • 現在ログイン中のユーザーのロール名のリストを取得するには、次の手順を実行します。

    #{oimcontext.currentUser.roles}
    
  • 現在ログイン中のユーザーの管理ロール名のリストを取得するには、次の手順を実行します。

    #{oimcontext.currentUser.adminRoles}
    

たとえば、ユーザーがOracle Identity Self Serviceにログインするときにユーザー・ログイン名を含むメッセージを表示する場合は、EL式を使用して現在ログイン中のユーザーのログイン名を取得し、それをページに表示できます。ユーザー・ログイン名を取得する式を次に示します。

#{oimcontext.currentUser['User Login']}

19.3.1.2 RequestFormContextで使用可能なEL式

RequestFormContextは、エンティティ・フォーム詳細タスク・フローのpageFlowScopeで使用可能なBeanです。エンティティ・フォームには、ユーザー・フォーム、アプリケーション・インスタンス・フォーム、ロール・フォームおよび権限フォームが含まれます。RequestFormContextは、様々なコンテキスト情報を提供します。このコンテキスト情報を使用すると、特定のビジネス要件に基づいてフォームをカスタマイズできます。

表19-4に、RequestFormContextに関わるEL式を示します。

表19-4 RequestFormContextに関わるEL式

EL 説明
#{pageFlowScope.requestFormContext}

RequestFormContextの現在のインスタンスにアクセスします。

#{pageFlowScope.requestFormContext.operation}

エンティティで実行されている操作タイプにアクセスします。可能な値は、CREATE、MODIFY、ENABLE、DISABLEおよびREMOVEです。

#{pageFlowScope.requestFormContext.operation == 'MODIFY'}

エンティティで実行中の現在の操作がMODIFYである場合にtrueと評価されるブールEL。

#{pageFlowScope.requestFormContext.actionType}

エンティティ・フォームが表示されている場合に、ユーザーが実行中のアクションにアクセスします。可能な値は、APPROVAL、FULFILL、REQUEST、VIEWおよびSUMMARYです。

#{pageFlowScope.requestFormContext.actionType == 'REQUEST'}

エンティティ・フォームが表示される場合にユーザーが実行中のアクションがREQUESTの場合、たとえば、ロールまたはアプリケーション・インスタンスをリクエストする場合に、trueと評価されるブールEL。

#{pageFlowScope.requestFormContext.bulk}

実行中の操作がバルク操作である場合、たとえば、一度に複数のアプリケーション・インスタンスをリクエストする場合に、trueと評価されるブールEL。

#{pageFlowScope.requestFormContext.beneficiaryIds}

受益者またはターゲット・ユーザーIDのリストにアクセスします。たとえば、ユーザーJohn Doe用のアプリケーション・インスタンスをリクエストしている場合、リストにはJohn DoeのユーザーIDが含まれます。

注意: Javaコードを使用して、リストにアクセスし、それに対して操作を実行することをお薦めします。

#{pageFlowScope.requestFormContext.cartItemIds}

カート・アイテムIDのリストにアクセスします。たとえば、ユーザーのアプリケーション・インスタンスをリクエストしている場合、リストにはリクエスト中のアプリケーション・インスタンスIDが含まれます。

注意: Javaコードを使用して、リストにアクセスし、それに対して操作を実行することをお薦めします。

#{pageFlowScope.requestFormContext.requestEntityType}

リクエストされているエンティティ・タイプを取得します。可能な値は、ROLE、ENTITLEMENT、APP_INSTANCEおよびUSERです。

#{pageFlowScope.requestFormContext.requestEntityType == 'APP_INSTANCE'}

リクエストされているエンティティ・タイプがAPP_INSTANCEの場合にtrueと評価されるブールEL。

#{pageFlowScope.requestFormContext.requestEntitySubType}

リクエスト中のエンティティのサブタイプにアクセスします。たとえば、APP_INSTANCEをリクエスト中の場合、requestEntitySubTypeがアプリケーション・インスタンス・キーです。

#{pageFlowScope.requestFormContext.instanceKey}

変更中のインスタンスのキーにアクセスします。


19.3.1.3 リソース文字列の国際化

Oracle Identity Managerでは、カスタム・リソース・バンドルを作成し、それらをUIで参照できます。ラベル、ヘッダーなどの事前定義済UI要素または特定のページに表示される値(たとえば、「リクエスト・サマリー」ページの「ステータス」フィールドに表示される値)のいくつかを変更する場合は、この項で説明する手順を実行します。

カスタム・リソース・バンドルを作成するには、次の手順を実行します。

  1. oracle.iam.ui.custom-dev-starter-pack.war共有ライブラリを開きます。デプロイされたバージョンのライブラリはIDM_HOME/server/apps/ディレクトリにあります。

  2. 新しいCustomResourceBundle.propertiesファイルを作成します。

  3. その新しいファイル内に、たとえば次のようにキーと値のペアを入力します。

    CUSTOMRB_BANNER_TEXT=My Identity and Access
    
  4. ローカライズ済ファイル(たとえば、CustomResourceBundle_it.propertiesおよびCustomResourceBundle_es.properties)はすべて同じディレクトリ内に作成します。

  5. カスタムWARを再パッケージし、サーバー内のカスタムWARデプロイメントを更新します。

リソース・バンドルを使用するには、次の手順を実行します。

  1. Oracle Identity Self Serviceで、サンドボックスを作成し、「カスタマイズ」をクリックします。

  2. 「コンポーネント・プロパティ」ダイアログ・ボックスで、特定のプロパティに対して式エディタを開き、たとえば次のように式を指定します。

    #{adfBundle['oracle.iam.ui.custom.CustomResourceBundle'].CUSTOMRB_BANNER_TEXT}
    
  3. 式をテストするには、「テスト」をクリックします。「OK」をクリックし、「適用」をクリックします。

  4. 「OK」をクリックして「コンポーネント・プロパティ」ダイアログ・ボックスを閉じます。

  5. サンドボックスをエクスポートし、サンドボックスを公開します。


    注意:

    サンドボックスのエクスポートはオプションですが、推奨される手順です。

19.3.2 UIコンポーネントの条件付き表示または非表示

条件付きでUIコンポーネントを表示または非表示にするには、コンポーネントのrenderedプロパティを使用して、ブール値に評価されるEL式を割り当てます。EL式がtrueと評価された場合に、コンポーネントが表示されます。次に例を示します。


注意:

コンポーネントのrenderedプロパティは、Oracle Web Composerの「コンポーネントの表示」オプションに対応します。

  • ログイン中のユーザーがシステム管理者の管理ロールを持つ場合にUIコンポーネントを表示するには、次の手順を実行します。

    #{oimcontext.currentUser.roles['SYSTEM ADMINISTRATORS'] != null}
    

    同様に、ログイン中のユーザーがその他のロールを持つかどうかを調べるように、EL式を変更することもできます。

  • サインイン済のユーザーがシステム管理者の管理ロールを持つ場合にUIコンポーネントを表示するには、次の手順を実行します。

    #{oimcontext.currentUser.adminRoles['OrclOIMSystemAdministrator'] != null}
    

    同様に、ログイン中のユーザーがその他の管理ロールを持つかどうかを調べるように、EL式を変更することもできます。

  • ログイン中のユーザーのusr_key属性が1の場合にUIコンポーネントを表示するには、次の手順を実行します。

    #{oimcontext.currentUser['usr_key'] == 1}
    
  • ログイン中のユーザーの姓がDoeの場合にUIコンポーネントを表示するには、次の手順を実行します。

    #{oimcontext.currentUser['Last Name'] == 'Doe'}
    
  • ログイン中のユーザーがXellerateユーザー組織に属している場合にUIコンポーネントを表示するには、次の手順を実行します。

    #{oimcontext.currentUser['Organization Name'] == 'Xellerate Users'}
    
  • ユーザーのUDF_NAMEというUDF属性がUDF_VALUEである場合にUIコンポーネントを表示するには、次の手順を実行します。

    #{oimcontext.currentUser['UDF_NAME'] == 'UDF_VALUE'}
    

注意:

「コンポーネントの条件付き表示」では、カスタム・マネージドBeanを実装することで、特定の条件に基づいてコンポーネントを表示する方法について説明しています。

19.3.3 リクエスト・プロファイルの条件付き表示

条件付きでカタログ・リクエスト・プロファイルを表示するには、次の手順を実行します。

  1. Oracle Identity Self Serviceにログインします。

  2. サンドボックスをアクティブにします。

  3. 「セルフ・サービス」タブで、「アクセスのリクエスト」ボックスをクリックし、「自己リクエスト」を選択します。アクセスのリクエスト・ウィザードの「アクセス権限の追加」ページが表示されます。

  4. 「カスタマイズ」をクリックします。「構造」をクリックします。コンポーネント・ツリーが表示されます。

  5. コンポーネント・ツリーを使用して、「リクエスト・プロファイル」のイテレータ・コンポーネントに移動します。イテレータ・コンポーネントには、単一のリクエスト・プロファイルを表すpanelGroupLayoutサブコンポーネントがあります。

  6. イテレータ・コンポーネント内の「panelGroupLayout:垂直」のサブコンポーネントである「panelGroupLayout:水平」を選択し、Web Composerの「編集」をクリックします。

  7. ブールEL式をrenderedプロパティに割り当てます。これは、Web Composerの「コンポーネントの表示」です。

    たとえば、Suppliers組織のみのユーザーにProfileと呼ばれるリソース・プロファイルを表示し、他のユーザーには他のプロファイルを表示する場合は、次の式を使用します。

    #{(row.profileName == 'Profile' && oimcontext.currentUser['Organization Name'] == 'Suppliers') || row.profileName != 'Profile'}
    

    EL式は、使用可能なすべてのプロファイルに対して評価されます。同様に、他のプロファイルを条件付きで表示するように、EL式を変更/拡張することもできます。

  8. サンドボックスを公開して、変更をグローバライズします。

19.3.4 ADFバリデータを使用した入力データの検証

事前定義されたADFバリデータを使用して入力コンポーネント・データを検証するには、JSFFページ・フラグメントを変更し、入力コンポーネントの子要素としてADFバリデータのいずれかを含める必要があります。表19-5に、ADFバリデータを示します。

表19-5 ADFバリデータ

バリデータ 説明

<af:validateByteLength>

エンコード時に文字列のバイト長を検証します。

<af:validateDateRestriction>

入力された日付が、指定された制限内かどうかを検証します。

<af:validateDateTimeRange>

入力された日付が、指定された範囲内かどうかを検証します。

<af:validateDoubleRange>

入力された日付が、指定された範囲内かどうかを検証します。

<af:validateLength>

入力された値が、指定された長さに収まっているかどうかを検証します。

<af:validateLongRange>

入力された値が、指定された範囲内かどうかを検証します。

<af:validateRegExp>

Javaの正規表現構文を使用して式を検証します。


たとえば、「ユーザー・ログイン」属性に許可された文字が英数字ASCII文字のみであることを検証するために、「ユーザー・ログイン」入力コンポーネントの子要素として次のRegExpバリデータを含めることができます。

<af:validateRegExp pattern="[a-zA-Z0-9]*"/>

ADFバリデータは、Web Composerを使用して直接追加することはできません。かわりに、別のコンポーネント(たとえば、別の入力テキスト)を、「ユーザー・ログイン」コンポーネントの子コンポーネントとして追加することができます。その後、この変更を含むサンドボックスをエクスポートできます。最後に、エクスポートされたサンドボックス内のフォームのJSFFページ・フラグメントを更新し、そのサンドボックスをインポートします。


注意:

「カスタム・フィールド検証の実装」では、カスタム・マネージドBeanを使用してカスタム・フィールド・バリデータを実装する方法について説明しています。

19.3.5 必要に応じた入力属性のマーキング

条件付きで入力フィールドを必須にするには、コンポーネントのrequiredプロパティを使用して、それにブールEL式を割り当てることができます。EL式がtrueと評価された場合に、コンポーネントは必須とマークされ、必要な検証がトリガーされます。

EL式の例については、「UIコンポーネントの条件付き表示または非表示」を参照してください。

フィールドを別のフィールドの値に基づいて条件付きで必須にする方法の詳細は、「条件付き必須フィールドの設定」を参照してください。

19.3.6 リンクまたはボタンの追加

Oracle Identity Self Serviceにリンクを追加するには、次の手順を実行します。

  1. Oracle Identity Self Serviceの任意のページから、WebCenter Composerを開きます。

  2. リンクを含める上部パネルを選択します。そのADFコンポーネントがコンポーネント・ツリーで選択されます。

  3. プラス(+)アイコンをクリックして「コンテンツの追加」ダイアログ・ボックスを開きます。コンポーネントのリストから、「Webコンポーネント」コンポーネントに移動して選択します。

    「コンテンツの追加」ダイアログ・ボックスの「Webコンポーネント」コンポーネントを図19-2に示します。

    図19-2 「コンテンツの追加」ダイアログ・ボックス

    図19-2の説明が続きます
    「図19-2 「コンテンツの追加」ダイアログ・ボックス」の説明

  4. 追加するリンク・コンポーネントを検索し、同じ行で「追加」をクリックします。リンクが、選択したパネルに追加されます。


    注意:

    UIコンポーネントの完全なリストについては、『Oracle Fusion Middleware Oracle Application Development Framework Webユーザー・インタフェース開発者ガイド』を参照してください。

  5. カスタマイズ・モードを終了するには、「閉じる」をクリックします。


    注意:

    詳細は、次の項を参照してください。

19.3.7 ADFコンポーネントの非表示および削除

ADFコンポーネントを非表示にすると、そのUIアーティファクトはユーザーから非表示になります。ADFコンポーネントを非表示にするには、次の手順を実行します。

  1. Oracle Identity Self Serviceで、コンポーネントを非表示にするページに移動します。

  2. 「カスタマイズ」をクリックして、WebCenter Composerを開きます。

  3. 「構造」をクリックしてコンポーネント・ツリーを開きます。

  4. 非表示にするページ上のコンポーネントをクリックします。コンポーネント・ツリーで対応するADFコンポーネントが選択されます。

  5. コンポーネント・ツリーで選択されたADFコンポーネントを右クリックし、「非表示」を選択します。

ADFコンポーネントを削除するには、次の手順を実行します。

  1. UIコンポーネントを削除するOracle Identity Self Serviceページから、Web Composerを開きます。

  2. 「構造」をクリックしてコンポーネント・ツリーを開きます。

  3. 削除するページ上のコンポーネントをクリックします。コンポーネント・ツリーで対応するADFコンポーネントが選択されます。

  4. コンポーネント・ツリーで選択されたADFコンポーネントを右クリックし、「削除」を選択します。

  5. 「コンポーネントの削除確認」ボックスで、「削除」をクリックします。

19.3.8 属性の表示および非表示

ページの属性を表示または非表示にするには、次の手順を実行します。

  1. 属性を表示または非表示にするページに移動します。たとえば、「電話」フィールドを表示または非表示にする場合、Oracle Identity Self Serviceで「本人情報」ページに移動します。

  2. 「カスタマイズ」をクリックして、Web Composerを開きます。

  3. 「構造」をクリックしてコンポーネント・ツリーを開きます。

  4. 非表示または表示する属性を含むリージョンまたはセクションをクリックします。

    「タスク・フローの編集を確認」メッセージ・ボックスが表示されます。

  5. 「編集」をクリックします。選択したリージョンのADFコンポーネントが、コンポーネント・ツリーで選択されます。

  6. 「コンポーネントのプロパティ」ダイアログ・ボックスを開きます。

  7. 「子コンポーネント」タブをクリックします。選択されたリージョンのすべてのUIコンポーネントが表示されます。図19-3は、「コンポーネント・プロパティ」ダイアログ・ボックスのサンプル「子コンポーネント」タブを示しています。

    図19-3 「子コンポーネント」タブ

    図19-3の説明が続きます
    「図19-3 「子コンポーネント」タブ」の説明

  8. 表示または非表示にする属性に対応するチェック・ボックスをそれぞれ選択するか、選択を解除します。


    注意:

    このリストに属性が見つからない場合は、フォームに属性を追加する必要があります。詳細は、『Oracle Fusion Middleware Oracle Identity Manager管理者ガイド』のカスタム属性の追加に関する項を参照してください。

  9. 「適用」をクリックします。選択した属性は、選択内容に基づいて非表示または表示されます。

  10. 「OK」をクリックし、ツールバーの「保存」をクリックします。

19.3.9 認証されていないページのカスタマイズ

「ユーザー登録」ページや「サイン・イン」ページなど、Identity Self Serviceの認証されていないページをカスタマイズするには、次の手順を実行します。

  1. システム管理者としてOracle Identity Self Serviceにログインします。

  2. サンドボックスを作成して、アクティブ化し、「カスタマイズ」をクリックします。

  3. 「セルフ・サービス」タブをクリックして、「セルフ・サービス」ホーム・ページを開きます。

  4. 「構造」をクリックしてコンポーネント・ツリーを開きます。

  5. 図19-4に示すように「panelGridLayout」コンポーネントを選択します。

    図19-4 panelGridLayoutコンポーネント

    図19-4の説明が続きます
    「図19-4 panelGridLayoutコンポーネント」の説明

  6. 最後のgridRowコンポーネントを選択します。コンポーネントはグレー表示されています。

  7. 最後のgridRowコンポーネントを右クリックし、「編集」を選択してコンポーネントのプロパティを編集します。

  8. 「コンポーネントの表示」オプションを選択し、「適用」をクリックします。

  9. gridRowの下のgridCellコンポーネントを右クリックし、「編集」を選択します。

  10. 「コンポーネントの表示」オプションを選択し、「適用」をクリックします。

  11. gridCellの下のgroupコンポーネントを右クリックし、「編集」を選択します。

  12. 「コンポーネントの表示」オプションを選択し、「適用」をクリックします。認証されていないページという名前の新しいホーム・ページ・タイルが表示されます。

  13. 「コンテンツの追加」をクリックして設計ビューに切り替えます。

  14. 認証されていないページ・タイルをクリックします。メニューが表示されます。各メニュー項目は、認証されていないページの1つへのリンクを表します。たとえば、「新規ユーザーの登録」をクリックすると、「ユーザー登録」ページにリダイレクトされます。

  15. 必須フィールドに値を入力した後で、「構造」をクリックします。panelFormLayoutコンポーネントを選択し、「追加」をクリックし、データ・コンポーネント→「ユーザー登録」→UserVO1を使用して新規フィールドを追加します。

  16. 「コンテンツの追加」タブをクリックし、「取消」をクリックしてホーム・ページに戻ります。

  17. 完了後に、認証されていないページ・タイルを非表示にすることを忘れないでください。

19.3.10 証明ページのカスタマイズ

この項では、Oracle Identity Self Serviceの証明ページのカスタマイズ方法について説明します。内容は次のとおりです。

19.3.10.1 証明詳細ペインのカスタマイズ

証明表で選択した行からの情報は、表の下部にある詳細ペインのカスタマイズに使用できます。この項の手順を使用して、ユーザー証明詳細ペインをカスタマイズできます。どの証明タイプでも、同様の手順が実行されます。

カスタマイズ・モードで、次の手順を実行します。

  1. ユーザーの詳細情報を含むpanelFormLayoutを編集します。

  2. 「コンテンツの追加」をクリックします。

  3. データ・コンポーネント→「証明」を選択します。

  4. 「UserCertificationUserVO1」を選択します。

  5. 追加する属性(たとえば、「タイトル」)を検索して、「追加」をクリックします。

  6. 「ラベル・コンポーネント付きのADF読取り専用入力テキスト」を選択します。

    入力コンポーネントがページに追加されますが、その値は表示されません。属性の名前を示すラベルが追加されます。

  7. ページ・ソース・パネルでinputTextコンポーネントを選択して、「編集」をクリックします。「コンポーネント・プロパティ」ダイアログ・ボックスが表示されます。

  8. 下方向にスクロールし、Value属性を検索して、「式ビルダー」を開きます。

  9. 式の値を編集して、次のように設定します。

    #{pageFlowScope.p1_row_idcTitle}
    
  10. 変更内容を保存し、Web Composerを閉じます。表内の行を選択します。

    表から行を選択すると、その情報がpageFlowScopeに格納されます。この情報を詳細ペインに表示するには、手順1から10に従い、正確なデータを抽出する必要があります。ELの形式は次のとおりです。

    #{pageFlowScope.p1_row_ATTRIBUTE_NAME}
    

    ページ1表の情報は、同じ形式を使用してページ2でも使用できます。データはpageFlowScopeに格納されているため、情報はスコープ内に残り、表示に使用できます。ページ2の上部には「ページ1詳細」セクションがあり、ページ1の項目への参照が表示されます。式のp1_row_ATTRIBUTE_NAMEを使用して、ここにページ1の詳細をさらに追加できます。

    この項で説明している手順は、現在の証明のページ1またはサマリー・ページに適用されます。ページ2または詳細ページをカスタマイズする場合は、次の形式を使用します。

    #{pageFlowScope.p2_row_ATTRIBUTE_NAME}
    

19.3.10.2 証明表へのカスタム属性の追加

UDFを作成し、それを証明表に追加するには、次の手順を実行します。

  1. サンドボックスを作成し、アクティブにします。

  2. 『Oracle Identity Managerの管理』のカスタム属性の作成に関する項の説明に従って新規ユーザーUDFを作成します。

  3. サンドボックスを公開します。

  4. UDFを追加するには、新規サンドボックスを作成し、アクティブ化します。

  5. 証明ダッシュボードに移動し、エンティティの証明詳細ページを開きます。

  6. 「カスタマイズ」をクリックします。「構造」をクリックしてコンポーネント・ツリーを開きます。

  7. 証明詳細ページの表をクリックします。タスク・フローの編集を確認メッセージ・ボックスで、「編集」をクリックします。

  8. コンポーネント・ツリーで選択した表で、プラス(+)アイコンをクリックして「コンテンツの追加」ダイアログ・ボックスを開きます。

  9. データ・コンポーネント→「証明」をクリックします。

  10. 表に対応するVO (たとえばApplicationCertificationEntitlementVO1)を選択します。

    次の表に、様々なタイプの証明に対して選択するVOをリストします。

    証明ページ VO
    ユーザー証明フェーズ1ページ1 UserCertificationUserVO
    ユーザー証明フェーズ2ページ2 UserCertificationPhase2EntitlementVO
    ロール証明の詳細ページ RoleCertificationMemberVO
    アプリケーション・インスタンス証明の詳細ページ ApplicationCertificationEntitlementVO
    権限証明の詳細ページ EntitlementCertificationEntitlementMemberVO

  11. 作成したUDFにスクロールし、「追加」をクリックします。次に、ADF表列を選択します。

  12. 「閉じる」をクリックします。UDF列が証明表に追加されます。


注意:

証明表にデフォルト属性を追加するには、「表示」メニューから、「列」「ATTRIBUTE_NAME」を選択します。デフォルト属性列が表に追加されます。同様に、「表示」「列」から選択することで、証明表から属性を非表示にできます。

19.3.10.3 証明表のカスタマイズ

証明表をカスタマイズする(たとえば、カスタマイズを介して表のサイズを増やす)には、次の手順を実行します。

  1. サンドボックスを作成し、アクティブにします。

  2. 証明詳細ページに移動し、「カスタマイズ」をクリックします。

  3. 「構造」をクリックしてコンポーネント・ツリーを開きます。

  4. 証明表の任意の場所をクリックして、コンポーネント・ツリーで「table:t1」タグが選択されるようにします。「table:t1」を右クリックし、「編集」を選択します。または、コンポーネント・ツリーのツールバーにあるプロパティの表示アイコンをクリックできます。

    「コンポーネント・プロパティ」ダイアログ・ボックスが表示されます。

  5. 「フェッチ・サイズ」プロパティにスクロールします。「フェッチ・サイズ」プロパティの下矢印をクリックし、「式ビルダー」を選択します。

  6. 「式ビルダー」で、「値または式の入力」オプションを選択し、75の値を入力します。「OK」をクリックします。

  7. 「適用」をクリックし、「OK」をクリックして「コンポーネントのプロパティ」ダイアログ・ボックスを閉じます。

  8. 「閉じる」をクリックします。表は75行に拡張されています。

19.4 EL式を使用したタスク・フロー・リージョンの保護

次の例に示すように、新しいタスク・フローそれぞれに対するエントリがjazn-data.xmlファイルにあります。

<permission>
<class>oracle.adf.controller.security.TaskFlowPermission</class>
<name>/WEB-INF/oracle/iam/ui/catalog/tfs/request-summary-details-tf.xml#request-summary-details-tf</name>
<actions>view</actions>
</permission>

これは、任意のタスク・フローがIdentity Self Service UIで表示されるために必要な基本的な権限レベルです。管理ロールに依存する高度な権限の場合は、機能セキュリティの強制にEL式を使用できます。

タスク・フローを保護するには、タスク・フローを親JSFFファイル内のリージョンとして使用する必要があります。リージョンに対してEL式を定義すると、ログイン中のユーザーに対するタスク・フローの表示または非表示を、ユーザーの権限に基づいて実施できるようになります。

リージョンを保護する場合は、次の例を検討してください。

my-access-accounts.jsffページで、details-information-tfタスク・フローは、次のEL式を使用してユーザーに対して選択的にレンダリングされます。

rendered="# {oimappinstanceAuth.view [bindings.appInstanceKey].allowed}"

説明:

  • oimappinstanceAuthは、adfc-config.xmlファイルでの、ApplicationInstanceAuthz.java認可Beanのマップ名です。

  • viewは、チェックする必要があるUIPermissionの名前です。oimappinstanceAuth参照用の実際のBeanファイルであるApplicationInstanceAuthz.javaでは、次の権限が定義されています。

    Private UIPermission view = new UIPermission (PolicyConstants.Resources.APPLICATION_INSTANCE.getId(), PolicyConstants.ApplicationInstanceActions.VIEW_SEARCH.getId());
    
  • appInstanceKeyは、ユーザーが表示しようとしているアプリケーション・インスタンスのIDで、これはパラメータとして渡されます。

19.5 Oracle Identity Managerヘルプのカスタマイズ

Oracle Identity Managerは、Oracle Identity Self ServiceとOracle Identity System Administrationで次のオンライン・ヘルプ・システムを開発して使用できます。

19.5.1 カスタム・ヘルプ・トピックの追加

Oracle Identity Managerヘルプ・トピックに加えて、カスタム・ヘルプ・トピックを作成して使用することもできます。

カスタム・ヘルプ・トピックを表示するには、次の手順を実行します。

  1. Oracle Identity Self Serviceにログインします。

  2. 上部のナビゲーション・バーで、ログインしているユーザー名の下矢印をクリックし、「ヘルプ」をクリックします。Oracle Help for the Webウィンドウが表示されます。

  3. ブック・リストから、Oracle Identity Managerのカスタム・ヘルプ・トピックを選択します。

  4. 目次を開いて、ヘルプ・トピックを表示します。

カスタム・ヘルプ・ブックは、別のJARファイルとして提供されます。これは、OIM_HOME/help/CUSTOMOHW.jarファイルです。独自のヘルプ・トピックおよびカスタム・ヘルプ・ブックJARを作成し、UIでこのカスタム・ヘルプ・トピックが表示されるようにCUSTOMOHW.jarファイルを置き換えます。

Oracle Help for the Web (OHW)を使用して、カスタム・ヘルプ・トピックを作成します。カスタムOHWヘルプ・トピックの作成方法の詳細は、Oracle Fusion Middleware Oracle Help開発者ガイドを参照してください。

新しいカスタム・ヘルプ・ブックを作成した後に、OIM_HOME/help/ディレクトリの次の構成ファイルを変更して、新しいヘルプ・ブックが参照されるようにします。

  • ohwconfig_identity.xml: Oracle Identity Self Serviceのカスタム・ヘルプ・トピックの構成ファイル

  • ohwconfig_sysadmin.xml: Oracle Identity System Administrationのカスタム・ヘルプ・トピックの構成ファイル


注意:

Oracle Identity Managerをアップグレードするとこの構成ファイルが上書きされるため、カスタム・ヘルプ・ブックを参照するには再び構成ファイルを変更する必要があります。

カスタム・ヘルプ・トピックを作成した後に、カスタム・ヘルプJARファイルを作成し、CUSTOMOHW.jarファイルを新しいJARファイルと置き換えます。これで、このUIページに関するカスタム・ヘルプ・トピックを追加できます。次の手順は、Oracle Identity Self Serviceでカスタム・ヘルプ・トピックをホーム・ページに追加する方法を示しています。

  1. Oracle Identity Self Serviceの「サンドボックスの管理」で、サンドボックスをアクティブ化します。

  2. 「セルフ・サービス」、「コンプライアンス」または「管理」のホームページの1つに移動し、「カスタマイズ」をクリックします。

  3. 「構造」をクリックしてコンポーネント・ツリーを開きます。

  4. ヘルプ・トピックを追加するホーム・ページのセクションをクリックします。「編集の確認タスク・フロー」ポップアップで、「編集」をクリックします。

  5. プラス(+)アイコンをクリックして「コンテンツの追加」ダイアログ・ボックスを開きます。

  6. 下にスクロールし、Webコンポーネントをクリックします。

  7. コマンド・イメージ・リンクで、「追加」をクリックします。選択したコンポーネントがホーム・ページに追加されます。

  8. 追加したコンポーネントを選択して、「編集」をクリックします。「コンポーネントのプロパティ」ダイアログ・ボックスを開きます。

  9. 「表示オプション」タブをクリックします。

  10. 「テキスト」フィールドに、ページに表示されるヘルプ・トピックのテキストを入力します。

  11. 「イメージ」フィールドに、ヘルプ・アイコン・イメージのパスおよびファイル名を入力します。

  12. アクション・リスナー・フィールドに、カスタム・ヘルプ・トピックのHelpTopicIDを含むURLを入力します。

  13. 「適用」をクリックした後、「OK」をクリックします。

  14. 保存し、カスタマイズ・モードを閉じます。ヘルプ・トピックがホーム・ページに追加されます。ヘルプ・トピックをクリックすると、カスタム・ヘルプ・ブックJARファイルのヘルプ・トピックが表示されます。

19.5.2 インライン・ヘルプの追加

Oracle Identity Managerは、デフォルトではインライン・ヘルプを提供しません。ただし、フィールドおよびボタンのツールチップ・テキストの追加など、様々なUIコンポーネントに対してインライン・ヘルプを追加できます。

インライン・ヘルプのコンテンツは、カスタムWARライブラリ(oracle.iam.ui.custom-dev-starter-pack.war)のファイルから取得されます(/oracle/iam/ui/custom/help/CustomHelpResourceBundle.propertiesファイルなど)。WARライブラリでCustomHelpResourceBundle.propertiesファイルを使用できない場合は、作成できます。

CustomHelpResourceBundle.propertiesファイルのエントリを使用して、インライン・ヘルプ・コンテンツを指定できます。エントリには、CUSTOMRB接頭辞が付き、次の接尾辞のいずれか1つが付きます。

  • _DEFINITION: これは、インライン・ヘルプをフィールドまたはUIコンポーネントに対して指定します。例:

    CUSTOMRB_EMAIL_DEFINITION=使用可能な場合は、公式な電子メールIDを入力してください。

    EMAILはフィールド名で、このエントリの値はマウス・ポインタをこのフィールド上に置いたときに表示されるインライン・ヘルプ・テキストです。

  • _INSTRUCTIONS: これはページ・レイアウトに対するインライン・ヘルプを指定します。例:

    CUSTOMRB_MY_INFO_INSTRUCTIONS=プロファイルの更新は承認後に反映されます。

    MY_INFOはページであり、このエントリの値はページ上部に表示されるインライン・ヘルプ・テキストです。

たとえば、次の手順はOracle Identity Self Serviceの「本人情報」ページの「電話」フィールドに対してインライン・ヘルプを追加する方法を示しています。

  1. Oracle Identity Self Serviceで、「本人情報」ページに移動し、「基本ユーザー情報」セクションを展開します。

  2. 「カスタマイズ」をクリックし、コンポーネント・ツリーを開きます。

  3. 「電話」フィールドをクリックします。

  4. 「編集」をクリックし、「コンポーネントのプロパティ」ダイアログ・ボックスを開きます。

  5. ヘルプ・トピックIDフィールドに、CUSTOMRB_TELEPHONEなど、「電話」フィールドと関連付けるインライン・ヘルプのヘルプ・トピックIDを入力します。

    _DEFINITION接尾辞の指定は、必須ではありません。

  6. 「適用」をクリックした後、「OK」をクリックします。

  7. 保存し、カスタマイズ・モードを閉じます。疑問符(?)を伴う情報イメージが、「電話」フィールドの前に表示されます。マウス・ポインタをアイコンの上に置くと、インライン・ヘルプ・テキストが表示されます。


関連項目:

ヒントおよびメッセージの定義、ADFコンポーネントのヘルプ情報の提供の詳細は、『Oracle Fusion Middleware Oracle Application Development Framework Webユーザー・インタフェース開発者ガイド』のヒント、メッセージおよびヘルプの表示に関する説明を参照してください。

19.6 ホーム・ページのカスタマイズ

ホーム・ページでは、Oracle Identity Self Serviceの様々な機能が一目でわかります。ホーム・ページは、コンテナまたはタイルを追加、削除および再配置することでカスタマイズできます。

この項では、ホーム・ページのカスタマイズ方法について説明します。次の項目が含まれます。

19.6.1 ホーム・ページへのタイルの追加

ホーム・ページにタイルを追加するには、次の手順を実行します。

  1. サンドボックスを作成し、アクティブにします。

  2. タイルの追加先のホーム・ページに移動します。

    ホーム・ページは、ページが1つ以上のグリッド行に分割され、各グリッド行が最大4つのグリッド・セルを持つことができる「パネル・グリッド・レイアウト」から構成されます。図19-5に、ホーム・ページがグリッド行とグリッド・セルにどのように分割されるかを示します。

    図19-5 ホーム・ページ・パネルのグリッド・レイアウト

    図19-5の説明が続きます
    「図19-5 ホーム・ページ・パネルのグリッド・レイアウト」の説明

  3. 「カスタマイズ」をクリックしてカスタマイズ・モードに切り替えます。

  4. 「構造」をクリックして、「構造」ビューに切り替えます。

  5. 新規タイルを追加するホーム・ページの位置を識別します。

    新規タイルを追加する前に、新規グリッド・セルとオプションで新規グリッド行を追加する必要があります。

  6. グリッド行を追加するには、次の手順を実行します。

    1. 図19-6に示すように「パネル・グリッド・レイアウト」コンポーネントを選択します。

      図19-6 パネル・グリッド・レイアウト・コンポーネント

      図19-6の説明が続きます
      「図19-6 パネル・グリッド・レイアウト・コンポーネント」の説明

    2. 「追加」アイコンをクリックします。

    3. リソース・カタログで、Webコンポーネントに移動し、グリッド行コンポーネントの横の「追加」リンクをクリックします。新規グリッド行がpanelGridLayoutコンポーネントの最初の子としてページに追加されます。

    4. グリッド行コンポーネントを追加した後、「高さ」、上部マージンおよび下部マージン・プロパティの値を変更して既存のグリッド行に揃えることができます。

  7. グリッド・セルを追加するには、次の手順を実行します。

    1. 図19-6に示すように「パネル・グリッド・レイアウト」コンポーネントを選択します。

    2. 右側のコンポーネント・ツリーを使用して、新規グリッド・セルを追加する子グリッド行の1つを選択します。

    3. 「追加」アイコンをクリックします。

    4. リソース・カタログで、Webコンポーネントに移動し、グリッド・セル・コンポーネントの横の「追加」リンクをクリックします。新規グリッド・セルが選択したグリッド行コンポーネントの最初の子としてページに追加されます。

    5. グリッド・セル・コンポーネントを追加した後、「位置合せ」、終了マージン、開始マージンおよび「幅」プロパティの値を変更して既存のグリッド・セルに揃えることができます。

  8. 新規グリッド・セルが追加された後で、それを選択し、「追加」アイコンをクリックします。リソース・カタログで、Webコンポーネントに移動し、ダッシュボード・ボックス・コンポーネントの横の「追加」リンクをクリックします。新規ダッシュボード・タイルがページに追加されます。


    注意:

    新規タイルがページに表示されていない場合、ページをリフレッシュします。

  9. タイル(DashboardBoxコンポーネントをコンポーネント・ツリーで選択する必要があります)を選択し、「編集」アイコンをクリックし、ホバー・イメージ、「イメージ」、「指示テキスト」および「タイトル・テキスト」プロパティの値を変更します。

タイルを追加した後で、次のいずれかの項で説明する手順を実行して、タイルをクリックして新規ページを起動します。サンドボックスはまだ公開しないでください。

19.6.2 タイル・アイコンからの新規ページの起動

タイル・アイコンをクリックしてページを起動するには、次の手順を実行します。

  1. サンドボックスをエクスポートし、解凍します。

  2. テキスト・エディタを使用して、作業しているホーム・ページのjsff.xmlファイルを開きます。Oracle Identity Managerには、「セルフ・サービス」、「管理」および「コンプライアンス」に対して次のデフォルト・ホーム・ページがあります。

    oracle/iam/ui/homepage/home/pages/mdssys/cust/site/site/self-service-home.jsff.xml
    oracle/iam/ui/homepage/home/pages/mdssys/cust/site/site/self-service-manage.jsff.xml
    oracle/iam/ui/homepage/home/pages/mdssys/cust/site/site/self-service-compliance.jsff.xml
    
  3. XMLファイルでoim:DashboardBox要素を探します。要素は次のようなものです。

    <oim:DashboardBox xmlns:oim="/componentLib1" instructionText="My user details" titleText="My Details" image="/images/Dashboard/myAccess.png" hoverImage="/images/Dashboard/myAccess_s2.png" iconClickable="true" id="e8533237995"/> 
    
  4. iconClickableの値がtrueに設定されていることを確認します。

  5. iconClickActionという名前の新規要素属性を追加し、属性の値を次のように設定します。

    #{backingBeanScope.dashboardNavigationBean.launchTaskFlow}
    
  6. 2つの新しいaf:clientAttribute要素を次のようにoim:DashboardBoxの子要素として追加します。

    <oim:DashboardBox xmlns:oim="/componentLib1" instructionText="My user details" titleText="My Details" image="/images/Dashboard/myAccess.png" hoverImage="/images/Dashboard/myAccess_s2.png" iconClickable="true" id="e8533237995" iconClickAction="#{backingBeanScope.dashboardNavigationBean.launchTaskFlow}">
    <af:clientAttribute xmlns:af="http://xmlns.oracle.com/adf/faces/rich" name="taskFlowId" value="/WEB-INF/oracle/iam/ui/manageusers/tfs/user-details-tf.xml#user-details-tf"/>
    <af:clientAttribute xmlns:af="http://xmlns.oracle.com/adf/faces/rich" name="title" value="My Details"/>
     
    <!-- the following clientAttributes are optional, these are to pass values to input parameters of user-details task flow -->
    <af:clientAttribute xmlns:af="http://xmlns.oracle.com/adf/faces/rich" name="userLogin" value="#{oimcontext.currentUser['User Login']}"/>
    <af:clientAttribute xmlns:af="http://xmlns.oracle.com/adf/faces/rich" name=" usr_key" value="#{oimcontext.currentUser['usr_key']}"/>
    </oim:DashboardBox>
    

    oim:DashboardBoxに、例に示すように開くタグと閉じるタグがあることを確認します。また、コンポーネントIDが一意であることも確認します。

    taskFlowIdおよびtitleクライアント属性の値を設定します。taskFlowIdでは起動されるタスク・フローを指定し、titleでは新規タブのタイトルを指定します。

    この手順の例で示すように、タスク・フローに入力パラメータを渡す場合はクライアント属性を追加できます。


    ヒント:

    必要なすべてのタスクフロー・パラメータがEL式を通じて使用可能でない場合は、「タスク・フローの起動」で説明するようにカスタムactionListenerを実装できます。新しいactionListenerメソッドは、iconClickActionプロパティに設定する必要のあるELを通じてアクセスできます。

    このリリースのOracle Identity Managerで廃止された次のUIの一部を起動する場合は、次のELを使用してiconClickActionプロパティを設定します。

    • アテステーション・ダッシュボード: #{backingBeanScope.dashboardNavigationBean.navigateAttestationDashboard}

    • 保留アテステーション: #{backingBeanScope.dashboardNavigationBean.navigatePendingAttestations}

    • レガシー・ホームページ: #{backingBeanScope.dashboardNavigationBean.navigateHome}


  7. jsff.xmlファイルを保存し、元のZIPファイルと同じ名前および構造でサンドボックスZIPファイルを再作成します。

  8. サンドボックスをOracle Identity Managerにインポートします。

  9. 新規ホーム・ページ・タイルの変更と機能を確認します。

  10. サンドボックスをエクスポートし、公開してすべてのユーザーに対して変更を使用可能にします。

19.6.3 「タイル」メニューからの新規ページの起動

タイル・メニュー項目をクリックしてページを起動するには、次の手順を実行します。

  1. サンドボックスのエクスポートと解凍を実行します。

  2. テキスト・エディタを使用して、作業しているホーム・ページのjsff.xmlファイルを開きます。Oracle Identity Managerには、「セルフ・サービス」、「管理」および「コンプライアンス」に対して次のデフォルト・ホーム・ページがあります。

    oracle/iam/ui/homepage/home/pages/mdssys/cust/site/site/self-service-home.jsff.xml
    oracle/iam/ui/homepage/home/pages/mdssys/cust/site/site/self-service-manage.jsff.xml
    oracle/iam/ui/homepage/home/pages/mdssys/cust/site/site/self-service-compliance.jsff.xml
    
  3. XMLファイルでoim:DashboardBox要素を探します。要素は次のようなものです。

    <oim:DashboardBox xmlns:oim="/componentLib1" instructionText="Attestations" titleText="Attestations" image="/images/Dashboard/myAccess.png" hoverImage="/images/Dashboard/myAccess_s2.png" iconClickable="true" id="e85332379959"/>
    
  4. iconClickablefalseに設定されていることを確認します。

  5. 次のように、新規popupMenu f:facet要素をoim:DashboardBoxの子要素として追加します。

    <oim:DashboardBox xmlns:oim="/componentLib1" instructionText="Attestations" titleText="Attestations" image="/images/Dashboard/myAccess.png" hoverImage="/images/Dashboard/myAccess_s2.png" iconClickable="false" id="e85332379959">
    <f:facet xmlns:f="http://java.sun.com/jsf/core" name="popupMenu">
    <af:menu xmlns:af="http://xmlns.oracle.com/adf/faces/rich" id="m8278911">
    <af:commandMenuItem xmlns:af="http://xmlns.oracle.com/adf/faces/rich" text="Attestation Dashboard"
    actionListener="#{backingBeanScope.dashboardNavigationBean.navigateAttestationDashboard}"
    id="cmi2478915"/>
    <af:commandMenuItem xmlns:af="http://xmlns.oracle.com/adf/faces/rich" text="Pending Attestations"
    actionListener="#{backingBeanScope.dashboardNavigationBean.navigatePendingAttestations}"
    id="cmi2478916"/>
    </af:menu>
    </f:facet>
    </oim:DashboardBox>
    

    メニューにはコマンド項目をいくつでも設定できます。コマンド・メニュー項目では次のいずれかを使用できます。

    • 「タイル・アイコンからの新規ページの起動」で説明する、clientAttributesと組み合せた汎用actionListener (#{backingBeanScope.dashboardNavigationBean.launchTaskFlow})。

    • 「タスク・フローの起動」で説明するカスタムactionListener。

    • 次のような、このリリースのOracle Identity Mangerで廃止されたインタフェースを起動する次のactionListenerの1つ。

      • アテステーション・ダッシュボード: #{backingBeanScope.dashboardNavigationBean.navigateAttestationDashboard}

      • 保留アテステーション: #{backingBeanScope.dashboardNavigationBean.navigatePendingAttestations}

      • レガシー・ホームページ: #{backingBeanScope.dashboardNavigationBean.navigateHome}

    oim:DashboardBoxに、この手順の例に示すように開くタグと閉じるタグがあることを確認します。また、コンポーネントIDが一意であることも確認します。

  6. jsff.xmlを保存し、元のZIPファイルと同じ名前および構造でサンドボックスZIPファイルを再作成します。

  7. サンドボックスをOracle Identity Managerにインポートします。

  8. 新規ホーム・ページ・タイルの変更と機能を確認します。

  9. サンドボックスを公開してすべてのユーザーに対して変更を使用可能にします。

19.6.4 タイルの条件付き表示

デフォルトでは、すべてのホーム・ページ・タイルが表示されます。ただし、特定のユーザーに対して一部のタイルを非表示にすることが必要な場合があります。たとえば、エンド・ユーザーに対して「プロビジョニング・タスク」タイルを非表示にすることが必要な場合があります。そのためには、「プロビジョニング・タスク」タイルを含むグリッド・セル・コンポーネントを選択し、レンダリングされたプロパティに対して次のELを使用します(Web Composerに「コンポーネントの表示」として表示されます)。

#{oimcontext.currentUser.adminRoles['OrclOIMSystemAdministrator'] != null}

詳細は、「UIコンポーネントの条件付き表示または非表示」を参照してください。

19.7 マネージドBeanおよびタスク・フローの開発

Oracle Identity Managerに高度なカスタマイズを実装するには、JDeveloper IDEを使用して新しいタスク・フローおよびマネージドBeanを開発し、カスタムWARファイル(oracle.iam.ui.custom-dev-starter-pack.war)にパッケージ化します。

次のタイプのBeanがあります。

  • リクエストBean: すべてのリクエストに対してBeanの新規インスタンスが作成されます。JSFFコンポーネント・バインディングおよびリスナーは、通常はリクエストBeanにバインドされます。

  • 状態Bean: アプリケーション、ユーザー・セッションまたは特定のフローの状態を保持するBean。コンポーネントの値(af: inputTextなど)は、状態Beanにバインドできます。ADFがリクエスト間でこれらのBeanをシリアライズ/シリアライズ解除するため、状態Beanはシリアライズ可能(java.io.Serializableを実装)である必要があります。

この項では、マネージドBeanの開発方法について、次の各項で説明します。

19.7.1 ViewControllerプロジェクトの設定

マネージドBeanは、ViewControllerプロジェクトで作成します。すべてのカスタム・タスク・フロー、ページおよびマネージドBeanが、ViewControllerプロジェクトに存在する必要があります。

ViewControllerプロジェクトを設定するには、次の手順を実行します。

  1. 新しいJDeveloperアプリケーションを作成します。これを行うには、次の手順を実行します。

    1. JDeveloperを起動します。

    2. 「ファイル」「新規」を選択します。

    3. 「汎用アプリケーション」を選択し、「OK」をクリックします。

    4. アプリケーション名およびディレクトリを指定し、「終了」をクリックします。アプリケーションは、サンプル・プロジェクトを使用して作成されます。

    5. サンプル・プロジェクトを削除するには、プロジェクトを右クリックして「削除」を選択します。

  2. ViewControllerプロジェクトを設定します。これを行うには、次の手順を実行します。

    1. 「ファイル」「新規」を選択します。

    2. 「ADF ViewControllerプロジェクト」を見つけて選択し、「OK」をクリックします。

    3. プロジェクト名(CustomUIなど)およびプロジェクト・ディレクトリを指定し、「次へ」をクリックします。

    4. デフォルトのパッケージ名をoracle.iam.ui.customとして入力し、「終了」をクリックします。新しいプロジェクトが作成されます。

  3. Oracle Identity Managerライブラリをプロジェクト・クラスパスに追加します。これを行うには、次の手順を実行します。

    1. 新しいプロジェクトを右クリックして、「プロジェクト・プロパティ」を選択します。

    2. 左側のナビゲーション・バーで、「ライブラリとクラスパス」を選択します。

    3. 「ライブラリの追加」をクリックします。ADFモデル・ランタイムを追加します。

    4. 「ライブラリの追加」「ディレクトリ」の順にクリックし、パスをIDM_HOME/server/jdev.libとして指定し、「OK」をクリックします。

    5. ライブラリのリストから、次を選択します。

      • OIMビュー共有ライブラリ

      • OIMモデル共有ライブラリ

      • OIMクライアント・ライブラリ

    6. 「OK」をクリックします。

  4. 新しく作成されたViewControllerプロジェクトのデプロイメント・プロファイルを定義します。これを行うには、次の手順を実行します。

    1. プロジェクトを右クリックし、「プロジェクト・プロパティ」を選択します。

    2. 左側のナビゲーション・バーで、「デプロイメント」を選択します。

    3. 既存のデプロイメント・プロファイルを削除します。

    4. 「新規」をクリックし、アーカイブ・タイプとして「ADFライブラリのJARファイル」を選択します。


      注意:

      ADFライブラリのJARファイルとJARファイル・アーカイブ・タイプは異なります。必ず、「ADFライブラリのJARファイル」アーカイブ・タイプを選択してください。

    5. adflibCustomUIなど、アーカイブ名を指定して確認し、「OK」をクリックします。

ViewControllerプロジェクトの設定は完了です。これで、カスタム・タスク・フロー、ページおよびマネージドBeanの追加を開始できます。


注意:

このドキュメントの後続のセクションの例の一部では、FacesUtilsクラスが使用されます。このクラスの詳細は、付録A「FacesUtilsクラス」を参照してください。

19.7.2 モデル・プロジェクトの設定

Oracle Identity Manager APIと直接対話するすべてのカスタムEO/VOおよびクラスが、モデル・プロジェクト内に存在する必要があります。モデル・プロジェクトを設定するには、次の手順を実行します。

  1. 「ファイル」「新規」をクリックします。

  2. 「ADFモデル・プロジェクト」を見つけて選択し、「OK」をクリックします。

  3. 「プロジェクト名」(CustomModelなど)および「プロジェクト・ディレクトリ」を指定し、「次へ」をクリックします。

  4. デフォルトのパッケージ名をoracle.iam.ui.customとして入力し、「終了」をクリックします。新しいプロジェクトが作成されます。

  5. Oracle Identity Managerライブラリをプロジェクト・クラスパスに追加します。

    1. プロジェクトを右クリックし、「プロジェクト・プロパティ」を選択します。

    2. 左側のナビゲーション・バーで、「ライブラリとクラスパス」を選択します。

    3. 「ライブラリの追加」をクリックします。

    4. 「ディレクトリ」をクリックし、パスをIDM_HOME/server/jdev.libとして指定し、「OK」をクリックします。

    5. ライブラリのリストから、次を選択します。

      • OIMモデル共有ライブラリ

      • OIMクライアント・ライブラリ

    6. 「OK」をクリックします。

  6. 新しく作成されたモデル・プロジェクトのデプロイメント・プロファイルを定義します。これを行うには、次の手順を実行します。

    1. プロジェクトを右クリックし、「プロジェクト・プロパティ」を選択します。

    2. 左側のナビゲーション・バーで、「デプロイメント」を選択します。

    3. 既存のデプロイメント・プロファイルを削除します。

    4. 「新規」をクリックし、アーカイブ・タイプとして「ADFライブラリのJARファイル」を選択します。


      注意:

      ADFライブラリのJARファイルとJARファイル・アーカイブ・タイプは異なります。必ず、「ADFライブラリのJARファイル」アーカイブ・タイプを選択してください。

    5. adflibCustomModelなど、アーカイブ名を指定して確認し、「OK」をクリックします。

モデル・プロジェクトの設定は完了です。これで、Oracle Identity Manager APIと対話するためのカスタムEO、VOおよびクラスの追加を開始できます。


注意:

このドキュメントの後続のセクションの例の一部では、FacesUtilsクラスが使用されます。このクラスの詳細は、付録A「FacesUtilsクラス」を参照してください。

19.7.3 カスタム・マネージドBeanの追加

カスタム・マネージドBeanを追加するには、次の手順を実行します。

  1. ViewControllerプロジェクトを右クリックし、「新規」を選択します。

  2. Javaクラス・カテゴリを選択します。

  3. クラス名(CustomReqBean、CustomStateBeanなど)、およびパッケージ名を指定します。

  4. クラスの作成後に、タスク・フローに登録するには、次の手順を実行します。

    1. 独自のバインド・タスク・フローを開発する場合は、タスク・フロー定義ファイルに移動し、それを開きます。それ以外の場合は、ViewControllerプロジェクトのadfc-config.xmlファイルを見つけ、それを開きます。

    2. 「概要」タブをクリックし、次に「マネージドBean」を選択します。

    3. 新しいマネージドBeanエントリを追加します。これを行うには、次の手順を実行します。

      i) マネージドBean名を指定します(customReqBean、customStateBeanなど)。この名前は、後でこのBeanのインスタンスを参照するために使用します。

      ii) マネージドBeanのクラス名を指定します。

      iii) スコープを指定します。リクエストBeanの場合は、backingBeanスコープを使用します。状態Beanの場合は、pageFlowスコープを使用します。


      注意:

      • pageFlowスコープBeanは、それが定義されるタスク・フローでのみ参照可能です。

      • JSFF/タスク・フロー定義またはその他の場所からマネージドBeanを参照する場合は、EL式を使用できます。たとえば、BeanをcustomReqBeanという名前で登録し、backingBeanスコープに入れた場合、次のEL式を使用してこのBeanを参照することができます。

        #{backingBeanScope.customReqBean}
        

        BeanをpageFlowスコープに入れた場合は、次のEL式を使用してこのBeanを参照できます。

        #{pageFlowScope.customStateBean}
        

19.7.4 Oracle Identity Managerへのカスタム・コードのデプロイ

カスタム・モデルまたはViewControllerプロジェクトで生成されたADFライブラリJARファイルをデプロイするには、次の手順を実行します。

  1. oracle.iam.ui.custom-dev-starter-pack.warを一時的な場所にコピーします。

  2. oracle.iam.ui.custom-dev-starter-pack.warを開きます。

  3. カスタムjarファイルをWEB-INF/libディレクトリに追加します。libディレクトリが存在しない場合は、作成します。

  4. oracle.iam.ui.custom-dev-starter-pack.warファイルを保存します。

  5. oracle.iam.ui.custom-dev-starter-pack.warファイルのコピーを$OIM_ORACLE_HOME/server/apps/ディレクトリ内の元の場所に戻します。

  6. Oracle Identity Manager管理対象サーバーを停止します。

  7. WebLogic管理コンソールで、oracle.iam.ui.customライブラリ・デプロイメントを更新し、変更をアクティブにします。

  8. Oracle Identity Manager管理対象サーバーを起動します。

19.7.5 マネージドBeanの使用

この項では、Oracle Identity ManagerインタフェースをカスタマイズするためのマネージドBeanの開発について、次の各ユースケースを示します。


注意:

この項の例では、FacesUtilsクラスを使用します。このクラスの詳細は、「FacesUtilsクラス」を参照してください。

19.7.5.1 コンポーネントの条件付き表示

他のフィールドの値に基づいて、条件付きで特定のフィールドを表示または非表示にできます。たとえば、「ユーザー・タイプ」が「フルタイムの従業員」である場合にのみ、「ユーザーの作成」ページで「連絡先情報」パネルを表示するには、次の手順を実行します。

  1. カスタム・リクエストBeanでは、「ユーザー・タイプ」フィールドと、「連絡先情報」パネルの任意の親コンポーネント(フォーム・ルート・パネルなど)のコンポーネント・バインディングのプロパティを定義します。それには、次のコードを使用します。

    private UIComponent rootPanelPGL;
        private UIComponent userTypeSOC;
            
        public void setRootPanelPGL(UIComponent rootPanelPGL) {
            this.rootPanelPGL = rootPanelPGL;
        }
     
        public UIComponent getRootPanelPGL() {
            return rootPanelPGL;
        }
     
        public void setUserTypeSOC(UIComponent userTypeSOC) {
            this.userTypeSOC = userTypeSOC;
        }
     
        public UIComponent getUserTypeSOC() {
            return userTypeSOC;
        }
    
  2. ユーザーが「ユーザー・タイプ」リストで新しい値を選択すると起動される既存のvalueChangeListenerを作成するか、拡張します。それには、次のコードを使用します。


    注意:

    リスナーは、このフォームをリフレッシュします。

    public void valueChangeListener(ValueChangeEvent valueChangeEvent) {        
            if (valueChangeEvent.getSource().equals(userTypeSOC)) {   
                // refresh form
                FacesUtils.partialRender(rootPanelPGL);
            }
        }
    
  3. ブール値を戻すメソッドを作成します。ページのレンダリング時に「連絡先情報」パネルが表示されるかどうかが、このメソッドによって決定されます。この例では、「ユーザー・タイプ」が「フルタイムの従業員」の場合に、「連絡先情報」パネルが表示されます。

    メソッドは次のとおりです。

    private static final String USER_TYPE_ATTRIBUTE = "usr_emp_type__c";
        
        public boolean isFullTimeEmployeeUserTypeSelected() {
            // return true if value of "usr_emp_type__c" binding attribute equals to "Full-Time"
            // "usr_emp_type__c" binding attribute is used to display value of User Type in the User Type drop-down        
            return "Full-Time".equals(FacesUtils.getListBindingValue(USER_TYPE_ATTRIBUTE, String.class));    
        }
    
  4. 「Oracle Identity Managerへのカスタム・コードのデプロイ」で説明するように、マネージドBeanをパッケージ化し、デプロイします。

  5. コードをJSFFとバインドするには、次の手順を実行します。

    1. 定義したプロパティを指すように、「ユーザー・タイプ」リストと、ルート・パネル・コンポーネントのコンポーネント・バインディングを設定します。

    2. 「ユーザー・タイプ」リストに対して、valueChangeListenerを定義します。


      注意:

      「ユーザー・タイプ」リストに対してautosubmitプロパティがtrueに設定されていることを確認します。

    3. 手順3で定義したisFullTimeEmployeeUserTypeSelected()メソッドを指すように、「連絡先情報」パネルのrenderedプロパティ(Web Composerでの「コンポーネントの表示」)に、EL式を設定します。


    注意:

    renderedプロパティにEL式を設定している間に、次のエラーが表示された場合は無視します。
    "javax.faces.validator.ValidatorException:
    java.lang.IllegalArgumentException: Control Binding 'usr_emp_type__c' not found"
    

19.7.5.2 フィールドの条件付き事前移入

他のフィールドの値に基づいて、特定のフィールドを事前移入します。たとえば、「名」および「姓」フィールドの値に基づいて、「ユーザーの作成」ページの「ユーザー・ログイン」および「電子メール」フィールドに値を事前移入するには、次の手順を実行します。

  1. カスタム・リクエストBeanで、「名」および「姓」フィールドと、「ユーザー・ログイン」および「電子メール」フィールドの任意の親コンポーネント(フォーム・ルート・パネルなど)のコンポーネント・バインディングのプロパティを定義します。それには、次のコードを使用します。

    private UIComponent firstNameIT;
        private UIComponent lastNameIT;
        private UIComponent rootPanelPGL;
        
        public void setFirstNameIT(UIComponent firstNameIT) {
            this.firstNameIT = firstNameIT;
        }
     
        public UIComponent getFirstNameIT() {
            return firstNameIT;
        }
     
        public void setLastNameIT(UIComponent lastNameIT) {
            this.lastNameIT = lastNameIT;
        }
     
        public UIComponent getLastNameIT() {
            return lastNameIT;
        }
     
        public void setRootPanelPGL(UIComponent rootPanelPGL) {
            this.rootPanelPGL = rootPanelPGL;
        }
     
        public UIComponent getRootPanelPGL() {
            return rootPanelPGL;
        }
    
  2. ユーザーが「名」または「姓」フィールドを更新すると起動される既存のvalueChangeListenerを作成するか、拡張します。それには、次のコードを使用します。


    注意:

    リスナーはそれに応じて「ユーザー・ログイン」および「電子メール」を更新し、フォームをリフレッシュします。

    private static final String USER_LOGIN_ATTRIBUTE = "usr_login__c";
        private static final String EMAIL_ATTRIBUTE = "usr_email__c";
        private static final String LAST_NAME_ATTRIBUTE = "usr_last_name__c";
        private static final String FIRST_NAME_ATTRIBUTE = "usr_first_name__c";
        
        public void valueChangeListener(ValueChangeEvent valueChangeEvent) {
            if (valueChangeEvent.getSource().equals(firstNameIT)) {
                // get new value of first name from the event
                String firstName = (String)valueChangeEvent.getNewValue();            
                // get existing value of last name through binding
                String lastName = FacesUtils.getAttributeBindingValue(LAST_NAME_ATTRIBUTE, String.class);
                setUserLoginAndEmail(firstName, lastName);
            } else if (valueChangeEvent.getSource().equals(lastNameIT)) {
                // get existing value of first name through binding
                String firstName = FacesUtils.getAttributeBindingValue(FIRST_NAME_ATTRIBUTE, String.class);            
                // get new value of last name from the event
                String lastName = (String)valueChangeEvent.getNewValue();
                setUserLoginAndEmail(firstName, lastName);
            }
            // refresh form
            FacesUtils.partialRender(rootPanelPGL);
        }
     
        private void setUserLoginAndEmail(String firstName, String lastName) {
            StringBuilder sb = new StringBuilder();        
            if (firstName != null) {
                sb.append(firstName);
            }
            if (firstName != null && !firstName.isEmpty() && lastName != null && !lastName.isEmpty()) {
                sb.append(".");
            }
            if (lastName != null) {
                sb.append(lastName);
            }
            String userLogin = sb.toString();
            // set new value for User Login and E-mail through binding
            FacesUtils.setAttributeBindingValue(USER_LOGIN_ATTRIBUTE, userLogin);
            FacesUtils.setAttributeBindingValue(EMAIL_ATTRIBUTE, userLogin + "@acme.com");    
    }
    
  3. 「Oracle Identity Managerへのカスタム・コードのデプロイ」で説明するように、マネージドBeanをパッケージ化し、デプロイします。

  4. JSFFにコードを追加します。これを行うには、次の手順を実行します。

    1. 定義したプロパティを指すように、「名」、「姓」およびルート・パネルのコンポーネント・バインディングを設定します。

    2. 「名」および「姓」入力テキストのvalueChangeListenerを定義して、両方の入力テキストでautosubmitプロパティがtrueに設定されるようにします。

19.7.5.3 条件付き必須フィールドの設定

別のフィールドの値に基づいて、フィールドを条件付きで必須とすることができます。たとえば、「ユーザー・タイプ」が「インターン」の場合にのみ、「ユーザーの作成」ページの「マネージャ」フィールドを必須にするには、次の手順を実行します。


注意:

Web Composerの必須プロパティを設定することで、フィールド検証を実行することはできません。この項で説明するように、マネージドBeanを開発して、フィールド検証を実行する必要があります。

  1. カスタム・リクエストBeanでは、「ユーザー・タイプ」フィールドと、「マネージャ」フィールドの任意の親コンポーネント(フォーム・ルート・パネルなど)のコンポーネント・バインディングのプロパティを定義します。それには、次のコードを使用します。

    private UIComponent rootPanelPGL;
        private UIComponent userTypeSOC;
            
        public void setRootPanelPGL(UIComponent rootPanelPGL) {
            this.rootPanelPGL = rootPanelPGL;
        }
     
        public UIComponent getRootPanelPGL() {
            return rootPanelPGL;
        }
     
        public void setUserTypeSOC(UIComponent userTypeSOC) {
            this.userTypeSOC = userTypeSOC;
        }
     
        public UIComponent getUserTypeSOC() {
            return userTypeSOC;
        }
    
  2. ユーザーが「ユーザー・タイプ」リストで新しい値を選択すると起動される既存のvalueChangeListenerを作成するか、拡張します。それには、次のコードを使用します。


    注意:

    リスナーは、このフォームをリフレッシュします。

    public void valueChangeListener(ValueChangeEvent valueChangeEvent) {        
            if (valueChangeEvent.getSource().equals(userTypeSOC)) {   
                // refresh form
                FacesUtils.partialRender(rootPanelPGL);
            }
        }
    
  3. ブール値を戻すメソッドを作成します。このメソッドは、フィールドが必須かどうかを決定します。この例では、「ユーザー・タイプ」が「インターン」の場合に、「マネージャ」フィールドが必須とマークされます。

    メソッドは次のとおりです。

        public boolean isInternUserTypeSelected() {
            // return true if value of "usr_emp_type__c" binding attribute equals to "Intern"
            // "usr_emp_type__c" binding attribute is used to display value of User Type in the User Type drop-down
    return "Intern".equals(FacesUtils.getValueFromELExpression("#{bindings.usr_emp_type__c.attributeValue}", String.class));
        }
    
  4. 「Oracle Identity Managerへのカスタム・コードのデプロイ」で説明するように、マネージドBeanをパッケージ化し、デプロイします。

  5. JSFFにコードを追加します。これを行うには、次の手順を実行します。

    1. 定義したプロパティを指すように、「ユーザー・タイプ」リストと、ルート・パネル・コンポーネントのコンポーネント・バインディングを設定します。

    2. 「ユーザー・タイプ」リストに対して、valueChangeListenerを定義します。「ユーザー・タイプ」リストに対してautosubmitプロパティがtrueに設定されていることを確認します。

    3. 手順3で定義したisInternUserTypeSelected()メソッドを指すように、「マネージャ」フィールドの必要なプロパティにEL式を設定します。

    4. 手順3で定義したisInternUserTypeSelected()メソッドを指すように、panelLabelAndMessageの「マネージャ」フィールドの「表示」の必要なプロパティにEL式を設定します。

19.7.5.4 カスタム・フィールド検証の実装

マネージドBeanを使用してカスタム検証を導入できます。たとえば、「ユーザーの作成」ページの「アカウントの有効日」パネルの「開始日」および「終了日」フィールドに対して、次の検証を実装できます。

  • 「開始日」は、「終了日」の後にはできません。

  • 「契約者」の場合は、「開始日」と「終了日」の間隔が180日を超えることはできません。

マネージドBeanを使用してカスタム検証を実装するには、次の手順を実行します。

  1. カスタム・リクエストBeanでは、次に示すように、「開始日」および「終了日」フィールドのコンポーネント・バインディングのプロパティを定義します。

    private UIComponent startDateID;
    private UIComponent endDateID;
     
    public void setStartDateID(UIComponent startDateID) {
        this.startDateID = startDateID;
    }
     
    public UIComponent getStartDateID() {
        return startDateID;
    }
     
    public void setEndDateID(UIComponent endDateID) {
        this.endDateID = endDateID;
    }
     
    public UIComponent getEndDateID() {
        return endDateID;
    }
    
  2. ユーザーが「開始日」または「終了日」フィールドに新しい値を選択した場合に呼び出されるマネージドBeanに、検証用メソッドを追加します。このバリデータは、検証が失敗した場合にエラー・メッセージを生成し、更新されるフィールドにそれを付加します。それには、次のコードを使用します。

    private static final String START_DATE_END_DATE_VALIDATION_MSG = "Start Date - End Date interval cannot exceed 180 days for Contractors.";
        private static final String START_DATE_AFTER_END_DATE_VALIDATION_MSG = "Start Date cannot be after End Date.";
     
        private static final String USER_TYPE_ATTRIBUTE = "usr_emp_type__c";
        private static final String START_DATE_ATTRIBUTE = "usr_start_date__c";
        private static final String END_DATE_ATTRIBUTE = "usr_end_date__c";
        
        public void validator(FacesContext facesContext, UIComponent uiComponent, Object object) {
            if (uiComponent.equals(startDateID)) {
                // get value of End Date through binding
                oracle.jbo.domain.Date jboEndDate = FacesUtils.getAttributeBindingValue(END_DATE_ATTRIBUTE, oracle.jbo.domain.Date.class);
                // only validate if both Start Date and End Date are set
                if (jboEndDate != null) {
                    // value of Start Date is passed to validator
                    Date startDate = ((oracle.jbo.domain.Date)object).getValue();
                    Date endDate = jboEndDate.getValue();
                    validateStartDateEndDate(facesContext, uiComponent, startDate, endDate);
                }
            } else if (uiComponent.equals(endDateID)) {
                // get value of Start Date through binding
                oracle.jbo.domain.Date jboStartDate = FacesUtils.getAttributeBindingValue(START_DATE_ATTRIBUTE, oracle.jbo.domain.Date.class);
                // only validate if both Start Date and End Date are set
                if (jboStartDate != null) {
                    Date startDate = jboStartDate.getValue();
                    // value of End Date is passed to validator
                    Date endDate = ((oracle.jbo.domain.Date)object).getValue();
                    validateStartDateEndDate(facesContext, uiComponent, startDate, endDate);
                }
            }
        }
     
        private void validateStartDateEndDate(FacesContext facesContext, UIComponent uiComponent, Date startDate, Date endDate) {
            Date startDatePlus180Days = new Date(startDate.getTime() + 180L * 24 * 60 * 60 * 1000);
            if (startDate.after(endDate)) {
                // queue error message for the component which is being validated (either Start Date or End Date)
                facesContext.addMessage(uiComponent.getClientId(facesContext),
                                        new FacesMessage(FacesMessage.SEVERITY_ERROR, START_DATE_AFTER_END_DATE_VALIDATION_MSG, null));
            } else if (isContractorUserTypeSelected() && startDatePlus180Days.before(endDate)) {
                // queue error message for the component which is being validated (either Start Date or End Date)
                facesContext.addMessage(uiComponent.getClientId(facesContext),
                                        new FacesMessage(FacesMessage.SEVERITY_ERROR, START_DATE_END_DATE_VALIDATION_MSG, null));
            } else {
                // re-render -- in case there was an error message in queue for any of the two components it will be released
                FacesUtils.partialRender(startDateID);
                FacesUtils.partialRender(endDateID);
            }
        }
     
        public boolean isContractorUserTypeSelected() {
            // return true if value of "usr_emp_type__c" binding attribute equals to "Contractor"
            // "usr_emp_type__c" binding attribute is used to display value of User Type in the User Type drop-down
            return "Contractor".equals(FacesUtils.getListBindingValue(USER_TYPE_ATTRIBUTE, String.class));
        }
    

    関連項目:

    FacesUtilsクラスの詳細は、「FacesUtilsクラス」を参照してください。

  3. 「Oracle Identity Managerへのカスタム・コードのデプロイ」で説明するように、マネージドBeanをパッケージ化し、デプロイします。

  4. JSFFにコードをバインドします。これを行うには、次の手順を実行します。

    1. 定義したプロパティを指すように、「開始日」および「終了日」フィールドのコンポーネント・バインディングを設定します。

    2. 手順2で定義したバリデータ・メソッドを指すように、「開始日」および「終了日」フィールドのバリデータ・プロパティに、EL式を定義します。例:

      <mds:attribute name="binding" value="#{backingBeanScope.validatorBean.startDateID}"/>
            <mds:attribute name="validator" value="#{backingBeanScope.validatorBean.validator}"/>
      

      注意:

      Web Composerを使用して、バリデータ・プロパティを直接追加することはできません。JSFFのMDSファイルに手動で設定する必要があります。これを行うには、次の手順を実行します。
      1. Web Composerを使用して、「開始日」および「終了日」フィールドのコンポーネント・バインディングを設定した後で、サンドボックスをエクスポートします。

      2. ZIPファイルを解凍し、「開始日」および「終了日」フィールドが変更されたフォームのXMLファイルを特定します。たとえば、ユーザー作成フォームのXMLファイルは、oracle/iam/ui/runtime/form/view/pages/mdssys/cust/site/site/userCreateForm.jsff.xmlです。

      3. テキスト・エディタでこのXMLファイルを開き、「開始日」および「終了日」フィールドのバリデータを設定します。次に例を示します。

        <mds:modify element="_xg_36">
               <mds:attribute name="binding" value="#{backingBeanScope.validatorBean.startDateID}"/>
              <mds:attribute name="validator" value="#{backingBeanScope.validatorBean.validator}"/>
           </mds:modify>
           <mds:modify element="_xg_13">
              <mds:attribute name="binding" value="#{backingBeanScope.validatorBean.endDateID}"/>
              <mds:attribute name="validator" value="#{backingBeanScope.validatorBean.validator}"/>
           </mds:modify>
        
      4. 変更内容を保存し、ZIPファイル(サンドボックスのアーカイブ)を再パッケージしてから、環境にインポートします。


19.7.5.5 カスタム・カスケードLOVの実装

カスケードLOVとは、1つのコンポーネントの値リストが別のコンポーネントで現在選択されている値に依存するLOVコンポーネントです。たとえば、「ユーザーの作成」ページ上の「ユーザー・タイプ」リストの選択された値に基づいて、「ジョブ・コード」リストまたは別のLOVコンポーネントを表示する場合があります(その値リストは「ユーザー・タイプ」リストで現在選択されている値に依存します)。

カスタム・カスケードLOVを実装する高度なガイドラインを次に示します。

  1. 「ユーザー・タイプ」フィールドと「ジョブ・コード」の任意の親コンポーネント(フォーム・ルート・パネルなど)のコンポーネント・バインディングを定義します。

  2. 次の要件を確実に満たして、「ジョブ・コード」LOVコンポーネントのモデルを実装します。

    • このモデルは、「ユーザー・タイプ」フィールドの現在の値を考慮する必要があります。

    • af: selectOneChoiceに対して、List<javax.faces.model.SelectItem>を戻すメソッドを実装する必要があります。

    • af: inputListOfValuesに対して、oracle.adf.view.rich.model.ListOfValuesModeのインスタンスを戻すメソッドを実装する必要があります。


    関連項目:

    LOVコンポーネントを使用して、ユーザーが値を選択できるオブジェクトのモデルドリブン・リストを表示する方法については、『Oracle Fusion Middleware Oracle Application Development Framework Webユーザー・インタフェース開発者ガイド』の値リスト・コンポーネントの使用に関する説明を参照してください。

  3. 「ユーザー・タイプ」フィールドに対して、valueChangeListenerを実装します。「ユーザー・タイプ」フィールドのautosubmitプロパティをtrueに設定します。

    valueChangeListenerは、「ジョブ・コード」LOVコンポーネントのモデルを、「ユーザー・タイプ」フィールドの現在の値で更新する必要があります。また、「ジョブ・コード」LOVコンポーネントが現在の値リストで更新されるように、valueChangeListenerはフォームを再レンダリングする必要があります。

19.7.5.6 RequestFormContextを使用したフォームのカスタマイズ

RequestFormContextは、エンティティ・フォーム詳細タスク・フローのpageFlowScopeで使用可能なBeanです。エンティティ・フォームには、ユーザー・フォーム、アプリケーション・インスタンス・フォーム、ロール・フォームおよび権限フォームが含まれます。このインスタンスは、様々なコンテキスト情報を提供します。このコンテキスト情報を使用すると、特定のビジネス要件に基づいて様々なフォームをカスタマイズできます。

次に示すように、Javaコードを使用してクラスのインスタンスを取得できます。

RequestFormContext.getCurrentInstance();

次に示すように、ELを使用してクラスのインスタンスを取得することもできます。

#{pageFlowScope.requestFormContext}

RequestFormContextは、次のコンテキスト情報を提供します。

  • operation: エンティティで実行中の操作。可能な値はCREATEおよびMODIFYです。

  • actionType: エンティティ・フォームが表示されている場合に、ユーザーが実行中のアクション。可能な値は、APPROVAL、FULFILL、REQUEST、VIEW、SUMMARYです。

  • bulk: バルク操作であるかどうか。

  • beneficiaryIds: 受益者またはターゲット・ユーザーIDのリスト。たとえば、ユーザーJohn Doe用のアプリケーション・インスタンスをリクエストしている場合、リストにはJohn DoeのユーザーIDが含まれます。

  • cartItemIds: カート・アイテムIDのリスト。たとえば、ユーザーのアプリケーション・インスタンスをリクエストしている場合、リストにはリクエスト中のアプリケーション・インスタンスIDが含まれます。

  • requestEntityType: リクエスト中のエンティティ・タイプ(ROLE、ENTITLEMENT、APP_INSTANCE、USERのいずれか)。

  • requestEntitySubType: リクエスト中のエンティティのサブタイプ。たとえば、アプリケーション・インスタンスをリクエスト中の場合、requestEntitySubTypeはアプリケーション・インスタンス・キーです。

  • instanceKey: 変更中のインスタンスのキー。

RequestFormContextの使用例を次に示します。

「アプリケーション・インスタンスの作成」フォームに新しい「事前移入」ボタンを追加し、ターゲット・ユーザーが1人だけの場合にのみ、このボタンを表示可能にします。このボタンをクリックすると、アプリケーション・インスタンス・フィールドの一部(「ユーザー・ログイン」、「名」、「姓」など)が、現在のターゲット・ユーザーに基づいて事前移入されます。これを実行する手順を次に示します。

  1. カスタム・リクエストBeanでは、次に示すように、「事前移入」ボタンおよびフォーム・ルート・パネルのコンポーネント・バインディングのプロパティを定義します。

    private UIComponent rootPanel;
        private UIComponent prepopulateButton;
            
        public void setRootPanel(UIComponent rootPanel) {
            this.rootPanel = rootPanel;
        }
     
        public UIComponent getRootPanel() {
            return rootPanel;
        }
     
        public void setPrepopulateButton(UIComponent prepopulateButton) {
            this.prepopulateButton = prepopulateButton;
        }
     
        public UIComponent getPrepopulateButton() {
            return prepopulateButton;
        }
    
  2. 「事前移入」ボタンがクリックされると起動するactionListenerを実装します。Oracle Identity Manager APIを使用することで、actionListenerはターゲット・ユーザーIDを使用して、ユーザー・データ(「名」、「姓」など)をフェッチします。フェッチしたデータを使用して、属性バインディングを介して特定のアプリケーション・インスタンス属性を設定し、最後にフォームをリフレッシュして新しい値を表示します。actionListenerを次に示します。

    private static final String
    ACCOUNT_LOGIN_ATTRIBUTE = "UD_EBS2722_LOGIN__c";
        private static final String ACCOUNT_ID_ATTRIBUTE = "UD_EBS2722_ACCOUNTID__c";
        private static final String FIRST_NAME_ATTRIBUTE = "firstName__c";
        private static final String LAST_NAME_ATTRIBUTE = "lastName__c";
    public void actionListener(ActionEvent e) {
            if (e.getSource().equals(prepopulateButton)) {
                RequestFormContext requestFormContext = RequestFormContext.getCurrentInstance();
                List<String> beneficiaryIds = requestFormContext.getBeneficiaryIds();
                if (beneficiaryIds.size() == 1) {
                    // prepopulate fields based on selected beneficiary
                    User user = getUser(beneficiaryIds.get(0));
                    FacesUtils.setAttributeBindingValue(ACCOUNT_LOGIN_ATTRIBUTE, user.getLogin());
                    FacesUtils.setAttributeBindingValue(ACCOUNT_ID_ATTRIBUTE, user.getId());
                    FacesUtils.setAttributeBindingValue(FIRST_NAME_ATTRIBUTE, user.getFirstName());
                    FacesUtils.setAttributeBindingValue(LAST_NAME_ATTRIBUTE, user.getLastName());
                }
            }
            FacesUtils.partialRender(rootPanel);
        }
     
        private User getUser(String userId) {
            UserManager userManager = OIMClientFactory.getUserManager();
            try {
                return userManager.getDetails(userId, null, false);
            } catch (NoSuchUserException e) {
                throw new RuntimeException(e);
            } catch (UserLookupException e) {
                throw new RuntimeException(e);
            }
        }
    
  3. ブール値を戻すメソッドを作成します。フォームのレンダリング時に「事前移入」ボタンが表示されるかどうかが、このメソッドによって決定されます。この例では、ターゲット・ユーザーの数が1と等しい場合に、「事前移入」ボタンが表示されます。メソッドは次のとおりです。

    public boolean isPrepopulateButtonRendered() {
            RequestFormContext requestFormContext = RequestFormContext.getCurrentInstance();
            return requestFormContext.getActionType() == RequestFormContext.ActionType.REQUEST && requestFormContext.getBeneficiaryIds().size() == 1;
        }
    
  4. マネージドBeanをパッケージ化し、デプロイします。詳細は、「Oracle Identity Managerへのカスタム・コードのデプロイ」を参照してください。

  5. コードをJSFFとバインドします。これを行うには、次の手順を実行します。

    1. 「事前移入」ボタンを「アプリケーション・インスタンスの作成」フォームに追加します。

    2. 「事前移入」ボタンとルート・パネルのバインディングを設定します。

    3. 手順2で実装したactionListenerメソッドを指すように、「事前移入」ボタンのactionListenerプロパティを設定します。


      注意:

      Web Composerを使用してactionListenerプロパティを設定することはできません。次のように手動で設定する必要があります。
      1. サンドボックスをエクスポートします。

      2. JSFFを編集して、actionListenerの属性値を設定します。例:

        <mds:attribute name="actionListener" value="#{backingBeanScope.accountFormReqBean.submitButtonActionListener}"/>)
        
      3. 更新したサンドボックスをインポートします。

      この手順は、このドキュメント内のすべての例におけるactionListenerプロパティの設定に適用できます。


    4. 手順3で実装したisPrepopulateButtonRendered()メソッドを指すように、renderedプロパティを設定します。

19.7.5.7 リクエスト・カタログの「送信」ボタンのオーバーライド

リクエスト・カタログの「送信」ボタンをオーバーライドし、要件に基づいて追加のロジックを実行できます。たとえば、リクエストの送信時に、ターゲット・ユーザーまたは受益者の数を追加でチェックし、受益者の数が5人以下の場合にリクエストの送信を許可するには、次の手順を実行します。

  1. 元の「送信」ボタンをオーバーライドするactionListenerを実装します。

    ユーザーがこの「送信」ボタンをクリックすると、actionListenerが起動されます。actionListenerは追加チェックを実行し、エラー・メッセージを表示するか、または「送信」ボタンにバインドされている元のactionListenerを実行します。元の「送信」ボタンのactionListenerは、次のEL式を使用して実行できます。

    #{backingBeanScope.cartReqBean.submitActionListener}
    

    actionListenerのコードを次に示します。

    private static final String MORE_THAN_FIVE_TARGET_USERS_MSG = "Cannot submit request for more than five target users.";
    public void submitButtonActionListener(ActionEvent e) {
            // only submit request if there is no more than 5 beneficiaries
            Boolean moreThanFiveTargetUsers = FacesUtils.getValueFromELExpression("#{backingBeanScope.cartReqBean.targetUserSize > 5}", Boolean.class);
            if (moreThanFiveTargetUsers) {
                // display error message
                FacesMessage fm = new FacesMessage();
                fm.setSeverity(FacesMessage.SEVERITY_ERROR);
                fm.setSummary(MORE_THAN_FIVE_TARGET_USERS_MSG);
                FacesUtils.showFacesMessage(fm);
            } else {
                // execute original submit button action listener
                MethodExpression originalActionListener =
                    FacesUtils.getMethodExpressionFromEL("#{backingBeanScope.cartReqBean.submitActionListener}", null, new Class[] { ActionEvent.class });
                originalActionListener.invoke(FacesUtils.getELContext(), new Object[] { e });
            }    
        }
    
  2. 新しいactionListenerの実装を指すように、「送信」ボタンのactionListenerプロパティを更新します。

19.7.5.8 タスク・フローの起動

「セルフ・サービス」インタフェースでタスク・フローを起動できます。たとえば、タブ内で動作するバインド・タスク・フローを持つタブを起動する場合は、次の手順を実行します。

  1. 次のメソッドを使用して、アクション・リスナーとも呼ばれるカスタム・マネージドBeanを開発します。

    public void launchMyTaskFlow(ActionEvent evt){
           
    User user = OIMClientFactory.getAuthenticatedSelfService().getProfileDetails(null);
           String taskFlowId = "/WEB-INF/oracle/iam/ui/taskflows/public/tfs/user-details-tf.xml#user-details-tf";
           // This id uniquely identifies the taskflow after launch. Add a suffix, for example entityPrimaryKey, to make it unique.
           String id = "user-detail-tf";  
           String name = user.getDisplayName() ;  // this is shown as the tab title
           String description = ""; // Add any suitable description
           String icon = "/images/user.png";
           String  helpTopicId = ConstantsDefinition.DEFAULT_HELP_TOPIC_ID; // Or your custom OHW integrated help topic id
           boolean inDialog = false;
           Map params = new HashMap();  // These are your taskflow's input parameters being passed from this launcher method
           params.put("userLogin",  user.getLogin());   
     
           String jsonPayLoad = TaskFlowUtils.createContextualEventPayLoad(id, taskFlowId, name, icon, description, helpTopicId, inDialog, params);
           TaskFlowUtils.raiseContextualEvent(TaskFlowUtils.RAISE_TASK_FLOW_LAUNCH_EVENT, jsonPayLoad);
     }
    

    注意:

    前述のコード・スニペットでは、ユーザー・ログインが入力された際にユーザーの詳細を表示するために、ユーザーの詳細パブリック・タスクフローが使用されています。UIのカスタマイズに使用可能なパブリック・タスクフローの一覧は、「パブリック・タスクフローの使用」を参照してください。

    「Oracle Identity Managerへのカスタム・コードのデプロイ」で説明するように、マネージドBeanをパッケージ化し、デプロイします。

  2. サンドボックスおよびWeb Composerのカスタマイズの使用により、ADF CommandLinkを適切なページ(JSFFファイル)に追加します。サンドボックスのzipを開き、jsff.xmlファイルを編集して、そのリンクのactionListenerをマネージドBeanメソッドにバインドします。

  3. jsffのページ定義にraiseTaskFlowLaunchEventバインディングがあることを確認します。ページ定義ファイルの名前を検索するには、まず最初に、起動リンクのあるjsffページの名前を把握する必要があります。

    ご使用の起動リンクがカスタムjsffページにある場合(たとえば、ご使用のページ名がmy-custom.jsffの場合)、同じJDevプロジェクト内のmy-custom_pageDef.xmlという名前のファイルを検索します。JDevは、各jsffに対して、このファイルを自動的に作成します。このpageDef xmlファイルに次のeventBindingを追加する必要があります。

    <eventBinding id="raiseTaskFlowLaunchEvent">
          <events xmlns="http://xmlns.oracle.com/adfm/contextualEvent">
            <event name="oracle.idm.shell.event.TaskFlowLaunchEvent"/>
          </events>
        </eventBinding>
    

    注意:

    既存のOracle Identity Managerページには、すでにeventBindingが含まれています。自身で作成したJSFFページに対して、eventBindingを定義する必要があります。

Oracle Identity Managerでは、goLink、commandLink、commandButtonなどの独自のUIまたはタスクフローを追加したり、タスクフローを起動したりできます。カスタムUIまたはタスクフローを追加するには、次の手順を実行します。

  1. マネージドBeanを作成し、oracle.iam.ui.custom-dev-starter-pack.warのadfc-config.xmlを使用して登録します。

  2. Web Composerを使用して、リンクまたはボタンを表示するページに、新しいcommandLinkまたはcommandButtonを追加します。

  3. actionListenerメソッドを指すように、追加したリンクまたはボタン・コンポーネントのactionListenerプロパティを設定します。

  4. マネージドBeanを使用してコンテキスト・イベントを発生させます。これは、Oracle Identity Managerによって処理されます。タスクフローが起動されます。

19.7.5.9 外部リンクの作成

特定のURLにユーザーをリダイレクトするリンクまたはボタンを追加するには、次の手順を実行します。

  1. カスタム・リクエストBeanで、ユーザーがリンクまたはボタンをクリックすると起動される次のactionListenerを作成します。

    public void actionListener(ActionEvent e) {
            FacesUtils.redirect("http://www.oracle.com");
        }
    
  2. マネージドBeanをパッケージ化し、デプロイします。詳細は、「Oracle Identity Managerへのカスタム・コードのデプロイ」を参照してください。

  3. Web Composerを使用して、リンクまたはボタンを表示するページに、新しいcommandLinkまたはcommandButtonを追加します。詳細は、「リンクまたはボタンの追加」を参照してください。

  4. actionListenerメソッドを指すように、追加したリンクまたはボタン・コンポーネントのactionListenerプロパティを設定します。

19.7.6 リクエスト属性を移入するためのマネージドBeansの使用

この項では、リクエスト属性を移入するための次のアプローチについて説明します。

19.7.6.1 マネージドBeansを使用したリクエスト属性の移入

このアプローチにより、ユーザーがカスタム・ボタンをクリックすると呼び出されるマネージドBeanが作成されます。マネージドBeanは、Oracle Identity Managerのカスタマイズ・プレースホルダ・ライブラリ(oracle.iam.ui.custom-dev-starter-pack.war)にデプロイされる必要があります。「事前移入」ボタンと呼ばれるボタンは、UIカスタマイズの一部で、Web Composerを使用して手動でページに追加する必要があります。

マネージドBeanコードは、リクエスト・フォームに移入される情報のフェッチを行います。Oracle Identity Manager APIを使用して、リクエストやユーザー管理レイヤーから受益者情報を入手します。また、JSF/ADF APIを使用して、リクエスト・フォームのUIコンポーネントを更新します。

マネージドBeansおよびUIカスタマイズを使用してリクエスト属性を移入する手順は次のとおりです。

  1. JDevアプリケーション・ワークスペースとプロジェクトを作成します。詳細は、「ViewControllerプロジェクトの設定」を参照してください。

  2. Javaクラスを作成します。この例では、完全なクラス名はcom.oracle.demo.iam.prepop.view.PrePopulateMBeanです。このクラスには、次の内容が含まれます。

    • UIコンポーネント、カスタムの「事前移入」ボタンとその親コンテナへの参照を保持する2つのメンバー変数

    • 変数メンバー変数のアクセッサ・メソッド(getおよびset)

    • ユーザーがカスタムの「事前移入」ボタンをクリックすると呼び出されるアクション・リスナー・タイプ・メソッド

    • カスタムの「事前移入」ボタンの無効化が必要なタイミングを決定するブール値を返すメソッド

    この例のカスタム・コードを次に示します。

    public class PrePopulateMBean {
     
        private UIComponent rootPanel;
        private UIComponent prepopulateButton;
     
        public PrePopulateMBean() {
            super();
        }
     
        public void setRootPanel(UIComponent rootPanel) {
            this.rootPanel = rootPanel;
        }
     
        public UIComponent getRootPanel() {
            return rootPanel;
        }
     
        public void setPrepopulateButton(UIComponent prepopulateButton) {
            this.prepopulateButton = prepopulateButton;
        }
     
        public UIComponent getPrepopulateButton() {
            return prepopulateButton;
        }
     
        public boolean isPrepopulateButtonRendered() {
            
            boolean ret = false;   
            RequestFormContext requestFormContext = RequestFormContext.getCurrentInstance();
            if (requestFormContext != null) {
                
                boolean isActionRequest   = (requestFormContext.getActionType() == RequestFormContext.ActionType.REQUEST);
                boolean singleUserRequest = false;
     
                if (requestFormContext.getBeneficiaryIds()!=null) {
                    singleUserRequest = (requestFormContext.getBeneficiaryIds().size() == 1);
                }
                ret = isActionRequest && singleUserRequest;
            }    
            return (ret);            
        }
     
        public void actionListener(ActionEvent e) {
     
            if (e.getSource().equals(prepopulateButton)) {
                
                RequestFormContext requestFormContext = RequestFormContext.getCurrentInstance();
                List<String> beneficiaryIds = requestFormContext.getBeneficiaryIds();
                
                if (beneficiaryIds.size() == 1) {
                    
                    try {
                        User user = getUser(beneficiaryIds.get(0));
                        FacesUtils.setAttributeBindingValue("UD_OID_USR_FNAME__c", user.getFirstName());
                        FacesUtils.setAttributeBindingValue("UD_OID_USR_LNAME__c", user.getLastName());
     
                    } catch (NoSuchUserException f) {
                        f.printStackTrace();
                    } catch (UserLookupException f) {
                        f.printStackTrace();
                    }
                }
            }
            FacesUtils.partialRender(rootPanel);
        }
     
        private User getUser(String userKey) throws NoSuchUserException, UserLookupException {
            
            UserManager userMgr = OIMClientFactory.getUserManager();
            
            HashSet<String> searchAttrs = new java.util.HashSet<String>();
            searchAttrs.add(AttributeName.USER_LOGIN.getId());
            searchAttrs.add(AttributeName.LASTNAME.getId());
            searchAttrs.add(AttributeName.FIRSTNAME.getId());
            
            return userMgr.getDetails(userKey,searchAttrs, false);
        }
    }
    

    Javaクラスのコードでは、次のようになります。

    • RequestContextが使用可能な場合やリクエスト受益者が1人のみの場合、isPrepopulateButtonRenderedメソッドはtrueを返します。カスタマイズ時の問題点を回避するために、RequestContext可用性のチェックが必要です。このメソッドは、カスタムの「事前移入」ボタンのロード時またはそのコンテナのリフレッシュ時に呼び出されます。

    • actionListenerメソッドは、リクエスト受益者情報を使用するgetUserメソッドを呼び出して、Oracle Identity Managerでユーザー検索を実行します。その後、ユーザー検索から返された情報を使用してUD_OID_USR_FNAME__cおよびUD_OID_USR_LNAME__cのUIコンポーネントに値を直接設定し、rootPanelで部分レンダリングを呼び出します。このパネルは、カスタム・ボタンとリクエスト・フォームを保持しています。部分レンダリングにより、それぞれのフィールドに値が表示されます。このカスタム・コードにUIコンポーネントへの直接参照が含まれ、直接参照はサンドボックスのエクスポートにより見つけることができることをここで説明することが重要です。このメソッドは、カスタムの「事前移入」ボタンのロード時またはそのコンテナのリフレッシュ時に呼び出されます。

    • FacesUtilクラスは、UI変更のレンダリングを行います。このクラスのコードについては、付録A「FacesUtilsクラス」を参照してください。

  3. JDevプロジェクトで、PrePopulateMBeanクラスをマネージドBeanとして宣言します。これによりMBeanはUIで使用できるようになり、その結果、EL式を使用した呼出しが可能になります。この構成には、View ControllerプロジェクトのマネージドBeansセクションで次の値を指定します。

    • 名前: prepopMBean

    • クラス(class): com.oracle.demo.iam.prepop.view.PrePopulateMBean

    • スコープ: backingBean

  4. View ControllerプロジェクトをADFライブラリJARファイルとしてデプロイします。このタイプのデプロイメントは、デプロイメント・プロファイル・オプションによりJDeveloperで作成されます。デプロイメントにより、JARファイルが生成されます。このファイルを、Oracle Identity Managerプレースホルダ・ライブラリであるoracle.iam.ui.custom-dev-starter-pack.warにコピーします。このファイルは、他のOracle Identity Managerアプリケーション・パッケージ(EARファイルやWARファイルなど)とともに、$OIM_ORACLE_HOME/server/apps/ディレクトリにあります。このファイルを変更する前に、バックアップを作成します。

  5. カスタム・コードをデプロイします。詳細は、「Oracle Identity Managerへのカスタム・コードのデプロイ」を参照してください。

  6. UIをカスタマイズします。これを行うには、次の手順を実行します。

    1. Oracle Identity Self Serviceで、サンドボックスを作成してアクティブ化します。この例では、サンドボックス名はRequestPrePopです。

    2. アクセス・カタログに移動します。

    3. カスタマイズする特定のアプリケーション・インスタンスを検索します。この例では、アプリケーション・インスタンスはLocal OIDです。・カートにアプリケーション・インスタンスを追加して、「チェックアウト」をクリックします。

    4. 「カスタマイズ」をクリックします。

    5. 「構造」を選択してコンポーネント・ツリーを開きます。

    6. そのページの「カート項目」セクションおよび「詳細」セクションで、「詳細」ラベルの近くをクリックします。showDetailHeader:Detailsコンポーネントが選択されていることを確認します。

    7. 「編集」をクリックします。表示されたダイアログ・ボックスで、Bindingプロパティを編集し、式ビルダーを使用して次のELを構成します。

      #{backingBeanScope.prepopMBean.rootPanel}
      

      この式バインドにより、UIはカスタムのマネージドBeanのsetRootPanelメソッドを呼び出します。「OK」をクリックします。

    8. showDetailHeader:Detailsコンポーネントが選択されていることを確認します。「コンテンツの追加」をクリックします。

    9. 下方向にスクロールして、「Webコンポーネント」セクションを開きます。

    10. コマンド・ツールバー・ボタン・コンポーネントの右の「追加」をクリックします。「詳細」セクションにボタンが追加されます。

    11. ボタンをクリックして、「編集」をクリックします。

    12. Textプロパティを編集し、ラベルとして「事前移入」を設定します。

    13. Bindingプロパティを編集し、式ビルダーを使用して次のELを構成します。

      #{backingBeanScope.prepopMBean.prepopulateButton}
      

      このバインドは、カスタムのマネージドBeanのsetPprepopulateButtonメソッドを呼び出します。「OK」をクリックします。

    14. Disabledプロパティを編集し、式ビルダーを使用して次のELを構成します。

      #{!backingBeanScope.prepopMBean.prepopulateButtonRendered}
      

      このバインドは、カスタムのマネージドBeanのisPrepopulateButtonRenderedメソッドを呼び出します。「OK」をクリックします。

    15. 「スタイル」タブをクリックします。Widthプロパティを100に設定し、Margin - Leftプロパティを100に設定します。「OK」をクリックします。この構成により、UIに「事前移入」ボタンが適切に配置されます。

    16. 「閉じる」をクリックして、カスタマイズ・モードを終了します。

  7. 「事前移入」ボタンのプロパティを手動で構成する手順は次のとおりです。

    1. 「サンドボックス」ページに移動します。サンドボックスを非アクティブ化し、エクスポートします。

    2. ローカルのファイル・システムにサンドボックスのZIPファイルを保存します。

    3. ZIPファイルを解凍します。テキスト・エディタで、カスタマイズに対応するXMLファイルを開きます。この例では、ファイルはoracle/iam/ui/runtime/form/view/pages/mdssys/cust/site/site/OIDUserFormCreateForm.jsff.xmlです。

    4. 次のような、カスタムの「事前移入」ボタンを定義するセクションを検索します。

      <af:commandToolbarButton xmlns:af="http://xmlns.oracle.com/adf/faces/rich" id="e8829502064" binding="#{backingBeanScope.prepopMBean.prepopulateButton}" text="PrePopulate"
      
    5. 次のように、actionListenerプロパティをカスタムの「事前移入」ボタンに追加します。

      actionListener="#{backingBeanScope.prepopMBean.actionListener}
      
    6. ファイルを保存し、ZIPを再パッケージ化します。内容の再パッケージ化時にパスが保存されたことを確認してください。

    7. サンドボックスをインポートして、ZIPファイルをインポートします。インポート時にサンドボックスがアクティブではないことを確認してください。

    8. サンドボックスをアクティブにします。

  8. カスタマイズをテストします。これを行うには、次の手順を実行します。

    1. 「カタログ」に移動し、アプリケーション・インスタンスを検索し、ショッピング・カートに追加します。

    2. カートのサマリー・ページに、カスタムの「事前移入」ボタンが表示されます。このボタンをクリックすると、「名」フィールドと「姓」フィールドが受益者の情報に更新されます。

    3. 「事前移入」ボタンをクリックします。「名」フィールドと「姓」フィールドが受益者の情報に更新されます。

  9. サンドボックスを公開します。

19.7.6.2 事前移入プラグインを使用したリクエスト属性の移入

事前移入プラグインは、UIとAPIリクエスト作成に対して同じロジックが実行される場合や、UI相互作用が不要な場合にも使用できます。このアプローチでは、リクエストに事前移入する必要がある各属性に対してプラグインがあります。リソースや属性が異なっても同一のプラグインを使用できます。

プラグイン・コードは、oracle.iam.request.plugins.PrePopulationAdapterインタフェースを実装しています。次にコード例を示します。

package com.oracle.demo.iam.prepop.plugin;
 
import java.io.Serializable;
 
import java.util.HashSet;
import java.util.List;
 
import oracle.iam.identity.usermgmt.api.UserManager;
import oracle.iam.identity.usermgmt.api.UserManagerConstants.AttributeName;
import oracle.iam.identity.usermgmt.vo.User;
import oracle.iam.platform.Platform;
import oracle.iam.request.vo.Beneficiary;
import oracle.iam.request.vo.RequestData;
 
public class UserLoginPrePop implements oracle.iam.request.plugins.PrePopulationAdapter {
 
    public UserLoginPrePop() {
        super();
    }
 
    public Serializable prepopulate(RequestData requestData) {
 
        String prePopUserId = null;
 
        List<Beneficiary> benList = requestData.getBeneficiaries();
        
        if(benList.size()==1){
            
            UserManager  usersvc = Platform.getService(UserManager.class);
            
            for(Beneficiary benf: benList){
                                        
                HashSet<String> searchAttrs = new java.util.HashSet<String>();
                searchAttrs.add(AttributeName.USER_LOGIN.getId());
            
                try {
                    User userBenef = usersvc.getDetails(benf.getBeneficiaryKey(),searchAttrs, false);
                    if (userBenef!= null) {
                        prePopUserId = userBenef.getLogin();        
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
        return prePopUserId;
    }
}

事前移入プラグインは、Oracle Identity Managerのその他のプラグインと似ています。プラグイン・クラスは、コンパイルされ、JARファイルにデプロイされます。JARファイルは、libディレクトリのZIPファイルに追加される必要があります。ZIPファイルは、ルート・パスにプラグインを宣言するXMLファイルが含まれている必要があります。この例で使用されるXMLは次のようになります。

<?xml version="1.0" encoding="UTF-8" ?>
<oimplugins xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
 <plugins pluginpoint="oracle.iam.request.plugins.PrePopulationAdapter">
 <plugin pluginclass= "com.oracle.demo.iam.prepop.plugin.UserLoginPrePop" version="1.0" name="UserLoginPrePop">
  <metadata name="PrePopulationAdapater">
   <value>OracleDBUMForm::Username|OIDUserForm::User ID</value>
  </metadata>
 </plugin>
</plugins>
</oimplugins>

XMLコードでは、次のようになります。

  • XMLにxmlnsタグ属性があることが必要です。タグ属性がない場合、Oracle Identity Managerによるプラグインの呼出しは行われません。

  • pluginpoint要素の値は、oracle.iam.request.plugins.PrePopulationAdapterであることが必要です。

  • メタデータ・タグには、値の子ノードが含まれます。この値の子ノードには、FormName::AttributeNameのペアを含める必要があります。それぞれのペアは、事前移入プラグインによって移入されるフォーム属性を示しています。この例では、OracleDBUMFormフォームの「ユーザー名」およびOIDUserFormフォームの「ユーザーID」がそのような属性に該当します。フォーム名は、Oracle Identity Managerへのコネクタのインポート時に作成されるプロセス・フォームではなく、ApplicationInstancesやそのフォームが作成される場合に構成されます。

事前移入プラグインは、$OIM_HOME/server/plugins/ディレクトリにデプロイできます。また、プラグイン登録スクリプトを使用して登録できます。本番環境では、プラグインのZipファイルがデータベースにアップロードされるように、常に、コマンド行を使用したプラグインをデプロイすることをお薦めします。

19.7.7 パブリック・タスクフローの使用

Oracle Identity Managerでは、Oracle Identity Self Serviceのカスタマイズするページで使用して、他のタスクフロー呼び出すためのデフォルトのタスクフローが用意されています。たとえば、ユーザーの詳細ページにおいて、マネージャのログイン名をクリックすると、マネージャのユーザーの詳細が表示されるようにカスタマイズできます。

デフォルトのまたは事前定義済のタスクフローは、パブリック・タスクフローと呼ばれます。パブリック・タスクフローの起動時に、パラメータに適切な値を指定する必要があります。たとえば、特定のリクエストのリクエスト詳細ページを起動するには、そのリクエストのリクエストIDを指定する必要があります。

表19-6に、Oracle Identity Managerで用意されているパブリック・タスクフローを、その呼出しに必要な入力パラメータとともに示します。

表19-6 パブリック・タスクフロー

タスクフロー名 タスクフローのパス 説明 パラメータ 必須

リクエストの詳細

/WEB-INF/oracle/iam/ui/taskflows/public/tfs/request-details-tf.xml#request-details-tf

承認のために送信されるリクエストの詳細を表示するために起動されます。

requestID:

詳細を表示するリクエストのID。

はい

ユーザーの詳細

/WEB-INF/oracle/iam/ui/taskflows/public/tfs/user-details-tf.xml#user-details-tf

ユーザーの詳細を表示するために起動されます。

userLogin: 詳細を表示するユーザーの「ユーザー・ログイン」属性値。

はい

ロール詳細

/WEB-INF/oracle/iam/ui/taskflows/public/tfs/role-details-tf.xml#role-details-tf

ロールの詳細を表示するために起動されます。

roleName: 詳細を表示するロールの名前。

はい

ロールのリクエスト

/WEB-INF/oracle/iam/ui/taskflows/public/tfs/request-role-tf.xml#request-role-tf

受益者へのロールの割当てをリクエストするために起動されます。

roleNames: 割り当てられるロールの名前。名前はカンマで区切る必要があります。

はい




userLogins: ロールが割り当てられるユーザーまたは受益者の「ユーザー・ログイン」属性値。値はカンマで区切る必要があります。

値を指定しない場合、現在ログインしているユーザーにリクエスト・アクションが適用されます。

いいえ

ロールの失効

/WEB-INF/oracle/iam/ui/taskflows/public/tfs/revoke-role-tf.xml#revoke-role-tf

受益者に割り当てられたロールの取消しをリクエストするために起動されます。

roleNames: 取り消されるロールの名前。

はい




userLogins: ロールが取り消されるユーザーまたは受益者の「ユーザー・ログイン」属性値。値はカンマで区切る必要があります。

値を指定しない場合、現在ログインしているユーザーに取消しアクションが適用されます。

いいえ

アカウントのリクエスト

/WEB-INF/oracle/iam/ui/taskflows/public/tfs/request-account-tf.xml#request-account-tf

受益者用のアカウントの作成をリクエストするために起動されます。

appInstNames: アカウントが作成されるアプリケーション・インスタンスの名前。値はカンマで区切る必要があります。

はい




userLogins: アカウントが割り当てられるユーザーまたは受益者の「ユーザー・ログイン」属性値。値はカンマで区切る必要があります。

値を指定しない場合、現在ログインしているユーザーにリクエスト・アクションが適用されます。

いいえ

アカウントの変更

/WEB-INF/oracle/iam/ui/taskflows/public/tfs/modify-account-tf.xml#modify-account-tf

ユーザーまたは受益者用に作成されたアカウントの詳細を変更するために起動されます。

accountNames: 詳細を変更するアカウントの名前。値はカンマで区切る必要があります。

はい




userLogins: アカウントの詳細が変更されるユーザーまたは受益者の「ユーザー・ログイン」属性値。値はカンマで区切る必要があります。

値を指定しない場合、現在ログインしているユーザーに取消しアクションが適用されます。

いいえ

アカウントの有効化

/WEB-INF/oracle/iam/ui/taskflows/public/tfs/enable-account-tf.xml#enable-account-tf

ユーザーまたは受益者に割り当てられたアカウントを有効化するために起動されます。

accountNames: 有効化されるアカウントの名前。値はカンマで区切る必要があります。

はい




userLogins: アカウントが有効化されるユーザーまたは受益者の「ユーザー・ログイン」属性値。値はカンマで区切る必要があります。

値を指定しない場合、現在ログインしているユーザーにリクエスト・アクションが適用されます。

いいえ

アカウントの無効化

/WEB-INF/oracle/iam/ui/taskflows/public/tfs/disable-account-tf.xml#disable-account-tf

ユーザーまたは受益者に割り当てられたアカウントを無効化するために起動されます。

accountNames: 無効化されるアカウントの名前。値はカンマで区切る必要があります。

はい




userLogins: アカウントが無効化されるユーザーまたは受益者の「ユーザー・ログイン」属性値。値はカンマで区切る必要があります。

値を指定しない場合、現在ログインしているユーザーにリクエスト・アクションが適用されます。

いいえ

アカウントの削除

/WEB-INF/oracle/iam/ui/taskflows/public/tfs/delete-account-tf.xml#delete-account-tf

ユーザーまたは受益者に割り当てられたアカウントを削除するために起動されます。

accountNames: 削除されるアカウントの名前。値はカンマで区切る必要があります。

はい




userLogins: アカウントが削除されるユーザーまたは受益者の「ユーザー・ログイン」属性値。値はカンマで区切る必要があります。

値を指定しない場合、現在ログインしているユーザーにリクエスト・アクションが適用されます。

いいえ

権限のリクエスト

/WEB-INF/oracle/iam/ui/taskflows/public/tfs/request-entitlement-tf.xml#request-entitlement-tf

受益者への権限の割当てをリクエストするために起動されます。

entlmntNames: 割り当てられる権限の名前。値はカンマで区切る必要があります。

はい




userLogins: 権限が割り当てられるユーザーまたは受益者の「ユーザー・ログイン」属性値。値はカンマで区切る必要があります。

値を指定しない場合、現在ログインしているユーザーにリクエスト・アクションが適用されます。

いいえ

権限の失効

/WEB-INF/oracle/iam/ui/taskflows/public/tfs/revoke-entitlement-tf.xml#revoke-entitlement-tf

受益者に割り当てられた権限の取消しをリクエストするために起動されます。

entlmntNames: 取り消される権限の名前。値はカンマで区切る必要があります。

はい




userLogins: 権限が取り消されるユーザーまたは受益者の「ユーザー・ログイン」属性値。値はカンマで区切る必要があります。

値を指定しない場合、現在ログインしているユーザーにリクエスト・アクションが適用されます。

いいえ

ユーザーの作成

/WEB-INF/oracle/iam/ui/taskflows/public/tfs/create-user-tf.xml#create-user-tf

ユーザー・エンティティを作成するために起動されます。

パラメータは不要です。

いいえ

ユーザーの変更

/WEB-INF/oracle/iam/ui/taskflows/public/tfs/modify-user-tf.xml#modify-user-tf

ユーザーの詳細を変更するために起動されます。

userLogins: 詳細が変更されるユーザーの「ユーザー・ログイン」属性値。

複数のuserLogin属性値を指定した場合は、「バルク変更」ページが表示されます。値はカンマで区切る必要があります。

はい

ユーザーの有効化

/WEB-INF/oracle/iam/ui/taskflows/public/tfs/enable-user-tf.xml#enable-user-tf

無効化されたユーザーを有効化するために起動されます。

userLogins: 有効化されるユーザーの「ユーザー・ログイン」属性値。値はカンマで区切る必要があります。

はい

ユーザーの無効化

/WEB-INF/oracle/iam/ui/taskflows/public/tfs/disable-user-tf.xml#disable-user-tf

有効化されたユーザーを無効化するために起動されます。

userLogins: 無効化されるユーザーの「ユーザー・ログイン」属性値。値はカンマで区切る必要があります。

はい

ユーザーの削除

/WEB-INF/oracle/iam/ui/taskflows/public/tfs/modify-user-tf.xml#modify-user-tf

ユーザーを削除するために起動されます。

userLogins: 削除されるユーザーの「ユーザー・ログイン」属性値。値はカンマで区切る必要があります。

はい

カタログ検索

/WEB-INF/oracle/iam/ui/taskflows/public/tfs/catalog-search-tf.xml#catalog-search-tf

カタログ検索基準を指定するため、および検索結果ページまたはカート詳細ページを、カタログ検索ページを使用せずに直接表示するために起動されます。

searchCrtieria: 次の形式での様々な文字列属性。

{criteriaName: "string", allowSearch: "true/false", profileName: "string", 
                directCheckout: "true/false", showEntityTypeSelector: "true/false", 
                hiddenTag: "string", allowedEntityTypes: "string", tags: "string", 
                entityType: "string", auditObjective: "string", riskLevel: "string", 
                ANY_UDF: "string"}

説明:

  • criteriaName: カタログ結果ページに表示される、オプションの文字列属性。

  • allowSearch: 結果ページのタグ検索フィールドのレンダリングを制御するための、オプションのブール属性。

  • profileName: 保存済プロファイルのクリックをシミュレートすることによって、ユーザーをカート・ページに導くための、オプションの文字列属性。

  • directCheckout: 検索結果をカートに追加して、ユーザーをチェックアウト・ページに導くための、オプションのパラメータ(trueまたはfalse)。

  • showEntityTypeSelector: 「entityTypeSelector」ドロップダウンを表示するための、オプションのブール属性。allowSearchもtrueに設定された場合のみ、表示されます。

  • hiddenTag: 指定されたタグ内で検索をさらに絞り込むための、オプションの文字列属性。

  • allowedEntityTypes: 「entityTypeSelector」ドロップダウンにentityTypeを表示するための、オプションの文字列属性。複数のエンティティを表示する場合は、チルダ(~)デリミタで区切る必要があります(例、Role~Entitlement)。

  • tags: タグの検索基準。profileNameを指定した場合を除いて、必須の文字列属性です。

  • entityType: エンティティ・タイプの検索基準を指定するオプションの文字列属性(ロール、権限、アプリケーション・インスタンスなど)。

  • auditObjective: 監査目標属性のデフォルト値。

  • riskLevel: リスク・レベル属性のデフォルト値。値は、3(低リスク)、5(中リスク)、7(高リスク)です。

  • リクエスト・カタログに追加する、任意のユーザー定義フィールド(UDF)。

はい




userLogins: カタログ検索結果ページの受益者表に表示されるユーザーの「ユーザー・ログイン」属性値。値はカンマで区切る必要があります。値を指定しない場合は、現在ログインしているユーザーが受益者表に表示されます。


カタログ項目詳細

/WEB-INF/oracle/iam/ui/taskflows/public/tfs/catalog-item-details-tf.xml#catalog-item-details-tf

カタログ項目の詳細を表示するために起動されます。

catalogItemName: 詳細を表示するカタログ項目の名前。

はい




catalogItemType: 詳細を表示するカタログ項目のタイプ。有効な値は、Role、ApplicationIstanceまたはEntitlementです。

はい

ユーザー・ロール

/WEB-INF/oracle/iam/ui/taskflows/public/tfs/user-roles-tf.xml#user-roles-tf

特定のユーザーのロール・ページを表示するために起動されます。

userLogin: ロール・ページを表示するユーザーの「ユーザー・ログイン」属性値。

はい

ユーザー・アカウント

/WEB-INF/oracle/iam/ui/taskflows/public/tfs/user-accounts-tf.xml#user-accounts-tf

特定のユーザーのアカウント・ページを表示するために起動されます。

userLogin: アカウント・ページを表示するユーザーの「ユーザー・ログイン」属性値。

はい

ユーザー権限

/WEB-INF/oracle/iam/ui/taskflows/public/tfs/user-entitlements-tf.xml#user-entitlements-tf

特定のユーザーの権限ページを表示するために起動されます。

userLogin: 権限ページを表示するユーザーの「ユーザー・ログイン」属性値。

はい

ユーザーに割り当てられた管理ロール

/WEB-INF/oracle/iam/ui/taskflows/public/tfs/user-assigned-adminroles-tf.xml#user-assigned-adminroles-tf

特定のユーザーの割り当てられた管理ロール・ページを表示するために起動されます。

userLogin: 割り当てられた管理ロール・ページを表示するユーザーの「ユーザー・ログイン」属性値。

はい

組織の詳細

/WEB-INF/oracle/iam/ui/taskflows/public/tfs/org-details-tf.xml#org-details-tf

組織の詳細ページを表示するために起動されます。

orgName: 詳細ページを表示する組織の名前。

はい

マイ・アクセス

/WEB-INF/oracle/iam/ui/taskflows/public/tfs/my-access-tf.xml#my-access-tf

現在ログインしているユーザーのアクセス・ページを表示するために起動されます。

パラメータは不要です。

いいえ

ユーザー・アカウント・パスワードの変更

/WEB-INF/oracle/iam/ui/taskflows/public/tfs/account-passwd-reset-tf.xml#account-passwd-reset-tf

特定のユーザーのユーザー・アカウント・パスワードの変更ページを表示するために起動されます。

accountName: パスワードを変更するユーザーのアカウントの名前。

はい




userLogin: アカウント・パスワードを変更するユーザーの「ユーザー・ログイン」属性値。

はい

アカウントの詳細

/WEB-INF/oracle/iam/ui/taskflows/public/tfs/account-details-tf.xml#account-details-tf

ユーザーのアカウントの詳細を表示するために起動されます。

accountName: 詳細を表示するユーザーのアカウントの名前。

はい




userLogin: アカウントを表示するユーザーの「ユーザー・ログイン」属性値。

はい



注意:

  • 表19-6に示されているすべてのパブリック・タスクフローのパラメータは、java.lang.String型です。

  • パブリック・タスクフローは、「タスク・フローの起動」で説明されているように、コンテキスト・イベントを使用して起動できます。あるいは、パブリック・タスクフローを、ADF Facesページに埋め込むこともできます。パブリック・タスクフローをADF Facesページに埋め込む場合は、ADF Facesページのページ定義ファイルのタスクフロー定義に、次のパラメータを(表19-6に示されているパラメータに加えて)追加する必要があります。

    パラメータ名: uiShell

    値: #{pageFlowScope.uiShell}


19.7.8 カタログ検索のカスタマイズ

デフォルト・カタログ検索フォームをカスタマイズするには、『Oracle Identity Managerの管理』のアクセス・リクエスト・カタログの構成に関する項を参照してください。

検索フィールドや検索操作の追加など、カタログ検索に対する高度なカスタマイズについては、カスタム・タスクフローを作成してから、デフォルトのカタログ・タスクフローをカスタム・タスクフローで置換することをお薦めします。

カタログ検索のカスタム・タスクフローを実装するには、次の手順を実行します。

  1. カスタム・タスクフローを、ViewControllerプロジェクトにおいてページ・フラグメントに基づくバインド・タスクフローとして開発します。OIMクライアント、OIMモデルおよびOIMビュー・ライブラリもViewControllerプロジェクトに追加されていることを確認してください。ViewControllerプロジェクトの設定の詳細は、「ViewControllerプロジェクトの設定」を参照してください。

    カスタム・タスクフローは、図19-7に示すようにタスクフロー・テンプレート/WEB-INF/oracle/iam/ui/catalog/tfs/catalog-search-template.xmlに基づくことができます。

    図19-7 テンプレートに基づくカタログ・タスクフロー

    図19-7の説明が続きます
    「図19-7 テンプレートに基づくカタログ・タスクフロー」の説明

    このテンプレートを拡張することで、次のパラメータに対する値がカスタム・タスクフローに自動的に渡されます。これらのパラメータは、カスタム・タスクフローのpageFlowScopeからアクセスできます。

    • entityType: ロール、権限またはアカウントをIdentity Self Serviceの「マイ・アクセス」ページからリクエストする場合、このパラメータに渡される値はそれぞれ「ロール」、「権限」、「アプリケーション・インスタンス」です。

    • showEntityTypeSelector: ロール、権限またはアカウントを「マイ・アクセス」ページからリクエストする場合、このパラメータの値はfalseとして渡されます。このパラメータを使用して、カスタム・タスクフローのエンティティ・タイプ・セレクタを非表示にできます。

    • showAppSelector: 権限を「マイ・アクセス」ページの「マイ・アカウント」タブからリクエストする場合、このパラメータの値はfalseとして渡されます。このパラメータを使用して、カスタム・タスクフローのアプリケーション・セレクタを非表示にできます。

    • parentEntityKey: 権限を「マイ・アクセス」ページの「マイ・アカウント」タブからリクエストする場合、選択したアカウントに対応するアプリケーション・インスタンス・キーがこのパラメータに渡されます。

  2. カスタム・タスクフローのページ・フラグメントは、図19-8に示すようにテンプレート/oracle/iam/ui/catalog/pages/catalog-advanced-search-template.jspxに基づくことができます。

    図19-8 ページ・テンプレートに基づくJSFページ・フラグメント

    図19-8の説明が続きます
    「図19-8 ページ・テンプレートに基づくJSFページ・フラグメント」の説明

    図19-9に示すように、pageTemplateBindingがJdeveloperによってカスタム・ページのページ定義に自動的に追加されることを確認します。

    図19-9 JSFページ・フラグメントのページ・バインディング

    図19-9の説明が続きます
    「図19-9 JSFページ・フラグメントのページ・バインディング」の説明

  3. 次に示すように、searchファセットにカスタム・フォームのプレゼンテーション・ロジックを追加します。

    <?xml version='1.0' encoding='UTF-8'?>
    <jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" version="2.1"
              xmlns:af="http://xmlns.oracle.com/adf/faces/rich"
              xmlns:f="http://java.sun.com/jsf/core"
              xmlns:c="http://java.sun.com/jsp/jstl/core">
      <af:pageTemplate viewId="/oracle/iam/ui/catalog/pages/catalog-advanced-search-template.jspx"
                       value="#{bindings.pageTemplateBinding}" id="pt1">
        <f:facet name="search">
          <!-- ######## CUSTOM SEARCH CONTENT BEGIN ###### -->       
          <!-- ####### CUSTOM SEARCH CONTENT END########## -->      
        </f:facet>
      </af:pageTemplate>
    </jsp:root>
    
  4. カスタム・フォームの検索ボタンには、アクション・リスナーが定義されている必要があります。アクション・リスナーで、SearchCriteriaオブジェクトを作成し、次のユーティリティ・メソッドを起動します。

    oracle.iam.ui.catalog.view.CatalogAdvancedSearch.executeCatalogSearch(oracle.iam.platform.entitymgr.vo.SearchCriteria criteria)
    public void searchActionListener(ActionEvent event){
        SearchCriteria criteria = null;
        //build your search criteria
        //and then call executeCatalogSearch
        CatalogAdvancedSearch.executeCatalogSearch(criteria);
    }
    
  5. タスクフローをoracle.iam.ui.custom共有ライブラリの一部としてデプロイします。バインド・タスクフローのデプロイの詳細は、「Oracle Identity Managerへのカスタム・コードのデプロイ」を参照してください。

  6. タスクフローを保護するために、認可ポリシー・マネージャ(APM) UIを使用して、カスタム・タスクフローに権限を追加します。

  7. 「カタログ拡張検索タスクフロー」システム・プロパティを更新して、カスタム・タスクフローを指します。TASKFLOW_DOCUMENT#TASKFLOW_IDの形式で値を指定します。このシステム・プロパティの詳細は、「Oracle Identity Managerの管理」のOracle Identity Managerのシステム・プロパティに関する項を参照してください。

  8. Oracle Identity Managerサーバーを再起動します。

19.7.9 承認タスクの「タスクの詳細」ページのカスタマイズ

カスタム・タスク詳細タスクフローを開発する前に、次のソフトウェアをインストールしておく必要があります。

  • Oracle Identity Manager 11gリリース2 (11.1.2.3.0)

  • Oracle SOA Suite 11g (11.1.1.9.0)

  • Oracle SOAコンポジット・エディタ拡張機能を備えたJDeveloper 11g (11.1.1.9.0)


注意:

ヒューマン・タスクが同じ結果セットを持ち、同じスキーマ・ペイロード構造を共有しているかぎり、同じタスク詳細タスクフローを複数のヒューマン・タスクに使用できます。したがって、承認、チャレンジ、情報の提供および手動履行タスクに対して異なるタスクフローを作成する必要があります。

ヒューマン・タスクのカスタム・タスクフローを作成するには、次の手順を実行します。

  1. ViewControllerプロジェクトを作成します。ViewControllerプロジェクトの設定の詳細は、「ViewControllerプロジェクトの設定」を参照してください。

  2. タスク詳細タスクフローを作成します。これを行うには、次の手順を実行します。

    1. shiphome内の次ディレクトリに移動します。

      IAM_HOME/server/workflows/composites/

    2. コンポジットを解凍します。

      • 承認およびチャレンジ・タスクの詳細ページを作成する場合は、DefaultRequestApproval.zipを解凍します。

      • 情報の提供タスクの詳細ページを作成する場合は、ProvideInformation.zipを解凍します。

      • 手動履行タスクの詳細ページを作成する場合は、DisconnectedProvisioning.zipを解凍します。

    3. JDeveloperに戻り、手順1で作成したViewControllerプロジェクトを右クリックし、「新規作成」を選択します。

    4. ヒューマン・タスクに基づいて、「Web層」「JSF」ADFタスクフローを選択します。

    5. ファイル・ブラウザで、コンポジットZIPファイルを解凍したディレクトリに移動します。適切なヒューマン・タスク・ファイルを次のように選択します。

      • 承認タスクの詳細ページを作成する場合は、「DefaultRequestApproval /ApprovalTask.task」を選択します。

      • チャレンジ・タスクの詳細ページを作成する場合は、「DefaultRequestApproval/ChallengeTask.task」を選択します。

      • 情報の提供タスクの詳細ページを作成する場合は、「ProvideInformation/ApprovalTask.task」を選択します。

      • 手動履行タスクの詳細ページを作成する場合は、「DisconnectedProvisioning /ManualProvisioningTask.task」を解凍します。

    6. 「タスク・フローの作成」ダイアログ・ボックスで、次の値を指定します。

      ファイル名: たとえば、request-approval-details-tf.xml

      ディレクトリ: タスクフローがWEB-INF/oracle/iam/ui/custom/ディレクトリに作成されることを確認します。WEB-INF/oracle/iam/ui/custom/ディレクトリの下のすべてのタスクフローが表示権限で保護されます。

      タスク・フローID: たとえば、request-approval-details-tf

    7. 「OK」をクリックします。

  3. ViewControllerプロジェクトの下の「アプリケーション・ソース」に移動し、hwtaskflow.xmlを削除します。

  4. タスク詳細ページを作成します。これを行うには、次の手順を実行します。

    1. 手順2で作成したタスクフローを開きます。Diagramモードに切り替えます。

    2. taskdetails1_jspx viewアクティビティの名前をrequest-approval-detailsなどに変更します。

    3. viewアクティビティを右クリックし、「ページの作成」を選択します。次の値を指定します。

      ファイル名: たとえばrequest-approval-details.jspx

      ディレクトリ: JSPXファイルをpublic_html/oracle/iam/ui/custom/ディレクトリに挿入します

      初期ページ・レイアウトおよびコンテンツ: Blank Page

    4. 「OK」をクリックします。

  5. ページにタスク情報を移入します。これを行うには、次の手順を実行します。

    1. 「データ・コントロール」パレットで、プロジェクト名を持つデータ・コントロールがすでに作成されています。このデータ・コントロールを使用して、詳細ページにタスク関連情報をレンダリングします。

    2. ページ上のタスク・オブジェクトを削除するには、図19-10に示すように、「作成」コンテキスト・メニューから、「ヒューマン・タスク」「ペイロードのない完了済タスク」を選択します。

      図19-10 ペイロードのない完了済タスク

      図19-10の説明が続きます
      「19-10 ペイロードのない完了済タスク」の説明

    3. 「アクションの編集」ダイアログ・ボックスで、「OK」をクリックします。

      アクション、基本情報、履歴、コメント、添付ファイルなどのタスク関連コンテンツがページに追加されています。


      注意:

      手動履行タスクの場合は、「ペイロードを持つ完了済タスク」オプションを選択してペイロード・データを表示することもできます。承認、チャレンジまたは情報の提供タスクでは、手順7で説明したOracle Identity Managerタスクフローを再使用してペイロード関連情報を表示できます。

  6. アプリケーション・ナビゲータで、図19-11に示すように「ライブラリの表示」オプションを有効にします。これにより、OIM ビュー共有ライブラリからカスタム・タスク詳細タスクフローにタスクフローをドラッグ・アンド・ドロップできます。

    図19-11 「ライブラリの表示」の有効化

    図19-11の説明が続きます
    「図19-11 「ライブラリの表示」の有効化」の説明

  7. リクエスト情報を「詳細」ページに追加します。OIMビュー共有ライブラリの次のタスクフローを「詳細」ページのリージョンとしてドロップして、リクエスト関連情報を表示できます。

    • WEB-INF/oracle/iam/ui/catalog/tfs/request-summary-information-tf.xml: このタスクフローは基本リクエスト情報を示します。手動履行タスクには適用されません。

    • WEB-INF/oracle/iam/ui/catalog/tfs/request-summary-details-tf.xml: このタスクフローはターゲット・ユーザー、関連リクエストおよび依存リクエストを示します。手動履行タスクには適用されません。

    • WEB-INF/oracle/iam/ui/catalog/tfs/catalog-tf.xml: このタスクフローは、リクエスト内の各アイテムのカート・アイテムとフォーム・データを示します。ロールの作成、変更または削除以外のすべてのリクエスト・タイプに使用する必要があります。このタスクフローは、承認、チャレンジ、情報の提供および手動履行タスクに使用できます。

    • WEB-INF/oracle/iam/ui/role/tfs/create-role-train-tf.xml: このタスクフローは、リクエストのロール・タイプの作成、変更または削除に対してcatalog-tfタスクフローのかわりに使用する必要があります。チャレンジ、情報の提供および手動履行タスクには適用されません。

  8. 電子メール通知用に別のページを追加します(オプション)。デフォルトでは、電子メール通知の送信について、電子メール用に別のページがない場合は、この項で開発した同じタスク詳細ページが電子メール通知で送信されます。場合によっては、電子メール通知で送信する情報を制限する必要があります。そのような場合は、電子メール通知用に別のページを開発できます。電子メール・ページも、同じタスク詳細タスクフローの一部になります。電子メール用カスタム・ページの作成の詳細は、『Oracle Fusion Middleware Oracle SOA Suite開発者ガイド』の電子メール通知の作成に関する項を参照してください。

  9. タスクフローをoracle.iam.ui.custom共有ライブラリの一部としてデプロイします。バインド・タスクフローのデプロイの詳細は、「Oracle Identity Managerへのカスタム・コードのデプロイ」を参照してください。

  10. カスタム・タスクフローを使用するようにヒューマン・タスクを構成します。これを行うには、次の手順を実行します。

    1. WebLogicユーザーとしてOracle Enterprise Managerにログインします。

    2. 「Farm_IAM_DOMAIN」「SOA」「soa_infra (SOA_SERVER」)「デフォルト」「COMPOSITE_NAME」に移動します。コンポジット名の例はDefaultRequestApproval[5.0]です。

    3. 「コンポーネント・メトリック」「HUMAN_TASK」をクリックします。ヒューマン・タスクは、図19-12に示すようにApprovalTask、ChallengeTaskまたはManualProvisioningTaskにすることができます。

      図19-12 ヒューマン・タスク

      図19-12の説明が続きます
      「図19-12 ヒューマン・タスク」の説明

    4. 「管理」タブをクリックします。

    5. 次に示すように、既存のエントリのURIを、カスタム・タスクフローを指すように変更します。

      アプリケーション名: Worklist

      ホスト名: OIMExternalFrontendURLのホスト名

      HTTPポート: SSLが構成されていない場合はOIMExternalFrontEndURLのHTTPポート

      HTTPSポート: SSLが構成されている場合はOIMExternalFrontEndURLのHTTPSポート

      URI: /identity/faces/adf.task-flow?_id=TASKFLOW_ID&_document=TASKFLOW_DOCUMENTの形式です。たとえば、/identity/faces/adf.task-flow?_id=request-approval-details-tf&_document=WEB-INF/oracle/iam/ui/custom/request-approval-details-tf.xmlです

  11. このカスタム・タスクフローを再使用するすべてのヒューマン・タスクについて手順10を繰り返します。

  12. すべてのサーバーを再起動します。

19.8 追加のリクエスト・フォームの構成

ユーザーは、リクエストの承認者に役立つ追加のリクエスト情報を入力できます。内容は次のとおりです。

19.8.1 追加のリクエスト情報の概要

カート項目のリクエストまたはリクエスト自体に関する追加情報は、リクエスト送信時に指定できます。デフォルト・フォーム情報が十分でない場合は、リクエスト承認の決定に必要な場合があります。追加情報については次の機能がサポートされます。

19.8.1.1 カート項目のリクエストの追加情報

カスタム・タスクフローが開発されたら、ユーザーはリクエストの実行時にカート項目に関する追加情報を指定できます(role/account/entitlement)。次のサンプル・スクリーンショットに示すように、カート項目のリクエストに関する追加情報フォームを指定できます。

addl_req_info1.gifについては周囲のテキストで説明しています。

ユーザーが追加情報アイコン(赤でマーク)をクリックすると、カスタム・フィールドのあるフォームが表示されます。ユーザーは、リクエストの承認者に役立つ適切な情報を入力できます。

リクエストの承認者は、カート項目レベルで指定されている追加のリクエスト情報を、表示または更新(あるいはその両方が)できます。リクエストの承認者は、「受信ボックス」ページの「アイデンティティ・セルフ・サービス」または「保留中の承認」ページからリクエストにアクセスできます。

19.8.1.2 リクエストの追加情報

リクエストに関する追加情報、たとえばユーザーの変更リクエストに関する追加情報が必要な場合があります。カート項目レベルの追加情報とは異なり、カート送信UIにこのタイプの追加情報の明示的なプレースホルダはありません。ただし、カスタム・タスクフローの開発後、カート詳細ページをカスタマイズして、リクエストに関する追加情報を表示するリンクを作成できます。

19.8.2 追加のリクエスト情報用カスタム・タスクフローを開発するためのガイドラインについて

追加のリクエスト情報用カスタム・タスクフローの開発には、次のことが関係します。

19.8.2.1 追加のリクエスト情報用カスタム・タスクフローの実装

追加のリクエスト情報を指定および表示するために使用できるカスタム・タスクフローを実装するには、次の手順を実行します。

  1. カスタム・タスクフローを、ViewControllerプロジェクトにおいてバインド・タスクフローとして開発します。ViewControllerプロジェクトの設定の詳細は、「ViewControllerプロジェクトの設定」を参照してください。デフォルト・パッケージとしてoracle.iam.ui.customを指定します。

  2. 追加のフォームをレンダリングするタスクフローを作成します。タスクフローがWEB-INF/oracle/iam/ui/custom/ディレクトリまたはそのサブディレクトリ(/WEB-INF/oracle/iam/ui/custom/sample/catalog/tfs/additional-role-info.xml#additional-role-infoなど)にあることを確認します。

  3. 必要に応じて、タスクフローの入力パラメータを定義します。

    次の表に、タスクフローの起動時に渡される事前定義済入力パラメータを示します。

    パラメータ名 タイプ 説明
    additionalRequestInfo oracle.iam.ui.common.model.catalog.requestdetails.AdditionalRequestInfo AdditionalRequestInfoインタフェースのインスタンス。

    リクエスト・レベルおよびカート項目レベルの追加のリクエスト属性値を設定および取得するために使用します。インタフェース・メソッドの詳細は、「AdditionalRequestInfoインタフェースの理解」を参照してください。

    requestFormContext oracle.iam.ui.platform.view.RequestFormContext RequestFormContextのインスタンス。

    RequestFormContextによって、リクエストおよび現在選択しているカート項目に関する様々なコンテキスト情報が指定されます。

    たとえば、RequestFormContextで指定された情報を活用して、カスタム・タスクフローの入力コンポーネントを読取り専用モードで、または編集可能モードでレンダリングする必要があるかどうかを決定できます。

    詳細は、「RequestFormContextで使用可能なEL式」を参照してください。


  4. タスクフローをoracle.iam.ui.custom共有ライブラリの一部としてデプロイします。バインド・タスクフローのデプロイの詳細は、「Oracle Identity Managerへのカスタム・コードのデプロイ」を参照してください。

19.8.2.2 プロジェクトに対して開発されるマネージドBeanでの追加情報の保存と取得

次に示すように、additionalRequestInfo pageFlowScope入力パラメータを使用して、リクエストまたはカート項目のリクエストに関する追加情報を取得および格納できます。

AdditionalRequestInfo additionalRequestInfo  =  (oracle.iam.ui.common.model.catalog.requestdetails.AdditionalRequestInfo) AdfFacesContext.getCurrentInstance().getPageFlowScope().get("additionalRequestInfo");

注意:

oracle.iam.ui.common.model.catalog.requestdetails.AdditionalRequestInfoインタフェースについては、「AdditionalRequestInfoインタフェースの理解」で説明しています。

カート項目レベルのリクエストに関する追加情報を設定または取得するには、次の文を使用します。

startDate = (Date additionalRequestInfo.getAttribute(cartItemId, START_DATE);
contractNumber = (String) additionalRequestInfo.getAttribute(cartItemId,  "CONTRACT_NUMBER" );

同様に、カート項目レベルの追加情報を設定するには、次の文を使用します。

contractNumber = (String) additionalRequestInfo.setAttribute(cartItemId,  "CONTRACT_NUMBER" , "123");

注意:

このコンテキストで選択した現在のカートID項目を取得するには、次に示すようにrequestFormContext pageFlowScope入力パラメータを使用します。
RequestFormContext requestFormContext = (oracle.iam.ui.platform.view.RequestFormContext) AdfFacesContext.getCurrentInstance().getPageFlowScope().get("requestFormContext");
cartItemId = requestFormContext.getUniqueCartItemIdentifier();

リクエストに関する追加情報を設定または取得するには、次の文を使用します。

temporaryLocation = (String) additionalRequestInfo.getAttribute("TEMPORARY_LOC");
additionalRequestInfo.setAttribute("TEMPORARY_LOC", "A-24");

19.8.2.3 AdditionalRequestInfoインタフェースの理解

次のコードに示すように、AdditionalRequestInfoインタフェースによってSerializableが拡張されます。そのため、カスタム・タスクフローのpageFlowScopeに、AdditionalRequestInfoのインスタンスを格納できます。

public interface AdditionalRequestInfo extends Serializable {
    public void setAttribute(String name, Serializable value);
    public void setAttribute(String cartItemId, String name, Serializable value);
    public Serializable getAttribute(String name);
    public Serializable getAttribute(String cartItemId, String name);
}

個々のカート項目の追加情報を取得または設定するには、次の文を使用します。

public void setAttribute(String cartItemId, String name, Serializable value);
public Serializable getAttribute(String cartItemId, String name);

cartItemIdパラメータを指定する必要があります。RequestFormContextのgetUniqueCartItemIdentifier EL式を使用して、選択したcartItemIdにアクセスできます。詳細は、「RequestFormContextで使用可能なEL式」を参照してください。

リクエスト・レベルの追加情報を取得または設定するには、次の文を使用します。

public void setAttribute(String name, Serializable value);
public Serializable getAttribute(String name);

19.8.2.4 RequestFormContextを使用した必要なカスタマイズの実行

タスクフローを起動する様々なフロー(カート送信、リクエスト詳細および承認詳細フロー)を区別するには、カスタム・タスクフローに渡されるrequestFormContextパラメータを利用できます。

たとえば、リクエスト・サマリーについて追加情報タスクフローのコンポーネントを読取り専用モードで表示する場合は、次の文を使用します。

if  (requestFormContext.getActionType() == requestFormContext.ActionType.APPROVAL) {
    isFormUpdateable = Boolean.TRUE;
}

19.8.3 追加のリクエスト情報用カスタム・タスクフローの構成

追加のリクエスト情報用カスタム・タスクフローの構成については、次の項で説明します。

19.8.3.1 カート項目レベルのカスタム・タスクフローの構成

カート送信UIには、追加のカート項目情報を表示できる明示的なプレースホルダがあります。

ユーザーが、任意のカート項目に固有の追加情報(アプリケーション・インスタンス、ロール、権限など)を指定するようにできます。ただし、構成できるのは、エンティティ・タイプ(ロール、権限またはアプリケーション・インスタンス)当たり1つの追加情報タスクフローだけです。この構成は、次のシステム・プロパティを利用して行います。

  • カタログ追加アプリケーション詳細タスク・フロー: アプリケーション・インスタンス・エンティティ・タイプに適用できるカスタム追加情報タスクフローに値を設定します。

  • カタログ追加権限詳細タスク・フロー: 権限エンティティ・タイプに適用できるカスタム追加情報タスクフローに値を設定します。

  • カタログ追加ロール詳細タスク・フロー: ロール・エンティティ・タイプに適用できるカスタム追加情報タスクフローに値を設定します。


注意:

システム・プロパティの設定の詳細は、『Oracle Identity Managerの管理』のシステム・プロパティの管理に関する項を参照してください。

たとえば、ロール・エンティティ・タイプの特定の追加情報タスクフローを起動するには、「カタログ追加ロール詳細タスク・フロー」システム・プロパティの値を次のように設定できます。

/WEB-INF/oracle/iam/ui/custom/sample/catalog/tfs/additional-role-info.xml#additional-role-info

「カート項目」表は、カート・チェックアウト、「リクエスト・サマリー」および「リクエスト承認」ページにおいて、UI操作にカート項目が関係するたびに表示されます。カート項目の追加情報アイコンをクリックすると、次のサンプル・スクリーンショットに示すように、カート・エンティティ・タイプ(ロール、アプリケーション・インスタンス、権限など)に対して構成されているカスタム・タスクフローが表示されます。

addl_req_info2.gifについては周囲のテキストで説明しています。

注意:

カート・アイテム・レベルの追加情報の構成では、Oracle Identity Manager 11gリリース2 (11.1.2.2.0)に適用されるアプローチを使用しないことをお薦めします。

19.8.3.2 リクエスト・レベルでの追加のリクエスト情報の構成

リクエスト・レベルで追加情報が必要な一部のシナリオがあります。たとえば、ユーザー変更リクエストの送信中、リクエスト元がユーザーに関する追加情報を指定し、承認者がそれらを確認できます。この機能は、デフォルトではIdentity Self Serviceで使用できず、カスタム・タスクフローの開発、サンドボックスおよびUIカスタマイズの作成、およびカスタム・タスクフローとUI間のリンクの確立によって実装する必要があります。

ユーザーが「ユーザーの変更」リクエストなどのリクエストに固有の追加情報を指定できるようにすることができます。そのためには、UIをカスタマイズしてリンクまたはボタンをカタログ・チェックアウト・ページに追加できます。新規に追加したリンクまたはボタンをカート・チェックアウト、「リクエスト・サマリー」および「リクエスト承認」ページに対して表示できます。リンクまたはボタンをクリックすると、リクエストに関する追加情報を表示するポップアップを起動できます。

コンポーネントの子孫として定義された属性のセットによって、起動されるカスタム・タスクフロー、およびポップアップ・ウィンドウの表示方法が決定されます。次の表に、事前定義済属性をリストします。

名前 タイプ 必須 説明
taskFlowId java.lang.String はい コンポーネントによって起動されるカスタム・タスクフローのID。
dialogTitle java.lang.String オプション カスタム・タスクフローが起動されるポップアップ・ウィンドウのタイトル。値を指定しない場合は、タイトルが空白になります。
dialogTitleIcon java.lang.String オプション カスタム・タスクフローが起動されるポップアップ・ウィンドウに表示されるアイコンへのパス。値を指定しない場合は、デフォルトのアイコンが使用されます。

次に、「追加のリクエスト情報」ポップアップを起動するためにUIカスタマイズを通じて追加されたコマンド・リンクのサンプル・コード・スニペットを示します。


注意:

UIカスタマイズを通じたコマンド・リンクの追加の詳細は、「リンクまたはボタンの追加」を参照してください。

<af:commandLink xmlns:af="http://xmlns.oracle.com/adf/faces/rich" id="e8065932664" text="Additional Cart Information" actionListener="#{catalogRequestBean.launchAdditionalRequestInfoTaskFlow}" rendered="#{backingBeanScope.additionalInfoHelperBean.renderAdditionalDetailsForRequest}">
         <af:clientAttribute xmlns:af="http://xmlns.oracle.com/adf/faces/rich" name="taskFlowId" value="#{backingBeanScope.additionalInfoHelperBean.additionalInfoTaskFlowIdForRequest}"/>
         <af:clientAttribute xmlns:af="http://xmlns.oracle.com/adf/faces/rich" name="dialogTitleIcon" value="/images/request_ena.png"/>
         <af:clientAttribute xmlns:af="http://xmlns.oracle.com/adf/faces/rich" name="headerText" value="Additional Cart Information"/>
         <af:clientAttribute xmlns:af="http://xmlns.oracle.com/adf/faces/rich" name="dialogTitle" value="#{backingBeanScope.additionalInfoHelperBean.popupTitle}"/>
</af:commandLink>

このサンプル・コード・スニペットでは、「追加のカート情報」カスタム・リンクがカート詳細ページに追加されます。説明:

  • コマンド・リンクのactionlistenerは次のようにcatalogRequestBean.launchAdditionalRequestInfoTaskFlowに設定する必要があります。

    actionListener="#{catalogRequestBean.launchAdditionalRequestInfoTaskFlow}"
    
  • カスタム・リンクは、EL式を使用してレンダリングされたプロパティに対して選択的に表示できます。

    #{backingBeanScope.additionalInfoHelperBean.renderAdditionalDetailsForRequest}
    

    このEL式を使用するには、isRenderAdditionalDetailsForRequestメソッドを伴うマネージドJAVA Bean (additionalRequestInfoHelperBeanなど)を開発します。このメソッドでは、リンクを表示する必要の有無に基づき、ブール値(trueまたはfalse)が返されます。マネージドBeanの詳細は、「マネージドBeanおよびタスク・フローの開発」を参照してください。

  • taskFlowId属性の値として指定されたEL式、#{backingBeanScope.additionalInfoHelperBean.additionalInfoTaskFlowIdForRequest}を使用して、異なるタスクフローを起動します。これは必須属性です。

    このEL式を使用するには、getAdditionalInfoTaskFlowIdForRequestメソッドを、additionalRequestInfoHelperBeanという名前のマネージドBeanにインクルードします。このメソッドにより、oracle.iam.ui.custom-dev-starter-pack.warの一部としてデプロイされるカスタム・タスクフローのIDを表す文字列値(/WEB-INF/oracle/iam/ui/custom/catalog/tfs/additional-cart-info-tf.xml#additional-cart-info-tfなど)が返されます。

  • dialogTitle属性の値として指定されたEL式、#{backingBeanScope.additionalInfoHelperBean.popupTitle}を使用して、異なるポップアップ・ウィンドウ・タイトルを設定します。

    このEL式を使用するには、getPopupTitleメソッドを、additionalRequestInfoHelperBeanという名前のマネージドBeanにインクルードします。このメソッドにより、ポップアップ・ウィンドウ・タイトルとして表示される、適切な文字列値が返されます。

19.8.4 追加のリクエスト情報の検証

追加のリクエスト情報で必須の属性値が送信される場合、RequestDataを検証可能なRequestDataValidatorプラグインを使用して、その送信を検証できます。

次に示すのは、バリデータ・プラグインを登録する際の、ロールの割当て操作用のplugin.xmlファイルの構成のサンプルです。この構成により、すべてのロールの割当て操作に対してmycompany.iam.plugin.validation.AssignRolesDataValidatorが呼び出されます。

<plugins pluginpoint="oracle.iam.request.plugins.RequestDataValidator"> 
    <plugin pluginclass="mycompany.iam.plugin.validation.AssignRolesDataValidator" version="1.0" name="AssignRolesDataValidator">
           <metadata name="DataValidator">
                  <value>AssignRolesDataset</value> 
           </metadata>
    </plugin>
</plugins>

同様に、権限の割当て操作用には、次のようにplugin.xmlを構成できます。

<plugins  pluginpoint="oracle.iam.request.plugins.RequestDataValidator">
    <plugin  pluginclass="mycompany.iam.plugin.validation.AssignEntitlementsDataValidator"  version="1.0" name="AssignEntitlementsDataValidator">
           <metadata name="DataValidator">
                  <value> EBSForm.UD_EBS_RESP</value> 
           </metadata>
    </plugin>
</plugins>

19.9 UIカスタマイズの移行

あるOracle Identity Manager環境から別の環境、つまりテスト環境から本番環境(T2P)へのUIカスタマイズの移行は、次の使用例のヘルプを使用して説明します。

使用例1: 増分T2P

開発サイクルの間、構成の増分構築や、あるOracle Identity Manager設定から別の設定へ引き続き構成を移動します。これを行うには、『Oracle Identity Managerの管理』のデプロイメント・マネージャを使用した増分移行に関する項の説明に従ってデプロイメント・マネージャを使用します。しかし、デプロイメント・マネージャを使用したデータのエクスポートおよびインポートには、UIカスタマイズは含まれません。このため、Oracle Identity Managerではサンドボックスが用意されています。これにより、サンドボックスでバインドされたカスタマイズを作成し、テストし、最終的に増分ベースでのエクスポート/インポートが可能になります。

ただし、カスタマイズの増分移行には問題があります。あらかじめサンドボックスをエクスポートしておく必要があるうえに、公開されるのは変更点のみです。しかし、すでに変更点が公開されていると、エクスポートできません。これは既知の問題です。

使用例2: Fusion Middlewareフレームワーク・ベースの完全T2P

開発サイクルおよびテスト・サイクルが完了すると、実際のデプロイメントの初日に本番環境を設定します。テスト環境から本番環境へすべての構成およびカスタマイズを移動します。

Fusion Middlewareフレームワーク・ベースのユーティリティを使用したOracle Identity Managerの完全T2Pは、UIカスタマイズの移動もサポートしています。Fusion Middlewareフレームワーク・ベースの完全T2Pは、Fusion Middleware T2Pユーティリティ(copyBinary、pasteBinary、copyconfig、extractMoveplan、pasteconfigなど)を使用して実行されます。デプロイメント・マネージャは使用しません。完全T2Pの詳細は、『Oracle Fusion Middleware管理者ガイド』のテスト環境から本番環境への移動に関する項を参照してください。

T2Pで、公開済サンドボックスのリストが表示されなくても、問題ではありません。宛先または本番環境ではなく、テスト環境(T2Pソース)で公開済/非公開の変更のトラッキングが行われていると考えられるためです。

ソースまたはテスト環境での非公開サンドボックスでは、次のことが当てはまります。

  • これらのサンドボックスの有効範囲を拡大した後、非公開サンドボックスを増分ワークとして後から移動することが考えられますが、それらは現在、本番環境には含まれていません。

  • 非公開サンドボックスはテストされていないため、本番環境には含めません。

19.10 UIカスタマイズのベスト・プラクティス

この項では、次のUIカスタマイズのベスト・プラクティスとガイドラインについて説明します。

詳細説明のあるサンドボックスを作成する

サンドボックスの作成時に、詳細説明を付けて作成し、作成中のサンドボックスの対象のエンティティをすべてリストします。たとえば、アプリケーション・インスタンスを作成中の場合は、アプリケーション・インスタンスの作成用にこのサンドボックスを作成していることをメモしておきます。アプリケーション・インスタンスの作成時にこのサンドボックスを公開し、Identity Self Serviceに移動してUIカスタマイズを実行する別のサンドボックスを作成します。これは、2人以上のユーザーが異なるサンドボックスを作成して、同じエンティティを作成し(この例ではアプリケーション・インスタンス)、それを異なるタイミングで公開した場合の問題を回避するためです。

サンドボックスを公開する前のMDSのバックアップを作成する

サンドボックスを公開する前に、MDSのバックアップを作成します。

すべてのサンドボックスをターゲット環境に移行し、同じ順序で公開する

最初の環境(またはソース環境)で公開されたすべてのサンドボックスは、2番目の環境(またはターゲット環境)に移行して公開する必要があり、サンドボックスを同じ順序で公開する必要があります。このガイドラインに従わない場合、一部のカスタマイズがターゲット環境で失われ、ADFエラーまたは欠落属性表示ラベルが生成されます。

複数のソース環境から単一のターゲット環境へのサンドボックスの移行はサポートされません。様々なシナリオの詳細情報は、「同時実行の競合への対処」および「同時実行性の問題のトラブルシューティング」を参照してください。

公開前のサンドボックスをエクスポートする

カスタマイズをある環境から別の環境に移行することを計画している場合は、公開前にすべてのサンドボックスをエクスポートする必要があります。すでに公開されているサンドボックスはエクスポートできません。

公開前のサンドボックスをテストする

サンドボックスを使用する主な目的は、カスタマイズを実験できるようにすることです。したがって、関連ユースケースの入念なテスト後にのみサンドボックスを公開してください。サンドボックスが公開された後、簡単には非公開にできません。これは、別の環境へのサンドボックスの移行にも適用され、その場合は健全性テスト後にのみサンドボックスを公開する必要があります。

デフォルトのコンポーネントIDは変更しない

図19-13に示すように、WebCenter Composerを使用してコンポーネントIDを表示および編集できます。

図19-13 コンポーネントID

図19-13の説明が続きます
「図19-13 コンポーネントID」の説明

システム定義ページでのデフォルト・コンポーネントのIDの変更は避ける必要があります。コンポーネントIDは読取り専用として扱う必要があります。たとえば、コンポーネントが変更に基づいて再レンダリングされると思われる場合、またはコンポーネントのクリックが参照される場合、別のコンポーネントのPartial Triggersプロパティで使用できます。

ページからのコンポーネントの削除時に裁量を使用する

コンポーネント・バインディング・プロパティが設定されている場合は特に、ページからシステム定義コンポーネントを削除する際に注意してください。これらのコンポーネントはOracle Identity Managerとともに出荷されるマネージドBeanから参照でき、ページからコンポーネントを削除するとバインディングは設定されなくなります。これにより、NullPointerExceptionなどのエラーが発生することがあります。このような場合は、Visibleプロパティをfalseに設定することでページからコンポーネントを非表示にすることをお薦めします。

コンポーネントをレンダリングされていないものとしてマークする(コンポーネントの表示オプションを選択解除する)ことは、コンポーネント・バインディングに対して同じ効果を持ち、設定されないことを意味します。

デフォルトのEO/VOの直接変更はサポートされていない

MDSからEO/VO XMLをエクスポートして変更するなど、UserVO、OrganizationVO、RoleDetailsVOなどのシステム定義のEO/VOに対する直接変更はサポートされていません。Identity System Administrationの「ユーザー」、「組織」、「ロール」または「カタログ」システム・エンティティ・リンクを介してアクセスされるフォーム・デザイナは、新規属性の追加または既存の属性の変更を行うためにサポートされる唯一の方法です。

JSFFタグのネームスペースを指定する

エクスポートされたサンドボックスにJSFFコンポーネントを手動で追加する場合は、各JSFFタグのネームスペースを指定します。次のコード・スニペットは、新しいaf:outputTextが追加されるカスタマイズ・ドキュメントの例を示しています。

<?xml version='1.0' encoding='UTF-8'?>
<mds:customization version="11.1.1.66.49" xmlns:mds="http://xmlns.oracle.com/mds" motype_local_name="root" motype_nsuri="http://java.sun.com/JSP/Page">
   <mds:insert parent="sdh1" position="first">
      <af:outputText value="Some text" id="e7869964958"/>
   </mds:insert>
</mds:customization>

af:outputTextにはネームスペースが指定されていないことに注意してください。このようなコード・スニペットは、ユーザーがページを開いたときにjava.io.IOException: Stream closedの原因となります。サンドボックスのインポート時またはサンドボックスのアクティブ化時に例外はスローされません。例外は、ページがアクセスされる場合にのみスローされます。

次のコード・スニペットは、指定されたxmlns:af="http://xmlns.oracle.com/adf/faces/rich"ネームスペースで修正されたaf:outputTextを示しています。

<?xml version='1.0' encoding='UTF-8'?>
<mds:customization version="11.1.1.66.49" xmlns:mds="http://xmlns.oracle.com/mds" motype_local_name="root" motype_nsuri="http://java.sun.com/JSP/Page">
   <mds:insert parent="sdh1" position="first">
      <af:outputText xmlns:af="http://xmlns.oracle.com/adf/faces/rich" value="Some text" id="e7869964958"/>
   </mds:insert>
</mds:customization>

カスタマイズは、サイト/サイト・レイヤーでのみ許可される

たとえばエクスポートされたサンドボックスでMDSカスタマイズ・ドキュメントを手動で編集する場合、site/siteカスタマイズ・レイヤーのドキュメントの編集のみ許可されます。site/oimedition/xeedition/eeなどの他のすべてのカスタマイズ・レイヤーは使用しないでください。

ドキュメントが存在するレイヤーをドキュメント・パスから検索できます。たとえば、oracle/iam/ui/myinformation/pages/mdssys/cust/site/site/my-info.jsff.xmlドキュメントはsite/siteレイヤーにあります。レイヤー名はmdssys/custの後に指定されます。

WebCenter Composerを使用して行われたすべてのカスタマイズはsite/siteレイヤーに格納されます。ホーム・ページのパーソナライズとその他のパーソナライズはuser/USER_NAMEレイヤーに格納されます。パーソナライズ・ドキュメントは手動で編集できますが、これらはUSER_NAMEユーザーにのみ適用できます。

各アプリケーション・インスタンスまたは権限フォームには3つのページ・フラグメント(JSFF)がある

すべてのアプリケーション・インスタンスまたは権限フォームには次のページ・フラグメント(JSFF)があります。

  • 作成: アプリケーション・インスタンスまたは権限をリクエストした場合に表示されます

  • 変更: 既存のアプリケーション・インスタンスまたは権限を変更した場合に表示されます。ユーザー・プロファイルのアプリケーション・インスタンスまたは権限ページおよびIdentity Self Serviceの「マイ・アクセス」セクションでアプリケーション・インスタンスまたは権限詳細を表示した場合にも使用されます。

  • バルク: バルク・リクエストに対して表示されます

アプリケーション・インスタンスまたは権限フォームをカスタマイズするたびに、通常は3つのページ・フラグメントすべて(JSFF)または少なくとも作成および変更ページ・フラグメントをカスタマイズします。作成ページ・フラグメントはアプリケーション・インスタンスまたは権限に対してリクエストする場合にカスタマイズでき、変更ページ・フラグメントは既存のアプリケーション・インスタンスまたは権限を変更する場合にカスタマイズできます。フォーム・デザイナで「ビューの再生成」ボタンをクリックすると、3つのページ・フラグメントがすべて再生成されます。

「「検索可能」ピックリスト」オプションを使用する場合は裁量を使用する

ルックアップUDFを作成する場合、「「検索可能」ピックリスト」オプションを選択するオプションがあります。このオプションは、ページにUDFを追加する際に「入力値リスト」コンポーネントを使用することを計画する場合にのみチェックする必要があります。「「検索可能」ピックリスト」の値は後で変更できないため、これはUDFの作成時に決定する必要があります。「「検索可能」ピックリスト」オプションを選択することを決定した場合、追加のVO属性が作成されます。属性には__c_Id__cの接尾辞が付けられ、内部的にのみ使用されます。ページにUDFを追加する場合は、__c_Id__c接尾辞付きの属性ではなく通常属性を選択および追加します。

「「検索可能」ピックリスト」オプションを選択しなかった場合は、ページにUDFを追加する際に選択する適切なコンポーネントは「入力値リスト」ではなく「選択肢を1つ選択」です。

UDFの追加/更新後のサインアウト

新規UDFの追加または既存のUDFの更新後に、Identity Self-ServiceまたはIdentity System Administrationからサインアウトする必要があります。これは、VOの古いバージョンがキャッシュされ、新しい変更が取得されないというADFレイヤーの既知のキャッシングの問題を回避するためです。

サインアウトを忘れてVOが使用されているページに直接移動した場合、JBO-25058: UserVOでタイプ属性の定義MyUDF__c ofが見つかりませんのようなエラーが表示されるか、ページにUDFを追加する際にWebCenter ComposerカタログでUDFを選択できません。

ページにUDFを追加した後にUDFを検証する

ページにUDFを追加し、UDFが動作しない場合、たとえば入力コンポーネントが編集可能である必要があるのに読取り専用として表示されたり、指定したUDF値が正しく保存されていない場合は、次のことを確認できます。

  • 『Oracle Identity Managerの管理』のエンティティとそれに対応するデータ・コンポーネントおよびビュー・オブジェクトに関する項に記載されている説明に従ってページにUDFを追加する際に適切なデータ・コンポーネントとVOを使用していることを確認します。

  • UDFが正しく作成されていることを確認します。作成されるUDFについて、ユーザーUDFのUSR表など、対応するデータベース表に列が作成されている必要があり、ユーザーUDFのUser.xmlなど、対応するデータセットが更新されている必要があります。

これらのいずれかがない場合、UDFは正しく作成されていないため、再度作成する必要があります。

『Oracle Identity Managerの管理』のカスタム属性の追加に関する項で説明するように、autoSubmit=trueを設定するのを忘れ、UDFコンポーネントでvalueChangeListenerを設定した場合、UDFは動作しますが、「保存」/「取消」または「適用」/「元に戻す」ボタンは有効になりません。

正しいLDAP属性でUDFをマップする

Oracle Identity ManagerデプロイメントのPDFをLDAPモードで作成する場合、UDFを適切なLDAP属性でマップします。

カスタム・マネージドBeanをoracle.iam.ui.custom-dev-starter-pack.war共有ライブラリの一部としてデプロイする

カスタム・マネージドBeanを導入する場合、Beanはoracle.iam.ui.custom-dev-starter-pack.war共有ライブラリの一部としてデプロイする必要があります。カスタム・マネージドBeanの推奨スコープは、pageFlowScopeまたはbackingBeanScopeです。カスタムBeanをsessionScopeで定義するのは避けて、かわりにpageFlowScopeの使用を検討してください。pageFlowScope Beanクラスはシリアライズ可能である必要があります。java.io.Serializableインタフェースを実装し、すべてのクラス・フィールドもシリアライズ可能である必要があります。RichOutpuTextなどのコンポーネント・バインディングはシリアライズ可能でないため、backingBeanScope Beanで定義する必要があります。カスタム・タスク・フローを実装している場合、推奨されるプラクティスは2つのマネージドBeanを持つことです。

  • タスクフローの状態を保持するpageFlowScope Bean (存在する場合)

  • コンポーネント・バインディングactionListeners (または一般にはリスナー)のbackingBeanScope bean。backingBeanScope BeanはELを介してpageFlowScope Beanおよびそのプロパティにアクセスできますが、その逆は不可能です。

エンティティ・タスクフローの置換を検討する

ページのデフォルトのルック・アンド・フィールを大幅に変更する場合、タスクフロー全体を完全に再実装する方がよい場合があります。そうすると、Oracle Identity Managerのアップグレード後もカスタム・タスクフローが動作することが保証されます。これは、事前定義済みページの1つを大幅にカスタマイズする場合には当てはまらないことがあります。Oracle Identity Manager UIのカスタマイズはアップグレードセーフですが、その例外はアップグレード後にカスタマイズが破損しているか失われた場合です。これは、フローが完全に変更された場合にカスタマイズを保持できないことがあるためです。

タスクフロー全体を再実装することを決定した場合は、ホーム・ページの1つに新しいホーム・ページ・タイルを追加して、新規タスクフローを起動し、デフォルト・タスクフローを起動することで元のタイルを非表示にします。詳細は、「ホーム・ページへのタイルの追加」を参照してください。

Oracle Identity Manager WAR/EARファイルは更新しない

次のWAR/EARファイルは更新しないでください。

  • oracle.iam.console.identity.self-service.ear

  • oracle.iam.console.identity.sysadmin.ear

  • oracle.iam.ui.view.war

  • oracle.iam.ui.oia-view.war

  • oracle.iam.ui.model.ear

これらのWAR/EARファイルの1つに対する変更は、アップグレード時に失われます。

アップグレードできるWARファイルはoracle.iam.ui.custom-dev-starter-pack.warだけです。実際に、このWARファイルは、カスタム・マネージドBean、リソース・バンドル、タスクフローなど、カスタマイズで使用することを意図しています。oracle.iam.ui.custom-dev-starter-pack.warに対する変更はアップグレード時に保持されます。

特定のホーム・ページ・タイルを条件付きで表示することを検討する

デフォルトでは、すべてのホーム・ページ・タイルが表示されます。ただし、特定のユーザーに対して一部のタイルを非表示にして、ページにアクセスできないようにすることが必要な場合があります。たとえば、エンド・ユーザーに対して「プロビジョニング・タスク」タイルを非表示にすることが必要な場合があります。詳細は、「タイルの条件付き表示」を参照してください。

カスタム・マネージドBeanからプラットフォームAPIを起動しない

カスタム・マネージドBeanでOracle Identity Managerデータ・ソースを使用してプラットフォームAPIを起動することはサポートされていません。OIMClientを通じて公開されるパブリックAPIのみ起動できます。

ルックアップUDFの作成時には「表示幅」の推奨値を使用する

ルックアップ・タイプUDFを作成する場合、「表示幅」フィールドの推奨値は40です。