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

前
 
次
 

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

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


注意:

Oracle Identity Manager 11gリリース2 (11.1.2)には、暫定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.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 サンドボックスの管理

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

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

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


注意:

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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. 「インポート」をクリックします。

    サンドボックスはターゲット・デプロイメントにインポートされ、「使用可能なサンドボックス」タブに表示されます。

30.2.6 サンドボックスの公開

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


注意:

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


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

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

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

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

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

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

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

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

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

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


    注意:

    サンドボックスをアクティブ化しないでアプリケーション・インスタンスをカタログに追加しようとすると、エラーが発生します。


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

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

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

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

  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のデフォルトのスキンは、fusionです。

<?xml version="1.0" encoding='utf-8'?>
<trinidad-config xmlns="http://myfaces.apache.org/trinidad/config">
  <skin-family>fusion</skin-family>
</trinidad-config>

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

30.3.1 スキンの構成

fusionスキンによるデフォルトを保持して、特定のスタイルシート要素を上書きするには、次の手順を実行します。

  1. trinidad-skins.xmlファイルでスキンを作成します。trinidad-skins.xmlを/iam-consoles-faces.war/WEB-INF/ディレクトリからadmin.war/WEB-INF/ディレクトリにコピーします。/admin.war/WEB-INF/trinidad-skins.xmlファイルと/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>fusion.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. admin.war/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. admin.war/skins/myskin/myskin.cssファイルとiam-consoles-faces.war/skins/myskin/myskin.cssファイルの両方で、myskin.cssを作成します。

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

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


注意:

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


30.3.2 スキンの新規作成

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

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

    <?xml version="1.0" encoding='utf-8'?>
    <skins xmlns="http://myfaces.apache.org/trinidad/skin">
        <skin>
            <id>wells.desktop</id>
            <family>wells</family>
            <extends>fusionFx-v1.desktop</extends>
            <render-kit-id>org.apache.myfaces.trinidad.desktop</render-kit-id>
            <style-sheet-name>skins/wells/wells.css</style-sheet-name>
        </skin>
    </skins>
    
  2. 次に示すように、trinidad-config.xmlファイルを作成します。

    <?xml version="1.0" encoding="windows-1252"?>
    <trinidad-config xmlns="http://myfaces.apache.org/trinidad/config">
      <skin-family>fusion</skin-family>
    </trinidad-config>
    
  3. 次のシステム・プロパティを構成します。

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


    関連項目:

    • Oracle ADFが提供するADFスキンの間の継承関係の詳細は、『OracleFusion 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ユーザー・インタフェース開発者ガイド』を参照してください。


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

    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"/>
    
  5. 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>
    

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

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

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

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

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

ユーザー

「作成」ページ

「変更」ページ

ユーザー属性の詳細

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

本人情報

自己登録

ロール

「作成」ページ

「変更」ページ

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

- 問合せ基準

- 結果表の列

カタログ

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

- 結果表の列

- カタログ項目詳細

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

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

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

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



関連項目:

フォーム・デザイナを使用したフォームの作成および管理の詳細は、『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-2に、Oracle Identity Managerユーザー・コンテキストで使用可能なEL式を示します。

