ヘッダーをスキップ
Oracle® Fusion Middleware Oracle WebCenter PortalおよびOracle JDeveloperでのポータルの開発
11gリリース1 (11.1.1.8.3)
E49666-03
  ドキュメント・ライブラリへ移動
ライブラリ
製品リストへ移動
製品
目次へ移動
目次

前
 
次
 

66 Oracle WebCenter Portalアプリケーションのパーソナライズ

この章では、パーソナライズをPortal Frameworkアプリケーションに統合し、ユーザーとアプリケーションの両方のコンテキストに基づく、ターゲット・コンテンツを提供する方法について説明します。また、この章ではアプリケーション・フローの宣言型定義を可能にする、パーソナライズ・ランタイム・システムおよびその関連ツールについても説明します。

この章の内容は、次のとおりです。

パーソナライズの詳細は、次も参照してください。

66.1 パーソナライズの概要

パーソナライズによって、Portal Frameworkアプリケーションで、動的に導出されたユーザー・エクスペリエンスが提供されます。パーソナライズでは、入力データの定義済ソースが評価され、その評価に基づく決定が生成された後、その情報が宣言的に定義されたパーソナライズ・シナリオに適用されます。たとえば、パーソナライズでは、特定のユーザーのアプリケーション体験をターゲットとし、そのユーザーに関する人事管理データベース内の情報に基づいて、コンテンツを戻したり、アプリケーション・フローを変更したりできます。

この項では、パーソナライズの機能と要件の概要について説明します。内容は次のとおりです。

66.1.1 パーソナライズ・アーキテクチャ

図66-1にアーキテクチャ、即時利用可能なサービス、およびパーソナライズを構成するコンポーネントを示します。これらについて、およびパーソナライズのその他のコンポーネントについては、次を参照してください。

図66-1 パーソナライズ・サービスのアーキテクチャ

図66-1の説明が続きます
「図66-1 パーソナライズ・サービスのアーキテクチャ」の説明

66.1.2 コンダクタ

この項では、コンダクタの役割について説明します。パーソナライズ・エンジンの中心であるコンダクタは、シナリオと呼ばれる作業単位を含み、それらを実行します。コンダクタは、準備済のシナリオを実行し、コンダクタに接続するプロバイダ拡張機能へのアクセスを提供します。次の項では、コンダクタのこれらの側面について説明します。

66.1.2.1 シナリオ

シナリオは、JDeveloperのシナリオ・エディタを使用して作成するスクリプトによって定義します(または、XMLファイルとして提供します)。シナリオは簡単な構文に基づいており、条件文の評価が可能です。その結果として、なんらかの形式のコンテンツがクライアントに返されます。コンテンツはクライアントへの返却に先立ち、フィルタ処理または操作できます。

シナリオは、目的のコンテンツを返すかわりに、アプリケーション・フローを動的に変更するためにも使用できるため、アプリケーション内でのユーザー・エクスペリエンスのパーソナライズが可能になります。

JDeveloperでは、シナリオ・エディタを使用して、シナリオをグラフィカルに設計できます。また、XMLファイル・ベースのシナリオを作成することもできます。第66.2.2.3項「シナリオ・エディタでの新しいシナリオの作成」および第66.2.2.4項「ノード・タイプを使用したシナリオ・フローの指定」を参照してください。また、第66.2.3項「ファイル・ベースのシナリオの作成」も参照してください。

66.1.2.2 パーソナライズされたアプリケーション・フロー

コンダクタ内で実行されるシナリオでは、特定のユーザーをターゲットとしたコンテンツを戻すだけでなく、アプリケーション・フローを制御したり、ユーザー・インタフェース・コンポーネントをレンダリングしたり、アプリケーション関連イベントを実行したりすることもできます。コンダクタのパブリックJavaおよび式言語(EL) APIを使用すると、既存のJavaアプリケーションやWebベースのアプリケーションとのシームレスな統合を実現できます。Java APIおよびEL APIの使用の詳細は、第72章「コンダクタAPIリファレンス」を参照してください。

66.1.2.3 プロパティ・セットの統合

プロパティ・サービスは、プロパティ・セットを使用してユーザーまたはアプリケーション・データのセットを編成し、プロパティ定義を使用してプロパティ・データにデータ型を割り当てます。プロパティ・サービスを拡張すると、企業のLDAPリポジトリに格納されている他のユーザー・プロファイル・データにアクセスしたり、Oracle MDSなどの他のリポジトリにアクセスしたりできます。プロパティ・サービスとプロパティ・セットの詳細は、第66.2.2.2項「プロパティ・セットとプロパティ定義の作成」を参照してください。

66.1.2.4 プロバイダの統合

プロバイダによって、シナリオ内の外部リソースにアクセスする方法が提供されます。コンダクタでは、プロパティ・サービス、Content Serverプロバイダ(CMIS)およびアクティビティ・グラフに対応した3つのデフォルト・プロバイダだけでなく、シナリオ内からのカスタム・プロバイダの実装とそれらへのアクセスを可能にする、拡張可能なアーキテクチャもサポートされます。プロバイダの詳細は、第66.1.3項「データ・プロバイダの使用」を参照してください。

66.1.3 データ・プロバイダの使用

データ・プロバイダは、外部サービスとの通信を可能にする、コンダクタ用のインタフェース・ポイントです。パーソナライズによって、プロパティ・サービスに対応したデフォルト・プロバイダ、Oracle WebCenter Content Serverとの対話処理を可能にするCMISプロバイダおよびアクティビティ・グラフと、プロパティ・サービス・プロバイダがピープル・コネクションとの統合を実現するために使用するロケータが提供されます。また、データ・プロバイダおよびファンクション・プロバイダという実装可能な2つのタイプのカスタム・プロバイダも提供されます。

この項では、デフォルト・プロバイダと2つのタイプのカスタム・プロバイダについて説明します。内容は次のとおりです。

66.1.3.1 デフォルト・プロバイダ

この項では、シナリオ内からアクセスできるデフォルト・プロバイダについて、およびプロパティ・サービス・プロバイダがピープル・コネクションとの統合を実現するために使用するロケータについて説明します。

この項には次のサブセクションが含まれます:

66.1.3.1.1 プロパティ・サービス・プロバイダ

プロパティ・サービス・プロバイダを使用すると、プロパティ・サービスとの統合を実現できます。また、このプロバイダを使用すると、特定のプロパティ・セット定義に対応したプロパティ・セットを取得したり、名前でプロパティ・セットを取得したり、プロパティ・セットから特定のプロパティを戻したりできます。プロパティ・サービス・プロバイダの詳細は、第66.2.2.6.1項「プロパティ・サービス・プロバイダの使用」を参照してください。

66.1.3.1.2 CMISプロバイダ

CMISプロバイダは、特にOracle WebCenter Content Serverにより提供される標準ベースのCMIS (Content Management Interoperability Services)コンテンツ・サーバーからコンテンツを取得および検索するサービスを提供します。CMISプロバイダには、結果を簡略化されたフォームに変換するためのユーティリティ関数プロバイダも用意されています。CMISプロバイダの統合の詳細は、第66.2.2.6.2項「CMISプロバイダの使用」を参照してください。コンテンツ・サーバー・プロバイダに対する接続構成の作成と編集の詳細は、Oracle Fusion Middleware Oracle WebCenter Portalの管理のRESTサービスのアイデンティティ・アサーション・プロバイダの構成に関する項を参照してください。

66.1.3.1.3 アクティビティ・グラフ・プロバイダ

アクティビティ・グラフ・プロバイダ(ActivityGraphProvider)は、WebCenter内での分析に基づいて、ユーザーの接続に関するニーズに対して推奨事項を提供するアクティビティ・グラフ・エンジン(アクティビティ・グラフ・サービスの基準)との統合を実現します。たとえば、アクティビティ・グラフ・プロバイダのメソッドrecommendedUsersは、指定されたユーザーが接続する可能性のあるユーザーのリストについてアクティビティ・グラフ・エンジンに問い合せます。

アクティビティ・グラフ・エンジンは、エンタープライズ・アプリケーションによって収集されるアクションの中央リポジトリを提供します。アクティビティ・グラフ・サービスとアクティビティ・グラフ・エンジンの詳細は、第46章「アクティビティ・グラフの統合」を参照してください。

アクティビティ・グラフ・プロバイダは、WebCenter Portalサーバー(WC_Spaces)上で実行しているアクティビティ・グラフの2つのRESTサービスにビルドされているため、WebCenter Portalを使用環境にインストールする必要があります。アクティビティ・グラフ・プロバイダのシナリオへの統合の詳細は、第66.2.2.6.3項「アクティビティ・グラフ・プロバイダの使用」を参照してください。アクティビティ・グラフ・プロバイダの接続構成の作成と編集の詳細は、Oracle Fusion Middleware Oracle WebCenter Portalの管理のアクティビティ・グラフ・プロバイダの構成に関する項を参照してください。

