ヘッダーをスキップ
Oracle® Fusion Middleware Oracle Identity Manager開発者ガイド
11g リリース2 (11.1.2.2.0)
B69536-07
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

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

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


注意:

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

Oracle Identity ManagerのIdentity Self Serviceユーザー・インタフェース(UI)は、Application Development Framework (ADF)に基づいており、カスタマイズの一貫性が保証されます。ADFによって、パッチおよびアップグレードから保護されたUIカスタマイズが可能になります。つまり、Oracle Identity Managerにパッチを適用したり、Oracle Identity Managerをアップグレードした後でも、UIカスタマイズが保持されることを意味します。

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

30.1 カスタマイズの概念

この項では、UIカスタマイズに関連する概念について、次の各項で説明します。

30.1.1 UIライブラリおよびアプリケーションのデプロイ

ADFは、組込みのカスタマイズおよびMDSカスタマイズをサポートします。新しいUIアーティファクトまたはスキンを開発し、それをカスタム・ライブラリWARファイルにパッケージ化することによって、カスタマイズが実現されます。スキンおよびスタイルシートは、UIのルック・アンド・フィールをカスタマイズできるメカニズムです。スタイルシートの変更やカスタム・スキンを使用する利点は、これらの変更が集中管理されており、簡単に管理できる点です。

図30-1は、様々なOracle Identity Manager UIライブラリと、その従属構造を示しています。

図30-1 Oracle Identity Manager UIライブラリ

図30-1の説明が続きます
「図30-1 Oracle Identity Manager UIライブラリ」の説明

カスタム・ライブラリは、デフォルトのライブラリを使用して構築する新しいタスク・フローを追加する場合に使用できるプレースホルダ・ライブラリです。セルフ・サービスEARでは、ライブラリ参照名oracle.iam.ui.customへのweblogic.xmlの依存が宣言されます。このライブラリは、oracle.iam.ui.custom-dev-starter-pack.warによって提供されます。組織の命名規則ごとに、カスタム・ライブラリのWARファイル名を変更できます。ただし、デプロイメント名(MANIFEST.MFのライブラリ拡張名)は、oracle.iam.ui.customとして保持される必要があります。そうでない場合、セルフ・サービスearはデプロイされません。

Oracle Identity Analytics (OIA)のデプロイメント名は、oracle.iam.ui.oia-viewです。

30.1.2 MDSカスタマイズの概要

MDSのカスタマイズ機能を使用して、次のカスタマイズ・パターンのアプリケーションを作成できます。

  • シード・カスタマイズ: アプリケーションのシード・カスタマイズとは、汎用化されたアプリケーションを特定のグループ(特定の業界やサイトなど)の要件に合せて変更するプロセスです。シード・カスタマイズはデプロイされたアプリケーションの一部として存在し、特定のデプロイ期間中保持されます。

  • ユーザー・カスタマイズ: ユーザー・カスタマイズでは、エンド・ユーザーは実行時に個々のプリファレンス(表にどの列を表示するかなど)に合せてアプリケーションの内容を変更できます。また、変更内容が、次回そのアプリケーションを開くときに保持されているようにできます。

  • 実行時カスタマイズ: Oracle WebCenterの機能を使用して、実行時にカスタマイズ可能なアプリケーションを作成できます。これにより、ビジネス・アナリストや管理者はWebブラウザ・インタフェースを使用して、エンド・ユーザー向けにアプリケーションをカスタマイズできます。

MDSでのアプリケーションのカスタマイズの詳細は、『Oracle Fusion Middleware Oracle Application Development Framework Fusion開発者ガイド』のMDSによるアプリケーションのカスタマイズに関する説明を参照してください。

30.1.3 Web Composerの概要

Oracle Web Composerは、デプロイ済で使用中のアプリケーションまたはポータルのカスタマイズやパーソナライズを可能にする革新的なコンポーネントです。Oracle Web Composerはすべての最新のWebブラウザで動作し、ビジネス・ディクショナリまたはリソース・カタログから情報およびコンポーネントを選択することによって、JSFアプリケーションとポータル・ページを編集できます。

Web Composerのカスタマイズ機能には、自社に合せたロゴの挿入や色の変更、複雑なカスタマイズ、ページへの項目の追加、ページのレイアウト変更、提供されたプロセスの変更、提供されたアプリケーションまたはポータルのビジネス要件に合せた特殊な調整などがあります。これらのカスタマイズは、Oracle Metadata Services (MDS)を使用してOracle Identity Managerデータベースに格納できます。たとえば、データベースにカスタマイズを格納するために、Web Composerはページの編集中に、ページのコピーまたはサンドボックスを作成します。このサンドボックスは、ランタイム・ページ・カスタマイズの保存、他のユーザーへの公開、または破棄が行われるまで、そのカスタマイズのグループを保存しておく一時記憶領域です。このように、カスタマイズは他のユーザーがプレビューすることができ、すべてのユーザーが参照できるようになる前に使用することを承認できます。サンドボックスの詳細は、「サンドボックスの管理」を参照してください。

パーソナライズでは、インタフェースまたはアプリケーション・ページの表示を変更します。1人のユーザーが行った変更が他のユーザーに影響することはありません。ページのパーソナライズは、個々のユーザーが任意の組合せのコンポーネントをページに追加することで、必要なときに、他のユーザーのページに影響を与えることなく実行できます。

Oracle Web Composerは、Oracle WebCenter FrameworkおよびWebCenter Servicesと統合されています。Oracle Web Composerコンポーネントを自分のJSFアプリケーション・ページに追加し、ユーザーがこれらのページを実行時に編集できるようにすることができます。このコンポーネントは、開発ライフサイクル中にいつでも必要に応じて追加できます。また、ページ・サービスを使用すると、ユーザーは実行時にページを作成できるようになります。Oracle Web Composerは、Oracle WebCenter Spaces内部で広く使用されており、ユーザーによるパーソナルおよびグループ・スペースのカスタマイズとパーソナライズが可能になっています。Oracle WebCenter Spacesアプリケーションは、ユーザーが自身の要件に合せて彼らの作業環境の管理および変更に積極的な役割を担う方法を実現しています。図30-2は、Oracle Web Composerアーキテクチャを示しています。

図30-2 Oracle Web Composerアーキテクチャ

図30-2の説明が続きます
「図30-2 Oracle Web Composerアーキテクチャ」の説明

30.2 サンドボックスの管理

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

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

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


    注意:

    サンドボックスを作成した後に、それをアクティブにする必要があります。サンドボックスをアクティブにしない場合、後でサンドボックスに対して操作を実行できなくなるか、必要な結果が得られない場合があります。たとえば、サンドボックスを作成してもそれをアクティブにしていない場合に、接続なしアプリケーション・インスタンスを作成し、カタログ同期のスケジュール済ジョブを実行し、Identity System Administrationにログインし、「カタログ」ページで接続なしアプリケーション・インスタンスのチェックアウトを試行すると、エラーが生成されます。サンドボックスを作成後、およびIdentity Self ServiceまたはIdentity System Administrationへの各ログイン後にアクティブ化した場合は、エラーなしでこの操作を実行できます。

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

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


    注意:

    サンドボックスを公開する前に、Identity Self ServiceまたはIdentity System Administrationのすべてのタブおよびページを閉じ、サンドボックスをZIPファイルにエクスポートして、完了済のUIカスタマイズのバックアップを作成します。

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


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

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


    注意:

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

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


注意:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

表30-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つにマージします。


30.2.2 サンドボックスの作成

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

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

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

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

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

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

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

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

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


    注意:

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

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

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

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


注意:

サンドボックスをアクティブ化または非アクティブ化する前に、「セルフ・サービス」または「システム管理」インタフェースですべてのタブを閉じる必要があります。

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

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

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


    注意:

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

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

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

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


    注意:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


    注意:

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


    注意:

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

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

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

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

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

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

30.2.6 サンドボックスの公開

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


注意:

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

  1. サンドボックスを公開する前に、すべての開いているタブおよびページを閉じます。

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

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

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

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

30.2.7 カートからのアイテムのチェックアウト

カートからアイテムをチェックアウトするには、次の手順を実行します。

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

  2. サンドボックスを作成します。サンドボックスの作成の詳細は、「サンドボックスの作成」を参照してください。

  3. 作成したサンドボックスをアクティブ化します。サンドボックスのアクティブ化の詳細は、「サンドボックスのアクティブ化および非アクティブ化」を参照してください。


    注意:

    サンドボックスをアクティブ化しなければ、接続なしアプリケーション・インスタンスの日付を保存できません。

  4. 接続なしアプリケーション・インスタンスdisc1を作成します。デフォルトでは、これが先頭で公開されます。接続なしアプリケーション・インスタンスの作成の詳細は、『Oracle Fusion Middleware Oracle Identity Manager開発者ガイド』の接続なしアプリケーション・インスタンスの作成に関する項を参照してください。

  5. サンドボックスを発行します。サンドボックスの公開の詳細は、「サンドボックスの公開」を参照してください。

  6. カタログ同期化ジョブを実行します。

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

  8. 「カタログ」をクリックし、disc1を検索します。

  9. 「追加」をクリックし、アイテムをカートに追加します。

  10. カートからチェックアウトをクリックします。