表30-2 ユーザー・コンテキストの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.adminRoles['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-3に、RequestFormContextに関わるEL式を示します。

表30-3 RequestFormContextに関わるEL式

EL 説明
#{pageFlowScope.requestFormContext}

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

#{pageFlowScope.requestFormContext.operation}

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

#{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. WEB-INF/classes/oracle/iam/ui/custom/ディレクトリに新規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. ブールEL式をrenderedプロパティに割り当てます。これは、Web Composerの「コンポーネントの表示」です。

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

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

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

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

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

表30-4 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 必要なUIコンポーネントの指定

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

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

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

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

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)のように入力します。


    ヒント:

    • イメージ・ファイルをOIM_ORACLE_HOME/server/apps/oim.ear/xlWebApp.warに配置し、URLで参照します(たとえば、url(/xlWebApp/mylogo.pngとします)。これは、Oracle Identity Managerのクラスタ化デプロイメントの各ノードで個別に実行する必要があります。

    • デフォルトでは、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. Webブラウザで別のタブを開きます。

    4. http://HOST:PORT/identity/faces/signinに移動します。ログイン・ページがカスタマイズ・モードで表示されます。


  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.7 リンクの追加

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

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

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

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

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

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

  3. 「コンテンツの追加」をクリックします。図30-7に示すように、「コンテンツの追加」ダイアログ・ボックスが表示されます。

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

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

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

  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.8 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コンポーネントを右クリックし、「削除」を選択します。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

30.5.1 ADFコンポーネントの保護

ADFセキュリティは、Oracle Identity Manager UIで有効にします。これは、すべてのタスク・フローおよびページ定義へのアクセスが、jazn-data.xmlファイルで定義される認可ポリシーによって制御されることを意味します。その結果、ADFセキュリティをデフォルトのOracle Identity Manager権限を超えて拡張し、ADFセキュリティ・フレームワークによってサポートされるように付与できます。


注意:

jazn-data.xmlファイルは、製品アーカイブ(EAR)に付属するポリシー・ストアです。デプロイメント中に、データベースOracle Platform Security Services (OPSS)ポリシー・ストアに関連付けられます。このファイルには、管理ロール、ADF UIセキュリティ・メタデータおよびOESポリシーが含まれます。このファイルは、JDeveloperで使用できます。


すべてのデフォルトのOracle Identity Managerタスク・フローは、これらをリソースとして定義し、アプリケーション・ロールに対する適切な権限を使用してjazn-data.xmlファイルに追加することによって保護する必要があります。タスク・フロー外にWebページを作成する場合、そのリソースはjazn-data.xmlファイルで保護される必要があります。jazn-data.xmlのタスク・フローの典型的なポリシー・エントリは次のとおりです。

<policy-store>
...
<jazn-policy>
<grant>
 <grantee>
   <principals>
     <principal>
       <class>oracle.security.jps.internal.
                 core.principals.JpsAnonymousRoleImpl</class>
      <name>anonymous-role</name>
     </principal>
    </principals>
  </grantee>
  <permissions>
   <permission>
    <class>oracle.adf.controller.security.TaskFlowPermission</class>
      <name>/WEB-INF/customer-registration-task-flow.xml#
             customer-registration-task-flow</name>
      <actions>view</actions>
    </permission>
    ...
  </permissions>
  ...
  </grant>
...
</jazn-policy>
</policy-store>

ADFセキュリティに関連する次のガイドラインに従います。

  • 認証されていないユーザーがアクセス可能なタスク・フローに対しては、匿名のロールを使用します

  • セルフ・サービスがアクセス可能なタスク・フローに対しては、認証済ロールを使用します。

  • 適用可能な場合は、Oracle Identity Managerのデフォルト管理ロールを使用して、タスク・フローおよびWebページに権限を付与します。

  • タスク・フローを定義する際は、タスク・フローにアクセスする必要のある管理ロールを決定します。これが決定されると、各UIアーティファクトのjazn-data.xmlファイルのエントリが更新されます。

実行時に、ADFセキュリティが有効な場合、ADFフレームワークはOPSSレイヤーにコールして、そのUIアーティファクトが保護されているか、保護されている場合はログイン中のユーザーがそれに対するアクセス権を持つかどうかをチェックします。OPSSレイヤーから受信した決定に基づいて、ADFはUIタスク・フローまたはWebページのレンダリングを決定します。

30.5.2 タスク・フローの保護

次の例に示すように、新しいタスク・フローそれぞれに対するエントリが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. 「表示」メニューから、「ソース」を選択します。オブジェクト・ツリーが表示されます。

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

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

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

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

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

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

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

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

  12. 保存し、カスタマイズ・モードを閉じます。ヘルプ・トピックは、ホーム・ページの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ライブラリ名を変更できます。その場合は、Manifest.MFのWARファイルのそのエントリで、同じライブラリ名を指定してください。

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

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

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

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

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

    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-9は、ツールバーの「上にボックスを追加」アイコンを示しています。

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

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

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

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

    図30-10 新しいコンテナ

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

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

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

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

  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の「構成」の下で、「参照」をクリックし、Lookup.WebClient.Questionsコードを検索します。

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

    図30-12の説明が続きます
    「図30-12 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-13に示すように、「パスワードを忘れた場合」ページに関する質問は、リストではなくoutputTextとしてレンダリングされます)。

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

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

  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-5でプロパティを特定し、必要に応じてそれを編集します。

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

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

    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で高度なカスタマイズを実装する場合は、管理対象JAVA Beanを開発して使用することができます。次のタイプのBeanがあります。