66.1.3.1.4 ピープル・コネクション・ロケータ

ピープル・コネクション・ロケータは、プロパティ・プロバイダがピープル・コネクションとの接続に使用するIPropertyLocatorです。ピープル・コネクションの利点の1つは、WebCenter Portalに格納されているユーザー・プロファイル情報にアクセスできることです。ピープル・コネクションの詳細は、第36.3.4.2.16項「ピープル・コネクションの使用」を参照してください。ピープル・コネクション・ロケータの詳細は、第66.2.2.6.1項「プロパティ・サービス・プロバイダの使用」を参照してください。ピープル・コネクション・ロケータの接続構成の作成と編集の詳細は、Oracle Fusion Middleware Oracle WebCenter Portalの管理のOracleピープル・コネクション・ロケータの構成に関する項を参照してください。

66.1.3.2 カスタム・データ・プロバイダの作成

データ・プロバイダは、コンダクタのアーキテクチャに接続し、なんらかのサービスのかわりに機能するコンポーネントです。データ・プロバイダから戻されたデータは、そのまま(Javaクラスとして)使用することも、連結して同じシナリオに含まれる他のデータ・プロバイダへの入力として使用することもできます。

データ・プロバイダは通常、指定されたユーザーの入力コンテキストで、または外部アプリケーション・データ・セットで(またはその両方で)動作します。パーソナライズには、ユーザー・データまたはアプリケーション・データ用に入力済データ記憶域を提供できるプロパティ・サービスが含まれていて、プロバイダへの入力としてアクセスできます。独自のデータ・プロバイダの作成の詳細は、第67章「カスタム・データ・プロバイダの実装」を参照してください。

66.1.3.3 カスタム・ファンクション・プロバイダの作成

ファンクション・プロバイダでは、式言語(EL)式を使用して起動できるユーティリティ・メソッド(データの操作と変換、ビジネス・ルールの計算などの用途があります)の作成を目的とした、コンダクタ用の拡張ポイントも提供されます。単純な例は、${strings:concat('string1','string2')})です。独自のファンクション・プロバイダの作成の詳細は、第68章「カスタム・ファンクション・プロバイダの実装」を参照してください。

CMISプロバイダとアクティビティ・グラフ・プロバイダには、それぞれ、その他のユーティリティとして特に、データ変換を容易にする独自のファンクション・プロバイダがあります。パーソナライズELの詳細は、付録Fの「パーソナライズに関連するEL」を参照してください。

66.2 アプリケーションへのパーソナライズの統合

この項では、Portal Frameworkアプリケーションにパーソナライズを統合する方法について説明します。

この項には次のサブセクションが含まれます:

66.2.1 パーソナライズの要件

この項では、JDeveloperを使用して、パーソナライズ・サービスを統合するWebCenter Portalアプリケーションを開発するための、設計時のシステム要件と依存性について説明します。パーソナライズの要件、依存性およびオプションの全リストは、Oracle Fusion Middleware Oracle WebCenter Portalの管理のパーソナライズの前提条件および制限に関する項を参照してください。

  • シナリオ内でCMISプロバイダ、アクティビティ・グラフ・プロバイダまたはピープル・コネクション・ロケータを使用している場合は、WebCenter Portalをインストールする必要があります。基本的な反復開発の場合、ドメインにWebCenter Portalをインストールする必要はありません。

  • REST APIを使用するには、Oracle Fusion Middleware Oracle WebCenter Portalの管理の「始める前に: 必須の構成の実行」に概要が記載されている手順を実行する必要があります。

  • パーソナライズでは、WebCenterトラスト・サービスによって、CMISプロバイダ経由でアクセスされるOracle WebCenter Content: Content Serverなど、WebCenterドメインに含まれる様々な管理対象サーバー間のシングル・サインオン(SSO)が提供されます。JDeveloperの統合ドメインの場合、DefaultDomain/scrpts-wcpsディレクトリにあるWLSTスクリプト(configureWCPS.py)を使用して、トラスト・サービスを構成する必要があります。WebCenterトラスト・サービスの構成およびこのスクリプトを使用したシングル・サインオンの詳細は、Oracle Fusion Middleware Oracle WebCenter Portalの管理のシングル・サインオンの構成に関する項を参照してください。

  • RESTサービスを構成する必要があります。RESTサービスの構成方法の詳細は、Oracle Fusion Middleware Oracle WebCenter Portalの管理の「RESTサービスの管理」の章を参照してください。


注意:

必要に応じて、アクティビティ・グラフとピープル・コネクションに対応したデフォルト・プロバイダをアプリケーションに含めることができますが、結果をJDeveloper内でテストすることはできません。また、これらのプロバイダは一部のみ構成されるため、Oracle Fusion Middleware Oracle WebCenter Portalの管理のOracle People Connectionsサービスの構成に関する項とアクティビティ・グラフ・サービスの構成に関する項の説明に従って、プロバイダの構成を完了する必要があります。


66.2.2 JDeveloperでのパーソナライズされたシナリオの作成

この項では、JDeveloperのパーソナライズ・ツールを使用して、パーソナライズされたシナリオを作成する方法について説明します。内容は次のとおりです。

66.2.2.1 プロパティ・ネームスペース・ファイルの作成

シナリオ設定の最初の手順は、プロパティ・ネームスペース・ファイルの作成です。このファイルには、シナリオが実行されるネームスペースの設定が格納されますが、これは通常、一連のデフォルト・プロパティ定義です。このファイルには、後ほど第66.2.2.2項「プロパティ・セットとプロパティ定義の作成」で定義する、プロパティ定義およびプロパティ・セット定義も格納されます。

JDeveloperでプロパティ・ネームスペース・ファイルを作成するには:

  1. アプリケーション・ナビゲータでアプリケーションを開き、「ファイル」メニューから「新規」を選択します。

    「新規ギャラリ」ダイアログが表示されます(図66-2を参照)。

    図66-2 「新規ギャラリ」ダイアログ

    図66-2の説明が続きます
    「図66-2 「新規ギャラリ」ダイアログ」の説明


    注意:

    「パーソナライズ」カテゴリが表示されない場合は、「すべてのテクノロジ」タブを開いてそれを選択するか、「選択済のテクノロジ」をクリックしてプロジェクトにWebCenterパーソナライズを追加します。


  2. プロパティ・ネームスペースを選択し、「OK」をクリックします。

    「ネームスペースの作成」ダイアログが表示されます(図66-3を参照)。

    図66-3 「ネームスペースの作成」ダイアログ

    図66-3の説明が続きます
    「図66-3 「ネームスペースの作成」ダイアログ」の説明

  3. ネームスペースの名前を入力し、デフォルトのプロパティ定義を含めるチェック・ボックスを選択して、初期のデフォルト・プロパティ定義をネームスペースに追加した後、「OK」をクリックします。

    デフォルトのプロパティ定義を含めるチェック・ボックスでは、初期のデフォルトのプロパティ定義がネームスペース・ファイルに追加されるかどうかを制御します。これらは、IntDefNumberDefStringDefBooleanDefDateTimeDefClobDefIntArrayDefNumberArrayDefStringArrayDefBooleanArrayDefDateTimeArrayDefClobArrayDefです。プロパティ定義は必要のない場合、後で削除できます。または、このチェック・ボックスを未選択のままにして、初期のプロパティ定義を使用しないで開始し、必要に応じてプロパティ・エディタでプロパティ定義を作成することもできます。

    設計ペインにネームスペース・ファイルがグラフィック形式で表示されます(図66-4を参照)。

    図66-4 設計ペイン - ネームスペース定義

    図66-4の説明が続きます
    「図66-4 設計ペイン - ネームスペース定義」の説明

  4. 第66.2.2.2項「プロパティ・セットとプロパティ定義の作成」の説明に従って、シナリオ内で必要になるプロパティ・セットとプロパティを定義します。

66.2.2.2 プロパティ・セットとプロパティ定義の作成

プロパティは、シナリオのフロー内で条件の評価基準にできる人や物に関するデータです。たとえば、プロパティには人の年齢や性別が含まれる場合があります。プロパティ・セットは、簡単に言えば、関連プロパティのコレクションまたはコンテナです。