30.2.8 サンドボックスの削除

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

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

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

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

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

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

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

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

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

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

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

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

  2. 左側のペインで、「アプリケーションのデプロイ」を展開し、oracle.iam.ui.console.self-serviceアプリケーションを開きます。

  3. 右側のペインの上部で、「アプリケーションのデプロイ」をクリックし、「MDS構成」を選択します。

  4. 右側のペインの下部で、「ランタイムMBeanブラウザ」リンクをクリックします。画面が更新されます。

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

  6. 下方向にスクロールします。listMetadataLabels MBean操作をクリックして開き、「呼出し」をクリックします。サンドボックスの作成前ラベルおよび公開後ラベルがすべて表示されます。事前に作成されたサンドボックスのうちのどれにリストアするのかを選択し、それをクリップボードにコピーします。

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

  8. promoteMetadataLabel MBean操作を選択し、手順6でコピーした値を指定することでそれを呼び出します。

  9. oim_server1を再起動します。

    MDSメインラインが、サンドボックスの作成時の状態に戻ります。


注意:

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

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

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


関連項目:

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

http://download.oracle.com/docs/cd/E15523_01/web.1111/b31973/toc.htm

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

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


trinidad-config.xmlで新規スキンを構成します。Oracle Identity Managerのデフォルトのスキンは、skyrosです。

<?xml version="1.0" encoding="windows-1252"?>
<trinidad-config xmlns="http://myfaces.apache.org/trinidad/config">
  <skin-family>#{iamSkin.skinFamily}</skin-family>
  <skin-version>#{iamSkin.skinVersion}</skin-version>
  <accessibility-mode>#{accessibilityBean.accessibilityMode}</accessibility-mode>
<accessibility-profile>#{accessibilityBean.accessibilityProfile}</accessibility-profile>
</trinidad-config>

コンソール固有のtrinidad-config.xmlファイルは、2つあります。これらのファイルは、次のディレクトリ・パスにあります。

  • Identity Self Service用: /iam/iam-product/consoles/Identity/MainUI/public_html/WEB-INF/trinidad-config.xml

  • Identity System Administration用: /iam/iam-product/consoles/Identity/AdvancedUI/public_html/WEB-INF/trinidad-config.xml

30.3.1 新しいスキンの構成

新しいスキンを作成するには、次の手順を実行します。

  1. WEB-INFディレクトリにはそれぞれ、次に示すようにtrinidad-skins.xmlファイルを作成します。

    <?xml version="1.0" encoding='utf-8'?>
    <skins xmlns="http://myfaces.apache.org/trinidad/skin">
        <skin>
            <id>myskin.desktop</id>
            <family>myskin</family>
            <extends>#{iamBean.skyros-v1.desktop}</extends>
            <render-kit-id>org.apache.myfaces.trinidad.desktop</render-kit-id>
            <style-sheet-name>skins/myskin/myskin.css</style-sheet-name>
        </skin>
    </skins>
    
  2. 次のシステム・プロパティを構成します。

    • OIM UIのスキン・ファミリ: アプリケーションが実行時に使用するOracle Identity Manager UIのADFスキン・ファミリ。

    • OIM UIのスキン・バージョン: Oracle Identity Manager UIに使用されるスキン・ファミリのスキン・バージョン(存在する場合)。


      関連項目:

      「OIM UIのスキン・ファミリ」および「OIM UIのスキン・バージョン」システム・プロパティの詳細は、『Oracle Fusion Middleware Oracle Identity Manager管理者ガイド』のOracle Identity Managerのシステム・プロパティに関する説明を参照してください。

    これらのプロパティの値をカスタム・スキンに変更します。これらのプロパティの値を設定する前に、カスタムADFスキンを開発し、Oracle Identity Managerにデプロイする必要があります。

    Oracle ADF Facesでは、カスタム・スキンで拡張するように設計された、簡略化されたデフォルトのスキン(skyros-v1.desktopなど)が用意されています。作成するADFスキンは、Oracle ADFによって提供されるADFスキン、または作成した既存のADFスキンのいずれかを拡張したものである必要があります。スキンは再使用可能なコンポーネントであり、それ自体のJDeveloperプロジェクトまたはワークスペースで作成される必要があります。ADF Facesコンポーネントが実行時にレンダリングされる方法を定義するADFスキン・ファイルを、ADFスキン・エディタで作成できます。


    関連項目:

    • Oracle ADFによって提供されるADFスキンの間の継承関係の詳細は、『Oracle Fusion Middleware Oracle Application Development Frameworkスキン・エディタ・ユーザーズ・ガイド』のOracle ADFによって提供されるADFスキンの継承関係に関する項を参照してください。

    • Oracle ADFによって提供されるADFスキン内のカスタマイズ・レベルの詳細、および拡張するADFスキンに関する推奨事項は、『Oracle Fusion Middleware Oracle Application Development Frameworkスキン・エディタ・ユーザーズ・ガイド』のOracle ADFによって提供されるADFスキンに関する項を参照してください。

    • ADFカスタム・スキン開発およびデプロイメントの詳細は、『Oracle Fusion Middleware Oracle Application Development Frameworkスキン・エディタ・ユーザーズ・ガイド』および『Oracle Fusion Middleware Oracle Application Development Framework Webユーザー・インタフェース開発者ガイド』を参照してください。


  3. 必要に応じて、次の新しいロゴ・イメージに合せて上部のブランド・バーの高さを調節します。

    oracle.iam.console.identity.self-service.ear/oracle.iam.console.identity.self-service.war/oracle/iam/ui/main
    

    ログイン・ページの場合(signin.jspx):

    <f:attribute name="globalBrandingSize" value="64"/>
    

    チャレンジ質問を表示するページの場合(firstlogin.jspx):

    <f:attribute name="globalHeaderSize" value="64"/>
    

    Identity Self Serviceのページの場合(identity.jspx):

    <f:attribute name="globalHeaderSize" value="64"/>
    
  4. oracle.iam.console.identity.self-service.ear/oracle.iam.console.identity.self-service.war/Web-INF/web.xmlファイルに、次の設定を含めます。

    <context-param>
      <description>No obfuscation of CSS.</description>
     <param-name>org.apache.myfaces.trinidad.DISABLE_CONTENT_COMPRESSION</param-name>
      <param-value>true</param-value>
    </context-param>
    <context-param>
      <description>If this parameter is true, there will be an automatic check of the modification date of your JSPs, and saved state will be discarded when JSP's change. It will also automatically check if your skinning css files have changed without you having to restart the server. This makes development easier, but adds overhead. For this reason this parameter should be set to false when your application is deployed.</description>
      <param-name>org.apache.myfaces.trinidad.CHECK_FILE_MODIFICATION</param-name>
      <param-value>true</param-value>
    </context-param>
    

注意:

Identity Self Serviceの一番上のセクションと左側のナビゲーション・ペインはカスタマイズしないことをお薦めします。これらのセクションをカスタマイズすると、正常に動作しない場合や既存のカスタマイズが失われる場合があります。

30.3.2 レガシー拡張コンソールのスキンの構成

skyrosスキンによるデフォルトを保持して、特定のスタイルシート要素をオーバーライドするには、次の手順を実行します。

  1. trinidad-skins.xmlファイルでスキンを作成します。次に示すように、新規ファイルoim.ear/iam-consoles-faces.war/WEB-INF/trinidad-skins.xmlでスキンを宣言します。

    <?xml version="1.0" encoding='utf-8'?>
    <skins xmlns="http://myfaces.apache.org/trinidad/skin">
        <skin>
            <id>myskin.desktop</id>
            <family>myskin</family>
            <extends>skyros.desktop</extends>
            <render-kit-id>org.apache.myfaces.trinidad.desktop</render-kit-id>
            <style-sheet-name>skins/myskin/myskin.css</style-sheet-name>
            <bundle-name>oracle.iam.consoles.faces.resources.AdfComponentsMessageBundle</bundle-name>
        </skin>
    </skins>
    
  2. 次に示すように、/WEB-INF/trinidad-config.xmlファイルとiam-consoles-faces.war/WEB-INF/trinidad-config.xmlファイルの両方で、新しい「myskin」を登録します。

    <?xml version="1.0" encoding='utf-8'?>
    <trinidad-config xmlns="http://myfaces.apache.org/trinidad/config">
      <skin-family>myskin</skin-family>
    </trinidad-config>
    
  3. 新しいスキンのCSSファイルoim.ear/iam-consoles-faces.war/skins/myskin/myskin.cssを作成します。

  4. myskin.cssでは、デフォルトからオーバーライドされる必要があるスタイルシート要素を指定します。たとえば、ブランド・テキストの色を変更するには、次を追加します。

    .AFBrandingBarTitle, .xdj
    {
            color:#800080;
    }
    
  5. Oracle WebLogic Server管理コンソールを使用して、Oracle Identity Managerデプロイメントを再デプロイ(または更新)します。