この項では、管理対象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. 「ライブラリの追加」をクリックします。

    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の追加を開始できます。

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およびクラスの追加を開始できます。

30.10.3 カスタム管理対象Beanの追加

カスタム管理対象Beanを追加するには、次の手順を実行します。

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

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

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

    リクエストBeanはoracle.iam.ui.platform.view.backing.BaseMBを拡張する必要があり、状態Beanはoracle.iam.ui.platform.view.backing.BaseStateMBを拡張する必要があります。

  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
                FacesUtils.partialRender(rootPanelPGL);
            }
        }
    
  3. ブール値を戻すメソッドを作成します。ページのレンダリング時に「連絡先情報」パネルが表示されるかどうかが、このメソッドによって決定されます。この例では、「ユーザー・タイプ」が「フルタイムの従業員」の場合に、「連絡先情報」パネルが表示されます。

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

    private static final String USER_TYPE_ATTRIBUTE = "usr_emp_type__c";
        
        public boolean isFullTimeEmployeeUserTypeSelected() {
            // return true if value of "usr_emp_type__c" binding attribute equals to "Full-Time"
            // "usr_emp_type__c" binding attribute is used to display value of User Type in the User Type drop-down        
            return "Full-Time".equals(FacesUtils.getListBindingValue(USER_TYPE_ATTRIBUTE, String.class));    
        }
    
  4. コードをJSFFとバインドするには、次の手順を実行します。

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

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


      注意:

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


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

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. JSFFにコードを追加します。これを行うには、次の手順を実行します。

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

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

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

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

  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}"));
        }
    
  4. JSFFにコードを追加します。これを行うには、次の手順を実行します。

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

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

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

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

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

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

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

カスタム・バリデータを実装するには、次の手順を実行します。

  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. ユーザーが「開始日」または「終了日」フィールドに新しい値を選択した場合に起動される既存のバリデータを作成するか、拡張します。このバリデータは、検証が失敗した場合にエラー・メッセージを生成し、更新されるフィールドにそれを付加します。それには、次のコードを使用します。

    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));
        }
    
  3. JSFFにコードをバインドします。これを行うには、次の手順を実行します。

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

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

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を次に示します。

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

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

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

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

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

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

    #{backingBeanScope.cartReqBean.submitActionListener}
    

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

    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プロジェクトの設定の詳細は、「ViewControllerプロジェクトの設定」を参照してください。カスタム管理対象Beanの追加の詳細は、「カスタム管理対象Beanの追加」を参照してください。


関連項目:

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


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

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

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

  1. oracle.iam.ui.custom共有ライブラリ(oracle.iam.ui.custom-dev-starter-pack.war)を特定します。これは、DM_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. 共有ライブラリを再デプロイします。

30.10.5.9 タスク・フローの起動

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

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

    public void actionListener(ActionEvent e) {
            // launch homepage taskflow in a tab
            // you can launch the taskflow in a popup also by setting inDialog to true
            FacesUtils.launchTaskFlow("home", "/WEB-INF/oracle/iam/ui/homepage/home/tfs/home-tf.xml#home-tf",
                           "Home", "/images/home.png", null, "helpTopicId", false, new HashMap<String, Object>());
        }
    

    ここで、FacesUtils.launchTaskFlow (/WEB-INF/oracle/iam/ui/homepage/home/tfs/home-tf.xml#home-tf)に渡される2番目のパラメータはタスクフローIDであり、既存のタスクフローIDと一致する必要があります。タスクフローIDは、タスクフロー定義ファイルのパス、#、およびタスクフロー定義ファイル内のtask-flow-definition要素のID属性の値(たとえば、<task-flow-definition id="home-tf">)で構成されています。

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

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


注意:

リンクまたはボタン・コンポーネントを含むJSFFページのページ定義には、次の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.11 UIカスタマイズのベスト・プラクティス

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