プロパティ・セットと関連プロパティを定義するには:

  1. JDeveloperのアプリケーション内で、設計ペインのネームスペースを右クリックし、「新規プロパティ・セット定義の作成」を選択して、「OK」をクリックします。

    新しいプロパティ・セットの作成ダイアログが表示されます(図66-5を参照)。

    図66-5 新しいプロパティ・セットの作成ダイアログ

    図66-5の説明が続きます
    「図66-5 新しいプロパティ・セットの作成ダイアログ」の説明

  2. プロパティ・セットの名前を入力し、「OK」をクリックします。

    新しいプロパティ・セットのノードが「デザイン」ペインに表示されます(図66-6を参照)。

    図66-6 「デザイン」ペイン - 新しいプロパティ・セット定義

    図66-6の説明が続きます
    「図66-6 「デザイン」ペイン - 新しいプロパティ・セット定義」の説明

  3. プロパティを新しいプロパティ・セットに追加するには、プロパティ・セットを右クリックし、「新規プロパティ定義マッピングの作成」を選択します。

    プロパティ・マッピングの作成ダイアログが表示されます(図66-7を参照)。

    図66-7 プロパティ・マッピングの作成ダイアログ

    図66-7の説明が続きます
    「図66-7 プロパティ・マッピングの作成ダイアログ」の説明

  4. 「プロパティ名」に入力して「定義」(値のデータ型)を選択後、「OK」をクリックします。

    新しいプロパティ定義を作成するには、「定義」ドロップダウン・リストのNew Definitionを選択します。

    新しいプロパティが、プロパティ・セットのグラフィック表現の一部として表示されます(図66-8を参照)。

    図66-8 設計ペイン - プロパティ定義

    図66-8の説明が続きます
    「図66-8 設計ペイン - プロパティ定義」の説明

  5. 他に必要なプロパティをプロパティ・セット定義に追加(または新しいプロパティ・セットを作成)した後、第66.2.2.3項「シナリオ・エディタでの新しいシナリオの作成」の説明に従ってシナリオを作成します。

66.2.2.3 シナリオ・エディタでの新しいシナリオの作成

コンダクタのシナリオ・エディタには、コンダクタによって管理されるシナリオ定義の表示と編集に対応するビジュアル・ツールがあります。シナリオ・エディタはシナリオをファイル形式とビジュアル形式の両方で格納しており、JDeveloper内から使用できます。シナリオを作成する前に、ネームスペースと、シナリオに必要な最低限のプロパティ・セットとプロパティを作成しておく必要があります。

JDeveloperのシナリオ・エディタを使用して新しいシナリオを作成するには:

  1. JDeveloperで、アプリケーション内からナビゲーション・バーのアプリケーションを右クリックし、「新規」を選択します。

    「新規ギャラリ」ダイアログが表示されます(図66-9を参照)。

    図66-9 「新規ギャラリ」ダイアログ

    図66-9の説明が続きます
    「図66-9 「新規ギャラリ」ダイアログ」の説明


    注意:

    「パーソナライズ」カテゴリが表示されない場合は、「すべてのテクノロジ」タブを開いてそれを選択するか、「選択済のテクノロジ」をクリックしてプロジェクトにパーソナライズ・テクノロジを追加します。


  2. 「シナリオ」を選択して「OK」をクリックします。

    新規シナリオ・ウィザードのダイアログが表示されます(図66-10を参照)。

    図66-10 新規シナリオ・ウィザードのダイアログ

    図66-10の説明が続きます
    「図66-10 新規シナリオ・ウィザードのダイアログ」の説明

  3. 新規シナリオ・ファイルの作成を選択し、必要に応じて、ファイル名とファイルの格納場所を変更します。シナリオ名の拡張子(.scenarios_diagram)は変更できないことに注意してください。

    シナリオ・エディタに新しい「開始」ノードが表示されます(図66-11を参照)。

    図66-11 シナリオ・エディタ - 「開始」ノード

    図66-11の説明が続きます
    「図66-11 シナリオ・エディタ - 「開始」ノード」の説明

  4. シナリオにノードを追加するには、新しいノードの追加先となるノードを右クリックし、「次の文を追加」を選択した後、図66-12のようにリストからノード・タイプを選択します。

    図66-12 シナリオ・エディタでのノードの追加

    図66-12の説明が続きます
    「図66-12 シナリオ・エディタでのノードの追加」の説明

    新しいノードを右クリックして、ノード・プロパティの設定とフローの拡張に関するオプションを表示します。使用可能なノード・タイプについては、第66.2.2.4項「ノード・タイプを使用したシナリオ・フローの指定」を参照してください。

66.2.2.4 ノード・タイプを使用したシナリオ・フローの指定

シナリオ・エディタでは、(判断に使用される)サブツリーの組合せによってフローが表されるツリー構造の固定レイアウト、およびループや複雑なネストされたif/else判断のフローを表す内部ラベル参照が使用されます。

ノード・タイプ

  • 開始: 「開始」ノードは、シナリオの開始地点を定義するルート・レベルのノードです。

  • 戻る: 「戻る」ノードは、シナリオの実行を停止し、指定されたEL式の評価結果をコール元に戻します。

  • 変数の設定: 「変数の設定」ノードでは、現在実行中のシナリオのコンテキスト内にスコープ指定される変数を定義し、それを式によって初期化できます。

  • スクリプト: 埋込みEL式を使用するスクリプトを含め、シナリオにスクリプトを追加するには、「スクリプト」ノードを使用します。スクリプト・エンジンにはMIMEタイプかエンジン名のいずれかが指定できます。

  • 実行: 「実行」ノードは、戻り値を期待せずに、指定されたEL式を起動します。変数の割当てと同様、式の結果のみがシナリオのコンテキスト内に格納されません。

  • エラー・ハンドラ: 「エラー・ハンドラ」ノードでは、Javaに似たCatch/Try構文が提供されます。この構文ではTry節を使用し、条件のテストおよび結果に応じてレスポンスを返すことができます。

  • 条件付き: 「条件付き」ノードは、EL式を評価し、EL式がtrueと評価された場合、そこに含まれる文を実行します。「Otherwise」ブロック内の文は、すべての条件文がfalseと評価された場合のみ実行されます。

  • For Each: 「For Each」ノードは、要素のコレクションに対してループおよび反復機能を提供します。

  • while: 指定されたEL式がtrueと評価されるかぎり、ループおよび反復機能を提供します。

  • エラー発生: エラーが発生し、指定されたエラー・メッセージとともに、そのエラーがスローされます

  • プロバイダの起動: IDataProviderの名前の実装を起動します。結果は、現在実行されているシナリオのコンテキスト内に格納されます。

  • シナリオの起動: 同じネームスペース内の別の名前付きシナリオを起動します。結果は、現在実行されているシナリオのコンテキスト内に格納されます

66.2.2.5 プロパティ・セットとプロパティ・ロケータの定義

プロパティ・エディタでは、プロパティ・サービスによって管理される、プロパティ・セット定義とそれに関連付けられたプロパティ定義を表示および編集できます。プロパティ・エディタは、プロパティ・サービスを通じてデータと通信し、それらを保持します。

プロパティ・セットとそれに含まれるプロパティは、様々な場所に様々な形式で格納できるため、それらの取得にはロケータ機能が必要です。プロパティ・セットのデータを取得し、事前構成済データベースに格納する、デフォルトのプロパティ・セット・ロケータが提供されています。このデフォルト・ロケータは、プロパティ・セット用に他のロケータが指定されなかった場合のみ使用されます。

ピープル・コネクション・サービス用のカスタム・ロケータもデフォルトで提供されます(詳細は第66.1.3.1.4項「ピープル・コネクション・ロケータ」を参照)が、他のデータ・ソース用に追加のロケータを定義することもできます。プロパティとプロパティ・セット用に複数のロケータを定義でき、それらは優先順位に従って定義することもできます。ロケータの実装手順については、第70章の「カスタム・ロケータの実装」を参照してください。1つのプロパティ・セット定義に複数のロケータの関連付けが可能ですが、複数のロケータの中の1つに割当てが可能なのは、そのプロパティ・セット定義内の1つのプロパティのみです。

66.2.2.6 デフォルト・プロバイダの使用

パーソナライズには、シナリオ内で使用する即時利用可能な3つのプロバイダ、プロパティ・サービス・プロバイダ、コンテンツ・サーバー・プロバイダ(CMIS)、およびアクティビティ・グラフが用意されています。この項では、次のサブセクションでこれらのプロバイダをアプリケーションに統合する方法を説明します。

66.2.2.6.1 プロパティ・サービス・プロバイダの使用