注意:

ブランド情報を変更する場合に、「ブランドおよびロゴの変更」の方法のかわりに、カスタム・スキンを作成して、この項のURLで示した適切なスタイル・クラスを使用する方法があります。

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

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


注意:

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

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. 「カスタマイズ」をクリックします。Oracle WebCenter Composerが開きます。ページの上部に、「編集中のページ」と表示されます。

  4. 「表示」リストから、「ソース」を選択します。オブジェクト・ツリーが、上部のペインに表示されます。オブジェクト・ツリーに、ページのすべてのADFコンポーネントが表示されます。

  5. ロゴをクリックします。図30-3に示すように、オブジェクト・ツリーでロゴ・オブジェクトが選択されます。

    図30-3 WebCenter Composerのオブジェクト・ライブラリ

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

    図30-4に示すように、オブジェクト・ツリーに表示されるADFコンポーネントは、JDeveloperの構造ペインと似ています。

    図30-4 構造ペイン

    図30-4の説明が続きます
    「図30-4 構造ペイン」の説明

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

  7. 「スタイル」タブをクリックします。

  8. 「背景イメージ」フィールドで、設定するロゴ・イメージへのパスを、url(/identity/faces/images/mylogo.jpg)のように入力します。


    ヒント:

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

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


    図30-5は、「コンポーネント・プロパティ」ダイアログ・ボックスの「スタイル」タブを示しています。

    図30-5 「コンポーネント・プロパティ」ダイアログ・ボックス

    図30-5の説明が続きます
    「図30-5 「コンポーネント・プロパティ」ダイアログ・ボックス」の説明


    ヒント:

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

  9. Identity Self Serviceのグローバル・バナーを変更するには、Identity Self Serviceのテキストをクリックし、手順5から7を繰り返します。


    ヒント:

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

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

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


  10. 「保存」をクリックして、ロゴとグローバル・バナーの変更を保存します。

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

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


注意:

実行時UIカスタマイズによって、バナー・テキストが変更されます。ただし、それによってブラウザ・タイトル(たとえば、ブラウザ・ウィンドウに表示されるタイトル、HTML>HEAD>TITLEテキスト、またはタブを使用している場合はブラウザ・タブ・タイトル)を変更することはできません。ブラウザ・テキスト・タイトルを変更する場合は、次のように、リソース・バンドル・ファイルOIMUIBundle_*.propertiesの値を手動で編集し、再デプロイする必要があります。

oracle.iam.ui.view.war/WEB-INF/lib/adflibCommonUI.jar/oracle/iam/ui/OIMUIBundle_en.properties:

IDENTITY_SELF_SERVICE_TITLE=Identity Self Service

カスタム・リソース・バンドルの作成および使用方法の詳細は、「リソース文字列の国際化」を参照してください。


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

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

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

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

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

ユーザー

「作成」ページ

「変更」ページ

ユーザー属性の詳細

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

本人情報

自己登録

ロール

「作成」ページ

「変更」ページ

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

- 問合せ基準

- 結果表の列

カタログ

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

- 結果表の列

- カタログ項目詳細

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

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

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

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



関連項目:

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

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

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

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

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

http://developers.sun.com/docs/jscreator/help/2update1/jsp-jsfel/jsf_expression_language_intro.html

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

OIMContext Beanは、プロジェクトのadfc-config.xmlのADFセッション・スコープBeanとして定義されます。表30-3に、Oracle Identity Managerユーザー・コンテキストで使用可能なEL式を示します。

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

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

ログイン中のユーザーのATTRIBUTE_NAME属性の値にアクセスします。ユーザー・エンティティに定義されたデフォルトの属性のリストについては、『Oracle Fusion Middleware Oracle Identity Manager管理者ガイド』の属性の定義に関する説明を参照してください。

#{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']}

30.4.1.2 RequestFormContextで使用可能なEL式

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

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

表30-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}

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


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

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

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

  1. カスタム・プロジェクトWARファイル(oracle.iam.ui.custom-dev-starter-pack.war)を開きます。

  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. サンドボックスをエクスポートし、サンドボックスを公開します。


    注意:

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

30.4.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を実装することで、特定の条件に基づいてコンポーネントを表示する方法について説明しています。

30.4.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. サンドボックスを公開して、変更をグローバライズします。

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

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

表30-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を使用してカスタム・フィールド・バリデータを実装する方法について説明しています。

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

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

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

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

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

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

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

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

    図30-6は、選択された上部パネルと、オブジェクト・ツリーでの対応するADFコンポーネントを示しています。

    図30-6 リンクを追加するパネルの選択

    図30-6の説明が続きます
    「図30-6 リンクを追加するパネルの選択」の説明

  3. 「コンテンツの追加」をクリックして、「Webコンポーネント」を開きます。「コンテンツの追加」ダイアログ・ボックスの「Webコンポーネント」コンポーネントを図30-7に示します。

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

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

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


    注意:

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

  5. 「保存」をクリックして変更を保存し、WebCenter Composerを閉じます。


    注意:

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

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によって処理されます。

シェルによって、タスクフローが起動されます。

30.4.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. 「コンポーネントの削除確認」ボックスで、「削除」をクリックします。

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

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

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

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

  3. 「表示」メニューから、「ソース」を選択します。オブジェクト・ツリーが表示されます。

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

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

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

  6. ツールバーで、「編集」をクリックします。「コンポーネント・プロパティ」ダイアログ・ボックスが表示されます。

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

    図30-8 「子コンポーネント」タブ

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

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


    注意:

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

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

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

30.4.9 ユーザー登録とその他の認証されていないページのカスタマイズ

Identity Self Serviceのユーザー登録とその他の認証されていないページをカスタマイズする手順は次のとおりです。

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

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

  3. 「表示」「ソース」を選択します。左側のナビゲーション・ペインで、最後に表示されたリンク(たとえば、「オープン・タスク」)をクリックします。


    注意:

    タブは開かないでください。左側のナビゲーション・ペイン自体をカスタマイズする必要があります。

  4. タスク・フローを編集するために確認します。ソース・ツリー・ペインを使用し、下方向にスクロールして、グレーアウトされた項目「認証されていないページ」を検索します。

  5. 承認されていないページを右クリックして、コンポーネントの表示を選択します。図30-9に示すように、承認されていないページへ移動するリンクが左側のナビゲーション・ペインに表示されます。

    図30-9 承認されていないページへのリンク

    図30-9の説明が続きます
    「図30-9 承認されていないページへのリンク」の説明

  6. 「表示」「設計」に選択します。左側のナビゲーション・ペインで、「新規ユーザーの登録」リンクをクリックします。「新規ユーザーの登録」画面へリダイレクトされます。

  7. 必須フィールドに情報を入力したら、「表示」「ソース」を選択します。コンテンツの追加をクリックし、データ・コンポーネント→「ユーザー登録」→UserVO1を使用して、新規フィールドを追加します。

  8. 「取消」をクリックして、ホームページに戻ります。終了後、忘れずに左側のナビゲーション・ペインで承認されていないリンクを非表示にします。その後、承認されていないページをクリックし、コンポーネントの非表示を選択します。

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

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

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

  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}
    

30.5 UIコンポーネントの保護

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

30.5.1 APMを使用したカスタム・タスクフローの保護

タスクフローを保護するために、認可ポリシー・マネージャ(APM) UIを使用して、カスタム・タスクフローに権限を追加できます。これを行うには、次の手順を実行します。

  1. 次のURLに移動して、認可ポリシー・マネージャにWebLogicユーザーとしてログインします。

    http://ADMIN_HOST:ADMIN_PORT/apm

  2. 「アプリケーション」「OracleIdentityManager」「リソース・タイプ」に移動します。「開く」をクリックします。

  3. 「新規作成」をクリックして、新しいリソース・タイプを作成します。次の詳細を入力して、「保存」をクリックします。

    表示名: このリソースの表示名(たとえば、ADFタスクフロー)

    名前: このリソースの名前(たとえば、ADFTaskflows)

    アクション: パーソナライズ、カスタマイズ、付与、表示。各アクションを追加するには、「新規」をクリックします。

    リソース階層のサポート: いいえ

    リソース・デリミタ: スラッシュ(/)

    評価ロジック: 権限クラス

    権限クラス: oracle.adf.controller.security.TaskFlowPermission

    アクション名デリミタ: カンマ(,)

  4. 「アプリケーション」「OracleIdentityManager」デフォルト・ポリシー・ドメインリソース・カタログ「リソース」に移動します。「開く」をクリックします。

  5. 「新規」をクリックして、新規リソースを作成します。次の値を入力して、「保存」をクリックします。

    リソース・タイプ: 手順3で作成したリソース・タイプを選択します。

    表示名: カスタム・タスクフローの表示名を入力します。

    名前: カスタム・タスクフローの名前を次の形式で入力します。

    TASKFLOW_DOCUMENT#TASKFLOW_ID

    例:

    /WEB-INF/request-approval-details-tf.xml#request-approval-details-tf

    説明: カスタム・タスクフローの説明を入力します。


    注意:

    手順5で説明したように、カスタム・タスクフローには、それぞれリソースを作成する必要があります。すべてのカスタム・タスクフローに対して、手順3で作成したリソース・タイプと同じものを使用できます。

  6. 「アプリケーション」「Oracle Identity Manager」デフォルト・ポリシー・ドメイン「認可ポリシー」に移動します。「開く」をクリックします。

  7. 「プリンシパルによる検索」を選択し、「検索」をクリックします。表示されている既存のポリシーを追加する場合は、それを選択し「開く」をクリックします。それ以外の場合は、「新規」をクリックしてポリシーを作成します。

  8. 新しいポリシーの名前およびプリンシパルを追加します。

  9. 「ターゲットの追加」をクリックします。ターゲットの検索ダイアログ・ボックスが表示されます。

  10. 「リソース」タブをクリックします。手順3で定義したリソース・タイプを指定して、「検索」をクリックします。

  11. 手順5で作成したリソースを選択します。「選択した項目の追加」をクリックします。

  12. 「ターゲットの追加」をクリックします。リソースが「ターゲット」表に追加されます。

  13. 表に追加したリソースを展開します。タスクフローに適用する権限を選択します。

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

30.5.2 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で、これはパラメータとして渡されます。

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

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

30.6.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でカスタム・ヘルプ・トピックをホーム・ページのGetting Started with Helpコンテナに追加する方法を示しています。

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

  2. 「ホーム」ページで、「カスタマイズ」をクリックします。

  3. 「表示」メニューから、「ソース」を選択します。オブジェクト・ツリーが表示されます。「トップ・リスト」から「Webコンポーネント」を開きます。

  4. 「スタート・ガイドのヘルプ・トピック」コンテナをクリックします。「編集の確認タスク・フロー」ポップアップで、「編集」をクリックします。

  5. 「コンテンツの追加」をクリックします。「コンテンツの追加」ダイアログ・ボックスが表示されます。

  6. コマンド・イメージ・リンクを選択し、同じ行の「追加」をクリックします。選択したコンポーネントは、「スタート・ガイドのヘルプ・トピック」セクションに追加されます。

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

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

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

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

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

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

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

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

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

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


注意:

カスタムWARライブラリ名を変更できます。その場合は、Manifest.MFのWARファイルのそのエントリで、同じライブラリ名を指定してください。

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. 「編集」をクリックします。「電話」フィールドの「コンポーネント・プロパティ」ダイアログ・ボックスが表示されます。

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

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

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

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


関連項目:

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

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

ホーム・ページでは、Oracle Identity Self Serviceの様々な機能が一目でわかります。このホーム・ページは、コンテナを追加、削除および再編成してパーソナライズすることができます。詳細は、『Oracle Fusion Middleware Oracle Identity Managerユーザーズ・ガイド』のホーム・ページのパーソナライズに関する説明を参照してください。

コンテナを追加した場合、それを使用するにはこのコンテナにUIコンポーネントを追加する必要があります。ホーム・ページにコンテナを追加し、UIコンポーネントを追加するには、次の手順を実行します。


注意:

コンテナの追加および削除、レイアウトの変更などのパーソナライズ機能は、認可ポリシーでは制御されません。ただし、追加の際に各ユーザーが使用できるコンテンツは、認可ポリシーによって制御されます。

  1. Oracle Identity Self Serviceにログインし、ホーム・ページに移動します。

  2. 「パーソナライズ」をクリックします。ホームは、アイコンで構成されるツールバーがあるカスタマイズ・モードで表示されます。

  3. ツールバーで「上にボックスを追加」アイコンをクリックします。図30-10は、ツールバーの「上にボックスを追加」アイコンを示しています。

    図30-10 ツールバーの「上にボックスを追加」アイコン

    図30-10の説明が続きます
    「図30-10 ツールバーの「上にボックスを追加」アイコン」の説明

    コンテナの下、右または左にボックスを追加するには、そのコンテナ内の対応するアイコンをクリックします。

    アイコンをクリックすると、図30-11に示すように、ホーム・ページにコンテナが追加されます。

    図30-11 新しいコンテナ

    図30-11の説明が続きます
    「図30-11 新しいコンテナ」の説明

  4. 「コンテンツの追加」をクリックします。「コンテンツの追加」ダイアログ・ボックスが表示され、コンテナに追加できるホームページ・タスク・フローのリストが表示されます。図30-12は、「コンテンツの追加」ダイアログ・ボックスを示しています。

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

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

  5. ホームページ・タスク・フローを選択し、「追加」をクリックします。その後、「コンテンツの追加」ダイアログ・ボックスを閉じます。

  6. 上部のナビゲーション・バーの「閉じる」をクリックして、カスタマイズ・モードを終了します。

30.8 チャレンジ質問のカスタマイズ

チャレンジ質問の数をUIの複数のページでカスタマイズできます。そうするには、PCQ.NO_OF_QUESシステム・プロパティの値を変更して、ユーザーに表示するチャレンジ疑問の数を指定します。また、追加または削除したチャレンジ質問を表示または非表示にする場合にも、ページをそれぞれカスタマイズします。

チャレンジ質問の数を設定するには、次の手順を実行します。

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

  2. 左側のペインの「システム管理」の下で、「システム構成」をクリックします。「システム構成」タブが新しいウィンドウで表示されます。

  3. PCQ.NO_OF_QUESキーワードを持つ「質問数」システム・プロパティを検索して開きます。

  4. 値を3から5に変更し、「保存」をクリックします。

  5. 新しいウィンドウを閉じます。

  6. Oracle Identity System Administrationの「構成」の下で、「参照」をクリックし、図30-13に示すように、Lookup.WebClient.Questionsコードを検索します。

    図30-13 Lookup.Weblciient.Questions参照コード

    図30-13の説明が続きます
    「図30-13 Lookup.Weblciient.Questions参照コード」の説明

  7. 参照タイプを編集して、追加の質問を追加します。


注意:

en_USバンドルの質問のローカライズについては、『Oracle Fusion Middleware Oracle Identity Manager管理者ガイド』でチャレンジ質問およびレスポンスのローカライズに関する説明を参照してください。

Oracle Identity Self ServiceまたはOracle Identity System Administrationにログインしているユーザーに関するチャレンジ質問を設定するには、次の手順を実行します。

  1. Oracle Identity Self Serviceにシステム管理者としてログインし、ホーム・ページで「サンドボックス」をクリックします。

  2. ホーム・ページで上部ナビゲーション・バーの「サンドボックス」をクリックします。「サンドボックスの管理」ページが表示されます。

  3. ツールバーで、「サンドボックスの作成」をクリックします。「サンドボックスの作成」ダイアログ・ボックスに、サンドボックス名(ChallengeQなど)を入力し、「保存して閉じる」をクリックします。

    「サンドボックスのアクティブ化」チェック・ボックスは選択したままにします。

  4. 確認ダイアログ・ボックスで、「OK」をクリックします。アクティブなサンドボックスが「サンドボックスの管理」ページの表に表示されます。「サンドボックスの管理」ページを閉じます。

  5. 「本人情報」ページを開きます。「基本情報」セクションを閉じ、「チャレンジ質問」セクションを展開します。

  6. 「カスタマイズ」をクリックします。ツールバーで、「表示」「ソース」を選択します。

  7. 3つ目の質問をクリックし、「OK」をクリックしてタスク・フローの編集を確認します。

  8. ソース・ツリーで、3つ目の質問の直後のグレー表示されたpanelGroupLayoutを選択します。これには、4つ目の質問が含まれます。このpanelGroupLayoutを右クリックし、「コンポーネントの表示」を選択します。

  9. 同様に、5つ目の質問を表示します。

  10. ツールバーで、「閉じる」をクリックします。

  11. 次のURLにブラウザを移動するとチャレンジ質問が表示される、その他の3つのページに対して、手順4から9を繰り返します。

    • 「ユーザー登録」ページ: /identity/faces/register

    • 「パスワードを忘れた場合」ページ: /identity/faces/forgotpassword

    • ユーザーの初回ログイン時の「ログイン」ページ: /identity/faces/firstlogin?action=setchallenges

    設計上、様々なバリエーションがある点に注意してください(たとえば、図30-14に示すように、「パスワードを忘れた場合」ページに関する質問は、リストではなくoutputTextとしてレンダリングされます)。

    図30-14 「パスワードを忘れた場合」ページに関するチャレンジ質問

    図30-14の説明が続きます
    「図30-14 「パスワードを忘れた場合」ページに関するチャレンジ質問」の説明

    ページに表示される質問数は、相対的です。たとえば、パスワードを忘れた場合の最初の手順で指定したユーザー・ログインが、JohnDだとします。JohhDが存在しないか、JohhDがセルフ向けのチャレンジ・レスポンスを設定していない場合は、「パスワードを忘れた場合」ページに構成済の質問がすべて表示されます。JohnDがセルフ向けのチャレンジ質問を設定している場合は、それらの質問のみが表示されます。

  12. サンドボックスを公開し、ログアウトします。