プロパティ・サービス・プロバイダ(oracle.PropertiesServiceProvider)により、パーソナライズ・サーバー・プロパティ・サービスとの統合が実現できます。このプロバイダを使用すると、特定のプロパティ・セット定義に対してプロパティ・セットを取得したり、プロパティ・セットを名前別に取得したり、プロパティ・セットから特定のプロパティを返したりすることができます。ピープル・コネクション・ロケータを使用してプロファイル・データをシナリオに統合している場合は、それを使用する前にプロパティ・サービスを構成する必要があります。ピープル・コネクション・ロケータの詳細は、第66.1.3.1.4項「ピープル・コネクション・ロケータ」を参照してください。プロパティ・サービス・プロバイダの構成の詳細は、Oracle Fusion Middleware Oracle WebCenter Portalの管理のOracleピープル・コネクション・ロケータの構成に関する項を参照してください。

66.2.2.6.2 CMISプロバイダの使用

CMISプロバイダ(CMISProvider)では、コンテンツを標準ベースのCMIS (Content Management Interoperability Services)コンテンツ・サーバーから検索して取得するためのサービスが提供されます。WebCenterの場合、これはOracle WebCenter Content: Content Serverによって提供されます。また、CMISプロバイダでは、結果を単純な形式に変換するためのユーティリティ・ファンクション・プロバイダ(CMISFunctionProvider)も提供されます。次の例を試す前に、Oracle Fusion Middleware Oracle WebCenter Portalの管理のCMISプロバイダの構成に関する項の説明に従って、必ずCMISプロバイダ接続を構成してください。

CMISプロバイダのシナリオの例

次を使用してシナリオを作成します(application/xmlcontent-typeを必ず設定してください)。

リクエストURI:

POST http://localhost:8891/wcps/api/conductor/namespaces/myNameSpace/scenarios

リクエスト本文:

<scenarioMetadata>
<scenario xmlns:common="http://xmlns.oracle.com/wcps/conductor/common/1.0.0" xmlns:scenario="http://xmlns.oracle.com/wcps/conductor/scenarios/1.0.0">
  <body>
    <call-provider>
      <provider-name>CMISProvider</provider-name>
      <connection-name>CmisConfigConnection</connection-name>
      <variable>exprString</variable>
      <input>
        <parameter>
            <common:name>search</common:name>
            <common:value>SELECT * FROM cmis:document WHERE cmis:name LIKE 'flowers'</common:value>
        </parameter>
      </input>
    </call-provider>
    <return>
      <expression>${exprString}</expression>
    </return>
  </body>
  <name>CMIS Scenario</name>
  <comments>CMIS Scenario comments</comments>
  <tags>
    <tag>CMIS Scenario tag</tag>
  </tags>
</scenario>
</scenarioMetadata>

シナリオの実行

リクエストURI:

POST http://localhost:8891/wcps/api/conductor/namespaces/myNameSpace/scenarios/CMIS%20Scenario

リクエスト本文:

<parameters/>

CMISFunctionProviderの使用

ファンクション・プロバイダは、シナリオから起動できるユーティリティ・クラスです。CMISFunctionProviderでは、いくつかのメソッドがサポートされます(詳細はクラスのJavaDocを参照)。2つのメソッドの例を次に示します。

/**
     * Convert the array of input IDs to a CMIS query in the form of 'IN'
     * @param ids Array of document IDs, in the form of dDocName only
     * @return CMIS query String
     */
public static String getCMISQueryForDocIDs(
    @PublicParameter(parameterName="repository",descriptionBundleKey="getCMISQueryForDocIDs.parameter.description.inputList") String repository,
    @PublicParameter(parameterName="ids",descriptionBundleKey="getCMISQueryForDocIDs.parameter.description.inputList") List<String> ids))
...


/**
     * Convert the array of input IDs to a CMIS query in the form of 'IN'
     * @param ids, in the form of a WebCenter document ObjectURN.  For example: stanl18-ucm11g#dDocName:MOUNTAINS
     * @return CMIS query String
     */
 public static String
    getCMISQueryForDocIDsFromFullID(@PublicParameter(parameterName="ids",
            descriptionBundleKey="getCMISQueryForDocIDs.parameter.description.inputList") List<String> ids)

シナリオでのCMISFunctionProviderの使用

次のシナリオ・スニペットでは、データがCMISFunctionProviderに指定され、複数のノードに対してCMIS問合せが作成される状況を示しています。この問合せはその後、CMISプロバイダに送信されます。(より現実的なケースでは、データを生成するかわりに、たとえばアクティビティ・グラフ・プロバイダのコールによる結果を渡すこともできます。)

<scenario:scenario xmlns:common="http://xmlns.oracle.com/wcps/conductor/common/1.0.0"
                   xmlns:scenario="http://xmlns.oracle.com/wcps/conductor/scenarios/1.0.0">
  <comments>testFunctionProviderScenario4 comments</comments>
  <body>
   <assign-variable>
      <variable>ids</variable>
      <expression>${collections:new()}</expression>
    </assign-variable>
    <execute>
      <expression>${collections:append(ids,'StellentRepository#dDocName:MOUNTAINS')}</expression>
    </execute>
    <execute>
      <expression>${collections:append(ids,'StellentRepository#dDocName:PARKS')}</expression>
    </execute>
    <execute>
      <expression>${collections:append(ids,'StellentRepository#dDocName:PATAGONIAPARKS')}</expression>
    </execute>
 
    <!-- Assign those as IDs to send to CMIS -->
    <assign-variable>
        <variable>cmisQuery</variable>
        <expression>${cmisfunction:getCMISQueryForDocIDsFromFullID(ids)}</expression>
    </assign-variable>
 
    <!-- Make the call to CMIS -->
    <call-provider>
      <provider-name>CMISProvider</provider-name>
      <connection-name>NonProxyConnection</connection-name>
      <variable>cmisResults</variable>
      <input>
        <parameter>
            <common:name>search</common:name>
            <common:value>${cmisQuery}</common:value>
        </parameter>
      </input>
    </call-provider>
    <return>
      <expression>${cmisResults}</expression>
    </return>
  </body>
  <name>testFunctionProviderScenario4</name>
 
</scenario:scenario>
66.2.2.6.3 アクティビティ・グラフ・プロバイダの使用

アクティビティ・グラフ・プロバイダ(ActivityGraphProvider)によって、WebCenter内での分析に基づいて推奨事項を提供するアクティビティ・グラフ・サービスとの統合が実現されます。次の例を試す前に、Oracle Fusion Middleware Oracle WebCenter Portalの管理のアクティビティ・グラフ・プロバイダの構成に関する項の説明に従って、必ずアクティビティ・グラフ・サービスの接続を構成してください。

アクティビティ・グラフ・プロバイダのシナリオの例

次を使用してシナリオを作成します(application/xmlcontent-typeを必ず設定してください)。

リクエストURI:

POST http://localhost:8891/wcps/api/conductor/namespaces/default/scenarios

リクエスト本文:

<scenarioMetadata>
<scenario xmlns:common="http://xmlns.oracle.com/wcps/conductor/common/1.0.0">
    <body>
        <call-provider>
            <provider-name>ActivityGraphProvider</provider-name>
            <connection-name>ActivityGraphConfigConnection</connection-name>
            <resource-name>QueryCommonItems</resource-name>
            <method-name>queryCommonItems</method-name>
            <variable>providerResults</variable>
            <input>
                <parameter>
                    <common:name>sourceClassURN</common:name>
                    <common:value>WC.user</common:value>
                </parameter>
                <parameter>
                    <common:name>sourceObjectURN</common:name>
                    <common:value>carl</common:value>
                </parameter>
                <parameter>
                    <common:name>targetClassURN</common:name>
                    <common:value>WC.user</common:value>
                </parameter>
                <parameter>
                    <common:name>targetObjectURN</common:name>
                    <common:value>monty</common:value>
                </parameter>
                <parameter>
                    <common:name>similarityURN</common:name>
                    <common:value>user-edit</common:value>
                </parameter>
            </input>
        </call-provider>
        <return>
            <expression>${providerResults}</expression>
        </return>
    </body>
    <name>QueryCommonItemsScenario</name>
    <comments>QueryCommonItemsScenario comments</comments>
    <tags>
        <tag>invoke</tag>
        <tag>sample</tag>
        <tag>provider</tag>
        <tag>resource</tag>
        <tag>input</tag>
        <tag>parameters</tag>
        <tag>overloaded</tag>
    </tags>
</scenario>
</scenarioMetadata>

シナリオの実行

次に進む前に、ヘッダー値Accept=application/xmlcontent-type=application/xmlを設定する必要があります。

リクエストURI:

POST http://localhost:8891/wcps/api/conductor/namespaces/default/scenarios/QueryCommonItemsScenario

リクエスト本文:

<parameters/>

AGFunctionProviderの使用