30.9 暫定UIのカスタマイズ

Identity Self Serviceの暫定UIページでは、アクセス・ポリシーの管理などのタスクを実行するメニュー項目をクリックすると、検索ページが表示されます。たとえば、「アクセス・ポリシー」メニュー項目の下で「管理」リンクをクリックすると、アクセス・ポリシーを検索するための2つのドロップダウン・メニューを含む「アクセス・ポリシーの管理」ページが表示されます。ドロップダウン・メニューの数およびドロップダウン・メニュー項目をカスタマイズできます。

検索結果が表示されたら、各ページに表示される結果表の最大行数を決定できます。ユーザーが結果表から項目を選択すると、詳細ページ(「リソースの詳細」ページなど)が表示されます。詳細ページには、追加の詳細メニューが含まれています。これらのメニュー項目をカスタマイズできます。

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

30.9.1 検索ドロップダウン項目のカスタマイズ

Design Consoleを使用して、検索ページの検索コードおよび追加詳細を変更します。ドロップダウンをカスタマイズするには、次の手順を実行します。

  1. Design Consoleにログインします。

  2. 「管理」→「参照定義」に移動して、「参照定義」フォームを開きます。

  3. 必要な検索定義を検索して特定します。


    ヒント:

    検索基準について、lookup.webclient*検索を使用して検索ページを見つけるか、または*additional_detailsを使用して追加詳細を見つけます。

  4. 検索コードに対して必要な変更を行い、各検索ページのドロップダウン・メニューに表示されるオプションを設定します。

    • コード・キーは各列のメタデータです。

    • デコード値は、Identity Self ServiceまたはIdentity System Administrationで表示されるものです。

    • コード・キー・リストに表示される項目の順序は、Identity Self Serviceのドロップダウン・リストに表示される順序です。エントリを削除し、再度追加すると、そのエントリはリストの最後に表示されます。

  5. 変更を保存します。

30.9.2 検索ドロップダウン項目数および検索結果数のカスタマイズ

ドロップダウン・メニューの数および各ページの検索結果の最大数を変更するには、xlDefaultAdmin.propertiesファイルを編集します。

ドロップダウン・メニューの数を設定するには、次の手順を実行します。

  1. xlDefaultAdmin.propertiesファイルを開きます。

  2. 表30-6でプロパティを特定し、必要に応じてそれを編集します。

    表30-6 検索ページのメニュー数を決定するプロパティ

    プロパティ名 デフォルト ページ

    global.property.numsearchaccesspolicyfields

    2

    アクセス・ポリシー

    global.property.numsearchresourcefields

    2

    リソース検索

    global.property.numsearchattestationprocessfields

    3

    アテステーション・プロセス


  3. 各ページの検索結果の最大数を変更するには、プロパティglobal.displayrecordNum.valueの値を必要な値に変更します。デフォルト値は10です。

  4. ファイルを保存します。

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

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

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


関連項目:

図30-1、「Oracle Identity Manager UIライブラリ」は、様々なOracle Identity Manager UIライブラリと、その従属構造を示しています。

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

  • リクエストBean: Beanの新しいインスタンスをrequest.jsffコンポーネント・バインディングごとに作成し、通常はリスナーをリクエストBeanにバインドします。

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

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

30.10.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クラスが使用されます。このクラスの詳細は、付録B「FacesUtilsクラス」を参照してください。

30.10.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クラスが使用されます。このクラスの詳細は、付録B「FacesUtilsクラス」を参照してください。

30.10.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}
        

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

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

  1. oracle.iam.ui.custom共有ライブラリ(oracle.iam.ui.custom-dev-starter-pack.war)を特定します。共有ライブラリは、IDM_HOME/server/apps/ディレクトリにあります。

  2. WARをパッケージ化し、ADFライブラリをWEB-INF/lib/に含めます。

  3. 共有ライブラリを再デプロイします。

30.10.5 マネージドBeanの使用

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


注意:

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

30.10.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
                AdfFacesContext.getCurrentInstance().addPartialTarget(component);
            }
        }
    
  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. 「マネージドBeanおよびタスク・フローの開発」で説明したように、マネージド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"
    

30.10.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. 「マネージドBeanおよびタスク・フローの開発」で説明したように、マネージドBeanをパッケージ化し、デプロイします。

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

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

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

30.10.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. 「マネージドBeanおよびタスク・フローの開発」で説明したように、マネージドBeanをパッケージ化し、デプロイします。

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

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

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

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

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

30.10.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. 「マネージドBeanおよびタスク・フローの開発」で説明したように、マネージド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ファイル(サンドボックスのアーカイブ)を再パッケージしてから、環境にインポートします。


30.10.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はフォームを再レンダリングする必要があります。

30.10.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. コードを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プロパティを設定します。

30.10.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プロパティを更新します。

30.10.5.8 ホーム・ページ・ポートレットの開発

ホーム・ページ・ポートレットは、Oracle Identity Self Serviceでユーザーのホーム・ページに追加できる通常のバインド・タスク・フローです。ホーム・ページ・ポートレットはViewControllerプロジェクトで作成する必要があります。ViewControllerプロジェクトには、タイプがADFライブラリJARファイルのデプロイメント・プロファイルが必要です。ViewControllerプロジェクトの設定の詳細は、「ViewControllerプロジェクトの設定」を参照してください。カスタム・マネージドBeanの追加の詳細は、「カスタム・マネージドBeanの追加」を参照してください。


関連項目:

ADFタスクフローの開発の詳細は、『Oracle Fusion Middleware Oracle Application Development Framework Fusion開発者ガイド』を参照してください。

バインド・タスク・フローを開発した後に、それをデプロイする必要があります。バインド・タスクフローのデプロイの詳細は、「Oracle Identity Managerへのカスタム・コードのデプロイ」を参照してください。

すべての新しいタスク・フローには、それをIdentity Self Serviceで参照可能にする権限を付与する必要があります。詳細は、「APMを使用したカスタム・タスクフローの保護」を参照してください。

ホーム・ページ・ポートレット開発の最後の手順は、ホーム・ページのリソース・カタログを更新することです。これによって、ユーザーがホームページにポートレットを追加できるようになります。ホーム・ページのリソース・カタログを更新するには、次の手順を実行します。

  1. oracle.iam.ui.custom共有ライブラリ(oracle.iam.ui.custom-dev-starter-pack.war)を特定します。これは、OIM_HOME/server/apps/ディレクトリで使用可能です。

  2. WARを解凍し、oracle/adf/rc/metadata/custom-catalog.xmlファイルを見つけます。

  3. ファイルを更新し、新しく追加されたバインド・タスク・フローに、参照を含めます。エントリは次のようになります。

    <resource id="helloWorld" name="Hello World"
    description="Hello World Taskflow Reference"
    repository="application.classpath"
    path="adflibHomepagePortletsUI.jar/ADF_TaskFlow/WEB-INF+oracle+iam+ui+sample+homepage+tfs+hello-world-tf.xml#hello-world-tf">
    <attributes>
    <attribute value="coreDefault" attributeId="attr.background" isKey="false"/>
    </attributes>
    </resource>
    

    注意:

    pathプロパティの形式が正しいことを確認します。形式は、手順3で示したパターンと同じである必要があります。また、repositoryプロパティの値がapplication.classpathであることを確認します。このファイルの形式の詳細は、Oracle Fusion Middleware Oracle WebCenter Portal開発者ガイドのカタログ定義属性の項のリソースに関する説明を参照してください。

  4. 共有ライブラリを再デプロイします。


    注意:

    ホーム・ページのリソース・カタログを更新する手順を実行しても、「コンテンツの追加」ボタンをクリックしたときにリソース・カタログにカスタム・タスク・フローが表示されない場合、次の点を確認してください。
    • タスク・フロー権限が適切に定義されていることを確認します。詳細は、「APMを使用したカスタム・タスクフローの保護」を参照してください。

    • タスク・フローが格納されているADFライブラリJARファイルにMETA-INF/task-flow-registry.xmlファイルが含まれており、カスタム・タスク・フローへの参照がそのファイルに含まれていることを確認してください。このファイルがない場合、そのカスタム・タスク・フローを含む特定のJDeveloperプロジェクトのみを再作成し、それで問題が解決されるかどうか確認します。特定のJDeveloperプロジェクトのみを再作成するには、JDeveloperでそのカスタム・タスク・フローを含むViewControllerプロジェクトを右クリックし、「デプロイメント」を選択して、デプロイメント・プロファイルを選択します。デプロイメント・プロファイルのタイプはADFライブラリJARファイルでなければなりません。


30.10.5.9 タスク・フローの起動

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

  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のカスタマイズに使用可能なパブリック・タスクフローの一覧は、「パブリック・タスクフローの使用」を参照してください。

    「マネージドBeanおよびタスク・フローの開発」で説明したように、マネージドBeanをパッケージ化し、デプロイします。

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

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

    jsffページが既存の左側のナビゲーション・ページの場合、名前はleft-nav.jsffとなります。このjsffページのページ定義ファイルは、left-nav_pageDef.xmlです。このページ定義XMLファイルにはすでにeventBindingが含まれているため、何も変更する必要はありません。

    ご使用の起動リンクがカスタム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を定義する必要があります。

30.10.5.10 外部リンクの作成

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

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

    public void actionListener(ActionEvent e) {
            FacesUtils.redirect("http://www.oracle.com");
        }
    
  2. Web Composerを使用して、リンクまたはボタンを表示するページに、新しいcommandLinkまたはcommandButtonを追加します。詳細は、「リンクまたはボタンの追加」を参照してください。

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

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

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

30.10.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変更のレンダリングを行います。このクラスのコードについては、付録B「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. カスタム・コードをデプロイする手順は次のとおりです。

    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管理対象サーバーを起動します。

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

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

    2. Oracle Identity Self Serviceにログインし、「カタログ」ページに移動します。

    3. カスタマイズする特定のアプリケーション・インスタンスを検索します。この例では、アプリケーション・インスタンスは「ローカル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. サンドボックスを公開します。

30.10.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ファイルがデータベースにアップロードされるように、常に、コマンド行を使用したプラグインをデプロイすることをお薦めします。

30.10.7 パブリック・タスクフローの使用

Oracle Identity Managerでは、Oracle Identity Self Serviceのカスタマイズするページで使用して、他のタスクフロー呼び出すためのデフォルトのタスクフローが用意されています。たとえば、ユーザーの詳細ページにおいて、マネージャのログイン名をクリックすると、マネージャのユーザーの詳細が表示されるようにカスタマイズできます。

デフォルトのまたは事前定義済のタスクフローは、パブリック・タスクフローと呼ばれます。パブリック・タスクフローの起動時に、パラメータに適切な値を指定する必要があります。たとえば、特定のリクエストのリクエスト詳細ページを起動するには、そのリクエストのリクエストIDを指定する必要があります。

表30-7に、Oracle Identity Managerで用意されているパブリック・タスクフローを、その呼出しに必要な入力パラメータとともに示します。

表30-7 パブリック・タスクフロー

タスクフロー名 タスクフローのパス 説明 パラメータ 必須

リクエストの詳細

/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: アカウントを表示するユーザーの「ユーザー・ログイン」属性値。

はい



注意:

  • 表30-7に示されているすべてのパブリック・タスクフローのパラメータは、java.lang.String型です。

  • パブリック・タスクフローは、「タスク・フローの起動」で説明されているように、コンテキスト・イベントを使用して起動できます。あるいは、パブリック・タスクフローを、ADF Facesページに埋め込むこともできます。パブリック・タスクフローをADF Facesページに埋め込む場合は、ADF Facesページのページ定義ファイルのタスクフロー定義に、次のパラメータを(表30-7に示されているパラメータに加えて)追加する必要があります。

    パラメータ名: uiShell

    値: #{pageFlowScope.uiShell}


30.11 追加のリクエスト情報を指定するためのUIのカスタマイズ

ユーザーは、リクエストの承認者に役立つ追加のリクエスト情報を入力できます。内容は次のとおりです。

30.11.1 追加のリクエスト情報の概要

ユーザーがリクエストを送信する際に追加の情報を指定できるように、「カート詳細」ページのUIをカスタマイズできます。次のサンプル・スクリーンショットに示すように、カートまたはリクエスト・レベル、およびカート詳細レベルでリンクまたはボタンを追加できます。

addl_req_info1.gifについては周囲のテキストで説明しています。

ユーザーがリンクをクリックすると、カスタム・フィールドが配置されたポップアップ・ウィンドウが表示されます。ユーザーは、リクエストの承認者に役立つ適切な情報を入力できます。次のサンプル・スクリーンショットは、カートまたはリクエストの「追加のリクエスト情報」ポップアップ・ウィンドウを示しています。

addl_req_info2.gifについては周囲のテキストで説明しています。

次のサンプル・スクリーンショットは、リクエストの個々のカート項目の「追加のリクエスト情報」ポップアップ・ウィンドウを示しています。

addl_req_info3.gifについては周囲のテキストで説明しています。

リクエストの承認者は、カート(リクエスト)レベルまたはカート項目レベルで指定されている追加のリクエスト情報を、表示または更新(あるいはその両方が)できます。リクエストの承認者は、「受信ボックス」ページの「アイデンティティ・セルフ・サービス」からリクエストにアクセスできます。

addl_req_info4.gifについては周囲のテキストで説明しています。

30.11.2 AdditionalRequestInfoインタフェース

AdditionalRequestInfoインタフェースには、setAttributeおよびgetAttributeメソッドが用意されています。setAttributeメソッドを使用すれば、カスタム・タスクフローにおいて、リクエストの一部として指定できる追加のリクエスト専用属性を設定できます。getAttributeメソッドを使用すれば、カスタム・タスクフローにおいて、リクエストの承認、表示、サマリーなどのタスク時に追加のリクエスト属性を取得できます。

AdditionalRequestInfoインタフェースでは、カート(リクエスト)レベルおよびカート項目レベルにおける属性の設定および取得がサポートされています。カート項目レベル属性には、cartItemIdパラメータを指定する必要があります。RequestFormContextのgetUniqueCartItemIdentifier EL式を使用して、選択したcartItemIdにアクセスできます。詳細は、「RequestFormContextで使用可能なEL式」を参照してください。

次のコードに示すように、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);
}

30.11.3 追加のリクエスト情報用カスタム・タスクフローの実装

追加のリクエスト専用情報を指定および表示するために使用できるカスタム・タスクフローを実装するには、次の手順を実行します。

  1. カスタム・タスクフローを、ViewControllerプロジェクトにおいてバインド・タスクフローとして開発します。ViewControllerプロジェクトの設定の詳細は、「ViewControllerプロジェクトの設定」を参照してください。

  2. 必要に応じて、タスクフローの入力パラメータを定義します。

    次の表に、事前定義済入力パラメータを示します(定義すると、タスクフローの起動時に適切な値が自動で渡されます)。

    パラメータ名 タイプ 説明
    additionalRequestInfo oracle.iam.ui.common.model.catalog.requestdetails.AdditionalRequestInfo AdditionalRequestInfoインタフェースのインスタンス。

    リクエスト・レベルおよびカート項目レベルの追加のリクエスト属性値を設定および取得するために使用します。インタフェース・メソッドの詳細は、「AdditionalRequestInfoインタフェース」を参照してください。

    requestFormContext oracle.iam.ui.platform.view.RequestFormContext RequestFormContextのインスタンス。

    RequestFormContextによって、リクエストおよび現在選択しているカート項目に関する様々なコンテキスト情報が指定されます。

    たとえば、RequestFormContextで指定された情報を活用して、カスタム・タスクフローの入力コンポーネントを読取り専用モードで、または編集可能モードでレンダリングする必要があるかどうかを決定できます。

    詳細は、「RequestFormContextで使用可能なEL式」を参照してください。


    事前定義済パラメータに加えて、他の入力パラメータを定義して、タスクフローに渡すことができます。これらのパラメータは、Oracle Identity Managerには不明です。したがって、カスタム・タスクフローを起動するリンクまたはボタンのclientAttributeを使用して、タスクフローに渡す値を定義します。

    タスクフローの起動およびタスクフローへのパラメータ渡しの詳細は、「追加のリクエスト情報用カスタム・タスクフローの起動」で説明しています。

  3. タスクフローをoracle.iam.ui.custom共有ライブラリの一部としてデプロイします。バインド・タスクフローのデプロイの詳細は、「Oracle Identity Managerへのカスタム・コードのデプロイ」を参照してください。

  4. タスクフローを保護するために、「APMを使用したカスタム・タスクフローの保護」の説明に従って、認可ポリシー・マネージャ(APM) UIを使用して、カスタム・タスクフローに権限を追加します。

  5. Identity Self Serviceでタスクフローを参照可能にするために、権限を付与します。詳細は、「EL式を使用したタスク・フロー・リージョンの保護」を参照してください。