ファンクション・プロバイダは、シナリオから起動できるユーティリティ・クラスです。AGFunctionProviderの使用例を次に示します。

/**
     * Return the value of 'ObjectURN', only for WC.document, from the input Object.
     * @param agResults From call to 'QueryRecommendations' or QueryItems.  Can be one of the following Classes:
     *
     * From AG REST 'recommendations'
     * <ul>
     *   <li> Recommendations
     *   <li> RecommendedItems
     *   <li> List<Recommendation>
     * </ul>
     *
     * From AG REST 'items'   (common items)
     * <ul>
     *   <li> Results
     *   <li> Items
     *   <li> List<Item>
     * </ul>
     *
     * @param dDocNameOnly  If true, just the last part of the ObjectURN for
     * document will be returned; otherwise, the entire ObjectURN will be.
     * For example, if ObjectURN is example-ucm11g#dDocName:EXAMPLEACL000116,
     * if this value is 'true', then only EXAMPLEACL000116 will be returned.
     * Otherwise, all of stanl18-ucm11g#dDocName:EXAMPLEACL000116 is returned.
     *
     * @return a List of ObjectURN representing the document ID
     */
    @PublicFunction
 
    public static List<String> getDocumentIDs(
@PublicParameter(parameterName="agResults",descriptionBundleKey="getContentIDs.parameter.description.inputList")Object agResults,
 @PublicParameter(parameterName="dDocNameOnly",  descriptionBundleKey="getContentIDs.parameter.description.inputList")boolean dDocNameOnly)
    {
...

/**
     * Return the value of 'ObjectURN' for the 'ClassURN' from the input Object.
     * @param agResults From call to 'QueryRecommendations' or QueryItems.  Can be one of the following Classes:
     *
     * From AG REST 'recommendations'
     * <ul>
     *   <li> Recommendations
     *   <li> RecommendedItems
     *   <li> List<Recommendation>
     * </ul>
     *
     * From AG REST 'items'   (common items)
     * <ul>
     *   <li> Results
     *   <li> Items
     *   <li> List<Item>
     * </ul>
     *
     * param filterClassURN return content only of this type.  Examples are: WC.wiki-page, WC.group-space, WC.user, WC.blog,
     * WC.topic, WC.document.  If this is null, return all types.
     *
     * @return a List of ObjectURN representing the item identifier.
     */
    @PublicFunction
            (
                    functionName="getContentIDs",
                    descriptionBundleKey="getContentIDs.method.description"
            )
    public static List<String> getContentIDs(@PublicParameter(parameterName="agResults",
         descriptionBundleKey="getContentIDs.parameter.description.inputList")Object agResults,
                                             @PublicParameter(parameterName="filterClassURN",
                                                     descriptionBundleKey="getContentIDs.parameter.description.filterClassURN") String filterClassURN)
    ...

/**
     * Filter recommendations by score.  Only those recommendations with a score >= the cutoff will be preserved.
     */
    @PublicFunction
            (
                    functionName="filterRecsByScore",
                    descriptionBundleKey="filterRecsByScore.method.description"
            )
    public static Recommendations filterRecsByScore(
            @PublicParameter(parameterName="recommendations",
            descriptionBundleKey="filterRecsByScore.parameter.description.agRecs") Recommendations recs,
            @PublicParameter(parameterName="cutoffScore",
            descriptionBundleKey="filterRecsByScore.parameter.description.cutoffScore") float cutoffScore
            )
    {

シナリオでのAGFunctionProviderの使用

次のシナリオでは、まずアクティビティ・グラフRESTサービスがコールされます。そのコールの結果はagRecommendations変数に格納されます。このシナリオでは、次にAGFunctionProvider.getContentIDs()メソッドをコールしてagRecommendationsの結果(アクティビティ・グラフ・オブジェクト)を渡し、expressionsコールの評価内で保持されるドキュメントIDのList<String>を戻します。

<expression>${agfunction:getContentIDs(agRecommendations,'WC.user')}</expression>

 <scenario:scenario xmlns:common="http://xmlns.oracle.com/wcps/conductor/common/1.0.0"
                   xmlns:scenario="http://xmlns.oracle.com/wcps/conductor/scenarios/1.0.0">
    <comments>CallProviderScenario comments</comments>
    <body>
        <call-provider>
            <provider-name>ActivityGraphProvider</provider-name>
            <connection-name>AgTestServerConnection</connection-name>
            <resource-name>QueryRecommendations</resource-name>
            <method-name>getRecommendationsUsingDefaultRecipe</method-name>
            <variable>agRecommendations</variable>
            <input>
                <parameter>
                    <common:name>classURN</common:name>
                    <common:value>WC.user</common:value>
                </parameter>
                <parameter>
                    <common:name>objectURN</common:name>
                    <common:value>carl</common:value>
                </parameter>
            </input>
        </call-provider>
 
          <!-- Now call function provider to translate into user IDs.  A more specific call is available for WC.document; this just tests
         the ability of the function provider to handle different types of content  -->
        <return>
            <expression>${agfunction:getContentIDs(agRecommendations,'WC.user')}</expression>
        </return>
    </body>
    <name>CallProviderScenario</name>
</scenario:scenario>

66.2.3 ファイル・ベースのシナリオの作成

シナリオ・エディタを使用するだけでなく、XML形式のファイル・ベースのシナリオを作成することもできます。ファイル・ベースのシナリオは、コンダクタのインポート・ファンクションとエクスポート・ファンクション、およびJDeveloper MDSの統合を通じてのみサポートされます。ファイル・ベースのシナリオをシナリオ・エディタにインポートするには、シナリオの作成時に「既存のシナリオ・ファイルのインポート」オプションを選択します。

表66-1は、シナリオ・ファイルのコンテンツを構成する文を示しています。文の詳細は、第66.2.2.4項「ノード・タイプを使用したシナリオ・フローの指定」のノードに関する説明を参照してください。

表66-1 シナリオの文

説明

変数の設定

現在実行中のシナリオのコンテキスト内にスコープ指定された変数を作成します。

<assign-variable>
     <variable>index</variable>
    <expression>3</expression>
</assign-variable> 

実行

戻り値を期待せずに、指定されたEL式を起動します。変数の割当てと同様、式の結果のみがシナリオのコンテキスト内に格納されません。

<execute>
   <comments>Adds to an existing
collection.</comments> <expression>${collections:append(responses,
'The outlook is not so good.')}</expression> </execute>

条件付き

EL式を評価し、EL式がtrueと評価された場合、そこに含まれる文を実行します。「Otherwise」ブロック内の文は、すべての条件文がfalseと評価された場合のみ実行されます。

<conditions>
      <body>
        <condition>
          <body>
            <assign-variable>
              <variable>customerType</variable>
              <expression>Great Customer</expression>
            </assign-variable>
          </body>
          <expression>${customer.totalMoneySpent >= 100000}</expression>
        </condition>
        <otherwise>
          <body>
            <assign-variable>
              <variable>customerType</variable>
              <expression>Good Customer</expression>
            </assign-variable>
          </body>
        </otherwise>
      </body>
</conditions>

エラー・ハンドラ

シナリオにtry/catchブロックが追加できるようになります。

<body>
        <error-handler id="_1">
            <try id="_2">
                <body/>
            </try>
            <catch id="_3">
                <body/>
                <variable>exception</variable>
            </catch>
        </error-handler>
    </body>

For Each

要素のコレクションに対してループおよび反復機能を提供します。

<for-each>
      <body>
         <execute>
           <comments>
               Let's send each great customer an email, thanking them for their loyalty.
           </comments>
           <expression>
               ${emailService:sendMail(customer,'Subject:Thanks for being a great customer')}
           </expression>
         </execute>
      </body>
      <variable>customer</variable>
      <max-iterations>10</max-iterations>
      <items>${greatCustomers}</items>
</for-each>

スクリプト

シナリオ内でスクリプトが実行できるようにします。スクリプトはJavaScript、Groovy、JRuby、Pythonで作成できます。

<body>
        <script type="text/javascript" resolveAsExpression="true" id="_5">
            <variable>hello</variable>
            <source>y=5;
                    z=2;
                    x=y+z;
                    hello=x;
            </source>
        </script>
        <return id="_6">
            <expression>${hello}</expression>
        </return>
    </body>

while

指定されたEL式がtrueと評価されるかぎり、ループおよび反復機能を提供します。

<while>
      <body>
        <assign-variable>
          <comments>Sum up customer invoices to arrive at customer total expenditure.</comments>
          <variable>customerTotalSpent</variable>
          <expression>${customerTotalSpent+order.invoiceTotal}</expression>
        </assign-variable>
      </body>
      <expression>${customer.id = currentCustomerId }</expression>
      <max-iterations>-1</max-iterations>
</while> 

シナリオの起動

同じネームスペース内の別の名前付きシナリオを起動します。結果は、現在実行されているシナリオのコンテキスト内に格納されます。

<call-scenario >
    <variable>greeting</variable>
    <scenario>randomGreetingGenerator</scenario>
    <input>
        <parameter>
          <ns2:name>greetingsList</ns2:name>
          <ns2:value>hello, Bonjour, Buenos días</ns2:value>
        </parameter>
    </input>
</call-scenario> 

プロバイダの起動

IDataProviderの名前の実装を起動します。結果は、現在実行されているシナリオのコンテキスト内に格納されます

<call-provider>
      <provider-name>CRM_Provider</provider-name>
      <connection-name>crm_db</connection-name>
      <resource-name>getGreatCustomers</resource-name>
      <variable>greatCustomers</variable>
      <input>
          <parameter>
              <ns2:name>minMoneySpent</ns2:name>
              <ns2:value>100000</ns2:value>
          </parameter>
      </input>
</call-provider> 

戻る

指定されたEL式の評価結果を戻します。

<return>
    <comments>Return the sales rep who
sold the most widgets this month.</comments> <expression>${bestSalesRep.id}</expression> </return>

エラー発生

エラーが発生し、指定されたエラー・メッセージとともに、そのエラーがスローされます

<raise-error>
      <comments>User is unathorized,
so let's return a 401.</comments> <statusCode>401</statusCode> <message>User ${ScenarioContext.scenarioRequest.user
Principal.name} is unauthorized to
execute this scenario.</message> </raise-error>

スクリプト

スクリプトを追加します。埋込みEL式を使用したスクリプトも含まれます。



例66-1 ファイル・ベースのシナリオの例

<scenario:scenario xmlns:common="http://xmlns.oracle.com/wcps/conductor/common/1.0.0"
                   xmlns:scenario="http://xmlns.oracle.com/wcps/conductor/scenarios/1.0.0">
  <comments>sampleScenarioWithIf comments</comments>
  <body>
    <assign-variable>
      <variable>index</variable>
      <expression>3</expression>
    </assign-variable>
    <conditions>
      <body>
        <condition>
          <body>
            <assign-variable>
              <variable>ResultVar</variable>
              <expression>conditionSatisfied</expression>
            </assign-variable>
          </body>
          <expression>${index == 3}</expression>
        </condition>
        <otherwise>
          <body>
            <assign-variable>
              <variable>ResultVar</variable>
              <expression>otherwiseInvoked</expression>
            </assign-variable>
          </body>
        </otherwise>
      </body>
    </conditions>
    <return>
      <expression>${ResultVar}</expression>
    </return>
  </body>
  <name>sampleScenarioWithIf</name>
  <tags>
    <tag>if</tag>
    <tag>condition</tag>
    <tag>otherwise</tag>
  </tags>
</scenario:scenario>

66.2.4 実行時のターゲット・コンテンツの表示

コンテンツ・プレゼンタを使用すると、実行時にユーザーに対してターゲット・コンテンツを表示できます。コンテンツ・プレゼンタは、コンダクタの動的コンテンツ問合せ生成機能と密接に統合されており、動的コンテンツの単純な表面化を可能にします。アプリケーション内でのコンテンツ・プレゼンタの使用の詳細は、第27章「コンテンツ・プレゼンタ表示テンプレートの作成」を参照してください。

66.3 パーソナライズ・ファイルのデプロイ

この項では、Oracle WebCenter Portal Personalization (WCPS)ファイルを構築およびデプロイする方法を説明します。


注意:

パーソナライズの統合および構成の詳細は、Oracle Fusion Middleware Oracle WebCenter Portalの管理のパーソナライズの前提条件および制限に関する項を参照してください。


66.3.1 パーソナライズ・ファイルのサーバーへのデプロイ

パーソナライズ・ファイルをサーバーへデプロイするには:


注意:

この項で説明するデプロイメント機能を使用するには、WebCenterパーソナライズのテクノロジ・スコープが必要です。このスコープが追加されていないと、関連のメニュー・アイテムが無効になります。第66.2項「アプリケーションへのパーソナライズの統合」を参照してください。


  1. JDeveloperでポータル・プロジェクトを開きます。WLSTコマンドを使用してこのデプロイを実行する場合には、第66.3.3項「MARファイルのインポートとエクスポート」を参照してください。

  2. 「アプリケーション」メニューから、「パーソナライズ・ファイルのデプロイ」を選択して「サーバーへ」を選択します。

  3. 「サーバーへのデプロイ」ダイアログで、サービスをデプロイするサーバーを選択します。図66-13を参照してください。

    図66-13 「サーバーへのデプロイ」ダイアログ

    図66-13の説明が続きます
    「図66-13 「サーバーへのデプロイ」ダイアログ」の説明


    注意:

    オプションで、「追加」ボタンをクリックして、サーバーをリストに追加できます。


  4. 省略記号("...")ボタンをクリックして、特定のサーバー・インスタンスを選択します。たとえば、実行中のDefaultServerなどです。

  5. 終了したら「OK」をクリックします。

  6. 「メッセージ - ログ」ウィンドウで、デプロイの詳細をチェックします。ログに、メタデータ・ファイルのデプロイが正常に完了したかどうかが表示されます。

66.3.2 パーソナライズ・ファイルのアーカイブ・ファイルへのデプロイ

ファイル・システムで、パーソナライズ・ファイルをメタデータ・アーカイブ(MAR)ファイルにデプロイできます。MARファイルをデプロイするには:

  1. JDeveloperでポータル・プロジェクトを開きます。

  2. 「アプリケーション」メニューから、「パーソナライズ・ファイルのデプロイ」を選択して「ファイルシステムへ」を選択します。

  3. 「ファイルシステムへのデプロイ」ダイアログで、「メタデータ・アーカイブの作成」を選択して、MARファイルの場所と名前を指定します。

その後、コマンドライン・ユーティリティを使用して、MARファイルをサーバーに更新できます。詳細は、第66.3.3項「MARファイルのインポートとエクスポート」を参照してください。

66.3.3 MARファイルのインポートとエクスポート

メタデータ・アーカイブ(MAR)ファイルの新しいファイルを使用してパーソナライズ・サーバーを更新するには、次のWLSTコマンドでサーバーに接続してメタデータをインポートします。

wlst:> connect('<username>', '<password>', 't3://admin-server-hostname:7001')
wlst:> importMetadata(application='wcps-services', server='WC_Utilities', fromLocation='<mar file>', remote='true')

ファイルシステムでサーバーからMARファイルにパーソナライズ・ファイルをエクスポートするには、これらのWLSTコマンドでサーバーに接続してメタデータをエクスポートします。

wlst:> connect('<username>', '<password>', 't3://admin-server-hostname:7001')
wlst:> exportMetadata(application='wcps-services', server='WC_Utilities', toLocation='<mar file>', remote='true')

MDS WLSTコマンドの詳細は、Oracle Technology Networkで『Oracle Fusion Middleware WebLogic Scripting Toolコマンド・リファレンス』を参照してください。

開発環境の統合WebLogic Serverで実行中の場合、接続URLはt3://localhost:7101で、サーバーはDefaultServerです。

66.3.4 パーソナライズ・ファイルの伝播

WebCenter Portal管理コンソールには、停止時間を生じることなくポータル・メタデータをステージングから本番サーバーへ移行する伝播ツールが備わっています。伝播ツールは、Oracle WebCenter Portalのパーソナライズ・ファイルのステージングから本番への移行をサポートします。伝播ツールはソース・サーバーのアプリケーションのMDSリポジトリから自動的にメタデータをエクスポートし、それをターゲット・サーバーのアプリケーションのMDSリポジトリにインポートします。伝播ツールの詳細は、第8.13項「ステージングから本番に伝播させる伝播ツールの使用」を参照してください。

伝播ツールのパーソナライズ・ファイル移動機能は、次の条件によって決まります。

  • Portal FrameworkアプリケーションのMDSリポジトリは、mds-wcpsDSデータ・ソースと同じデータベースを指している必要があります。これがデフォルトの構成です。通常、デフォルトのデータベース構成を変更しなければ、伝播は正確に機能します。

  • ソース・サーバーと移動先のサーバーの両方で、アプリケーションMDSストアはwcps-servicesのMDSストアと同一のパーティション名を使用する必要があります。標準のポータルの構成では、このパーティションはwebcenter-portalです。


    注意:

    通常、伝播ツールの初期化とMDS変更のパーソナライズRESTサービスへの通知の間に1から2分の遅延があります。この遅延は、第66.3.3項「MARファイルのインポートとエクスポート」で説明されているような、WLSTコマンドを使用したパーソナライズ・ファイルの伝播の場合は発生しません。


66.4 チュートリアル: 単純なアプリケーションの作成、テストおよびデプロイ

この項では、JDeveloperで、単純な文字列(Hello World)を戻すシナリオを含む単純なアプリケーションを作成する方法について説明します。さらに、そのシナリオをJSPページに追加し、統合されたWebLogicサーバーでアプリケーションを実行して結果をブラウザに表示することによって、シナリオの結果をテストします。

この項では、統合WebLogic Serverを構成して起動する手順、パーソナライズ・サーバーのコンダクタへの接続を定義する手順、およびシナリオとJSPアーティファクトをテスト用にサーバー・ドメインにデプロイする方法についても説明します。


注意:

このチュートリアルの前提条件として、Oracle JDeveloperに対するWebCenter Portalの拡張機能(oracle.webcenter.framework_bundle.zip)がインストールされている必要があります。この拡張が追加されていない場合は、JDeveloperの更新ウィザードで「ヘルプ」メニューの「更新のチェック」をクリックし、更新があるかどうかをチェックしてください。


  1. デフォルトのオプションとテクノロジを使用して、単純なWebCenter Portalアプリケーション(Hello_Applicaton)を作成します。

    1. 「ファイル」メニューから、「新規」を選択します。

      「新規ギャラリ」が表示されます。

    2. 「アプリケーション」カテゴリを選択します。

    3. アイテム・リストから「WebCenter Portal Frameworkアプリケーション」を選択して、「OK」をクリックします。WebCenter Portal Frameworkアプリケーションの作成ウィザードが表示されます。

    4. 図66-14に示すように、「アプリケーション名」Hello_Applicationと入力します。

      図66-14 Hello_Applicationの作成 - 手順1

      図66-14の説明が続きます
      「図66-14 Hello_Applicationの作成 - 手順1」の説明

    5. ウィザード(ステップ2)のプロジェクト1の名前ページで、「使用可能」リストからWebCenterパーソナライズを選択し、「選択済」リストへ移動します。

    6. ステップ5まで「次へ」をクリックし、「終了」をクリックします。

  2. JDeveloperの統合サーバー(統合WLS)のデフォルト・ドメインを構成します。

    ドメインは自動的に拡張され、パーソナライズ・コンポーネントの実行に必要なサーバー・アーティファクト(つまり、パーソナライズ・コンダクタとプロパティ・サービス)が含まれます。

    1. 「表示」メニューから「アプリケーション・サーバー・ナビゲータ」を選択し、「アプリケーション・サーバー」ツリー・ノードを開いてIntegratedWeblogicServerを表示します。

      現在のステータスは(ドメイン未構成)になっています。

    2. IntegratedWeblogicServerを右クリックしてコンテキスト・メニューを表示し、「デフォルト・ドメインの作成」を選択します。

      図66-15 アプリケーション・サーバー・ナビゲータ - デフォルト・ドメインの作成

      図66-15の説明が続きます
      「図66-15 アプリケーション・サーバー・ナビゲータ - デフォルト・ドメインの作成」の説明

    3. 入力を求められたら、管理者パスワードとしてwelcome1と入力し、「OK」をクリックします。

      ステータスは(ドメインの作成中)と表示され、「メッセージ・ログ」ウィンドウに、ドメインの作成中であることを示す出力が表示されます。ドメインの作成が完了するまで待機します。この操作の完了には時間がかかる場合があります。完了すると、メッセージ・ログに「統合Weblogicドメインの処理が正常に完了しました。」と表示されます。

    4. IntegratedWeblogicServerを右クリックしてコンテキスト・メニューを表示し、「サーバー・インスタンスの起動」を選択してサーバーを起動します。図66-16を参照してください。

      「Running: IntegratedWeblogicServer - Log」ビューが表示され、サーバーが起動しはじめると出力が表示されます。サーバーの起動が終了するまで待ちます。この操作の完了には時間がかかる場合があります。終了したら、IntegratedWeblogicServerメッセージ・ログに 「IntegratedWebLogicServerが起動しました」と表示されます。

      図66-16 アプリケーション・サーバー・ナビゲータ - サーバーの起動

      図66-16の説明が続きます
      「図66-16 アプリケーション・サーバー・ナビゲータ - サーバーの起動」の説明

  3. アプリケーション・サーバーのパーソナライズ・コンダクタ・コンポーネントへのアプリケーションURL接続を構成します。

    1. 「アプリケーション」メニューから「アプリケーション・プロパティ」を選択します。「アプリケーション・プロパティ」ダイアログが表示されます。

    2. 「パーソナライズ・サーバー」カテゴリを選択し、「URL接続」ドロップダウン・リストから<新しいURL接続...>を選択します。

      「URL接続の作成」ダイアログが表示されます(図66-17を参照)。

      図66-17 「URL接続の作成」ダイアログ - コンダクタのURL接続

      図66-17の説明が続きます
      「図66-17 「URL接続の作成」ダイアログ - コンダクタのURL接続」の説明

    3. (デフォルトの)データ・エントリ・フィールドに、次のように値を入力して、接続を作成します。

      フィールド名

      名前

      Conductor

      URLエンドポイント

      http://localhost:7101/wcps/api/conductor/resourceIndex

      認証タイプ

      基本

      ユーザー名

      weblogic

      パスワード

      welcome1 (ドメインの作成時に指定した管理者パスワード)

      レルム

      WCPS


    4. 「接続のテスト」をクリックします。

      「ステータス」に「接続が正常に確立されました。」と表示されます。

    5. 「OK」をクリックして、コンダクタURL接続を作成します。

    6. 「パーソナライズ・サーバー」ページで、「OK」をクリックします。

  4. パーソナライズ・サーバーによって呼び出されたときに文字列Hello Worldを戻す、単純なhello_worldシナリオを作成します。

    1. アプリケーション・ナビゲータでPortalプロジェクトを右クリックし、「新規」を選択します。

      「新規ギャラリ」が表示されます。

    2. 「現在のプロジェクト・テクノロジ」タブから、「パーソナライズ」カテゴリを選択します。

    3. 「シナリオ」を選択して「OK」をクリックします。

      「新規シナリオ」ダイアログが表示されます。

      図66-18 「新規シナリオ」ダイアログ

      図66-18の説明が続きます
      「図66-18「新規シナリオ」ダイアログ」の説明

    4. 新規シナリオ・ファイルの作成オプションを選択し、新規シナリオ・ファイル名hello_world.scenarios_diagramと入力し、「OK」をクリックしてシナリオを作成します。

    5. シナリオ・エディタの「ダイアグラム」ビューで「開始」ノードを右クリックし、「次の文を追加」→「戻る」を選択します。

      「戻る」ノードが追加および接続されます。

    6. 「戻る」ノードを右クリックし、「式の設定」を選択します。

      シナリオ式ビルダーが表示されます(図66-19を参照)。

      図66-19 シナリオ式ビルダー

      図66-19の説明が続きます
      「図66-19 シナリオ式ビルダー」の説明

    7. 「式」のテキスト領域に次のEL式を入力し、「OK」をクリックします。

      ${'Hello World'}
      

      シナリオの図は、図66-20のようになります。

      図66-20 シナリオ・エディタ - hello_worldシナリオ

      図66-20の説明が続きます
      「図66-20 シナリオ・エディタ - hello_worldシナリオ」の説明

    8. 「ファイル」メニューから「保存」を選択して、hello_world.scenarios_diagramを保存します。

  5. シナリオを直接、試行します。「開始」ノードを右クリックし、「実行」を選択します。

  6. シナリオ入力ダイアログで、「OK」をクリックします。このダイアログを使用すると、シナリオで必要な任意のパラメータが入力できるようになります。今回は、必要なパラメータはありません。

  7. ログ・ウィンドウに、結果のHello Worldが表示されます。

  8. 次に、hello_worldシナリオを呼び出して結果を表示するJSPページを作成します。

    1. アプリケーション・ナビゲータでPortalプロジェクトを右クリックし、「新規」を選択します。

      「新規ギャラリ」が表示されます。

    2. 「現在のプロジェクト・テクノロジ」タブから、「JSP」カテゴリを選択します。

    3. アイテム・リストから「JSP」を選択し、「OK」をクリックします。

      「JSPの作成」ダイアログが表示されます(図66-21を参照)。

      図66-21 「JSPの作成」ダイアログ

      図66-21の説明が続きます
      「図66-21 「JSPの作成」ダイアログ」の説明

    4. 「ファイル名」にhello_world.jspと入力し、「OK」をクリックしてJSPページを作成します。

    5. JSPエディタが起動したら、「ソース」ビューを選択し、テンプレート・テキストを次のJSPコードで置換します。

      c:outコマンド内で、パーソナライズ・コンテキストBeanp13nContextがどのように使用されているかに注目してください。ここでは、「アプリケーション・プロパティ」ダイアログで指定したシナリオ・ネームスペースHello_Applicationを使用して作成したコンダクタ接続(Conductor)を呼び出し、hello_worldというシナリオを呼び出した後、結果を表示しています。

      <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
      "http://www.w3.org/TR/html4/loose.dtd">
      <%@ page contentType="text/html;charset=UTF-8"%>
      <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
      <html>
        <head>
          <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
          <title>hello_world</title>
        </head>
        <body>
          <jsp:useBean id="p13nContext"
      class="oracle.wcps.client.PersonalizationContext" scope="session"/>
          <%((oracle.wcps.client.PersonalizationContext)session.getAttribute("p13nContext")).reset(); %>
          <c:out value="${p13nContext.conductor['Conductor'].namespaces['Hello_
      application'].scenario['hello_world'].results}"/>
        </body>
      </html>
      

      注意:

      手順3の説明に従ってシングル・サインオンとトラスト・サービスを構成していない場合、ページの実行時に、ここで指定したConductor URL接続によって、401 Unauthorizedリターン・コードが生成されます。簡単な方法(テストのみを目的とする場合)は、次のインライン接続を使用することです。

      http://weblogic:weblogic1@localhost:7101/wcps/api/conductor/resourceIndex

      これをConductor URLのかわりに使用することによって、シングル・サインオンの制約を回避できます。WebCenterトラスト・サービスの構成およびこのスクリプトを使用したシングル・サインオンの詳細は、Oracle Fusion Middleware Oracle WebCenter Portalの管理のシングル・サインオンの構成に関する項を参照してください。


    6. 「ファイル」メニューから「保存」を選択して、hello_world.jspを保存します。

  9. 最後に、Hello_Applicationを構築してデプロイするために、アプリケーション・ナビゲータで実行可能アーティファクト(hello_world.jspページ)を右クリックし、「実行」を選択します。

    JDeveloperによって、次のようないくつかのバックグラウンド・プロセスが順番に開始されます。

    • アプリケーションの構築

    • 統合サーバーの起動(まだ起動していない場合)

    • デフォルト・ドメインへのアプリケーション・アーティファクト(パーソナライズ・アーティファクトを含む)のデプロイ

    • 外部Webブラウザの起動によるアーティファクトhello_world.jspの表示

    図66-22 アプリケーション・ナビゲータ - アプリケーションの構築とデプロイ

    図66-22の説明が続きます
    「図66-22 アプリケーション・ナビゲータ - アプリケーションの構築とデプロイ」の説明

    生成されたhello_world.jsp JSPページがブラウザに表示されます。

    図66-23 ブラウザに表示されたHello_Applicationのhello_world.jspページ

    図66-23の説明が続きます
    「図66-23 ブラウザに表示されたHello_Applicationのhello_world.jspページ」の説明

66.5 WebCenter Portalでのパーソナライズの使用

Oracle WebCenter Portalのパーソナライズでは、式言語(EL)式と組み合せて使用できる、任意のWebCenter Portalオブジェクトに適用可能なユーザー・エクスペリエンスが、動的に導出されて提供されます。この項では、どのWebCenter Portalオブジェクトがユーザーに提示されているかを判別するための、パーソナライズ・エンジンの使用方法の概要と、パーソナライズ・シナリオの結果に基づくこれらのオブジェクトの提示方法の概要について説明します。

この章には次の項が含まれます。

66.5.1 WebCenter Portalでのパーソナライズの概要

WebCenter Portalのパーソナライズで提供されるメカニズムにより、パーソナライズ・シナリオで定義された条件の動的な評価に基づき、様々なユーザー・エクスペリエンスが可能になります。シナリオにより、入力データの定義済ソースが評価され、決定が生成されます。その決定の結果または結果は、式言語(EL)式を使用してWebCenter Portalに適用できます。

WebCenter Portalでパーソナライズを使用するにはまず、Frameworkアプリケーションでシナリオを作成する必要があります。ロジックの指定や、データを取得するための1つまたは複数のデータ・プロバイダのコールといったすべての作業は、シナリオによって行われます。その後、ELを使用してシナリオを実行して結果を返し、それに応じてWebCenter Portalでのユーザー・エクスペリエンスを変更します。パーソナライズ・シナリオの作成方法の詳細は、第66.2.2項「JDeveloperでのパーソナライズされたシナリオの作成」を参照してください。シナリオの実行に使用されるELの一覧は、第F.11項「パーソナライズに関連するEL」にあります。

一度シナリオを設定すると、WebCenter Portal内のELを使用して、ユーザーに関する情報に基づいてターゲット・コンテンツを表示したり、コンテンツの表示方法を決定したりできます。たとえば、パーソナライズ・シナリオを使用して、企業内でのユーザーの役割を決定し、それに基づいてその役割用のコンテンツを選択的に表示できます。ユーザーに対する表示(たとえばページ・テンプレート、ページ・スタイル、スキン、リソース・カタログなど)の調整も可能です。

66.5.2 WebCenter PortalでのパーソナライズELのコール

パーソナライズにより、ユーザーとアプリケーションの両方のコンテキストに基づいて、ターゲット・コンテンツを提供したり、アプリケーション・フローを変更したりできます。パーソナライズでは、たとえば、あるユーザーに関する人事管理データベース内の情報に基づいてコンテンツを戻すことが可能です。また、ページ・テンプレート、ページ・スタイル、スキンおよびナビゲーション・フローでは、それらの内部でコンテンツが表示されますが、それらを選択することで、その特定のユーザーのWebCenter Portal体験をターゲットとすることが可能です。

シナリオの評価またはシナリオにデータを提供するため使用される、コンテンツ・ソースまたはデータ・プロバイダを定義できます。パーソナライズのデフォルトのデータ・プロバイダは、CMISデータ・プロバイダです。このプロバイダは、WebCenter Portalのデフォルト・コンテンツ・リポジトリ(Oracle WebCenter Content Server)からのデータの取得が可能です。また、アクティビティ・グラフ用のデータ・プロバイダとピープル・コネクション用のロケータもすぐに使用できます。他のデータ・ソース用に独自のデータ・プロバイダを定義することもできます。データ・プロバイダの詳細は、第66.1.3項「データ・プロバイダの使用」を参照してください。

通常、ポータルからのシナリオのコールは、次のEL式を使用して行います。

#{p13nContext.conductor['CONDUCTORCONNECTION'].namespaces['NAMESPACE'].scenario['SCENARIO'].results}

ここで:

  • CONDUCTORCONNECTION: WebCenterアプリケーションに対して構成されたADF接続の名前です。

  • NAMESPACE: ネームスペースの名前です。内部でシナリオが実行されます。

  • SCENARIO: 起動されるシナリオの名前です。

たとえば、ユーザーに関する情報に基づいてコンテンツを制御する、パーソナライズの簡単な使用例を作成できます。この例では、従業員の入社日がここ2か月以内の場合、「true」を返すシナリオを作成します(パーソナライズ・シナリオの作成方法の詳細は、第66.2.2項「JDeveloperでのパーソナライズされたシナリオの作成」を参照してください)。シナリオの作成後の手順は、次のとおりです。

  1. WebCenter Portalに管理者としてログインします。

  2. 新入社員用のページを作成し、New Hireという名前にします。

  3. サイトのナビゲーション・モデルを編集し、New Hireページへの新規ナビゲーション・リンクを追加します。ポータルでのナビゲーション・モデルの編集の詳細は、第10.3項「ナビゲーション・モデルの編集」を参照してください。

  4. 「New Hire」を選択して「編集」(鉛筆)アイコンをクリックします。

    図66-24 ナビゲーション・モデル

    図66-24の説明が続きます
    「図66-24 ナビゲーション・モデル」の説明

  5. 「表示可能」属性で式エディタを開き、「値または式の入力」を選択して次のとおり入力します。

    #{p13nContext.conductor.default.namespaces['p13nApp'].scenario['NewHire'].results}
    

    ここでp13nAppは、シナリオを含むFrameworkアプリケーションの名前です。また、NewHireは、シナリオの名前です。これでシナリオが実行され、結果(この場合、TrueまたはFalse)が返されます。シナリオの結果を基準にするとユーザーが新入社員(True)である場合、ユーザーがログインすると、メニュー・アイテムが表示されます。

    図66-25 式エディタ

    図66-25の説明が続きます
    「図66-25 式エディタ」の説明