30.11.4 追加のリクエスト情報用カスタム・タスクフローの起動

ユーザーが、任意のカート項目に固有の追加情報(アプリケーション・インスタンス、ロールまたは権限など)を指定するようにできます。そのためには、Oracle Web Composerを使用してリンクまたはボタンを「カート項目」表に追加します。「カート項目」表は、「カート・チェックアウト」、「リクエスト・サマリー」、「リクエスト」ビューおよび「リクエスト承認」ページにおいて、UI操作にカート項目が関係するたびに表示されます。

コンポーネントの子孫として定義された属性のセットによって、起動されるカスタム・タスクフロー、およびポップアップ・ウィンドウの表示方法が決定されます。次の表に、事前定義済属性をまとめます。

名前 タイプ 必須 説明
taskFlowId java.lang.String はい コンポーネントによって起動されるカスタム・タスクフローのID。
dialogTitle java.lang.String オプション カスタム・タスクフローが起動されるポップアップ・ウィンドウのタイトル。

値を指定しない場合は、タイトルが空白になります。

dialogTitleIcon java.lang.String オプション カスタム・タスクフローが起動されるポップアップ・ウィンドウに表示されるアイコンへのパス。

値を指定しない場合は、デフォルトのアイコンが使用されます。


たとえば、次のコード・スニペットによって、「追加のカート項目情報」リンクが作成されます。

<af:commandLink xmlns:af="http://xmlns.oracle.com/adf/faces/rich" id="e655321996" text="Additional Cart Item Information" actionListener="#{catalogRequestBean.launchAdditionalRequestInfoTaskFlow}">
         <af:clientAttribute xmlns:af="http://xmlns.oracle.com/adf/faces/rich" name="taskFlowId" value="/WEB-INF/oracle/iam/ui/sample/catalog/tfs/additional-cart-item-info-tf.xml#additional-cart-item-info-tf"/>
         <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 Item Information"/>
</af:commandLink>

このコード・スニペット例の内容は、次のとおりです。

  • /WEB-INF/oracle/iam/ui/sample/catalog/tfs/additional-cart-item-info-tf.xml#additional-cart-item-info-tfは、ポップアップ・ウィンドウで起動されるタスクフローです。

  • #{catalogRequestBean.launchAdditionalRequestInfoTaskFlow}は、コンポーネントのactionListenerプロパティの値に指定される必須ELです。

    このアクション・リスナーにより、カスタム・タスクフローがポップアップ・ウィンドウに起動されます。

  • /images/request_ena.pngは、ポップアップ・ウィンドウ用アイコンのパスです。

  • headerTextは、タスクフローの入力パラメータです。


注意:

「カート項目」フォームに必須フィールドが含まれる場合は、必須フィールドに値を入力しなければ、「追加のリクエスト情報」タスクフローを起動できません。その場合、「追加のリクエスト情報」リンクまたはボタンをクリックすると、必須フィールド検証の結果、ADFエラーが・ポップアップ表示されます。

必須フィールドに値を入力することなく追加のリクエスト情報を指定するには、検証を無効化する必要があります。これは、commandLinkまたはcommandButtonコンポーネントのimmediateプロパティをtrueに設定するUIカスタマイズによって実行できます。

または、「追加のカート情報」コンポーネント内で、カスタマイズされたcart-details.jsff.xmlファイルを編集して、次のようにimmediateプロパティの値をtrueに設定することもできます。

<af:commandLink xmlns:af="http://xmlns.oracle.com/adf/faces/rich" text="Additional Cart Information" immediate="true"...>

30.11.5 カート(リクエスト)レベルのUIのカスタマイズ

ユーザーが追加のリクエスト情報を指定できるようにする場合は、カート(リクエスト)レベルで次のようにUIをカスタマイズできます。

  • リンクまたはボタンを、カート・レベルで選択的に表示します。

    たとえば、ユーザーがリクエストを作成または承認する場合のみカスタムUIコンポーネント(リンクまたはボタン)を表示させ、ユーザーがリクエストを追跡する場合は表示させないようにできます。

  • コンテキストに基づいて、異なるタスクフローを起動します。

    たとえば、ユーザーがアクセスをリクエストする場合および取り消す場合に、異なるタスクフローを起動できます。

  • ポップアップ・ウィンドウをカスタマイズします(ウィンドウのアイコンやタイトルなど)。

次のコード・スニペットに、適切なEL式を使用したカスタマイズのサンプルを示します。

<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>

このサンプル・コード・スニペットでは、「追加のカート情報」カスタム・リンクがカート詳細ページに追加されます。説明:

  • このカスタム・リンクは、EL式、#{backingBeanScope.additionalInfoHelperBean.renderAdditionalDetailsForRequest}を使用して、renderedプロパティに対して選択的に表示されます。

    このEL式を使用するには、RenderAdditionalDetailsForRequestメソッドを伴うマネージド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/sample/catalog/tfs/additional-cart-info-tf.xml#additional-cart-info-tfです。taskFlowId属性の詳細は、「追加のリクエスト情報用カスタム・タスクフローの起動」を参照してください。

  • dialogTitle属性の値として指定されたEL式、#{backingBeanScope.additionalInfoHelperBean.popupTitle}を使用して、異なるポップアップ・ウィンドウ・タイトルを設定します。

    このEL式を使用するには、getPopupTitleメソッドを、additionalRequestInfoHelperBeanという名前のマネージドBeanにインクルードします。このメソッドにより、ポップアップ・ウィンドウ・タイトルとして表示される、適切な文字列値が返されます。dialogTitle属性の詳細は、「追加のリクエスト情報用カスタム・タスクフローの起動」を参照してください。

次の利用可能なデータを使用して、目的のカスタマイズを行えます。

  • 次のいずれかの方法によりpageFlowScopeマップで利用可能なデータ

    • EL式、#{pageFlowScope}の評価

    • AdfFacesContext.getCurrentInstance().getPageFlowScope()メソッドの起動

      このメソッドにより、データをキーと値のペアとして含むjava.util.Mapのインスタンスが返されます。このマップに格納される有用な値(「マップ・キー」値)の一部は次のとおりです。

      • requestId: このキーに対応する値は、Request IDです(この値は、ユーザーの実行するUIアクションに応じて変化します)。

        たとえば、ユーザーがアクセスをリクエストまたは変更する場合、またはリクエストでサポートされているその他の操作を実行する場合、この値は-1になります。それ以外のすべてのUIアクション(リクエストの追跡や承認など)の場合、この値は有効なRequest IDになります。

        この値を使用して、リクエスト追跡または承認フローを、リクエストの作成と区別できます。

      • requestAction: このキーの値(NULLでない場合)は、ユーザーが実行するAPPROVAL_UPDATE、APPROVAL_VIEW、ACCOUNT_UPDATEおよびACCOUNT_VIEWなどのUIアクションに対応します。

        この値を使用して、リクエスト追跡フローをリクエスト承認フローと区別できます。APPROVAL_VIEWはリクエスト追跡フローに対応し、APPROVAL_UPDATEはリクエスト承認フローに対応します。

      • entityType: このキーの値(NULLでない場合)は、操作に関係するOracle Identity Managerのエンティティ・タイプ(ロールおよび権限など)に対応します。

  • oracle.iam.ui.platform.view.RequestFormContext.newInstance(null).getCurrentContext()メソッドを起動することにより、カートに関する情報を保持するRequestFormContextから取得されるデータ

    このメソッドにより、oracle.iam.ui.platform.view.RequestFormContext型のオブジェクトが返されます。RequestFormContextの詳細は、「RequestFormContextで使用可能なEL式」を参照してください。

30.11.6 カート項目レベルのUIのカスタマイズ

ユーザーが追加のリクエスト情報を指定できるようにする場合は、次のようにカート項目レベルでUIをカスタマイズできます。

  • リンクまたはボタンを、カート・レベルで選択的に表示します。

    たとえば、ユーザーにVPN管理者ロールおよびIT管理者ロールを付与する場合に、委任管理者がVPN管理者ロールの追加の情報を指定できて、IT管理者ロールの追加の情報を指定できないようにします。

  • コンテキストに基づいて、異なるタスクフローを起動します。

    たとえば、ウィジェット・サプライヤとIT管理者に対して、異なるカスタム・タスクフローまたはフォームを起動できます。

  • ポップアップ・ウィンドウをカスタマイズします(ウィンドウのアイコンやタイトルなど)。

次のコード・スニペットに、適切なEL式を使用したカスタマイズのサンプルを示します。

<af:commandLink xmlns:af="http://xmlns.oracle.com/adf/faces/rich" id="e3664710724" text="Additional Cart Item information" actionListener="#{catalogRequestBean.launchAdditionalRequestInfoTaskFlow}" rendered="#{backingBeanScope.additionalInfoHelperBean.renderAdditionalDetailsForCartItem}">
         <af:clientAttribute xmlns:af="http://xmlns.oracle.com/adf/faces/rich" name="taskFlowId" value="#{backingBeanScope.additionalInfoHelperBean.additionalInfoTaskFlowIdForCartItem}"/>
         <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 item Information"/>
         <af:clientAttribute xmlns:af="http://xmlns.oracle.com/adf/faces/rich" name="dialogTitle" value="#{backingBeanScope.additionalInfoHelperBean.popupTitle}"/>
      </af:commandLink>

このサンプル・コード・スニペットでは、「追加のカート情報」カスタム・リンクがカート詳細ページに追加されます。説明:

  • EL式、#{backingBeanScope.additionalInfoHelperBean.renderAdditionalDetailsForCartItem}を使用して、カート項目または行のカスタム・リンクを、renderedプロパティに対して選択的に表示します。

    このEL式を使用するには、RenderAdditionalDetailsForCartItemメソッドを伴うマネージドJAVA Bean(たとえば、additionalRequestInfoHelperBean)を開発します。このメソッドでは、リンクを表示する必要の有無に基づき、ブール値(trueまたはfalse)が返されます。マネージドBeanの詳細は、「マネージドBeanおよびタスク・フローの開発」を参照してください。

  • taskFlowId属性の値として指定されたEL式、#{backingBeanScope.additionalInfoHelperBean.additionalInfoTaskFlowIdForCartItem}を使用して、異なるタスクフローを起動します。

    このEL式を使用するには、getAdditionalInfoTaskFlowIdForCartItemメソッドを、additionalRequestInfoHelperBeanという名前のマネージドBeanにインクルードします。このメソッドにより、oracle.iam.ui.custom-dev-starter-pack.warの一部としてデプロイされるカスタム・タスクフローのIDを表す文字列値が返されます。たとえば、/WEB-INF/oracle/iam/ui/sample/catalog/tfs/additional-info-email-tf.xml#additional-info-email-tfです。taskFlowId属性の詳細は、「追加のリクエスト情報用カスタム・タスクフローの起動」を参照してください。

  • dialogTitle属性の値として指定されたEL式、#{backingBeanScope.additionalInfoHelperBean.popupTitle}を使用して、異なるポップアップ・ウィンドウ・タイトルを設定します。

    このEL式を使用するには、getPopupTitleメソッドを、additionalRequestInfoHelperBeanという名前のマネージドBeanにインクルードします。このメソッドにより、ポップアップ・ウィンドウ・タイトルとして表示される、適切な文字列値が返されます。dialogTitle属性の詳細は、「追加のリクエスト情報用カスタム・タスクフローの起動」を参照してください。

次の利用可能なデータを使用して、目的のカスタマイズを行えます。

  • #{row} EL式の評価による、選択しているカート項目または行に関するデータ

    これにより、oracle.adfinternal.view.faces.model.binding.FacesCtrlHierNodeBinding型のオブジェクトが返されます。結果をFacesCtrlHierNodeBindingにキャストして、そのAPIを使用してカート項目情報を取得できます。

    例:

    //Assume "row" is the result of evaluating EL expression "#{row}", and is NOT null.
     
    FacesCtrlHierNodeBinding rowData = (FacesCtrlHierNodeBinding)row;
     
    //This code populates cartItemDataMap with the data available in the row
     
    Map<String, Object> cartItemDataMap = new HashMap<String, Object>();
     
    for (String name : rowData.getAttributeNames()) {
    cartItemDataMap.put(name, rowData.getAttribute(name));
    }
     
    //Rest of the code can make use of the attrMap, which contains keys like entityType, entityName, entityDisplayName etc.
     
    //use the following cart item properties to achieve various customization usecases
    String entityType = (String)cartItemDataMap.get("entityType");
    String entityName = (String)cartItemDataMap.get("entityName");
    String entityDisplayName = (String)cartItemDataMap.get("entityDisplayName");
    
  • 次のいずれかの方法による、pageFlowScopeマップで利用可能なデータ

    • EL式、#{pageFlowScope}の評価

    • AdfFacesContext.getCurrentInstance().getPageFlowScope()メソッドの起動

      このメソッドにより、データをキーと値のペアとして含むjava.util.Mapのインスタンスが返されます。このマップに格納される有用な値(「マップ・キー」値)の一部は次のとおりです。

      • requestId: このキーに対応する値は、Request IDです(この値は、ユーザーの実行するUIアクションに応じて変化します)。

        たとえば、ユーザーがアクセスをリクエストまたは変更する場合、またはリクエストでサポートされているその他の操作を実行する場合、この値は-1になります。それ以外のすべてのUIアクション(リクエストの追跡や承認など)の場合、この値は有効なRequest IDになります。

        この値を使用して、リクエスト追跡または承認フローを、リクエストの作成と区別できます。

      • requestAction: このキーの値(NULLでない場合)は、ユーザーが実行するAPPROVAL_UPDATE、APPROVAL_VIEW、ACCOUNT_UPDATEおよびACCOUNT_VIEWなどのUIアクションに対応します。

        この値を使用して、リクエスト追跡フローをリクエスト承認フローと区別できます。APPROVAL_VIEWはリクエスト追跡フローに対応し、APPROVAL_UPDATEはリクエスト承認フローに対応します。

      • entityType: このキーの値(NULLでない場合)は、操作に関係するOracle Identity Managerのエンティティ・タイプ(ロールおよび権限など)に対応します。

  • oracle.iam.ui.platform.view.RequestFormContext.newInstance(null).getCurrentContext()メソッドを起動することにより、カートに関する情報を保持するRequestFormContextから取得されるデータ

    このメソッドにより、oracle.iam.ui.platform.view.RequestFormContext型のオブジェクトが返されます。RequestFormContextの詳細は、「RequestFormContextで使用可能なEL式」を参照してください。

30.11.7 追加のリクエスト情報の検証

追加のリクエスト情報で必須の属性値が送信される場合、(RequestDataを検証可能な)RequestDataValidatorプラグインを使用して、その送信を検証できます。


関連項目:

アプリケーション・インスタンスに関連するリクエスト用のプラグインの定義および構成の詳細は、第21章「承認および手動プロビジョニングのワークフローの開発」を参照してください。

次に示すのは、バリデータ・プラグインを登録する際の、ロールの割当て操作用の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>

30.12 UIカスタマイズの移行

あるOracle Identity Manager環境から別の環境、つまりテスト環境から本番環境(T2P)へのUIカスタマイズの移行は、次の使用例のヘルプを使用して説明します。

使用例1: 増分T2P

開発サイクルの間、構成の増分構築や、あるOracle Identity Manager設定から別の設定へ引き続き構成を移動します。これを実現するには、第38章「構成およびカスタマイズの移行」に説明されているように、デプロイメント・マネージャを使用します。しかし、デプロイメント・マネージャを使用したデータのエクスポートおよびインポートには、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ソース)で公開済/非公開の変更のトラッキングが行われていると考えられるためです。

ソースまたはテスト環境での非公開サンドボックスでは、次のことが当てはまります。

  • これらのサンドボックスの有効範囲を拡大した後、非公開サンドボックスを増分ワークとして後から移動することが考えられますが、それらは現在、本番環境には含まれていません。

  • 非公開サンドボックスはテストされていないため、本番環境には含めません。

30.13 UIカスタマイズのベスト・プラクティス

サンドボックスの作成時に、詳細説明を付けて作成し、作成中のサンドボックスの対象のエンティティをすべてリストします。たとえば、アプリケーション・インスタンスを作成中の場合は、アプリケーション・インスタンスの作成用にこのサンドボックスを作成していることをメモしておきます。アプリケーション・インスタンスの作成時にこのサンドボックスを公開し、Identity Self Serviceに移動してUIカスタマイズを実行する別のサンドボックスを作成します。これは、2人以上のユーザーが異なるサンドボックスを作成して、同じエンティティを作成し(この例ではアプリケーション・インスタンス)、それを異なるタイミングで公開した場合の問題を回避するためです。

30.14 UIカスタマイズのロールバック

インタフェースのカスタマイズおよびサンドボックスの公開後に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にログインします。