Oracle® Fusion Middleware

Oracle JDeveloperによるWebCenter Portalアセットとカスタム・コンポーネントの開発

12c (12.2.1.2.0)

E82735-01(原本部品番号:E77464-01)

2016年10月

Oracle JDeveloperを使用してOracle WebCenter Portalのポータル・アセットおよびコンポーネントを開発およびカスタマイズする方法を説明する、開発者用のドキュメント。

Oracle Fusion Middleware Oracle JDeveloperによるWebCenter Portalアセットとカスタム・コンポーネントの開発, 12c (12.2.1.2.0)

E82735-01

Copyright © 2007, 2016, Oracle and/or its affiliates.  All rights reserved.

原本協力者: Sonia Nagar

原本協力者: Chaitra Ramaprasad、G Annapoorani、Savita Thakur、Shoba Rao

このソフトウェアおよび関連ドキュメントの使用と開示は、ライセンス契約の制約条件に従うものとし、知的財産に関する法律により保護されています。ライセンス契約で明示的に許諾されている場合もしくは法律によって認められている場合を除き、形式、手段に関係なく、いかなる部分も使用、複写、複製、翻訳、放送、修正、ライセンス供与、送信、配布、発表、実行、公開または表示することはできません。このソフトウェアのリバース・エンジニアリング、逆アセンブル、逆コンパイルは互換性のために法律によって規定されている場合を除き、禁止されています。

ここに記載された情報は予告なしに変更される場合があります。また、誤りが無いことの保証はいたしかねます。誤りを見つけた場合は、オラクル社までご連絡ください。

このソフトウェアまたは関連ドキュメントを、米国政府機関もしくは米国政府機関に代わってこのソフトウェアまたは関連ドキュメントをライセンスされた者に提供する場合は、次の通知が適用されます。

U.S. GOVERNMENT END USERS: Oracle programs, including any operating system, integrated software, any programs installed on the hardware, and/or documentation, delivered to U.S. Government end users are "commercial computer software" pursuant to the applicable Federal Acquisition Regulation and agency-specific supplemental regulations.As such, use, duplication, disclosure, modification, and adaptation of the programs, including any operating system, integrated software, any programs installed on the hardware, and/or documentation, shall be subject to license terms and license restrictions applicable to the programs. No other rights are granted to the U.S. Government.

このソフトウェアもしくはハードウェアはさまざまな情報管理アプリケーションでの一般的な使用のために開発されたものです。このソフトウェアもしくはハードウェアは、危険が伴うアプリケーション(人的傷害を発生させる可能性があるアプリケーションを含む)への用途を目的として開発されていません。このソフトウェアもしくはハードウェアを危険が伴うアプリケーションで使用する際、安全に使用するために、適切な安全装置、バックアップ、冗長性(redundancy)、その他の対策を講じることは使用者の責任となります。このソフトウェアもしくはハードウェアを危険が伴うアプリケーションで使用したことに起因して損害が発生しても、Oracle社およびその関連会社は一切の責任を負いかねます。

OracleおよびJavaはOracle Corporationおよびその関連企業の登録商標です。その他の名称は、それぞれの所有者の商標または登録商標です。

Intel、Intel Xeonは、Intel Corporationの商標または登録商標です。すべてのSPARCの商標はライセンスをもとに使用し、SPARC International, Inc.の商標または登録商標です。AMD、Opteron、AMDロゴ、AMD Opteronロゴは、Advanced Micro Devices, Inc.の商標または登録商標です。UNIXは、The Open Groupの登録商標です。

このソフトウェアまたはハードウェア、そしてドキュメントは、第三者のコンテンツ、製品、サービスへのアクセス、あるいはそれらに関する情報を提供することがあります。適用されるお客様とOracle Corporationとの間の契約に別段の定めがある場合を除いて、Oracle Corporationおよびその関連会社は、第三者のコンテンツ、製品、サービスに関して一切の責任を負わず、いかなる保証もいたしません。適用されるお客様とOracle Corporationとの間の契約に定めがある場合を除いて、Oracle Corporationおよびその関連会社は、第三者のコンテンツ、製品、サービスへのアクセスまたは使用によって損失、費用、あるいは損害が発生しても一切の責任を負いかねます。

目次

タイトルおよび著作権情報

はじめに

- 対象読者

- ドキュメントのアクセシビリティについて

- 関連ドキュメント

- 表記規則

登場人物リスト

- ナレッジ・ワーカー

- アプリケーション・スペシャリスト

- Web開発者

- 開発者

- システム管理者

第I部 スタート・ガイド

1 Oracle WebCenter Portalの開発の概要

- 1.1 このガイドの目的

- 1.2 WebCenter Portal開発者としての役割

2 開発環境の設定

- 2.1 開発環境の設定の概要

- 2.2 基本的な設定タスク

- 2.2.1 Oracle JDeveloperのインストール

- 2.2.2 JDeveloper用のWebCenter Portal拡張機能のインストール

- 2.2.3 ユーザー・ホーム・ディレクトリ環境変数の設定

- 2.2.4 統合WebLogic Serverの管理

- 2.2.4.1 統合WebLogic Serverとは

- 2.2.4.2 統合WebLogic Serverの起動と停止

- 2.2.4.3 統合WebLogic Server用のJVMの構成

- 2.2.5 アプリケーション・リソース接続の作成

- 2.2.5.1 接続の場所について

- 2.2.5.2 接続ウィザードにアクセスする方法

- 2.3 WebCenterポートレット・プロデューサ・アプリケーションに固有の設定タスク

- 2.3.1 事前構成済ポートレット・プロデューサのデプロイ

- 2.3.2 OmniPortletへのアクセス

- 2.3.3 WSRPのサンプルのポートレット・プロデューサおよびポートレット

- 2.3.4 PDK-Javaのサンプルのポートレット・プロデューサおよびポートレット

第II部 WebCenter Portalアセットの使用

3 WebCenter Portalアセットの概要

- 3.1 WebCenter Portalアセットの使用について

- 3.2 WebCenter Portalのアセットの開発

- 3.2.1 アセット開発のためのJDeveloper環境の設定

4 Portalアセット・アプリケーション・テンプレートの使用

- 4.1 「WebCenter Portalアセット・アプリケーション」テンプレートについて

- 4.2 WebCenter Portalアセット・アプリケーションの作成

- 4.2.1 WebCenter Portalアセット・アプリケーションの作成方法

- 4.2.2 アセット・アプリケーションのアーティファクトに関する必知事項

- 4.3 WebCenter Portalアセットの作成および編集

- 4.4 WebCenter Portalアセットの公開

- 4.4.1 WebCenter Portalサーバー接続の作成

- 4.4.2 WebCenter Portalアセットの公開

- 4.5 WebCenter Portalアセットのテスト

5 レイアウトの開発

- 5.1 レイアウトの開発について

- 5.2 レイアウトの作成

- 5.2.1 レイアウトの作成方法

- 5.2.2 レイアウトのアーティファクトに関する必知事項

- 5.3 レイアウトの編集

- 5.4 レイアウトの公開

6 ページ・スタイルの開発

- 6.1 ページ・スタイルの開発について

- 6.2 ページ・スタイルの作成のベスト・プラクティス

- 6.3 ページ・スタイルの作成

- 6.3.1 ページ・スタイルを作成する方法

- 6.3.2 ページ・スタイルのアーティファクトに関する必知事項

- 6.4 ページ・スタイルの編集

- 6.5 ページ・スタイルの公開

7 ページ・テンプレートの開発

- 7.1 ページ・テンプレートの開発の概要

- 7.1.1 ページ・テンプレートの理解

- 7.1.2 ページ・テンプレートの構造の理解

- 7.1.3 ページ・テンプレートのレイアウトの理解

- 7.1.4 ページ・テンプレートのレイアウト・コンポーネントの理解

- 7.2 ページ・テンプレートの開発のベスト・プラクティス

- 7.2.1 ストレッチ・レイアウトの作成のベスト・プラクティス

- 7.2.2 フロー・レイアウトの作成のベスト・プラクティス

- 7.2.3 実行時に編集できるページ・テンプレートの開発のベスト・プラクティス

- 7.2.4 コンポーネントの外観のカスタマイズのベスト・プラクティス

- 7.2.5 ページ・テンプレートでのスクロールの定義のベスト・プラクティス

- 7.2.6 余白、境界線、パディングの定義のベスト・プラクティス

- 7.3 ページ・テンプレートの作成

- 7.3.1 ページ・テンプレートの作成について

- 7.3.2 ページ・テンプレートの作成方法

- 7.3.3 ページ・テンプレートのアーティファクトに関する必知事項

- 7.4 ページ・テンプレートの編集

- 7.5 ページ・テンプレートへのフローティング・ツールバーの追加

- 7.6 ページ・テンプレートの公開

- 7.7 ページ・テンプレートのチュートリアルと例

8 スキンの開発

- 8.1 スキンの開発の概要

- 8.1.1 スキンについて

- 8.1.2 スキンの実行時管理について

- 8.2 スキンの開発のベスト・プラクティス

- 8.3 スキンの作成

- 8.3.1 スキンの作成方法

- 8.3.2 スキンのアーティファクトに関する必知事項

- 8.4 スキンの編集

- 8.5 スキンの公開

- 8.6 ユーザー用スキンの条件付変更

9 視覚化テンプレートの開発

- 9.1 視覚化テンプレートについて

- 9.2 視覚化テンプレートの作成

- 9.2.1 視覚化テンプレートの作成方法

- 9.2.2 視覚化テンプレートのアーティファクトに関する必知事項

- 9.3 視覚化テンプレートの編集

- 9.3.1 視覚化テンプレートでのプレースホルダELのバインディング

- 9.4 視覚化テンプレートの公開

- 9.5 実行時の処理内容

10 コンテンツ・プレゼンタ表示テンプレートの開発

- 10.1 コンテンツ・プレゼンタ表示テンプレートの開発の概要

- 10.2 コンテンツ・プレゼンタ表示テンプレートの作成

- 10.2.1 コンテンツ・プレゼンタ表示テンプレートの作成方法

- 10.2.2 コンテンツ・プレゼンタ表示テンプレートに関する必知事項

- 10.3 コンテンツ・プレゼンタ表示テンプレートの編集

- 10.3.1 単一アイテムの表示テンプレートの定義方法

- 10.3.2 単一コンテンツ・アイテムのコンテンツ表示テンプレートのタグ

- 10.3.3 複数アイテムの表示テンプレートの定義方法

- 10.3.4 複数コンテンツ・アイテムのコンテンツ表示テンプレートのタグ

- 10.3.5 レスポンシブ・テンプレートの使用方法

- 10.3.5.1 レスポンシブ・テンプレートについて

- 10.3.5.2 レスポンシブ・テンプレートの前提条件

- 10.3.5.3 複数記事の表示

- 10.3.5.4 CSS3 Media Queriesの使用

- 10.3.6 レスポンシブ・テンプレートの拡張方法

- 10.3.6.1 「記事ビュー」テンプレートの拡張方法

- 10.3.6.2 「全記事ビュー」テンプレートの拡張方法

- 10.3.6.3 デフォルトのテンプレートの適応方法

- 10.3.6.3.1 古いブラウザ用のレスポンシブ・レイアウトのサポート方法

- 10.3.6.3.2 異なるリージョン定義の使用方法

- 10.3.6.3.3 テンプレートのレイアウトの更新方法

- 10.3.7 コンテンツ・プレゼンタ表示テンプレートでのイメージ・レンディションの使用方法

- 10.3.7.1 イメージ・レンディションについて

- 10.3.7.2 イメージ・レンディションの前提条件

- 10.3.7.3 イメージ・ドキュメントのイメージ・レンディション情報の取得

- 10.3.7.4 Site Studioリージョン定義のイメージ・レンディションの取得

- 10.3.8 EL式を使用したコンテンツ・アイテム情報の取得方法

- 10.3.8.1 コンテンツ・アイテムに関する基本情報の取得方法

- 10.3.8.2 コンテンツ・アイテムのプロパティおよび値の操作方法

- 10.3.8.3 コンテンツ・アイテムのアイコンおよびURLの操作方法

- 10.3.8.4 イメージ・レンディションの操作方法

- 10.3.8.5 グループ・ポータル情報の操作方法

- 10.3.9 コンテンツ・タイプのプロパティ名の見つけ方

- 10.3.10 表示テンプレートでの外部ファイルの参照方法

- 10.3.11 カスタム・ビューでのSite Studioリージョン要素の参照方法

- 10.4 コンテンツ・プレゼンタ表示テンプレートの公開

- 10.5 コンテンツ・プレゼンタ表示テンプレートのパフォーマンスの最適化

- 10.6 コンテンツ・プレゼンタの使用(ヒント、チュートリアルおよび例)

第III部 ポートレットの使用

11 ポートレットの概要

- 11.1 ポートレットについて

- 11.2 ポートレットの構造について

- 11.3 ポートレット・リソースについて

- 11.3.1 構築済ポートレットについて

- 11.3.2 Java Server Faces (JSF)ポートレットについて

- 11.3.3 カスタムJavaポートレットについて

- 11.3.4 OmniPortletについて

- 11.3.5 ポートレット・テクノロジ

- 11.3.6 ポートレットとタスク・フロー

- 11.4 ポートレットの開発について

- 11.4.1 ポートレット・プロデューサ・アプリケーション

- 11.4.1.1 ポートレット・プロデューサ・アプリケーションについて

- 11.4.1.2 ポートレット・プロデューサ・アプリケーションの作成方法

- 11.4.2 ポートレット・モード

- 11.4.2.1 ポートレット・モードについて

- 11.4.2.2 表示モード

- 11.4.2.2.1 ポートレットのレンダリングに関するHTMLガイドライン

- 11.4.2.2.2 ポートレットのレンダリングに関するCSSガイドライン

- 11.4.2.3 編集モード

- 11.4.2.3.1 編集モード操作に関するガイドライン

- 11.4.2.3.2 編集モードのボタンに関するガイドライン

- 11.4.2.4 デフォルト編集モード

- 11.4.2.4.1 デフォルト編集モード操作に関するガイドライン

- 11.4.2.4.2 デフォルト編集モードのボタンに関するガイドライン

- 11.4.2.4.3 カスタマイズ値のレンダリングに関するガイドライン

- 11.4.2.5 ヘルプ・モード

- 11.4.2.5.1 ヘルプ・モードに関するガイドライン

- 11.4.2.6 情報モード

- 11.4.2.6.1 情報モードに関するガイドライン

- 11.4.3 ポートレット間通信

- 11.4.4 ポートレットのパーソナライズとカスタマイズ

- 11.4.5 ポートレット・パフォーマンス

- 11.4.6 複数言語に対応したポートレット

- 11.4.7 ポートレットのデプロイ

12 Oracle JSF Portlet Bridgeを使用したJSFアプリケーションからのポートレットの作成

- 12.1 Oracle JSF Portlet Bridgeを使用したJSFアプリケーションからのポートレットの作成について

- 12.2 JSFアプリケーションからのポートレットの作成

- 12.2.1 ページに基づいたJSFポートレットの作成方法

- 12.2.2 タスク・フローに基づいたJSFポートレットの作成方法

- 12.2.2.1 タスク・フローからのポートレットの作成について

- 12.2.2.2 「ポートレット・エントリの作成」ダイアログを使用したタスク・フローからのポートレット作成

- 12.2.2.3 「タスク・フローのポートレット・エントリの管理」ダイアログを使用したタスク・フローからのポートレット作成

- 12.2.3 JSFポートレットの作成時の必知事項

- 12.2.3.1 JSFポートレットを作成するための一般的なガイドライン

- 12.2.3.2 ポートレットのガイドライン

- 12.2.3.3 セキュリティのガイドライン

- 12.2.3.4 JSFのガイドライン

- 12.2.3.5 Oracle ADFのガイドライン

- 12.3 ポートレット化されたページまたはタスク・フローのポートレット・エントリの更新

- 12.4 JDeveloperでのポートレット化されたページまたはタスク・フローのテスト

- 12.5 統合WebLogic Serverを使用してのJSFポートレットのテスト

- 12.6 WebLogic Managed ServerへのJSFポートレットのデプロイ

- 12.7 イベントを使用したその他のポートレットとのJSFポートレットのリンク

- 12.7.1 その他のポートレットとのJSFポートレットのリンクについて

- 12.7.2 別のJSFポートレットへのJSFポートレットのリンク方法

- 12.7.3 JSR 286ポートレットへのJSFポートレットのリンク方法

- 12.7.4 JSFポートレットへのJSR 286ポートレットのリンク方法

- 12.7.5 Oracle JSF Portlet Bridgeのポートレット・イベントに関する必知事項

- 12.7.5.1 コンテキスト・イベント・ペイロードでのシリアライズされたタイプの使用に関する必知事項

- 12.7.5.2 宣言されていないイベントの呼出しに関する必知事項

- 12.7.5.3 部分ページ・レンダリングに関する必知事項

13 JSR 286を使用した標準ベースのJavaポートレットの作成

- 13.1 JSR 286を使用した標準ベースのJavaポートレットの作成について

- 13.2 JSR 286 Javaポートレットの作成

- 13.3 JSR 286 Javaポートレットの開発

- 13.3.1 ポートレット・デプロイメント・ディスクリプタ・ファイルの例

- 13.3.2 ポートレット・デプロイメント・ディスクリプタ・ファイルの編集方法

- 13.3.3 JSR 286ポートレットのポートレット・モード

- 13.3.4 JSR 286ポートレットへのカスタム・ポートレット・モードの追加方法

- 13.3.5 JSR 286ポートレットでのユーザー情報へのアクセス方法

- 13.3.6 JSR 286ポートレット用のランタイム環境のカスタマイズ方法

- 13.3.6.1 サポートされるコンテナ・ランタイム・オプション

- 13.3.6.1.1 javax.portlet.actionScopedRequestAttributes

- 13.3.6.1.2 javax.portlet.escapeXml

- 13.3.6.1.3 javax.portlet.servletDefaultSessionScope

- 13.3.6.1.4 com.oracle.portlet.allowEventPayloadsWithoutJAXBBinding

- 13.3.6.1.5 com.oracle.portlet.allowWsrpExport

- 13.3.6.1.6 com.oracle.portlet.compatibilityMode

- 13.3.6.1.7 com.oracle.portlet.defaultProxiedResourceRequiresWsrpRewrite

- 13.3.6.1.8 com.oracle.portlet.defaultServedResourceRequiresWsrpRewrite

- 13.3.6.1.9 com.oracle.portlet.disallowResourceServing

- 13.3.6.1.10 com.oracle.portlet.escapeXmlEncodeUrls

- 13.3.6.1.11 com.oracle.portlet.eventPayloadsXmlType

- 13.3.6.1.12 com.oracle.portlet.excludedActionScopeRequestAttributes

- 13.3.6.1.13 com.oracle.portlet.externalScopeRequestAttributes

- 13.3.6.1.14 com.oracle.portlet.importCssToIFrame

- 13.3.6.1.15 com.oracle.portlet.minimumWsrpVersion

- 13.3.6.1.16 com.oracle.portlet.offerPortletOverWsrp

- 13.3.6.1.17 com.oracle.portlet.portalInfoProvider

- 13.3.6.1.18 com.oracle.portlet.redirectAfterAction

- 13.3.6.1.19 com.oracle.portlet.requireIFrame

- 13.3.6.1.20 com.oracle.portlet.streamingOptimized

- 13.3.6.1.21 com.oracle.portlet.suppressWsrpOptimisticRender

- 13.3.6.1.22 com.oracle.portlet.trapWsrpRenderExceptions

- 13.3.6.1.23 com.oracle.portlet.trimEncodeUrls

- 13.3.6.1.24 com.oracle.portlet.useWsrpUserContextForUserAuthentication

- 13.3.6.1.25 com.oracle.portlet.wsrpHeaderMode

- 13.3.6.1.26 com.oracle.portlet.wsrpLegacyPortletHandle

- 13.3.6.1.27 com.oracle.portlet.wsrpPortletHandle

- 13.3.6.1.28 oracle.portlet.bridge.adf.raiseUndeclaredContextualEvents

- 13.3.6.2 アプリケーション内のすべてのポートレットに対するコンテナ・ランタイム・オプションの設定

- 13.3.6.3 個々のポートレットに対するコンテナ・ランタイム・オプションの設定

- 13.3.7 JSR 286ポートレットでのパブリック・レンダラ・パラメータの使用方法

- 13.3.7.1 パブリック・レンダラ・パラメータについて

- 13.3.7.2 アプリケーション・レベルでのパブリック・レンダラ・パラメータの宣言

- 13.3.7.3 ポートレットごとのパブリック・レンダラ・パラメータの定義

- 13.3.7.4 パブリック・レンダラ・パラメータの使用: 例

- 13.3.8 JSR 286ポートレットでのポートレット・イベントの使用方法

- 13.3.8.1 ポートレット・イベントについて

- 13.3.8.2 アプリケーション・レベルでのポートレット・イベントの宣言

- 13.3.8.3 ポートレットごとの処理イベントの定義

- 13.3.8.4 ポートレットごとの公開イベントの定義

- 13.3.8.5 ポートレット・イベントの使用: 例

- 13.3.9 JSR 286ポートレットへのポートレット・プリファレンスの追加方法

- 13.3.9.1 ポートレット・プリファレンスについて

- 13.3.9.2 JSR 286ポートレットへのポートレット・プリファレンスの追加

- 13.3.9.3 ポートレットの単純なパーソナライズの追加: 例

- 13.3.10 JSR 286ポートレットでのポートレット・フィルタの使用方法

- 13.3.10.1 ポートレット・フィルタについて

- 13.3.10.2 アプリケーションへのポートレット・フィルタの追加

- 13.3.10.3 ポートレットへのポートレット・フィルタの適用

- 13.3.11 異なるページ間でのポートレット間通信の実装方法

- 13.3.12 キャッシュを使用してJSR 286ポートレットのパフォーマンスを向上する方法

- 13.3.12.1 ポートレット・キャッシュについて

- 13.3.12.2 JSR 286ポートレットの有効期限ベースのキャッシュの実装

- 13.3.12.3 JSR 286ポートレットの検証ベースのキャッシュの実装

- 13.3.13 リソース・プロキシに対して書きなおされたURLの実装方法

- 13.3.14 ステートレス・リソース・プロキシの実装方法

- 13.3.15 JSR 286ポートレット用の永続ストアの管理方法

- 13.3.15.1 永続ストアについて

- 13.3.15.2 WSRPプロデューサ永続ストア用のJNDI変数

- 13.3.15.3 WSRPプロデューサ用の永続ストアのセットアップ

- 13.3.15.4 WSRPプロデューサの永続ストアの移行

- 13.3.15.4.1 データベースまたはファイルベースの永続ストアの移行

- 13.3.15.4.2 コンシューマ永続ストアの移行

- 13.3.15.4.3 WSRPポートレット・プロデューサの移動

- 13.4 JSR 286ポートレットのテスト

- 13.4.1 統合WebLogic ServerでのWSRPポートレット・プロデューサの実行方法

- 13.4.2 統合WebLogic ServerへのWSRPポートレット・プロデューサのデプロイ方法

- 13.4.3 WSRPテスト・ページを非表示または削除する方法

- 13.4.3.1 WSRPテスト・ページの非表示

- 13.4.3.2WSRPテスト・ページの削除

- 13.5 WebLogic PortalポートレットのWebCenter Portalへの移行

- 13.6 JSR 286ポートレット関連のファイル

- 13.6.1 portlet.xml

- 13.6.2 oracle-portlet-tags.jar

- 13.6.3 portlet_mode.jsp

- 13.6.4 portlet_name.java

- 13.6.5 portlet_nameBundle.jar

- 13.6.6 web.xml

第IV部 ページレットの使用

14 ページレットの概要

- 14.1 ページレット・プロデューサを使用したページレットの作成について

- 14.1.1 概要

- 14.1.2 ページレット・プロデューサのアーキテクチャ

- 14.1.2.1 ページレット・プロデューサのアーキテクチャとコンポーネント

- 14.1.2.2 ページレット・プロデューサの主要概念

- 14.1.2.3 ページレット・プロデューサ・コンソール

- 14.1.2.4 HTTPとContent Syndication Protocolの使用

- 14.1.2.4.1 HTTP

- 14.1.2.4.2 Content Syndication Protocol

- 14.1.2.5 ページレット・プロデューサのプロキシ

- 14.1.3 要件

- 14.2 ページレット・プロデューサ設定の構成

- 14.2.1 WCIデータ・ソースの構成方法

- 14.2.2 ロギング設定の構成方法

- 14.2.3 プロキシ設定の構成方法

- 14.2.4 変換設定の構成方法

- 14.2.5 CSP設定の構成方法

- 14.2.6 Kerberos設定の構成方法

- 14.2.7 OpenSocial設定の構成方法

15 ページレット・プロデューサ・オブジェクトの作成

- 15.1 リソースの作成

- 15.1.1 WebおよびCSPリソースの構成方法

- 15.1.1.1 全般設定の構成方法

- 15.1.1.2 CSP設定の構成方法

- 15.1.1.3 ポリシー設定の構成方法

- 15.1.1.4 自動ログインの構成方法

- 15.1.1.4.1 自動ログインの構成方法: フォーム・ログイン

- 15.1.1.4.2 自動ログインの構成方法: 基本ログインとNTLMログイン

- 15.1.1.4.3 自動ログインの構成方法: Kerberosログイン

- 15.1.1.4.4 自動ログインの構成方法: 認証のソース

- 15.1.1.5 ヘッダーの構成方法

- 15.1.2 WSRPおよびOracle PDK-Javaリソースの構成方法

- 15.1.2.1 全般設定の構成方法

- 15.1.2.2 ポリシー設定の構成方法

- 15.1.3 OpenSocialリソース(OpenSocialガジェット・プロデューサ)の構成方法

- 15.1.3.1 全般設定の構成方法

- 15.1.3.2 ポリシー設定の構成方法

- 15.2 ページレットの作成

- 15.2.1 全般設定の構成方法

- 15.2.2 プリファレンスの構成方法

- 15.2.3 パラメータの構成方法

- 15.2.4 クリッパの構成方法

- 15.2.5 ページレットとプリファレンス・エディタへのアクセス方法

- 15.3 Webインジェクタの作成

- 15.3.1 全般設定の構成方法

- 15.3.2 コンテンツの挿入方法

- 15.4 カスタム・パーサーの作成

- 15.5 ホストされたファイルの作成

16 ページレットおよびガジェットの使用

- 16.1 OpenSocialガジェットの使用

- 16.1.1 認証の構成方法

- 16.1.2 ユーザー・プリファレンスの格納方法

- 16.1.3 WebCenter Portalのプロファイル情報へのアクセス方法

- 16.1.4 ユーザーのアクティビティ・ストリームへのアクセス方法

- 16.1.5 ガジェット・イベントの使用方法

- 16.1.6 例: 外部OpenSocialガジェットの使用方法

- 16.1.7 例: ローカルOpenSocialガジェットの使用方法

- 16.2 WSRPおよびOracle PDK-Javaポートレットに対するページレット・クロムの使用

17 カスタム・ページレットの作成

- 17.1 アダプティブ・ページレットのスクリプティング・フレームワークの使用

- 17.1.1 構造化されたHTTPレスポンスの処理方法

- 17.1.2 イベント通知の使用方法

- 17.1.2.1 スクリプティング・フレームワークでページレベルのイベントを使用する方法

- 17.1.3 インプレース・リフレッシュの使用方法

- 17.1.4 セッション・プリファレンスの使用方法

- 17.1.5 アダプティブ・ページレットの開発に関する必知事項

- 17.2 実行時のページレット機能の変更

- 17.2.1 Webインジェクタの使用方法

- 17.2.2 カスタム・パーサーの使用方法

- 17.3 ページレットのデバッグ

- 17.3.1 HTTPリクエストおよびレスポンスの表示方法

- 17.3.2 変換コンテンツの表示方法

18 Webアプリケーションでのページレットの使用

- 18.1 Webページへのページレットの追加

- 18.1.1 JavaScriptを使用したページレットの挿入方法

- 18.1.1.1 JavaScriptを使用したプリファレンス・エディタの追加方法

- 18.1.2 RESTを使用したページレットへのアクセス方法

- 18.1.2.1 ページレット挿入APIに関する必知事項

- 18.1.2.2 データ取得APIに関する必知事項

- 18.1.3 IFrameでの自動サイズ変更の使用方法

- 18.2 ポータル・ページへのページレットの追加

19 ページレットの作成: 例および高度なトピック

- 19.1 単純なページレットの作成(例)

- 19.1.1 ページレット・プロデューサの初期設定の構成

- 19.1.2 リソースの作成

- 19.1.3 ページレットの作成

- 19.1.4 ページレットのクリップ

- 19.2 WebCenterポータルでのページレットの消費(例)

- 19.2.1 WebCenter Portalへのページレット・プロデューサの登録

- 19.2.2 ポータルへのページレットの挿入

- 19.3 WebCenter Interactionでのページレットの消費(例)

- 19.3.1 ページレット・プロデューサ・リモート・サーバーの登録

- 19.3.2 Hello World Webサービスの作成

- 19.3.3 Hello Worldポートレットの作成

- 19.3.4 WCIホーム・ページでのHello Worldポートレットの使用

- 19.4 Oracle WebCenter Sitesでのページレットの消費(例)

- 19.4.1 Oracle WebCenter Sitesへのページレットの追加

- 19.4.1.1 IFrameの自動サイズ変更の有効化

- 19.4.1.2 ページレット・スタイルの変更

- 19.4.2 アイデンティティ伝播の使用

- 19.4.2.1 ページレット・プロデューサでのアイデンティティの確立

- 19.4.2.2 ページレット・プロデューサにより指定されたログイン・ページの使用

- 19.4.3 ページレット・プロデューサからバックエンド・アプリケーションへのアイデンティティの伝播

- 19.4.3.1 WSRP/JPDKポートレット

- 19.4.3.2 ネイティブ認証(非SSO)により保護されたスタンドアロン・バックエンド・アプリケーション

- 19.4.3.3 自動ログインによるアイデンティティ伝播

- 19.4.3.4 SSOにより保護されたスタンドアロン・バックエンド・アプリケーション

- 19.4.3.4.1 OAMで保護されたバックエンド・アプリケーションへのアイデンティティ直接伝播の使用

- 19.4.3.4.2 自動ログインとSSOによるアイデンティティ伝播

- 19.4.3.5 参照: 共通自動ログイン構成

- 19.4.3.5.1 Oracle Access Manager (OAM)の自動ログイン設定

- 19.4.3.5.2 Oracle SSO (OSSO)の自動ログイン設定

- 19.5 WSRPポートレットのページレットとしての消費

- 19.6 カスタムADFタスクフローをWSRPポートレットとして公開

- 19.6.1 Oracle WebLogic Portal用に開発されたWSRPポートレットの公開

- 19.6.2 WLPをWSRPプロデューサとして使用したWLPポートレットの公開

- 19.6.3 WLP WSRPプロデューサとWebCenterコンシューマ間のWSセキュリティの構成

- 19.6.4 ページレット・プロデューサでのWLP WSRPプロデューサの登録

- 19.6.5 サイトへのWLP WSRPポートレットの追加

- 19.7 サイトにおけるWebCenter Portalサービスのページレットとしての消費

- 19.7.1 要件

- 19.7.2 セキュリティおよびシングル・サインオンの構成

- 19.7.2.1 共通ユーザー・ベースの作成: LDAP統合

- 19.7.2.2 ユーザー・アイデンティティ伝播の確立: OAM構成

- 19.7.2.3 アイデンティティ・ストアでのGUID属性の構成

- 19.7.2.4 ディスカッション・サーバー用SSOの構成

- 19.7.3 WSRPポートレットとして公開されたWebCenterサービスのインポート

- 19.7.3.1 サイト・ページへのページレットの追加

- 19.8 EBS11iを使用したページレットとしてのアプリケーションの消費

- 19.8.1 基本のURLマッピング(プロキシ)に対するリソースの作成

- 19.8.2 自動ログインの構成

- 19.8.3 ページレットの作成

- 19.8.4 修正構成の作成

- 19.8.4.1 ポップアップURLリライト用のプラガブル・パーサーの作成

- 19.8.4.2 フレーム・バストを無効化するインジェクタの作成

- 19.8.4.3 iFrameを自動サイズ変更するインジェクタの作成

- 19.8.4.4 JavaScriptの挿入によるクリッピングの設定

- 19.8.4.5 ページレットのスタイル変更用にインジェクタを作成

- 19.8.4.6 ページレットのテスト

- 19.8.4.7 最終結果

- 19.8.4.8 トラブルシューティング

- 19.9 ページレット・プロデューサを使用したOpenSocialガジェットの消費

- 19.10 有効なジオメトリ管理とページ区切りのガイドライン

- 19.10.1 インジェクタでのJavaScriptの使用

- 19.10.2 インジェクタでのSSLの使用

- 19.11 高度なURLリライト

- 19.11.1 自動ログインの使用

- 19.11.2 カスタム・パーサーの使用

第V部 WebCenter Portalの追加カスタマイズ

20 共有ライブラリの開発

- 20.1 WebCenter Portalで使用する共有ライブラリの開発

- 20.2 WebCenter Portalで使用するADFコンポーネントのパッケージ化およびデプロイ

- 20.2.1 WebCenter Portalサーバー拡張機能テンプレートの理解

- 20.2.1.1 WebCenter Portalサーバー拡張機能ワークスペースを編成する方法

- 20.2.1.2 PortalSharedLibraryプロジェクト

- 20.2.1.2.1 extend.spaces.webapp.warのバージョニング

- 20.2.1.3 PortalExtensionプロジェクト

- 20.2.2 WebCenter Portalの共有ライブラリ開発の理解

- 20.2.2.1 ADFライブラリ開発の一般ドキュメント

- 20.2.2.2 共有ライブラリ・デプロイメントの一般ドキュメント

- 20.2.3 WebCenter Portalサーバー拡張機能ワークスペースの作成

- 20.2.4 WebCenter Portalでの追加の共有ライブラリの使用

- 20.2.5 WebCenter Portal共有ライブラリ(extend.spaces.webapp.war)への拡張機能のデプロイ

- 20.2.5.1 ポータル・サーバーへの拡張機能の直接デプロイ

- 20.2.5.2 アーカイブへの拡張機能のデプロイ

- 20.2.5.3 以前のWebCenter Portal共有ライブラリ・バージョンへの回復

- 20.2.6 PortalExtensionプロジェクトを使用したWebCenter PortalのADFライブラリ・コンポーネントの開発

21 ポータルのローカライズ

- 21.1 複数言語に対応したポータル構築のガイドライン

- 21.2 ADF Facesコンポーネントの言語サポート

- 21.3 リソース・バンドルを使用した複数言語のサポート

- 21.4 新しい言語用のサポートの追加

22 Oracle Composerの拡張

- 22.1 コンポーネントへのカスタム・アクションの追加

- 22.1.1 デザイン・ビューでのShow Detail FrameコンポーネントへのJavaベースのカスタム・アクションの追加

- 22.1.2 選択ビューでのコンポーネントへのJavaベースの直接選択カスタム・アクションの追加

- 22.1.3 ファセットを使用したShow Detail Frameコンポーネントへのカスタム・アクションの追加

- 22.1.3.1 例: ファセットを使用したShow Detail Frameコンポーネントへのカスタム・アクションの追加

- 22.1.3.1.1 ADFタスク・フローの作成方法

- 22.1.3.1.2 追加のアクション・ファセットを組み込む方法

- 22.1.3.1.3 リダイレクト・ページの作成方法

- 22.1.3.1.4 ページ間のナビゲーション・ルールの作成方法

- 22.1.3.1.5 実行時の処理内容

- 22.1.4 タスク・フローへのカスタム・アクションの追加

- 22.1.4.1 タスク・フローでのカスタム・アクションの直接追加

- 22.1.4.2 タスク・フローを囲んでいるShow Detail Frameでのカスタム・アクションの追加

- 22.1.4.2.1 インスタンス・レベルでのカスタム・アクションの定義

- 22.1.4.2.2 グローバル・レベルでのカスタム・アクションの定義

- 22.1.4.2.3 別個のブラウザ・ウィンドウにタスク・フロー・ビューを表示するカスタム・アクションの構成

- 22.1.4.3 実行時の処理内容

- 22.1.4.4 例: タスク・フローを囲んでいるShow Detail Frameへのカスタム・アクションの追加

- 22.1.5 コンポーネント・ナビゲータ内のタスク・フローに表示されるカスタム・アクションの追加

- 22.1.5.1 コンポーネント・ナビゲータでカスタム・アクションを構成する方法

- 22.1.5.1.1 カスタム・アクションのロジックの定義

- 22.1.5.1.2 カスタム・アクションを含むJSFページの作成

- 22.1.5.1.3 タスク・フローを含むアプリケーション・ページからのJSFページのコール

- 22.1.5.2 実行時の処理内容

23 WebCenter Portal偽装セキュリティのカスタマイズ

- 23.1 WebCenter Portal偽装のカスタマイズについて

- 23.2 WebCenter Portal偽装ELの使用

- 23.3 WebCenter Portal偽装APIの使用

第VI部 Oracle WebCenter Portalのコンポーザ

24 WebCenter Portalコンポーザの使用

- 24.1 コンポーザの概要

- 24.2 アプリケーションのカスタマイズとユーザーのカスタマイズの理解

- 24.3 ページの編集モードと表示モードの理解

- 24.3.1 編集モードについて

- 24.3.1.1 編集モードの「コンテンツの追加」ビューについて

- 24.3.1.2 編集モードの「構造」ビューについて

- 24.3.1.3 編集モードの「デザイン」ビューについて

- 24.3.1.4 編集モードの「選択」ビューについて

- 24.3.1.5 編集モードの「プレビュー」ビューについて

- 24.4 ページ表示モードでのカスタマイズ機能

- 24.4.1 コンポーネントの再配置

- 24.4.2 レイアウトの変更

- 24.4.3 コンポーネントの展開と縮小

- 24.4.4 ポートレットのパーソナライズ

- 24.5 ページ編集モードの「デザイン」ビューおよび「コンテンツの追加」ビューでの編集機能

- 24.5.1 コンテンツの追加

- 24.5.1.1 タブ・セットまたはタブのBoxコンポーネントへの追加

- 24.5.1.2 既存のコンポーネントに隣接するBoxコンポーネントの追加

- 24.5.1.2.1 上にボックスを追加

- 24.5.1.2.2 下にボックスを追加

- 24.5.1.2.3 左にボックスを追加

- 24.5.1.2.4 右にボックスを追加

- 24.5.2 ページ・コンテンツの再配置

- 24.5.3 コンポーネントのプロパティおよびパラメータの編集

- 24.5.4 現在のレイヤーのコンポーネント・プロパティのリセットとオーバーライド

- 24.5.5 リソース文字列の編集

- 24.5.6 コンポーネントの表示または非表示

- 24.5.7 コンポーネントの削除

- 24.5.8 レイアウトの変更

- 24.5.9 ポートレットのカスタマイズ

- 24.5.10 ページ・プロパティの編集

- 24.5.11 ページ・パラメータへのコンポーネントの関連付け

- 24.5.12 ページのリセット

- 24.5.13 エラー検出時のアプリケーションのカスタマイズのリセット

- 24.5.14 子コンポーネントの表示名のカスタマイズ

- 24.5.15 アプリケーションのカスタマイズ保存時のラベルの作成

- 24.5.16 アプリケーションのカスタマイズの管理

- 24.6 ページ編集モードの「構造」ビューでの編集機能

- 24.6.1 切取りオプションおよび貼付けオプションを使用したページ・コンテンツの再配置

- 24.6.2 タスク・フロー内のコンテンツの編集

- 24.6.2.1 タスク・フローのリセット

- 24.6.3 宣言型コンポーネント内のコンテンツの編集

- 24.6.4 コンポーネントの表示または非表示

- 24.7 コンポーザ・コンポーネント

- 24.7.1 Page Customizable

- 24.7.2 Change Mode LinkおよびChange Mode Button

- 24.7.3 Panel Customizable

- 24.7.4 Show Detail Frame

- 24.7.5 Layout Customizable

- 24.8 セキュリティおよびコンポーザ

- 24.8.1 ページおよびタスク・フローのセキュリティ

- 24.8.1.1 タスク・フローのセキュリティ

- 24.8.2 MDSのカスタマイズ制限

- 24.8.3 コンポーネントのアクション・レベルのセキュリティ

25 コンポーザを使用したページの実行時編集の有効化

- 25.1 コンポーザ・コンポーネントを使用した編集可能ページの設計

- 25.1.1 カスタマイズ可能ページの作成方法

- 25.1.2 Page Customizableコンポーネントを使用した実行時カスタマイズの有効化方法

- 25.1.3 Change Mode LinkまたはChange Mode Buttonを使用したページ・モードの切替えを有効にする方法

- 25.1.4 Panel Customizableコンポーネントを使用したページの編集可能領域の定義方法

- 25.1.5 Layout Customizableコンポーネントを使用したページのレイアウトのカスタマイズの有効化方法

- 25.1.6 Show Detail Frameコンポーネントを使用したコンポーネントのカスタマイズの有効化方法

- 25.1.7 カスタマイズ可能ページを作成するページ・テンプレートの作成方法

- 25.1.8 移入されたページでカスタマイズを有効にする方法

- 25.1.9 コンポーザ・コンポーネントの追加時に行われる処理

- 25.1.10 実行時の処理内容

- 25.1.11 編集可能ページの設計時の必知事項

- 25.2 コンポーザ・コンポーネントを使用した編集可能ページの設計: 例

- 25.3 ページへのコンテンツの移入

- 25.3.1 コンテンツをページに追加するときの必知事項

- 25.3.1.1 タスク・フローの追加に関する考慮事項

- 25.4 コンポーザの問題のトラブルシューティング

26 コンポーザを使用した実行時編集機能の拡張

- 26.1 拡張性オプションの概要

- 26.1.1 コンポーザのアドオン

- 26.1.2 コンポーザのカスタム・プロパティ・パネル

- 26.1.3 コンポーザのイベント・ハンドラ

- 26.1.4 ドロップ・ハンドラ

- 26.1.5 コンポーネントのプロパティ・フィルタ

- 26.1.6 カスタマイズ・マネージャ

- 26.1.7 コンポーザのツールバーのカスタマイズ

- 26.1.8 構成ファイル

- 26.2 コンポーザのアドオンの作成

- 26.2.1 アドオンの作成および登録の方法

- 26.2.1.1 アドオン・タスク・フローの作成

- 26.2.1.2 コンポーザを使用したアドオンの登録

- 26.2.1.3 アドオンのadf-config.xmlへの登録

- 26.2.2 実行時の処理内容

- 26.2.3 コンポーザのデフォルトのアドオンの除外方法

- 26.2.4 カスタマイズ・マネージャのアドオンの表示方法

- 26.2.5 アドオンを選択的に表示する方法

- 26.3 カスタム・プロパティ・パネルの作成

- 26.3.1 カスタム・プロパティ・パネルの作成および登録の方法

- 26.3.1.1 カスタム・プロパティ・パネルの作成

- 26.3.1.2 コンポーネントに対するカスタム・プロパティ・パネルの登録

- 26.3.1.3 タスク・フローに対するカスタム・プロパティ・パネルの登録

- 26.3.2 実行時の処理内容

- 26.3.3 デフォルトのプロパティ・パネルのオーバーライド方法

- 26.3.4 デフォルトのプロパティ・パネルの除外方法

- 26.3.5 プロパティ・パネルの選択的レンダリング方法

- 26.3.6 カスタム・プロパティ・パネルでのプロパティおよびパラメータの表示方法

- 26.3.6.1 「コンポーネント・プロパティ」を表示するカスタム・パネルの例

- 26.4 式ビルダーの拡張

- 26.4.1 式ビルダーの拡張方法

- 26.4.2 式言語を保護する方法

- 26.4.3 実行時の処理内容

- 26.5 タスク・フローのパラメータのカスタムLOVまたはピッカーの構成

- 26.5.1 LOVの構成方法

- 26.5.1.1 静的LOVの構成

- 26.5.1.2 動的LOVの構成

- 26.5.1.3 ピッカーの構成

- 26.5.1.3.1 ピッカー・タスク・フローの作成

- 26.5.1.3.2 タスク・フローのパラメータに対するピッカーの登録

- 26.5.1.4 グローバル・リストからのLOVの構成

- 26.5.2 実行時の処理内容

- 26.6 コンポーザUIイベントのイベント・ハンドラの構成

- 26.6.1 コンポーザUIイベントのハンドラの作成および登録の方法

- 26.6.1.1 イベント・ハンドラの登録をサポートするUIイベント

- 26.6.1.2 保存イベント・ハンドラの作成: 例

- 26.6.1.3 コンポーザを使用したイベント・ハンドラの登録

- 26.6.2 イベント・ハンドラを作成および登録する際の処理

- 26.6.3 その他のコンポーザのイベント・ハンドラの構成

- 26.6.3.1 イベント・ハンドラの順序番号の指定

- 26.6.3.2 イベント処理の終了

- 26.7 リソース・カタログのドロップ・ハンドラの構成

- 26.7.1 ドロップ・ハンドラの作成および登録の方法

- 26.7.1.1 ドロップ・ハンドラの作成

- 26.7.1.2 コンポーザへのドロップ・ハンドラの登録

- 26.7.1.3 XMLコンポーネントのリソース・カタログへの追加

- 26.7.1.4 リソース・カタログへのカスタム・コンポーネントの追加

- 26.7.2 実行時の処理内容

- 26.8 プロパティ・フィルタの定義

- 26.8.1 プロパティ・フィルタの定義方法

- 26.8.2 実行時の処理内容

- 26.8.3 プロパティ・フィルタの削除方法

- 26.9 カスタマイズ・マネージャ・タスク・フローのパラメータ・サポートの有効化

- 26.9.1 カスタマイズ・マネージャ・タスク・フローのパラメータを設定する方法

- 26.9.2 パラメータのサポートを有効にした場合の処理

- 26.10 コンポーザのツールバーのカスタマイズ

- 26.10.1 ツールバー要素を再配置または非表示にする方法

- 26.10.2 実行時の処理内容

- 26.10.3 新しいセクションをツールバーに追加する方法

- 26.10.4 ツールバーのセクションをオーバーライドしてカスタム・コンテンツを表示する方法

- 26.11 「デザイン」ビューまたは「コンテンツの追加」ビューでの直接選択の有効化

- 26.11.1 直接選択を有効化および構成する方法

- 26.11.2 実行時の処理内容

- 26.12 コンポーザの拡張性機能の問題のトラブルシューティング

27 コンポーザの拡張構成の実行

- 27.1 コンポーザにアクセスするためのキーボード・ショートカットの構成

- 27.1.1 編集モードへのリンクなしのエントリを有効にする方法

- 27.1.2 ショートカット・キーのイベント・ハンドラの構成方法

- 27.1.3 実行時の処理内容

- 27.2 イベント対応のタスク・フローの作成

- 27.3 「構造」ビューにデフォルトで表示するアプリケーション・ページの構成

- 27.3.1 「構造」ビューにデフォルトで表示するアプリケーション・ページを構成する方法

- 27.3.2 実行時の処理内容

- 27.4 アプリケーションの「構造」ビューの無効化

- 27.4.1 「構造」ビューを無効にする方法

- 27.4.2 実行時の処理内容

- 27.5 タスク・フローのズーム機能の無効化

- 27.6 コンポーネントへのスタイルの適用

- 27.7 永続性変更マネージャの構成

- 27.8 実行時リソース文字列編集の構成

- 27.8.1 リソース文字列エディタの概要

- 27.8.2 アプリケーションでリソース文字列エディタを有効にする方法

- 27.8.3 オーバーライド・バンドルの構成方法

- 27.8.4 実行時の処理内容

- 27.9 コンポーザの拡張構成の問題のトラブルシューティング

28 コンポーザ固有のMDS構成の実行

- 28.1 MDSの概要

- 28.2 コンポーザのサンドボックスの使用

- 28.2.1 コンポーザのサンドボックスの作成を有効にする方法

- 28.2.1.1 アプリケーションのadf-config.xmlファイルの更新

- 28.2.1.2 アプリケーションのweb.xmlファイルの更新

- 28.2.1.3 データベース・ストアへのメタデータの移行

- 28.2.1.4 アプリケーションのデータベース・ストアの選択

- 28.2.1.5 実行時のフル・ページ・リフレッシュの有効化

- 28.2.2 実行時の処理内容

- 28.2.3 アプリケーションのサンドボックスを無効にする方法

- 28.2.4 失効したサンドボックスを破棄する方法

- 28.3 カスタマイズ・レイヤーの表示モードおよび編集モードへの追加: 例

- 28.3.1 JSFページへのコンポーザの追加方法

- 28.3.2 カスタムSiteCCヒント・レイヤーの作成方法

- 28.3.3 カスタムUserCCヒント・レイヤーの作成方法

- 28.3.4 ComposerSessionOptionsFactoryクラスの実装方法

- 28.3.5 コンポーザでの実装の登録方法

- 28.3.6 WebCenterComposerFilterの構成方法

- 28.3.7 サーブレットをリダイレクトしてMDSカスタマイズ・レイヤー間の切替えを有効にする方法

- 28.3.7.1 AppNavigationUtilsクラスの作成方法(ここから開始)

- 28.3.7.2 AppCloseHandlerの作成方法

- 28.3.7.3 AppCloseHandlerの登録方法

- 28.3.7.4 AppModeBeanの作成方法

- 28.3.8 実行時の処理内容

- 28.4 コンポーザを使用したMDS関連の問題のトラブルシューティング

29 コンポーザ・コンポーネントのデフォルトのセキュリティ動作の変更

- 29.1 カスタマイズ・ポリシーの定義によるコンポーネント・レベルの制限の適用

- 29.1.1 タイプ・レベルのカスタマイズ・ポリシーの定義方法

- 29.1.2 インスタンス・レベルのカスタマイズ・ポリシーの定義方法

- 29.2 セキュリティ・ロールの使用によるコンポーネント・インスタンス・レベルのカスタマイズ制限の適用: 例

- 29.2.1 ADFセキュリティの構成方法

- 29.2.2 jazn-data.xmlファイルでのロールの定義方法と権限の付与方法

- 29.2.3 カスタマイズ・ポリシーを含めるためのSessionOptionsオブジェクトのカスタマイズ方法

- 29.2.4 コンポーザでの実装の登録方法

- 29.2.5 WebCenterComposerFilterの構成方法

- 29.2.6 インスタンス・レベルのカスタマイズ制限の適用方法

- 29.2.7 実行時の処理内容

- 29.3 customizationAllowed属性を使用したタグ・レベルのセキュリティの適用

- 29.3.1 イメージ・コンポーネントに対するアプリケーション・カスタマイズの有効化方法

- 29.3.2 イメージ・コンポーネントに対するカスタマイズの制限方法

- 29.4 属性レベルのセキュリティの適用

- 29.4.1 コンポーネント・レベルでの変更の永続性の定義方法

- 29.4.2 実行時の処理内容

- 29.5 Panel CustomizableおよびShow Detailコンポーネント・アクションでのアクション・レベルの制限の適用

- 29.5.1 adf-config.xmlへのenableSecurityセクションの追加方法

- 29.5.2 アクション・カテゴリ・レベルでのセキュリティの定義

- 29.5.3 アクション・レベルでのセキュリティの定義

- 29.6 タスク・フローのセキュリティの実装

- 29.6.1 タスク・フローに対する権限の付与

- 29.6.2 タスク・フローの権限チェックの有効化

- 29.7 コンポーザのデフォルト・セキュリティ・ポリシーのオーバーライド

- 29.7.1 カスタム・セキュリティ・ポリシーの作成方法

- 29.7.2 コンポーザでのカスタム・ポリシーの登録方法

- 29.7.3 実行時の処理内容

- 29.8 コンポーザのコンポーネント・セキュリティでの問題のトラブルシューティング

30 コンポーザ・コンポーネントのプロパティおよびファイル

- 30.1 コンポーザ・コンポーネントのプロパティ

- 30.1.1 Page Customizableコンポーネント

- 30.1.2 Change Mode LinkおよびChange Mode Button

- 30.1.3 Layout Customizableコンポーネント

- 30.1.4 Show Detail Frameコンポーネント

- 30.1.5 Show Property

- 30.2 コンポーザ固有のファイルと構成

- 30.2.1 pe_ext.xml

- 30.2.2 adf-config.xml

- 30.2.3 web.xml

- 30.3 コンポーザのデフォルト・アドオンとプロパティ・パネル

付録

A 式言語式

- A.1 式言語(EL)式の概要

- A.1.1 式ビルダーの概要

- A.1.2 WebCenter Portalの式エディタの概要

- A.2 WebCenter Portal情報に関連するEL

- A.3 特定のページに関連するEL

- A.4 特定のポータルに関連するEL

- A.4.1 例: 様々なポータルに対するEL式の使用

- A.5 ポータル・イベント・コンテキストに関連するEL

- A.6 アセットに関連するEL

- A.6.1 例: アセットに対するEL式の使用

- A.7 セキュリティに関連するEL

- A.8 一般設定に関連するEL

- A.9 ポータル・リソースに関連するEL

- A.10 ナビゲーションに関連するEL

- A.11 ツールとサービスに関連するEL

- A.12 コンポーザに関連するEL

- A.13 ドキュメントに関連するEL

- A.14 ピープル・コネクションに関連するEL

- A.15 偽装に関連するEL

- A.16 ページ・エディタに関連するEL式

- A.16.1 例: ページ・エディタに対するEL式の使用

- A.17 デバイス設定に関連するEL式

- A.17.1 デバイス属性を検出するタスク・フローのサンプル・コード

- A.18 実用的なEL式

- A.19 式エディタの組込み式

- A.19.1 アプリケーション情報の組込みEL

- A.19.2 アセット情報の組込みEL

- A.19.3 ページ情報の組込みEL

- A.19.4 ページ・パラメータの組込みEL

- A.19.5 ポータル情報の組込みEL

- A.19.6 ポータル・ページ情報の組込みパス

- A.19.7 システムの組込みEL

- A.19.8 ユーザー情報の組込みEL

- A.19.9 WebCenterイベントの組込みEL

- A.20 ポータル問合せでの自由形式のJPQL WHERE句およびSORT句の非サポート

B WebCenter Portalのアクセシビリティ機能

- B.1 アクセス可能なHTMLの生成

- B.2 実行時のアクセシビリティ機能

- B.3 ポートレットのアクセシビリティの考慮事項

C WebCenter Portal REST APIの使用

- C.1 RESTの概要

- C.2 ユーザー名ベースのセキュリティ・トークンの暗号化の理解

- C.3 RESTを使用するメリット

- C.4 WebCenter Portal REST APIの概要

- C.5 リンク・モデルの理解

- C.5.1 リソース索引の使用

- C.5.2 リンクの構造

- C.5.2.1 リソース・タイプ

- C.5.2.2 リレーションシップ

- C.5.2.3 機能

- C.5.2.4 メディア・タイプ

- C.5.2.5 テンプレート

- C.5.2.5.1共通のリクエスト問合せパラメータ

- C.6 itemsハイパーメディアの理解

- C.7 HTTPを使用したハイパーメディアのナビゲーション

- C.7.1 HTTPレスポンス・ステータス・コード

- C.8 WebCenter Portal REST APIのセキュリティに関する考慮事項

- C.9 CMIS REST APIのセキュリティに関する考慮事項

- C.10 共通タイプの理解

- C.10.1 共通タイプ

- C.10.1.1 personReference

- C.10.1.2 groupSpaceReference

- C.10.2 ポータブル連絡先タイプ

- C.10.2.1 nameポータブル連絡先タイプ

- C.10.2.2 addressポータブル連絡先タイプ

- C.10.2.3 organizationポータブル連絡先タイプ

- C.10.2.4 valueポータブル連絡先タイプ

- C.11 キャッシュの管理

- C.12 プロキシ・サーバーの構成

- C.13 WebCenter Portal REST APIの例

- C.13.1 メッセージ・ボード・ハイパーメディアのナビゲーション

- C.13.1.1 リソース索引へのアクセス

- C.13.1.2 メッセージの読取り

- C.13.1.3 新しいメッセージの作成

- C.13.1.4 メッセージの更新

- C.13.1.5 メッセージの削除

- C.13.1.6 メッセージのフィルタ処理

- C.13.1.6.1 パブリック・メッセージとプライベート・メッセージ

- C.13.1.6.2 非表示メッセージと表示メッセージ

- C.13.2 アクティビティ・ストリーム・データの表示

- C.13.3 ユーザー・ステータスの更新

- C.14 ピープル・コネクションREST APIの使用

- C.14.1 アクティビティ・ストリームREST API

- C.14.1.1 アクティビティ・ストリームのエントリ・ポイント

- C.14.1.2 アクティビティ・ストリームのリソース・タイプの分類

- C.14.1.3 アクティビティ・ストリームのセキュリティに関する考慮事項

- C.14.1.4 アクティビティ・ストリームのリソース・タイプ

- C.14.1.4.1 urn:oracle:webcenter:activities:stream

- C.14.1.4.2 streamへのナビゲーション・パス

- C.14.1.4.3 streamでサポートされるメソッド

- C.14.1.4.4 streamからリンクされるリソース・タイプ

- C.14.1.4.5 urn:oracle:webcenter:activities:activity

- C.14.1.4.6 activityへのナビゲーション・パス

- C.14.1.4.7 activityでサポートされるメソッド

- C.14.1.4.8 activityからリンクされるリソース・タイプ

- C.14.1.4.9 activityの読取り専用要素

- C.14.1.4.10 templateParams要素の理解

- C.14.1.4.11 コメントとお気に入り登録の理解

- C.14.1.4.12 urn:oracle:webcenter:activities:parameter

- C.14.1.4.13 urn:oracle:webcenter:activities:activity:icon

- C.14.1.4.14 activities:activity:iconへのナビゲーション・パス

- C.14.1.4.15 iconでサポートされるメソッド

- C.14.1.4.16 iconからリンクされるリソース・タイプ

- C.14.2 コネクションおよびプロファイルREST API

- C.14.2.1 コネクションおよびプロファイルのエントリ・ポイント

- C.14.2.2 コネクションおよびプロファイルのリソース・タイプの分類

- C.14.2.3 コネクションおよびプロファイルのセキュリティに関する考慮事項

- C.14.2.4 コネクションおよびプロファイルのリソース・タイプ

- C.14.2.4.1 urn:oracle:webcenter:people

- C.14.2.4.2 peopleへのナビゲーション・パス

- C.14.2.4.3 peopleでサポートされるメソッド

- C.14.2.4.4 linksパラメータの事前定義済セット

- C.14.2.4.5 peopleからリンクされるリソース・タイプ

- C.14.2.4.6 urn:oracle:webcenter:people:icon

- C.14.2.4.7 iconでサポートされるメソッド

- C.14.2.4.8 iconからリンクされるリソース・タイプ

- C.14.2.4.9 urn:oracle:webcenter:people:person

- C.14.2.4.10 personへのナビゲーション・パス

- C.14.2.4.11 personでサポートされるメソッド

- C.14.2.4.12 personの読取り専用要素

- C.14.2.4.13 personからリンクされるリソース・タイプ

- C.14.2.4.14 urn:oracle:webcenter:people:person:list

- C.14.2.4.15 listへのナビゲーション・パス

- C.14.2.4.16 listでサポートされるメソッド

- C.14.2.4.17 listからリンクされるリソース・タイプ

- C.14.2.4.18 urn:oracle:webcenter:people:person:listNames

- C.14.2.4.19 listNamesへのナビゲーション・パス

- C.14.2.4.20 listNamesでサポートされるメソッド

- C.14.2.4.21 listNamesからリンクされるリソース・タイプ

- C.14.2.4.22 urn:oracle:webcenter:people:person:listName

- C.14.2.4.23 listNameへのナビゲーション・パス

- C.14.2.4.24 listNameでサポートされるメソッド

- C.14.2.4.25 listNameの書込み可能要素

- C.14.2.4.26 listNameからリンクされるリソース・タイプ

- C.14.2.4.27 urn:oracle:webcenter:people:person:list:member

- C.14.2.4.28 memberへのナビゲーション・パス

- C.14.2.4.29 memberでサポートされるメソッド

- C.14.2.4.30 memberの書込み可能要素

- C.14.2.4.31 urn:oracle:webcenter:people:person:status

- C.14.2.4.32 statusへのナビゲーション・パス

- C.14.2.4.33 statusでサポートされるメソッド

- C.14.2.4.34 statusの書込み可能要素

- C.14.2.4.35 statusからリンクされるリソース・タイプ

- C.14.2.4.36 urn:oracle:webcenter:people:invitations

- C.14.2.4.37 invitationsへのナビゲーション・パス

- C.14.2.4.38 invitationsでサポートされるメソッド

- C.14.2.4.39 invitationsの書込み可能要素

- C.14.2.4.40 invitationsからリンクされるリソース・タイプ

- C.14.2.4.41 urn:oracle:webcenter:people:invitation

- C.14.2.4.42 invitationへのナビゲーション・パス

- C.14.2.4.43 invitationでサポートされるメソッド

- C.14.2.4.44 invitationの書込み可能要素

- C.14.2.4.45 invitationの読取り専用要素

- C.14.2.4.46 invitationからリンクされるリソース・タイプ

- C.14.3 フィードバックREST API

- C.14.3.1 フィードバックのエントリ・ポイント

- C.14.3.2 フィードバックのリソース・タイプの分類

- C.14.3.3 フィードバックのセキュリティに関する考慮事項

- C.14.3.4 フィードバックのリソース・タイプ

- C.14.3.4.1 urn:oracle:webcenter:feedback

- C.14.3.4.2 feedbackへのナビゲーション・パス

- C.14.3.4.3 feedbackでサポートされるメソッド

- C.14.3.4.4 feedbackからリンクされるリソース・タイプ

- C.14.3.4.5 urn:oracle:webcenter:feedback:message

- C.14.3.4.6 messageへのナビゲーション・パス

- C.14.3.4.7 messageでサポートされるメソッド

- C.14.3.4.8 messageの読取り専用要素

- C.14.3.4.9 feedbackからリンクされるリソース・タイプ

- C.14.4 メッセージ・ボードREST API

- C.14.4.1 メッセージ・ボードのエントリ・ポイント

- C.14.4.2 メッセージ・ボードのリソース・タイプの分類

- C.14.4.3 メッセージ・ボードのセキュリティに関する考慮事項

- C.14.4.4 メッセージ・ボードのリソース・タイプ

- C.14.4.4.1 urn:oracle:webcenter:messageBoard

- C.14.4.4.2 messageBoardへのナビゲーション・パス

- C.14.4.4.3 messageBoardでサポートされるメソッド

- C.14.4.4.4 messageBoardの読取り専用要素

- C.14.4.4.5 messageBoardからリンクされるリソース・タイプ

- C.14.4.4.6 urn:oracle:webcenter:messageBoard:message

- C.14.4.4.7 messageへのナビゲーション・パス

- C.14.4.4.8 messageでサポートされるメソッド

- C.14.4.4.9 messageの書込み可能要素

- C.14.4.4.10 messageの読取り専用要素

- C.14.4.4.11 messageからリンクされるリソース・タイプ

- C.14.4.5 可視性に基づくメッセージのフィルタ処理

- C.14.4.5.1 プライベート・メッセージ

- C.14.4.5.2 非表示メッセージ

- C.14.4.5.3 メッセージ・ボードのREST URL

- C.14.5 招待の作成

- C.14.5.1 招待の作成

- C.14.5.2 招待の受入れ

- C.14.5.3 招待の削除

- C.15 コンテンツ管理REST API

- C.15.1 CMISドメイン・モデル

- C.15.1.1 データ・モデル

- C.15.1.1.1 リポジトリ

- C.15.1.1.2 オブジェクト

- C.15.1.1.3 オブジェクト型

- C.15.1.1.4 ドキュメント・オブジェクト

- C.15.1.1.5 フォルダ・オブジェクト

- C.15.1.1.6 リレーションシップ・オブジェクト

- C.15.1.1.7 ポリシー・オブジェクト

- C.15.1.1.8 アクセス制御

- C.15.1.1.9 バージョニング

- C.15.1.1.10 問合せ

- C.15.1.2 サービス

- C.15.2 CMIS第II部: RESTful AtomPubバインディング

- C.15.2.1 サービス・ドキュメント

- C.15.2.2 レスポンス・フォーマット

- C.15.2.3 その他の機能

- C.15.2.3.1 フォルダの子コレクション

- C.15.2.3.2 ドキュメント・エントリ

- C.15.2.3.3 コンテンツ・ストリーム

- C.15.3 コンテンツ管理REST APIのベスト・プラクティスおよび例

- C.15.3.1 ベスト・プラクティス

- C.15.3.2 例

- C.16 イベントREST APIの使用

- C.16.1 イベントのエントリ・ポイント

- C.16.2 イベントのリソース・タイプの分類

- C.16.3 セキュリティに関する考慮事項

- C.16.4 イベントのリソース・タイプ

- C.16.4.1 urn:oracle:webcenter:events:gsEvents

- C.16.4.1.1 gsEventsへのナビゲーション・パス

- C.16.4.1.2 gsEventsでサポートされるメソッド

- C.16.4.1.3 gsEventsからリンクされるリソース・タイプ

- C.16.4.2 urn:oracle:webcenter:events:gsEvent

- C.16.4.2.1 gsEventへのナビゲーション・パス

- C.16.4.2.2 gsEventでサポートされるメソッド

- C.16.4.2.3 gsEventの書込み可能要素

- C.16.4.2.4 gsEventの読取り専用要素

- C.16.4.2.5 gsEventからリンクされるリソース・タイプ

- C.16.4.3 urn:oracle:webcenter:events:gsCategories

- C.16.4.3.1 gsCategoriesへのナビゲーション・パス

- C.16.4.3.2 gsCategoriesでサポートされるメソッド

- C.16.4.3.3 gsCategoriesからリンクされるリソース・タイプ

- C.17 タグREST APIの使用

- C.17.1 タグのエントリ・ポイント

- C.17.2 タグのリソース・タイプの分類

- C.17.3 セキュリティに関する考慮事項

- C.17.4 タグのリソース・タイプ

- C.17.4.1 urn:oracle:webcenter:tagging:tags

- C.17.4.1.1 tagsへのナビゲーション・パス

- C.17.4.1.2 tagsでサポートされるメソッド

- C.17.4.1.3 tagsからリンクされるリソース・タイプ

- C.17.4.2 urn:oracle:webcenter:tagging:tag

- C.17.4.2.1 tagへのナビゲーション・パス

- C.17.4.2.2 tagでサポートされるメソッド

- C.17.4.2.3 tagからリンクされるリソース・タイプ

- C.17.4.3 urn:oracle:webcenter:tagging:taggedItems

- C.17.4.3.1 taggedItemsへのナビゲーション・パス

- C.17.4.3.2 taggedItemsでサポートされるメソッド

- C.17.4.3.3 taggedItemsからリンクされるリソース・タイプ

- C.17.4.4 urn:oracle:webcenter:tagging:taggedItem

- C.17.4.4.1 taggedItemでサポートされるメソッド

- C.17.4.4.2 taggedItemからリンクされるリソース・タイプ

- C.17.4.5 urn:oracle:webcenter:tagging:users

- C.17.4.5.1 usersへのナビゲーション・パス

- C.17.4.5.2 usersでサポートされるメソッド

- C.17.4.5.3 usersからリンクされるリソース・タイプ

- C.18 ディスカッションREST APIの使用

- C.18.1 ディスカッションのエントリ・ポイント

- C.18.2 ディスカッションのリソース・タイプの分類

- C.18.3 セキュリティに関する考慮事項

- C.18.4 ディスカッションのリソース・タイプ

- C.18.4.1 urn:oracle:webcenter:discussions:forums

- C.18.4.1.1 forumsへのナビゲーション・パス

- C.18.4.1.2 forumsでサポートされるメソッド

- C.18.4.1.3 forumsからリンクされるリソース・タイプ

- C.18.4.2 urn:oracle:webcenter:discussions:forum

- C.18.4.2.1 forumへのナビゲーション・パス

- C.18.4.2.2 forumでサポートされるメソッド

- C.18.4.2.3 forumの書込み可能要素

- C.18.4.2.4 forumの読取り専用要素

- C.18.4.2.5 forumからリンクされるリソース・タイプ

- C.18.4.3 urn:oracle:webcenter:discussions:forum:topics

- C.18.4.3.1 topicsへのナビゲーション・パス

- C.18.4.3.2 topicsでサポートされるメソッド

- C.18.4.3.3 topicsからリンクされるリソース・タイプ

- C.18.4.4 urn:oracle:webcenter:discussions:forum:topic

- C.18.4.4.1 topicへのナビゲーション・パス

- C.18.4.4.2 topicでサポートされるメソッド

- C.18.4.4.3 topicの書込み可能要素

- C.18.4.4.4 topicの読取り専用要素

- C.18.4.4.5 topicからリンクされるリソース・タイプ

- C.18.4.5 urn:oracle:webcenter:discussions:forum:topic:messages

- C.18.4.5.1 messagesへのナビゲーション・パス

- C.18.4.5.2 messagesでサポートされるメソッド

- C.18.4.5.3 messagesからリンクされるリソース・タイプ

- C.18.4.6 urn:oracle:webcenter:discussions:forum:topic:message

- C.18.4.6.1 messageへのナビゲーション・パス

- C.18.4.6.2 messageでサポートされるメソッド

- C.18.4.6.3 messageの書込み可能要素

- C.18.4.6.4 messageの読取り専用要素

- C.18.4.6.5 messageからリンクされるリソース・タイプ

- C.19 リストREST APIの使用

- C.19.1 リストのエントリ・ポイント

- C.19.2 リストのリソース・タイプの分類

- C.19.3 リストのセキュリティに関する考慮事項

- C.19.4 リストのリソース・タイプ

- C.19.4.1 urn:oracle:webcenter:space:lists

- C.19.4.1.1 listsへのナビゲーション・パス

- C.19.4.1.2 listsでサポートされるメソッド

- C.19.4.1.3 listsからリンクされるリソース・タイプ

- C.19.4.2 urn:oracle:webcenter:space:list

- C.19.4.2.1 listへのナビゲーション・パス

- C.19.4.2.2 listでサポートされるメソッド

- C.19.4.2.3 メソッド(list): GET

- C.19.4.2.4 メソッド(list): PUT

- C.19.4.2.5 メソッド(list): DELETE

- C.19.4.2.6 listからリンクされるリソース・タイプ

- C.19.4.3 urn:oracle:webcenter:space:list:rows

- C.19.4.3.1 rowsへのナビゲーション・パス

- C.19.4.3.2 rowsでサポートされるメソッド

- C.19.4.3.3 rowsからリンクされるリソース・タイプ

- C.19.4.4 urn:oracle:webcenter:space:list:row

- C.19.4.4.1 rowへのナビゲーション・パス

- C.19.4.4.2 rowでサポートされるメソッド

- C.19.4.4.3 メソッド(row): GET

- C.19.4.4.4 メソッド(row): PUT

- C.19.4.4.5 メソッド(row): DELETE

- C.19.4.4.6 rowからリンクされるリソース・タイプ

- C.19.4.5 urn:oracle:webcenter:space:list:columns

- C.19.4.5.1 columnsへのナビゲーション・パス

- C.19.4.5.2 columnsでサポートされるメソッド

- C.19.4.5.3 メソッド(columns): GET

- C.19.4.5.4 メソッド(columns): POST

- C.19.4.5.5 columnsからリンクされるリソース・タイプ

- C.19.4.6 urn:oracle:webcenter:space:list:column

- C.19.4.6.1 columnへのナビゲーション・パス

- C.19.4.6.2 columnでサポートされるメソッド

- C.19.4.6.3 columnからリンクされるリソース・タイプ

- C.20 アクティビティ・グラフREST APIの使用

- C.20.1 アクティビティ・グラフのエントリ・ポイント

- C.20.2 アクティビティ・グラフのリソース・タイプの分類

- C.20.3 セキュリティに関する考慮事項

- C.20.4 アクティビティ・グラフのリソース・タイプ

- C.20.4.1 urn:oracle:webcenter:activitygraph:recommendations

- C.20.4.1.1 recommendationsへのナビゲーション・パス

- C.20.4.1.2 recommendationsでサポートされるメソッド

- C.20.4.1.3 recommendationsからリンクされるリソース・タイプ

- C.20.4.2 urn:oracle:webcenter:activitygraph:recommendations:recommendation

- C.20.4.2.1 recommendationへのナビゲーション・パス

- C.20.4.2.2 recommendationの読取り専用要素

- C.20.4.3 urn:oracle:webcenter:activitygraph:items

- C.20.4.3.1 itemsへのナビゲーション・パス

- C.20.4.3.2 itemsでサポートされるメソッド

- C.20.4.3.3 itemsからリンクされるリソース・タイプ

- C.20.4.4 urn:oracle:webcenter:activitygraph:items:item

- C.20.4.4.1 itemへのナビゲーション・パス

- C.20.4.4.2 itemでサポートされるメソッド

- C.20.4.4.3 itemの書込み可能要素

- C.20.4.4.4 itemの読取り専用要素

- C.20.4.4.5 itemからリンクされるリソース・タイプ

- C.21 検索REST APIの使用

- C.21.1 検索のエントリ・ポイント

- C.21.2 検索のリソース・タイプの分類

- C.21.2.1 resultsへのナビゲーション・パス

- C.21.2.2 resultsでサポートされるメソッド

- C.21.2.3 resultsからリンクされるリソース・タイプ

- C.21.3 セキュリティに関する考慮事項

- C.21.4 検索のリソース・タイプ

- C.21.4.1 urn:oracle:webcenter:searchcollection:links

- C.21.4.2 urn:oracle:webcenter:searchcollection:results

- C.21.4.3 urn:oracle:webcenter:searchcollection:facets

D トラブルシューティング

- D.1 WebCenter Portal共有ライブラリのデプロイメントのトラブルシューティング

- D.2 ポートレット作成のトラブルシューティング

- D.2.1 ポートレットの作成ウィザードにアクセスできない

- D.2.2 ポートレットに必要なポートレット機能が追加できない

- D.3 ページレットのトラブルシューティング

- D.4 OmniPortletのトラブルシューティング

はじめに

このガイドでは、JDeveloperを使用して、WebCenter Portalアセット、WebCenter Portal Serverの拡張機能および共有ライブラリを構築する方法について説明します。このガイドでは、次のタスクのすべてについて詳細な情報を示します。

- 開発環境を設定および準備する方法

- WebCenter Portalアセットを構築およびデプロイする方法

- WebCenter Portalの拡張機能を構築およびデプロイする方法

- WebCenter Portalで使用可能な共有ライブラリを構築およびデプロイする方法

注意:

このマニュアルのPortable Document Format (PDF)バージョンでは、URLが2行に分かれている場合、クリックしても完全なURLデータがブラウザに送信されません。PDFに含まれているURLの正しいターゲットを取得するには、URLをコピーして、ブラウザの「アドレス」フィールドに貼り付けてください。このマニュアルのHTML版では、リンクをクリックすればブラウザに直接リンク先が表示されます。

対象読者

このガイドは、WebCenter Portalアプリケーションをサポートする開発者を対象としています。開発者は主にアセット(ページ・テンプレート、リソース・カタログ、スキン、ポートレット、タスク・フローなど)の開発を担当し、開発されたアセットはナレッジ・ワーカーおよびアプリケーション・スペシャリストによって公開および利用されます。開発者は主にJDeveloperを使用して作業し、WebCenter Portalアセット・アプリケーションを作成して、3つのアセット関連のテンプレート(WebCenter Portalアセット・テンプレート、「WebCenterポートレット・プロデューサ・アプリケーション」テンプレート、「WebCenter Portalサーバー拡張機能」テンプレート)のいずれかを利用します。

「WebCenter Portalアセットの使用」の各章では、ページ・テンプレート、リソース・カタログ、スキン、ポートレット、タスク・フローなどのアセットを開発する方法について説明します。このガイドの他の部には、ポートレット、ページレット、共有ライブラリなどのアセットの使用を扱った章が含まれる部もあります。

開発者のタスク

開発者の一般的なタスクを次に示します。

- カスタム・アセット(WebCenter Portalのポータル用のページ・テンプレートなど)の開発

- Javaポートレットの開発

- 既存のWebCenter Portalアセットの変更

- タスク・フロー、マネージドBean、およびその他のコンポーネントを開発してデプロイします。

- ソース・コントロール システムをメンテナンスします。

- ビルド・システムをメンテナンスします。

このガイドでは、対象読者がすでに『Oracle Application Development FrameworkによるFusion Webアプリケーションの開発』を読んでいることと、次のテクノロジをよく理解していることも前提としています。

- Java

- Oracle JDeveloper

- JavaServer Faces

- Oracle Application Development Framework (Oracle ADF) (目的、基本的なアーキテクチャ、基本的な開発スキル)

- Oracle ADF Facesコンポーネント

- Oracle WebLogic Server

ドキュメントのアクセシビリティについて

Oracleのアクセシビリティへの取り組みについては、Oracle Accessibility ProgramのWebサイト(http://www.oracle.com/pls/topic/lookup?ctx=acc&id=docacc)にアクセスしてください。

Oracleサポートへのアクセス

サポートを購入したオラクル社のお客様は、My Oracle Supportを介して電子的なサポートにアクセスできます。詳細は、http://www.oracle.com/pls/topic/lookup?ctx=acc&id=info、聴覚に障害があるお客様はhttp://www.oracle.com/pls/topic/lookup?ctx=acc&id=trsを参照してください。

関連ドキュメント

詳細は、Oracle Fusion Middleware 12c (12.2.1.2.0)のドキュメント・セットまたはOracle Technology Network (OTN) (http://www.oracle.com/technology/index.html)にある次のドキュメントを参照してください。

- Oracle Fusion Middleware Oracle WebCenter Portalの管理

- Oracle Fusion Middleware Oracle WebCenter Portalでのポータルの構築

- Oracle Fusion Middleware Oracle WebCenter Portalの使用

- Oracle Fusion Middleware エラー・メッセージ

- Oracle Fusion Middleware Oracle Application Development FrameworkによるFusion Webアプリケーションの開発

表記規則

このマニュアルでは次の表記規則を使用します。

規則

意味

太字

太字は、操作に関連するGraphical User Interface要素、または本文中で定義されている用語および用語集に記載されている用語を示します。

イタリック

イタリックは、ユーザーが特定の値を指定するプレースホルダ変数を示します。

固定幅フォント

固定幅フォントは、段落内のコマンド、URL、サンプル内のコード、画面に表示されるテキスト、または入力するテキストを示します。

登場人物リスト

WebCenter Portalドキュメントは、特定のガイドのタスクが特定の仮想の人物に対応するように整理されています。各人物は、 WebCenter Portalで作業をするのに必要なスキルのセット(基礎的なスキルから高度なスキルまで)に関連付けられています。たとえば、このガイドは開発者という人物を対象としています。

この章では、WebCenter Portalの人物を紹介し、それぞれどのようにWebCenter Portalを利用する場合があるかを説明します。各人物には、WebCenter Portalで提供されるすぐに使用できるデフォルトのロールが割り当てられています。デフォルトのロールには、その人物が実行する典型的な業務に適する一意の権限セットが付与されています。これらのデフォルトのロールを変更したり、組織独自のニーズに合うように新しいロールを構成することができることに注意してください。

通常、WebCenter Portalを操作する人は、次の人物で構成されたチームとして連携して作業を行います。

- ナレッジ・ワーカー

- アプリケーション・スペシャリスト

- Web開発者

- 開発者

- システム管理者

ナレッジ・ワーカー

Karenは、通常、WebCenter Portalを使用して、コンテンツの提供やレビュー、ソーシャル・ネットワークへの参加、ホーム・ポータルを利用した独自のドキュメントやプロファイルの管理を行っているナレッジ・ワーカーです。

アプリケーション・レベルでのKarenの権限は、デフォルトのAuthenticated-Userロールに付与されるような権限になります。このロールは、組織に固有のニーズに応じてカスタマイズされることがあります。ポータル・レベルでは、ポータル・マネージャは、「ページの表示」権限と「ページのカスタマイズ」権限を持つロールをKarenに割り当てます。

ロールと権限の詳細は、『Oracle Fusion Middleware Oracle WebCenter Portalでのポータルの構築』のポータルのロールと権限の概要に関する項を参照してください。

WebCenter Portalでのナレッジ・ワーカーのタスク

次に、Karenのようなナレッジ・ワーカーの一般的なタスクを示します。

- コンテンツ・コントリビューション権限が割り当てられているページの編集および更新

- 情報、ファイルおよびリンクを共有し、インスタント・メッセージ、メール、メッセージ・ボード、ディスカッション、Wikiおよびブログを通してやり取りすることによる、他のWebCenter Portalユーザーとの接続および共同作業

- Content Serverに格納されるドキュメントのアップロード、共有および管理

- チームまたはプロジェクト・ポータルへの参加

- コンテンツ更新時の通知の受信、メンバーになっているポータルおよび接続しているユーザーのアクティビティの表示、お知らせの表示、ディスカッションの参加、およびWebCenter Portal RSSフィードのモニタリングにより、WebCenter Portal内の変更に関する最新動向の把握

- お気に入り、ノート、カレンダ、リスト、ポータル・オブジェクトへのリンク、およびタグを使用することによる整理された状態の維持

KarenがWebCenter Portalで使用可能な機能により習熟するにしたがって、ポータルの作成など、より高度なタスクを実行するようになる可能性があります。より高度なナレッジ・ワーカーとして、彼女の役割はアプリケーション・スペシャリストのタスクと重複するようになります。

Karenのようなナレッジ・ワーカーを対象にした情報は、『Oracle WebCenter Portalの使用』に記載されています。アプリケーション・スペシャリストのタスクと重複する高度なタスクの説明は、『Oracle WebCenter Portalでのポータルの構築』に記載されています。

アプリケーション・スペシャリスト

Ariは、WebCenter Portalで作業し、ポータルとその構造(ページ階層、ナビゲーション、セキュリティ)およびそのコンテンツ(ページ上のコンポーネント、レイアウト、動作など)を作成および管理するアプリケーション・スペシャリストです。一般的なプロジェクトでは、Ariは、Karen (ナレッジ・ワーカー)、Wendy (Web開発者)、およびDave (開発者)の成果物を統合します。

アプリケーション・レベルでのAriの権限は、デフォルトのApplication Specialistロールに付与されるような権限になります。このロールは、組織に固有のニーズに応じてカスタマイズされていることがあります。自分で作成したポータルで、AriはPortal Managerロールで可能なアクションを実行し、ポータルを管理します。

ロールと権限の詳細は、『Oracle Fusion Middleware Oracle WebCenter Portalでのポータルの構築』のポータルのロールと権限の概要に関する項を参照してください。

WebCenter Portalでのアプリケーション・スペシャリストのタスク

次に、Ariのようなアプリケーション・スペシャリストの一般的なタスクを示します。

- 新しいポータルの計画および作成

- 所有するポータルの編集および管理

- ページ・コンポーネントの追加および構成にページ・エディタおよびリソース・カタログを使用した、ポータル・ページの作成および構築

- ポータル・アセット、ツールとサービスの作成および管理

- すべてのポータルに渡る共有アセットおよびポータル・テンプレートの管理

Ariのようなアプリケーション・スペシャリストを対象にした情報は、『Oracle WebCenter Portalでのポータルの構築』に記載されています。ホーム・ポータルの個人用ビューを操作する場合、Ariは『Oracle WebCenter Portalの使用』も参照します。

Web開発者

Wendyは、すべてのポータルに一貫した、ブランディングされたルック・アンド・フィールを提供することに重点的に取り組むWeb開発者です。Wendyは、グラフィック・デザインとHTMLマークアップを提供し、これによりAri (WebCenter Portalでのアプリケーション・スペシャリスト)またはDave (JDeveloperでの開発者)はコンテンツまたはページ・スタイル・テンプレート、スキンなどを作成できます。これらのアセットが作成されると、Ariはこれらを利用してポータル・ページを作成できます。通常、WendyはWebCenter Portalと直接やり取りすることはありません。

WebCenter PortalでのWeb開発者のタスク

次に、WendyのようなWeb開発者の一般的なタスクを示します。

- 企業ポータルのルック・アンド・フィールの開発

- 新しいページ・テンプレートの設計

WendyなどのWeb開発者を対象にした情報は、『Oracle Fusion Middleware Oracle WebCenter Portalでのポータルの構築』のポータルのルック・アンド・フィールの作成に関する項に記載されています。

開発者

Daveは、主にコンポーネント(タスク・フロー、ページ・テンプレート、コンテンツ・テンプレートなど)の開発を担当する開発者です。これらは、Ari (アプリケーション・スペシャリスト)によって公開および利用されます。DaveはJDeveloperで作業し、WebCenter Portalで使用するアセットを開発および拡張します。

開発者のタスク

次に、Daveのような開発者の一般的なタスクを示します。

- カスタム・アセット(WebCenter Portalのポータル用のページ・テンプレートやリソース・カタログなど)の開発

- Javaポートレットの開発

- タスク・フロー、マネージドBean、およびその他のコンポーネントを開発してデプロイします。

- カスタムのパーソナライズ・コンポーネントを開発します。

- ソース・コントロール システムをメンテナンスします。

- ビルド・システムをメンテナンスします。

Daveのような開発者を対象にした情報は、『Oracle JDeveloperによるWebCenter Portalアセットとカスタム・コンポーネントの開発』に記載されています。

システム管理者

Syedは、システム管理者です。システム管理者は、IT担当者やビジネス・ユーザーからの要求に応じて新しいマシンを設定し、既存のアプリケーションのシステムとデータベースをクローニングまたはバックアップします。また、パッチ、パッケージおよびアプリケーションをインストールし、その他の管理に関連する作業を実行します。Syedはシステム管理者として、別のツール(Fusion Middleware Controlやコマンド行ツールなど)を使用します。Enterprise Managerを利用してポータル設定を構成し、WebCenter Contentやその他のFusion Middleware製品およびOracleアプリケーションなどの統合も構成します。

WebCenter Portalでは、デフォルトのAdministratorロールに付与されるような権限を持ちます。これは、すべてのポータル(ホーム・ポータルを含む)のグローバル・オプションを管理および設定するための排他的アクセスを提供します。

アプリケーション・レベルのロールと権限の詳細は、『Oracle Fusion Middleware Oracle WebCenter Portalの管理』のアプリケーション・ロールと権限に関する項を参照してください。

システム管理者のタスク

次に、Syedのようなシステム管理者の一般的なタスクを示します。

- WebCenter Portal管理を使用して、すべてのポータル(ポータルのインポートとエクスポートを含む)およびサイト全体のセキュリティを管理します

- WebCenter Portal管理を使用して、サイト全体のシステム・ページ、ビジネス・ロール・ページおよび個人ページを管理します

- セキュリティ、分類、メタデータ、ワークフロー、ガバナンスを主導します。

- 管理機能の管理コンソールを使用します。

- 管理機能のコマンド行ユーティリティを実行します。

- 開発者の成果物の本番バージョンをインストールおよび構成します。

- 本番バージョンおよびオペレーティング・システムにパッチを適用します。

- 本番バージョンのクローンおよびバックアップを作成します。

- 本番バージョンのリストアを実行します。

- 本番バージョンに関する問題についてオペレーティング・システムをモニターします。

- アプリケーションをデプロイおよび再デプロイします。

Syedのようなシステム管理者を対象とした情報は、『Oracle WebCenter Portalの管理』および『WebLogic Server WLSTコマンド・リファレンス』を参照してください。

第I部 概要

この部は、次の章で構成されています。

- Oracle WebCenter Portalの開発の概要

- 開発環境の設定

1 Oracle WebCenter Portalの開発の概要

この章では、このガイド『Oracle Fusion Middleware Oracle JDeveloperによるWebCenter Portalアセットとカスタム・コンポーネントの開発』を紹介し、WebCenter Portalの開発者が実行すると思われる主なタスクについて簡単に説明します。

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

- このガイドの目的

- WebCenter Portal開発者としての役割

1.1 このガイドの目的

この章では、『Oracle Fusion Middleware Oracle JDeveloperによるWebCenter Portalアセットとカスタム・コンポーネントの開発』の対象読者および基本目的について説明します。

このガイドでは、Oracle JDeveloperを使用したWebCenter Portalアセット、共有ライブラリおよびWebCenter Portalの拡張機能の開発について説明します。このガイドで説明するほとんどのタスクでは、Java、CSS、Application Development Framework (ADF)、式言語(EL)およびそれらに関する経験を必要とする作業を行います。

このガイドで説明する主なアクティビティには、次のものがあります。

環境の設定

「概要」の環境およびチーム環境の設定に関する各章を参照してください。

アセットの使用

「WebCenter Portalアセットの使用」の各章では、レイアウト、ページ・スタイル、ページ・テンプレート、スキン、コンテンツ・プレゼンタ・テンプレート、視覚化テンプレートといったWebCenter Portalアセットを開発する方法について説明します。このガイドの他の部には、ポートレット、ページレット、タスク・フロー、共有ライブラリなど、他のタイプのアセットの使用を扱った章が含まれる部もあります。

ポートレットの使用

ポートレットは、複数のソースからのデータを意味のある関連付けられた形式で表示する手段を提供します。ポートレットでは、他のWebサイトからの抜粋の表示、主要情報のサマリーの生成、検索の実行および多様なデータ・ソースの情報を収集したコレクションへのアクセスなどを実行できます。様々なポートレットを単一のページに配置できるため、ユーザーはコンテンツが実際には複数のソースからのものであっても単一のソースとして利用できます。詳細は、「ポートレットの使用」の各章を参照してください。

ページレットの使用

ページレットは、ページレット・プロデューサからアクセスされるWebページのサブコンポーネントで、プロキシされた任意のアプリケーションに挿入できます。ページレット・プロデューサのリソース上にあるアプリケーションでマークアップを返すものはページレットとして登録でき、登録すると、WebCenter Portalまたは他のWebアプリケーションで表示できるようになります。詳細は、「ページレットの使用」の各章を参照してください。

WebCenter Portalの追加カスタマイズの使用

ADFアセット(タスク・フロー、データ・コントロール、マネージドBeanなど)を拡張してWebCenter Portal内で追加機能を共有ライブラリとして提供したり、スマートフォンやタブレットなどのモバイル・デバイスにさらに適したページ・レイアウトを提供できます。WebCenter Portalをカスタマイズするための様々な方法の詳細は、「WebCenter Portalの追加カスタマイズ」の各章を参照してください。

1.2 WebCenter Portal開発者としての役割

WebCenter Portalでは、デフォルトでは存在しないまたはWebCenter Portalのランタイムでは簡単に作成できないカスタム・コンポーネントが必要な場合があります。たとえば、設計要件で、ブランディングされ、精密に編成されたページ・テンプレート、ページ・スタイルおよびスキンが必要とされる場合があります。この場合、目的のルック・アンド・フィールを実現するにはADF FacesおよびCSSを使用する必要があり、そのような開発にはJDeveloperが適しています。他のユースケースでは、ポータル要素とデータとのやり取り(イベント処理でのADFタスク・フローまたはポートレットの使用など)が可能となるカスタム・コンポーネントの開発が含まれることもあります。たとえば、WebCenter Portal開発者として、次のものを作成および構成するよう要求される場合があります。

- ページ・テンプレートやページ・スタイルなどのポータル・インフラストラクチャ・コンポーネント

- タスク・フロー、データ・コントロール、バッキングBeanなどのカスタム・ポータル拡張機能

- WebCenterポートレット・プロデューサ・アプリケーション

- ページレット・プロデューサ・ページレット

2 開発環境の設定

この章では、開発環境の構築方法に関するガイダンスやヒントを示し、JDeveloperを使用してアセットおよびWebCenter Portalの拡張機能の開発を始める支援をします。

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

- 開発環境の設定の概要

- 基本的な設定タスク

- WebCenterポートレット・プロデューサ・アプリケーションに固有の設定タスク

2.1 開発環境の設定の概要

この章では、一般的なタスクとアプリケーション固有のタスクを区別します。一般的なタスクは、どのようなアプリケーションを開発しているかに関係なく適用されます。たとえば、JDeveloperおよびWebCenter Portal拡張機能のインストールは一般的な設定タスクです。この章で説明しているその他のタスクは、WebCenter Portalサーバー拡張機能やWebCenterポートレット・プロデューサ・アプリケーションなど、特定の種類のアプリケーションを開発している場合にのみ適用されます。

2.2 基本的な設定タスク

この項では、開発しているアプリケーションの種類によらない設定タスクについて説明します。

- Oracle JDeveloperのインストール

- JDeveloper用のWebCenter Portal拡張機能のインストール

- ユーザー・ホーム・ディレクトリ環境変数の設定

- 統合WebLogic Serverの管理

- アプリケーション・リソース接続の作成

2.2.1 Oracle JDeveloperのインストール

Oracle JDeveloperは、ポータルおよびカスタム・ポータル・コンポーネントの開発のための統合開発環境(IDE)を提供します。Oracle JDeveloperの取得およびインストールの詳細は、次に示すOTNのOracle JDeveloperに関するページを参照してください。

http://www.oracle.com/technetwork/developer-tools/jdev/overview/index.html

2.2.2 JDeveloper用のWebCenter Portal拡張機能のインストール

WebCenter Portal拡張機能は、JDeveloperにWebCenter Portal機能のフル・セットを提供するアドインです。WebCenter Portal拡張機能をインストールするには、次のようにします。

1. Oracle JDeveloperを起動します。

2. 「デフォルトのロールの選択」ダイアログが表示される場合は、「デフォルトのロール」を選択してすべてのテクノロジを有効にし、「OK」をクリックします。

3. 以前のバージョンから設定を移行するかどうかを尋ねるダイアログが開く場合は、「いいえ」をクリックします。

4. 「ヘルプ」メニューから「更新の確認」を選択します。

注意:

ファイアウォールの内部にいる場合、拡張機能にアクセスするにはプロキシ・サーバーを構成する必要がある場合があります。更新ウィザードで、HTTPプロキシ・サーバー設定を入力できるダイアログが表示されます。どのダイアログでも、「ヘルプ」ボタンをクリックすると、詳細な情報が表示されます。詳細は、Oracle JDeveloperオンライン・ヘルプのプロキシ設定とJDeveloperに関するトピックを参照してください。

5. 「ソース」ページで、「更新センターの検索」を選択します。

6. 「Oracle Fusion Middleware製品」と「Oracleの公式な拡張機能および更新」を選択して「Next」をクリックします。

7. 生成されたリストから、「WebCenterコア・デザインタイム」と「WebCenter Portalデザインタイム」の各拡張機能を検索して選択し、「終了」をクリックします。

8. 要求されたら、JDeveloperを再起動します。

『Oracle WebCenter Portalのインストールと構成』も参照してください。

2.2.3 ユーザー・ホーム・ディレクトリ環境変数の設定

JDeveloperで参照するユーザー・ホーム・ディレクトリの環境変数を設定することを強くお薦めします。この変数を設定することで、状況次第で発生することが確認されている、長いパス名のエラーを受け取らずに済みます。

この変数をWindows、Linux、UNIXおよびMac OS Xオペレーティング・システムで設定する手順の詳細は、『Oracle Fusion Middleware Oracle JDeveloperのインストール』のユーザー・ホーム・ディレクトリの設定に関する説明を参照してください。

2.2.4 統合WebLogic Serverの管理

次の各項では、JDeveloperで使用する統合WebLogic Serverと、そのデプロイおよび構成の方法について説明します。

- 統合WebLogic Serverとは

- 統合WebLogic Serverの起動と停止

- 統合WebLogic Server用のJVMの構成

2.2.4.1 統合WebLogic Serverとは

統合WebLogic Serverは、Oracle WebLogic Serverのインスタンスを参照し、JDeveloperにバンドルされているランタイム・サービスです。統合WebLogic Serverを使用すると、開発者はJDeveloper内からWebCenter Portalポートレット・プロデューサおよびコンシューマ・アプリケーションを実行、テストおよびデバッグできます。特定のポータルまたはページ(あるいはその両方)内で適合性を確認するには、WebCenter Portal内でアセットを公開およびテストする必要があることに注意してください。

2.2.4.2 統合WebLogic Serverの起動と停止

統合WebLogic Serverの管理の詳細は、JDeveloperオンライン・ヘルプの統合WebLogic Serverのデプロイに関するトピックを参照してください。デバッグ・モードでの実行やWebLogic Server管理コンソールへのログインなど、その他のオプションについても、その項で説明しています。

2.2.4.3 統合WebLogic Server用のJVMの構成

必須ではありませんが、setDomainEnv.shで統合WLSを設定するデフォルトのJava Virtual Machine (JVM)を変更するオプションがあります。このファイルは、JDEV_SYSTEM_DIRECTORY/DefaultDomain/binにあります。

デフォルトのメモリー値は、次のとおりです。

-Xms512m -Xmx512m

JDEV_SYSTEM_DIRECTORYを作成または参照する場合、Windowsプラットフォームでは、WebCenterのドメイン名に空白を含めたり、パスに空白が含まれるフォルダ内にドメインを作成することはできないことに注意してください。したがって、DOMAIN_HOMEパスおよびJDEV_SYSTEM_DIRECTORYパスには、空白を含めないでください。

2.2.5 アプリケーション・リソース接続の作成

接続により、アプリケーションは外部のデータおよびサービスにアクセスできます。たとえば、コンテンツ・プレゼンタ・タスク・フローを使用して、Oracle WebCenter Content Serverリポジトリのコンテンツを表示するには、そのリポジトリへの接続を構成する必要があります。ポートレット・プロデューサのポートレットを使用する場合は、そのプロデューサを構成する必要があります。

ヒント:

接続は作成後にテストしてから、ソース・コントロール・システムにチェックインすることをお薦めします。このようにすると、チーム内の別の開発者は、その接続をチェックアウトして使用できるようになります。この技法により、接続が変更された場合でも、チームの同期が保たれるようになります。

この項では、接続について、および新しい接続を作成するウィザードにアクセスするための様々な方法について説明します。

2.2.5.1 接続の場所について

接続を作成するためにウィザードを起動した方法に応じて、接続は次のいずれかの場所に配置されます。

- 「アプリケーション・ナビゲータ」の「アプリケーション・リソース」内
ここに作成した接続は、現在のアプリケーションでのみ使用できます。これは、リポジトリ接続を作成する最も一般的な方法です。

特定の機能については、「アプリケーション・リソース」から接続をドラッグして、別の種類のタスク・フロー・リージョンを作成するページにドロップできます。詳細は、WebCenter Portalのツールとサービスに関する個々の章を参照してください。

- 「リソース・パレット」の「IDE接続」内
ここに作成した接続は、どのアプリケーションでも再利用できます。これに該当する接続をアプリケーションで使用する場合は、「リソース・パレット」から接続をドラッグして、そのアプリケーションの「接続」ノードにドロップします。

2.2.5.2 接続ウィザードにアクセスする方法

「新規ギャラリ」から接続ウィザードにアクセスするには:

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

2. 「新規ギャラリ」で、「接続」を開き、作成する接続のタイプを選択してから、「OK」をクリックします。
選択内容に応じて、「<Connection_Type>接続の作成」ダイアログが開きます。

3. デフォルトでは、「接続の作成場所」オプションは「アプリケーション・リソース」に設定されます。
「IDE接続」を選択すると、「リソース・パレット」に接続を作成できます。

「アプリケーション・ナビゲータ」から接続ウィザードにアクセスするには:

1. 「アプリケーション・リソース」で「接続」ノードを右クリックし、「新規接続」を選択して、ポップアップ・メニューから接続のタイプを選択します。

2. 選択内容に応じて、「<Connection_Type>接続の作成」ダイアログまたはウィザードが開きます。
デフォルトでは、「接続の作成場所」オプションは「アプリケーション・リソース」に設定されます。

「リソース・パレット」から接続ウィザードにアクセスするには:

1. 「リソース・パレット」の「新規」アイコンをクリックし、「新規接続」を選択して、ポップアップ・メニューから接続のタイプを選択します。

2. 選択内容に応じて、「<Connection_Type>接続の作成」ダイアログまたはウィザードが開きます。

デフォルトでは、「接続の作成場所」オプションは「IDE接続」に設定されます。

2.3 WebCenterポートレット・プロデューサ・アプリケーションに固有の設定タスク

WebCenter Portalには、ポータル・ページに追加できる、すぐに使用可能な様々なポートレットが用意されています。この項では、事前構成プロデューサと、これらのプロデューサで提供されるポートレットについて簡単に説明します。次のサブセクションが含まれます:

- 事前構成済ポートレット・プロデューサのデプロイ

- OmniPortletへのアクセス

- WSRPのサンプルのポートレット・プロデューサおよびポートレット

- PDK-Javaのサンプルのポートレット・プロデューサおよびポートレット

WebCenterポートレット・プロデューサ・アプリケーションの詳細は、「ポートレットの概要」を参照してください。

2.3.1 事前構成済ポートレット・プロデューサのデプロイ

事前構成済ポートレット・プロデューサは、デフォルトではデプロイされないため、この項の説明に従って手動でデプロイする必要があります。

注意:

プロデューサ・アプリケーションはデプロイメントの際、メモリーを消費し、CPU時間を必要とします。これはWebLogic Serverの起動時間やベース・メモリー・フットプリントの一因になっています。このような理由により、必要なアプリケーションのみをデプロイするのが合理的です。内部アプリケーションのデプロイ調整の詳細は、『Oracle Fusion Middleware Oracle WebLogic Serverへのアプリケーションのデプロイ』の内部アプリケーションのオンデマンド・デプロイメントに関する項を参照してください。

1. 統合WebLogic Serverが稼働していない場合は、これを起動します。この機能を有効にするには、サーバーが稼働していることが必要です。

2. 「実行」メニューから、「WebCenter Portalデプロイメント」を選択します。

3. 「WebCenter Portalデプロイメント」ダイアログ(図2-1)で、デプロイ(またはアンデプロイ)するプロデューサを選択し、「OK」をクリックします。事前構成された各プロデューサについては、以降の項で詳細に説明します。

図2-1 「WebCenter Portalデプロイメント」ダイアログ

2.3.2 OmniPortletへのアクセス

統合WLSには、実行時に設計OmniPortletポートレットへのアクセスを提供するPortalToolsがあります。「実行時に設計」とは、ポートレットがアプリケーション・ページ上に配置されてページが実行された後で、ユーザーがポートレット・コンテンツを定義するという意味です。

OmniPortletポートレット・プロデューサにアクセスするには:

1. 「事前構成済ポートレット・プロデューサのデプロイ」の説明に従って、統合WebLogic Serverを起動し、「WebCenter Portalデプロイメント」ダイアログを開きます。

2. 「PortalToolsポートレット・プロデューサ」を選択し、「OK」をクリックして統合WebLogic Serverにデプロイします。
JDeveloperの「デプロイ」 - 「ログ」タブに、PortalToolsへようこそページを開くリンクが表示され、そのページから2つのPortalToolsのテスト・ページ(OmniPortletプロデューサ用とサンプル・ポートレット・プロデューサ用にそれぞれ1つずつ)を開くことができます。

- OmniPortletプロデューサではOmniPortletが提供されます。これは宣言型のポートレット構築ツールで、このツールを使用すると、XMLファイル、文字区切りの値ファイル(スプレッドシートなど)、Webサービス、データベースおよびWebページを含め、多様なデータ・ソースに対してポートレットを構築できます。OmniPortletユーザーは、データに対して事前に作成されたレイアウトを選択することもできます。事前に作成されたレイアウトには、表、ニュース、箇条書き、フォーム、チャートまたはHTMLが含まれます。OmniPortletの詳細は、『Oracle Fusion Middleware Oracle WebCenter Portalでのポータルの構築』のOmniPortletの使用に関する項を参照してください。

- サンプル・ポートレット・プロデューサには、OmniPortletで構築された、デモ専用のポートレットが含まれます。ポートレット・サンプルには、RSSスクロール・ポートレットやシンプルRSSポートレットなどがあります。サンプル・プロデューサはデモ用のため、実際のポートレット・インスタンスの作成には使用しないでください。

3. PortalToolsへようこそページで、OmniPortletプロデューサ・リンクまたはサンプル・ポートレット・プロデューサ・リンクをコピーし、OmniPortletをポータルに登録する際に使用します。ポートレット・プロデューサの登録の詳細は、『Oracle Fusion Middleware Oracle WebCenter Portalの管理』のOracle PDK-Javaポートレット・プロデューサの登録に関する項を参照してください。

2.3.3 WSRPのサンプルのポートレット・プロデューサおよびポートレット

統合WLSには、アプリケーションで使用できるサンプルのWSRPポートレット・プロデューサとポートレットが含まれています。

注意:

次のEARファイルに、サンプル・ポートレット用のソース・コードがあります。

JDEV_HOME/oracle_common/modules/oracle.wccore/wsrp-samples.ear

JDEV_HOMEは、マシンにJDeveloperをインストールした場所です。

WSRPサンプル・ポートレット・プロデューサにアクセスするには:

1. 「事前構成済ポートレット・プロデューサのデプロイ」の説明に従って、統合WebLogic Serverを起動し、「WebCenter Portalデプロイメント」ダイアログを開きます。

2. 「WSRPサンプル・ポートレット・プロデューサ」を選択し、「OK」をクリックして統合WebLogic Serverにデプロイします。
JDeveloperの「デプロイ」 - 「ログ」タブに、WSRPサンプル・プロデューサ・テスト・ページを開くリンクが表示されます。

3. WSRPプロデューサ(WSRP v1 WSDLまたはWSRP v2 WSDL)のWeb Services Description Language (WSDL) URLをコピーし、プロデューサを登録する際に使用します。ポートレット・プロデューサの登録の詳細は、『Oracle Fusion Middleware Oracle WebCenter Portalの管理』のポートレット・プロデューサの管理に関する項を参照してください。

2.3.4 PDK-Javaのサンプルのポートレット・プロデューサおよびポートレット

統合WLSには、PDK-Javaポートレットを介して使用可能な機能のタイプの把握に使用できるPDK-Javaのサンプルのポートレット・プロデューサおよびポートレットがあります。

PDK-Javaサンプル・ポートレット・プロデューサにアクセスするには:

1. 「事前構成済ポートレット・プロデューサのデプロイ」の説明に従って、統合WebLogic Serverを起動し、「WebCenter Portalデプロイメント」ダイアログを開きます。

2. 「PDK-Javaサンプル・ポートレット・プロデューサ」を選択し、「OK」をクリックして統合WebLogic ServerにPDK-Javaサンプル・プロデューサ・テスト・ページをデプロイします。
JDeveloperの「デプロイ」 - 「ログ」タブに、プロバイダ・テスト・ページを開くリンクが表示されます。

3. テスト・ページを開き、リンクをコピーしてプロデューサを登録する際に使用します。
ポートレット・プロデューサの登録の詳細は、『Oracle Fusion Middleware Oracle WebCenter Portalの管理』のポートレット・プロデューサの管理に関する項を参照してください。

第II部 WebCenter Portalアセットの使用

この部は、次の章で構成されています。

- WebCenter Portalアセットの概要

- Portalアセット・アプリケーション・テンプレートの使用

- レイアウトの開発

- ページ・スタイルの開発

- ページ・テンプレートの開発

- スキンの開発

- 視覚化テンプレートの開発

- コンテンツ・プレゼンタ表示テンプレートの開発

3 WebCenter Portalアセットの概要

この章では、WebCenter Portalで使用可能な様々なアセットと、それらのアセットの開発および拡張における開発者の役割の概要を説明します。

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

- WebCenter Portalアセットの使用について

- WebCenter Portalのアセットの開発

3.1 WebCenter Portalアセットの使用について

WebCenter Portalには、ユーザーがポータルで利用できる様々な組込みアセットが用意されています。これらの組込みアセットのコピーを特定のローカル要件に合せてWebCenter Portal内で変更できます。WebCenter Portalでの組込みアセットの変更の詳細は、『Oracle Fusion Middleware Oracle WebCenter Portalでのポータルの構築』のアセットの作成に関する項を参照してください。

ページ・スタイルやレイアウトなど、一部のアセットはWebCenter Portalで作成できません。このようなリソースはJDeveloperで作成し、WebCenter Portalにデプロイする必要があります。また、WebCenter Portalでは必要な機能をすべて追加できるわけではありません。

WebCenter Portalアセットは、JDeveloperでアセット・アプリケーションの作成または変更に使用できる3つのアプリケーション・テンプレートに基づいています。

- WebCenter Portalアセット・テンプレート – ページ・テンプレート、スキン、レイアウト、ページ・スタイル、コンテンツ・プレゼンタ・テンプレートおよび視覚化テンプレート用にアセットを作成または変更する場合に使用します。結果のアセット・アプリケーションには、Portalサーバー接続を介してWebCenter Portalにアセットをデプロイするために使用できるデフォルトのWebCenter Portalアセット・アーカイブ・デプロイメント・プロファイルが組み込まれています。このようなタイプのアセットに対するアセット・アプリケーションの作成の詳細は、「Portalアセット・アプリケーション・テンプレートの使用」を参照してください。

- 「WebCenterポートレット・プロデューサ・アプリケーション」テンプレート – JSR 286標準に基づいたポートレットの開発に使用します。詳細は、「ポートレットの概要」を参照してください。

- 「WebCenter Portalサーバー拡張機能」テンプレート – WebCenter Portalサーバーの拡張機能の開発に使用します。Portalサーバー用の拡張機能の開発の詳細は、「共有ライブラリの開発」を参照してください。

最終的に、WebCenter Portalのページレット・プロデューサを使用してページレットを作成できます。ページレット・プロデューサは、URLから直接またはWebCenter Portalの「共有アセット」タブからアクセスできるスタンドアロン・アプリケーションであることに注意してください。ページレット・プロデューサへのアクセスおよび使用の詳細は、「ページレットの概要」を参照してください。

3.2 WebCenter Portalのアセットの開発

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

- アセット開発のためのJDeveloper環境の設定

3.2.1 アセット開発のためのJDeveloper環境の設定

始める前に、次の手順を実行してください。

1. Oracle JDeveloper 12c (12.2.1.2.0)をダウンロードおよびインストールします。

詳細は、「Oracle JDeveloperのインストール」を参照してください。

2. WebCenter PortalのJDeveloperc (12.2.1.2.0)用拡張機能をインストールします。

詳細は、「JDeveloper用のWebCenter Portal拡張機能のインストール」を参照してください。

3. JDeveloperが開いている場合は、これを再起動します。

4 Portalアセット・アプリケーション・テンプレートの使用

この章では、「WebCenter Portalアセット・アプリケーション」テンプレートを使用して、WebCenter Portalで使用するためのアセットを作成、変更および公開する方法の概要を説明します。

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

- 「WebCenter Portalアセット・アプリケーション」テンプレートについて

- WebCenter Portalアセット・アプリケーションの作成

- WebCenter Portalアセットの作成および編集

- WebCenter Portalアセットの公開

- WebCenter Portalアセットのテスト

4.1 「WebCenter Portalアセット・アプリケーション」テンプレートについて

「WebCenter Portalアセット・アプリケーション」テンプレートを使用して、次のアセット・タイプに対するアセット・アプリケーションを作成できます。

- レイアウトは、列の番号や関係など、ページの基本的なプロパティを定義し、ページのページ・スタイルの一部です。詳細は、「レイアウトの開発」を参照してください。

- ページ・スタイルは、新しく作成するページのレイアウトを定義し、そのページでサポートされるコンテンツのタイプも決定できます。詳細は、「ページ・スタイルの開発」を参照してください。

- ページ・テンプレートは、ページ・コンテンツを囲むインタフェースを定義し、ページのグループ間での一貫したルック・アンド・フィールの適用に役立ちます。詳細は、「ページ・テンプレートの開発」を参照してください。

- スキンは、特定のポータルやアプリケーション全体の外観とルック・アンド・フィールの色やフォントなどを定義します。詳細は、「スキンの開発」を参照してください。

- 視覚化テンプレートは、実行時に作成されるタスク・フローのコンテンツ・レイアウトを決定します。視覚化テンプレートには、タスク・フローに追加されるデータ視覚化にバインドできるオブジェクトを含めることもできます。詳細は、「視覚化テンプレートの開発」を参照してください。

- コンテンツ・プレゼンタ表示テンプレートは、コンテンツを表示するためのテンプレートを定義します。詳細は、「コンテンツ・プレゼンタ表示テンプレートの開発」を参照してください。

結果のアセット・アプリケーションには、Portalサーバー接続を介してWebCenter Portalにアセットを公開するために使用できるデフォルトのWebCenter Portalアセット・アーカイブ・デプロイメント・プロファイルが組み込まれています。

4.2 WebCenter Portalアセット・アプリケーションの作成

JDeveloperでWebCenter Portalに公開できるWebCenter Portalアセットを作成または編集するには、「WebCenter Portalアセット・アプリケーション」テンプレートを使用したWebCenter Portalアセット・アプリケーションの作成から始めます。アプリケーションでは、作成または変更するアセット・タイプ(ページ・テンプレートなど)を定義します。次に、そのアプリケーション内で、アセットのプロパティを定義または編集し、最後に共有アセットまたはポータル固有のアセットとしてWebCenter Portalに公開できます。

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

- WebCenter Portalアセット・アプリケーションの作成方法

- アセット・アプリケーションのアーティファクトに関する必知事項

4.2.1 WebCenter Portalアセット・アプリケーションの作成方法

WebCenter Portalアセット・アプリケーションを作成するには、次のようにします。

1. ナビゲーション・ペインで、「新規アプリケーション」をクリック(または「新規ギャラリ」アイコンをクリックして「アプリケーション」を選択)します。

「新規ギャラリ」が表示されます(図4-1)。

図4-1 新規ギャラリ

2. 「WebCenter Portalアセット・アプリケーション」を選択して「OK」をクリックします。

WebCenter Portalアセット・アプリケーションの作成ウィザードの「アプリケーション名」ページが表示されます(図4-2)。

図4-2 WebCenter Portalアセット・アプリケーションの作成 - ステップ1

3. アプリケーション名を入力し、必要に応じてアプリケーションを格納するデフォルト以外のディレクトリを選択して「Next」をクリックします。

WebCenter Portalアセット・アプリケーションの作成ウィザードの「プロジェクト名」ページが表示されます(図4-3)。

図4-3 WebCenter Portalアセット・アプリケーションの作成 - ステップ2

4. プロジェクトのプロジェクト名を入力して「Next」をクリックします。

必要に応じて、プロジェクトを格納するディレクトリを変更できますが、プロジェクト名がパスの最後に自動的に追加されることに注意してください。WebCenter Portalアセット・アプリケーションの作成ウィザードのプロジェクトJava設定ページが表示されます(図4-4)。

図4-4 WebCenter Portalアセット・アプリケーションの作成 - ステップ3

5. 必要に応じて、アセット・プロジェクトについてプロジェクトJava設定のフィールドを更新し、「Next」をクリックします。

WebCenter Portalアセット・アプリケーションの作成ウィザードの「ポータル・アセット」ページが表示されます(図4-5)。

図4-5 WebCenter Portalアセット・アプリケーションの作成 - ステップ4

6. アセット・タイプ(たとえば「ページ・テンプレート」)を選択し、必要に応じて、表示名の変更(変更内容はディレクトリ・パスおよびファイル名に適用されることに注意)、アセット・プロジェクトの説明の追加、アセットが作成されるディレクトリの変更をそれぞれ行い、「終了」をクリックします。アセット・アプリケーションが作成されると、ナビゲーション・ペインに表示されます(図4-6)。

図4-6 新規作成されたPortalアセット・アプリケーション

4.2.2 アセット・アプリケーションのアーティファクトに関する必知事項

WebCenter Portalアセット・アプリケーションを作成する際に、名前付きワークスペースを1つ作成し、そのワークスペース内に名前付きプロジェクト(デフォルトではPortalAsset)を1つ作成します。WebCenter Portalアセット・アプリケーション・プロジェクトは、JDeveloperのWebアプリケーション用の標準に準拠します。ADF Fusion WebアプリケーションのViewControllerプロジェクトと同じ構造とすべての機能、さらに次のWebCenter Portal固有の機能を備えています。

- アセット公開 - アセット・アプリケーションをWebCenter Portalに公開できます。

- ページ・エディタ - Oracle Application Development Framework (Oracle ADF)内で、ページ・コンポーネントを使用し、ランタイム・カスタマイズを実行できます。

- カスタマイズ・コンポーネント - 同じく、Oracle Application Development Framework (Oracle ADF)内で、コンポーザ・コンポーネントを使用し、ランタイム・カスタマイズを実行できます。

アセット・プロジェクトは、Fusion ViewControllerのデフォルトJSPタグおよびJDeveloperライブラリと、一部のWebCenter Portal固有のJSPタブおよびJDeveloperライブラリを使用してシードされます。portalというデフォルトのパッケージが含まれていますが、この名前は、たとえばDataBindings.cpxのフォルダ名としても使用されます。

アセット・アプリケーションが作成されると、META-INF/assets/<assetName>の下にあるassetDef.xmlファイルを編集して、displayNameやDescriptionなどのアセット固有のプロパティの値を変更できます。

4.3 WebCenter Portalアセットの作成および編集

「WebCenter Portalアセット・アプリケーションの作成」の説明に従ってアセット・アプリケーションを作成したので、アセットのプロパティを定義または変更できるようになりました。表4-1に、様々なアセット・タイプの作成と変更に関する詳細の参照先を示します。アセットの作成に続いて、WebCenter Portalに公開します(「WebCenter Portalアセットの公開」を参照)が、ここではテストおよびデバッグができます(「WebCenter Portalアセットのテスト」を参照)。

表4-1 WebCenter Portalアセットの作成

アセット・タイプ

詳細の参照先

レイアウト

「レイアウトの開発」

ページ・スタイル

「ページ・スタイルの開発」

ページ・テンプレート

「ページ・テンプレートの開発」

スキン

「スキンの開発」

視覚化テンプレート

「視覚化テンプレートの開発」。

コンテンツ・プレゼンタ表示テンプレート

「コンテンツ・プレゼンタ表示テンプレートの開発」

4.4 WebCenter Portalアセットの公開

この項では、WebCenter PortalアセットをWebCenter Portalに共有アセットまたはポータル固有のアセットとして公開するための手順を説明します。

この項では、次の項目について説明します。

- WebCenter Portalサーバー接続の作成

- WebCenter Portalアセットの公開

4.4.1 WebCenter Portalサーバー接続の作成

アセットを共有アセットとしてWebCenter Portalに公開する、または特定のポータルに公開するには、ターゲットPortalサーバーへの接続を設定する必要があります。「WebCenterポータル・サーバー接続」ダイアログを使用してPortalサーバーへの接続を構成します。接続は、アプリケーション・リソースまたは他のアセット・アプリケーションで再利用できるIDE接続として設定できます。

WebCenter Portalサーバー接続を作成するには:

1. 次のいずれかを実行して「WebCenterポータル・サーバー接続」ダイアログを開きます。

- 「リソース・カタログ」で、「新規」をクリックして「IDE接続」→「WebCenter Portalサーバー」の順に選択します。

- 「アプリケーション・リソース」ペインで、「接続」を右クリックして「接続の作成」→「WebCenter Portalサーバー」の順に選択します。

「WebCenterポータル・サーバー接続」ダイアログが表示されます(図4-7)。

図4-7 「WebCenterポータル・サーバー接続」ダイアログ

2. 「接続の作成場所」オプションで、「アプリケーション・リソース」を選択して現在のアプリケーションに固有のPortalサーバー接続を構成するか、「IDE接続」を選択して他のアプリケーションに使用できるIDEリソースとして接続を保存します。

ヒント:

複数のアセットを作成して公開する場合は、「IDE接続」で接続を保存することをお薦めします。IDE接続をアセット・アプリケーションに追加するには、「リソース・カタログ」で「IDE接続」ノードからその接続を選択し、右クリックして「アプリケーションに追加」を選択するか、「アプリケーション」パネルの「アプリケーション・リソース」ノードの下にある「接続」ノードにドラッグします。

3. 設定しているPortalサーバー接続の名前を入力します。使用できるのは英数字のみであることに注意してください。

4. 接続先のPortalサーバーのホスト名およびポート割当てを入力します。ホストには、完全修飾ドメイン名localhostまたはサーバー名のいずれかを入力できます。

5. 接続先のPortalサーバーの有効なユーザー名およびパスワードを入力します。

6. 入力が完了したら、「接続のテスト」をクリックして接続が機能するか確認します。サーバーがオフラインのために接続のテストが失敗した場合、接続は設定されたままなので、サーバーが再度使用可能になると使用できます。

ヒント:

「サービス・パス」フィールドは編集可能ではありませんが、このフィールドを使用してブラウザにコピーして貼り付け、サーバー接続用のRESTエンドポイントを特定できます。

4.4.2 WebCenter Portalアセットの公開

WebCenter Portalアセットを作成したら、次の工程はアセットを公開してWebCenter Portalでテストします。

WebCenter Portalアセットを公開するには:

1. Portal Assetプロジェクト・ノードを右クリックして「デプロイ」を選択し、デプロイするデフォルトのデプロイメント・プロファイルを選択します(図4-8)。

図4-8 WebCenter Portalアセットのデプロイ

アセットのデプロイ・ウィザードが表示されます(図4-9)。

図4-9 アセットのデプロイウィザード - 「デプロイメント・アクション」ページ

2. 「デプロイメント・アクション」ページで、「WebCenter Portalにデプロイ」を選択して「Next」をクリックします。

「ポータル・サーバー」ページが表示されます(図4-10)。

図4-10 アセットのデプロイウィザード - 「ポータル・サーバー」ページ

3. Portalサーバー接続を構成した場合は、「共有アセット」またはアセットの公開先となるPortalサーバー接続に対する特定のポータルを選択します。Portalサーバー接続をまだ構成していない場合は、「追加」アイコンをクリックして、「WebCenter Portalサーバー接続の作成」で示しているようにPortalサーバー接続のフィールドを入力します。

4. 「終了」をクリックしてアセットをデプロイするか、「サマリー」をクリックしてデプロイする前にデプロイメントの選択内容のサマリーを表示します。

5. 「デプロイ - ログ」ペインを開き、デプロイのステータスを確認します。PortalサーバーでターゲットURLをクリックしても、直近にデプロイされたアセットを表示できます。

4.5 WebCenter Portalアセットのテスト

アセット・アプリケーションを作成または変更してアセットをWebCenter Portalに公開すると、続いてランタイム結果をテストできます。WebCenter Portalのランタイム内でアセットをテストする必要があることに注意してください。JDeveloperでアセットを変更し、Portalサーバーに再公開してWebCenter Portalで検証すると、繰り返すことができます。再公開には、PortalAssetプロジェクト・ノードの右クリック→「デプロイ」→直近に使用されたデプロイメント項目を使用するか、デフォルトの[Alt]+[Shift]+[P]ショートカット・キーを使用するかの2通りの方法があります。

注意:

ショートカット・キーの設定を変更または表示するには、「ツール」→「プリファレンス」→「ショートカット・キー」の順に移動し、"ポータル・アセットの再公開"またはその他のショートカット・キーを探します。

デバッグ・プロセスを支援するために、テスト環境またはステージング環境の管理者(または管理者権限を持つユーザー)に、ランタイムに表示されるようにエラー・メッセージおよびコール元のスタックを構成するよう依頼できます。詳細は、『Oracle Fusion Middleware Oracle WebCenter Portalの管理』のWebCenter Portalのエラーメッセージの表示と構成に関する項を参照してください。

5 レイアウトの開発

この章では、ページ・レイアウトを作成または変更して、WebCenter Portalに共有アセットまたはポータル固有のアセットとして公開する方法について説明します。

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

- レイアウトの開発について

- レイアウトの作成

- レイアウトの編集

- レイアウトの公開

5.1 レイアウトの開発について

新しいページの作成時に、そのページのページ・スタイルを選択します。あらゆるページ・スタイルにはデフォルト・レイアウトがあり、新しいページに継承されます。WebCenter Portalには、組込みレイアウトがいくつか用意されており、「共有アセット」ページまたは「アセット」ページで選択できます。

ページのレイアウト(ページ・スタイル)を変更する場合は、どのページにも新しい既存のレイアウトを選択できますが、カスタム・レイアウトを作成して共有アセットまたはポータル固有のアセットとして公開することもできます。そのようにするには、WebCenter Portalで組込みレイアウトのコピーを作成して編集するか、JDeveloperでWebCenter Portalアセット・アプリケーションを作成し、組込みレイアウトをコピーして貼り付けて変更します。

この章では、WebCenter Portalアセット・アプリケーションでページ・レイアウトを作成または変更して、WebCenter Portalに共有アセットまたはポータル固有のアセットとして公開する方法について説明します。WebCenter Portalでのレイアウトの変更の詳細は、『Oracle Fusion Middleware Oracle WebCenter Portalでのポータルの構築』のレイアウトの使用に関する項を参照してください。

5.2 レイアウトの作成

この項では、ページ・レイアウト用のWebCenter Portalアセット・アプリケーションの作成方法と、それと一緒に作成されるアーティファクトについて説明します。

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

- レイアウトの作成方法

- レイアウトのアーティファクトに関する必知事項

5.2.1 レイアウトの作成方法

この項では、新しいレイアウト用にWebCenter Portalアセット・アプリケーションを作成する方法について説明します。アセット・アプリケーションが関連するアーティファクトとともに作成されると、続いて「レイアウトの編集」の説明に従ってレイアウトを変更できます。

注意:

Oracleは、イメージやアイコンなどのアセット関連のアーティファクトをコンテンツ・サーバーに保管し、アセット・アーティファクト専用のフォルダ構造をコンテンツ・サーバー上で作成することをお薦めします。これにより、必要な場合にコンテンツを容易に特定し、移動できます。

カスタム・レイアウトを作成するには:

1. 「アセット・タイプ」で「レイアウト」を指定して、アセット用にアセット・アプリケーションを作成します。

WebCenter Portalアセット・アプリケーションの作成の詳細は、「WebCenter Portalアセット・アプリケーションの作成」を参照してください。レイアウト用にアセット・アプリケーションを作成する際に作成されるアーティファクトの詳細は、「レイアウトのアーティファクトに関する必知事項」を参照してください。

2. アプリケーション・ナビゲータで、新規作成したレイアウトのCSSファイルおよびJSPXファイルを右クリックし、「開く」を選択します。既存のWebCenter Portalレイアウトを起点として使用している場合は、JDeveloperでソースを対応するファイルにコピーして貼り付けます(既存のアセットを起点として使用する方法の詳細は、『Oracle Fusion Middleware Oracle WebCenter Portalでのポータルの構築』のアセットのコピーに関する項を参照)。

3. 続いて「レイアウトの編集」の説明に従ってレイアウトを追加または変更します。

5.2.2 レイアウトのアーティファクトに関する必知事項

レイアウト・アセット・アプリケーションを作成すると、次のアーティファクトとともにデフォルト・レイアウトが生成されます。

- CSSファイル(Layout1.cssなど)

- JSFファイル(Layout1.jspxなど)

どちらのファイルも図5-1に示すようにナビゲーション・バーに表示されます。

図5-1 レイアウト・アセット・アプリケーションのアーティファクト

次の各例は、WebCenter Portalの「共有アセット」ページから組込みレイアウト「3列」用のJSPXファイルと、対応するCSSファイルを示しています。

3列レイアウトのJSPXファイルの例

<?xml version='1.0' encoding='UTF-8'?>
<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" version="2.1" xmlns:f="http://java.sun.com/jsf/core" xmlns:h="http://java.sun.com/jsf/html" xmlns:af="http://xmlns.oracle.com/adf/faces/rich">
<jsp:directive.page contentType="text/html;charset=UTF-8"/>
<af:componentDef var="attrs" componentVar="comp">
<af:xmlContent>
<component xmlns="http://xmlns.oracle.com/adf/faces/rich/component">
<display-name>ThreeColumnFlow</display-name>
<facet>
<facet-name>area1</facet-name>
</facet>
<facet>
<facet-name>area2</facet-name>
</facet>
<facet>
<facet-name>area3</facet-name>
</facet>
</component>
</af:xmlContent>
<af:group id="threeColumnFlow">
<af:resource type="css" source="${pageDocBean.layoutCssPath}"/>
<div xmlns="http://www.w3.org/1999/xhtml" class="area1">
<af:facetRef facetName="area1"/>
</div>
<div xmlns="http://www.w3.org/1999/xhtml" class="area2">
<af:facetRef facetName="area2"/>
</div>
<div xmlns="http://www.w3.org/1999/xhtml" class="area3">
<af:facetRef facetName="area3"/>
</div>
</af:group>
</af:componentDef>
</jsp:root>

3列レイアウトのCSSファイルの例

/* one column */
.area1 {
}

.area2 {
}

.area3 {
}

/* two column with area3 under area2 */
@media only screen and (min-width : 481px) {
.area1 {
position:absolute;
left: 0px;
width:50%;
}
.area2 {
position:relative;
left:50%;
width:50%;
}
.area3 {
position: relative;
left: 50%;
width:50%;
}
}

/* three column */
@media only screen and (min-width: 769px) {
.area1 {
position: static;
left: auto;
float:left;
width:33%;
}

.area2 {
position: static;
left: auto;
float:left;
width:34%;
}

.area3 {
position: static;
left: auto;
float:left;
width:33%;
}
}

5.3 レイアウトの編集

「レイアウトの作成」の説明に従ってレイアウト用のアセット・アプリケーションを作成したら、続いてCSSファイルおよびJSPXファイルを変更します。

注意:

Oracleは、イメージやアイコンなどのアセット関連のアーティファクトをコンテンツ・サーバーに保管し、アセット・アーティファクト専用のフォルダ構造をコンテンツ・サーバー上で作成することをお薦めします。これにより、必要な場合にコンテンツを容易に特定し、移動できます。

レイアウトを編集するには:

1. アプリケーション・ナビゲータで、レイアウトのCSSファイルおよびJSPXファイルを右クリックし、「開く」を選択します。

2. 既存のWebCenter Portalレイアウト(つまり、アセット・アプリケーションの作成時にデフォルトで作成されたもの以外のレイアウト)を起点として使用している場合は、JDeveloperでCSSファイルおよびJSPXファイルのソースを対応するファイルにコピーして貼り付けます(『Oracle Fusion Middleware Oracle WebCenter Portalでのポータルの構築』のアセットのコピーに関する項を参照)。

3. レイアウトのソース・コードで、適宜変更します。

4. CSSファイルおよびJSPXファイルを保存します。

5. 「レイアウトの公開」に示すように、レイアウトを公開してテストします。

5.4 レイアウトの公開

WebCenter Portalアセット・アプリケーションを作成し、レイアウトに必要な変更を加えたら、次の工程はレイアウトを公開してWebCenter Portalでテストします。レイアウトをWebCenter Portalに共有アセットまたはポータル固有のアセットとして公開する方法の詳細は、「WebCenter Portalアセットの公開」を参照してください。

6 ページ・スタイルの開発

この章では、Oracle JDeveloperを使用して、WebCenter Portalで使用するためのページ・スタイルを作成、編集および公開する方法について説明します。

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

- ページ・スタイルの開発について

- ページ・スタイルの作成のベスト・プラクティス

- ページ・スタイルの作成

- ページ・スタイルの編集

- ページ・スタイルの公開

6.1 ページ・スタイルの開発について

ページ・スタイルは、実行時に作成するページに使用するJSPXページです。ページ・スタイルは、新規作成されたページのレイアウトを記述し、ページでサポートされるコンテンツ・タイプを指示する場合もあります。

ユーザーがページ・スタイルを使用してページを作成する場合、レイアウトと初期コンテンツが、ページ・スタイルから新規作成されたページにコピーされます。ページ・テンプレートとは異なり、ページ・スタイルは参照ベースではありません。つまり、ページ・スタイルを変更しても、そのスタイルを使用しているページでは変更内容が継承されません。

通常、ページ・スタイルには、指定したページの有用性と外観を強化するコンポーネントが含まれます。これらのコンポーネントには、インプレースHTMLテキスト・エディタ、イメージ、レイアウト・ボックス、ハイパーリンクなどが含まれます。コンテンツ・コントリビュータを使用すると、ページにコンテンツをさらに移入できます。図6-1は、ページ・スタイルに基づいたポータル・ページのサンプルを示しています。

図6-1 ページ・スタイルを使用したページのサンプル

実行時にページを作成するために使用するページ・スタイルは、JDeveloperまたはWebCenter Portalの「共有アセット」ページ(または個々のポータルの「アセット」ページ)から作成できます。実行時に、ユーザーは使用可能なページ・スタイルに基づいてページを作成します。「ページの追加」を選択すると、図6-2に示すように、「スタイルの選択」ダイアログに事前に定義された一連のスタイルが表示されます。ユーザーはスタイルを選択し、そのスタイルに基づいてページを作成します。レイアウトが新規ページにすでに配置されているため、ユーザーはページの様々な領域にコンテンツを追加するだけです。

図6-2 「スタイルの選択」ダイアログ

6.2 ページ・スタイルの作成のベスト・プラクティス

WebCenter Portalアセットとして公開するページ・スタイルを開発する際には、次の前提条件およびガイドラインが役立ちます。

- ページ・スタイルがページ・テンプレートに基づいている場合は、ページ・スタイルのJSF (.jspx)ファイルの設計時に、contentファセットまたはページ・テンプレートで定義されているその他のファセットを追加して、ページ・コンテンツが含まれるようにします。

- ページをカスタマイズ可能にするには、コンテンツ・ファセット内にPage Customizableコンポーネントを追加します。Page Customizableには、子であるpanelCustomizableコンポーネントがデフォルトで含まれているため、ユーザーは実行時にコンテンツをページに追加できます。

- ページ・スタイルに使用するページ・テンプレートを動的に選択できるようにするには、ページ・スタイルのJSF (.jspx)ファイルで、そのページ・テンプレートの定義がページ・スタイルのページ定義の中に含まれていることを、次のように指定します。

<af:pageTemplate value="#{bindings.pageTemplateBinding.templateModel}" id="T">

その後、次のようにページ・スタイルのページ定義の中でEL値を指定して、ページ・テンプレートの名前をデフォルト・ページ・テンプレート設定から取得できます。

<page viewId="#{preferenceBean.defaultPageTemplateViewId}"
id="pageTemplateBinding" Refresh="ifNeeded"/>

実行時に、適切な権限を持ったユーザーが、実行時管理コンソールで新しいデフォルト・ページ・テンプレートを選択することにより、別のページ・テンプレートに切り替えることができます。詳細は、『Oracle Fusion Middleware Oracle WebCenter Portalの管理』のデフォルト・ページ・テンプレートの選択に関する項を参照してください。

- 次の例に示すように、使用するページ・テンプレートを制御するマネージドBeanを作成できます。
例: ページ・テンプレートを制御するためのマネージドBean

public class siteTemplatesManager {
final private String templateA ="/templateA.jspx";
final private String templateB ="/templateB.jspx";
private String currentSiteTemplateViewId;

public siteTemplatesManager() {
super();
currentSiteTemplateViewId =templateA;
}
public String gettemplateViewId() {
return currentSiteTemplateViewId;
}
public void settemplateAViewId(ActionEvent ae) {
currentSiteTemplateViewId =templateA;
}
public void settemplateBViewId(ActionEvent ae) {
currentSiteTemplateViewId =templateB;
}
}

6.3 ページ・スタイルの作成

この項では、新しいページ・スタイル用にWebCenter Portalアセット・アプリケーションを作成する方法について説明します。アセット・アプリケーションが関連するアーティファクトとともに作成されると、続いて「ページ・スタイルの編集」の説明に従ってページ・スタイルのJSPXファイルを変更できます。

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

- ページ・スタイルを作成する方法

- ページ・スタイルのアーティファクトに関する必知事項

6.3.1 ページ・スタイルを作成する方法

この項では、新しいページ・スタイル用にWebCenter Portalアセット・アプリケーションを作成する方法について説明します。アセット・アプリケーションが関連するアーティファクトとともに作成されると、続いて「ページ・スタイルの編集」の説明に従ってページ・スタイルのJSPXファイルを変更できます。

カスタム・ページ・スタイルを作成するには:

1. 「アセット・タイプ」で「ページ・スタイル」を選択して、アセット用にWebCenter Portalアセット・アプリケーションを作成します。

WebCenter Portalアセット・アプリケーションの作成の詳細は、「WebCenter Portalアセット・アプリケーションの作成」を参照してください。ページ・スタイル用にアセット・アプリケーションを作成する際に作成されるアーティファクトの詳細は、「ページ・スタイルのアーティファクトに関する必知事項」を参照してください。

2. アプリケーション・ナビゲータで、新規作成したページ・スタイルのJSPXファイルを右クリックし、「開く」を選択します(図6-3)。

図6-3 ページ・スタイルのJSPXファイル

3. 続いて「ページ・スタイルの編集」に示すようにページ・スタイルを追加または変更します。

6.3.2 ページ・スタイルのアーティファクトに関する必知事項

ページ・スタイル・アセット・アプリケーションを作成すると、次のアーティファクトとともにデフォルト・ページ・スタイルが生成されます。

- ページ・スタイルのページ要素が含まれるJSPファイル(PageStyle1.jspxなど)

- ページ・スタイルの対応するページ定義ファイル(PageStyle1PageDef.xmlなど)

どちらのファイルも図6-4に示すようにナビゲーション・バーに表示されます。

図6-4 ページ・スタイル・アセット・アプリケーションのアーティファクト

次の各例は、フローして3列を示すように設計された基本ページを作成する、組込みページ・スタイル「3列」のJSPXファイルおよび関連するページ定義ファイルのページ・スタイル・コードを示しています。

「3列」ページ・スタイルのJSPXファイル

<?xml version='1.0' encoding='UTF-8'?>
<jsp:root version="2.1" xmlns:af="http://xmlns.oracle.com/adf/faces/rich" xmlns:cust="http://xmlns.oracle.com/adf/faces/customizable" xmlns:f="http://java.sun.com/jsf/core" xmlns:jsp="http://java.sun.com/JSP/Page" xmlns:trh="http://myfaces.apache.org/trinidad/html">
<jsp:directive.page deferredSyntaxAllowedAsLiteral="true"/>
<jsp:directive.page contentType="text/html;charset=utf-8"/>
<f:view>
<af:document id="docrt" title="#{pageDocBean.title}">
<f:facet name="metaContainer">
<trh:meta content="#{bindings.SEO_KEYWORDS}" name="keywords"/>
</f:facet>
<af:form id="f1" usesUpload="true">
<af:pageTemplate id="T" value="#{bindings.shellTemplateBinding.templateModel}">
<f:facet name="content">
<af:panelGroupLayout id="pgl1" inlineStyle="replace_with_inline_style" layout="scroll" styleClass="replace_with_scheme_name">
<af:declarativeComponent id="dclay" viewId="#{pageDocBean.layoutViewId}">
<f:facet name="area1">
<cust:panelCustomizable id="pcarea1" layout="auto"/>
</f:facet>
<f:facet name="area2">
<cust:panelCustomizable id="pcarea2" layout="auto"/>
</f:facet>
<f:facet name="area3">
<cust:panelCustomizable id="pcarea3" layout="auto"/>
</f:facet>
</af:declarativeComponent>
</af:panelGroupLayout>
</f:facet>
</af:pageTemplate>
</af:form>
</af:document>
</f:view>
</jsp:root>

例: 「3列」ページ・スタイルのページ定義ファイル

<?xml version='1.0' encoding='UTF-8'?>
<pageDefinition Package="oracle.webcenter.siteresources.scopedMD.s8bba98ff_4cbb_40b8_beee_296c916a23ed.pageStyle.gsr7ae8ef60_d5b9_4411_becb_11239bf4bb63" id="TemplateThreeColumnPageDef" version="11.1.1.41.30" xmlns="http://xmlns.oracle.com/adfm/uimodel">
<parameters>
<parameter id="page_layout" value="gsr22bbc98b_834b_425d_8d48_c136d0956ec8"/>
<parameter id="page_title" value="Three Column"/>
</parameters>
<executables>
<page Refresh="ifNeeded" id="shellTemplateBinding" viewId="#{WCAppContext.application.siteTemplatesManager.currentSiteTemplateViewId}"/>
</executables>
<bindings/>
<permission permissionClass="oracle.webcenter.page.model.security.CustomPagePermission" target="ps_targetusage" xmlns="http://xmlns.oracle.com/adf/security">
<privilege-map operation="administer" privilege="manage"/>
<privilege-map operation="create" privilege="create"/>
<privilege-map operation="delete" privilege="delete"/>
<privilege-map operation="edit" privilege="update"/>
<privilege-map operation="personalize" privilege="personalize"/>
<privilege-map operation="view" privilege="view"/>
</permission>
</pageDefinition>

6.4 ページ・スタイルの編集

ページ・スタイル用にWebCenter Portalアセット・アプリケーションを作成したら、続いて新規作成したページ・スタイル・ファイルにコンテンツを追加できます。

注意:

WebCenter Portalで既存または組込みのページ・スタイルをコピーし、JDeveloperでそのページ・スタイルのJSPXファイルに貼り付けることをお薦めします。次に、このページ・スタイルを新しいページ・スタイルの起点として使用し、変更が終了したらWebCenter Portalに公開します。WebCenter Portalでのアセットのコピー方法の詳細は、『Oracle Fusion Middleware Oracle WebCenter Portalでのポータルの構築』のアセットのコピーに関する項を参照してください。

ページ・スタイルを編集するには:

1. アプリケーション・ナビゲータで、ページ・スタイルのJSPXファイルを右クリックし、「開く」を選択します(図6-5)。

図6-5 ページ・スタイルのJSPXファイル

2. ビジュアル・エディタで、ページを編集するときと同じ方法でページ・スタイルのコンテンツのレイアウトに変更を加えます。
ページ・スタイルのコンテンツを定義する場合のベスト・プラクティスの詳細は、「ページ・スタイルの作成のベスト・プラクティス」を参照してください。ページ・スタイル・アセット・アプリケーション用に作成されるファイルの詳細は、「ページ・スタイルのアーティファクトに関する必知事項」を参照してください。

3. 変更を保存します。

4. 「ページ・スタイルの公開」に示すように、ページ・スタイルを公開してテストします。

6.5 ページ・スタイルの公開

WebCenter Portalアセット・アプリケーションを作成し、ページ・スタイルのJSPXファイルを編集したら、次の工程はページ・スタイルを公開してWebCenter Portalでテストします。アセットを共有アセットとしてWebCenter Portalに公開する、またはポータル・アセットとして特定のポータルに公開する方法の詳細は、「WebCenter Portalアセットの公開」を参照してください。

7 ページ・テンプレートの開発

この章では、Oracle JDeveloperを使用して、WebCenter Portalで使用するためのページ・テンプレートを作成、編集および公開する方法について説明します。

ページ・テンプレートでは、ポータル・ページでの共通領域の構造が提供されます。Oracle JDeveloperを使用すると、WebCenter Portalで表示されるポータル・ページのページ・テンプレートを設計および開発できます。

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

- ページ・テンプレートの開発の概要

- ページ・テンプレートの開発のベスト・プラクティス

- ページ・テンプレートの作成

- ページ・テンプレートの編集

- ページ・テンプレートの公開

- ページ・テンプレートのチュートリアルと例

7.1 ページ・テンプレートの開発の概要

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

- ページ・テンプレートの理解

- ページ・テンプレートの構造の理解

- ページ・テンプレートのレイアウトの理解

- ページ・テンプレートのレイアウト・コンポーネントの理解

7.1.1 ページ・テンプレートの理解

ページ・テンプレートでは、ユーザーの画面における個々のページおよびページ・グループの表示方法を定義し、ポータル・ページの構造とレイアウトの点における一貫性を確保します。

つまり、ページ・テンプレートを変更すると、そのテンプレートを参照するすべてのページで自動的にその変更が継承されます。

注意:

ページ・テンプレートの一般的な情報は、『Oracle Fusion Middleware Oracle ADF FacesによるWebユーザー・インタフェースの開発』のページ・テンプレートの使用方法に関する項を参照してください。

Oracle WebCenter Portalで使用するためのページ・テンプレートの作成に関するヒントおよびベスト・プラクティスは、「ページ・テンプレートの開発のベスト・プラクティス」を参照してください。Oracle JDeveloperを使用して、WebCenter Portalで使用するためのページ・テンプレートを開発することをお薦めします。ページ・テンプレートはWebCenter Portalで開発することもできますが、編集機能が制限されます。

開発が完了したページ・テンプレートは、共有アセットとしてWebCenter Portalに直接公開するか、特定のポータルに公開してすぐに使用したり、テストしたりできます。詳細は、「ページ・テンプレートの公開」を参照してください。

7.1.2 ページ・テンプレートの構造の理解

ページ・テンプレートの標準的な要素は次のとおりです。

- ヘッダー、コンテンツ領域(各ページで異なる)およびフッター。ヘッダーとフッターには、一般にブランド固有の要素が含まれます。たとえば、ヘッダーには通常、ロゴや、場合によってはスローガンが含まれます。フッターには通常、連絡先および著作権情報が含まれます。

- ナビゲーション。ページ・テンプレートは、ポータルのナビゲーションをいくつかの方法で公開できます。たとえば、モバイル・デバイスの場合、ポータル・ナビゲーションは、ポップアップまたはスライド・イン/アウトとして表示されることがあります。デスクトップ・ブラウザの場合、通常、ポータル・ナビゲーションは、ページの上部(横並び)またはページの横側(縦並び)に表示されます。

- ブランド要素。たとえば、ページ・テンプレートには、会社のロゴ、スローガン、または著作権に関するメッセージが含まれる場合があります。

- リンクとアクション。たとえば、ログイン/ログアウトのリンク、ドロップダウン・メニュー、またはグローバル・リンク(Web管理者へのメール・メッセージの送信やプライバシ情報の表示などへのリンク)。

- 条件要素。たとえば、ページの一部の要素は、ユーザーがパブリック・ユーザーか認証されたユーザーかによって、あるいは、ユーザーのロールおよび権限によってそれぞれ異なります。

図7-1に、これらの要素を示すページ・テンプレートに基づいたサンプル・アプリケーションを示します。

図7-1 ページ・テンプレートを使用するサンプル・ポータル

7.1.3 ページ・テンプレートのレイアウトの理解

ページ・テンプレートの設計で最も重要な側面の1つは、テンプレートとページ・コンテンツの両方の要素でコンポーネントをどのようにレイアウトするかという点です。

基本的に次の2つの方針があります。

- 最も一般的なレイアウトは、フロー・レイアウトです。コンポーネントは、隣合せまたは縦並びで配置され、元々のサイズで表示されます。ページのコンテンツがブラウザ・ウィンドウのサイズを超えた場合、ブラウザのページにはスクロール・バーが表示されます。

- ストレッチ・レイアウトは、ページ・コンテンツが大きな領域を占める場合や、ブラウザ・ウィンドウのサイズに応じてページ・コンテンツを拡大および縮小する場合に適している可能性があります。コンポーネントは、ページ上の使用可能なスペースいっぱいに表示されるようストレッチされます。たとえば、ストレッチ・レイアウトは、ページに表またはグラフが含まれていて、そのサイズにかかわらずコンテンツ領域全体にこれを表示する場合に適しています。また、編集領域が含まれるページで、コンテンツ領域と同じ高さと幅でエディタを使用する必要がある場合にも適しています。このレイアウトにはページ・コンテンツ用の領域があり、ブラウザ・ウィンドウのサイズ内にコンテンツが収まらない場合は、ページ上の領域にスクロール・バーが追加されます。つまり、個々のコンポーネントにスクロール・バーが表示されます(1ページ上に複数のスクロール・バーが表示されることがあります)。
ストレッチにより、表示可能な領域を最大限使用できるようになります。タブ、アコーディオン、メニュー、ポップアップを使用して、表示可能な領域を拡張できます。ページにスクロール・バーが追加されると、コンテンツ領域がスクロールされる間、ナビゲーション領域、ページ・ヘッダーおよびページ・フッターはそのままビューに残ります。

ほとんどのWebサイトではフロー・レイアウトが使用されており、ユーザーが親しみやすく感じる見込みが高いため、フロー・レイアウトを使用することもできます。ただし、種類が豊富なダッシュボードとアプリケーション向けの場合やデスクトップ操作を模倣する必要がある場合には、ストレッチ・レイアウトが優れています。同一ページでフロー・レイアウトとストレッチ・レイアウトを結合することも可能です。

垂直方向の動作

レイアウトがフローであるかまたはストレッチであるかに応じて、次に示すようにページの垂直方向の動作が異なります。

- フロー・レイアウト:

- ヘッダーまたはフッターは常に表示されているわけではありません

- ページの高さはページのコンテンツに基づいて計算されます

- コンテンツが垂直方向にストレッチされることはありません

- ブラウザにスクロール・バーが表示されることもあります

- ストレッチ・レイアウト:

- ヘッダーおよびフッターは常に表示されます

- ページの高さはブラウザ・ウィンドウにより決まります

- コンテンツは垂直方向にストレッチされます

- コンテンツ領域にスクロール・バーが表示されることがあります。

水平方向の動作

レイアウトがフローであるかまたはストレッチであるかに応じて、次に示すようにページの水平方向の動作が異なります。

- フロー・レイアウト:

- ページにサイド・バー(左側のナビゲーションなど)がある場合でも、サイド・バーは常に表示されているわけではありません

- ページの幅はコンポーネントに基づいて計算されます

- 一部のコンポーネントは、既存スペースを満たすようにストレッチされることがあります

- ブラウザにスクロール・バーが表示されることもあります

- ストレッチ・レイアウト:

- ページにサイド・バー(左側のナビゲーションなど)がある場合、サイド・バーは常に表示されています

- ページの幅はブラウザ・ウィンドウにより決まります

- コンテンツは水平方向にストレッチされます

- コンテンツにスクロール・バーが表示されることもあります。

7.1.4 ページ・テンプレートのレイアウト・コンポーネントの理解

ページ・テンプレートの基礎となる構造は、Oracle Application Development Framework (ADF)のレイアウト・コンポーネントによって指定されます。

ページ・テンプレートで使用するのに適したレイアウトを決定したら(「ページ・テンプレートのレイアウトの理解」を参照)、ADFレイアウト・コンポーネントを使用してページ・テンプレートを作成します。これは複雑なタスクで、必要な構造とレイアウトを実現するためのADFコンポーネントと、採用するベスト・プラクティス(「ページ・テンプレートの開発のベスト・プラクティス」を参照)について理解する必要があります。

注意:

- レイアウト・コンポーネントごとの外観の詳細は、ADF Facesリッチ・クライアントの次のデモ・オンライン・ツールを参照してください。
http://jdevadf.oracle.com/adf-richclient-demo/faces/visualDesigns/index.jspx

デモ・ツールで、「ソースの表示」メニューから「ページ」または「ページ・テンプレート」を選択し、ページ構造を実現するために使用されているレイアウト・コンポーネントと属性を確認します。

- ページ・テンプレートのチュートリアルと例

図7-2および図7-3に、ページ・テンプレートのレイアウトで使用されている一般的なADFコンポーネントと、ページ・テンプレートのコード、さらに生成されたレイアウトを示します。

- af:panelGridLayout—行(gridRow)およびセル(gridCell)を使用して構造化レイアウトを定義する、汎用性のあるレイアウト・コンポーネント。このコンポーネントは、小規模なクライアント側フットプリントを提供すると同時にレイアウト機能において非常に柔軟性があるため、優先される一般的なレイアウト・コンポーネントです。また、このコンポーネントを使用すると、行および列の形式で必要なレイアウトに一致するように、ページ領域を無理なく定義できます。panelGridLayoutを指定すると、固定または可変の列幅(%またはピクセル)を簡単に指定できますが、他のレイアウト・コンポーネントを使用した場合ほど簡単には実行できません。図7-2を参照してください。

- af:panelGroupLayout—水平、垂直、またはスクロール可能な構造に配置されたコンポーネントのフロー・シリーズ。通常、panelGroupLayoutは、フロー・レイアウト、およびストレッチ・レイアウト内部のフロー・コンテンツとともに使用されます。また、コンテンツが使用可能なスペースに適合していない場合は、垂直および水平方向のスクロール・バーを表示します。図7-2および図7-3を参照してください。

- af:panelSplitter—ユーザーによる変更が可能な2つのセクションに分割されたストレッチ・ボックス。図7-3を参照してください。

図7-2 ページ・テンプレートのコードと生成されたストレッチ・レイアウト: 例1

図7-3 ページ・テンプレートのコードと生成されたストレッチ・レイアウト: 例2

7.2 ページ・テンプレートの開発のベスト・プラクティス

ページ・テンプレートはポータルのすべてのページに存在するため、ページ・テンプレートを設計する際は、そのパフォーマンスを最適化してベスト・プラクティスに適合するように注意深く計画を立てる必要があります。

この項では、WebCenter Portal用(共有アセット)または特定のポータル用にページ・テンプレートを開発する際のヒントについて説明します。

注意:

JDeveloperを使用して、ポータル用のページ・テンプレートを開発することをお薦めします。ページ・テンプレートはOracle WebCenter Portalで開発することもできますが、編集機能が制限されます。

開発が完了したページ・テンプレートは、共有アセットとしてWebCenter Portalに公開するか、特定のポータルに公開してすぐに使用したり、テストしたりできます。または、ページ・テンプレートをファイルにエクスポートして、後でWebCenter Portalにアップロードできます。

詳細は、「ページ・テンプレートの作成」、「「ページ・テンプレートの編集」」および「ページ・テンプレートの公開」を参照してください。

表7-1に、ページ・テンプレートから最良の結果を実現するための考慮事項およびガイダンスのクイック・リファレンス・サマリーを示します。

表7-1 ページ・テンプレートのベスト・プラクティスのサマリー

考慮事項

ベスト・プラクティス

パフォーマンス

この項の内容はすべてページ・テンプレートのパフォーマンスを向上させることを目的としており、ベスト・プラクティス全体にわたって留意する必要がある一般的なヒントがいくつかあります。

- 埋込みタスク・フローの使用は最小限に留めます。たとえば、WebCenter Portalに組み込まれている設定なしで使用できる最新のページ・テンプレートを参照してください(詳細は、『Oracle Fusion Middleware Oracle WebCenter Portalでのポータルの構築』のWebCenter Portalの組込みページ・テンプレートの概要に関する項を参照)。

- panelGridLayoutを使用して、ADFレイアウト・コンポーネントの使用を最小限にし、ページ・テンプレート構造を実装します。ADFレイアウト・コンポーネントの数が少なければ、スキンの適用が簡単になります。

- 装飾を目的とするイメージは使用しないでください(角が丸められた四角形など)。イメージではなく、CSSの使用を検討してください。

- 可能な場合は、メニューやダイアログなどのADFコンポーネントのロードは先に延ばします。この処理は、contentDeliveryやchildCreationなどのADFを使用して制御できます。

- ページ・テンプレートのレンダリングの際に余分な時間を要する要素は使用せず、かわりに処理時間が短くて済む要素を使用するようにしてください。

レイアウト

ページ・テンプレートの設計で最も重要な側面の1つは、テンプレートとページ・コンテンツの両方の要素でコンポーネントをどのようにレイアウトするかという点です。ページ・テンプレートでは、フロー・レイアウトまたはストレッチ・レイアウトが使用できます。これら2つの戦略の詳細は、「ページ・テンプレートのレイアウトの理解」を参照してください。

ページ・テンプレート開発者は、コンテンツ・ファセットをページのストレッチ領域またはフロー領域のいずれに配置するかを制御できます。したがって、ページ・コンテンツは、レイアウト戦略を考慮に入れて作成する必要があります。

ページ・テンプレートに関する最適な戦略を決定したら、選択したレイアウトを作成する際のヒントについて次の各項を参照してください。

- ストレッチ・レイアウトの作成のベスト・プラクティス

- フロー・レイアウトの作成のベスト・プラクティス

ナビゲーション

ページ・テンプレートは、ポータルのナビゲーションをいくつかの方法で公開できます。たとえば、デスクトップ・ブラウザの場合、通常、ポータル・ナビゲーションは、ページの上部(横並び)またはページの横側(縦並び)に表示されます。

- トップ・ナビゲーション・ページ・テンプレートは、ヘッダー領域にポータル・ナビゲーションを公開します。トップ・ナビゲーションの場合、ページの水平方向の領域を有効に使用できるため、ポータル・ナビゲーションのトップ・レベル・ページが7レベル以下の場合は、この方式をお薦めします。このページ・テンプレートの設計には、通常、ヘッダー、ページおよびフッターのセクションが含まれ、フロー・レイアウトが必要なサイトの開始点に適しています。

- サイド・ナビゲーション・ページ・テンプレートは、ページの左側のサイドバーにポータル・ナビゲーションを公開します。サイド・ナビゲーションは垂直方向に表示され、ナビゲーション・アイテムのリストが長くても対応できるため、ポータル・ナビゲーションのトップ・レベル・ページが7レベルを超える場合は、この方式をお薦めします。ナビゲーション・モデルが複雑な場合は、サイド・ナビゲーション・テンプレートを選択します。

デバイスごとに、異なるナビゲーションを公開できます。たとえば、モバイル・デバイスに対して最適化されたページ・テンプレートの場合、ナビゲーションは、ポップアップまたはスライド・イン/アウトとして表示できます。

スキン

各ページ・テンプレートは、スキンとともに機能して、ポータル内のページのルック・アンド・フィール全体を決定します。ページ・テンプレートはページ上のコンポーネントの構造を制御し、スキンは色、フォントなどのコンポーネントの視覚的な外観、およびページ上のコンポーネントの位置、高さ、幅などのその他の要素を制御します。

各ページ・テンプレートで優先スキンを定義すると、それぞれのページ・テンプレートで最適に機能するスキンを指定できます。そのページ・テンプレートをポータルのデフォルト・ページ・テンプレートとして選択したり、システムのデフォルトとして選択すると、デフォルトのスキンは自動的にそのページ・テンプレートの優先スキンに更新されます。

詳細は、「スキンの開発」を参照してください。

実行時の動作

実行時に認可ユーザーがコンポーザで編集できるページ・テンプレートをJDeveloperで開発する場合は、「実行時に編集できるページ・テンプレートの開発のベスト・プラクティス」に記載されているヒントに従ってください。

コンポーネント

ADFレイアウト・コンポーネントごとの外観の詳細は、ADF Facesリッチ・クライアントのデモ・オンライン・ツール(http://jdevadf.oracle.com/adf-richclient-demo/faces/visualDesigns/index.jspx)を参照してください。コンポーネントの「ソースの表示」メニューから「ページ」または「ページ・テンプレート」を選択し、使用されているタグと属性およびコンポーネント構造のページの外観を確認します。

ページ・テンプレート・レイアウトは変更される可能性があるため、ページの作成およびカスタム・コンポーネントの設計では、フローおよびストレッチのコンテキストで適切に表示されるようにします。

コンポーネントの外観のカスタマイズに関するヒントは、「コンポーネントの外観のカスタマイズのベスト・プラクティス」を参照してください。

スクロール

スクロールバーは、フロー・アイランド・コンテンツの周囲にのみ追加できます。スクロールバーの実装に関するヒントは、「ページ・テンプレートでのスクロールの定義のベスト・プラクティス」を参照してください。

余白、境界線およびパディング

ブラウザのCSSボックス・モデル・ルールのため、コンポーネント上の余白、境界線、パディングの定義が複雑になる場合があります。コンポーネントに対する余白、境界線、パディングの複雑さの解決に関するヒントは、「余白、境界線、パディングの定義のベスト・プラクティス」を参照してください。

属性

ページ・テンプレートまたはページ・テンプレートを使用するページで設定できる属性について検討してください。たとえば、showFooterは、ページ・フッターを表示するかどうかを指定します。

属性を持たないページ・テンプレートは構文的に正しいものです。ただし、テンプレートのレンダリングが多少異なる複数のページに対して1つのページ・テンプレートを使用する場合は、ページ・テンプレートの属性が役に立ちます。

ページ・テンプレートでの属性の使用に関する情報は、「ページ・テンプレートの作成」など、この章の全体にわたって記載されています。

リンク

ページ・テンプレートにリンクを追加するには、すぐに使用できるページ・テンプレートで提供されているコンポーネントをコピーして、リンク・ナビゲーション、メニュー、ブレッドクラム、ボタンおよびイメージを組み込みます。

goButtonやgoLinkなどのgoコンポーネントは、クライアント側の機能を実行しないため、クライアント側のフットプリントはほとんど用意されていません。また、これらのコンポーネントは、検索エンジン用に最適化されたURLを使用できるため、ポータル内の一般的なナビゲーションではcommandコンポーネント(commandButton、commandLink)よりも優先されます。

国際化

国際化手法を考慮したページ・テンプレートを作成する場合、リソース・バンドル・ファイルへの静的テキストの格納などの推奨されるプラクティスに関する詳細は、「複数言語に対応したポータル構築のガイドライン」を参照してください。

ページ・テンプレートの命名(表示名)

表示名は、新規ページの作成の際にユーザーに公開されます。このため、テンプレートの使用対象のページ・タイプをユーザーが簡単に識別できるようなページ・テンプレート名にする必要があります。

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

- ストレッチ・レイアウトの作成のベスト・プラクティス

- フロー・レイアウトの作成のベスト・プラクティス

- 実行時に編集できるページ・テンプレートの開発のベスト・プラクティス

- コンポーネントの外観のカスタマイズのベスト・プラクティス

- ページ・テンプレートでのスクロールの定義のベスト・プラクティス

- 余白、境界線、パディングの定義のベスト・プラクティス

7.2.1 ストレッチ・レイアウトの作成のベスト・プラクティス

ページ・テンプレートがストレッチ・レイアウトに最適である場合、レイアウトの開発に際して次のヒントに従ってください。

様々なレイアウトの詳細は、「ページ・テンプレートのレイアウトの理解」を参照してください。

- 作成する外部構造に格納されたコンテナは、ストレッチでき、その子をストレッチできます。documentコンポーネントの内部で、たとえばコンテナpanelGridLayout (図7-2)を行(gridRow)およびセル(gridCell)とともに使用するか、コンテナpanelSplitter (図7-3)を使用します。

注意:

各レイアウトまたはパネル・コンポーネントのタグ・ドキュメントでは、ストレッチできるかどうか、およびそのコンポーネントの「形状管理」ドキュメントでストレッチを実現する方法が識別されます。一部のコンポーネントには、子をストレッチさせるかどうかを決定する属性が含まれています。例: documentにはmaximized属性が、showDetailItemにはstretchChildren属性が含まれます。

- フロー・アイランドを作成します。ストレッチ可能な外部構造の内部に、フロー(ストレッチでない)コンポーネントのアイランドを作成します。これをストレッチからフローへ遷移させるには、この遷移ではストレッチ対象となっていてもその子をストレッチさせないため、panelGroupLayoutをlayout="scroll"またはlayout="vertical"と一緒に使用します。

- ストレッチ・コンポーネントでは、dimensionsFrom="auto"と設定することにより、ストレッチ・コンポーネント(panelStretchLayoutなど)自身がストレッチされる場合は、その子のみをストレッチしようと試みます。ストレッチされない場合は、その子をフロー(ストレッチではなく)します。

- フロー・コンテナ内部では、何かを垂直方向にストレッチ(高さにパーセント値を使用して)させないでください。

- inlineStyleのposition CSSプロパティは使用しないでください。使用すると、このプロパティをスキンで指定したスタイルでオーバーライドする機能が動作しなくなります。

注意:

次のコンポーネントは、信頼できる状態でストレッチできないコンポーネントのごく一部です。

- 大半の入力コンポーネント

- panelBorderLayout

- panelFormLayout

- panelGroupLayout (layout="default"とともに)

- panelGroupLayout (layout="horizontal"とともに)

- panelHeader (type="flow"とともに)

- panelLabelAndMessage

- panelList

- panelGrid

7.2.2 フロー・レイアウトの作成のベスト・プラクティス

ページ・テンプレートがフロー・レイアウトに最適である場合、レイアウトの開発に際して次のヒントに従ってください。

様々なレイアウトの詳細は、「ページ・テンプレートのレイアウトの理解」を参照してください。

- panelGridLayoutを行(gridRow)およびセル(gridCell)とともに使用して、フローする構造化レイアウトを定義します。

- スクロール・バーが複数になることを避けるため、layout="vertical"を使用するかわりに、スクロールのpanelGroupLayoutコンポーネントをネストしないでください。

- 大半のストレッチ可能なADFコンポーネントは、dimensionsFrom="auto"でのフロー・コンテキストでも機能します。

- コンポーネントを水平にストレッチさせるには、styleClass="AFStretchWidth"を(inlineStyle="width:100.0%"のかわりに)使用します。

カスタマイズ可能なコンポーネントの使用:

- panelCustomizableで、layout="auto"を使用してその子をストレッチするかどうかを調べます。

- フロー・レイアウトまたはストレッチ・レイアウトをサポートするには、showDetailFrameをstretchChildren="auto"と指定して使用します。

7.2.3 実行時に編集できるページ・テンプレートの開発のベスト・プラクティス

実行時に(Oracle WebCenter Portalで)編集可能にするのに適したページ・テンプレートを設計時に(Oracle JDeveloperで)作成するには、次のヒントに従ってください。

- コンポーザ・グループのコンポーネントをコンポーネント・パレットに追加します。

- ページ・テンプレートにpageCustomizableは追加しないでください。

- 他のコンポーネントを保持している水平または垂直方向のレイアウトをコンテナに提供する、最低1つのpanelCustomizableコンポーネントを追加します。

- panelCustomizableコンポーネントの内部で、コンポーネントに対して表示、非表示、移動などのアクションを追加できるクロムを提供するshowDetailFrame内のADFコンポーネント(outputText、richTextEditor、goLinkなど)を追加します。フレームまたは埋込みコンポーネント・プロパティを編集できます。

注意:

showDetailFrameコンポーネントは処理時間に影響を与えるため、この手法は慎重に使用してください。エンド・ユーザーがコンポーネントを移動させることができない場合は、コンポーネントをshowDetailFrameにラップしないでください。

設計時にページに追加するために使用できるコンポーネントの大部分は、実行時にリソース・カタログでも使用できます。表7-2では、設計時コンポーネントを実行時コンポーネントにマップしています。

表7-2 設計時から実行時へのコンポーネント・マッピング

設計時(JDeveloper)

実行時(WebCenter Portal)

panelCustomizable

Box

outputText

HTML Markup

goLink

Hyperlink

goImageLink

Image

showDetailFrame

Movable Box

richTextEditor

Text

inlineFrame

Web Page

7.2.4 コンポーネントの外観のカスタマイズのベスト・プラクティス

コンポーネントの外観をカスタマイズするには、次のヒントに従ってください。

- カスタム・スタイルには、メンテナンスが簡単で、ページ・テンプレートのソースを変更しなくても変更可能なCascading Style Sheets (CSS)を使用します。たとえば、CSSコードbackground-color: blueを使用して、ページの背景色を青色に変更します。

- 既存のスキンに必要なすべてが備わっていない場合には、一貫した外観の変更に対してカスタム・スキンを使用します。

- インスタンス固有の代替スタイルには、styleClass属性を使用します。対応するスタイル定義は、カスタム・スキン(推奨)、af:resourceタグにより提供されるスタイルなどの管理しやすい場所に保存します。

- 最後の手段として、inlineStyle、contentStyle、labelStyleなどのコンポーネントの属性を使用します。これらの属性は、単一のスタイル・シートに収集されているのではなくコンポーネント全体にわたって散在しているため、より多くのページのRaw HTMLサイズを使用し、前述のメカニズムを1つ以上使用している場合には不要なこともあります。スタイルはWebブラウザで直接処理されるため、非常に強力ですが、エラーが発生しやすいという代償を伴います。

- ブラウザではすべての要素のすべてのスタイルがサポートされていませんし、スタイルの特定の組合せでは明確でない結果となります。次のスタイル構成は回避してください。

- %単位のheight値を持つinlineStyle

- 90%から100%のwidth値を持つinlineStyle (かわりにstyleClass="AFStretchWidth"またはstyleClass="AFAuxiliaryStretchWidth"を使用してください)

- height、topおよびbottom値を持つinlineStyle

- width、leftおよびright値を持つinlineStyle

- position値を持つinlineStyle

- 親コンポーネントによりストレッチされた子の場合、width値またはheight値を持つinlineStyle

7.2.5 ページ・テンプレートでのスクロールの定義のベスト・プラクティス

ページ・テンプレートでスクロールを定義するには、次のヒントに従ってください。

- ページ・コンテンツが使用可能な画面サイズ全体を占めるように設計を行うことにより、エンド・ユーザーが水平方向にスクロールしないで済むようにしてください。

- スクロールバーは、フロー・アイランド・コンテンツの周囲にのみ追加できます。ストレッチ外部フレームからフロー・アイランドへの切替え用遷移コンポーネントには、panelGroupLayoutにlayout="scroll"を含めることをお薦めします。このpanelGroupLayoutのコンテンツが割り当てられたスペースの大きさに合わない場合、ブラウザではスクロールバーが必要かどうかが判断され、自動的に追加されます。

- スクロールpanelGroupLayoutコンポーネントをネストすると、ユーザーには複数のスクロールバーが表示されるため、ネストしないでください。また、これはストレッチ領域からフロー領域への遷移でのみ使用され、フロー領域内部にストレッチ領域がないため、通常、ネストされたスクロールバーを使用して終了できません。最もよいのは、ユーザーが検索している項目を表示するためにスクロールする必要がある領域の数を、最小限にすることです。ユーザーが必要とするスクロールについて十分検討してください。不要なスクロールバーが存在する場合、そのpanelGroupLayoutのlayout属性をverticalに変更する必要がある場合があります。

7.2.6 余白、境界線、パディングの定義のベスト・プラクティス

ブラウザのCSSボックス・モデル・ルールのため、コンポーネント上の余白、境界線、パディングの定義が複雑になる場合があります。多くの場合、このようなスタイルを適用するには、複数のコンポーネントを一緒に使用する必要があります。

- スクロール領域では、追加のpanelGroupLayoutにlayout="vertical"でパディングを定義し、外側のpanelGroupLayoutでlayout="scroll"を指定して、その内部に追加する必要があります。

- ストレッチ領域では、panelGroupLayoutコンポーネントをpanelGridLayoutの内部にラップし、gridCellコンポーネントの内部にスペーサを指定することが必要になる場合があります。図7-2を参照してください。

注意:

様々なメカニズムをパディングに適用するには、ナビゲーション-マスター-ディテール、タイル・フロー、タイル・ストレッチのレイアウト・パターン例を参照してください。

http://jdevadf.oracle.com/adf-richclient-demo/faces/feature/layoutBasicTest.jspx

7.3 ページ・テンプレートの作成

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

- ページ・テンプレートの作成について

- ページ・テンプレートの作成方法

- ページ・テンプレートのアーティファクトに関する必知事項

7.3.1 ページ・テンプレートの作成について

ページ・テンプレートを設計するには、まずページ・テンプレート用にWebCenter Portalアセット・アプリケーションを作成する必要があります。

ページ・テンプレートを作成する前に、必ず「ページ・テンプレートの開発のベスト・プラクティス」に目を通しておいてください。

注意:

JDeveloperを使用して、Oracle WebCenter Portal用のページ・テンプレートを開発することをお薦めします。ページ・テンプレートはWebCenter Portalで開発することもできますが、編集機能が制限されます。

開発が完了したページ・テンプレートは、共有アセットとしてWebCenter Portalに直接公開するか、特定のポータルに公開してすぐに使用したり、テストしたりできます。または、ページ・テンプレートをファイルにエクスポートして、後でWebCenter Portalにアップロードできます。

詳細は、「ページ・テンプレートの編集」および「ページ・テンプレートの公開」を参照してください。

独自のページ・テンプレートに組み込める機能の例は、WebCenter Portalに付属する組込みページ・テンプレート特に、最新のレスポンシブ・ページ・テンプレート(「モザイク」および「ユニコーン」)と、タスク・フローの使用を最小限に抑え、パフォーマンスを最適化するpanelGridLayoutコンポーネント(行(gridRow)およびセル(gridCell)を使用して構造化レイアウトを定義)を含むその他のテンプレートを参照してください。『Oracle Fusion Middleware Oracle WebCenter Portalでのポータルの構築』のWebCenter Portalの組込みページ・テンプレートの概要に関する項を参照してください。

組込みテンプレートの1つをJDeveloperにコピーして貼り付けて始めるか、最初から新しいページ・テンプレート全体を構築できます。組込みページ・テンプレートに基づいてページ・テンプレートを作成するのではない場合でも、組込みページ・テンプレートはアイデアをつかむ上で検討に値します。たとえば、組込みページ・テンプレートには、ログイン・フォーム、およびナビゲーションの視覚化に関して役に立つ例が含まれており、このテンプレートは要件に合わせて変更できます。

7.3.2 ページ・テンプレートの作成方法

この項では、新しいページ・テンプレート用にWebCenter Portalアセット・アプリケーションを作成する方法について説明します。

カスタム・ページ・テンプレートを作成するには:

1. 「アセット・タイプ」で「ページ・テンプレート」を選択して、アセット用にWebCenter Portalアセット・アプリケーションを作成します。

図7-4 「ページ・テンプレート」アセット・タイプ

WebCenter Portalアセット・アプリケーションの作成の詳細は、「WebCenter Portalアセット・アプリケーションの作成」を参照してください。

ページ・テンプレートのJSPXファイルが作成されます。

図7-5 ページ・テンプレートのJSPXファイル

新しいページ・テンプレート用にアセット・アプリケーションを作成する際に作成されるアーティファクトの詳細は、「ページ・テンプレートのアーティファクトに関する必知事項」を参照してください。

2. 続いて「ページ・テンプレートの編集」の説明に従ってJSPXファイルの内容を編集します。

7.3.3 ページ・テンプレートのアーティファクトに関する必知事項

ページ・テンプレート・アセット・アプリケーションを作成すると、次のアーティファクトとともにデフォルト・テンプレートが生成されます。

- ページ・テンプレートのページ要素が含まれるJSPXファイル(PageTemplate1.jspxなど)

- ページ・テンプレートの対応するページ定義ファイル(PageTemplate1PageDef.xmlなど)

どちらのファイルも図7-6に示すようにアプリケーション・ナビゲータに表示されます。

図7-6 ページ・テンプレート・アセット・アプリケーションのアーティファクト

7.4 ページ・テンプレートの編集

WebCenter Portalアセット・アプリケーションおよび初期ページ・テンプレートを作成したら、続いて要素を追加または変更できます。

ページ・テンプレートを編集するには:

1. アプリケーション・ナビゲータで、編集するページ・テンプレートのJSPXファイルを右クリックし、「開く」を選択します。

2. エディタで、コンポーネント・パレットからコンポーネントをドラッグしてページ・テンプレートのレイアウトやコンテンツに必要な変更を加えます。

ページ・テンプレートの構築方法の詳細は、「ページ・テンプレートの開発の概要」および「ページ・テンプレートの開発のベスト・プラクティス」を参照してください。

組込みページ・テンプレートはページ・テンプレートの有用な例となるため、「ページ・テンプレートのチュートリアルと例」も参照してください。

JSFページ・テンプレートの一般的な情報は、『Oracle Fusion Middleware Oracle ADF FacesによるWebユーザー・インタフェースの開発』のページ・テンプレートの使用方法に関する項を参照してください。

3. 変更を保存します。

7.5 ページ・テンプレートへのフローティング・ツールバーの追加

「ページ・コンテンツのコントリビュート」権限を持つユーザーがページを表示すると、ページ・テンプレートにツールバーが組み込まれている場合、「コントリビュート」オプションとともにフローティング・ツールバーが表示されます。

カスタム・ページ・テンプレートにフローティング・ツールバーを追加するには:

1. 次のxml名前空間の宣言を含めます(まだ指定されていない場合)。

xmlns:wcdc="http://xmlns.oracle.com/webcenter/spaces/taglib"

2. xml名前空間の宣言内に、次のフローティング・ツールバーへの参照を含めます。

<wcdc:portalToolbar id="ptbdc"/>

図7-7に、ページ・テンプレートにツールバーが組み込まれている場合に、「コントリビュート」オプションとともにフローティング・ツールバーが表示される様子を示します。

図7-7 フローティング・ツールバーの「コントリビュート」ボタン

詳細は、『Oracle Fusion Middleware Oracle WebCenter Portalでのポータルの構築』のコンテンツのコントリビュートと公開に関する項を参照してください。

7.6 ページ・テンプレートの公開

ページ・テンプレートを作成し、JSPXファイルを編集したら、次の工程はテンプレートを公開してWebCenter Portalでテストします。

ページ・テンプレートを共有アセットとして公開する、または特定のポータルにポータル・アセットとして公開する方法の詳細は、「WebCenter Portalアセットの公開」を参照してください。

7.7 ページ・テンプレートのチュートリアルと例

この項で示す補足チュートリアルと例は、ページ・テンプレートに関する追加情報です。

- ページ・テンプレートの調査。推奨されるプラクティスを含め、単純なページ・テンプレートの詳細を分析します。
http://www.oracle.com/technetwork/middleware/webcenter/portal/learnmore/dissectingapagetemplate-1926909.pdf

- Oracle WebCenter Portalオンライン・トレーニング。Oracle WebCenter Portalアプリケーションでのページ・テンプレートの作成と使用。以前のリリースでポータルのページ・テンプレートを作成して使用するための記録済プレゼンテーションおよびスライドを示します。
http://www.oracle.com/technetwork/middleware/webcenter/portal/learnmore/pagetemplates-1438595.pdf

- WebCenter Portalのモバイル配信の最適化。ページ重みに関連するWebCenter Portalの一般的なパフォーマンスのボトルネックを識別して分析し、パフォーマンスとレスポンス時間を向上させると同時にポータルを合理化するための一般的な方法について説明します。ページ・テンプレート開発のコンテキストで特に興味深いのは、「ページの設計とコンポーネントの選択」に関する項です。アプリケーションのサンプルをダウンロードできます。
http://www.ateam-oracle.com/webcenter-mobile-delivery/

- WebCenterアプリケーションでのリンクの使用。リンクを使用する際の考慮事項について説明します。ページ・テンプレートに関連するのは、メニュー、ブレッドクラム、ボタンおよびイメージ内のリンクです。
http://www.ateam-oracle.com/working-with-links-in-webcenter-application/

8 スキンの開発

この章では、Oracle JDeveloperを使用して、WebCenter Portalで使用するためのスキンを作成および編集する方法について説明します。

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

- スキンの開発の概要

- スキンの開発のベスト・プラクティス

- スキンの作成

- スキンの編集

- スキンの公開

- ユーザー用スキンの条件付変更

8.1 スキンの開発の概要

スキンを使用すると、色、フォント、イメージ、およびアプリケーション・コンポーネントの高さや幅などのディメンションの詳細を定義して、自社に適したルック・アンド・フィールを表すことができます。

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

- スキンについて

- スキンの実行時管理について

8.1.1 スキンについて

スキンは、カスケード・スタイル・シート(CSS)仕様に基づきます。スキンは、アプリケーション・コンポーネントのスタイルを定義する種々のスキン・セレクタを含むCSSファイルです。コンポーネントのスタイル関連のプロパティを変更することによって、コンポーネントのルック・アンド・フィールを調整できます。アプリケーション内でスキンを使用すると、各コンポーネントに対して個別にスタイルを指定したり、各ページにスタイルシートを挿入する必要がなくなります。各コンポーネントで自動的に、スキンで定義されているスタイルが使用されます。スキンにより、ポータル・ページ自体を変更せずにアプリケーションの外観を変更できます。

8.1.2 スキンの実行時管理について

WebCenter Portalでは、デプロイ後でもポータルの開発をユーザーが続行できるようにスキンの実行時管理をサポートします。実行時管理により、JDeveloperのインストールや知識がなくても、権限のあるユーザーがブラウザ・ベースの環境でアプリケーションのスキンを管理したり、新規に作成できます。詳細は、『Oracle Fusion Middleware Oracle WebCenter Portalでのポータルの構築』のスキンの使用に関する項を参照してください。

8.2 スキンの開発のベスト・プラクティス

WebCenter Portalで使用するスキンの作成または変更には、ある程度別個の2つのタスクとしてアプローチできます。1つ目のタスクは、ページの背景や中央などのページの大まかな要素に基本的なスタイル要素を適用して、企業ブランドのルック・アンド・フィールを規定することです。これは、大抵の場合、最初にしておくことです。2つ目も同様で、より細かいページ要素のいくつかにスタイルを適用して、ルック・アンド・フィールを微調整することです。

多くの場合、これらを組み合せたアプローチも効果的です。大まかな要素(ページ背景、本体の主要部分など)を取り込んでそれらとともに従来のCSSスタイルを適用すると、ADFスキンの使用が特定的になっても、WebCenter Portalの外観全体が生成されます。

ADFスタイルに加えてCSSベースのスタイルと他の技術を使用する場合、WebCenter Portalの外部にスタイル・アセットを格納すると役立つことが多いです。そのために、コンテンツ・サーバーを使用してWebCenter Portal用の非構造アセットをすべて管理できます。アセットに環境内で管理するCSSやイメージなどを追加して、リビジョン・コントロールとワークフローを提供できます。このベスト・プラクティスにより、設計チームは、変更のたびに開発チームを巻き込まなくてもWebCenter Portalにアクセスして作業できるようになります。

8.3 スキンの作成

WebCenter Portalでは、portal-skin.cssファイルで定義されるportalスキンをデフォルトで使用します。WebCenter Portalアセット・アプリケーションを作成すると、簡単にこのスキンをJDeveloperにコピーして貼り付けて特定の要件に合せて変更することも、最初から新しいスキンを作成することもできます。WebCenter Portalでのアセットのコピー方法の詳細は、『Oracle Fusion Middleware Oracle WebCenter Portalでのポータルの構築』のアセットのコピーに関する項を参照してください。

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

- スキンの作成方法

- スキンのアーティファクトに関する必知事項

8.3.1 スキンの作成方法

この項では、新しいスキン用にWebCenter Portalアセット・アプリケーションを作成する方法について説明します。アセット・アプリケーションが関連するアーティファクトとともに作成されると、続いて「スキンの編集」の説明に従ってスキンのCSSファイルを変更できます。

注意:

イメージやアイコンなどのアセット関連のアーティファクトをコンテンツ・サーバーに格納し、必要な場合にコンテンツを容易に特定して移動できるようにアセット・アーティファクト専用のフォルダ構造をコンテンツ・サーバー上で作成することをお薦めします。こうすることで、このようなコンテンツを他のユーザーが開発者を巻き込まずに変更できるようにもなります。

スキン用にWebCenter Portalアセット・アプリケーションを作成するには:

1. 「アセット・タイプ」で「スキン」を指定して、アセット用にアセット・アプリケーションを作成します。

WebCenter Portalアセット・アプリケーションの作成の詳細は、「WebCenter Portalアセット・アプリケーションの作成」を参照してください。スキン用にアセット・アプリケーションを作成する際に作成されるアーティファクトの詳細は、「スキンのアーティファクトに関する必知事項」を参照してください。

2. アプリケーション・ナビゲータで、新規作成したスキンのCSSファイルを右クリックし、「開く」を選択します(図8-1)。

図8-1 スキンのCSSファイル

3. 続いて「スキンの編集」の説明に従ってスキンを編集します。

8.3.2 スキンのアーティファクトに関する必知事項

スキン・アセット・アプリケーションを作成すると、次のアーティファクトとともにデフォルト・スキンが生成されます。

- CSSスキン・セレクタ・ファイル(Skin1.cssなど)

- trinidad-skins.xml: スキン定義ファイル

どちらのファイルも図8-2に示すようにナビゲーション・バーに表示されます。

図8-2 スキン・アセット・アプリケーションのアーティファクト

8.4 スキンの編集

CSSファイルを編集してスタイル・セレクタを編集または追加することにより、最初に作成したスキンを編集できます。

注意:

WebCenter Portalで既存または組込みのスキンをコピーし、JDeveloperでページ・スタイルのCSSファイルに貼り付けることをお薦めします。次に、このスキンを新しいスキンの起点として使用し、変更が終了したらWebCenter Portalに公開します。WebCenter Portalでのアセットのコピー方法の詳細は、『Oracle Fusion Middleware Oracle WebCenter Portalでのポータルの構築』のアセットのコピーに関する項を参照してください。

スキンを編集するには:

1. アプリケーション・ナビゲータで、スキンのCSSファイルを右クリックし、「開く」を選択します(図8-3)。

図8-3 スキンのCSSファイル

2. portalスキンなど、既存のWebCenter Portalスキン(つまり、アセット・アプリケーションの作成時にデフォルトで作成されたもの以外のスキン)を起点として使用している場合は、CSSファイルにコピーして貼り付けます(『Oracle Fusion Middleware Oracle WebCenter Portalでのポータルの構築』のアセットのコピーに関する項を参照)。

3. スキンのソース・コード内で、アプリケーションのコンポーネントに必要なADF Facesスキン・セレクタを定義します。たとえば、アプリケーション・コンテンツのフォント・ファミリを定義するには、.AFDefaultFont:aliasスキン・セレクタを次に示すように使用できます。

.AFDefaultFontFamily:alias {
font-family: Tahoma, Verdana, Helvetica, sans-serif;
}

次を参照してください。

- ADFフェイス・スキン・セレクタの一般情報は、『Oracle Fusion Middleware Oracle ADF FacesによるWebユーザー・インタフェースの開発』のスタイルおよびスキンを使用した外観のカスタマイズに関する項を参照してください。スキンで使用できるセレクタに関する情報は、Oracle JDeveloperのオンライン・ヘルプも参照してください。これらの情報は、オンライン・ヘルプのFusionのADF Facesコンポーネントのスキン・セレクタに関する項およびFusionのデータ視覚化ツール・コンポーネントのスキン・セレクタに関する項を参照してください。

- ADF Facesコンポーネントのスタイル・セレクタの定義は、『Oracle Fusion Middleware Oracle ADF FacesによるWebユーザー・インタフェースの開発』のエンド・ユーザーによるアプリケーションのADFスキンの変更の有効化に関する項とコンポーネントのスタイル・プロパティの変更に関する項を参照してください。

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

5. 「スキンの公開」に示すように、スキンを公開してテストします。

8.5 スキンの公開

WebCenter Portalアセット・アプリケーションを作成し、スキンのCSSファイルを編集したら、次の工程はスキンを公開してWebCenter Portalでテストします。アセットを共有アセットとしてWebCenter Portalに公開する、またはポータル・アセットとして特定のポータルに公開する方法の詳細は、「WebCenter Portalアセットの公開」を参照してください。

8.6 ユーザー用スキンの条件付変更

実際のアプリケーション・ロジックに影響を与えずに、ユーザー、ページ、アプリケーションなどに対して、それぞれ異なるスキンを割り当てることができます。スキンを条件付で設定するには、trinidad-config.xmlファイルで<skin-family>エントリを使用します。

動的に評価できるEL式を使用して、表示するスキンを決定できます。たとえば、ユーザーのブラウザがドイツ語ロケールに設定されているときドイツ語スキンを使用し、それ以外では英語スキンを使用する場合には、trinidad-config.xmlファイルで次の<skin-family>エントリを使用します。

<skin-family>#{facesContext.viewRoot.locale.language=='de' ? 'german' : 'english'}</skin-family>

詳細は、『Oracle Fusion Middleware Oracle ADF FacesによるWebユーザー・インタフェースの開発』のエンド・ユーザーによるアプリケーションのADFスキンの変更の有効化に関する項を参照してください。

注意:

<skin-family>のデフォルト値は、アセット・アプリケーションとともに作成したスキン・アセットの名前(Skin1など)から空白または特殊文字を除いたものです。デフォルト値を変更すると、アプリケーション・ユーザーは実行時にリソース・マネージャでスキンを設定できません。

また、SkinSetting APIを使用して、ユーザー向けスキンを条件付で設定することもできます。詳細は、Oracle WebCenter Portal Java APIリファレンスを参照してください。

9 視覚化テンプレートの開発

この章では、Oracle JDeveloperを使用して、WebCenter Portalでデータを視覚化するためのテンプレートを作成および編集する方法について説明します。

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

- 視覚化テンプレートについて

- 視覚化テンプレートの作成

- 視覚化テンプレートの編集

- 視覚化テンプレートの公開

- 実行時の処理内容

9.1 視覚化テンプレートについて

WebCenter Portal 12c (12.2.1)には、ビジネス・オブジェクトを使用してRESTまたはSQLのデータ・ソースからデータを取得する機能が導入されており、アプリケーション統合の複雑さが単純化されています。取得されたデータは、視覚化テンプレートを使用してデータの視覚化でポータル・ページにレンダリングできます。たとえば、データを組込み視覚化テンプレートの1つで表示することも、組込みテンプレートのいずれも組織のニーズに合わない場合は、カスタム視覚化テンプレートをJDeveloperで構築することもできます。

関連項目:
組込み視覚化テンプレートの詳細は、『Oracle Fusion Middleware Oracle WebCenter Portalでのポータルの構築』の視覚化テンプレートについてに関する項を参照してください。

視覚化テンプレートとは、ビジネス・オブジェクトによって取得されたデータをポータル・ページに表示する方法を定義するJSFFファイル(JSPページ・フラグメント)です。様々なビジネス・オブジェクトとのバインドによっていくつものシナリオで使用できる汎用的な表示形式の組込み視覚化テンプレートとは異なり、カスタム視覚化テンプレートはそれぞれ、特定のビジネス・オブジェクトとともに使用するよう設計されているため、再利用性はほとんどありません。したがって、カスタム視覚化テンプレートはバインドされた視覚化テンプレートとも呼ばれます。

アプリケーション・スペシャリストまたはポータル・マネージャが(『Oracle Fusion Middleware Oracle WebCenter Portalでのポータルの構築』のページへのデータ視覚化の追加に関する項の説明に従って) WebCenter Portalでデータ視覚化コンポーネントをポータル・ページに追加する際には、データ視覚化の定義ウィザードを使用してデータ・ソースと、ビジネス・オブジェクトにバインドされる視覚化テンプレートを選択し、データ視覚化を構成します。ウィザードの「オプション」ページに、選択したテンプレートの属性(組込みテンプレートの属性またはカスタム・テンプレートに指定されているプレースホルダEL)が動的に表示されます。カスタム視覚化テンプレートの場合、プレースホルダELがビジネス・オブジェクトの各属性にバインドされ、実行時にELと置き換ります。詳細は、『Oracle Fusion Middleware Oracle WebCenter Portalでのポータルの構築』のデータ視覚化の構成に関する項を参照してください

9.2 視覚化テンプレートの作成

この項では、新しいカスタム視覚化テンプレートの作成方法について説明します。内容は次のとおりです。

- 視覚化テンプレートの作成方法

- 視覚化テンプレートのアーティファクトに関する必知事項

9.2.1 視覚化テンプレートの作成方法

この項では、新しい視覚化テンプレート用にWebCenter Portalアセット・アプリケーションを作成する方法について説明します。アセット・アプリケーションが関連するアーティファクトとともに作成されると、続いて「視覚化テンプレートの編集」の説明に従って視覚化テンプレートを変更できます。

注意:

Oracleは、イメージやアイコンなどのアセット関連のアーティファクトをコンテンツ・サーバーに保管し、アセット・アーティファクト専用のフォルダ構造をコンテンツ・サーバー上で作成することをお薦めします。これにより、必要な場合にコンテンツを容易に特定し、移動できます。

カスタム視覚化テンプレートを作成するには:

1. 「アセット・タイプ」で「視覚化テンプレート」を指定して、アセット用にアセット・アプリケーションを作成します(図9-1)。

図9-1 「視覚化テンプレート」アセット・タイプ

WebCenter Portalアセット・アプリケーションの作成の詳細は、「WebCenter Portalアセット・アプリケーションの作成」を参照してください。視覚化テンプレート用にアセット・アプリケーションを作成する際に作成されるアーティファクトの詳細は、「視覚化テンプレートのアーティファクトに関する必知事項」を参照してください。

2. アプリケーション・ナビゲータで、新規作成した視覚化テンプレートのページ・フラグメント・ファイルを右クリックし(図9-2)、「開く」を選択して「ソース」ビューに切り替えます。

図9-2 視覚化テンプレートのページ・フラグメント・ファイル

3. 続いて「視覚化テンプレートの編集」の説明に従ってページ・フラグメントの内容を編集します。

9.2.2 視覚化テンプレートのアーティファクトに関する必知事項

視覚化テンプレート・アセット・アプリケーションを作成すると、次のアーティファクトとともにデフォルト・テンプレートが生成されます。

- ビュー・フラグメント・ファイル(VisualizationTemplate1.jsffなど)

このファイルは図9-3に示すようにアプリケーション・ナビゲータに表示されます。

図9-3 視覚化テンプレート・アセット・アプリケーションのアーティファクト

実行時にデータ視覚化を作成する際に使用する視覚化テンプレートを公開するには、次の要件を考慮する必要があります。

- 視覚化テンプレートとして使用されるタスク・フローに対してビュー・フラグメントを1つのみ作成します。ビュー・フラグメントのJSFFファイルは、タスク・フロー定義のXMLファイルと同じ場所に作成する必要があります。

- 視覚化テンプレートで(たとえばEL値を使用して)コードを参照している場合、そのコードはデプロイ済のアプリケーション内に存在する必要があります。

9.3 視覚化テンプレートの編集

視覚化テンプレートの初期フレームワークを作成したら(「視覚化テンプレートの作成方法」を参照)、編集してそのテンプレートを定義します。

注意:
データ視覚化ですでに選択されているカスタム視覚化テンプレートを変更した場合は、ページに表示されるデータに変更を反映するために、新しいデータ視覚化を構成し、改訂した視覚化テンプレートを再度選択する必要があります。

視覚化テンプレートを編集するには:

1. アプリケーション・ナビゲータで、視覚化テンプレートのJSFFファイルを右クリックし、「開く」を選択します。

2. エディタで、視覚化テンプレートのコードに必要な変更を加えます。

注意

- root-elementの前後でaf:subformを使用すると、視覚化テンプレートで必要なユーザーの入力を、ページ上の他のコンポーネントで必要な入力とともに送信できます。af:subformを指定しないと、カスタム視覚化テンプレートでのユーザー入力により、ページ上の別のフォームなどの他の入力の送信が妨げられることがあります。

- プレースホルダELを追加して実行時にビジネス・オブジェクトの属性にバインドするには、「視覚化テンプレートでのプレースホルダELのバインディング」を参照してください。

3. 変更を保存します。

9.3.1 視覚化テンプレートでのプレースホルダELのバインディング

カスタム視覚化テンプレートには、実行時にビジネス・オブジェクトの属性にバインドされるプレースホルダ式言語(EL)が含まれます。プレースホルダELを使用すると、データ視覚化を作成しているユーザーがデータ視覚化の定義ウィザードでプレースホルダELを選択して実行時にビジネス・オブジェクトの属性、パラメータまたはメソッドにバインドできるように、カスタム視覚化テンプレートにバインディング・ヒントを追加できます。

次のADFコンポーネントでは、ビジネス・オブジェクトへのプレースホルダELのバインディングをサポートしています。

- af:form

- af:image

- af:inputDate

- af:inputText

- af:iterator

- af:link

- af:listView

- af:outputFormatted

- af:outputText

- af:selectBooleanCheckbox

- af:selectOneChoice

- af:selectOneRadio

- af:selectBooleanRadio

- af:table

これらのコンポーネント内で、カスタム視覚化テンプレートのプレースホルダELをビジネス・オブジェクトにバインドするための構文は次のとおりです。

ビジネス・オブジェクトの属性へのテンプレート・プレースホルダELのバインディング

プレースホルダELの構文は次のとおりです。

#{owcp.appsint.data('displayName','parentInformation','defaultValue','attribute binding hint','')}

- owcp.appsint.dataは、このプレースホルダがビジネス・オブジェクトの属性にバインドされることを示すキーワードです。owcp.appsint.dataが含まれるプレースホルダELのみが実行時にビジネス・オブジェクトの属性にバインドされます。

- displayNameは、データ視覚化の定義ウィザードの「オプション」ページでユーザーに表示される属性のプレースホルダ表示名です。

- parentInformationは、属性のコンポーネントが親(イテレータ)に依存している場合の、親(イテレータ)のid属性の値です。たとえば、af:column内のaf:outputTextは、含まれるaf:tableコンポーネントのidとしてparentInformationを保持します。

<af:table var="row" id="t1" value="#{owcp.appsint.data('DOCUMENT Details','','None','','')}" >
<af:column headerText="Name" id="c1" >
<af:outputText value="#{owcp.appsint.data('Name','t1','Name','','')}" id="ot1"/>
</af:column>
</af:table>

- defaultValueは、JDeveloperでテスト用にレンダリングするコンポーネントのデフォルト値です。

- attribute binding hintは、属性のxpath (operationName.accessor1.accessor2.attribute)であるため、ELの公開されたプレースホルダはデフォルトでビジネス・オブジェクトの属性にバインドされます。
SQLデータ・ソースの場合、バインディング・ヒントはGET.ResultSet.column_nameです。たとえば、NAMEおよびIDの各値を取得するSQLデータ・ソースの場合(select NAME, ID from some_table)、NAMEのバインディング・ヒントはGET.ResultSet.NAMEであり、IDのバインディング・ヒントはGET.ResultSet.IDです。

SQLデータ・ソースの従業員をリストするJSFFの例を次に示します。

- 表を使用する場合:

<af:table var="row" id="t1" value="#{owcp.appsint.data('Employee List','','None','GET.ResultSet','')}" >
<af::column headerText="Name" id="c1" >
<af:outputText value="#{owcp.appsint.data('Name','t1','Name','GET.ResultSet.NAME','')}" id="ot1"/>
</af:column>
</af:table>

- イテレータを使用する場合:

<af:iterator id="i1" value="#{owcp.appsint.data('Employee List','','None','GET.ResultSet','')}" var="row">
<af:panelGroupLayout id="pgl2" layout="vertical">
<af:outputText value="#{owcp.appsint.data('Name','i1','John','GET.ResultSet.NAME','')}" id="of1"/>
<af:inputText label="ID : " value="#{owcp.appsint.data('ID','i1','1','GET.ResultSet.ID','')}" id="it1"/>
</af:panelGroupLayout>
</af:iterator>

RESTデータ・ソースの場合、次の返されたデータの例を考えると、empが繰返しデータです。

<emps>
<emp>
<name>EMP1</name>
<id>1</id>
</emp>
<emp>
<name>EMP2</name>
<id>2</id>
</emp>
</emps>

イテレータのヒントはGET.emps.empで、値のヒントはGET.emps.emp.nameです。

前述のRESTデータの従業員をリストするバインディング・ヒントを含むJSFFの例を次に示します。

<af:iterator id="i1" value="#{owcp.appsint.data('Employee List','','None','GET.emps.emp','')}" var="row">
<af:panelGroupLayout id="pgl2" layout="vertical">
<af:outputText value="#{owcp.appsint.data('Name','i1','John','GET.emps.emp.name','')}" id="of1"/>
<af:inputText label="ID : " value="#{owcp.appsint.data('ID','i1','1','GET.emps.emp.id','')}" id="it1"/>
</af:panelGroupLayout>
</af:iterator>

注意:
RESTデータ・ソースのリソース・パスURL (データ視覚化の定義ウィザードで指定)によって返されるデータ型がJSON形式の場合は、バインディング・ヒントのoperationNameの後ろにmethodReturnを追加する必要があります。たとえば、GET.methodReturn.nameとします。

ビジネス・オブジェクトのパラメータへのテンプレート・プレースホルダELのバインディング

プレースホルダELの構文は次のとおりです。

#{owcp.appsint.parameter('displayName','','defaultValue','parameter binding hint','')}

- owcp.appsint.parameterは、このプレースホルダがビジネス・オブジェクトのパラメータにバインドされることを示すキーワードです。owcp.appsint.parameterが含まれるプレースホルダELのみが実行時にビジネス・オブジェクトのパラメータにバインドされます。

- displayNameは、データ視覚化の定義ウィザードの「オプション」ページでユーザーに表示される属性のプレースホルダ表示名です。

- defaultValueは、JDeveloperでテスト用にレンダリングするコンポーネントのデフォルト値です。

- parameter binding hintは、パラメータのxpath (operationName.parameter1)であるため、ELの公開された属性はデフォルトでビジネス・オブジェクトのパラメータにバインドされます。
SQLデータ・ソースの場合、バインディング・ヒントはGET.bind_param_nameです。たとえば、typeという名前のバインド・パラメータを使用してデータを取得するSQLデータ・ソースの場合(select * from some_table where column= :type)、バインディング・ヒントはGET.typeです。

RESTデータ・ソースの場合、RESTでのGET操作を前提とすると、バインディング・ヒントはGET.query_paramまたはGET.path_paramです。

ビジネス・オブジェクトのメソッドへのテンプレート・プレースホルダELのバインディング

プレースホルダELの構文は次のとおりです。

#{owcp.appsint.method('displayName','','defaultValue','method binding hint','')}

- owcp.appsint.methodは、このプレースホルダがビジネス・オブジェクトのメソッドにバインドされることを示すキーワードです。owcp.appsint.methodが含まれるプレースホルダELのみが実行時にビジネス・オブジェクトのメソッドにバインドされます。

- displayNameは、データ視覚化の定義ウィザードの「オプション」ページでユーザーに表示される属性のプレースホルダ表示名です。

- defaultValueは、JDeveloperでテスト用にレンダリングするコンポーネントのデフォルト値です。

- method binding hintは、メソッドのxpathであるため、ELの公開された属性はデフォルトでビジネス・オブジェクトのメソッドにバインドされます。

ビジネス・オブジェクトの属性およびパラメータへのテンプレート・プレースホルダELのバインディング

プレースホルダELの構文は次のとおりです。

#{owcp.appsint.inout('displayName','','defaultValue','attribute binding hint','parameter binding hint')}

- owcp.appsint.inoutは、このプレースホルダがビジネス・オブジェクトの属性およびパラメータにバインドされることを示すキーワードです。

- displayNameは、データ視覚化の定義ウィザードの「オプション」ページでユーザーに表示される属性のプレースホルダ表示名です。

- defaultValueは、JDeveloperでテスト用にレンダリングするコンポーネントのデフォルト値です。

- attribute binding hintは、属性のxpath (operationName.accessor1.accessor2.attribute)であるため、ELの公開された属性はデフォルトでビジネス・オブジェクトの属性にバインドされます。

- parameter binding hintは、パラメータのxpath (operationName.parameter1)であるため、ELの公開された属性はデフォルトでビジネス・オブジェクトのパラメータにバインドされます。

例: ビジネス・オブジェクトの属性へのテンプレート・プレースホルダELのバインディング

このテンプレート・プレースホルダELは、データ視覚化の定義ウィザードの「オプション」ページでName of the Employeeと表示され、ビジネス・オブジェクトの属性にバインドされます。表コンポーネントの親情報は、表コンポーネントがどの親にも依存しないため空です。

<af:outputText value="#{owcp.appsint.data('Name of the Employee','row','John','GET.emp.name','')}" />
<af:table value="#{owcp.appsint.data('Name of the Employee','' ,None,'GET.emps.emp','')}"   id=”t1”>
<af:column sortable="false" headerText="#{owcp.appsint.data('Fourth Column Header','t1','Column Header','GET.emps.emp.name','') }" id="c4">
<af:outputText value="#{owcp.appsint.data('Fourth Column','t1','Text','GET.emps.emp.name','')}" id="ot4"/>
</af:column>
</af:table>

例: 従業員データの検索および更新

この例では、ビジネス・オブジェクトのパラメータ、メソッドおよび属性/パラメータにバインドされるプレースホルダELを示します。

RESTデータ・ソースでGET操作とPUT操作をサポートしていることを前提とします。

- GETの場合 - idに基づいて従業員を取得します。

- 問合せパラメータ: id

- レスポンス・ペイロード: <employee><id>1</id><name>Arnold</name></employee>

- PUTの場合 - 従業員を更新します。

- リクエスト・ペイロード: <employee><id>1</id><name>Arnold</name></employee>

注意:
リクエスト・ペイロードには、更新の適用先となるidが含まれています。

この例の視覚化テンプレートは、次のようになります。

<?xml version='1.0' encoding='UTF-8'?>
<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" version="2.1" xmlns:af="http://xmlns.oracle.com/adf/faces/rich"
xmlns:f="http://java.sun.com/jsf/core">
<af:panelGridLayout id="pgl1">
<af:gridRow id="gr1">
<af:gridCell halign="stretch" valign="stretch" id="gc3">
<af:panelHeader text="Update portal details" id="ph3"/>
<af:panelFormLayout id="pfl4">
<af:inputText label="id" editable="always" value="#{owcp.appsint.parameter('id','','','GET.id','')}" id="search1"/>
<af:spacer height="20" id="s2"/>
<af:button text="Search emp" id="b1" actionListener="#{owcp.appsint.method('Search emp','','None','GET','')}"/>
<af:inputText label="name" value="#{owcp.appsint.inoutdata('name','','','GET.employee.name','PUT.employee.name')}"
id="it8" partialTriggers="::b1"/>
<af:inputText label="id" value="#{owcp.appsint.inoutdata('id','','','GET.id','PUT.employee.id')}"
id="it10" partialTriggers="::b1"/>
<af:spacer height="20" id="s6"/>
<af:button text="Update employee" id="b3" actionListener="#{owcp.appsint.method('update employee','','None','PUT','')}"/>
</af:panelFormLayout>
</af:gridCell>
</af:gridRow>
</af:panelGridLayout>
</jsp:root>

9.4 視覚化テンプレートの公開

WebCenter Portalアセット・アプリケーションを作成し、視覚化テンプレートのJSFFファイルを編集したら、次の工程はテンプレートを公開してWebCenter Portalでテストします。視覚化テンプレートを共有アセットとしてWebCenter Portalに公開する、またはポータル・アセットとして特定のポータルに公開する方法の詳細は、「WebCenter Portalアセットの公開」を参照してください。

9.5 実行時の処理内容

アプリケーション・スペシャリストまたはポータル・マネージャが実行時にデータ視覚化を構成し、カスタム視覚化テンプレートを選択すると、WebCenter Portalでは、ビジネス・オブジェクトの属性にバインドする必要があるプレースホルダELに基づいてウィザードの「オプション」ページが動的にレンダリングされます。

図9-4に、データ視覚化の定義ウィザードで選択したカスタム視覚化テンプレートの「オプション」ページの例を示します。

図9-4 データ視覚化の定義ウィザード: 「オプション」ページ

データ視覚化の定義ウィザードでユーザーが「保存」をクリックすると、WebCenter Portalでは、視覚化テンプレートに選択したビジネス・オブジェクトの属性が割り当てられます。また、ページ定義も関連情報で更新されます。たとえば、バインディング前の図9-4に示すPartner Nameパラメータ値の視覚化テンプレート・コードは次のとおりです。

...
<af:panelLabelAndMessage label="Partner Name" id="plam3">
<af:inputText simple="true" value="#{owcp.appsint.parameter('Partner Name','','None','GET.NAME','')}" id="it7"/>
</af:panelLabelAndMessage>
...

バインディング後、視覚化フラグメントは次のようになります。

...
<af:panelLabelAndMessage label="Partner Name" id="plam3">
<af:inputText simple="true" value="#{bindings.name.inputValue}" id="it7"/>
</af:panelLabelAndMessage>
...

10 コンテンツ・プレゼンタ表示テンプレートの開発

この章では、Oracle JDeveloperを使用して、WebCenter Portalで使用するための新しいコンテンツ・プレゼンタ表示テンプレートを作成、編集および公開する方法について説明します。

注意:

コンテンツ・プレゼンタでは、Oracle WebCenter Content Serverベースのコンテンツのみを使用できます。他のコンテンツ・リポジトリ接続タイプはサポートされません。

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

- コンテンツ・プレゼンタ表示テンプレートの開発の概要

- コンテンツ・プレゼンタ表示テンプレートの作成

- コンテンツ・プレゼンタ表示テンプレートの編集

- コンテンツ・プレゼンタ表示テンプレートの公開

- コンテンツ・プレゼンタ表示テンプレートのパフォーマンスの最適化

- コンテンツ・プレゼンタの使用(ヒント、チュートリアルおよび例)

10.1 コンテンツ・プレゼンタ表示テンプレートの開発の概要

コンテンツ・プレゼンタ表示テンプレートとは、コンテンツ・プレゼンタがポータル・ページでコンテンツ・アイテム(イメージやテキストなど)をレンダリングする方法を定義するJSFFファイル(JSFページ・フラグメント)です。

WebCenter Portalには即時利用可能な表示テンプレートがいくつか装備されており、これらを使用してすぐに作業を開始できますが、特定の表示要件を満たすために独自のテンプレートを作成することもできます。

コンテンツ・プレゼンタ表示テンプレートが値を提供する標準的な状況を次に示します。

- ページの異なる部分に対して異なるレイアウトを提供します。たとえば、同じページに異なるソースからの記事があり、各記事に独自のレイアウトが必要な場合が考えられます(詳細は、「複数アイテムの表示テンプレートの定義方法」を参照)。

- 表示デバイスの機能に基づいてコンテンツを表示します。表示デバイスが標準モニター、タブレット、スマートフォンのどれかに応じて、表示テンプレートを提供できます(詳細は、「レスポンシブ・テンプレートの使用方法」を参照)。

コンテンツ・プレゼンタ表示テンプレートを使用してコンテンツを使用可能にすることによって、手動で個々のレイアウトを作成することなく、標準化されたテンプレートで複雑な表示問題を解決できます。他のユーザーが表示テンプレートを使用できるようにすると、開発者を介さずに、事前に定義された部署または会社の標準に基づいてレイアウトの要件を解決できます。

ヒント:

サンプル表示テンプレートは$ORACLE_HOME/jdeveloper/webcenter/samples/contentpresenterに格納されています。これらのサンプル・ファイルは、Oracle JDeveloperに対するWebCenter Portalの拡張機能の一部としてインストールされています。

表示テンプレートでは充実したADFコンポーネントをすべて使用できるので、コンテンツを表示するために堅牢で人目を引くテンプレートをすばやく簡単に作成できます。ただし、テンプレートでこれらのコンポーネントを使用する必要はありません。

コンテンツ・プレゼンタ表示テンプレートでは、単一コンテンツ・アイテム、複数コンテンツ・アイテムまたは双方の組合せを処理できます。たとえば、複数コンテンツ・アイテムのテンプレートで各アイテムのタブをレンダリングしてから、単一アイテムのテンプレートをコールして選択アイテムの詳細をレンダリングできます。

各コンテンツ・アイテムは、Oracle WebCenter Content Serverリポジトリで定義された特定のコンテンツ・タイプに関連付けらます。コンテンツ・タイプはコンテンツ・アイテムのプロパティを定義します。コンテンツ・タイプはWebCenter Content Serverプロファイル定義とSite Studioリージョン定義にマップできます。

ヒント:

コンテンツ・プレゼンタ表示テンプレートを使用して、Site Studioリージョン・テンプレートではなくSite StudioとWebCenter Portalを統合することをお薦めします。推奨フローは次のとおりです。

- Site Studioでリージョン定義を開発します。

- JDeveloperを使用して、リージョン定義を参照するコンテンツ・プレゼンタ表示テンプレートを開発します。

- テンプレートをWebCenter Portalに公開します。

- コンテンツ・プレゼンタを使用して、コンテンツをレンダリングし、ユーザーがコンテンツを提供できるようにします。

コンテンツ・タイプはコンテンツ・リポジトリ(WebCenter Content Server)で作成されます。コンテンツ・プレゼンタ表示テンプレートの開発者は、選択されたコンテンツ・アイテムのページ上での表示方法を定義できるように、関連付けられたコンテンツ・タイプに定義されたプロパティの名前を知っておくことが必要です。

ヒント:

WebCenter Content Serverで定義されている既存のコンテンツ・タイプのプロパティを判断する方法の1つとして、ポータルの「コンテンツ・プレゼンタ構成」ダイアログを使用します。この方法の詳細は、「コンテンツ・タイプのプロパティ名の見つけ方」を参照してください。

実行時に権限のあるエンド・ユーザーは、「コンテンツ・プレゼンタ構成」ダイアログで表示テンプレートを選択できます。コンテンツ・プレゼンタ・テンプレートの使用時期と使用方法の決定、およびベスト・プラクティスの詳細は、次のブログ・エントリを参照してください。

http://www.ateam-oracle.com/portal-and-content-content-integration-best-practices

10.2 コンテンツ・プレゼンタ表示テンプレートの作成

この項では、新しいカスタム視覚化テンプレートの作成方法について説明します。内容は次のとおりです。

- コンテンツ・プレゼンタ表示テンプレートの作成方法

- コンテンツ・プレゼンタ表示テンプレートに関する必知事項

10.2.1 コンテンツ・プレゼンタ表示テンプレートの作成方法

この項では、新しいコンテンツ・プレゼンタ表示テンプレート用にWebCenter Portalアセット・アプリケーションを作成する方法について説明します。

コンテンツ・プレゼンタ表示テンプレート用にWebCenter Portalアセット・アプリケーションを作成するには:

1. 「アセット・タイプ」に「コンテンツ・プレゼンタ・テンプレート - 単一のアイテム」または「コンテンツ・プレゼンタ・テンプレート - 複数のアイテム」のいずれかを指定して、アセット・アプリケーションを作成します(図10-1)。

図10-1 「コンテンツ・プレゼンタ・テンプレート」アセット・タイプ

WebCenter Portalアセット・アプリケーションの作成の詳細は、「WebCenter Portalアセット・アプリケーションの作成」を参照してください。コンテンツ・プレゼンタ表示テンプレート用にアセット・アプリケーションを作成する際に作成されるアーティファクトの詳細は、「コンテンツ・プレゼンタ表示テンプレートに関する必知事項」を参照してください。

2. アプリケーション・ナビゲータで、新規作成したコンテンツ・プレゼンタ表示テンプレートのページ・フラグメント・ファイルを右クリックし(図10-2)、「開く」を選択して「ソース」ビューに切り替えます。

図10-2 コンテンツ・プレゼンタ表示テンプレートのページ・フラグメント・ファイル

3. 続いて「コンテンツ・プレゼンタ表示テンプレートの編集」の説明に従ってページ・フラグメントの内容を編集します。

10.2.2 コンテンツ・プレゼンタ表示テンプレートに関する必知事項

コンテンツ・プレゼンタ表示テンプレートの定義方法は、ニーズに応じて異なります。一般的には、コンテンツの特定単一アイテムについて表示テンプレートを定義してから、単一アイテムの表示テンプレートへのコールを含む複数コンテンツ・アイテムの表示テンプレートを定義します。

視覚化テンプレート・アセット・アプリケーションを作成すると、次のアーティファクトとともにデフォルト・テンプレートが生成されます。

- ビュー・フラグメント・ファイル(ContentPresenterTemplate-SingleItem1.jsffなど)

このファイルは図10-3に示すようにアプリケーション・ナビゲータに表示されます。

図10-3 コンテンツ・プレゼンタ表示テンプレート・アセット・アプリケーションのアーティファクト

テンプレート定義には、次のように他の表示テンプレートへのコールを含めることができます。

- 単一コンテンツ・アイテムの表示テンプレートは、別の単一コンテンツ・アイテムの表示テンプレートをコールできます。

- 複数コンテンツ・アイテムの表示テンプレートは、単一コンテンツ・アイテムの表示テンプレートをコールできます(次の例を参照)。

- 複数コンテンツ・アイテムの表示テンプレートは、別の複数コンテンツ・アイテムの表示テンプレートをコールできます。

コンテンツ・プレゼンタ表示テンプレートを作成する際の基本的なタスクは、次のとおりです。

- 単一アイテムと複数アイテムのいずれの表示テンプレートを作成するかを決定します。「単一アイテムの表示テンプレートの定義方法」および「複数アイテムの表示テンプレートの定義方法」を参照してください。

- 選択したコンテンツ・アイテムについてどのような情報を表示するかを決定します。また、この情報を取得して表示するために、たとえば、WebCenter PortalのEL式をテンプレートで使用することも検討してください。EL式の使用方法の詳細は、「EL式を使用したコンテンツ・アイテム情報の取得方法」および「式言語式」を参照してください。

- テンプレートのルック・アンド・フィールをデザインします。標準のJSFF構造に加えて、表示テンプレートではADFコンポーネントも使用できます(『Oracle Fusion Middleware Oracle ADF FacesによるWebユーザー・インタフェースの開発』を参照)。

- テンプレートを共有アセットまたはポータル固有のアセットとして公開します。「コンテンツ・プレゼンタ表示テンプレートの公開」を参照してください。

- 『Oracle Fusion Middleware Oracle WebCenter Portalの管理』のコンテンツ・プレゼンタのキャッシュ設定の変更に関する項の説明に従って、本番環境(オプションですが推奨)およびHA環境(必須)用のキャッシュ・メカニズムとしてCoherenceを使用するようにコンテンツ・プレゼンタを構成します。

10.3 コンテンツ・プレゼンタ表示テンプレートの編集

コンテンツ・プレゼンタ表示テンプレートの初期フレームワークを作成したら、編集してそのテンプレートを定義する必要があります。

この項では、次の項目について説明します。

- 単一アイテムの表示テンプレートの定義方法

- 単一コンテンツ・アイテムのコンテンツ表示テンプレートのタグ

- 複数アイテムの表示テンプレートの定義方法

- 複数コンテンツ・アイテムのコンテンツ表示テンプレートのタグ

- レスポンシブ・テンプレートの使用方法

- レスポンシブ・テンプレートの拡張方法

- コンテンツ・プレゼンタ表示テンプレートでのイメージ・レンディションの使用方法

- EL式を使用したコンテンツ・アイテム情報の取得方法

- コンテンツ・タイプのプロパティ名の見つけ方

- 表示テンプレートでの外部ファイルの参照方法

- カスタム・ビューでのSite Studioリージョン要素の参照方法

10.3.1 単一アイテムの表示テンプレートの定義方法

コンテンツ・プレゼンタ表示テンプレートを作成する単一コンテンツ・アイテムの例を次に示します。

- ページ上で特定ルック・アンド・フィールで表示する個々のアイテム。

- 特定タイプのアイテムの異なるビュー(例: 記事の短いビューと詳細ビュー)。

- 類似アイテムの異なるバージョン(例: グループ別に異なるプロパティ・セットを使用して異なる方法でフォーマットされるプレス・リリース)。

単一アイテムの表示テンプレートを定義するには:

1. アプリケーション・ナビゲータで、表示テンプレートのJSFFファイルを右クリックし、「開く」を選択します。

2. 必要に応じて、「ウィンドウ」→「コンポーネント」の順に選択してコンポーネント・パレットを開きます。

3. コンポーネント・パレット最上部のドロップダウン・リスト(図10-4)で、次の手順に従います。

- 表示テンプレート・タグのリストは、「WebCenterコンテンツ表示テンプレート」を選択します。

- renderPropertyタグは、「WebCenterコンテンツ管理フェース」を選択します。

図10-4 コンポーネント・パレットのコンテンツ表示テンプレート・タグ

4. 「ソース」ビューで、必要な表示テンプレート・タグをコンポーネント・パレットからページにドラッグ・アンド・ドロップして、テンプレートを定義します。各タグと必須のパラメータ値の詳細は、「単一コンテンツ・アイテムのコンテンツ表示テンプレートのタグ」を参照してください。

次の2つの例は、単一コンテンツ・アイテムの表示テンプレートのサンプル定義を示しています。これらの例のユース・ケースでは、特定のス類のドキュメント(プレス・リリース)が、会社内の2つの異なる部門によって作成され、それぞれの部門で独自のコンテンツ・タイプとプロパティを定義しています。これらのサンプル・コンテンツ・プレゼンタ表示テンプレートでは、これらの2つの異なるコンテンツ・タイプを一貫した方法で表示できます。

1つ目の例に示すテンプレートは、プレス・リリース・ドキュメントの見出しを表すxHeadingという名前のプロパティと、そのドキュメントの場所を表すxDestinationUrlを使用するプレス・リリースを処理します。所定のコンテンツ・タイプに対するこのようなプロパティ名の取得方法を学ぶには、「コンテンツ・タイプのプロパティ名の見つけ方」を参照してください。

<?xml version = '1.0'?>
<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page"
version="2.1"
xmlns:af="http://xmlns.oracle.com/adf/faces/rich"
xmlns:dt="http://xmlns.oracle.com/webcenter/content/templates">
<dt:contentTemplateDef var="node">
<af:goImageLink text="#{node.propertyMap['xHeading'].value}"
id="gil1"
icon="#{node.icon.smallIcon}"
destination="#{node.propertyMap['xDestinationUrl'].value}"
targetFrame="_blank">
</af:goImageLink>
</dt:contentTemplateDef>
</jsp:root>

次の例に示すテンプレートは、プレス・リリース・ドキュメントの見出しを表すdDocTitleという名前のプロパティと、そのドキュメントの場所を表すxLinkUrlを使用するプレス・リリースを処理します。

<?xml version = '1.0'?>
<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page"
version="2.1"
xmlns:af="http://xmlns.oracle.com/adf/faces/rich"
xmlns:dt="http://xmlns.oracle.com/webcenter/content/templates">
<dt:contentTemplateDef var="node">
<af:goImageLink text="#{node.propertyMap['dDocTitle'].value}"
id="gil1"
icon="#{node.icon.smallIcon}"
destination="#{node.propertyMap['xLinkUrl'].value}"
targetFrame="_blank">
</af:goImageLink>
</dt:contentTemplateDef>
</jsp:root>

10.3.2 単一コンテンツ・アイテムのコンテンツ表示テンプレートのタグ

単一コンテンツ・アイテムの表示テンプレートの定義では、次に示すJSPタグを使用します。

表10-1 単一コンテンツ・アイテムのコンテンツ表示テンプレートのタグ

JSPタグ

説明

例

contentTemplateDef

必須。単一コンテンツ・アイテムのテンプレートを定義します。

属性:

var - この表示テンプレートによりレンダリングされるコンテンツ・ノードを指定します。テンプレート定義コードで、「コンテンツ・アイテムに関する基本情報の取得方法」に記載されているEL式を使用して、ノードに関する必須情報を取得できます。

<dt:contentTemplateDef var="node">
<af:outputText value="#{node.name}" />
</dt:contentTemplateDef>

renderProperty

オプション。指定ノード・プロパティの文字列値をインラインで取得およびレンダリングします。

属性:

id - このコンポーネントを識別します。この値は、ネーミング・コンテナである最寄りの親コンポーネント内で一意であることが必要です。

name - 取得するプロパティの名前を指定します。これがシステム・プロパティ(cm_createdBy、cm_createdDate、cm_modifiedDateおよびcm_path)の場合は、ノード上の値が使用されます。指定しないと、primaryPropertyが定義されている場合、これが使用されます。

node - 使用するノードを指定します。この値は、マネージドBeanにバインドされた属性またはリクエスト属性変数のいずれかになります。

blockSize - バイナリ・プロパティのバイト列を読み込むための、ブロック・サイズをバイト数で指定します。デフォルトは2048バイトです。

startIndex - 印刷を開始する位置のインデックス(起点は0)をドキュメントのバイト数で指定します。デフォルトは0です。

endIndex - 印刷を停止する位置のインデックス(起点は0)をドキュメントのバイト数で指定します。デフォルトはblockSizeの値になります。

rendered - (レンダリング・レスポンス・フェーズ中に)このコンポーネントをレンダリングするか以降の任意のフォーム実行時に処理するかどうかを指定します。デフォルト値はtrue。

<!--
Handling of text-based primary
properties (HTML, text, etc.).
-->
<dt:contentTemplateDef var="node">
<cmf:renderProperty id="rp1"
name="#{node.primaryProperty.name}"
node="#{node}"/>
</dt:contentTemplateDef>

contentTemplate

オプション。contentTemplateDefの下にネストされます。

別の単一アイテム・テンプレートをコールします。

属性:

node - 必須。表示される必要があるコンテンツ・リポジトリ・ノードを指定します。

nodesHint - オプション。表示テンプレートが反復コンポーネントでコールされると、すべての可能なテンプレートの事前包含ができます。contentTemplateがcontentTemplateDefタグの内部で使用されている場合は、この属性は必要ありません。

view - オプション。ターゲット・ビュー名を指定します。

id - オプション。JSFコンポーネントIDを指定します。

rendered - オプション。コンポーネントがレンダリングされるかどうかを指定します。

<dt:contentTemplateDef var="node">
<af:outputText value="#{node.name}" >
<dt:contentTemplate node="#{node}"
view="templates.pressrelease.item"
/>
</af:outputText>
</dt:contentTemplateDef>

10.3.3 複数アイテムの表示テンプレートの定義方法

コンテンツ・プレゼンタ表示テンプレートを作成する複数コンテンツ・アイテムの例を次に示します。

- 1つのページに表示する一群の類似アイテム(例: 本のリストや写真による従業員名簿)。

- 問合せ結果(例: 先週変更された全ドキュメント)。

- Oracle WebCenter Content Serverフォルダの全ドキュメントのリスト。

コンテンツ・プレゼンタ表示テンプレートでは、単一アイテムと複数アイテムを組み合せることもできます。たとえば、複数コンテンツ・アイテムのテンプレートで各アイテムのタブをレンダリングしてから、単一アイテムのテンプレートをコールして選択アイテムの詳細をレンダリングできます。これを実行する方法の例は、次のブログ・エントリを参照してください。

http://www.ateam-oracle.com/enable-content-editing-of-iterative-components

複数アイテムの表示テンプレートを定義するには:

1. アプリケーション・ナビゲータで、表示テンプレートのJSFFファイルを右クリックし、「開く」を選択します。

2. 必要に応じて、「ウィンドウ」→「コンポーネント」の順に選択してコンポーネント・パレットを開きます。

3. コンポーネント・パレット最上部のドロップダウン・リスト(図10-5)で、次の手順に従います。

- 表示テンプレート・タグのリストは、「WebCenterコンテンツ表示テンプレート」を選択します。

- renderPropertyタグは、「WebCenterコンテンツ管理フェース」を選択します。

図10-5 コンポーネント・パレットのコンテンツ表示テンプレート・タグ

4. 「ソース」ビューで、必要な表示テンプレート・タグをコンポーネント・パレットからページにドラッグ・アンド・ドロップします。各タグと必須のパラメータ値の詳細は、「複数コンテンツ・アイテムのコンテンツ表示テンプレートのタグ」を参照してください。

次の例は、複数コンテンツ・アイテムの表示テンプレートのサンプル定義を示しています。

このテンプレート定義では、参照されるビュー(view="mycorp.content.templates.pressrelease.listitem")に従って、表示するように選択されたデータ・アイテムを順に処理します。

<?xml version = '1.0'?>
<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" version="2.1"
xmlns:af="http://xmlns.oracle.com/adf/faces/rich"
xmlns:dt="http://xmlns.oracle.com/webcenter/content/templates">
<dt:contentListTemplateDef var="nodes">
<af:panelGroupLayout layout="scroll" id="nodeListPanel" valign="middle">
<af:iterator rows="0" var="node" varStatus="iterator" value="#{nodes}">
<dt:contentTemplate node="#{node}"
view="mycorp.content.templates.pressrelease.listitem"
nodesHint="#{nodes}"/>
</af:iterator>
</af:panelGroupLayout>
</dt:contentListTemplateDef>
</jsp:root>

10.3.4 複数コンテンツ・アイテムのコンテンツ表示テンプレートのタグ

複数コンテンツ・アイテムの表示テンプレートの定義では、次に示すJSPタグを使用します。

表10-2 複数コンテンツ・アイテムのコンテンツ表示テンプレートのタグ

JSPタグ

説明

例

contentListTemplateDef

必須。複数コンテンツ・アイテムのテンプレートを定義します。

属性:

var - この表示テンプレートによりレンダリングされるコンテンツ・ノードを指定します。テンプレート定義コードで、「コンテンツ・アイテムに関する基本情報の取得方法」に記載されているEL式を使用して、ノードに関する必須情報を取得できます。

<dt:contentListTemplateDef var="nodes">
<af:iterator value="#{nodes}" var="node">
<af:outputText value="#{node.name}" />
</af:iterator>
</dt:contentListTemplateDef>

contentListTemplate

オプション。contentListTemplateDefの下にネストされます。

別の複数アイテム・テンプレートをコールします。

属性:

nodes - 必須。表示する必要があるVCRノードのリストを提供します

category - 必須。ターゲット・テンプレートのカテゴリを指定します。

view - 必須。ターゲット・ビュー名を指定します。

id - オプション。JSFコンポーネントIDを指定します。

rendered - オプション。コンポーネントがレンダリングされるかどうかを指定します。

<dt:contentListTemplateDef var="nodes">
<!--
Reuse the default bulleted list view, but
indent it with a <blockquote>
-->
<f:verbatim>
<blockquote>
</f:verbatim>
<dt:contentListTemplate nodes="#{nodes}"
category="oracle.webcenter.content.
templates.default.category"
view="oracle.webcenter.content.
templates.default.list.bulleted"/>
<f:verbatim>
</blockquote>
</f:verbatim>
</dt:contentListTemplateDef>

contentTemplate

オプション。contentListTemplateDefの下にネストされます。

単一アイテム・テンプレートをコールします。

属性:

node - 必須。表示される必要があるコンテンツ・リポジトリ・ノードを指定します。

nodesHint - オプション。表示テンプレートが反復コンポーネントでコールされると、すべての可能なテンプレートの事前包含ができます。contentTemplateがcontentListTemplateDefタグの内部で使用されている場合、この属性は通常必要とされます。

view - オプション。ターゲット・ビュー名を指定します。

id - オプション。JSFコンポーネントIDを指定します。

rendered - オプション。コンポーネントがレンダリングされるかどうかを指定します。

<dt:contentListTemplateDef var="nodes">
<af:iterator rows="0" var="node"
varStatus="iterator" value="#{nodes}">
<dt:contentTemplate node="#{node}"
view="templates.pressrelease.listitem"
nodesHint="#{nodes}"/>
</af:iterator>
</dt:contentListTemplateDef>

10.3.5 レスポンシブ・テンプレートの使用方法

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

- レスポンシブ・テンプレートについて

- レスポンシブ・テンプレートの前提条件

- 複数記事の表示

- CSS3 Media Queriesの使用

10.3.5.1 レスポンシブ・テンプレートについて

CSS3 Media Queriesを使用すると、コンテンツをレンダリングして、画面解像度などの条件に適応できます。

デフォルトのコンテンツ・プレゼンタ表示テンプレート「記事ビュー」および「全記事ビュー」は、コンテンツ・プレゼンタ表示テンプレートでレスポンシブ・レイアウト用にCSS3 Media Queriesをどのように使用できるかの例です。これらのレスポンシブ・テンプレートの拡張方法の詳細は、「レスポンシブ・テンプレートの拡張方法」を参照してください。スマートフォン、タブレットなどのモバイル・デバイス用のビューポート設定の最適化の詳細は、『Oracle Fusion Middleware Oracle WebCenter Portalでのポータルの構築』のモバイル・デバイス用のポータルの最適化に関する項を参照してください。

10.3.5.2 レスポンシブ・テンプレートの前提条件

デフォルトのコンテンツ・プレゼンタ・テンプレート「記事ビュー」および「全記事ビュー」は、Site Studio RD_ARTICLEリージョン定義に依存します。

そのため、「記事ビュー」および「全記事ビュー」のコンテンツ・プレゼンタ表示テンプレートを使用可能にするには、Site StudioをOracle WebCenter Content Serverで有効にする必要があります。

次の手順に従って、Site Studioを有効にし、WebCenter Content ServerをRD_ARTICLEリージョン定義でシードします。

1. Site Studioを有効にします(『Oracle Fusion Middleware Oracle WebCenter Portalでのポータルの構築』のSite Studio統合の理解に関する項を参照)。

2. Site Studioが有効になったら、WebCenter Portalを起動(または再起動)します(これで、RD_ARTICLEリージョン定義がシードされます)。

10.3.5.3 複数記事の表示

次の例のテンプレート定義では、表示するために選択されたデータ・アイテムを順に処理し、3つのスタイル・クラスを使用します。

- article: 各コンテンツ・アイテムに適用

- article-3: ページが3列の行に分割される場合、最初の列に配置される各コンテンツ・アイテムに適用

- article-2: ページが2列の行に分割される場合、最初の列に配置される各コンテンツ・アイテムに適用

スタイル・クラスは、articles.cssスタイル・シートに定義されています。

<?xml version = '1.0'?>
<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" version="2.1"
xmlns:af="http://xmlns.oracle.com/adf/faces/rich"
xmlns:dt="http://xmlns.oracle.com/webcenter/content/templates"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:rah="http://xmlns.oracle.com/webcenter/resourcehandler"
<dt:contentListTemplateDef var="nodes">
<af:resource type="css" source="/oracle/webcenter/content/templates/seeded/articles.css"/>
<af:iterator rows="0" var="node" varStatus="iterator" value="#{nodes}"
id="it0">
<h:panelGroup styleClass="#{(iterator.index % 3 == 0) ? 'article-3 ' : ''}#{(iterator.index % 2 == 0) ? 'article-2 ' : ''}article"
id="pg1">
<af:commandLink immediate="true" partialSubmit="true" id="cl2">
<rah:resourceActionBehavior id="rah1"
serviceId="oracle.webcenter.content.presenter"
resourceId="#{node.id}"
resourceTitle="#{node.propertyMap['RD_ARTICLE:TITLE'].asTextHtml}"
useResourcePopup="never"/>
<f:attribute name="taskFlowInstId"
value="a5fafea8-90e6-4972-997d-314401b6c98b"/>
<f:attribute name="datasourceType" value="dsTypeSingleNode"/>
<f:attribute name="datasource"
value="#{node.id.repositoryName}#dDocName:#{node.propertyMap['dDocName'].value}"/>
<f:attribute name="templateView"
value="oracle.webcenter.content.templates.sitestudio.fullarticle"/>
<f:attribute name="regionTemplate" value="#{false}"/>
<af:outputText value="#{node.propertyMap['RD_ARTICLE:IMAGE'].asTextHtml}"
escape="false" id="ot4"/>
<tr:panelHeader text="#{node.propertyMap['RD_ARTICLE:TITLE'].asTextHtml}"
id="ph1">
<af:outputText value="#{node.propertyMap['RD_ARTICLE:SUMMARY'].asTextHtml}"
escape="false" id="ot3"/>
</af:panelHeader>
</af:commandLink>
</h:panelGroup>
</af:iterator>
</dt:contentListTemplateDef>
</jsp:root>

10.3.5.4 CSS3 Media Queriesの使用

次の例のスタイル・シートでは、ブラウザの幅に応じて異なる方法でコンテンツをレンダリングするために、Media Queriesを使用します。

/* Default styles */
.article {
display: block;
float: left;
width: 31.623931623931625%;
margin-left: 2.564102564102564%;
margin-bottom: 1em;
}
.article-3 {
margin-left: 0;
clear: both;
}
.article img {
width: 100%;
margin: 0 0 .25em;
float: none;
padding-top: 0;
display: block;
border: 0;
}
.article h1 {
font-size: 1.5em;
}

@media only screen and (max-width : 480px) {
/* up to width of iPhone (excluding iPhone 5 in landscape) */
.article {
margin-top: .5em;
float: left;
display: inline;
width: 100%;
margin-left: 0;
}
.article-3 {
width: 100%;
clear: none;
}
.article img {
margin-right: 4%;
width: 48%;
float: left;
}
.article {
font-size: 1em;
}
.article h1 {
font-size: 1.25em;
}
}

@media only screen and (min-width : 481px) and (max-width : 780px) {
/* up to the width of iPad in portrait and iPhone 5 in landscape */
.article {
display: block;
float: left;
width: 48.71794871794871%;
margin-left: 2.564102564102564%;
clear: none;
}
.article-3 {
margin-left: 2.564102564102564%;
clear: none;
}
.article-2 {
margin-left: 0;
clear: both;
}
.article h1 {
font-size: 1.25em;
}
}

@media only screen and (min-width : 769px) and (max-width : 1024px) {
/* up to the width of iPad in landscape */
}

@media only screen and (min-width : 1025px) {
/* desktop */
}

10.3.6 レスポンシブ・テンプレートの拡張方法

次の各項では、デフォルトのテンプレートがローカル要件を満たさない場合に、それらの変更に必要な手順を説明します。

スマートフォン、タブレットなどのモバイル・デバイス用のビューポート設定の最適化の詳細は、『Oracle Fusion Middleware Oracle WebCenter Portalでのポータルの構築』のモバイル・デバイス用のポータルの最適化に関する項を参照してください。

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

- 「記事ビュー」テンプレートの拡張方法

- 「全記事ビュー」テンプレートの拡張方法

- デフォルトのテンプレートの適応方法

10.3.6.1 「記事ビュー」テンプレートの拡張方法

「記事ビュー」テンプレートを拡張するには、次の手順を実行します。

1. 複数アイテムを表示するために空のテンプレートを作成し(「複数アイテムの表示テンプレートの定義方法」を参照)、JDEVELOPER/webcenter/samples/contentpresenter/ディレクトリにあるarticles.jsffのコンテンツを空のテンプレートにコピーします。

2. 次のように変更して、artices.jsffによって使用されるCSSを新しいテンプレートに埋め込みます。

<af:resource type="css" source="/oracle/webcenter/content/templates/seeded/articles.css"/>

変更後:

<af:resource type="css">
/* Default styles */
.article {
display: block;
float: left;
width: 31.623931623931625%;
margin-left: 2.564102564102564%;
margin-bottom: 1em;
}
.article-3 {
margin-left: 0;
clear: both;
}
.article img {
width: 100%;
margin: 0 0 .25em;
float: none;
padding-top: 0;
display: block;
border: 0;
}
.article h1 {
font-size: 1.5em;
}

@media only screen and (max-width : 480px) {
/* up to width of iPhone */
.article {
margin-top: .5em;
float: left;
display: inline;
width: 100%;
margin-left: 0;
}
.article-3 {
width: 100%;
clear: none;
}
.article img {
margin-right: 4%;
width: 48%;
float: left;
}
.article {
font-size: 1em;
}
.article h1 {
font-size: 1.25em;
}
}

@media only screen and (min-width : 481px) and (max-width : 780px) {
/* up to the width of iPad in portrait */
.article {
display: block;
float: left;
width: 48.71794871794871%;
margin-left: 2.564102564102564%;
clear: none;
}
.article-3 {
margin-left: 2.564102564102564%;
clear: none;
}
.article-2 {
margin-left: 0;
clear: both;
}
.article h1 {
font-size: 1.25em;
}
}

@media only screen and (min-width : 769px) and (max-width : 1024px) {
/* up to the width of iPad in landscape */
}

@media only screen and (min-width : 1025px) {
/* desktop */
}
</af:resource>

3. 要件に合うように新しいテンプレートを編集します(「デフォルトのテンプレートの適応方法」参照)。

4. 新しいテンプレートをポータル・アセットとして公開します(「コンテンツ・プレゼンタ表示テンプレートの公開」を参照)。

10.3.6.2 「全記事ビュー」テンプレートの拡張方法

次の手順に従って、「全記事ビュー」テンプレートを拡張します。

1. 単一コンテンツ・アイテムを表示するために空のテンプレートを作成し(「単一アイテムの表示テンプレートの定義方法」を参照)、JDEVELOPER/webcenter/samples/contentpresenter/ディレクトリにあるfull-article.jsffのコンテンツを空のテンプレートにコピーします。

2. 次のように変更して、full-artice.jsffによって使用されるCSSを新しいテンプレートに埋め込みます。

<af:resource type="css" source="/oracle/webcenter/content/templates/seeded/articles.css"/>

変更後:

<af:resource type="css">
/* Default styles */
.full-article h1 {
font-size: 1.5em;
}
.full-article-image img {
margin-left: 4%;
width: 48%;
float: right;
}

@media only screen and (max-width : 480px) {
/* up to width of iPhone */
.full-article-image img {
margin-left: 0;
width: 100%;
float: none;
}
}

@media only screen and (min-width : 481px) and (max-width : 780px) {
/* up to the width of iPad in portrait */
}

@media only screen and (min-width : 769px) and (max-width : 1024px) {
/* up to the width of iPad in landscape */
}

@media only screen and (min-width : 1025px) {
/* desktop */
}
</af:resource>

3. 要件に合うように新しいテンプレートを編集します(「デフォルトのテンプレートの適応方法」参照)。

4. 新しいテンプレートをポータル・アセットとして公開します(「コンテンツ・プレゼンタ表示テンプレートの公開」を参照)。

10.3.6.3 デフォルトのテンプレートの適応方法

この項では、「記事ビュー」テンプレートおよび「全記事ビュー」テンプレートに対して行う変更と、その変更方法の概要について説明します。

次はその例です。

- Internet Explorer 8などの古いブラウザでレスポンシブ・レイアウトをサポートするようにテンプレートを更新する場合。

- 異なるリージョン定義を操作するするようにテンプレートを更新する場合。

以下の節ではこれらの拡張機能について説明します。

- 古いブラウザ用のレスポンシブ・レイアウトのサポート方法

- 異なるリージョン定義の使用方法

- テンプレートのレイアウトの更新方法

10.3.6.3.1 古いブラウザ用のレスポンシブ・レイアウトのサポート方法

現在のレスポンシブ・テンプレートはCSS3 Media Queriesに依存しますが、古いブラウザではサポートされていません。そのため、レスポンシブ・デザインを有効にするには、Media Queriesを受理してJavaScriptを使用できる、サード・パーティのJavaScriptライブラリを使用する必要があります。

古いブラウザ用にレスポンシブ・レイアウトをサポートするには:

1. サード・パーティのJavaScriptライブラリを格納するカスタム共有ライブラリをWebCenter Portal用に作成してデプロイします。

「共有ライブラリの開発」を参照してください。

2. サード・パーティのJavaScriptライブラリへの参照をテンプレートに追加します(path/to/3rd/party/library.jsはカスタム共有ライブラリ内のJavaScriptファイルへのパスです)。

<af:resource type="javascript" source="path/to/3rd/party/library.js"/>

10.3.6.3.2 異なるリージョン定義の使用方法

この項では、レスポンシブ・テンプレートでリージョン定義を変更する方法を示します。

たとえば、TITLE、LEAD、IMAGEおよびBODYという4つの要素(「カスタム・ビューでのSite Studioリージョン要素の参照方法」を参照)を持つRD_NEWSというリージョン定義があるとします。この場合、この新しいリージョン定義を参照するようにテンプレートを更新するには、RD_ARTICLESの参照をRD_NEWSに変更し、SUMMARYの参照をLEADに変更します。

ニュース・ビュー

このテンプレートは、「記事ビュー」テンプレートに基づいて(RD_NEWSタイプの)ニュース・アイテムのリストを表示します。

<?xml version = '1.0'?>
<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" version="2.1"
xmlns:af="http://xmlns.oracle.com/adf/faces/rich"
xmlns:dt="http://xmlns.oracle.com/webcenter/content/templates"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:rah="http://xmlns.oracle.com/webcenter/resourcehandler"
xmlns:tr="http://myfaces.apache.org/trinidad">
<dt:contentListTemplateDef var="nodes">
<af:resource type="css" source="/oracle/webcenter/content/templates/seeded/articles.css"/>
<af:iterator rows="0" var="node" varStatus="iterator" value="#{nodes}"
id="it0">
<h:panelGroup styleClass="#{(iterator.index % 3 == 0) ? 'article-3 ' : ''}#{(iterator.index % 2 == 0) ? 'article-2 ' : ''}article"
id="pg1">
<af:commandLink immediate="true" partialSubmit="true" id="cl2">
<rah:resourceActionBehavior id="rah1"
serviceId="oracle.webcenter.content.presenter"
resourceId="#{node.id}"
resourceTitle="#{node.propertyMap['RD_NEWS:TITLE'].asTextHtml}"
useResourcePopup="never"/>
<f:attribute name="taskFlowInstId"
value="a5fafea8-90e6-4972-997d-314401b6c98b"/>
<f:attribute name="datasourceType" value="dsTypeSingleNode"/>
<f:attribute name="datasource"
value="#{node.id.repositoryName}#dDocName:#{node.propertyMap['dDocName'].value}"/>
<f:attribute name="templateView"
value="oracle.webcenter.content.templates.newsitem"/>
<f:attribute name="regionTemplate" value="#{false}"/>
<af:outputText value="#{node.propertyMap['RD_NEWS:IMAGE'].asTextHtml}"
escape="false" id="ot4"/>
<tr:panelHeader text="#{node.propertyMap['RD_NEWS:TITLE'].asTextHtml}"
id="ph1">
<af:outputText value="#{node.propertyMap['RD_NEWS:LEAD'].asTextHtml}"
escape="false" id="ot3"/>
</tr:panelHeader>
</af:commandLink>
</h:panelGroup>
</af:iterator>
</dt:contentListTemplateDef>
</jsp:root>

ニュース・アイテム・ビュー

このテンプレートは、「全記事ビュー」テンプレートに基づいてニュース・アイテム全体(ビューID: oracle.webcenter.content.templates.newsitem)を表示します。

<?xml version = '1.0'?>
<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" version="2.1"
xmlns:af="http://xmlns.oracle.com/adf/faces/rich"
xmlns:dt="http://xmlns.oracle.com/webcenter/content/templates"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:tr="http://myfaces.apache.org/trinidad">
<dt:contentTemplateDef var="node">
<af:resource type="css" source="/oracle/webcenter/content/templates/seeded/articles.css"/>
<af:panelGroupLayout id="psl1" layout="vertical">
<tr:panelHeader text="#{node.propertyMap['RD_NEWS:TITLE'].asTextHtml}"
styleClass="full-article" id="ph1">
<tr:panelGroupLayout id="pgl1" styleClass="full-article-image">
<af:outputText value="#{node.propertyMap['RD_NEWS:IMAGE'].asTextHtml}"
escape="false" id="ot4"/>
</tr:panelGroupLayout>
<af:outputText value="#{node.propertyMap['RD_NEWS:BODY'].asTextHtml}"
escape="false" id="ot3"/>
</tr:panelHeader>
</af:panelGroupLayout>
</dt:contentTemplateDef>
</jsp:root>

10.3.6.3.3 テンプレートのレイアウトの更新方法

コンテンツにより適合するようにテンプレートのレイアウトを変更するとします。

たとえば、1列のレイアウトでは、記事の要約のテキストが長い場合、「記事ビュー」テンプレートはそのテキストをイメージの下にも表示します。

図10-6 広いレイアウトの記事

これを変更して、イメージの下にテキストが表示されないようにできます。

図10-7 狭いレイアウトの記事

これを行うには、「記事ビュー」テンプレートに基づいて新しいテンプレートを作成し、テキストのブロック(article-text)にスタイル・クラスを追加して、このスタイル・クラスの表示CSSプロパティを、狭いレイアウト用のtable-cellに設定します。

<?xml version = '1.0'?>
<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" version="2.1"
xmlns:af="http://xmlns.oracle.com/adf/faces/rich"
xmlns:dt="http://xmlns.oracle.com/webcenter/content/templates"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:rah="http://xmlns.oracle.com/webcenter/resourcehandler"
<dt:contentListTemplateDef var="nodes">
<af:resource type="css">
/* Default styles */
.article {
display: block;
float: left;
width: 31.623931623931625%;
margin-left: 2.564102564102564%;
margin-bottom: 1em;
}
.article-3 {
margin-left: 0;
clear: both;
}
.article img {
width: 100%;
margin: 0 0 .25em;
float: none;
padding-top: 0;
display: block;
border: 0;
}
.article h1 {
font-size: 1.5em;
}

@media only screen and (max-width : 480px) {
/* up to width of iPhone */
.article {
margin-top: .5em;
float: left;
display: inline;
width: 100%;
margin-left: 0;
}
.article-3 {
width: 100%;
clear: none;
}
.article img {
margin-right: 4%;
width: 48%;
float: left;
}
.article {
font-size: 1em;
}
.article h1 {
font-size: 1.25em;
}
/* Set the display CSS property to table-cell for the article-text style class in the narrow layout */
.article-text {
display: table-cell;
}
}

@media only screen and (min-width : 481px) and (max-width : 780px) {
/* up to the width of iPad in portrait */
.article {
display: block;
float: left;
width: 48.71794871794871%;
margin-left: 2.564102564102564%;
clear: none;
}
.article-3 {
margin-left: 2.564102564102564%;
clear: none;
}
.article-2 {
margin-left: 0;
clear: both;
}
.article h1 {
font-size: 1.25em;
}
}

@media only screen and (min-width : 769px) and (max-width : 1024px) {
/* up to the width of iPad in landscape */
}

@media only screen and (min-width : 1025px) {
/* desktop */
}
</af:resource>
<af:iterator rows="0" var="node" varStatus="iterator" value="#{nodes}"
id="it0">
<h:panelGroup styleClass="#{(iterator.index % 3 == 0) ? 'article-3 ' : ''}#{(iterator.index % 2 == 0) ? 'article-2 ' : ''}article"
id="pg1">
<af:commandLink immediate="true" partialSubmit="true" id="cl2">
<rah:resourceActionBehavior id="rah1"
serviceId="oracle.webcenter.content.presenter"
resourceId="#{node.id}"
resourceTitle="#{node.propertyMap['RD_ARTICLE:TITLE'].asTextHtml}"
useResourcePopup="never"/>
<f:attribute name="taskFlowInstId"
value="a5fafea8-90e6-4972-997d-314401b6c98b"/>
<f:attribute name="datasourceType" value="dsTypeSingleNode"/>
<f:attribute name="datasource"
value="#{node.id.repositoryName}#dDocName:#{node.propertyMap['dDocName'].value}"/>
<f:attribute name="templateView"
value="oracle.webcenter.content.templates.sitestudio.fullarticle"/>
<f:attribute name="regionTemplate" value="#{false}"/>
<af:outputText value="#{node.propertyMap['RD_ARTICLE:IMAGE'].asTextHtml}"
escape="false" id="ot4"/>
<af:panelHeader text="#{node.propertyMap['RD_ARTICLE:TITLE'].asTextHtml}"
id="ph1" styleClass="article-text">
<af:outputText value="#{node.propertyMap['RD_ARTICLE:SUMMARY'].asTextHtml}"
escape="false" id="ot3"/>
</af:panelHeader>
</af:commandLink>
</h:panelGroup>
</af:iterator>
</dt:contentListTemplateDef>
</jsp:root>

10.3.7 コンテンツ・プレゼンタ表示テンプレートでのイメージ・レンディションの使用方法

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

- イメージ・レンディションについて

- イメージ・レンディションの前提条件

- イメージ・ドキュメントのイメージ・レンディション情報の取得

- Site Studioリージョン定義のイメージ・レンディションの取得

10.3.7.1 イメージ・レンディションについて

異なる状況においては異なるイメージのレンディションを使用する場合があります。

たとえば、デスクトップ・ブラウザを使用してイメージを含むページを表示する場合、大きくて解像度の高いイメージを使用する場合があります。ただし、同じページをモバイル・デバイスで表示する場合、スクリーン・サイズは小さく、ダウンロード・スピードは遅くなることが予想されるため、解像度の高いイメージは適切でない可能性があります。モバイル・デバイスでは、小さくて解像度の低いバージョンやレンディションのイメージの方が適しています。コンテンツ・プレゼンタ表示テンプレートには、イメージのどのレンディションをどの状況で表示するかを指定する機能があります。

異なるイメージ・レンディションの使用を可能にするために、コンテンツ・プレゼンタ表示テンプレートではEL式を使用してどのイメージ・レンディションをいつ使用するかを決定できます。

注意:

イメージ・レンディションはCMISではサポートされていません。

10.3.7.2 イメージ・レンディションの前提条件

フル・イメージ・レンディションをサポートするには、イメージがチェックインされているOracle WebCenter Content ServerでDigital Asset Management (DAM)が有効になっている必要があります。

DAMが有効でない場合、webレンディションおよびthumbnailレンディションのみがそれぞれサポートされます。DAMの有効化の詳細は、『Oracle Fusion Middleware Oracle WebCenter Portalの管理』のDigital Asset Managerの有効化に関する項を参照してください。

DAMが有効な場合、イメージがチェックインする際に様々なレンディションが自動的に作成され、チェックイン時にレンディション・セットによって判断されます。DAMには組込みレンディション・セットがいくつか用意されていますが、WebCenter Content Server管理者が新しいレンディション・セットを作成することもできます。個々のレンディションは、適切なEL式を使用することでコンテンツ・プレゼンタ表示テンプレートの名前で参照できます。

DAMおよびレンディション・セットの詳細は、『Oracle Fusion Middleware Oracle WebCenter Contentのマネージメント』のイメージおよびビデオ変換の操作に関する項を参照してください。

注意:

WebCenter Portalでは、イメージのみの複数のレンディションをサポートします(ビデオはサポートしません)。

また、次のその他の前提条件が満たされている必要があります。

- Oracle WebCenter Content リリース11gR1 (11.1.1.9.0)以降を使用する必要があります。

- WebCenter PortalおよびWebCenter Contentは同じOHSフロント・エンドを使用する必要があります。

- webContextRootパラメータは、WebCenter PortalがWebCenter Contentオブジェクトを検出できるように、共通のOHSフロント・エンドを使用してインラインに設定(/csなど)する必要があります。

- WebCenter PortalとWebCenter Content間で、シングル・サインオンが使用可能である必要があります。

10.3.7.3 イメージ・ドキュメントのイメージ・レンディション情報の取得

コンテンツ・プレゼンタ表示テンプレートでイメージ・ドキュメントのイメージ・レンディション情報を取得するには、次のEL式を使用します。

node.renditionsMap['renditionName:renditionProperty']

説明:

- renditionNameは次のとおりです。

- DAM実装では、適切なレンディション・セットからのレンディションの名前です。たとえば、web、thumbnail、previewまたはlowresです。

- 非DAM実装では、webまたはthumbnailです。

注意:

renditionNameでは、大文字と小文字を区別しないため、previewはPreviewと同じレンディションを指します。

- renditionPropertyは必須のレンディション情報です。
多くの場合、ページにレンディションを表示できるようにイメージ・レンディションのURLを取得します。これには、urlプロパティを使用します。

name、type、width、height、resolution、sizeまたはcontentTypeなどのレンディションに関するその他の情報も取得できます。

注意:

webレンディションおよびthumbnailレンディションでは、size、contentTypeおよびurlを適用でき、nameはwebレンディションやthumbnailレンディションの名前ではなく、ネイティブ・ファイルの名前を返します。

たとえば、イメージのpreviewレンディションを表示するには、次の情報を表示テンプレートに追加します。

<af:image source="#{node.renditionsMap['preview:url']}" shortDesc="Preview rendition" id="imageContent3"/>

注意:

可能である場合、urlはWebCenter Content Serverのイメージ・レンディションの静的レンディションURLを指します。静的URL特定できない場合、urlはWebCenter Portal showPropertyサーブレットを使用します。

次の例では、イメージのカルーセルを表示するコンテンツ・プレゼンタ表示テンプレートを示します。カルーセルがデスクトップ・デバイスに表示される場合(rendered="#{DeviceAgent.desktop})、イメージにはa200レンディションが使用されます(node.renditionsMap['a200:url'])。カルーセルがモバイル・デバイスに表示される場合(rendered="#{DeviceAgent.mobile})、小さいthumbnailレンディションが使用されます(node.renditionsMap['thumbnail:url'])。

<?xml version='1.0' encoding='utf-8'?>
<!-- Copyright (c) 2014 Oracle and/or its affiliates.
All rights reserved. -->

<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" version="2.1"
xmlns:af="http://xmlns.oracle.com/adf/faces/rich"
xmlns:dt="http://xmlns.oracle.com/webcenter/content/templates"
xmlns:f="http://java.sun.com/jsf/core">
<dt:contentListTemplateDef var="nodes">
<af:carousel id="c1"
value="#{nodes}"
var="node"
emptyText="#{templateBundle.EMPTY_NODES}"
inlineStyle="#{DeviceAgent.desktop ? '' : 'height:200px;'}">
<f:facet name="nodeStamp">
<af:carouselItem id="ci1"
text="#{node.isFolder ? node.name : (empty node.propertyMap['dDocTitle'] ?
node.name : node.propertyMap['dDocTitle'].value.stringValue)}"
shortDesc="#{not empty node.propertyMap['xComments'].value.stringValue ?
node.propertyMap['xComments'].value.stringValue :
node.primaryProperty.value.binaryValue.name}">
<af:image id="cimg1"
source="#{node.primaryProperty.isImage ? node.renditionsMap['a200:url'] :
node.icon.largeIcon}"
shortDesc="#{node.primaryProperty.value.binaryValue.name}"
rendered="#{DeviceAgent.desktop}"/>
<af:image id="cimg2"
source="#{node.primaryProperty.isImage ? node.renditionsMap['thumbnail:url'] : node.icon.largeIcon}"
shortDesc="#{node.primaryProperty.value.binaryValue.name}"
rendered="#{DeviceAgent.mobile}"/>

</af:carouselItem>
</f:facet>
</af:carousel>
</dt:contentListTemplateDef>
</jsp:root>

10.3.7.4 Site Studioリージョン定義のイメージ・レンディションの取得

Site Studioリージョン定義にあるイメージのイメージ・レンディションの扱いは、Site Studio内でリージョン定義が定義されている方法によって決まります。

基本イメージを定義する単一のリージョン要素を含むリージョン定義またはイメージ・レンディションごとに別々のリージョン要素を含むリージョン定義のいずれかを保持できます。コンテンツ・プレゼンタ表示テンプレートでは、リージョン定義が設定されている方法に従って適切なEL式を使用する必要があります。

たとえば、リージョン定義には基本イメージの単一のリージョン要素(myimage)を含めることができるため、特定のイメージ・レンディションを表示するために、Oracle WebCenter Content Serverからどのレンディション(highresやlowresなど)を取得するかを指定できるEL式を使用する必要があります。あるいは、デスクトップ・ブラウザに適しているレンディションに1つの要素(desktop)、モバイル・デバイスに適しているレンディションに1つの要素(mobile)など、様々なイメージ・レンディションごとにそれぞれのリージョン要素がリージョン定義にある場合、使用するレンディションを定義するリージョン要素を直接指すEL式を使用できます。

ヒント:

将来、さらにイメージ・レンディションを追加する可能性が高い場合は(たとえば、新しいデバイス用に)、新規レンディションが追加されるたびに新しいリージョン要素を作成することなくコンテンツ・プレゼンタ表示テンプレートに含めることができるため、単一イメージ・リージョン要素でリージョン定義を作成することには意味があります。

- 基本イメージを定義する単一のリージョン要素がリージョン定義に含まれている場合、使用するイメージのレンディションを指定することもできます。

node.propertyMap['regionDefinitionName:elementName/Rendition:renditionName'].asTextHtml

- 特定のイメージ・レンディションを定義するリージョン定義でリージョン要素を参照するには、次のEL式を使用します。

node.propertyMap['regionDefinitionName:elementName'].asTextHtml

説明:

- regionDefinitionNameはリージョン定義の名前です。

- elementNameはリージョン要素の名前です。

- renditionNameは次のとおりです。

- DAM実装では、適切なレンディション・セットからのレンディションの名前です。たとえば、web、thumbnail、highresまたはlowresです。

- 非DAM実装では、webまたはthumbnailです。

注意:

renditionNameでは、大文字と小文字を区別しないため、previewはPreviewと同じレンディションを指します。

EL式は、該当するイメージ・レンディションのURLを示すsrc要素とともにHTML imgタグを戻します。

注意:

可能である場合、src URLはWebCenter Content Serverのイメージ・レンディションの静的レンディションURLを指します。静的URL特定できない場合、urlはWebCenter Portal showPropertyサーブレットを使用します。

図10-8は、記事のSite Studioリージョン定義(RD_REUSEIMG)を表示します。定義には、記事のタイトル、サマリー、本体およびイメージのリージョン要素が含まれます。単一のイメージ・リージョン要素は元のイメージ(Image)を定義します。

図10-8 単一イメージ・リージョン要素付きのリージョン定義

モバイル・デバイス上でイメージの低解像度レンディション(lowres)を使用するには、次のコードを使用します。

<af:outputText value="#{node.propertyMap['RD_REUSEIMG:Image/Rendition:lowres'].asTextHtml}" escape="false" id="olmaget" rendered="#{DeviceAgent.mobile}"/>

注意:

指定したrenditionNameがイメージに存在しない場合は、イメージのプライマリ・レンディションがかわりに使用されます。

図10-9に、別々の記事に対する別々のリージョン定義(RD_NAMEDREND)を示します。これらには、記事のイメージに使用可能な別々のレンディションの個別のリージョン要素が含まれます。BaseImage、ThumbnailImage、A100ImageおよびA200Image。

図10-9 名前付きレンディションのリージョン要素が含まれるリージョン定義

モバイル・デバイス上でイメージをレンダリングするためにThumbnailImageリージョン要素を使用するには、次のコードを使用します。

<af:outputText value="#{node.propertyMap['RD_NAMEDREND:ThumbnailImage'].asTextHtml}" escape="false" id="olmaget" rendered="#{DeviceAgent.mobile}"/>

注意:

明示的に(基本イメージではなく)特定のイメージ・レンディションを参照するリージョン要素にrenditionNameを指定したEL式を使用する場合、(renditionNameによって指定されたレンディションではなく)リージョン要素によって定義されたレンディションが返されます。

WYSIWYGまたは静的リスト・リージョン要素内では、node.propertyMap['regionDefinitionName:elementName'] EL式を使用して、イメージの特定のレンディションを参照できます。あるいは、WYSIWGまたは静的リスト・リージョン要素で基本イメージを参照し、node.propertyMap['regionDefinitionName:elementName/Rendition:renditionName'] EL式を使用して要素内の全イメージに特定のレンディションを使用することもできます。

次の例では、特定のレンディション(Preview)が静的リスト・リージョン要素(paragraph)内のイメージにどのように使用されるかを示します。

<af:iterator value="#{node.propertyMap['RD_MYREGION:paragraph/Rendition:Preview'].values}"
var="row"
id="i1"
rendered="#{DeviceAgent.desktop}">
<af:showDetailItem text="#{row.nestedValue[0].value}" id="sdi1" stretchChildren="first">
<af:panelGroupLayout layout="horizontal" id="tt" inlineStyle="padding:5px;">
<af:outputText escape="false" value="#{row.nestedValue[1].value}" id="ld1"/>
<af:outputText escape="false" value="#{row.nestedValue[2].value}" id="ld2"/>
</af:panelGroupLayout>
</af:showDetailItem>
</af:iterator>

次の例では、RD_MYREGION:bodyはWYSIWYGリージョン要素に対応します。WYSIWYG要素内のすべてのイメージはA100レンディションを使用してレンダリングされます。

<af:outputText value="#{node.propertyMap['RD_MYREGION:body/Rendition:A100'].asTextHtml}"
escape="false" id="ot5"/>

注意:

WYSIWYGまたは静的リスト要素が特定のイメージ・レンディションを明示的に参照する場合、Rendition:renditionName構文を使用して指定されたレンディションにかわり、そのレンディションが使用されます。

10.3.8 EL式を使用したコンテンツ・アイテム情報の取得方法

この項では、コンテンツ・アイテムに関する特定情報を取得および表示するためにコンテンツ・プレゼンタ表示テンプレートの定義で使用できるEL式について説明します。

「単一アイテムの表示テンプレートの定義方法」および「複数アイテムの表示テンプレートの定義方法」の説明に従ってコンテンツ・プレゼンタ表示テンプレートを定義する際、次の表で説明するEL式を使用します。これらの式は、表10-1と表10-2で説明されている、JSPタグとともに使用します。

この項では、次の項目について説明します。

- コンテンツ・アイテムに関する基本情報の取得方法

- コンテンツ・アイテムのプロパティおよび値の操作方法

- コンテンツ・アイテムのアイコンおよびURLの操作方法

- イメージ・レンディションの操作方法

- グループ・ポータル情報の操作方法

10.3.8.1 コンテンツ・アイテムに関する基本情報の取得方法

この項で示すEL式を使用すると、表示テンプレートでコンテンツ・アイテムの基本情報を表示できます。

表10-3 基本コンテンツ情報を取得するためのEL式

EL式

説明

#{node.createdBy}

ノードの作成者のユーザー名を返します。

#{node.createdDate}

ノードの作成日を返します。

#{node.hasParentNode}

現在のノードが有効な親ノードIDを持っている場合または親がないノードの場合、trueを返します。

#{node.icon}

現在のWebアプリケーションで定義されたアイコン・サービスを返します。

#{node.id}

ノードの識別子を返します。

#{node.isFolder}

このノードがフォルダまたはコンテナと関連付けられている場合、trueを返します。

#{node.isInherited}

このノードが別のオブジェクト・クラス定義によって継承された場合、trueを返します。

#{node.modifiedBy}

ノードの最終更新者のユーザー名を返します。

#{node.modifiedDate}

ノードの最終更新日を返します。

#{node.name}

ノードの名前を返します。

#{node.parentId}

親ノードの識別子を返します。

#{node.path}

ノードのパスを返します。

#{node.primaryProperty}

ノードの主要プロパティがある場合、それを返します。

#{node.propertyMap}

プロパティ名をキーとする、ラップされたプロパティ・オブジェクトのマップを作成して返します。プロパティには#{node.propertyMap['myProp']}または#{node.propertyMap.myProp}としてアクセスできます。

#{node.url}

このノードの主要プロパティがある場合、そのノード・プロパティURLサービスのインスタンスを返します。デフォルトでは、#{node.url.renderUrl}に解決されます。これは#{node.primaryProperty.url}のショートカットです。

10.3.8.2 コンテンツ・アイテムのプロパティおよび値の操作方法

この項で説明するEL式を使用して、コンテンツ・アイテム・ノードのプロパティおよびプロパティ値に対してアクションを実行します。

ヒント:

所定のコンテンツ・タイプに定義されたプロパティ名を判断するには、「コンテンツ・タイプのプロパティ名の見つけ方」を参照してください。

表10-4 コンテンツ・アイテムのノード・プロパティのEL式

EL式

説明

#{node.propertyMap['myProp'].asTextHtml}

タイプがテキストまたはHTMLの場合、テキストまたはHTMLとしてこのプロパティを返します。isHTMLまたはisPlainTextがtrueの場合、テキストまたはHTMLは文字列として返されます。

#{node.propertyMap['myProp'].hasValue}

このプロパティに値が関連付けられている場合、trueを返します。

#{node.propertyMap['myProp'].icon}

現在のWebアプリケーションで定義されたアイコン・サービスを返します。

#{node.propertyMap['myProp'].indexedName}

複数値を持つプロパティのインデックス付き名前を返します。たとえば、colorという名前の複数値を持つノード・プロパティにblue、red、orangeが含まれている場合、red値のインデックス付き名前はcolor[1]になります。#{node.propertyMap['color[2]'].value.stringValue}というEL式は、このリストのorangeというcolorを参照します。

#{node.propertyMap['myProp'].isAudio}

プロパティのMIMEタイプがaudio/の場合、trueを返します。

#{node.propertyMap['myProp'].isBinary}

現在のプロパティのタイプがProperty.BINARYの場合、trueを返します。

#{node.propertyMap['myProp'].isBoolean}

現在のプロパティのタイプがProperty.BOOLEANの場合、trueを返します。

#{node.propertyMap['myProp'].isCalendar}

現在のプロパティのタイプがProperty.CALENDARの場合、trueを返します。

#{node.propertyMap['myProp'].isDouble}

現在のプロパティのタイプがProperty.DOUBLEの場合、trueを返します。

#{node.propertyMap['myProp'].isExcel}

プロパティのMIMEタイプがapplication/vnd.ms-excel、application/excel、application/x-excelまたはapplication/x-msexcelの場合、trueを返します。

#{node.propertyMap['myProp'].isGIF}

プロパティのMIMEタイプがimage/gifの場合、trueを返します。

#{node.propertyMap['myProp'].isHTML}

プロパティのMIMEタイプがtext/htmlの場合、trueを返します。

#{node.propertyMap['myProp'].isImage}

プロパティのMIMEタイプがimage/の場合、trueを返します。

#{node.propertyMap['myProp'].isJPEG}

プロパティのMIMEタイプがimage/jpegの場合、trueを返します。

#{node.propertyMap['myProp'].isLink}

現在のプロパティのタイプがProperty.LINKの場合、trueを返します。

#{node.propertyMap['myProp'].isLong}

現在のプロパティのタイプがProperty.LONGの場合、trueを返します。

#{node.propertyMap['myProp'].isMSWord}

プロパティのMIMEタイプがapplication/vnd.ms-wordまたはapplication/mswordの場合、trueを返します。

#{node.propertyMap['myProp'].isMultiValued}

このプロパティが複数値を持つ場合、trueを返します。

#{node.propertyMap['myProp'].isNested}

現在のプロパティのタイプがProperty.NESTEDの場合、trueを返します。

#{node.propertyMap['myProp'].isPDF}

プロパティのMIMEタイプがapplication/pdfの場合、trueを返します。

#{node.propertyMap['myProp'].isPlainText}

プロパティのMIMEタイプがtext/plainの場合、trueを返します。

#{node.propertyMap['myProp'].isPNG}

プロパティのMIMEタイプがimage/pngの場合、trueを返します。

#{node.propertyMap['myProp'].isPowerPoint}

プロパティのMIMEタイプがapplication/vnd.ms-powerpoint、application/mspowerpointまたはapplication/x-mspowerpointの場合、trueを返します。

#{node.propertyMap['myProp'].isPrimaryProperty}

このプロパティが主要プロパティの場合、trueを返します。

#{node.propertyMap['myProp'].isRequired}

このプロパティが必須の場合、trueを返します。

#{node.propertyMap['myProp'].isRetricted}

このプロパティが制限付きの場合、trueを返します。

#{node.propertyMap['myProp'].isRichText}

プロパティのMIMEタイプがtext/richtextの場合、trueを返します。

#{node.propertyMap['myProp'].isString}

現在のプロパティのタイプがProperty.STRINGの場合、trueを返します。

#{node.propertyMap['myProp'].isTextBased}

このプロパティがテキスト・ベース(isHTML、isPlainText、isString、isCalendar、isBoolean、isDouble、isLong)の場合、trueを返します。

#{node.propertyMap['myProp'].isVideo}

プロパティのMIMEタイプがvideo/の場合、trueを返します。

#{node.propertyMap['myProp'].isXML}

プロパティのMIMEタイプがtext/xmlの場合、trueを返します。

#{node.propertyMap['myProp'].isZip}

プロパティのMIMEタイプがapplication/zipの場合、trueを返します。

#{node.propertyMap['myRefNode'].linkAsNode}

myRefNodeプロパティをノードとして返します。ここで、myRefNodeはリンク・プロパティ・タイプです。プロパティはEL式で参照できます。

例: #{node.propertyMap['myRefNode'].linkAsNode.primaryProperty.url.renderUrl}

#{node.propertyMap['myProp'].name}

プロパティの名前を返します。

#{node.propertyMap['myProp'].nestedProperty}

この単一値プロパティのネストされたプロパティを取得して、プロパティのリストを返します。

#{node.propertyMap['myProp'].type}

このプロパティ値のデータ型を返します。たとえば、String、Integer、Longなどです。

#{node.propertyMap['myProp'].url}

このプロパティのURLサービスを返します。

#{node.propertyMap['myProp'].value}

このプロパティの値サービスを返します。

#{node.propertyMap['myProp'].nestedProperties}

静的リストの要素を返します。次に例を示します。

<af:iterator var="listItem"
value="#{node.propertyMap['ARTICLE_RGD:Paragraphs'].nestedProperties}"
varStatus="vs">
<af:outputText id="ot1" value='#{listItem[0].value}'/>
<af:outputText id="ot3" value="#{listItem[1].value}"/>
</af:iterator>

#node.propertyMap['regionDefName:elementName'].asTextHtml}

Site StudioデータをHTMLテキストとして返します。次に例を示します。

#node.propertyMap['RD_NEWS:LEAD'].asTextHtml}

要素名(LEAD)には、接頭辞としてリージョン定義名(RD_NEWS)が付きます。「カスタム・ビューでのSite Studioリージョン要素の参照方法」も参照してください。

表10-5 コンテンツ・アイテムのノード・プロパティ値のEL式

EL式

説明

#{node.propertyMap['myProp'].value.binaryValue}

バイナリ・プロパティ・タイプまたは添付ファイルのカスタム属性を返します。binaryValueに使用できる属性は次のとおりです。

- contentType – バイナリ・コンテンツのMIMEタイプを返します(例: textまたはhtml)。

- name – バイナリ・コンテンツのファイル名を返します(例: index.html)。

- size – バイナリ・コンテンツのサイズまたはサイズを返せない場合は-1を返します。

#{node.propertyMap['myProp'].value.booleanValue}

このプロパティの値をjava.lang.Booleanとして返します。

#{node.propertyMap['myProp'].value.calendarValue}

このプロパティの値をjava.util.Calendarとして返します。

#{node.propertyMap['myProp'].value.doubleValue}

このプロパティの値をjava.lang.Doubleとして返します。

#{node.propertyMap['myProp'].value.longValue}

このプロパティの値をjava.lang.Longとして返します。

#{node.propertyMap['myProp'].value.orderedPosition}

プロパティが複数値を持つ場合、プロパティのインデックスを返します。

例:#{node.propertyMap['address[0]'].value.orderedPosition}

#{node.propertyMap['myProp'].value.stringValue}

このプロパティの値をjava.lang.Stringとして返します。

例: #{node.propertyMap['firstName'].value.stringValue}

10.3.8.3 コンテンツ・アイテムのアイコンおよびURLの操作方法

この項で説明するEL式を使用して、コンテンツ・アイテムおよびプロパティに関連付けられたアイコンおよびURLを操作します。

表10-6 コンテンツ・アイテムのノードまたはプロパティ・アイコンのEL式

EL式

説明

#{node.icon.largeIcon}

#{node.propertyMap['myDoc'].icon.largeIcon}

大きいアイコンのイメージ・リソースのURLを返します。

例: <af:image source="#{node.propertyMap['projectFolder'].largeIcon}"/>

#{node.icon.smallIcon}

#{node.propertyMap['myDoc'].icon.smallIcon}

小さいアイコンのイメージ・リソースのURLを返します。

例: <af:image source="#{node.icon.smallIcon}" />

表10-7 コンテンツ・アイテムのノードURLのEL式

EL式

説明

#{node.url.downloadUrl}

バイナリ・コンテンツへのURLを作成します。ダウンロードを強制し、オペレーティング・システムはコンテンツ・タイプに基づいてコンテンツをレンダリングします。

例: <af:goLink destination="#{node.url.downloadUrl}" targetFrame="_blank"/>

#{node.url.renderUrl}

バイナリ・コンテンツへのURLを作成します。コンテンツ・タイプに基づいてブラウザがコンテンツをレンダリングできるようにします。

デフォルトでは、#{node.url}は#{node.url.renderUrl}に解決します。

例: <af:goLink destination="#{node.url.renderUrl}" targetFrame="_blank"/>

10.3.8.4 イメージ・レンディションの操作方法

この項では、イメージ・ドキュメントの特定のレンディションと、そのレンディションを使用してイメージをレンダリングするためのURLを含むSite Studioリージョン要素に関する情報を取得するために使用できるEL式を示します。

イメージ・レンティションの詳細は、「コンテンツ・プレゼンタ表示テンプレートでのイメージ・レンディションの使用方法」を参照してください。

表 10-8 イメージ・ドキュメントのイメージ・レンディション用EL式

EL式

説明

#{node.renditionsMap['renditionName:url']}

イメージ・レンディションのURLを返します。次に例を示します。

http://mymachine.example.com:8888/cs/groups/
personalspaces/@pewebcenter/
@799c4d7d-255c-46c8-80f5-0d06c848dd65/documents/
document/awrf/mdax/~edisp/~extract/
ID_001642~3~staticrendition/preview.gif

可能である場合、urlはOracle WebCenter Content Serverのイメージ・レンディションの静的レンディションURLを指します。静的URL特定できない場合、urlはWebCenter Portal showPropertyサーブレットを使用します。

#{node.renditionsMap['renditionName:name']}

レンディションの名前、たとえばweb、thumbnailまたはhighresを返します。

webレンディションおよびthumbnailレンディションでは、nameはwebレンディションまたはthumbnailレンディションではなく、ネイティブ・ファイルの名前を返します。

#{node.renditionsMap['renditionName:type']}

イメージ・レンディションのファイル・タイプ(たとえば、preview)を返します。

typeプロパティは、webレンディションおよびthumbnailレンディションでは有効ではありません。

#{node.renditionsMap['renditionName:width']}

ピクセルでイメージ・レンディションの幅(たとえば、250)を返します。

widthプロパティは、webレンディションおよびthumbnailレンディションでは有効ではありません。

#{node.renditionsMap['renditionName:height']}

ピクセルでイメージ・レンディションの高さ(たとえば、34)を返します。

heightプロパティは、webレンディションおよびthumbnailレンディションでは有効ではありません。

#{node.renditionsMap['renditionName:resolution']}

イメージ・レンディションの解像度(DPI)(たとえば、96 dpi)を返します。

resolutionプロパティは、webレンディションおよびthumbnailレンディションでは有効ではありません。

#{node.renditionsMap['renditionName:size']}

イメージ・レンディションのファイル・サイズ(たとえば、3133)を返します。

#{node.renditionsMap['renditionName:contentType']}

イメージ・レンディションのMIMEタイプ(たとえば、image/gif)を返します。

表10-9 Site Studioリージョン要素のイメージ・レンディション用EL式

EL式

説明

#{node.propertyMap['regionDefinitionName:elementName'].asTextHtml}

特定の要素に定義されているイメージのURLに設定されているsrc要素とともにHTML imgタグを返します。次に例を示します。

<img src="http://mymachine.example.com:9400
/cs/idcplg?IdcService=GET_FILE&amp;dDocName=
id_038497&amp;RevisionSelectionMethod=LatestReleased"
alt="S3-1" class="">

このELを使用して、イメージの特定のレンディションを定義するSite Studioリージョン要素を示します。

可能である場合、URLはWebCenter Content Serverのイメージ・レンディションの静的レンディションURLを指します。静的URL特定できない場合、urlはWebCenter Portal showPropertyサーブレットを使用します。

#{node.propertyMap['regionDefinitionName:elementName/Rendition:renditionName'].asTextHtml}

特定の要素に定義されているイメージの特定のイメージ・レンディションのURLに設定されているsrc要素とともにHTML imgタグを返します。次に例を示します。

<img src="/cs/groups/wc081512c/
@sb5cdcaa4610341a8bb8387effdf21790/documents/document/
awrf/mdm4/~edisp/~extract/
ID_038497~1~staticrendition/preview.gif" alt="S3-1"
class="">

指定したイメージ・レンディションがイメージに存在しない場合、基本イメージのURLが返されます。

このELを使用して、指定されたrenditionNameを表示する基本イメージを定義するSite Studioリージョン要素を参照します。

可能である場合、URLはWebCenter Content Serverのイメージ・レンディションの静的レンディションURLを指します。静的URL特定できない場合、urlはWebCenter Portal showPropertyサーブレットを使用します。

10.3.8.5 グループ・ポータル情報の操作方法

この項では、コンテンツ・プレゼンタ表示テンプレートでグループ・ポータル情報を操作するのに使用できるEL式を示します。

表10-10 基本グループ・ポータル情報のEL式

EL式

説明

#{spaceContext.currentSpace.metadata.createdBy}

#{spaceContext.space[portalName].metadata.createdBy}

現在のグループ・ポータルまたは指定したグループ・ポータルを作成したユーザーを返します。

#{spaceContext.currentSpace.metadata.creationDate}

#{spaceContext.space[portalName].metadata.creationDate}

現在のポータルまたは指定したポータルが作成された日時を表すjava.util.Calendarオブジェクトを返します。

#{spaceContext.currentSpace.metadata.customAttributes[attributeName]}

#{spaceContext.space[portalName].metadata.customAttributes[attributeName]}

attributeNameというポータルの特定のカスタム属性の値を返します。

#{spaceContext.currentSpace.metadata.defaultLanguage}

#{spaceContext.space[portalName].metadata.defaultLanguage}

現在のポータルまたは指定したポータルのデフォルト言語を返します。

#{spaceContext.currentSpace.metadata.description}

#{spaceContext.space[portalName].metadata.description}

現在のポータルに関連付けられた説明と表示名を、ポータルが作成された言語で返します。ポータル名が翻訳されている場合、翻訳された名前は表示されません。

例: #{spaceContext.space['FinanceProject'].metadata.description}

財務活動に従事するすべての複合チームを評価します。

#{spaceContext.currentSpace.metadata.displayName}

#{spaceContext.space[portalName].metadata.displayName}

現在のポータルまたは指定したポータルに関連付けられた表示名を、ポータルが作成された言語で返します。ポータル名が翻訳されている場合、ポータルが作成された名前が表示されます。

例:

Web20Portalという名前のグループ・ポータルの表示名がWeb 2.0 Portalの場合、

#{spaceContext.space['Web20Portal'].metadata.displayName}

これは、Web 2.0 Portalと評価されます。

#{spaceContext.currentSpace.metadata.guid}

#{spaceContext.space[portalName].metadata.guid}

現在のポータルまたは指定したポータルに関連付けられた一意のIDを返します。

#{spaceContext.space[portalName].metadata.icon}

#{spaceContext.currentSpace.metadata.icon}

現在のポータルまたは指定したポータルに関連付けられたアイコンへのURLを返します。

#{spaceContext.currentSpace.metadata.keywords}

#{spaceContext.space[portalName].metadata.keywords}

現在のポータルまたは指定したポータルに関連付けられた検索可能なキーワードのカンマ区切りリストを返します。

#{spaceContext.currentSpace.metadata.lastUpdatedDate}

#{spaceContext.space[portalName].metadata.lastUpdatedDate}

現在のグループ・ポータルまたは指定したグループ・ポータルが最後に更新された日時を表すjava.util.Calendarオブジェクトを返します。

#{spaceContext.space[portalName].metadata.logo}

#{spaceContext.currentSpace.metadata.logo}

現在のポータルまたは指定したポータルのロゴに関連付けられたイメージへのパスを返します。

#{spaceContext.currentSpace.metadata.name}

#{spaceContext.space[portalName].metadata.name}

通常、ポータルのバックエンドでプリティURLで使用される、現在のポータルまたは指定したポータルの名前を返します。

#{spaceContext.currentSpace.metadata.groupSpaceURI}

#{spaceContext.space[portalName].metadata.groupSpaceURI}

現在のポータルまたは指定したポータルのプリティURLを返します。

#{spaceContext.currentSpace.metadata.closed}

#{spaceContext.space[portalName].metadata.closed}

ポータルが閉じられているかどうかを示すブール値を返します。

#{spaceContext.currentSpace.metadata.discoverable}

#{spaceContext.space[portalName].metadata.discoverable}

ユーザーがポータルの存在を検索または「マイ・ポータル」のリストからの取得によって検出できるかどうかを示すブール値を返します。

#{spaceContext.currentSpace.metadata.offline}

#{spaceContext.space[portalName].metadata.offline}

ポータルが遮断されているかどうかを示すブール値を返します。

#{spaceContext.currentSpace.metadata.publishRSS}

#{spaceContext.space[portalName].metadata.publishRSS}

ポータルがRSSフィードを公開しているかどうかを示すブール値を返します。

#{spaceContext.currentSpace.metadata.selfRegistration}

#{spaceContext.space[portalName].metadata.selfRegistration}

ユーザーによるポータルのサブスクライブが許可されているかどうかを示すブール値を返します。

#{spaceContext.currentSpace.metadata.unsubscriptionApprovalRequired}

#{spaceContext.space[portalName].metadata.unsubscriptionApprovalRequired}

現在のポータルまたは指定したポータルからのサブスクライブ解除に承認が必要かどうかを表すブール値を返します。

表10-11 ポータルUI情報のEL式

EL式

説明

#{spaceContext.space[portalName].metadata.uiMetadata.gsSiteTemplateId}

#{spaceContext.currentSpace.metadata.uiMetadata.gsSiteTemplateId}

現在のポータルまたは指定したポータルに関連付けられたページ・テンプレートのIDを返します。

#{spaceContext.space[portalName].metadata.uiMetadata.rcForGSPages}

#{spaceContext.currentSpace.metadata.uiMetadata.rcForGSPages}

現在のポータルまたは指定したポータルに関連付けられたリソース・カタログのIDを返します。

#{spaceContext.space[portalName].metadata.uiMetadata.rcForGSSiteTemplates}

#{spaceContext.currentSpace.metadata.uiMetadata.rcForGSSiteTemplates}

現在のポータルのページ・テンプレートに関連付けられたリソース・カタログのIDを返します。

#{spaceContext.space[portalName].metadata.uiMetadata.gsSiteStructureId}

#{spaceContext.currentSpace.metadata.uiMetadata.gsSiteStructureId}

現在のポータルに関連付けられたナビゲーション・モデルのIDを返します。

#{spaceContext.space[portalName].metadata.uiMetadata.skin}

#{spaceContext.currentSpace.metadata.uiMetadata.skin}

現在のポータルに関連付けられたADF Facesスキン・ファミリを返します。

#{spaceContext.space[portalName].metadata.uiMetadata.footerHidden}

#{spaceContext.currentSpace.metadata.uiMetadata.footerHidden}

ポータルのフッターが非表示かどうかを表すブール値を返します。

#{spaceContext.space[portalName].metadata.uiMetadata.copyrightMessage}

#{spaceContext.currentSpace.metadata.uiMetadata.copyrightMessage}

ポータルで使用する著作権メッセージを返します。

#{spaceContext.space[portalName].metadata.uiMetadata.privacyPolicyUrl}

#{spaceContext.currentSpace.metadata.uiMetadata.privacyPolicyUrl}

従っているプライバシ・ポリシー・ドキュメントのURLを返します。

10.3.9 コンテンツ・タイプのプロパティ名の見つけ方

コンテンツ・プレゼンタ表示テンプレートの開発者は、選択されたコンテンツ・アイテムのページ上での表示方法を定義できるように、関連付けられたコンテンツ・タイプに定義されたプロパティの名前を知っておくことが必要です。

各コンテンツ・アイテムは、Oracle WebCenter Content Serverリポジトリで定義された特定のコンテンツ・タイプに関連付けらます。コンテンツ・タイプはWebCenter Content Serverプロファイル定義とSite Studioリージョン定義にマップできます。タイプは、WebCenter Content Server で作成され、コンテンツ・アイテムのプロパティを定義します。しかし、コンテンツ・アイテムのコンテンツ・タイプのプロパティ名は表示名とは異なり、WebCenter Content Serverから取得する必要があります。詳細は、『Oracle Fusion Middleware Oracle WebCenter Contentの管理』のコンテンツ・タイプの定義に関する項を参照してください。

注意:

RESTサービスを使用しても、コンテンツ・タイプのプロパティ名を取得できます。詳細は、「WebCenter Portal REST APIの使用」を参照してください。

10.3.10 表示テンプレートでの外部ファイルの参照方法

場合によっては、CSSファイルのような外部ファイルを表示テンプレートで参照する必要があります。このようなすべての参照では、Webアプリケーションのルートへの相対パスか絶対パスを指定します。

例:

- 絶対パス –http://host:port/mypath/file.css

- 相対パス –/webcenter/mypath/file.css

外部ファイルに対するローカル参照は使用しないでください。外部ファイルに対するローカル参照は、「コンテンツ・プレゼンタ表示テンプレートの公開」の説明に従ってコンテンツ・プレゼンタ表示テンプレートをアセットとして公開する際に組み込まれないため機能しません。

10.3.11 カスタム・ビューでのSite Studioリージョン要素の参照方法

カスタム表示テンプレートを使用してSite Studioリージョン定義要素を表示できます。

たとえば、TITLE、LEAD、IMAGEおよびBODYという4つの要素を持つRD_NEWSというSite Studioリージョン定義があると仮定します。コンテンツ・プレゼンタ表示テンプレートでは、次のようなノード・プロパティEL式を使用して、これらの要素を参照できます。

#node.propertyMap['RD_NEWS:LEAD'].asTextHtml}

次の例に、このようなSite Studioリージョン要素をcontentTemplateDef定義に含める方法を示します。

<dt:contentTemplateDef var="node">
<af:panelGroupLayout layout="vertical" id="pgl3">
<af:panelGroupLayout layout="horizontal" valign="top" inlineStyle="background-color:#FFF; padding:10px;" id="pgl4">
<af:panelGroupLayout layout="vertical" id="pgl2" valign="top">
<af:outputText value="#{node.propertyMap['dInDate'].value.calendarValue}" id="ot3" styleClass="bodytext" converter="javax.faces.DateTime"/>
</af:panelGroupLayout>
<af:spacer width="10px;" id="s1" inlineStyle="background-color:#DDD; color:white;"/>
<af:panelGroupLayout layout="vertical" id="pgl1" valign="top">
<af:outputText value="#{node.propertyMap['xTargetGroup'].value}" id="ot12" inlineStyle="background-color:#0A9FC0; color:white; text-align:left; padding:5px;"/>
<af:goLink text="#{node.propertyMap['RD_NEWS:TITLE'].asTextHtml}" id="gil1"
destination="#{'/faces/home/news-viewer?news_id='}#{node.propertyMap['dDocName'].value}" styleClass="newstitle"/>
<af:outputText value="#{node.propertyMap['RD_NEWS:LEAD'].asTextHtml}" id="ot2" styleClass="bodytext"/>
</af:panelGroupLayout>
<af:panelGroupLayout layout="vertical" id="pgl32" valign="top" styleClass="newsimage">
<af:outputText value="#{node.propertyMap['RD_NEWS:IMAGE'].asTextHtml}" escape="false" id="ot1"  inlineStyle="max-width:100px;"/>
</af:panelGroupLayout>
</af:panelGroupLayout>
<af:panelGroupLayout layout="horizontal" id="aaaa">
</af:panelGroupLayout>
</af:panelGroupLayout>
</dt:contentTemplateDef>

複数のテンプレートでSite Studioリージョン要素を参照する方法を始めから終わりまで示す完全な例は、次のURLでWebCenterアーキテクチャ・チームのブログ・エントリを参照してください。

http://www.ateam-oracle.com/content-presenter-cmis-complete

10.4 コンテンツ・プレゼンタ表示テンプレートの公開

コンテンツ・プレゼンタ表示テンプレートを作成してページ・フラグメントを編集したら、次の工程はテンプレートを公開してWebCenter Portalでテストします。

コンテンツ・プレゼンタ表示テンプレートを共有アセットとして公開する、または特定のポータルにポータル・アセットとして公開する方法の詳細は、「WebCenter Portalアセットの公開」を参照してください。

10.5 コンテンツ・プレゼンタ表示テンプレートのパフォーマンスの最適化

コンテンツ・プレゼンタ表示テンプレートで表示するためにコンテンツ・ノードを取得すると、ほとんどのコンテンツ・アイテム・ノード・プロパティ値はノードとともに即座に取得されますが、一部の値は後で必要な場合のみロードされます。ノード・プロパティ値の選別的なロードは、パフォーマンスの違いをもたらすほか、ユーザーや開発者に透過的です。

コンテンツ・プレゼンタ表示テンプレートの開発者は、異なるプロパティ値がロードされたことに気付いた場合、テンプレートのパフォーマンスを最適化できます。たとえば、一般的なリストの表示テンプレートの場合、ノードを最初に取得したときに即座にロードされるプロパティのみを参照して、後で必要なときにロードされるプロパティを避けると、より高速にレンダリングされます。

2番目の考慮点は、ノードの取得方法(検索による方法と親IDによるフェッチする方法)によって決まります。検索(「問合せの結果」など)のためのノード取得時には即座にロードされるプロパティが、他の取得方法(「フォルダの下のコンテンツ」など)では後でロードされることがあります。表10-12は、取得メカニズム別に、ノード取得時にノード・プロパティが即座にロードされるかどうかを示しています。

表10-12 ノード取得メカニズム別のノード・プロパティのロード

OCSグローバル・プロファイル・プロパティ

ノードの初回取得時にロードするか

親IDによる取得(フォルダの下のコンテンツ)

検索(問合せの結果)

UUIDによる取得(単一のコンテンツ・アイテムとアイテムのリスト)

VaultFileSize

N

Y

Y

dCheckoutUser

Y

N

Y

dCreateDate

Y

Y

Y

dDocAccount

Y

Y

Y

dDocAuthor

Y

Y

Y

dDocName

Y

Y

Y

dDocTitle

Y

Y

Y

dDocType

Y

Y

Y

dFormat

Y

Y

Y

dID

Y

Y

Y

dInDate

Y

Y

Y

dIsCheckedOut

Y

N

Y

dOutDate

Y

Y

Y

dReleaseDate

Y

N

Y

dReleaseState

Y

N

Y

dRevClassID

Y

N

Y

dRevLabel

Y

Y

Y

dRevRank

Y

N

Y

dRevisionID

Y

Y

Y

dSecurityGroup

Y

Y

Y

dStatus

Y

N

Y

dWebExtension

Y

Y

Y

dWorkflowState

N

N

Y

idcPrimaryFile

Y

Y

Y

idcRenditions

N

N

Y

xCollectionID

Y

Y

Y

xComments

Y

Y

Y

xForceFolderSecurity

Y

Y

Y

xHidden

Y

Y

Y

xInihibitUpdate

Y

Y

Y

xReadOnly

Y

Y

Y

10.6 コンテンツ・プレゼンタの使用(ヒント、チュートリアルおよび例)

次の補足チュートリアルおよび例に、コンテンツ・プレゼンタの使用方法を詳細に示します。

- 「UCM, Site Studio and Templates」: WebCenter Portal内のコンテンツのやり取りを行うコンポーネント(コンテンツ・サーバー、Site Studioおよびコンテンツ・プレゼンタ)について説明します。
http://www.ateam-oracle.com/portal-and-content-components-part-1-ucm-site-studio-and-templates-2-of-7

- 「Content Presenter-CMIS-Complete」: コンテンツ・プレゼンタ・ベースのページや複雑なCMISおよびカスタム・テンプレートを使用して、フィルタリング可能なコンテンツ・リスト・ビューアを作成する手順を説明します。
http://www.ateam-oracle.com/content-presenter-cmis-complete

- PortalおよびContent - コンテンツ統合 - ベスト・プラクティス - コンテンツをポータルに統合する際に考慮するいくつかのベスト・プラクティスに注目します。
http://www.ateam-oracle.com/portal-and-content-content-integration-best-practices/

第III部 ポートレットの使用

この部は、次の章で構成されています。

- ポートレットの概要

- Oracle JSF Portlet Bridgeを使用したJSFアプリケーションからのポートレットの作成

- JSR 286を使用した標準ベースのJavaポートレットの作成

11 ポートレットの概要

この章では、ポートレットの概要を示しポートレットの使用方法を説明します。また、ポートレットの構造およびポートレットを作成するために使用できるリソースについて説明します。また、この章では、どのポートレット構築テクノロジが最もニーズを満たすかを簡単に判断できるように、機能、テクノロジおよびツールについても説明します。

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

- ポートレットについて

- ポートレットの構造について

- ポートレット・リソースについて

- ポートレットの開発について

11.1 ポートレットについて

ポートレットは再利用可能なWebコンポーネントで、多数の異なるソースからコンテンツを描画できます。ポートレットには静的HTMLコンテンツから、複雑なWebサービスや処理負荷の高いアプリケーションのためのJavaのコントロールまで、あらゆるものを含めることができます。

ポートレットは、複数のソースからのデータを意味のある関連付けられた形式で表示する手段を提供します。ポートレットでは、他のWebサイトからの抜粋の表示、主要情報のサマリーの生成、検索の実行および多様なデータ・ソースの情報を収集したコレクションへのアクセスなどを実行できます。様々なポートレットを単一のページに配置できるため、ユーザーはコンテンツが実際には複数のソースからのものであっても単一のソースとして利用できます。

図11-1 サンプルの宝くじポートレット

ポートレットはイベントやその他の手法を使用して相互に通信することもできます。また、単一のポートレットが複数のインスタンスを持つこともできます。つまり、単一のポータル内の、さらには複数のポータルにまたがる様々なページ上に表示できます。ページ設計者はそれぞれの関係者のニーズに合せてポートレットをカスタマイズできます。正しい権限を持つエンド・ユーザーはさらに独自の要件に合せてポートレットをパーソナライズできます。

WebCenter Portalは、業界標準であるJSR 286を使用したポートレットの開発をサポートします。また、Oracle JSF Portlet Bridgeを使用して既存のJSFアプリケーションからポートレットを作成することもできます。詳細は、「ポートレット・リソースについて」を参照してください。

11.2 ポートレットの構造について

ポートレットの構造とは、ページ上でのポートレットの視覚的な表現です。

図11-2は、WebCenter Portalの典型的なポートレットに表示されるポートレットの構造の側面をいくつか示しています。同じポートレットでも別のアプリケーションに表示された場合は違って見えることがあるので注意してください。

図11-2 典型的なポートレットの構造を示すサンプル・ポートレット

代表的なポートレットの構造の主な側面(図11-2に示されているのはその一部です)は次のとおりです。

- ポートレット・クロム - ヘッダー、シャドウ、サイズ変更、「アクション」メニュー、アイコンを含む、ポートレットを囲む様々な種類の飾りの総称。

- ポートレット・ヘッダー - ポートレット・アイコン、タイトル、「アクション」メニュー、「カスタマイズ」アイコン、および「パーソナライズ」アイコンを表示するポートレットの領域。

- ポートレット・アイコン - ポートレットを視覚的に特定するためのポートレット・ヘッダー内の小さいイメージ。

- ポートレット・タイトル - ポートレットの目的を示すポートレット・ヘッダー内のテキスト。エンド・ユーザーは実行時にこのタイトルをパーソナライズして特定の用途に合った、わかりやすいタイトルにすることができます。

- パーソナライズ・アイコン - エンド・ユーザーがポートレットを変更して自分だけに見えるようにできるポートレット・ヘッダー内のアイコン。
「パーソナライズ」アイコンは、認証を受けたユーザー(つまりログインしているユーザー)にのみ表示されます。パブリック・ユーザーまたは認証を持たないユーザーには表示されません。ユーザーがポートレットの表示をパーソナライズできるようにするには、なんらかのアプリケーション・セキュリティを実装する必要があります。

- カスタマイズ・アイコン - アプリケーション管理者が実行時にポートレットのデフォルト設定を変更できるようにするポートレット・ヘッダー内のアイコン。これらの内容はすべてのユーザーに表示されます。
典型的なカスタマイズ設定はポートレット・タイトルです。アプリケーション管理者は実行時にポートレット・ヘッダーに表示されるタイトルを決定できます。

- 処理アイコン - クリックすると「アクション」メニューを表示する、ポートレット・ヘッダー内のアイコン。

- 処理メニュー - ユーザーがポートレット上で実行できる様々な処理を一覧するメニュー。ポートレットがユーザー・レベルでキャッシュされると、ポートレットへのアクセス権限が実行され、ユーザーはポートレットをパーソナライズできます。アクションには、「移動」、「削除」、「リフレッシュ」、「上へ移動」、「下へ移動」などがあります。「処理」メニューからは、「バージョン情報」、「ヘルプ」、「構成」、「印刷」などのポートレットで使用できるその他のポートレット・モードへもアクセスできます。
ページにポートレットを追加したユーザーがポートレット・ヘッダーを表示しないことを選択した場合、「処理」メニューは、マウス・ロールオーバー上に表示されるフェードインおよびフェードアウトのツールバーに表示されます。

- サイズ変更ハンドル - ユーザーがポートレットのサイズを変更できるようにするポートレット右下の領域。

- スクロール・バー - ポートレットに指定された幅と高さにポートレット・コンテンツがおさまらない場合に、表示され、最初に表示されていないコンテンツへのアクセスを可能にします。

- ポートレット・コンテンツ - ポートレット・ロジックによって決定されているポートレットの実際のコンテンツ。

ページでレンダリングされるポートレット構造は、次の2つのファクタで制御されます。

- ポートレット開発者によって決定されるポートレットそのもののロジック。これには、ポートレットがどのポートレット・モードをサポートしているかも含まれます。

- 設計時にページにポートレットを追加したアプリケーション開発者によって決定される、ポートレットをページにバインドするポートレット・タグの属性。

たとえば、ポートレットを設計する場合、ポートレット開発者はポートレットにヘルプ・モードを実装できます。ページ設計者がページにポートレットを追加する際に、ポートレット・プロパティisHelpModeAvailableを使用して、ポートレットの「アクション」メニューに「ヘルプ」コマンドを含めるかどうかを決定できます。ページ設計者がisHelpModeAvailableをfalseに設定した場合、「ヘルプ」コマンドは、ポートレット・ロジックで指定されていても「アクション」メニューには含まれません。逆に、ポートレット開発者がポートレットにヘルプ・モードを実装していない場合、isHelpModeAvailableがtrueに設定されていても、「ヘルプ」コマンドは、「アクション」メニューに表示されません。

11.3 ポートレット・リソースについて

アプリケーション内のポートレットは、Oracle製品やサード・パーティ・ベンダーなどの様々なソースに基づく可能性があります。

また、ポートレット・リソースには、JSR 286のWebCenter PortalのJavaポートレット・ウィザードを使用して構築されたカスタム構築ポートレットも含まれます。これらのリソースはそれぞれ異なる製品機能を提供し、対象とするユーザーの経験レベルも様々です。

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

- 構築済ポートレットについて

- Java Server Faces (JSF)ポートレットについて

- カスタムJavaポートレットについて

- OmniPortletについて

- ポートレット・テクノロジ

- ポートレットとタスク・フロー

11.3.1 構築済ポートレットについて

Oracleでは、ユーザーが機能をポートレットとして公開できるようにすることで、他のOracleアプリケーションとの統合を提供しています。

概要

サポートされているアプリケーションは、次のとおりです。

- Peoplesoft - PeoplesoftアプリケーションはWSRPポートレットとして公開できます。詳細は、『Oracle Fusion Middleware Oracle WebCenter Portalの管理』のPeopleSoftアプリケーションの統合に関する項を参照してください。

- JD Edwards - JD Edwardsスタンドアロン・リージョンはポートレットとして公開できます。詳細は、『Oracle Fusion Middleware Oracle WebCenter Portalの管理』のJD Edwardsアプリケーションの統合に関する項を参照してください。

- Oracle E-Business Suite - Oracle E-Business Suiteは、WebCenter Portalに追加できる、アプリケーション・ナビゲータ、お気に入り、ワークリストといった複数の構築済ポートレットを提供します。詳細は、『Oracle Fusion Middleware Oracle WebCenter Portalの管理』のE-Business Suiteアプリケーションの統合に関する項を参照してください。

- 他の構築済ポートレットは、オラクル社と、主要なシステム・インテグレータ、ソフトウェア・ベンダーおよびコンテンツ・プロバイダとの提携によって提供されます。

対象ユーザー

開発済のダウンロード可能なポートレットは、WebCenter Portalにプロデューサをダウンロード、インストールおよび登録する方法を理解しているポータル開発者が使用するのに最適です。これらのポートレットは、すべての経験レベルで使用可能です。

使用する場合

構築済ポートレットは、そのポートレットが提供する機能でニーズが満たされる場合や、すぐに利用できるパーソナライズのレベルで目的のタスクを十分に完了できる場合に使用します。

異なるユーザー・インタフェースが必要な場合や希望する機能のために複雑な設定が必要な場合など、ポートレットの拡張やパーソナライズが必要なときには、別の方法を検討してください。

11.3.2 Java Server Faces (JSF)ポートレットについて

JSFポートレットは、Oracle JSF Portlet Bridgeを使用してJSFアプリケーションから作成されます。

概要

Oracle JSF Portlet Bridgeを使用すると、アプリケーション開発者は、既存のJSFアプリケーションおよびタスク・フローをJSR 286 Javaポートレットとして公開できます。Oracle JSF Portlet Bridgeは、JSFアプリケーションとWebCenter PortalなどのWSRPポートレット・コンシューマとの統合を容易にします。

JSFポートレットでは、JSFアプリケーションとは別のソース・コードは必要ありません。これらのポートレットはOracle JSF Portlet Bridgeを使用して作成されるので、アプリケーションとポートレットの両方で1つのソースを維持するだけで済みます。同様に、ポートレット化されたJSFアプリケーションをデプロイすると、JSFポートレットも一緒にデプロイされます。したがって、Oracle JSF Portlet Bridgeを使用すると、アプリケーションとは別にポートレットを保存、管理、デプロイする必要がなくなります。

JSFポートレットの作成の詳細は、「Oracle JSF Portlet Bridgeを使用したJSFアプリケーションからのポートレットの作成」を参照してください。

対象ユーザー

Facesの知識があるアプリケーション開発者。

使用する場合

JSFポートレットは、アプリケーション開発者が、アプリケーション全体をホストしたり、同じものに対してポートレットを別に構築したりせずに、JSFアプリケーションまたはアプリケーション内の個々のタスク・フローからのコンテンツをポートレットとして表示する場合に最適です。ポートレット化すると、ポートレットの使用はWSRPプロデューサと同じです。

11.3.3 カスタムJavaポートレットについて

カスタムJavaポートレットとは、Java Portlet Specification 2.0 (JSR 286)を使用して、自分自身で作成するJavaのポートレットです。

概要

WebCenter Portalでは、規格に基づいたJSR 286 Javaポートレットの作成を簡単にするために、JDeveloperに宣言型ウィザードが用意されています。このウィザードは、ポートレットを作成するフレームワークの構成を支援します。

注意:

ポータルではOracle WebLogic PortalなどからのレガシーJSR 168ポートレットやWSRP 1.0ポートレットを使用できます。これらのポートレットは最初にJSR 286に変換する必要はありません。ただし、新しいJavaポートレットを作成する場合は、JSR 286を使用してパブリック・レンダラ・パラメータやポートレット・イベントなどの機能を利用することをお薦めします。

また、Oracle PDK-Javaポートレットもポータルで使用できます。

対象ユーザー

ウィザードの使用は簡単ですが、ポートレット・ロジックを最も上手に作成するのは、JSR 286の使用に慣れていて、プロデューサの構成を理解している経験と知識が豊富なJava開発者です。

使用する場合

要件を満たす構築済ポートレットや既存のJSFアプリケーションが見つからない場合は、カスタムJavaポートレットの使用を検討してください。

カスタムJavaポートレットは、非常に特化したビジネス・ルールやロジックがある、およびパーソナライズした認証、動的結果の精度の高い処理およびユーザー・インタフェースの完全な制御が必要な場合に使用します。

カスタムJavaポートレットの作成の詳細は、「JSR 286を使用した標準ベースのJavaポートレットの作成」を参照してください。

11.3.4 OmniPortletについて

OmniPortletとは、様々なデータ・ソースに対してポートレットを構築できる宣言型ポートレット構築ツールです。

概要

OmniPortletデータ・ソースには、XMLファイル、文字区切りの値ファイル(CSVやスプレッドシートなど)、Webサービスおよびデータベースがあります。OmniPortletユーザーは、データに対して事前に作成されたレイアウトを選択することもできます。事前に作成されたレイアウトには、表、ニュース、箇条書き、フォーム、チャートまたはHTMLが含まれます。HTMLレイアウトにより、OmniPortletのユーザーは独自のHTMLを作成し、データをHTMLに挿入できます。

対象ユーザー

ターゲット・データへのURLについて最小限の知識しかなく、プログラミング・スキルに限界のあるビジネス・ユーザーにとって、OmniPortletは役に立つツールです。

使用時期

OmniPortletは、多様なレイアウトを使用した多様なデータ・ソースに対してポートレットを迅速に構築する場合に使用します。ポートレットの設計や機能を完全に制御する場合は、別の方法を検討してください。

OmniPortletの詳細は、『Oracle Fusion Middleware Oracle WebCenter Portalでのポータルの構築』のOmniPortletの使用に関する項を参照してください

OmniPortletのかわりとして、データ統合およびプレゼンテーションの使用を検討します。詳細は、『Oracle Fusion Middleware Oracle WebCenter Portalでのポータルの構築』のデータ視覚化の使用に関する項を参照してください。

別のWebページからデータを挿入する場合は、Oracle WebCenter Portalのページレット・プロデューサのページレット・プロデューサを使用してクリッパ・ページレットを使用することを検討してください。詳細は、「クリッパの構成方法」を参照してください。

11.3.5 ポートレット・テクノロジ

新しいポートレットを作成する場合、使用できるテクノロジは何種類かあります。使用するテクノロジはいくつかの要因によって決まります。

図11-3は、環境と要件に最も適したポートレット実装テクノロジを特定できるディシジョン・ツリーを示しています。図の下には、同じ情報を図ではない形式で示し、さらに注意事項も記載されています。

図11-3 ポートレット・テクノロジのディシジョン・ツリー

1. コンポーネントを分散させる必要はありますか。

- はい: 質問2に進みます。

- いいえ: ポートレットは必要ありません。使用側のアプリケーションにローカルなOracle ADFタスク・フロー(または他のテクノロジ)を使用します。詳細は、『Oracle Fusion Middleware Oracle Application Development FrameworkによるFusion Webアプリケーションの開発』のADFタスク・フローの作成に関する項を参照してください。

分散環境では、デプロイメントがより複雑になるため、問題の追跡がより困難になる可能性があります。ただし、処理の負荷を複数のサーバーに分散したり、複数の異なるコンシューマがコンポーネントを使用できるようになります。

2. .NETコンポーネントを使用側のアプリケーションに公開する必要はありますか。

- はい: Oracle WebCenter WSRP Producer for .NETを使用します。詳細は、『Oracle WebCenter WSRP Producer for .NET開発ガイド』を参照してください。

- いいえ: 質問3に進みます。

Oracle WebCenter WSRP Producer for .NETを使用すると、任意の.NETアプリケーションをWSRPプロデューサとして動作させることができます。

3. リモートで公開する必要がある既存のOracle ADFまたはJSFのページまたはタスク・フローはありますか。

- はい: Oracle JSF Portlet Bridgeを使用して既存のコンポーネントを公開します。詳細は、「Oracle JSF Portlet Bridgeを使用したJSFアプリケーションからのポートレットの作成」を参照してください。

- いいえ: 質問4に進みます。

このように既存のOracle ADFコンポーネントを使用すると、ポートレットの開発は非常に簡単になりますが、Oracle ADFを使用してポートレットを実装した場合、表11-1に示すような影響があることに注意してください。

4. 既存のJSR 168またはJSR 286ポートレットはありますか。

- はい: 既存のJSR 168またはJSR 286ポートレットを使用します。詳細は、WSRPプロデューサの登録に関する項を参照してください。

- いいえ: 質問5に進みます。

WebCenter Portalでは、WebCenterコンシューマと完全な互換性があるJSR 168およびJSR 286ポートレットをWSRP経由で公開し、そのようなポートレットで、特定のコンシューマに固有の条件を想定しないことを前提としています。

5. WebCenter Portalコンシューマと正しく連携して動作する既存のOracle PDK-Javaポートレットはありますか。

- はい: 既存のPDK-Javaポートレットを使用します。詳細は、「Oracle PDK-Javaポートレット・プロデューサの登録」を参照してください。

- いいえ: 質問6に進みます。

6. コンポーネントを(インライン・フレーム内ではなく)直接コンシューマ・ページ内にレンダリングする必要はありますか。

- はい: インライン・フレーム内へのレンダリングを要求するマークアップを使用しないJSR 286ポートレットを記述します。詳細は、「JSR 286を使用した標準ベースのJavaポートレットの作成」を参照してください。

- いいえ: 質問7に進みます。

7. Oracle ADFを使用してコンポーネントを実装する必要はありますか。

- はい: Oracle JSF Portlet Bridgeを使用し、Oracle ADFのページまたはタスク・フローをポートレットとして公開します。詳細は、「Oracle JSF Portlet Bridgeを使用したJSFアプリケーションからのポートレットの作成」を参照してください。

- いいえ: JSR 286ポートレットを記述します。詳細は、「JSR 286を使用した標準ベースのJavaポートレットの作成」を参照してください。

Oracle ADFを使用してポートレットを実装するかどうかを決めることは、大まかに言えば、それを使用して通常のWebアプリケーションを実装するかどうかを決めることと同じです。ただし、Oracle ADFを使用すると、リモート・ポートレットの使用時に特有の(マークアップ、リソースおよびPPRに対する)ネットワーク・ホップとコンシューマに関する処理が追加で発生するため、ポートレットを使用しない場合に比べて、有効な選択肢にならない可能性があります。

また、Oracle ADFを使用してJava EEアプリケーションを開発することの具体的な利点について、OTNで提供されているOracle ADFの概要に関するホワイト・ペーパーを参照してください。Oracle ADFタスク・フローを使用することのもう1つの利点は、インライン・フレームでの実行時に問題が発生した場合、後からローカルで同じタスク・フローを実行できることです。

表11-1は、WebCenter Portalで使用するコンポーネントを実装する場合に、様々な基準にあわせて特定のポートレット・テクノロジを選択することでどのような影響があるかをまとめたものです。

表11-1 ポートレット構築テクノロジの比較マトリックス

ローカルのOracle ADFページとタスク・フロー

WebCenter WSRP Producer for .NET

JSR 286ポートレット

JSFポートレット

分散アーキテクチャ

不可。

可。WSRP SOAP/HTTPを使用します。

可。WSRP SOAP/HTTPを使用します。

可。WSRP SOAP/HTTPを使用します。

データ・アクセスのサポート

データベース、Webサービスおよびレガシー・システムとの連動の完全サポート。

制限はありません。これは基礎となる.NETフレームワークを利用し、これが各種様々なデータ・リポジトリへのデータ・アクセスを提供します。

制限はありませんが、ポートレット開発者がおそらくサード・パーティ製のフレームワークを使用して実装する必要があります。

データベース、Webサービスおよびレガシー・システムとの連動の完全サポート。

ナビゲーション/フロー制御のサポート

宣言型ナビゲーションに対する包括的なサポートを提供します。

宣言型ナビゲーションに対する包括的なサポートを提供します。

制限はありませんが、ポートレット開発者がおそらくサード・パーティ製のフレームワークを使用して実装する必要があります。

宣言型ナビゲーションに対する包括的なサポートを提供します。

UIの豊富さ

多くのAJAX対応のコンポーネントで豊富なWebベースのUIを提供します。

制限はありません。標準的なAJAXとASP.NET AJAXツールキットの両方をサポートします。

制限はありませんが、ポートレット開発者がおそらくサード・パーティ製のフレームワークを使用して実装する必要があります。

多くのAJAX対応のコンポーネントで豊富なWebベースのUIを提供します。

セキュリティ

アプリケーションとの完全統合

WS-Securityを使用して伝播される、またはWSRPを使用してコンシューマによってアサートされるユーザー・アイデンティティ

認証チェックは開発者が実装する必要があります。

ユーザー・プロファイル情報はWSRPユーザー・プロファイル項目を使用して渡すことができます。

WS-Securityを使用して伝播される、またはWSRPを使用してコンシューマによってアサートされるユーザー・アイデンティティ

認証チェックは開発者が実装する必要があります。

ユーザー・プロファイル情報はWSRPユーザー・プロファイル項目を使用して渡すことができます。

WS-Securityを使用して伝播されるユーザー・アイデンティティ。

認証はOracle ADFによって実装されます。

コンポーネント間通信(イベント)

ADFコンテキスト・イベントにより、タスク・フローは通信できます。

クライアント側で達成できる方法を示したサンプルをご用意しています。現行バージョンはWSRPサーバー側のイベント・モデルをサポートしていません。

JSR 286イベントを完全サポート。コンシューマのポートレット・イベントとADFコンテキスト・イベントとの間のポートレットとイベントのマッピング間での自動イベント配信を含みます。

ADFコンテキスト・イベントに加えてJSR 286ポートレットにより、ローカルな場合と同じようにタスク・フローの通信を可能にします。

コンシューマとコンポーネントとの間の対話処理(パラメータ)

タスク・フロー入力パラメータは、各種ソースから値をとることができます。

WSRPポートレット・パラメータの完全サポート。パラメータはすべてコンシューマ・アプリケーションから渡すことができます。

JSR 286パラメータを完全サポート。コンシューマとの間でのパブリック・パラメータ値の受け渡し、およびポートレット間でのパラメータ値の自動共有を含みます。

タスク・フロー入力パラメータに加えてJSR 286ポートレットにより、ローカルな場合と同じにようにコンシューマ・アプリケーションの各種ソースから値を取得します。

パフォーマンスとキャッシュ

コンポーネントはローカル・サーバー上で実行するため追加のネットワーク・ホップはありません。

リモート・コンポーネントは追加のネットワーク・ホップを必要とします。

構成パラメータにより、リソース(CSS、JavaScriptおよび.axdリソース・ファイル)をコンシューマを介してプロキシできます。または、直接アクセスして負荷を減らし、ブラウザのキャッシュを利用することもできます。

リモート・コンポーネントは追加のネットワーク・ホップを必要とします。

リソースはコンシューマによってプロキシされます。

コンポーネントのパフォーマンスは実装によって異なります。

有効期限ベースおよび有効化ベースのキャッシュがサポートされています。その制御はポートレット開発者が行います。

リモート・コンポーネントは追加のネットワーク・ホップを必要とします。

多くのリソースがコンシューマを介してプロキシされます。

フレームワークは重い性質を持つため、単純なアプリケーションはパフォーマンスを重視するか、手作りのJSR 286相当とで比較されることになります。ただし、より複雑な機能を提供するアプリケーションについては、フレームワークを使用するパフォーマンス上のメリット(たとえば部分的なページ・レンダリング)がより明白になります。

JavaScript、CSSおよびその他のリソースは、ブラウザにキャッシュされます。キャッシュはフレームワークによって制御されます。

同時実行性

複数のタスク・フローが順次呼び出されます。

ポートレットはパラレルに呼び出されます。

ポートレットはパラレルに呼び出されます。

ポートレットはパラレルに呼び出されます。

ジオメトリ管理

コンポーネントは、格納元のページで直接レンダリングされます。

ポートレットはプロキシされたインライン・フレームで自動的にレンダリングされ、それに応じてサイズ変更されます。スライダ・バーは非表示になります。

ポートレットのジオメトリとインライン・レンダリングは(フレーム化されたレンダリングに対して)ポートレット開発者が制御します。

複雑なUIは、インライン・フレームでのレンダリングをより必要とする傾向があります。

ポートレットはインライン・フレームでレンダリングする必要があります。

JavaScriptの使用

JavaScriptは、豊富なユーザー経験を提供するフレームワークの基本部分として頻繁に使用されます。

通常、開発者はJavaScriptを記述する必要はありません。

JavaScriptは、豊富なユーザー経験を提供するフレームワークの基本部分として頻繁に使用されます。

通常、開発者はJavaScriptを記述する必要はありませんが、JavaScriptをどのように使用できるかを示すためにサンプルが用意されています。

スクリプトはすべてコンシューマを介してプロキシできます。

JavaScriptの使用とパッケージ化のレベルはポートレット開発者によって制御されます。

開発者は、ポートレットがインラインでレンダリングされる場合にはJavaScriptの使用に関して特別に配慮する必要があります。

JavaScriptは、豊富なユーザー経験を提供するフレームワークの基本部分として頻繁に使用されます。

通常、開発者はJavaScriptを記述する必要はありません。

スクリプトはすべてコンシューマを介してプロキシする必要があります。

スキル要件/開発の容易さ

ADF、およびおそらくJavaの知識が必要です。

ADFは、すべてのレイヤー間に統合フレームワークを提供します。

JDeveloperは、ADFアプリケーションを開発するための完全統合環境を提供します。これには、フレームワークのすべてのレイヤーの宣言オプションも含まれます。

.NET Webパーツの開発またはASP.NET Webアプリケーションの開発の知識が必要です。

Java、Javaポートレット、およびコンポーネントの実装に使用されるその他のフレームワークの知識が必要です。

開発時間は、サーブレット・ベースのコンポーネントの開発に必要な時間と同程度です。

ADF、およびおそらくJavaの知識が必要です。ADFが提供する豊富なUIと制御フレームワークにより、最も単純なアプリケーションを除くすべてのアプリケーションに関し、(手作りのポートレットに比べて)開発時間が短縮される可能性があります。

ADFは、すべてのレイヤー間に統合フレームワークを提供します。

JDeveloperは、ADFアプリケーションを開発するための完全統合環境を提供します。これには、フレームワークのすべてのレイヤーの宣言オプションも含まれます。

デバッグ

JDeveloperはアプリケーション・コードをデバッグするための包括的なソリューションを提供します。

.NETフレームワークはアプリケーション・コードをデバッグするための包括的なソリューション、およびSOAPとHTTPトラフィックのネットワーク・トレースを提供します。

WSRPコンシューマ生成デバッグ・メッセージのLog4netプラグイン。

デプロイメントのリモートという性質によって、より困難です。

プロデューサは、コンシューマとプロデューサとの通信をモニターするためのツールを提供します。

JDeveloperはアプリケーション・コードをデバッグするための包括的なソリューションを提供します。

デプロイメントのリモートという性質によって、より困難です。

プロデューサは、コンシューマとプロデューサとの通信をモニターするためのツールを提供します。

JDeveloperはアプリケーション・コードをデバッグするための包括的なソリューションを提供します。

デプロイメント

コンポーネントはクライアント・アプリケーションの一部としてデプロイされます。

アプリケーション全体を1つのEARファイルにパッケージ化してデプロイできます。

デプロイメントでは、特定のフォルダ階層下での.NETアプリケーションのコピー、および構成XMLファイルの入力が必要です。

コンポーネントは、必要に応じてこのフォルダ階層の下でスタンドアロンで簡単に実行できます。

デプロイメントの分散された性質と、複数のアプリケーションによって複雑さが増します。

デプロイメントの分散された性質と、複数のアプリケーションによって複雑さが増します。

コンポーネントは必要に応じてスタンドアロンで簡単に実行できます。

サポート・レベル

ADFフレームワークはOracle製品です。したがってサポートされています。

WebCenter WSRP Producer for .NETはOracle製品です。したがってサポートされています。

JSR 286プロデューサはOracle製品です。したがってサポートされています。

ADFフレームワーク、Oracle JSF Portlet Bridge、およびJSR 286プロデューサはOracle製品です。したがってサポートされています。

11.3.6 ポートレットとタスク・フロー

ポータルの作成時に共通する質問は、ポートレットとタスク・フローを使用する状況についてです。

ポートレットは再利用可能なWebコンポーネントで、多数の異なるソースからコンテンツを描画できます。ポートレットでは、静的HTMLから、複雑なWebサービスや処理負荷の高いアプリケーションのためのJavaのコントロールまで、どのようなものでも管理と表示が可能です。

1つのポートレットで複数のインスタンスを保持することもできます。つまり、1つのポータル内の各種ページにポートレットが表示され、ポートレットがWeb Services for Remote Portlets (WSRP)に対して有効な場合は複数のポータル間でも表示できます。特定のユーザーやグループのニーズに応えるようにポートレットをカスタマイズできます。

タスク・フローを使用すると、カスタマイズ可能なアプリケーションを、再使用可能なビジネス・ロジックのユニットで作成できます。これは、アプリケーションの制御フローをモジュール単位で定義するアプローチを意味します。それぞれのタスク・フローは、再利用可能な1つのビジネス・ロジックを表します。メモリーとトランザクションのスコープが分離されているため、タスク・フローとそれを囲むアプリケーションは分離されています。この分離より、Oracle WebCenter Portalのページ・エディタなどにタスク・フローを含めることができます。

タスク・フローは、制御フローのルール、アクティビティおよびマネージドBeanをカプセル化して、ビジネス・モジュールを実装します。WebCenter Portalを使用して構築されたポータルでは、簡単にタスク・フローを再利用できます。タスク・フローは、カスタマイズ可能な任意のWebCenter Portalポータル・ページにドラッグ・アンド・ドロップできます。このような意味で、タスク・フローは、任意のADFアプリケーションでの再利用や削除が可能な論理ポートレットとみなすことができます。

タスク・フローはビジネス・プロセスの高水準の実装ですが、データアクセスやビジネス・ロジックをホストすることはありません。そのためには、タスク・フローがデータ・コントロールや宣言バインディングと相互作用する必要があります。さらに、これらのデータ・コントロールやバインディングは、ADFビジネス・コンポーネント・フレームワークと相互作用します。

Oracle発行の標準JSR 329に従い、タスク・フローを標準ベースのポートレットとして公開できます。アプリケーションを改訂すると、ポートレットは、アプリケーションとともに必然的かつ自動的に更新されます。個別の開発プロジェクトは必要ありません。JSR 329をサポートするために、WebCenter Portalでは、Oracle JSF Portlet Bridgeが用意されています。Oracle JSF Portlet Bridgeの詳細は、「Oracle JSF Portlet Bridgeを使用したJSFアプリケーションからのポートレットの作成」を参照してください。

タスク・フローをポートレットとして消費する他に、タスク・フローをJSFアプリケーションで共有ライブラリとして消費してこれらのJSFフラグメントを直接埋め込むことができます。タスク・フローの周囲のトランザクションを、アプリケーションのそれ以外の機能と一緒にラップできます。詳細は、『Oracle Application Development FrameworkによるFusion Webアプリケーションの開発』のADFタスク・フローの概説に関する項を参照してください。

ポートレットとタスク・フローを使用する状況の詳細は、Oracle WebCenter & ADF Architecture Teamのブログを参照してください。

11.4 ポートレットの開発について

ポートレット・プロデューサはOracle JDeveloperで開発できます。

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

- ポートレット・プロデューサ・アプリケーションについて

- ポートレット・プロデューサ・アプリケーションの作成方法

- ポートレット・モード

- ポートレット間通信

- ポートレットのパーソナライズとカスタマイズ

- ポートレット・パフォーマンス

- 複数言語に対応したポートレット

- ポートレットのデプロイ

11.4.1 ポートレット・プロデューサ・アプリケーション

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

- ポートレット・プロデューサ・アプリケーションについて

- ポートレット・プロデューサ・アプリケーションの作成方法

11.4.1.1 ポートレット・プロデューサ・アプリケーションについて

ポートレット・プロデューサ・アプリケーションは、Javaポートレットを作成およびデプロイすることに特化して構成されたアプリケーションです。

ポートレット・プロデューサ・アプリケーションに適したコンポーネントを簡単に見つけて使用できるようにするには、適切なテクノロジ・スコープを設定し、タグ・ライブラリを追加して、必要になるJavaクラスをクラス・パスに追加しておく必要があります。このようにしておくと、関連するコンポーネントがコンポーネント・パレットに取り込まれ、関連するコンテキスト・メニューがJDeveloperで使用できるようになります。

JDeveloperには、ポートレット・プロデューサ・アプリケーションの作成に適したスコープが設定され、適切なタグとJavaライブラリが追加されるアプリケーション・テンプレートが用意されています。「WebCenterポートレット・プロデューサ・アプリケーション」テンプレートを使用すると、Javaポートレットの作成用にスコープ設定された単一のプロジェクトを使用して、簡単にアプリケーションを作成できます。

11.4.1.2 ポートレット・プロデューサ・アプリケーションの作成方法

ポートレットを作成するには、まずポートレット・プロデューサ・アプリケーションを作成する必要があります。

「WebCenterポートレット・プロデューサ・アプリケーション」テンプレートを使用してアプリケーションを作成するには:

1. 次のいずれかの方法で「新規ギャラリ」ダイアログにアクセスします。

- 「ファイル」メニューから、「新規」→「アプリケーション」の順に選択します。

- 「アプリケーション」メニューから「新規」を選択します。

- 既存のアプリケーションが開いている場合は、アプリケーション・ナビゲータで、アプリケーション名をクリックして、「新規アプリケーション」を選択します。

- 既存のアプリケーションを開いている場合は、アプリケーション・ナビゲータで、アプリケーション名を右クリックして、「新規」→「アプリケーション」の順に選択します。

2. 「新規ギャラリ」ダイアログで、「WebCenterポートレット・プロデューサ・アプリケーション」を選択して、「OK」をクリックします。

3. WebCenterポートレット・プロデューサ・アプリケーションの作成ウィザードの「アプリケーションの名前付け」ページで、「アプリケーション名」フィールドにアプリケーションの名前を入力します。

4. 「ディレクトリ」フィールドでは、デフォルト・パスを受け入れるか、アプリケーションを格納するディレクトリのパスを入力します。

次に例を示します。

C:\JDeveloper\mywork\myApplication

オプションで、「参照」ボタンをクリックして、目的のディレクトリに移動します。

5. 必要に応じて、「アプリケーション・パッケージの接頭辞」フィールドに、このアプリケーション内に作成されるパッケージに使用する接頭辞を入力します。

6. 「終了」をクリックして、デフォルトのプロジェクト構成のポートレット・プロデューサ・アプリケーションを作成します。

図11-4は、アプリケーション・ナビゲータ内に表示されている、単一のポートレット・プロジェクトを使用して新しく作成したポートレット・プロデューサ・アプリケーションを示しています。

図11-4 アプリケーション・ナビゲータ内の新しいポートレット・プロデューサ・アプリケーション

Oracle JDeveloperのユーザー・インタフェース内で公開されるオプションは、ポートレットの開発に適したものに制限されます。

このアプリケーション内でポートレットを作成する方法の詳細は、「JSR 286を使用した標準ベースのJavaポートレットの作成」を参照してください。

11.4.2 ポートレット・モード

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

- ポートレット・モードについて

- 表示モード

- 編集モード

- デフォルト編集モード

- ヘルプ・モード

- 情報モード

11.4.2.1 ポートレット・モードについて

ポートレット・モードは、実行時機能をユーザーが確認できるようにするものです。WebCenter Portalは、次の標準ポートレット・モードをサポートします。

- 表示モード

- 編集モード

- デフォルト編集モード

- ヘルプ・モード

- 情報モード

WebCenter Portalは、サポートする一連の拡張モードを定義します。各種モードは、JSR 286ポートレットに使用できます。たとえば、JSR 286 Javaポートレットの作成ウィザードには、「印刷」モードがあり、これを使用してポートレットの印刷用のバージョンを使用できます。

コーディング・ポートレットをJSR 286にコーディングする場合は、portlet.xmlファイルに独自のカスタム・ポートレット・モードも宣言できます。これらを使用してポートレットで提供するその他の機能に対応できます。

カスタム・ポートレット・モードの定義は、特に、ポートレットを他のベンダーのポータル実装と相互運用する場合に役立ちます。これらのモードはすべてユーザーに提供できます。実際に、デフォルト編集モードのようなモードの提供をお薦めします。

注意:

サード・パーティのポータル製品には、プロデューサが提供できる各自の拡張モード・セット(JSR 286カスタム・モード)があります。サード・パーティまたはカスタム・ポートレット・プロデューサが提供する任意のカスタム・モードは無視されるため、サポートされません。

11.4.2.2 表示モード

ポートレットは表示モードを使用して他のポートレットとともにページ上に現れます。ポートレットといえば、ほとんどの人がこのモードを思い浮かべます。JSR 286ポートレットは表示モードを持つ必要がありますが、他のモードはオプションです。

ポートレットの開発時には、ページ上でポートレットの外観に影響を与える可能性のあるすべての要素(ポートレットのコンテナ・オブジェクトや、開発したポートレットがページを共有する他のポートレットなど)について検討する必要があります。たとえば、ポートレットをHTML表のセル内に配置するとします。ポートレットは、表のセル内でレンダリングできるコンテンツしか表示しないはずです。さらに、表のセルの実際のサイズは、エンド・ユーザー設定、ブラウザの幅、およびポートレットに表示されるコンテンツの量とスタイルによって変わる場合があります。

11.4.2.2.1 ポートレットのレンダリングに関するHTMLガイドライン

プレーンHTMLは最も基本的なポートレットのレンダリング方法であり、ポートレットの開発者に大きな柔軟性を提供します。リンク、フォーム、イメージ、表など、HTMLの表のセル内に表示できるほとんどの標準的なHTMLパラダイムを使用できます。HTMLが適切に作成されていない場合は、異なる複数のブラウザで表示したときに表示の一貫性がなくなり、ページの一部が表示されないこともあります。次のルールに従ってください。

- 標準HTMLを使用する - HTMLの公式な仕様はW3Cから入手できます。詳細は、http://www.w3c.org/を参照してください。

- 長い複雑なHTMLは避ける - 使用するHTMLはサイトのパフォーマンスの印象に影響します。ユーザーは、リクエストしたページの表示にかかる時間に基づいてパフォーマンスを判断します。ブラウザには、HTMLを解釈して表示するための時間が必要です。ポートレットが複雑なHTMLをレンダリングしたり、サード・パーティのアプリケーションなど外部リソースを待機する場合は、ページのレンダリングが大幅に遅くなることがあります。

- 閉じていないタグや外部タグを避ける - ページはブラウザの動作の影響を受けるため、タグが正しく閉じていないとページの動作は予測不可能になります。

- コンテナ・オブジェクトによって課される制限を考慮する - ポートレットが表のセルなどのHTML要素に含まれない場合、ポートレットがコンテナ内でレンダリングできることを確認する必要があります。たとえば、表のセルにポートレットを置く場合、これらは表への挿入時には表示されないためポートレット内でフレームを使用することはできません。

- ポートレット・コンテンツを簡潔に保つ - 全画面のコンテンツを取得して、小さなポートレットから公開しないでください。ポートレットのコンテンツが小さくなりすぎて、小さなモニターではポートレットが使用不能になる場合があります。

- ポートレットに固定幅のHTML表示を作成しない - ユーザーのページ上にポートレットが持つ列の幅を伝える方法はありません。与えられた空間よりも広い空間がポートレットに必要な場合、一部のブラウザでは、他のポートレットとオーバーラップする可能性があります。

- 長い、途切れのないテキスト行を避ける - 固定幅の表を使用した場合と同様の結果になります。一部のブラウザでは、他のポートレットとオーバーラップする可能性があります。

- ページのサイズ変更時の動作を確認する - ブラウザ・ウィンドウをサイズ変更した際のポートレットの動作をテストし、ポートレットがブラウザ・ウィンドウの様々なサイズで動作することを確認してください。

- デフォルト・ブラウザのフォント変更時の動作を確認する - エンド・ユーザーはどんなフォント・サイズでも好きなものを選択する可能性があり、彼らはいつでも変更する可能性があります。ポートレットは、その変更に対応する必要があります。

11.4.2.2.2 ポートレットのレンダリングに関するCSSガイドライン

ページ上のそれぞれのポートレットのフォントと色は、ユーザーが選択したスタイル設定に一致する必要があります。このために、これらのスタイル選択は、Cascading Style Sheet (CSS)を使用して自動的に埋め込まれます。その後、ポートレットは直接またはApplication Programming Interfac (API)を使用して、フォントと色の設定にアクセスします。

ブラウザによってCSS仕様の実装レベルが異なりますが、WebCenter Portalは、この仕様の非常に基本的なサブセットを使用して、整合性のあるフォントと色を実現します。CSSの実装レベルによってブラウザ間でのページの一貫性が影響されることはありません。CSSの使用に関する次のガイドラインを考慮してください。

- ハードコーディングのかわりにCSSを使用する - ハードコーディングのフォントとカラーはお薦めしません。フォントと色をハードコーディングすると、エンド・ユーザーがページ・スタイルの設定を変更した場合に、ポートレットが不釣合いに見えることがあります。開発者はエンド・ユーザーが設定するフォントや色を予測できないため、ユーザーが選択した背景色と同じフォント色でハードコーディングする可能性があり、この場合、ユーザーにはポートレット・コンテンツが表示されなくなります。

- 絶対配置にCSSの使用は避ける - ユーザーは各自のポータル・ページをパーソナライズできるため、ポートレットがページ上の特定の位置に表示される保証はありません。

- アクセシビリティの標準に従う - 必ず既存のアクセシビリティの標準に従って、スタイルシートを記述してください。詳細は、http://www.w3c.org/TR/WCAG10-CSS-TECHSを参照してください。

11.4.2.3 編集モード

ポートレットは編集モードを備えており、これによってユーザーはポートレットの動作をパーソナライズできます。パーソナライズはこれらを実行するユーザーのみに表示され、他のユーザーには表示されません。編集モードには設定のリストがあり、ユーザーはその設定を変更できます。設定には、タイトル、コンテンツの種類、書式、情報量、フォーム要素のデフォルト、およびポートレットの外観や内容に影響する他のあらゆる要素が含まれます。

通常、ユーザーは、ポートレット・ヘッダーの「パーソナライズ」アイコンをクリックしてポートレットの編集モードにアクセスします(図11-5)。

図11-5 「パーソナライズ」アイコン

ユーザーが「パーソナライズ」をクリックすると、同じブラウザ・ウィンドウに新しいページが表示されます。このポートレットは、通常、ポートレットの設定を選択するダイアログを表すWebページを作成します。設定を適用すると、自動的に元のページに戻ります。

11.4.2.3.1 編集モード操作に関するガイドライン

次のガイドラインに従って、編集モードでユーザーに公開する内容を管理してください。

- ポートレットのタイトルをユーザーがパーソナライズできるようにする - 同じポートレットが同じポータル・ページに複数回追加されることがあります。ユーザーがタイトルをパーソナライズできると混乱を避けることができます。

- キャッシュを使用する場合はコンテンツを無効化する - パーソナライズによってポートレットの表示やコンテンツに変更が生じた場合は、ポートレットのコンテンツがキャッシュから再生成されることを確認する必要があります。確認しないと、誤ったコンテンツが表示されることがあります。

- 編集モードを管理ツールとして使用しない - 編集モードは、エンド・ユーザーがポートレットの動作を変更するために使用します。プロデューサ設定の変更などの管理タスクが必要な場合は、そのタスク専用の安全なポートレットを作成してください。

11.4.2.3.2 編集モードのボタンに関するガイドライン

整合性を維持し、ユーザーにとっても便利なように、次のボタンを次の順序で編集モードに実装してください。

- OK - エンド・ユーザーのパーソナライズを保存し、ポートレットを表示モードに戻します。

- 適用 - エンド・ユーザーのパーソナライズを保存し、現在のページをリロードします。

- 取消 - 変更を保存せずに、ポートレットを表示モードに戻します。

11.4.2.4 デフォルト編集モード

ポートレットはデフォルト編集モードを備えており、アプリケーション管理者はこのモードを使用して、特定のポートレット・インスタンスのデフォルト動作を実行時にカスタマイズできます。デフォルト編集モードには設定のリストがあり、アプリケーション管理者はその設定を変更できます。設定には、タイトル、コンテンツの種類、書式、情報量、フォーム要素のデフォルト、またはポートレットの外観や内容に影響するあらゆる要素が含まれます。

パーソナライズは個々のユーザーのポータル・インスタンスに影響しますが、デフォルト編集モードで行われたカスタマイズはすべてのユーザーのポートレット・インスタンスに影響します。デフォルト編集モードは、ポートレットの表示内容と表示形式に対してシステム・レベルのデフォルトを定義するためのモードであるため、このモードを管理ツールとして使用したり、他のポートレットの管理に使用したりすることは避けてください。

アプリケーション管理者は、ページの編集時に、コンポーネントの「アクション・メニューの表示」から「カスタマイズ」を選択して、デフォルト編集モードにアクセスします(図11-6)。

図11-6 ポートレットのカスタマイズ

ユーザーが「カスタマイズ」をクリックすると、同じブラウザ・ウィンドウに新しいページが表示されます。このポートレットは、通常、ポートレット・インスタンスの設定をカスタマイズするダイアログを表すWebページを作成します。設定を適用すると、ユーザーは自動的に元のページに戻されます。

11.4.2.4.1 デフォルト編集モード操作に関するガイドライン

デフォルト編集モードでアプリケーション管理者に公開する内容は、次のガイドラインに従う必要があります。

- デフォルト編集モードを管理ツールとして使用しない - デフォルト編集モードは、アプリケーション管理者がポートレットの動作を変更するために使用します。プロデューサ設定の変更などの管理タスクが必要な場合は、そのタスク専用の安全なポートレットを作成してください。

11.4.2.4.2 デフォルト編集モードのボタンに関するガイドライン

整合性を維持し、ユーザーにとっても便利なように、次のボタンを次の順序でデフォルト編集モードに実装してください。

- OK - アプリケーション管理者のカスタマイズを保存し、ポートレットを表示モードに戻します。

- 適用 - アプリケーション管理者のカスタマイズを保存し、現在のページをリロードします。

- 取消 - 変更を保存せずに、ポートレットを表示モードに戻します。

11.4.2.4.3 カスタマイズ値のレンダリングに関するガイドライン

カスタマイズ設定の変更に使用されるフォームを表示する場合、アプリケーション管理者が何度も設定を再入力せずにすむように値のデフォルト値を設定する必要があります。動作の整合性を維持するために、カスタマイズ値のレンダリングは次の順序で行います。

- インスタンス設定 - ポートレット・インスタンスのシステム・デフォルトを問い合せて表示します。

- ポートレット・デフォルト - システム・デフォルトのカスタマイズがない場合は、一般的なポートレットのデフォルトを表示しますが、空白の場合があります。一般的なポートレットのデフォルトはポートレットにハードコーディングされている場合がありますが、システム・デフォルトで上書きしてください。

11.4.2.5 ヘルプ・モード

ポートレットは、ヘルプ・モードを使用して、そのポートレットの機能と使用方法に関する情報を表示します。ユーザーはこのモードで、ポートレットおよびそのコンテンツと機能に関する有用な情報を検索できます。

ユーザーは、「アクション」メニューから「ヘルプ」を選択して、ポートレットのヘルプ・モードにアクセスします(図11-7)。

図11-7 ポートレットの「アクション」メニューの「ヘルプ」オプション

11.4.2.5.1 ヘルプ・モードに関するガイドライン

ヘルプ・モードで公開する内容は次のガイドラインに従ってください。

- ポートレットの使用方法を説明する - ユーザーは、ポートレットが提供するすべての機能をそのインタフェースからだけでは確認できない場合があります。ポートレットの機能とその活用方法を説明してください。

11.4.2.6 情報モード

ポートレットは情報モードを使用してユーザーに現在実行中のポートレットのバージョン、発行と著作権の情報、ポートレット開発者への連絡方法などの情報を提供します。登録が必要なポートレットは、情報モードからもWebベースの登録アプリケーションまたは連絡先情報にリンクできます。

ユーザーは、「アクション」メニューから「情報」を選択して、ポートレットの情報モードにアクセスします(図11-8)。

図11-8 ポートレットの「アクション」メニューの「情報」オプション

同じブラウザ・ウィンドウに新しいページが表示されます。このページにコンテンツを生成するか、またはユーザーを既存のページやアプリケーションに移動させることができます。

11.4.2.6.1 情報モードに関するガイドライン

次のガイドラインに従って、情報モードでユーザーに公開する内容を管理してください。

- 関連する著作権、バージョン、開発者情報を表示する - ユーザーは使用しているポートレットは何か、どこで詳細を得ることができるかを知る必要があります。この情報ページは、ポートレットのサポート時に重要になることがあります。

11.4.3 ポートレット間通信

ポートレット間通信により、ポートレットはデータを共有してイベントに対応できます。WebCenter Portalは、パラメータとイベントを通じたポートレット間通信をサポートします。

- パラメータ - パブリック・レンダラ・パラメータにより、ポートレット間のパラメータ値を共有することでポートレット間通信が可能になります。たとえば、マップ・ポートレットと天気ポートレットが両方ともZipcodeパラメータを使用するように構成されている場合、マップ・ポートレットに郵便番号を入力すると、天気ポートレットの同じパラメータ値が更新されます。
パブリック・レンダラ・パラメータの詳細は、「JSR 286ポートレットでのパブリック・レンダラ・パラメータの使用方法」を参照してください。

- イベント - ポートレットを含むページ上で、または同じページ上の別のポートレットで実行されるアクションなど、ポートレットそのものの外側で発生するアクションに対応する機能をポートレットに提供することでポートレット間通信を可能にします。ポートレット・イベントは、ポートレットがそれ自体のイベントをトリガーすることでイベントに応答し、それがそのページ上の他のポートレットに影響を与えるようにカスケードできます。
ポートレット・イベントの詳細は、「JSR 286ポートレットでのポートレット・イベントの使用方法」を参照してください。

WebCenter Portalでは、パラメータとイベントが同じ名前を共有している、または適切な別名を定義していれば、ポートレット間通信がデフォルトで自動的に発生します。この通信を可能にするために追加コードを提供する必要はありません。

Oracle JSF Portlet Bridgeを使用して作成されるポートレットに固有のポートレット間通信ガイドラインは、「イベントを使用したその他のポートレットとのJSFポートレットのリンク」を参照してください。

11.4.4 ポートレットのパーソナライズとカスタマイズ

ポートレット・プリファレンスによってエンド・ユーザーはポートレットを実行時にパーソナライズまたはカスタマイズできます。パーソナライズはこれらを実行するユーザーのみに表示され、他のユーザーには表示されません。カスタマイズは、ポートレットをパーソナライズしていないすべてのユーザーに表示されます。

ポートレット・プリファレンスによって、ポートレットの再利用性が大幅に向上します。同じポートレットを複数のページ上で、または同じページ上で複数回インスタンス化できます。ポートレット・プレファレンスを使用することで、ポートレットの各インスタンスは様々な方法で動作できますが、使用するコードとユーザー・インタフェースは同じままです。

たとえば、デフォルトでは、JDeveloperのウィザードを使用してJSR 286ポートレットを作成すると、実行時にユーザーがポートレットのタイトルを変更できるようにポートレット・プリファレンスが作成されます。ポートレットの作成中に、またはポートレットの作成後にportlet.xmlファイルを編集することで、追加のポートレット・プリファレンスを作成して、実行時のユーザーによるその他のポートレット変更を可能にすることができます。

ポートレット・プリファレンスは、登録やポートレット・ハンドルなどの、登録およびポートレット・インスタンスに関する情報とともに永続ストアに格納されます。ポートレット・プロデューサは、3種類の永続ストアのうちの1つを使用できます。

- コンシューマ - コンシューマ永続ストアは、プロデューサ・メタデータをコンシューマ・アプリケーションに関連付けます。本番環境ではコンシューマの永続性を使用することをお薦めします。

- データベース - データベース永続ストアは、リレーショナル・データベースを使用してデータを永続化します。

- ファイル - ファイルベースの永続ストアは、ファイル・システムを使用してデータを永続化します。

データベースの依存性が削除されるため、テストにはファイルベースまたはコンシューマ永続ストアを使用することができます。ただし、本番の構成ではコンシューマの永続ストアを使用することをお薦めします。

デフォルトでは、JSR 286およびJSFポートレットではコンシューマ永続ストアが使用されます。このデフォルト設定の変更方法の詳細は、「WSRPプロデューサ用の永続ストアのセットアップ」を参照してください。

テスト環境から本番環境に移行する際などの永続ストアの移行の詳細は、「WSRPプロデューサの永続ストアの移行」を参照してください。

11.4.5 ポートレット・パフォーマンス

キャッシュは、高度な動的コンテンツを含むWebサイトのパフォーマンスの向上に使用される一般的な手法です。この手法では、キャッシュと呼ばれる待機時間の短い大きなデータ・ストアを備えたローカル・エージェントを使用してリクエストをプロキシ化することで、動的コンテンツのデータの取得と出力の生成に伴うオーバーヘッドを大幅に削減できます。キャッシュ・エージェントは、リクエストに対して次のいずれかの方法で応答します。

- リクエストされたコンテンツの有効なバージョンがキャッシュ内に存在する場合、エージェントは既存のキャッシュ・コピーをそのまま戻します。これによって、コンテンツの取得と生成というコストがかかるプロセスを省くことができます。この状態は、キャッシュ・ヒットと呼ばれます。

- リクエストされたコンテンツの有効なバージョンがキャッシュ内に存在しない場合、エージェントはリクエストをその宛先に転送し、コンテンツが戻されるのを待機します。エージェントはコンテンツをリクエスト元に戻し、そのキャッシュ内にローカル・コピーを格納して、同じコンテンツに対するリクエストが後で発生した場合に再利用します。この状態は、キャッシュ・ミスと呼ばれます。

ポートレット・プロデューサは、動的コンテンツ(つまり、ポートレット)を生成しますが、デプロイ先となるWebCenter Portalインスタンスから離れた場所にあります。このため、キャッシュによるパフォーマンス向上が可能となります。アーキテクチャは、キャッシュに適切です。プロデューサでレンダリングされたポートレットをキャッシュし、キャッシュされたコピーを再利用して後続のリクエストを処理することによって、プロデューサがページ作成にもたらすオーバーヘッドを最小限にできます。ポートレット・キャッシュは、ユーザー・リクエストに対して迅速にレスポンスするための鍵です。

JSR286ポートレットについては、2とおりのキャッシュ方法があります。これらのキャッシュ方法の主な違いは、コンテンツが有効かどうかを判断する方法にあります。

- 有効期限ベースのキャッシュ - プロデューサはレンダリング・リクエストを受信すると、そのレスポンスに有効期限のスタンプを付けます。レンダリングされたレスポンスはキャッシュに格納され、同じコンテンツに対する後続のすべてのリクエストは、有効期限が経過するまで、このキャッシュを使用して処理されます。このキャッシュ・スキームは最も簡単でパフォーマンスが優れていると考えられます。それは、キャッシュの有効性をテストするためのオーバーヘッドがほとんどなく、ネットワークのラウンドトリップを伴わないためです。有効期限ベースのキャッシュは、コンテンツの使用期間が効率よく定義されているアプリケーションに適しています。コンテンツの使用期間が確実ではない場合、有効期限ベースのキャッシュは効果的ではありません。
ポートレット・コンテンツが静的である場合、またはコンテンツの表示が最新であることが重要でない場合は、有効期限ベースのキャッシュの使用を検討します。

ポートレットに対する有効期限ベースのキャッシュの実装方法の詳細は、「JSR 286ポートレットでの有効期限ベースのキャッシュの実装」を参照してください。

- 有効化ベースのキャッシュ - レンダリング・リクエストを受信したプロデューサは、そのレスポンスにバージョン識別子(またはETag)のスタンプを付けます。この方法でもレスポンスはキャッシュされますが、キャッシュされたコンテンツをコンシューマが再利用する前に、キャッシュされたコンテンツがまだ有効かどうかを判断する必要があります。そのために、キャッシュされたコンテンツのバージョン識別子を含めたレンダリング・リクエストをプロデューサに送信します。プロデューサは、このバージョン識別子が有効であるかどうかを判断します。バージョン識別子が有効である場合、プロデューサはコンテンツを含まない軽量のレスポンスをコンシューマに即座に送信し、キャッシュされたバージョンを再利用できることを通知します。バージョン識別子が無効な場合、プロデューサは新しいバージョン識別子を含む新しいコンテンツを生成し、以前にキャッシュされたバージョンを置き換えます。このキャッシュ形式では、コンシューマは常にコンテンツが最新であるかどうかをプロデューサと確認する必要があります。キャッシュされたコピーの有効性は、プロデューサのロジックによって判断されます。この方法では、固定期間に依存するのではなく、キャッシュされたコンテンツの使用をプロデューサが管理できるという利点があります。
頻繁な変更または予測不可能な変更がある動的コンテンツを含むポートレットの場合、有効化ベースのキャッシュの使用を検討します。

ポートレットに対する検証ベースのキャッシュの実装方法の詳細は、「JSR 286ポートレットでの検証ベースのキャッシュの実装」を参照してください。

キャッシュ・ルールは、ポートレットのコンテナ・レベルで指定でき、ポートレット独自のロジックでエンコードするか、ポートレット・ウィザードを介して設定することができます。

JSFポートレットおよびカスタムJavaポートレットでは、有効期間および有効化ベースのキャッシュがサポートされています。

アプリケーション・レベルのWebCenter Portalでは、アプリケーション・レベルのキャッシュ・ルールの設定にCoherenceが使用されます。WebCenter Portalポートレット・クライアントには、ポートレット用のデフォルト・キャッシュ構成ファイルが用意されています。

<?xml version="1.0"?>

<cache-config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://xmlns.oracle.com/coherence/coherence-cache-config"
xsi:schemaLocation="http://xmlns.oracle.com/coherence/coherence-cache-config
coherence-cache-config.xsd">
<defaults>
<scope-name>portlets</scope-name>
</defaults>
<caching-scheme-mapping>
<cache-mapping>
<cache-name>portlet-consumer-content-cache-*</cache-name>
<scheme-name>portlet-thin-direct</scheme-name>
</cache-mapping>
</caching-scheme-mapping>
<caching-schemes>
<distributed-scheme>
<scheme-name>portlet-thin-direct</scheme-name>
<local-storage>true</local-storage>
</distributed-scheme>
</caching-schemes>
</cache-config>

独自のキャッシュ構成ファイルを作成してポートレット・コンシューマ・キャッシュに使用したり、adf-config.xmlファイルのポートレット・クライアント構成情報を更新してそのファイルを指すようにすることもできます。詳細は、『Oracle Fusion Middleware Oracle WebCenter Portalの管理』のポートレット・クライアント構成の編集に関する項を参照してください。デフォルト・キャッシュ構成ファイルに基づいてファイルを作成すると、キャッシュ名portlet-consumer-content-cache-*のマッピングが定義されます。Coherenceの詳細は、『Oracle Fusion Middleware Oracle WebCenter Portalの管理』のデータ・キャッシュ・パフォーマンスの向上に関する項を参照してください。

11.4.6 複数言語に対応したポートレット

ポートレットは次の3つのステップで多言語対応にすることができます。

- portlet.xmlファイルの<supported-locale>要素を使用することでポートレットでサポートされているロケールを宣言する。次に例を示します。

<portlet id="1328624289503">
...
<supported-locale>en</supported-locale>
<supported-locale>fr</supported-locale>
<supported-locale>es</supported-locale>
...
</portlet>

- ポートレットに表示されるポートレット・メタデータ(ポートレット・タイトル、説明、キーワードなど)を作成する。
変換はたとえば次のようにportlet.xmlファイルに直接含めることができます。

<portlet id="1328624289503">
<portlet-name>LotteryPortlet</portlet-name>
<display-name xml:lang="en">Lottery Numbers</display-name>
<display-name xml:lang="fr">Numéros de Loterie</display-name>
<display-name xml:lang="es">Números de la Lotería</display-name>
...
<supported-locale>en</supported-locale>
<supported-locale>fr</supported-locale>
<supported-locale>es</supported-locale>
...
</portlet>

または、別のリソース・バンドルで変換を提供することもできます。リソース・バンドルはたとえば次のようにportlet.xmlファイルに宣言する必要があります。

<portlet id="1328624289503">
<portlet-name>LotteryPortlet</portlet-name>
<display-name>Lottery Numbers</display-name>
...
<supported-locale>en</supported-locale>
<supported-locale>fr</supported-locale>
<supported-locale>es</supported-locale>
<resource-bundle>portlet.resource.LotteryPortletBundle</resource-bundle>
...

その後、次のようなリソース・バンドルに変換を提供します。

# English Resource Bundle
#
# filename: LotteryPortletBundle_en.properties
javax.portlet.display-title=Lottery Numbers

# French Resource Bundle
#
# filename: LotteryPortletBundle_fr.properties
javax.portlet.display-title=Numéros de Loterie

# Spanish Resource Bundle
#
# filename: LotteryPortletBundle_es.properties
javax.portlet-title=Números de la Lotería

- ポートレットのコンテンツを他のWebアプリケーションと同じように変換できるようにします。

11.4.7 ポートレットのデプロイ

アプリケーションでポートレットを登録および使用できるようにするには、まずポートレットをデプロイする必要があります。JSR 286ポートレットはWSRPプロデューサにデプロイされます。このプロデューサはリモートであり、Web Services for Remote Portlets (WSRP)を介してコンシューマ・アプリケーションと通信します。JSFポートレットはJSR 286ポートレットとしてデプロイされます。つまり、JDeveloperから、または手動でWSRPプロデューサにデプロイされます。

WebCenter Portalは、WSRPバージョン1.0および2.0をサポートします。この標準によって、ポートレット間通信と、ポートレット・カスタマイズのエクスポートまたはインポートがサポートされます。

WSRPは、ポートレット・コンシューマ・アプリケーションとポートレット・コンテナ間の通信プロトコルです。ユーザーを対象とした視覚的なWebサービスを、中間Webアプリケーションにプラグ・アンド・プレイできるようにするWebサービスの標準です。

その標準性により、特定の言語(JSR 286、.NET、Perlなど)をベースとする標準対応のコンテナと任意のWSRPポータル間の相互運用が可能です。このため、WSRP対応のコンテナにデプロイされたポートレットは、その言語に関係なく、この標準をサポートするあらゆるアプリケーション上にレンダリングできます。

図11-9は、WSRPプロデューサの基本的なアーキテクチャを示しています。

図11-9 WSRPプロデューサのアーキテクチャ

エンド・ユーザーがWebブラウザでページを表示するとき、リクエストの流れは次のようになります。

1. エンド・ユーザーは、Webブラウザの場所フィールドにURLを入力することで、Webブラウザからページをリクエストします。

2. ブラウザは、HTTPを介してリクエストをコンシューマ・アプリケーションに送信します。

3. アプリケーションは、リクエストされたページで表示されているポートレットを提供するポートレット・プロデューサと通信します。
プロデューサは、ポートレットがHTMLコードまたはXMLコード形式のポートレット・コンテンツを生成するように、それぞれのポートレットに対して必要なコールを実行します。

4. プロデューサはWSRP 1.0または2.0プロトコルを使用してコンシューマ・アプリケーションにポートレット・コンテンツを戻します。

5. コンシューマ・アプリケーションは、HTTPを介してポートレット・コンテンツをブラウザに送信します。

標準のポートレットをWebCenter Portalのコンシューマ・アプリケーションで使用できるようにするには、それらを1つのポートレット・コンシューマ・アプリケーションにパッケージ化し、WSRPコンテナにデプロイする必要があります。

12 Oracle JSF Portlet Bridgeを使用したJSFアプリケーションからのポートレットの作成

この章では、Oracle JSF Portlet Bridgeを使用してJSFアプリケーションをポートレットとして公開する方法について説明します。

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

- Oracle JSF Portlet Bridgeを使用したJSFアプリケーションからのポートレットの作成について

- JSFアプリケーションからのポートレットの作成

- ポートレット化されたページまたはタスク・フローのポートレット・エントリの更新

- JDeveloperでのポートレット化されたページまたはタスク・フローのテスト

- 統合WebLogic Serverを使用してのJSFポートレットのテスト

- WebLogic管理対象サーバーへのJSFポートレットのデプロイ

- イベントを使用したその他のポートレットとのJSFポートレットのリンク

注意:

Oracle JSF Portlet Bridgeは、JSR 329のApache Reference実装を拡張します。JSR 329は、Portlet 2.0 Bridge for JavaServer Face対応Portlet 2.0 Bridgeの機能を定義するための標準化への取組みです。オラクル社はこの標準化の仕様において指導的地位にあります。詳細は次でご覧いただけます。

http://www.jcp.org/en/jsr/detail?id=329

12.1 Oracle JSF Portlet Bridgeを使用したJSFアプリケーションからのポートレットの作成について

Oracle JSF Portlet Bridgeを使用すると、アプリケーション開発者は、短時間で簡単に既存のJSFアプリケーション、Oracle ADFアプリケーションおよびタスク・フローをJSR 286ポートレットとして公開できます。

注意:

特に断りのないかぎり、JSFアプリケーションという用語にはOracle ADFアプリケーションが含まれます。

Oracle JSF Portlet Bridge:

- JSR 286ポートレットAPIに依存せずにJSFを使用してポートレット機能を提供できるようにすることでポートレット開発を簡略化します。

- WebCenter PortalなどのJSR 286ポートレット・コンシューマへのJSFアプリケーションの公開を簡略化します。

- アプリケーションが通常のWebアプリケーションとして、および同じインストールからのポートレットとして同時に実行できるようにすることで、アプリケーションから別々にポートレットを格納、維持およびデプロイするという要件を排除します。

- ポートレットをタスク・フローとして公開することで、より精度の高いレベルでポートレットを作成できます。ポートレット化されたタスク・フローはJSR 286ポートレットであるため、これによってタスク・フローを分散環境で使用することもできます。

注意:

Oracle JSF Portlet Bridgeによって使用されるWSRP拡張機能が原因で、JSFポートレットが想定どおりにサード・パーティのWSRPコンシューマと連携して動作しない場合があります。

12.2 JSFアプリケーションからのポートレットの作成

Oracle JSFポートレット・ブリッジを使用すると、JSFアプリケーションまたはタスク・フローをポートレットとして公開できます。これは、「ポートレット・エントリの作成」ダイアログを使用して宣言的に実行できます。コーディングは不要です。「ポートレット・エントリの作成」ダイアログを使用すると、JSFアプリケーション上にOracle JSF Portlet Bridgeを構成してJSFアプリケーションをJSR 286ポートレットとして公開できます。この構成の一部として、ポートレットがレンダリングされるときに呼び出す最初のJSFビュー(またはタスク・ビュー)を示します。その時点から、Oracle JSF Portlet BridgeはJSFアプリケーションと連動して、この初期ビューから到達できる追加ビューを介して移動します。そのため、JSFアプリケーション全体をポートレットとして公開する通常の状況では、ポートレットでのアプリケーションの初期のビューをレンダリングしてナビゲーションの残りは同じポートレット内で自然に動作するようにOracle JSF Portlet Bridgeを構成する必要があります。

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

- ページに基づいたJSFポートレットの作成方法

- タスク・フローに基づいたJSFポートレットの作成方法

- JSFポートレットの作成時の必知事項

12.2.1 ページに基づいたJSFポートレットの作成方法

JSFアプリケーションからポートレットを作成する最も簡単な方法とは、ページに基づいてポートレットを生成するというものです。

既存のアプリケーション・ページからJSFポートレットを作成するには:

1. JDeveloperで、ポートレット化するJSFページを含むアプリケーションを開きます。

2. アプリケーション・ナビゲータで、JSFページを右クリックして、「ポートレット・エントリの作成」を選択します。

注意:

ポートレットを含むページに基づいてポートレットを生成することはできません。

3. 「ポートレット・エントリの作成」ダイアログで、「ポートレット名」フィールドにポートレットの名前を入力します。

4. 「表示名」フィールドに、ポートレットの記述名を入力します。

5. 「ポートレット・タイトル」フィールドに、ポートレットを説明するタイトルを入力します。

ポートレット・タイトルは、「リソース・パレット」または「アプリケーション・リソース」パネルに表示されるため、ポートレットが便利かどうかどうかをユーザーが決定するのに役立つタイトルにしてください。ポートレットのタイトルは、ポートレットがページに表示されるとポートレットのヘッダーにも表示されます。

6. 「短いタイトル」フィールドに、ポートレットの短いタイトルを入力します。この短いタイトルは、モバイル・デバイスでポートレットがページに表示されるとポートレットのヘッダーに表示されます。

7. 「説明」フィールドに、ポートレットの説明を入力します。

8. 「コンテキスト・イベント用ポートレット・イベントの作成」を選択して、ページによって公開されるコンテキスト・イベント用のportlet.xmlファイル内にポートレット・イベントを作成します。このオプションはデフォルトで選択されます。

ポートレット・イベントによってポートレットは自らが存在するページと、およびそのページ上のその他のポートレットと通信できます。

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

ページに基づいたJSFポートレットを作成すると、ページのポートレット・エントリ(次の例を参照)が含まれるようにportlet.xmlファイルが作成(またはこのファイルがすでに存在する場合は更新)されます。ファイルが開き、表示と編集ができます。デフォルトでは、ファイルは設計ビューで開きます。ソース・コードを表示または編集するには、「ソース」タブをクリックします。

<portlet id="adf_jsf__testPage_jspx">
<description>PortletBridgeApplication_testPage_jspx</description>
<portlet-name>PortletBridgeApplication_testPage_jspx</portlet-name>
<display-name>PortletBridgeApplication_testPage_jspx</display-name>
<portlet-class>
oracle.portlet.bridge.adf.application.ADFBridgePortlet
</portlet-class>
<init-param>
<name>javax.portlet.faces.defaultViewId.view</name>
<value>/myPage.jspx</value>
</init-param>
<supports>
<mime-type>text/html</mime-type>
<portlet-mode>VIEW</portlet-mode>
</supports>
<supported-locale>en</supported-locale>
<portlet-info>
<title>PortletBridgeApplication_testPage_jspx</title>
<short-title>PortletBridgeApplication_testPage_jspx</short-title>
</portlet-info>
<supported-processing-event id="DepartmentSelectedEvent">
<qname xmlns:x="http://xmlns.oracle.com/adfm/contextualEvent">
x:DepartmentSelectedEvent
</qname>
<supported-publishing-event id="DepartmentSelectedEvent">
<qname xmlns:x="http://xmlns.oracle.com/adfm/contextualEvent">
x:DepartmentSelectedEvent
</qname>
</supported-publishing-event>
<supported-public-render-parameter>
_adf_event_DepartmentSelectedEvent
</supported-public-render-parameter>
<container-runtime-option>
<name>com.oracle.portlet.requireIFrame</name>
<value>true</value>
</container-runtime-option>
<container-runtime-option>
<name>com.oracle.portlet.minimumWsrpVersion</name>
<value>2</value>
</container-runtime-option>
</portlet>

選択したページは、ポートレットの編集モードのエントリ・ポイントとして使用されます。これは、javax.portlet.faces.defaultViewId.view初期化パラメータによってportlet.xmlファイルに示されます。portlet.xmlファイルを手動で編集して、WebCenter Portalがサポートするその他のデフォルトの拡張ポートレット・モードに対応したページを定義できます。

- 編集モード: javax.portlet.faces.defaultViewId.edit

- ヘルプ・モード: javax.portlet.faces.defaultViewId.help

- 情報モード: javax.portlet.faces.defaultViewId.about

- 構成モード: javax.portlet.faces.defaultViewId.config

- デフォルト編集モード: javax.portlet.faces.defaultViewId.edit_defaults

- プレビュー・モード: javax.portlet.faces.defaultViewId.preview

- 印刷モード: javax.portlet.faces.defaultViewId.print

注意:

defaultViewIdの値は、アプリケーション・コンテキスト・ルートに対して相対的であり、常に/で始まる必要があります。前述の例では、defaultViewId.viewの値は/myPage.jspxです。

その他のポートレット・モードにdefaultViewIdを追加する場合は、<supports>タグにもモードを追加するようにしてください。たとえば、<portlet-mode>HELP</portlet-mode>のようになります。

ポートレット・モードの詳細は、「ポートレット・モード」を参照してください。

12.2.2 タスク・フローに基づいたJSFポートレットの作成方法

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

- タスク・フローからのポートレットの作成について

- 「ポートレット・エントリの作成」ダイアログを使用したタスク・フローからのポートレットの作成

- 「タスク・フローのポートレット・エントリの管理」ダイアログを使用したタスク・フローからのポートレットの作成

12.2.2.1 タスク・フローからのポートレットの作成について

Oracle ADFを使用する利点とは、タスク・フローの存在であり、アプリケーションで制御フローを定義するためのモジュール式アプローチとなります。アプリケーションを1つの大きなJSFページフローとして表すかわりに、再利用可能なタスクフローの集合として分類することができます。各タスク・フローで、アプリケーション・アクティビティ、つまり、アプリケーションが完了するために実行される必要のある作業単位を特定してください。アクティビティとは、タスク・フローの実行時に行うことができる作業を意味しています。

タスク・フローはバインドなしでもバインドありでも可能です。

- バインドなしタスク・フローは、ユーザーがタスクを完了できるように相互作用する一連のアクティビティ、制御フロー・ルールおよびマネージドBeanです。バインドなしタスク・フローは、アプリケーションのどのバインド・タスク・フローにも含まれていないすべてのアクティビティと制御フローで構成されます。

- バインド・タスク・フローはタスク・フローの特殊な形式であり、単一エントリ・ポイントと1つ以上の終了ポイントがあります。プライベート制御フロー・ルール、アクティビティおよびマネージドBeanの独自のセットが含まれています。Oracle ADFバインド・タスク・フローでは、再利用、パラメータ、トランザクション管理および再入力が可能です。また、多くの終了ポイントでゼロとなることも可能です。バインド・タスク・フローは、ページまたはページ・フラグメントを使用できますが、ページ・フラグメントを使用するものだけポートレット化できます。

一般的なアプリケーションは、1つのバインドなしタスク・フローと1つ以上のバインド・タスク・フローを組み合せたものです。このため、アプリケーションでは、バインドなしタスク・フロー内のアクティビティからバインド・タスク・フローをコールできます。バインド・タスク・フローとバインドなしタスク・フローの詳細は、『Oracle Fusion Middleware Oracle Application Development FrameworkによるFusion Webアプリケーションの開発』のADFタスク・フローの概要に関する項を参照してください。

12.2.2.2 「ポートレット・エントリの作成」ダイアログを使用したタスク・フローからのポートレット作成

「ポートレット・エントリの作成」ダイアログを使用して単一のタスク・フローからポートレットを作成します。

「ポートレット・エントリの作成」ダイアログを使用してタスク・フローからのポートレットを作成するには:

1. JDeveloperで、ポートレットの作成元となるタスク・フローを含むJSFアプリケーションを開きます。

2. アプリケーション・ナビゲータで、ポートレット化するタスク・フローを右クリックして、「ポートレット・エントリの作成」を選択します。

3. 「ポートレット・エントリの作成」ダイアログで、「ポートレット名」フィールドにポートレットの名前を入力します。

4. タスク・フローがバインドされていない場合、「エントリ・ポイント・ビュー」ドロップダウン・リストには、そのタスク・フローのすべてのビュー・アクティビティが表示されます。このドロップダウン・リストから、ポートレットのエントリ・ポイントとして使用するビュー・アクティビティを選択します。デフォルトでは、タスク・フローの最初のビュー・アクティビティが選択されます。

タスク・フローがバインドされている場合、可能なエントリ・ポイントは1つしかないため「エントリ・ポイント・ビュー」ドロップダウン・リストは表示されません。

5. 「表示名」フィールドに、ポートレットの記述名を入力します。

6. 「ポートレット・タイトル」フィールドに、ポートレットを説明するタイトルを入力します。

ポートレット・タイトルは、「リソース・パレット」または「アプリケーション・リソース」パネルに表示されるため、ポートレットが便利かどうかどうかをユーザーが決定するのに役立つタイトルにしてください。ポートレットのタイトルは、ポートレットがページに表示されるとポートレットのヘッダーにも表示されます。

7. 「短いタイトル」フィールドに、ポートレットの短いタイトルを入力します。この短いタイトルは、モバイル・デバイスでポートレットがページに表示されるとポートレットのヘッダーに表示されます。

8. 「説明」フィールドに、ポートレットの説明を入力します。

9. 「コンテキスト・イベント用ポートレット・イベントの作成」を選択して、タスク・フローにより公開されるすべてのコンテキスト・イベント用のportlet.xmlファイル内にポートレット・イベントを作成します。このオプションはデフォルトで選択されます。

ポートレット・イベントによってポートレットは自らが存在するページと、およびそのページ上のその他のポートレットと通信できます。

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

1つ(または複数)のポートレットが作成されると、次のように示すメッセージを受け取ることになります。

New portlet has been successfully created

また、portlet.xmlファイルが作成されます。portlet.xmlファイルにはポートレット・エントリ(次の例を参照)が含まれており、表示や編集が可能な状態で開かれます。

<portlet id="adf_taskflow_WEB_INF_department_xml">
<description>PortletBridgeApplication department</description>
<portlet-name>PortletBridgeApplication_department</portlet-name>
<display-name>PortletBridgeApplication department</display-name>
<portlet-class>oracle.portlet.bridge.adf.application.ADFBridgePortlet</portlet-class>
<init-param>
<name>javax.portlet.faces.defaultViewId.view</name>
<value>
/adf.task-flow?adf.tfDoc=/WEB-INF/adfp-portlet-bridge-container.xml
&amp;adf.tfId=adfp-portlet-bridge-container&amp;_fragmentTaskFlowDoc=/WEB-INF/
department.xml&amp;_fragmentTaskFlowId=department
</value>
</init-param>
<supports>
<mime-type>text/html</mime-type>
<portlet-mode>VIEW</portlet-mode>
</supports>
<supported-locale>en</supported-locale>
<portlet-info>
<title>PortletBridgeApplication department</title>
<short-title>PortletBridgeApplication department</short-title>
</portlet-info>
<supported-publishing-event id="DepartmentSelectedEvent">
<qname xmlns:x="http://xmlns.oracle.com/adfm/contextualEvent">
x:DepartmentSelectedEvent
</qname>
</supported-publishing-event>
<supported-public-render-parameter>
_adf_event_DepartmentSelectedEvent
</supported-public-render-parameter>
<container-runtime-option>
<name>com.oracle.portlet.requireIFrame</name>
<value>true</value>
</container-runtime-option>
<container-runtime-option>
<name>com.oracle.portlet.minimumWsrpVersion</name>
<value>2</value>
</container-runtime-option>
</portlet>

注意:

portlet.xmlファイルは複数のポートレットを含む場合もあり、ポートレットとして公開されページとタスク・フローの組合せを持つ場合もあります。また、標準JSR 286(非ブリッジ)ポートレットが含まれる場合もあります。

12.2.2.3 「タスク・フローのポートレット・エントリの管理」ダイアログを使用したタスク・フローからのポートレット作成

プロジェクトがタスク・フローを含んでいる場合は、タスク・フローを選択してリストからポートレットとして作成する方が簡単な場合もあります。これは「タスク・フローのポートレット・エントリの管理」ダイアログを使用して実行できます。また、このダイアログでは、ポートレットを個々に作成するのではなく複数のタスク・フローから一度にポートレットを作成することもできます。

「タスク・フローのポートレット・エントリの管理」ダイアログを使用してたタスク・フローからのポートレットを作成するには:

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

2. 「新規ギャラリ」で「Web層」を展開し、「ポートレット」→「タスク・フローのポートレット・エントリの管理」→「OK」の順に選択します。

3. 「タスク・フローのポートレット・エントリの管理」ダイアログで、シャトル・ボタンを使用してポートレットとして作成するタスク・フローを選択します。

4. 「コンテキスト・イベント用ポートレット・イベントの作成」を選択して、タスク・フローにより公開されるすべてのコンテキスト・イベント用のportlet.xmlファイル内にポートレット・イベントを作成します。このオプションはデフォルトで選択されます。

ポートレット・イベントによってポートレットは自らが存在するページと、およびそのページ上のその他のポートレットと通信できます。

5. 「OK」をクリックして選択されているタスク・フローのポートレットを作成します。

1つ(または複数)のポートレットが作成されると、次のように示すメッセージを受け取ることになります。

New portlet has been successfully created

また、portlet.xmlファイルが作成されます。portlet.xmlファイルにはポートレット・エントリ(次の例を参照)が含まれており、表示や編集が可能な状態で開かれます。

<portlet id="adf_taskflow_WEB_INF_department_xml">
<description>PortletBridgeApplication department</description>
<portlet-name>PortletBridgeApplication_department</portlet-name>
<display-name>PortletBridgeApplication department</display-name>
<portlet-class>oracle.portlet.bridge.adf.application.ADFBridgePortlet</portlet-class>
<init-param>
<name>javax.portlet.faces.defaultViewId.view</name>
<value>
/adf.task-flow?adf.tfDoc=/WEB-INF/adfp-portlet-bridge-container.xml
&amp;adf.tfId=adfp-portlet-bridge-container&amp;_fragmentTaskFlowDoc=/WEB-INF/
department.xml&amp;_fragmentTaskFlowId=department
</value>
</init-param>
<supports>
<mime-type>text/html</mime-type>
<portlet-mode>VIEW</portlet-mode>
</supports>
<supported-locale>en</supported-locale>
<portlet-info>
<title>PortletBridgeApplication department</title>
<short-title>PortletBridgeApplication department</short-title>
</portlet-info>
<supported-publishing-event id="DepartmentSelectedEvent">
<qname xmlns:x="http://xmlns.oracle.com/adfm/contextualEvent">
x:DepartmentSelectedEvent
</qname>
</supported-publishing-event>
<supported-public-render-parameter>
_adf_event_DepartmentSelectedEvent
</supported-public-render-parameter>
<container-runtime-option>
<name>com.oracle.portlet.requireIFrame</name>
<value>true</value>
</container-runtime-option>
<container-runtime-option>
<name>com.oracle.portlet.minimumWsrpVersion</name>
<value>2</value>
</container-runtime-option>
</portlet>

注意:

portlet.xmlファイルは複数のポートレットを含む場合もあり、ポートレットとして公開されページとタスク・フローの組合せを持つ場合もあります。また、標準JSR 286(非ブリッジ)ポートレットが含まれる場合もあります。

12.2.3 JSFポートレットの作成時の必知事項

JSR 286ポートレット・マークアップ・フラグメント・ルールに準拠したマークアップを生成するようにJSFページをコーディングする必要があります。Oracle ADFを使用することを選択している場合、ページのマークアップの大部分はOracle ADF Facesのコンポーネントからのものであるため、マークアップはJSFポートレットと互換性のあるスタイルでレンダリングされるか、または(たとえば、ポートレットをインライン・フレーム内にレンダリングすることで)Oracle JSF Portlet Bridgeによって互換性のあるスタイルに自動解釈できます。

次の各項では、ポートレットとして後で公開することにしたOracle ADFページをコーディングする際に発生する一般的な問題を回避する方法についてのガイダンスを示します。

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

- JSFポートレットを作成するための一般的なガイドライン

- ポートレットのガイドライン

- セキュリティのガイドライン

- JSFのガイドライン

- Oracle ADFのガイドライン

12.2.3.1 JSFポートレットを作成するための一般的なガイドライン

JSFポートレットを作成する際には、次の一般的なガイドラインを考慮してください。

- アプリケーションはWebアプリケーションとして実行する必要がある。JSFアプリケーションからポートレットを作成する前に、そのページとタスク・フローをすべて含むアプリケーションが、統合WLSにデプロイされた後で適切に動作している必要があります。通常のWebアプリケーションとして実行できない場合、これはポートレット・プロデューサとしても実行できません。

- ポートレットは様々なページに含まれる。ポートレットとして公開されるタスク・フローの作成時に考慮するべき領域とは、タスク・フローをポートレットとしてレンダリングするページが元のプロデューサ・アプリケーションのページと異なるということです。
発生する主な共通エラーは次のとおりです。

- 使用ページでJavaScriptへのアクセスを期待します。

- 使用ページの一部としてスコープに追加されたマネージドBeanまたはオブジェクトの検索を期待します。

- コンシューマからのJSFコンポーネント・ツリーにコンポーネントの存在を期待します。

- サーブレットの依存性。サーブレット環境とポートレット環境の両方での実行がサポートされているアプリケーションを記述する場合には、HttpServletオブジェクトへのキャストを回避します(またはポートレットとして実行時にClassCastExceptionを取得してください)。かわりに、Faces ExternalContextオブジェクトが提供する抽象化を使用します。たとえば、次のかわりに:

HttpServletRequest request =getRequestFromFacesContext();
String localContextPath =request.getContextPath();

次を使用します。

String localContextPath=
FacesContext().getCurrentInstance().getExternalContext().getRequestContextPath();

ExternalContextが抽象化を提供しないかぎり、サーブレットまたはポートレット固有のコードを記述できます。アプリケーションがポートレットとして実行されているかどうかは次の例に示すメソッドを使用して確認できます。

public static boolean isPortletRequest()
{
Map<String, Object> m =
FacesContext.getCurrentInstance().getExternalContext().getRequestMap();
Object phase =m.get("javax.portlet.faces.phase");
if (phase != null)
{
return true;
}
else
{
return false;
}
}

- 保護されているアプリケーション。アプリケーションが保護されている場合、必ずアイデンティティ伝播を保護しておきます。

- ディープ・リンク。ポートレットとの通常の対話処理については、コンシューマとプロデューサとの間で保持されるセッションがあります。これは、コンシューマにセッションCookieを保存し、それをリクエストの度にプロデューサに送信することで実行されます。元のリクエストでは、このセッションが確立され、以降のリクエストでは、ポートレットがセッションCookieをプロデューサに送信し、セッションが再利用されます。
ディープ・リンク、つまりポートレットからプロデューサ・アプリケーションへのリンクについては、リクエストはブラウザからプロデューサ・アプリケーションに直接送られます。この場合、セッションCookieは送信できないため新しいセッションが確立されます。ディープ・リンクに共有セッションが必要な場合、これは開発者が実装する必要があります。共通実装とは、この状態を、プロデューサおよびアプリケーションからアクセスできる共通の場所に書き込み、この状態に対する参照をディープ・リンクで渡すことです。

- Java EE認証。Java EEログインはサポートされていません。Java EEアプリケーションは、BasicやDigestなどの様々な認証テクニックを使用して構成できます。ポートレットはコンシューマのページに組み込まれたフラグメントであるため、Direct認証はクライアントとポートレット・プロデューサとの間ではなく、クライアントとコンシューマとの間で発生することが一般に予想されます。結果として、これらの認証テクニックはJSR 286ではサポートされていません。JSR 286の場合、Java EE認証がWS-Securityメカニズムを通じて発生し、これによってWebサービス・コンシューマはプロデューサに認証および検証され、ユーザー認証および認可に向けてユーザー・アイデンティティが伝播できます。公開されるOracle ADFアーティファクトには、Java EE認証をトリガーするログイン・リンクを含めることができません。

- タイムアウト期間。レンダリングに時間のかかるアプリケーションについては、Oracle JSF Portlet Bridgeで作成されたプロデューサを登録するときに、タイムアウト期間を増やすことを検討してください。ただし、プロデューサ登録中に指定されたタイムアウト期間がadf-config-xmlで指定された最大タイムアウト期間(maximumTimeout要素)で制限されていることに注意してください。

12.2.3.2 ポートレットのガイドライン

JSFポートレットを作成する際には、次のポートレットのガイドラインを考慮してください。

- ポートレットのサイズ変更。JSFポートレットを使用している場合、コンシューマ・アプリケーションはインライン・フレーム内でポートレット・コンテンツを自動的にレンダリングします。これは、いずれのインライン・ポップアップもインライン・フレーム内に限定されることを意味します。これは、ポートレットのサイズを指定する際に考慮する必要があります。
JSFポートレットがポートレット化されたページである場合、コンテンツの完全なコントロールが可能で、コンテンツ・ファイルがインライン・フレーム・ウィンドウを埋める方法を決定でき、コンテンツがブラウザのウィンドウを埋める方法を決定するときとまったく同じテクニックを活用できます。

ポートレットがコンシューマ・アプリケーション内のその先祖までストレッチされている場合、Oracle JSF Portlet Bridgeによって生成されたドキュメントのaf:documentコンポーネントのmaximized属性がtrueに設定されます。つまり、これをサポートするpanelStretchLayoutなどのコンポーネントはインライン・フレーム全体を埋めます。

- リソースとリンク。リソースおよびリンクについては、web-app-context-rootを基準として場所を指定する必要があります。そうしないと、ポートレットがイメージやその他のリソースを見つけられません。相対パスの表記(../)を使用しないでください。Oracle WebCenter Portalのポートレットは、リモートで実行され、SOAPプロトコル(WSRP)を使用してアクセスされます。後者は、通常のWebアプリケーションのリクエスト・パスの概念が、JSR 286コンテナでは意味がないということです。JSR 286仕様では、すべてのリソースURLが絶対パスまたはコンテキスト相対パスのいずれかであることが規定されていることにこれが反映されています。

- リクエストのリダイレクト。リクエストをJSP内でリダイレクトまたは転送しないでください。JSR 286では、requestDispatcher.include()のみがサポートされます。httpServletResponse.sendRedirect()またはrequestDispatcher.forward()を使用すると、例外やエラーが発生します。ポートレット環境で正常に機能するには、faces-config.xmlまたはOracle ADFタスク・フローの制御フロー・ルールにJSFナビゲーション・ルールを実装する必要があります。

- メモリー使用量。Oracle JSF Portlet Bridgeは、リクエスト間のリクエスト・スコープのコンテンツを保存し、リクエスト・スコープがActionポートレットとRenderポートレット(これらは2つの別個のリクエスト)との間で予約されるようにします。このため、メモリー使用量全体を最小限に抑えるには、アプリケーションがJSFポートレットを含む場合にリクエスト・スコープ内にあまりデータを保存しすぎないようにする必要があります。

- WSRPバージョン。Oracle JSF Portlet Bridgeは、Portlet 2.0機能を利用します。そのため、これはWSRP V2以外では使用しないようにしてください。ポートレットのminimumWsrpVersionコンテナ・ラインタイム・オプションは2に設定する必要があります。詳細は、「JSR 286ポートレット用のランタイム環境のカスタマイズ方法」を参照してください。

12.2.3.3 セキュリティのガイドライン

JSFポートレットを作成する際には、次のセキュリティのガイドラインを考慮してください。

- Oracle ADF保護されたアプリケーション「ポートレット・エントリの作成」ダイアログまたは「タスク・フローのポートレット・エントリの管理」ダイアログを使用して、Oracle ADF保護されたアプリケーション(セキュリティ・スキームが認証および認可)内のタスク・フローをポートレット化する場合は、プロデューサ・アプリケーションのjazn-data.xmlファイルで、次のラッパー・タスク・フローに手動で権限を付与する必要があります。

/WEB-INF/adfp-portlet-bridge-container.xml#adfp-portlet-bridge-container

権限を付与しないと、ポートレットはレンダリングしません。

たとえば、表示権限のあるauthenticated-roleと、カスタマイズ、編集、付与、パーソナライズ、表示権限のあるtestroleの2つのロールをアプリケーションが持つ場合、各ロールの<permissions>タグ内に次のエントリを追加する必要があります。

- authenticated-roleの場合:

<permission>
<class>oracle.adf.controller.security.TaskFlowPermission</class>
<name>
/WEB-INF/adfp-portlet-bridge-container.xml#adfp-portlet-bridge-container
</name>
<actions>view</actions>
</permission>

- testroleの場合:

<permission>
<class>oracle.adf.controller.security.TaskFlowPermission</class>
<name>
/WEB-INF/adfp-portlet-bridge-container.xml#adfp-portlet-bridge-container
</name>
<actions>customize,edit,grant,personalize,view</actions>
</permission>

- ロール・ベースの認証。ロール・ベースの認証を持つタスク・フローまたはページをポートレット化する(つまりタスク・フローまたはページに特定のロールが付与される)場合、ユーザーに正しく伝播するためにWS-Securityが必要です。WS-Securityを設定する場合、伝播されたユーザーがタスク・フローを表示する権限を持たないと、JSFポートレットはコンテンツをレンダリングしません。

12.2.3.4 JSFのガイドライン

JSFポートレットを作成する際には、次のJSFのガイドラインを考慮してください。

- h:commandLinkの使用。h:commandLink JSF標準HTMLコンポーネントを使用する場合は、必ずweb.xmlにexternalizeJavaScriptパラメータを設定し、JSF参照実装により外部JavaScriptリソースが生成されないようにします(次の例を参照)。これは、JavaScriptリソースへの参照が適切にエンコードされないというJSFリファレンス実装での問題を回避することが目的です。

<context-param>
<param-name>com.sun.faces.externalizeJavaScript</param-name>
<param-value>false</param-value>
</context-param>

12.2.3.5 Oracle ADFのガイドライン

JSFポートレットを作成する際には、次のADFのガイドラインを考慮してください。

- タスク・フロー・リターン。ADFバインド・タスク・フローが完了すると、これはタスク・フロー・リターンを使用してコール元のタスク・フローに制御を戻すことができます。ポートレット化されたタスク・フローには、コール元のタスク・フローはないため、この状況ではタスク・フロー・リターンは意味がありません。これによって、タスク・フローはビューが選択されていない状況に移動するために、空のポートレットのようなものが表示される場合があります。タスク・フローは、入力パラメータの変更時に、またはプロデューサのセッションのリセット時にリフレッシュされるまで、この状態のままとなります。
タスク・フローのポートレット化を計画している場合は、タスク・フロー・リターンの使用を避ける必要があります。タスク・フロー・リターンを使用する必要がある場合、ポートレット化するタスク・フローのデフォルトのアクティビティを持つダミーのタスク・フローを提供する必要があります。タスク・フロー・リターンが実行されると、これはダミーのタスク・フローに戻ります。ダミー・タスク・フローは、そのデフォルトのアクティビティを実行します。これは元のタスク・フローにコール・バックすることであり、したがってそのタスク・フローはポートレットが次にコールされるときに再起動されます。

- 不一致のスタイル・シート。一般に、Oracle JSF Portlet Bridgeを使用してタスク・フローを使用すると、ポートレット・プロデューサがコンシューマ・ページのスキンを使用しようとします。プロデューサがコンシューマ・スキンと一致できない場合、ポートレットはその独自のスタイル・シートを生成して参照します。これは不一致と呼ばれます。スキンの不一致は次のような場合に発生することがあります。

- コンシューマとプロデューサが異なるバージョンのADF Facesを使用している。この場合、プロデューサはまだコンシューマ・スキンを使用します。

- コンシューマがプロデューサが持たない追加のskin-additionsを持つ(またはその逆)。この場合、プロデューサはまだコンシューマ・スキンを使用します。

- プロデューサがコンシューマ・スキンを持たない。この場合、プロデューサはポートレット・スキンを使用します。

スキンの不一致によって、パフォーマンスの問題が生じる可能性があります。これは、ブラウザが余分なスタイル・シートをフェッチしなければならず、生成されたポートレット・マークアップが圧縮されていないスタイルを使用することで、マークアップがより大きくなってしまうためです。

スキンの不一致が発生すると、プロデューサ・ログには次が含まれます。

The skin skinName specified on the requestMap will not be used because the
styleSheetDocument id on the requestMap does not match the local skin's
styleSheetDocument's id. It could mean the jars are not identical. For example,
one might have trinidad-skins.xml skin-additions in a jar file on the class path
that the other does not have.

インライン・フレーム内のポートレット・マークアップには、たとえば次のようなポートレット・スタイル・シート・リソースへのリンク・タグも含まれます。

<link rel=\"stylesheet\" charset=\"UTF-8\" type=\"text/css\" href=\"http:.../resourceproxy/portletId...252525252Fadf%252525252Fstyles%252525252Fcache%252525252Fblafplus-rich-portlet-d1062g-en-ltr-gecko.css...

HTTP監視ツールを使用すると、リクエストがポートレット・スタイル・シート・リソースに対して実行されることを確認できます。

スキンの不一致の理由は様々です。スキンが一致するには、プロデューサとコンシューマが次のすべての状態が同じである必要があります。

- ADF Facesバージョン: ADF Facesのバージョンが異なると、そのスタイル・セレクタが異なる可能性があります。

- web.xmlに定義された、たとえば次のようなスタイル圧縮:

<context-param>
<param-name>
org.apache.myfaces.trinidad.DISABLE_CONTENT_COMPRESSION
</param-name>
<param-value>false</param-name>
</context=param>

- web.xmlに定義された、たとえば次のようなTonalスタイル圧縮:

<context-param>
<param-name>xyz</param-name>
<param-value>xyz</param-value>
</context-param>

- スキン追加の可用性。スキン追加はJARファイルのMETA-INF/trinidad-skins.xmlで定義されます。これらはクラス・パスのすべてのJARファイルから集約されます。JARファイルがプロデューサには存在してもコンシューマには存在しない、またはその逆の場合、不一致が生じます。

<skin-addition>
<skin-id>blafplus-rich.desktop</skin-id>
<style-sheet-name>
adf/styles/flexComponents-blafplus-rich-desktop.css
</style-sheet-name>
</skin-addition>

JARファイルが一致するかどうかを決定するには、どのskin-additionを処理しているかを示すTrinidadロギングをオンにします。これを行うには、次のようにプロデューサとコンシューマの両方のWebLogic Serverのlogging.xmlログ・レベルをFINESTに更新し、サーバーを再起動します。

<logger name="org.apache.myfaces.trinidad.skin.SkinUtils" level=FINEST"/>

コンシューマ・ページを実行すると、コンシューマとプロデューサのログ・ファイルと一致しないスキン・エントリはスキン不一致の原因となります。

- ADF Facesダイアログ・フレームワークADF Facesダイアログ・フレームワークはサポートされていません。アプリケーションがセカンダリ・ブラウザ・ウィンドウを起動するボタンまたはアイコンを含む場合、アプリケーションがポートレットとして実行される場合に新しいウィンドウの内容は正しく表示されません。そのため、アプリケーションのポートレット化を計画している場合は、これらのコンポーネントの使用は避ける必要があります。セカンダリ・ウィンドウを起動するコンポーネントの例は次のとおりです。

- <tr:inputDate>

- <tr:inputColor>

- <tr:popup>

- <af:commandButton>のuseWindow属性

- コンポーザ・コンポーネント。コンポーザ・コンポーネントを含むページのポートレット化はサポートされていません。

- fileDownloadActionListenerコンポーネント。<af.fileDownloadActionListener>コンポーネントはサポートされていません。

- prepareModelフェーズ。prepareModelを処理するOracle ADFコンポーネント/コードは複数回コールしても結果が同じでなければなりません。prepareModelフェーズ中に実行されるコードは、基礎となるデータ/ビジネス・ロジックに影響することなく再実行可能でなければなりません。ポートレット環境で実行する場合、prepareModelは、一度コールされる通常のWebアプリケーション内での実行時とは異なり、完全なJSFライフ・サイクル中には二度コールされます。
この違いの理由は、Oracle JSF Portlet BridgeがJSFを1つのリクエストではなく2つのリクエストで実行することにあります。これは、すべてのJSFリクエストがレンダリング・フェーズ前にリダイレクトされるかのように実装されます。このアプローチでは、リクエストが最初に送信されるとき、およびレンダリングへのリクエストの受信時に再び送信されるときの両方で両方でJSF restoreViewフェーズがコールされることになります。

- リクエスト・パラメータへのアクセス。ページ・パラメータ内を除き、モデル・コードからリクエスト・パラメータをアクセスまたは参照しないでください。よりきれいなMVC2実装であることに加えて、このガイドラインに従うことで、そのようなアーティファクトがポートレットとして公開された場合に問題を回避します。通常のJSFアーティファクトが1つのリクエストで全ライフサイクルを実行するのに対して、Oracle JSF Portlet Bridgeは、すべてのJSFリクエストがレンダリング・フェーズの前にリダイレクトされるかのように、これらのアーティファクトを2つのリクエストで実行します。
この2フェーズ・モデルでは、レンダリング前に送信済パラメータのクリーニングを、そのクリーニングをクライアントまで遡って通知可能な方法でできるようにします。これによって、このリクエストのブックマークが可能になります。結果として、リクエスト・パラメータはレンダリング・フェーズ中には存在しません。前述のとおり、prepareModelはこのレンダリング・フェーズで再度呼び出されます。そのため、このフェーズ・ハンドラでのリクエスト・パラメータへの参照はいずれも失敗します。次のようなフラグメントのコードはいずれも避ける必要があります。

<invokeAction id="doExecuteWithParams"
Binds="ExecuteWithParams"
Refresh="prepareModel"
RefreshCondition="${param.id != null}"
/>

<invokeAction id="doExecuteWithParams"
Binds="ExecuteWithParams"
Refresh="renderModel"
RefreshCondition="${param.id != null}"
/>

- ページ・パラメータの参照。prepareModelフェーズで、ページ・パラメータを参照しないでください。この問題は、前述のガイドラインでリクエスト・パラメータについて説明されている同じ問題に関連します。一般に、ページ・パラメータはリクエスト・パラメータによって決まり、restoreViewフェーズ中に評価されます。このフェーズが、ポートレットのレンダリング中にもう一度コールされ、リクエスト・パラメータがないと、失敗に終わります。かわりに、JSFの実行フェーズからレンダリング・フェーズへの遷移の前に、ページ・パラメータ値に対する依存性をモデルに移動します。

- コンポーネントを見つけるためのADF Facesクライアント側APIの使用。ポートレットはネーミング・コンテナであるため、ADF Facesクライアント側のAPIを使用してコンポーネントを見つける場合には特別な配慮が必要とされます。コンポーネントIDの例:

- 通常のWebアプリケーションとして実行する場合: id="demoTemplate:popup"

- ポートレット・プロデューサ・アプリケーションとして実行する場合: id="__ns12345678:demoTemplate:popup"

特別に配慮すること:

- AdfPage.PAGE.findComponentByAbsoluteId() APIを使用しないようにします。かわりにgetSource()メソッドとfindComponent()メソッドを使用してください。次に例を示します。

<trh:script text="
function showPopup(event) {
event.cancel();
//var popup =
//AdfPage.PAGE.findComponentByAbsoluteId("demoTemplate:popup");
var source =event.getSource();
var popup =source.findComponent("popup");
popup.show({align:"after_end", alignId:"button"});
}
"/>

- clientIdには絶対パス(「:」で始まる)ではなく相対パスを使用します。たとえば、次のように使用します。

<af:showPopupBehavior popupId="demoTemplate:iteratorpop"
triggerType="mouseHover"/>

次は使用しません。

<af:showPopupBehavior popupId=":demoTemplate:iteratorpop"
triggerType="mouseHover"/>

- 詳細は、『Oracle Fusion Middleware Oracle ADF FacesによるWebユーザー・インタフェースの開発』のネーミング・コンテナの使用についての必知事項に関する項を参照してください。

- URLのエンコーディング。デフォルトでは、ポートレット化されたページまたはタスク・フローのURLはコンシューマ・アプリケーションによってプロキシされるようにエンコードされます。状況次第では、これらのURLをエンコードしたくない場合もあります。たとえば、コンテンツ配信ネットワークからJavaScriptライブラリをリクエストする場合や、ユーザーのブラウザから直接リソースにアクセスしてローカルに構成されたHTTPプロキシを利用する場合などです。
他にも、タスク・フローがインライン・フレーム(たとえばaf:inlineFrameタグを使用)を含む場合などがあります。このような場合は、インライン・フレームURLがコンシューマのポートレット・リソース・プロキシを介して進むためにエンコードされないようにする必要があります。そうしないと、インライン・フレーム内のコンテンツの相対URLは有効となりません。これらのURLがインライン・フレームの元のURLと相対的な正しい場所ではなくリソース・プロキシへのURLと相対的となるためです。

URLエンコーディングをバイパスするには、エンコーディングに向けてOracle JSF Portlet Bridgeに渡されるURLの_xEncodeUrlパラメータをfalseに設定してください。このパラメータはOracle JSF Portlet Bridgeによって収集され、URLがリソース・プロキシを介してエンコードされることはありません。パラメータは、タスク・フローがポートレットとして実行していない場合は無視されます。

たとえば、次を置換します。

<af:inlineFrame source="http://myiframe.example.com">

置換後:

<af:inlineFrame source="http://myiframe.example.com?_xEncodeUrl=false">

注意:

このパラメータは、プロデューサ・サーバーにあるリソースへのアクセスには使用しないでください。これらのリソースにはポートレット・クライアントのプロキシを使用してアクセスする必要があります。

- goLinkの問題。adf:goLinkコンポーネントは、リンクURLを現在のJSFアプリケーションのアクションとしてエンコードします。つまり、これはExternalContext.encodeActionURL(...)を使用してリンクをエンコードします。これは、ExternalContext.encodeResourceURL(...)を使用してリソースとしてURLをエンコードするJSF h:outputLinkコンポーネントとは異なります。goLinkを使用してFaces Viewではないリソースにリンクする場合、URLはリソースURLとしてエンコードする必要があります。これを行うには、次のパラメータをURLに追加することで、Oracle JSF Portlet Bridgeに対してリンクがFaces Viewではないことを伝える必要があります。

javax.portlet.faces.ViewLink=false

例:

<af:goLink text="goLink 1" id="gl1" destination="/mynonfaceslink?javax.portlet.faces.ViewLink=false"/>

- プロトコル内リソース・リクエスト。Oracle JSF Portlet Bridgeの下で実行しているJSFアプリケーション内では、リソースURLがExternalContext.encodeResourceURL(...)を使用して作成される場合、そのリソースURLはプロトコル外のリソース・リクエストとして実行されるようにエンコードされます。つまり、ポートレット・コンシューマがそのリソースにアクセスする場合、これはターゲットURLに直接コールすることでそれを実行します。リソースURLがプロトコル内となることも可能です。つまり、ポートレット・コンシューマはプロデューサ・アプリケーションに対してWSRP Webサービス・コールを行うことでリソースにアクセスし、これが最終的にポートレットでコールされるserverResourceメソッドになります。その後、WSRPレスポンスで戻されるリソースの提供はポートレットが実行します。そのポートレットがOracle JSF Portlet Bridgeであれば、これはリクエスト・ディスパッチャを使用してリソースを提供し、ターゲットURLに転送します。
一般的にプロトコル外のリソース・リクエストは、Webサービス・コールの余分なオーバーヘッドを招かないため好まれます。また、プロトコル内リクエストでは、処理されるリソースが大きな場合に、WSRP SOAPレスポンスが構成されるため、大量のメモリー割当てが生じる可能性もあります。Oracle JSF Portlet Bridgeの場合、プロトコル内リソースを使用するのは、リソース・リクエストとその他のポートレット・リクエスト(ポートレット・アクションやレンダリング・リクエストなど)との間のポートレット・スコープのHTTPセッションを共有する必要があるときだけです。

プロトコル内リソース・リクエストとしてOracle JSF Portlet BridgeにリソースURLをエンコードさせるには、ExternalContext.encodeResourceURL(...)をコールする前に、次のパラメータをURLに追加します。

javax.portlet.faces.InProtocolResourceLink=true

例:

<af:goLink text="goLink 1" id="gl1" destination="/mynonfaceslink?javax.portlet.faces.ViewLink=false&javax.portlet.faces.InProtocolResourceLink=true"/>

12.3 ポートレット化されたページまたはタスク・フローのポートレット・エントリの更新

編集するページまたはタスク・フローが以前にポートレット化されており、それらにタスク・フローまたはページのパラメータまたはイベントに対する更新が含まれている場合、そのページまたはタスク・フローのポートレット・エントリを更新して、ポートレットとその基になるページまたはタスク・フローの同期を取る必要があります。

注意:

ポートレット化されたページを削除する場合、そのページのポートレット・エントリを手動でportlet.xmlファイルから削除する必要があります。

ポートレット化されたページまたはタスク・フローのポートレット・エントリを更新するには:

1. アプリケーション・ナビゲータで、更新するポートレット化されたページまたはタスク・フローを含むJSFアプリケーションを開きます。

2. ページまたはタスク・フローを右クリックし、「ポートレット・エントリの更新」を選択します。

3. ポートレット・エントリがバインドなしタスク・フロー用である場合、ダイアログでそのポートレットの作成に使用したビュー・アクティビティを選択するよう求められます。

ポートレット化されたページまたはタスク・フローのポートレット・エントリを更新すると、ポートレット・エントリは次のように更新されます。

- 「コンテキスト・イベント用ポートレット・イベントの作成」オプションがtrueに設定されます。

- ポートレット名、表示名、タイトル、短いタイトルまたは説明は更新されません。

- 必要に応じて、event-definition要素が(ポートレット・アプリケーション・レベルで)作成されます。

- 既存のevent-definition要素は削除または更新されません。

- 必要に応じて、public-render-parameter要素が(ポートレット・アプリケーション・レベルで)作成されます。

- 既存のpublic-render-parameter要素は削除または更新されません。

- ポートレット・エントリ内のsupported-processing-event、supported-publishing-eventおよびsupported-public-render-parameter要素は、ページまたはタスク・フローの現在のイベントと入力パラメータを反映するために再作成されます。つまり、いくつかの既存のポートレット・イベントとパブリック・パラメータが削除され、新しく追加される場合があります。

12.4 JDeveloperでのポートレット化されたページまたはタスク・フローのテスト

ページまたはタスク・フローをポートレット化したら、テストを行って、それが正しく動作することを確認する必要があります。ポートレット化されたページまたはタスク・フローのテストでは、次の手順を実行する必要があります。

1. ページまたはタスク・フローをポートレット化して、portlet.xmlファイル内にポートレット・エントリを作成します。

2. ポートレット化されたアプリケーションをポートレット・サーバーにデプロイします。

3. ポートレット化されたページまたはタスク・フローを使用するためのアプリケーションを作成します。

4. ポートレット化されたアプリケーションをコンシューマ・アプリケーションに登録します。

5. コンシューマ・アプリケーション内にページを作成し、そこにポートレット化されたページまたはタスク・フローを追加します。

6. コンシューマ・アプリケーションをデプロイし、ポートレット化されたページまたはタスク・フローを含むページを表示します。

12.5 統合WebLogic Serverを使用してのJSFポートレットのテスト

JSFポートレットを作成したら、JDeveloperとともにパッケージ化されている統合WebLogic Serverを使用してテストできます。

始める前に

ポートレット化されているページまたはタスク・フローをテストする前に、実行中のADFアプリケーションでそのページまたはタスク・フローが正しく動作することをまずはテストすることをお薦めします。これは、統合WebLogic Serverを使用してページを実行することで、またはタスク・フローについてはタスク・フローをページに追加してページを実行することで行えます。

詳細は、『Oracle Fusion Middleware Oracle Application Development FrameworkによるFusion Webアプリケーションの開発』の統合WebLogic ServerでのADFアプリケーションの実行に関する項を参照してください。

JSFポートレットをテストするには:

1. メイン・メニューから「実行」を選択し、「サーバー・インスタンスの起動」を選択します。

統合WLSの起動には数分かかる場合があります。インスタンスが起動すると、「ログ」パネルに次のようなメッセージが表示されます。

IntegratedWebLogicServer started.

詳細は、「統合WebLogic Serverの管理」を参照してください。

2. これでポートレット・プロデューサ・アプリケーションを統合WLS上で実行する準備ができました。Webアプリケーションとポートレット・プロデューサ・アプリケーションは、1つで同じもの(ポートレット・プロデューサ・アプリケーションは、ポートレット・アーティファクトが追加されている既存のWebアプリケーション)であるため、通常どおりWebアプリケーションを実行することも(『Oracle Fusion Middleware Oracle Application Development FrameworkによるFusion Webアプリケーションの開発』の統合WebLogic ServerでのADFアプリケーションの実行に関する項を参照)、「統合WebLogic ServerでのWSRPポートレット・プロデューサの実行方法」の手順に従ってポートレットを実行することもできます。

3. アプリケーションがデプロイされると、次に進むことでWSRPプロデューサ・テスト・ページを表示できます。

http://host:port/context-root/info

説明:

- hostは、アプリケーションがデプロイされているサーバーの名前です。

- portはHTTPリスナー・ポートです。通常、これは7101です。サーバーが起動すると、ポートがコンソールに表示されます。

- context-rootは、Webアプリケーションのコンテキスト・ルートです。

4. ポートレットを含むアプリケーションのデプロイに成功すると、それを他の任意のアプリケーションにポートレット・プロデューサとして登録できます。

注意:

Oracle JSF Portlet BridgeがWSRP 2.0機能を使用している場合、WSRPプロデューサ・テスト・ページに一覧されているWSRP v2 WSDL URLを使用してプロデューサを登録する必要があります。

アプリケーションは、通常のWebアプリケーションとして引き続きアクセスすることも、ポートレット・プロデューサとして使用することもできます。

5. ポートレット・プロデューサをデプロイし、登録すると、自分のJSFアプリケーションのポートレットを他のポートレットと同じように使用できます。

12.6 WebLogic Managed ServerへのJSFポートレットのデプロイ

アプリケーションの動作がWebアプリケーションとポートレット・アプリケーションの両方として正しく動作していることが確認できたら、これを本番のOracle WebLogic管理対象サーバーにデプロイできます。

Webアプリケーションとポートレット・アプリケーションは、1つで同じものであるため(ポートレット・アプリケーションはポートレット・アーティファクトが追加されている既存のWebアプリケーション)、Webアプリケーションをデプロイすると、ポートレット・プロデューサ・アプリケーションもデプロイされます。

WebLogic管理対象サーバーへのアプリケーションのデプロイ方法の詳細は、『Oracle Fusion Middleware Oracle Application Development FrameworkによるFusion Webアプリケーションの開発』のFusion Webアプリケーションのデプロイに関する項を参照してください。

注意:

Oracle PortletコンテナがインストールされているJava EEコンテナにアプリケーションをデプロイするようにしてください。統合WLSにはコンテナがインストールされています。そのためテストには統合WLSをお薦めします。

デプロイメントに成功した後、アプリケーションとポートレット・プロデューサ・テスト・ページの両方にアクセスできます。たとえば、アプリケーションのURLは次のようになります。

http://host:port/appcontextroot/faces/pagename.jspx

また、ポートレット・プロデューサ・テストURLは次のようになります。

http://host:port/appcontextroot/info

12.7 イベントを使用したその他のポートレットとのJSFポートレットのリンク

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

- その他のポートレットとのJSFポートレットのリンクについて

- 別のJSFポートレットへのJSFポートレットのリンク方法

- JSR 286ポートレットへのJSFポートレットのリンク方法

- JSFポートレットへのJSR 286ポートレットのリンク方法

- Oracle JSF Portlet Bridgeのポートレット・イベントに関する必知事項

12.7.1 その他のポートレットとのJSFポートレットのリンクについて

コンテキスト・イベントをトリガーするOracle ADFタスク・フローをポートレット化する場合、Oracle JSF Portlet BridgeはJSR 286ポートレット・イベントを作成してコンテキスト・イベントをラップします。このため、ポートレット化されたタスク・フローがページ上で使用される場合、このタスク・フローは他のJSFポートレットまたはJSR 286ポートレットにリンクできることになります。

この項の例では、次のポートレットを使用します。

- 部門ポートレット: 部門リストを表示するポートレット化されたADFタスク・フロー。部門リストは場所IDで制限できます。このポートレットは、部門行がポートレットで選択されている場合に、コンテキスト・イベントdepartmentSelectedを呼び出します。departmentSelectedイベントは、hr.Department (Departments表の1行を表すJavaオブジェクト)タイプのオブジェクトです。

- 従業員ポートレット: 従業員リストを表示するポートレット化されたADFタスク・フロー。従業員リストは部門IDで制限できます。

- 部門アドレス・ポートレット: 特定部門のアドレスを表示するJSR286ポートレット。

- 部門場所ポートレット: 場所のリストを表示するJSR286ポートレット。このポートレットは、リストされている場所の1つが選択されるときに、ネームスペースhttp://xmlns.oracle.com/adfm/contextualeventとともにlocationIdというポートレット・イベントを呼び出します。

12.7.2 別のJSFポートレットへのJSFポートレットのリンク方法

部門タスク・フローは、タスク・フロー内で部門行が選択されている場合に、コンテキスト・イベントdepartmentSelectedを呼び出します。このイベントは最終的に、行選択リスナーからトリガーされるeventBindingによって発生します(次の例を参照)。

イベントのペイロード(hr.Departmentタイプのオブジェクトで、部門表の1行を表すJavaオブジェクト)は、現在の行をdepartments表イテレータからポイントするcustomPayload属性を使用して生成されます。

この例で使用されている手法のような標準的なADFコンテキスト・イベント手法の詳細は、『Oracle Fusion Middleware Oracle Application Development FrameworkによるFusion Webアプリケーションの開発』のコンテキスト・イベントの作成に関する項を参照してください。

<eventBinding Listener="org.apache.myfaces.trinidad.event.SelectionListener"
id="DepartmentSelectedEvent">
<events xmlns="http://xmlns.oracle.com/adfm/contextualEvent">
<event name="departmentSelected"
customPayLoad="#{bindings.departments.currentRow.dataProvider}"/>
</events>
</eventBinding>

「タスク・フローに基づいたJSFポートレットの作成方法」で説明されている手順を使用して部門タスク・フローをポートレット化すると、WSRPを介したポートレットとのポートレット通信中に対応するコンテキスト・イベントを転送するために使用されるポートレット・イベントの定義を含むportlet.xmlファイルが作成されます。

<portlet id="adf_taskflow_WEB_INF_departments_xml">
...
<supported-publishing-event id="departmentSelected">
<qname xmlns:x="http://xmlns.oracle.com/adfm/contextualEvent">
x:departmentSelected
</qname>
</supported-publishing-event>
...
</portlet>

部門ポートレットのdepartmentSelectedイベントについては、portlet.xmlに対応するイベント定義もあります。

<event-definition id="departmentSelected">
<qname xmlns:x="http://xmlns.oracle.com/adfm/contextualEvent">
x:departmentSelected
</qname>
<value-type>
oracle.portlet.bridge.adf.lifecycle.ADFmPayloadWrapper
</value-type>
</event-definition>

注意:

ポートレット・イベントでカバーされているコンテキスト・イベントのネームスペースは常に次のようになります。

http://xmlns.oracle.com/adfm/contextualEvent

ペイロード・タイプは常に次のようになります。

oracle.portlet.bridge.adf.lifecycle.ADFmPayloadWrapper

ADFmPayloadWrapperは、あらゆるシリアライズ可能なコンテキスト・イベント・ペイロードがJAXBマーシャリング化可能なラッパーにラップされるようにするために使用されます。また、これによってイベントが呼び出されるまでペイロードのタイプがわからない場合であっても、固定タイプをポートレット・イベントに宣言することができます。ペイロードは、ポートレット・イベントからコンテキスト・イベントを抽出する際にアンラップされます。

従業員タスク・フローでは、標準的なADF手法を使用してdepartmentSelectedイベントを処理します。これは、データ・コントロールでメソッドを呼び出して、departmentSelectedイベントからそのメソッドへのパラメータとしてイベント・ペイロードを提供する methodActionバインドの形となります。次の例は、methodActionバインディングの定義を示しています。

<methodAction id="updateTableForDepartmentId" RequiresUpdateModel="true"
Action="invokeMethod" MethodName="updateTableForDepartmentId"
IsViewObjectMethod="false" DataControl="EmployeesDataControl"
InstanceName="EmployeesDataControl.dataProvider">
<NamedData NDName="departmentIdPayLoad" NDType="hr.Department"/>
</methodAction>

updateTableForDepartmentIdメソッドは、departmentSelectedイベントのペイロードとして渡されるhr.Departmentオブジェクトをとり、EmployeesDataControlから問い合されるデータを、選択された部門に所属する従業員のみを示すようにフィルタ処理します。また、イテレータが再実行され、表ビュー・コンポーネントがこのリクエストで再レンダリングされる必要があるとしてマークされるようにする手順も実行されます。

従業員タスク・フローには、タスク・フローがポートレット化されるときに受信イベントを適切なmethodActionに明確にマップするイベント・マップが含まれています。

<eventMap xmlns="http://xmlns.oracle.com/adfm/contextualEvent">
<event name="departmentSelected">
<producer region="*">
<consumer region="" handler="updateTableForDepartmentId"
handleCondition="${ADFPortletBridge.bridgeRequest}">
<parameters>
<parameter name="p1" value="#{payLoad}"/>
</parameters>
</consumer>
</producer>
</event>
</eventMap>

注意:

<producer region="*">属性はあらゆるリージョンからイベントを受け入れます。これは、リモート・アプリケーションからポートレットに着信するイベントとともに、タスク・フローがポートレットとして実行している場合、リモート・アプリケーションにはプロデューサ・リージョンに関する知識がまったくないためです。

現在のリクエストがOracle JSF Portlet Bridgeの下で実行している場合、handleCondition="${ADFPortletBridge.bridgeRequest}"内のEL式はtrueに評価されます。これによって、このイベント・マップはタスク・フローがポートレットとして実行している場合のみ使用されることが保証されます。このhandleConditionはなくてもかまいません。ただし、タスク・フローがポートレットとして実行している場合のみ使用される別のeventMapを定義できると便利な場合もあります。

2つのポートレット化されたタスク・フローがページに追加されると、部門ポートレットによってトリガーされるイベントの名前が従業員ポートレットによって期待されているものと同じであるかぎり、それ以上のコーディングは不要です。ポートレットは自動的にリンクされ、部門ポートレットで部門が選択されると従業員ポートレットが更新され、選択されている部門に属する従業員が表示されます。

図12-1 リンクされたJSFポートレット

自動的なイベント・リストを使用しないことを選択することもできます。たとえば、同じイベントを使用する同じページ上に複数のポートレットを持ち、それらの間のイベントのフローを制御する場合などに選択できます。または、リンクするJSFポートレットで使用されているコンテキスト・イベントの名前が一致しない場合にも選択します。この場合、ポートレット化されたタスク・フローを含むページのページ定義にイベント・マップを明示的に作成する必要があります。このイベント・マップは、まとめて連結するポートレットのポートレット・イベントをリンクします。次の例は、従業員タスク・フローがdepartmentSelectedのかわりにdepartmentIdというイベントを想定している場合に、この例でこれがどのような働きをするかを示しています。

<eventMap xmlns="http://xmlns.oracle.com/adfm/contextualEvent">
<event name="departmentSelected">
<producer region="EventSampleProducerdepartments1_1">
<consumer handler="EventSampleProduceremployees1_1.
{http://xmlns.oracle.com/adfm/contextualEvent}departmentId"/>
</producer>
</event>
</eventMap>

注意:

ポートレット化されたタスク・フローの場合、handler属性はイベントを処理する特定のバインド・オブジェクトだけではなく、<portletBindingId>.<eventQName>形式を使用してポートレット・イベントの完全なQNameも指定する必要もあります。ネームスペースはADFmネームスペースでなくてもかまいません。ペイロードに互換性があればどのポートレット・イベントでも可能です。

12.7.3 JSR 286ポートレットへのJSFポートレットのリンク方法

他のJSFポートレットをJSFポートレットにリンクするのと同様に、JSFポートレットは通常のJSR 286ポートレットにリンクすることもできます。これを実行するには、JSR 286ポートレットがコンテキスト・イベントを受け入れることができると明示的に宣言していることを確認する必要があります。

たとえば、前述の例から部門タスク・フローを部門アドレス・ポートレットJSR 286ポートレットにリンクして、選択されている部門のアドレスを表示できます。

自動的なイベントの関連付けが有効となるために、部門アドレス・ポートレットは、部門ポートレットからコンテキスト・イベントを受け入れ可能であることを宣言する必要があります。これは、次の2つの方法で実行できます。

- 部門アドレス・ポートレットでは、直接departmentSelectedコンテキスト・イベントがサポートされます。

<supported-processing-event id="departmentSelected">
<qname xmlns:x="http://xmlns.oracle.com/adfm/contextualEvent">
x:departmentSelected
</qname>
</supported-processing-event>

- 部門アドレス・ポートレットのイベントdepartmentのイベント定義では、これをdepartmentSelectedコンテキスト・イベントと関連付けるための別名が提供されます。

<event-definition id="department">
<qname xmlns:x="http://xmlns.oracle.com/portlet/EventSample">
x:department
</qname>
<alias xmlns:x="http://xmlns.oracle.com/adfm/contextualEvent">
x:departmentSelected
</alias>
<value-type>hr.Department</value-type>
</event-definition>

注意:

コンテキスト・イベントを実行するために使用されるポートレット・イベントのネームスペースは、常に次のようになります。

http://xmlns.oracle.com/adfm/contextualEvent

ネームスペースは、前述のイベント宣言または別名で使用されます。このネームスペースは、コンシューマに対して、ポートレットがポートレット・イベントとして指定された名前でコンテキスト・イベントを受け入れる必要があることを示します。これは自動的なイベントの関連付けが有効となるために不可欠です。

部門アドレス・ポートレットでは、イベントを処理するコードがprocessEvent実装に含まれています。このメソッドでは、前述の定義どおり別名とともにdepartmentSelectedとdepartmentイベントのいずれかを検索します。これらのイベントの両方に対するペイロード・タイプはhr.Departmentです。ただし、次の例に示すメソッドは、ADFmPayloadWrapperを使用してペイロードをアンラップする方法を示しています。ADFmPayloadWrapperは、Oracle JSF Portlet Bridgeがイベント呼出し時にデフォルトで使用するイベント・タイプです。

public void processEvent(EventRequest request, EventResponse response)
throws PortletException, IOException
{
response.setRenderParameters(request);

Event event =request.getEvent();
String eventName =event.getName();
if ("departmentSelected".equals(eventName) ││
"department".equals(eventName))
{
Object payload =event.getValue();
if (payload instanceof ADFmPayloadWrapper)
{
payload =((ADFmPayloadWrapper)payload).getPayload();
}
if (payload instanceof Department)
{
Department department =(Department)payload;
int locationId =department.getLocation();
response.setRenderParameter("locationId", Integer.toString(locationId));
}
}
}

これらの2つのポートレットが1ページにまとめて表示される場合、部門ポートレットで部門を選択すると、部門アドレス・ポートレットが自動的に更新され、選択されている部門のアドレスが表示されます。

図12-2 JSR 286ポートレットにリンクされたJSFポートレット

部門アドレス・ポートレットがdepartmentSelectedイベントを明示的にサポートしていない、または適切な別名を定義していない場合でも、ページ定義内にイベント・マップを作成することで2つのポートレットをリンクできます。

<eventMap xmlns="http://xmlns.oracle.com/adfm/contextualEvent">
<event name="departmentSelected">
<producer region="EventSampleProducerdepartments1_1">
<consumer handler="DepartmentAddress1_1.
{http://xmlns.oracle.com/portlet/EventSample}department"/>
</producer>
</event>
</eventMap>

このイベント・マッピングでは、departmentSelectedコンテキスト・イベントがEventSampleProducerdepartments1_1ポートレット・バインドによって呼び出されると、そのイベントがDepartmentAddress1_1ポートレット・バインドに配信され、次にこれがポートレット・イベントdepartmentを使用してポートレットにイベントを送信することになります。

注意:

departmentSelectedコンテキスト・イベントのペイロードは、hr.Departmentsオブジェクトです。これは、ポートレットのdepartmentポートレット・イベントが期待する同じペイロード・タイプであるため、適合し、すべてが正しく動作します。また、ポートレットは、ADFmPayloadWrapperタイプのペイロードを期待していることを宣言することができます。この場合、ポートレット・コンシューマがこれを検出し、ADFmPayloadWrapperオブジェクトにコンテキスト・イベント・ペイロードを自動的にラップします。

12.7.4 JSFポートレットへのJSR 286ポートレットのリンク方法

ポートレット・イベントをJSR 286ポートレットからJSFポートレットに送信することもできます。ポートレット・イベントは、Oracle JSF Portlet Bridgeによってコンテキスト・イベントに変換され、使用されるプロデューサADFアプリケーションに標準的なコンテキスト・イベント手法を使用して配信されます。

部門タスク・フローには、DepartmentsDataControlのメソッドにバインドされるmethodActionバインディングが含まれています。

<methodAction id="updateTableForLocationId" RequiresUpdateModel="true"
Action="invokeMethod" MethodName="updateTableForLocationId"
IsViewObjectMethod="false"
DataControl="DepartmentsDataControl"
InstanceName="DepartmentsDataControl.dataProvider">
<NamedData NDName="locationId" NDType="int"/>
</methodAction>

updateTableForLocationIdメソッドは、場所IDをパラメータとして受け入れます。このIDによってデータ・コントロールによって返される部門のリストがその場所IDでフィルタ処理されます。

タスク・フローには、コンテキスト・イベントを適切なmethodActionにマップするイベント・マップが含まれています。

<eventMap xmlns="http://xmlns.oracle.com/adfm/contextualEvent">
<event name="locationId">
<producer region="*">
<consumer region="" handler="updateTableForLocationId"
handleCondition="${ADFPortletBridge.bridgeRequest}">
<parameters>
<parameter name="p1" value="#{payLoad}"/>
</parameters>
</consumer>
</producer>
</event>
</eventMap>

注意:

イベント・マップは、イベントの発信元であるリージョンは参照できません。これはタスク・フローがポートレットとして実行しているときに存在しないためです。そのためイベント・マップではイベント・ソースとしてワイルドカードを使用します。

部門場所ポートレットでは、場所が選択されている場合、選択されている場所の場所IDを指定してprocessActionメソッドによってポートレット・イベントlocationIdが呼び出されます。

public void processAction(ActionRequest request, ActionResponse response)
throws PortletException
{
String locationId =request.getParameter("locationId");
Location location =getLocation(Integer.parseInt(locationId));

if (location != null)
{
//QName matches the event declared as a supported-publishing-event in
//portlet.xml for this portlet.

//LocationId event. Raised in the ContextualEvent namespace makes it readily
//consumable by ADF Bridge portlets. Likewise we wrap with the
//ADFmPayloadWrapper payload object that the ADF Bridge expects.
response.setEvent(new QName("http://xmlns.oracle.com/adfm/contextualEvent",
"locationId"),
new ADFmPayloadWrapper(Integer.valueOf(location.getLocationId())));
}
}

注意:

processActionメソッドで呼び出されたlocationIdイベントには、Integerタイプのペイロードがあります。ただし、JSFポートレットは常にADFmPayloadWrapperでラップされたコンテキスト・ペイロードでポートレット・イベントを予測するため、イベントの自動配信を機能させたい場合には受信ポートレットの要件に適するようにペイロードをラップする必要があります。

同様に、呼び出すイベントのQNameは次のようになります。

{http://xmlns.oracle.com/adfm/contextualEvent}locationId

ポートレットをページ上にドロップし、部門場所ポートレット内で場所を選択すると、選択した場所に部門を表示する部門ポートレットが自動的に更新されます。

図12-3 JSFポートレットにリンクされたJSR 286ポートレット

2つのポートレットが一致する名前でイベントを宣言していない(たとえば、部門ポートレットからのコンテキスト・イベントがlocIdとコールされる)場合や、自動イベント・リスニングが無効化されている場合であっても、部門ポートレットのコンテキスト・イベントを部門場所ポートレットのポートレット・イベントにマップするイベント・マップをページ定義内に作成することで、2つのポートレットをリンクできます。

<eventMap xmlns="http://xmlns.oracle.com/adfm/contextualEvent">
<event name="locationId">
<producer region="DepartmentLocations1_1">
<consumer handler="DepartmentsADFBridgePortlet1_1.
{http://xmlns.oracle.com/adfm/contextualEvent}locId">
</consumer>
</producer>
</event>
</eventMap>

12.7.5 Oracle JSF Portlet Bridgeのポートレット・イベントに関する必知事項

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

- コンテキスト・イベント・ペイロードでのシリアライズされたタイプの使用に関する必知事項

- 宣言されていないイベントの呼出しに関する必知事項

- 部分ページ・レンダリングに関する必知事項

12.7.5.1 コンテキスト・イベント・ペイロードでのシリアライズされたタイプの使用に関する必知事項

JSR 286イベントのペイロードの一部は、シリアライズされるラップされたコンテキスト・イベント・ペイロードです。そのため、コンテキスト・イベント・ペイロードがいずれのオブジェクト・タイプでも可能である間は、WSRP経由でコンテキスト・イベントを送信するときにはシリアライズされたタイプのみがサポートされます。

このラップされたコンテキスト・イベントが配信されると、コンテキスト・イベント・ペイロードはコンシューマで非シリアライズされなければ、コンシューマ・アプリケーションに転送できません。イベントを非シリアライズするには、ペイロード・クラスがコンシューマとプロデューサで使用可能でなければなりません。この条件は、元のペイロードがjava.lang.StringのようなJava Runtime Environmentクラスであれば自動的に満たされます。

12.7.5.2 宣言されていないイベントの呼出しに関する必知事項

Oracle ADFタスク・フローにADFmイベントが含まれており、portlet.xmlファイルで対応するポートレット・イベントが宣言されていない場合、Oracle JSF Portlet Bridgeでそれらの宣言されていないイベントを呼び出すことができます。

宣言されていないイベントを呼び出すには、ポートレット化されたタスク・フローに対して次のコンテナ・ランタイムを設定してください。

<portlet id="Application5untitled1jspx1_1">
...
<container-runtime-option>
<name>oracle.portlet.bridge.adf.raiseUndeclaredContextualEvents</name>
<value>true</value>
</container-runtime-option>
...
</portlet>

このオプションをtrueに設定することで、呼び出されたあらゆるADFmイベントがポートレット・イベントとして転送されることになります。このオプションが提供されていない、またはfalseに設定されている場合、対応するポートレット・イベント宣言を持つイベントのみが転送されます。コンテナ・ランタイム・オプションの詳細は、「個々のポートレットに対するコンテナ・ランタイム・オプションの設定」を参照してください。

また、宣言されていないポートレット・イベントを有効にして、コンシューマ・アプリケーションのポートレット・バインドからADFmイベントとして自動的に転送することもできます。

ポートレット・バインドで、raiseUndeclaredContextualEvent属性をたとえば次のようにtrueに設定します。

<portlet id="Application5untitled1jspx1_1"
portletInstance="/oracle/adf/portlet/WsrpPortletProducer4/ap/
Application5untitled1jspx_2943bd23_012e_1000_8004_0aa7c0849010"
class="oracle.adf.model.portlet.binding.PortletBinding"
retainPortletHeader="false"
listenForAutoDeliveredPortletEvents="true"
listenForAutoDeliveredParameterChanges="true"
raiseUndeclaredContextualEvents="true"
xmlns="http://xmlns.oracle.com/portlet/bindings"/>

このオプションをtrueに設定することで、ポートレット・イベントが受信された場合に、ポートレット・イベントにイベント宣言がなくても対応するADFmイベントが呼び出されることになります。ADFmイベントの名前は、ポートレット・イベントのQNameから直接取得されます。Oracle JSF Portlet Bridgeから呼び出されたADFmイベントが、リモート・アプリケーションでイベントが呼び出されたときと同じ名前を持つのはこのためです。

12.7.5.3 部分ページ・レンダリングに関する必知事項

Oracle JSF Portlet Bridgeは、ポートレット・イベントを使用してコンシューマ・アプリケーションとの間でコンテキスト・イベントをトランスポートします。ただし、部分ページ・レンダリング(PPR)リクエストは、Portlet 2.0リソース・リクエストを使用して実装されます。リソース・リクエストのポートレット・イベントを送受信することはできません。そのため、PPRリクエストの場合、JSFポートレットからコンシューマ・アプリケーションにコンテキスト・イベントをトランスポートするには専用のメカニズムが使用されます。

13 JSR 286を使用した標準ベースのJavaポートレットの作成

この章では、Javaポートレット仕様JSR 286を使用して、標準ベースのJavaポートレットを作成する方法について説明します。

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

- JSR 286を使用した標準ベースのJavaポートレットの作成について

- JSR 286 Javaポートレットの作成

- JSR 286 Javaポートレットの開発

- JSR 286ポートレットのテスト

- WebLogic PortalポートレットのWebCenter Portalへの移行

- JSR 286ポートレット関連のファイル

13.1 JSR 286を使用した標準ベースのJavaポートレットの作成について

WebCenter Portalでは、JSR 286標準を使用した標準ベースのJavaポートレットの作成をサポートしています。

JSR 286は、ポートレットとポータル間の相互運用を可能にし、集約、パーソナライズ、表示形式およびセキュリティの各領域に対処する一連のAPIを定義する仕様です。JSR 286では、次の機能を提供するコンテナ・サービスを定義しています。

- ポートレット機能をコーディングするためのポートレットAPI

- ポートレット・コンテナ内でユーザー相互作用を作成するためのURLリライティング・メカニズム

- ポートレットのセキュリティとパーソナライズ

- ポートレット・イベントおよびパブリック・レンダラ・パラメータを使用したポートレット間通信

詳細は、次の場所にあるJSR 286の仕様を参照してください。

http://jcp.org/en/jsr/detail?id=286

WSRPは、Webサービスの標準です。この標準によって、ポータルまたは他の中間Webアプリケーションを使用するユーザー対象のWebサービスで視覚的なプラグ・アンド・プレイが可能になります。WSRPは標準であるため、標準コンテナとあらゆるWSRPポータル間の相互運用性が実現されます。WSRPでは、次の項目を定義しています。

- WSRPサービスを起動するためのWeb Services Definition Language (WSDL)インタフェース

- WSRPサービスで発生するマークアップのためのマークアップ・フラグメント・ルール

- WSRPサービスとメタデータを公開、検索およびバインドするメソッド

WSRPは、ポートレット・クライアントと、リモート・サーバーで実行されているポートレット・コンテナとの間の通信を可能にします。JSR 286には、ポートレット・プロデューサ・アプリケーションを実行するためのJavaポートレットAPIについての記述があります。これらの標準を組み合せることで、開発者は、内部または外部のソースからのアプリケーションをポートレットとしてWSRPポータルに統合できます。ページの構築は、JDeveloperの「リソース・パレット」やアプリケーション・ナビゲータの「アプリケーション・リソース」ペインからポートレットを選択するのと同様に簡単に行えるようになりました。

図13-1に、JSR 286ポートレットを使用するWSRP仕様のアーキテクチャを示します。

図13-1 WSRP仕様のアーキテクチャ

13.2 JSR 286 Javaポートレットの作成

WebCenter Portalには、JDeveloperで使用できるウィザードが用意されており、このウィザードを使用すると、JSR 286標準ベースのJavaポートレットの初期フレームワークを短時間で簡単に作成できます。

JSR 286 Javaポートレットの作成ウィザードでは、実装するポートレット・モードと、各モードに使用する実装メソッド(JSP、HTTPサーブレット、JavaクラスまたはHTML)を選択できます。さらに、ウィザードによって、選択したモードごとに簡単な実装を作成します。

JDeveloperのウィザードを使用してJSR 286 Javaポートレットを作成するには:

1. JDeveloperで、ポートレットの作成先であるポートレット・プロデューサ・アプリケーションを開くか、新しいポートレット・プロデューサ・アプリケーションを作成します。
ポートレット・プロデューサ・アプリケーションの作成方法の詳細は、「ポートレット・プロデューサ・アプリケーション」を参照してください。

注意:

WebCenter Portal - ポートレット・プロデューサ・アプリケーション・テンプレートを使用せずに、ポートレット・プロデューサ・アプリケーションを作成する場合は、テクノロジ・スコープを構築する適切なポートレットをアプリケーションに手動で追加する必要があります。

2. ポートレットを作成するプロジェクト(たとえば、「ポートレット」)を右クリックして、「新規」を選択します。

3. 「新規ギャラリ」(図13-2)で「Web層」を開き、「ポートレット」、「規格に基づいたJavaポートレット(JSR 286)」の順に選択して、「OK」をクリックします。

図13-2 「新規ギャラリ」の「規格に基づいたJavaポートレット(JSR 286)」オプション

ヒント:

プロジェクトにJSR 286ポートレットが含まれている場合は、次の方法でも新しいポートレットを作成できます。

- portlet.xmlを右クリックして、「ポートレットの追加」を選択します。

- portlet.xmlを開き、「設計」タブをクリックして、「ポートレット」タブの「追加」アイコンをクリックします。

4. JSR 286 Javaポートレットの作成ウィザードの「一般ポートレット情報」ページで、「名前」フィールドに入力されているデフォルト名を変更して、ポートレットの用途を適切に表すようにします。

5. 「クラス」フィールドに、ポートレットのクラスの名前を入力します。表示されているデフォルト名を受け入れることも、独自の名前を指定することもできます。新しい名前を入力する場合は、有効なJava名を使用する必要があります。

6. 「パッケージ」ドロップダウン・リストから、クラスを作成するパッケージを選択するか、パッケージの名前を入力します。
必要に応じて、「参照」ボタンをクリックして、プロジェクト内のパッケージを検索します。特定のパッケージを選択しないと、ウィザードではプロジェクトのデフォルト・パッケージが使用されます。

7. 「言語」ドロップダウン・リストから、ポートレットでサポートするデフォルト言語を選択します。ウィザードでは、デフォルトで英語が使用されます。

8. ポートレットで「編集」モードをサポートするには、「ユーザーがポートレット・コンテンツを編集できるようにします」を選択します。ウィザードでは、このオプションがデフォルトで選択されています。
編集モードを使用すると、ユーザーは実行時にポートレットをパーソナライズできるようになります。詳細は、「編集モード」を参照してください。

このオプションを選択すると、ポートレットの編集モードについて実装の詳細を後からウイザードで指定できるようになります。

9. 「Next」をクリックします。

10. 「追加ポートレット情報」ページの「ポートレット・タイトル」フィールドに、ポートレットの説明的なタイトルを入力します。
ポートレット・タイトルは、リソース・カタログに表示されるため、ポートレットが便利かどうかどうかをユーザーが判断するのに役立つタイトルにしてください。ポートレットのタイトルは、ポートレットがページに表示されるとポートレットのヘッダーにも表示されます。

ヒント:

「表示名」、「短いタイトル」、「説明」、および「キーワード」の各属性は、WebCenter Portalには実装されていません。これらのフィールドに、値を入力する必要はありません。ただし、そのポートレットが別のアプリケーションで利用される可能性がある場合を除きます。

11. ウィザードのこの時点で、「終了」をクリックし、残りのすべての設定にデフォルト値を使用することで、ポートレットをすぐに作成できます。
ポートレットにその他の詳細を指定するには、「次へ」をクリックし、残りの手順を実行します。

12. 「コンテンツ・タイプとポートレット・モード」ページの「コンテンツ・タイプとポートレット・モード」リストで、「表示」を選択します。

13. 「実装メソッド」セクションで、ポートレットの表示モードの実装方法を次から選択します(表示モードの詳細は、「表示モード」を参照)。

- JSPの生成: そのポートレット・モードに応じたスケルトンJSPファイルを生成する場合に選択します。対応するフィールドにJSPの名前を入力するか、デフォルトを受け入れます。
ウィザードを完了すると、生成されたJSPがアプリケーション・ナビゲータに表示されます。このJSPは、今後の開発の際にアプリケーション・ナビゲータから選択できます。これは、すべてのポートレット表示モードのデフォルトの選択です。

- ADF-Faces JSPXの生成: ADF-Facesコンポーネントの追加が可能なページを生成する場合に選択します。対応するフィールドにJSFページの名前を入力するか、デフォルトを受け入れます。
このオプションを選択すると、ポートレットの実装クラスは、oracle.portlet.bridge.adf.application.ADFBridgePortletのサブクラスとして作成されます。javax.portlet.GenericPortletのサブクラスとしては作成されません。つまり、このウィザードで、Oracle JSF Portlet Bridgeを使用するポートレット・プロデューサ・アプリケーションを生成することになります。Oracle JSF Portlet Bridgeの詳細は、「Oracle JSF Portlet Bridgeを使用したJSFアプリケーションからのポートレットの作成」を参照してください。

- パスへのマップ: ポートレット・モードを、ポートレット・プロデューサ・アプリケーションのWebリソース(ページなど)にマップする場合に選択します。このリソースは、このウィザードでは生成されません。対応するフィールドに名前とパスを入力します。このリソースは、ウィザードの完了後に必要に応じて作成できます。
これを選択するときは、ターゲットのリソースまたはファイルを作成する必要があります。ターゲットとしては、JSP、サーブレット、HTMLファイルなどを使用できます。これを選択すると、生成されるポートレットJavaクラスには、特定のモードに対するリクエストを指定したターゲットにルーティングするコードが入力されます。

- カスタム・コード: カスタム・コード・オブジェクトでポートレット・モードを実装する場合に選択します。このオブジェクトは、後で作成する必要があります。これを選択すること、生成されるポートレットJavaクラスに、コンテンツをレンダリングするためのスケルトン・メソッド(private void doMODE_NAMECONTENT_TYPE)を生成します。役に立つコンテンツをレンダリングするには、このコードを更新する必要があります。

ヒント:

このポートレット・モードで別のコンテンツ・タイプ(text/xmlなど)もサポートする場合は、手順16を参照してください。

14. ウィザードの最初のページで「ユーザーがポートレット・コンテンツを編集できるようにします」を選択した場合は、「編集」を選択して、手順13で説明したように、編集モードに応じた実装方法を選択します(編集モードの詳細は、「編集モード」を参照)。

15. ポートレットに別のポートレット・モードを実装するには:

a. 「コンテンツ・タイプとポートレット・モード」リストの該当するコンテンツ・タイプ(たとえば、text/html)で、既存のモード(たとえば、「表示」)を選択します。

b. 「追加」をクリックします。

c. 「ポートレット・モード」ダイアログで、「選択済」リストに必要なモードを1つ以上移動して、「OK」をクリックします。
「ポートレット・モード」ダイアログには、JSR 286でサポートされる標準のモードと、WebCenter Portalでサポートされる拡張モードが一覧表示されます。

詳細は、「ポートレット・モード」を参照してください。

d. ポータル・モードをそれぞれ選択して、コンテンツのレンダリングに使用する実装メソッドを指定します。手順13を参照してください。

16. コンテンツ・タイプによって、ポートレットでサポートされるコンテンツのタイプが識別されます。ポートレットでは、複数のコンテンツ・タイプをサポートできます。JSR 286 Javaポートレットの作成ウィザードを使用して作成されたポートレットでは、text/htmlコンテンツ・タイプがデフォルトでサポートされます。

異なるコンテンツ・タイプを追加するには:

a. 「コンテンツ・タイプとポートレット・モード」リストで、既存のコンテンツ・タイプ(たとえば、text/html)を選択します。

b. 「追加」をクリックします。

c. 「コンテンツ・タイプ」ダイアログで、「選択済」リストに必要なコンテンツ・タイプを移動して、「OK」をクリックします。

- text/html: テキストのHTMLエンコードをサポートします。これはデフォルト選択です。

- text/xml: テキストのXMLエンコードをサポートします。

- text/plain: エンコードされていないプレーン・テキストをサポートします。

- text/vnd.oracle.mobilexml: テキストのOracle Mobile XMLエンコードをサポートします。ただし、WebCenter PortalではOracle Mobile XMLはサポートされません。

- application/xhtml+xml: テキストのXHTMLエンコードをサポートします。

- application/xml: XHTMLを含むXMLコンテンツをサポートします。

17. 「Next」をクリックします。
ウィザードの前のほうの「一般ポートレット情報」ページで、「ユーザーがポートレット・コンテンツを編集できるようにします」を選択した場合は、ポートレット・プリファレンスを作成できます。これにより、ポートレットのユーザーは、実行時にポートレットの値を指定できるようになります。手順18に進みます。

このオプションを選択していない場合は、手順24に進みます。

18. 「カスタマイズ・プリファレンス」ページで、「追加」をクリックして、新しいポートレット・プリファレンスをポートレットに追加します。

このウィザードは、デフォルトで、ユーザーがポートレット・タイトルをカスタマイズできるようにするポートレット・プリファレンスを組み込みます。

19. 「新規プリファレンスの追加」ダイアログの「名前」フィールドに、新しいプリファレンスの名前を入力します。
この名前はポートレット内で一意である必要があり、空白を含めることはできません。

20. 「デフォルト値」フィールドに、新しいプリファレンスの1つ以上のデフォルト値を入力します。複数の値は、カンマで区切ってください。

21. 様々な言語でプリファレンスを使用できるようにする場合は、「プリファレンスの翻訳」チェック・ボックスを選択します。
たとえば、ポートレットが多言語ポータルで利用される可能性がある場合は、適切な言語でプリファレンスを表示する必要があります。

このオプションを有効にすると、プリファレンスのエントリは、そのポートレット用にJDeveloperが生成するリソース・バンドル・クラスに追加されます。

ヒント:

このリソース・バンドルを編集して、プリファレンスの名前とデフォルト値の翻訳を指定します。ほとんどの場合、名前の翻訳は必要になりますが、デフォルト値の翻訳が必要になることはありません(その値が整数の場合など)。

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

23. さらに別のプリファレンスを追加する場合は、前の手順を繰り返します。完了したら、「次へ」をクリックします。

24. 「セキュリティ・ロール」ページで、既存のセキュリティ・ロールをポートレットに追加するには、セキュリティ・ロールを選択して、「選択済」リストに移動します。

セキュリティ・ロールを使用すると、ポートレットに階層レベルのアクセスを設定できます。たとえば、「表示」ユーザーはポートレットを表示できますが編集はできません。「カスタマイズ」ユーザーは、ポートレットをカスタマイズできます。「管理」ユーザーは、ポートレット関連の使用可能なすべての機能を実行できます。

「使用可能」リストには、ポートレットを作成するアプリケーションに定義されたセキュリティ・ロールが表示されます。セキュリティ・ロールを「選択済」リストに移動することで、アプリケーションのポートレット・デプロイメント・ファイル(portlet.xml)にセキュリティ・ロールの参照を作成します。この参照は、アプリケーションのWebデプロイメント・ファイル(web.xml)のセキュリティ・ロールを参照します。

アプリケーションの新しいセキュリティ・ロールは、web.xmlを編集することで作成できます。詳細は、JDeveloperのオンライン・ヘルプを参照してください。

25. 「Next」をクリックします。

26. 「キャッシュ・オプション」ページで、「キャッシュ・ポートレット」を選択して、ポータルの有効期限ベースのキャッシュを有効にします。
有効期限ベースのキャッシュの詳細は、「ポートレット・パフォーマンス」および「JSR 286ポートレットでの有効期限ベースのキャッシュの実装」を参照してください。

このオプションを選択すると、ポートレットのキャッシングをポートレット・コンテナで管理することを示されます。ポートレット自体で、指定のレスポンスのコンテンツをキャッシュすることもできます。このページで指定する設定は、レスポンスに対するキャッシュ条件がポートレットで指定されていない場合にのみ適用されます。

このポートレットにデフォルト・キャッシュが必要ない場合は、「デフォルトでキャッシュしない」を選択します。この場合、ウィザードではキャッシュ有効期限が0秒に設定されます。前述したとおり、このキャッシュ設定が有効となるのは、レスポンスに対するキャッシュ条件がポートレットで指定されていない場合のみです。

ここでキャッシュしない設定を選択していても、ポートレットのデフォルト・キャッシュは後から実装できます。デフォルト・キャッシュを実装する場合は、このウィザードで生成したportlet.xmlファイルで、キャッシュ有効期限の値を0より大きい数値に変更します。

検証ベースのキャッシュを実装する方法の詳細は、「JSR 286ポートレットでの検証ベースのキャッシュの実装」を参照してください。

27. ポートレットをキャッシュすることにした場合、「デフォルト失効条件」セクションで、次のオプションを選択します。

- キャッシュ・コンテンツ有効期限(秒): キャッシュされたポートレット・コンテンツを、一定の時間が経つと期限切れになるようにする場合。対応するフィールドに、制限時間を指定します。

- 「キャッシュ・コンテンツ無期限」: キャッシュされたポートレット・コンテンツに有効期限を設定しません。ポートレットのコンテンツが静的であまり変化しない場合は、このオプションを選択します。

28. 「Next」をクリックします。

29. 「初期化パラメータ」ページでは、ポートレットの初期化パラメータを追加できます。
WARファイルの内容を決定するアプリケーション開発者は、アプリケーションの各種コンポーネント(サーブレットやポートレットなど)のすべての動作を構成するためのJNDI変数のかわりに、互換性のある方法で初期化パラメータを使用できます。初期化パラメータは、portlet.xmlファイルに追加されます。

たとえば、ポートレットに対してなんらかのデバッグ・モードをオンにしたり、環境に応じて異なるメニュー・オプションを表示することが必要になる場合があります。

a. 「新規」をクリックして、新しい初期化パラメータをポートレットに追加します。

b. 新しく追加された行で、各フィールドをダブルクリックして、そのパラメータの「名前」、デフォルトの「値」、および「説明」を指定します。

c. ここに示した手順を繰り返して、さらに初期化パラメータを追加します。

d. 完了したら、「終了」をクリックしてポートレットを作成します。

JSR 286 Javaポートレットの作成ウィザードを使用すると、ポートレットのデフォルトの実装がJDeveloperで生成されます。具体的には、次のファイルが作成されます。

- Javaクラス:

- portletName.javaは、ポートレット・コンテナから呼び出されます。このクラスには、ポートレット標準に必要なすべてのメソッドが含まれています。

- portletNameBundle.javaには、ポートレットのすべての翻訳文字列が含まれています。

- portletNameBacking.javaには、ポートレット・モードを実装するJSFページのJSFバッキングBeanが含まれています。このクラスは、ポートレット・モードをADF-Facelets JSPページとして実装した場合に作成されます。

- portlet.xmlは、アプリケーション用のポートレット・デプロイメント・ディスクリプタ・ファイルです。

- web.xml: アプリケーションのWebデプロイメント・ディスクリプタ・ファイルです。

- ポートレットに選択した各ポートレット・モード用のファイル:

- ポートレット・モードに「JSPの生成」を選択した場合は、そのモードに応じたJSPページ(たとえば、view.jsp.)が作成されます。

- 「ADF-Faces JSPXの生成」を選択した場合は、そのモードに応じたJSF (.jspx)ページ(view.jspxなど)が作成されます。このページには、Facesコンポーネントを追加できます。

- 「パスへのマップ」を選択した場合は、追加のファイルは作成されません。ポートレット・モードに応じたコードは、既存のリソース内にあります。ポートレットのJavaクラスにコードが追加され、指定したターゲットにリクエストがルーティングされるようになります。

- 「カスタム・コード」選択した場合は、追加のファイルは作成されません。ただし、ポートレット・モードに応じたコードは、ポートレットのJavaクラス内にあります。

- faces-config.xmlは、カスタム・バリデータやマネージドBeanといったアプリケーションのリソースを登録したり、アプリケーションのページ・フローを示す構成ファイルです。このファイルは、ポートレット・モードをADF-Facelets JSFページとして実装した場合に作成されます。

ファイルはすべて、図13-3に示すようにアプリケーション・ナビゲータで確認できます。

図13-3 JSR 286 Javaポートレット用に生成されたファイル

13.3 JSR 286 Javaポートレットの開発

JSR 286 Javaポートレットの作成ウィザードを使用してポートレットの初期実装を作成したときには、その次の段階でポートレット・コンテンツと動作を制御するコードを作成します。JSR 286ポートレットはJava標準に準拠しているため、このポートレットの拡張に関する十分な情報が、サード・パーティの書籍やWebページなどの各種情報源から入手できます。

http://jcp.org/en/jsr/detail?id=286

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

- ポートレット・デプロイメント・ディスクリプタ・ファイルの例

- ポートレット・デプロイメント・ディスクリプタ・ファイルの編集方法

- JSR 286ポートレットのポートレット・モード

- JSR 286ポートレットへのカスタム・ポートレット・モードの追加方法

- JSR 286ポートレットでのユーザー情報へのアクセス方法

- JSR 286ポートレット用のランタイム環境のカスタマイズ方法

- JSR 286ポートレットでのパブリック・レンダラ・パラメータの使用方法

- JSR 286ポートレットでのポートレット・イベントの使用方法

- JSR 286ポートレットへのポートレット・プリファレンスの追加方法

- JSR 286ポートレットでのポートレット・フィルタの使用方法

- 異なるページ間でのポートレット間通信の実装方法

- キャッシュを使用してJSR 286ポートレットのパフォーマンスを向上させる方法

- リソース・プロキシに対して書き換えられたURLの実装方法

- ステートレス・リソース・プロキシの実装方法

- JSR 286ポートレット用の永続ストアの管理方法

13.3.1 ポートレット・デプロイメント・ディスクリプタ・ファイルの例

次に、ポートレット・デプロイメント・ディスクリプタ・ファイルの例を示します。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<portlet-app version="2.0"
xsi:schemaLocation="http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd
http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd"
xmlns="http://java.sun.com/xml/ns/portlet/portlet-app_2_0.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<portlet id="1328624289503">
<portlet-name>myPortlet</portlet-name>
<display-name xml:lang="en-US">Portlet1</display-name>
<display-name xml:lang="en">English Display Name</display-name>
<portlet-class>portlet.Portlet1</portlet-class>
<expiration-cache>300</expiration-cache>
<supports>
<mime-type>text/html</mime-type>
<portlet-mode>edit</portlet-mode>
</supports>
<supported-locale>en-US</supported-locale>
<resource-bundle>portlet.resource.Portlet1Bundle</resource-bundle>
<portlet-info>
<title>This Is My Portlet</title>
<short-title>My Portlet</short-title>
<keywords/>
</portlet-info>
<portlet-preferences>
<preference>
<name>portletTitle</name>
</preference>
</portlet-preferences>
</portlet>
<custom-portlet-mode>
<portlet-mode>about</portlet-mode>
</custom-portlet-mode>
<custom-portlet-mode>
<portlet-mode>config</portlet-mode>
</custom-portlet-mode>
<custom-portlet-mode>
<portlet-mode>edit_defaults</portlet-mode>
</custom-portlet-mode>
<custom-portlet-mode>
<portlet-mode>preview</portlet-mode>
</custom-portlet-mode>
<custom-portlet-mode>
<portlet-mode>print</portlet-mode>
</custom-portlet-mode>
</portlet-app>

13.3.2 ポートレット・デプロイメント・ディスクリプタ・ファイルの編集方法

アプリケーション用のポートレット・デプロイメント・ディスクリプタ・ファイルportlet.xmlでは、アプリケーション内でのポートレット・リソースを指定します。ウィザードを使用してJSR 286ポートレットの作成を完了したら、portlet.xmlファイルを編集することでポートレット・リソースを編集します。

JDeveloperでportlet.xmlファイルを開くと、ソース・コードを編集したり、「ソース」ビューでこのファイルを手動で変更しなくても、概要エディタを使用してポートレット・リソースを編集できます。

ポートレット・デプロイメント・ディスクリプタ・ファイルを編集するには:

1. アプリケーション・ナビゲータで、ポートレット・プロデューサ・アプリケーションを開きます。

2. ポートレット・プロジェクト(「ポートレット」など)を開きます。

3. 「Webコンテンツ」ノード、「WEB-INF」ノードの順に開きます。

4. portlet.xmlを右クリックして、「開く」を選択します。

5. 「設計」タブをクリックして、portlet.xmlの概要エディタを開きます。

ヒント:

ソース・コードを直接編集する場合は、「ソース」タブをクリックします。

6. portlet.xmlの概要エディタには、次のタブがあります。

- アプリケーション - ポートレット・プロデューサ・アプリケーションの一般情報を指定する場合に使用します。これらのプロパティは、このアプリケーション内のすべてのポートレットに適用されます。

- ポートレット - このアプリケーション内の個別のポートレットに情報を指定する場合に使用します。たとえば、ポートレットごとにサポートされる、ポートレット・イベントとパブリック・レンダラ・パラメータを指定できます。

- イベント - このアプリケーション内のすべてのポートレットで使用するポートレット・イベントの作成と管理に使用します。詳細は、「JSR 286ポートレットでのポートレット・イベントの使用方法」を参照してください。

- パラメータ - このアプリケーション内のすべてのポートレットで使用するパブリック・レンダラ・パラメータの作成と管理に使用します。詳細は、「JSR 286ポートレットでのパブリック・レンダラ・パラメータの使用方法」を参照してください。

- フィルタ - このアプリケーション内のポートレットにフィルタ情報を指定する場合に使用します。詳細は、「JSR 286ポートレットでのポートレット・フィルタの使用方法」を参照してください。

- フィルタ・マッピング - 個別のポートレットにポートレット・フィルタを割り当てる場合に使用します。詳細は、「JSR 286ポートレットでのポートレット・フィルタの使用方法」を参照してください。

13.3.3 JSR 286ポートレットのポートレット・モード

JSR 286でサポートされている標準モードは、次のとおりです。

- 表示

- 編集

- ヘルプ

WebCenter Portalは、JSR 286ポートレットで次の追加カスタム・モードをサポートしています。

- 情報

- 構成

- デフォルト編集

- プレビュー

- 印刷

13.3.4 JSR 286ポートレットへのカスタム・ポートレット・モードの追加方法

JSR 286 Javaポートレットの作成ウィザードでポートレット・モードを追加するには、「コンテンツ・タイプとポートレット・モード」ページのリストにポートレット・モードを追加します。ウィザードの使用方法の詳細は、「JSR 286 Javaポートレットの作成」を参照してください。このウィザードを使用すると、JSR 286でサポートされている標準モードと、WebCenter Portalでサポートされている拡張モードを実装できます。

ポートレットの初期作成後に、独自のカスタム・ポートレット・モードを定義することもできます。

ポートレット・モードの基本的な実装方法は、すべてのモードに共通しています。

カスタム・ポートレット・モードを追加するには:

1. portlet.xmlファイルの概要エディタを開きます。

詳細は、「ポートレット・デプロイメント・ディスクリプタ・ファイルの編集方法」を参照してください。

2. 「アプリケーション」タブをクリックします(必要な場合)。

3. 「カスタム・モード」セクションを開きます(必要な場合)。

このセクションには、アプリケーション内のポートレットに使用できるすべてのカスタム・モードが一覧表示されます。WebCenter Portalの拡張ポートレット・モードも含まれています。

4. 「カスタム・モードの追加」アイコンをクリックして、ポートレット・モードの新しい行を作成します。

5. 「ポートレット・モード」フィールドに、ポートレット・モードの名前を入力します。

名前はアプリケーション内で一意である必要があります。

6. 「説明」フィールドに、このモードの用途を示す簡単な説明を入力します。

7. このポートレットを利用するアプリケーションでポートレット・モードを認識する必要がない場合は、「ポータル管理」チェック・ボックスを選択解除します。つまり、このモードがポートレットで内部的に使用される場合には、このチェック・ボックスを選択解除します。

8. portlet.xmlファイルを保存します。

9. カスタム・ポートレット・モードをアプリケーションに追加した後で、そのモードのコードをポートレット実装ファイルで作成する必要があります。

13.3.5 JSR 286ポートレットでのユーザー情報へのアクセス方法

ポートレット・プロデューサ・アプリケーションにユーザー属性を作成することで、一般的なユーザー情報(user.login.idやuser.name.familyなど)にアクセスできるようになります。これらのユーザー属性は、実行時に、現在のユーザーの実際の属性にマップされます。ポートレットでは、この情報を使用して、現在のユーザーについての情報を取得します。

ユーザー情報にアクセスするには:

1. portlet.xmlファイルの概要エディタを開きます。

詳細は、「ポートレット・デプロイメント・ディスクリプタ・ファイルの編集方法」を参照してください。

2. 「アプリケーション」タブをクリックします(必要な場合)。

3. 「ユーザー属性」セクションを開きます(必要な場合)。

4. 「ユーザー属性の追加」アイコンをクリックして、属性の新しい行を作成します。

5. 「名前」フィールドに、ユーザー属性の名前を入力します(例: user.login.id)。

属性名のリストは、Javaポートレット仕様の付録「User Information Attribute Names」を参照してください。

ヒント:

WebCenter Portalでサポートされているユーザー情報属性のリストは、『Oracle Platform Security Servicesによるアプリケーションの保護』のユーザー属性をLDAPディレクトリにマップする方法に関する項を参照してください。

6. 「説明」フィールドに、ユーザー属性の説明を入力します。

7. portlet.xmlファイルを保存します。

定義したユーザー属性は、実行時に、ポートレット・コンテナで適切な値にマップされます。たとえば、現在のユーザーがJohn Doeだとすると、user.name.familyユーザー属性にDoeがマップされます。ポートレットでは、ユーザー属性を格納するMapオブジェクトを、PortletRequestインタフェースから取得します。

13.3.6 JSR 286ポートレット用のランタイム環境のカスタマイズ方法

ポートレットの実行時には、ポートレット・コンテナがランタイム環境を提供します。さらに、ポートレット・プロデューサ・アプリケーションとポートレットとの間のインタフェースも提供します。

コンテナ・ランタイム・オプションを使用すると、ポートレット・コンテナの動作をカスタマイズできます。このオプションで、ランタイム環境をカスタマイズします。

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

- サポートされるコンテナ・ランタイム・オプション

- アプリケーション内のすべてのポートレットに対するコンテナ・ランタイム・オプションの設定

- 個々のポートレットに対するコンテナ・ランタイム・オプションの設定

13.3.6.1 サポートされるコンテナ・ランタイム・オプション

表13-1に、WebCenter Portalポートレット・コンテナでサポートされるコンテナ・ランタイム・オプションを示します。

JSR 286のコンテナ・ランタイム・オプションの詳細は、次の場所にあるJSR 286の仕様を参照してください。

http://jcp.org/en/jsr/detail?id=286

表13-1 サポートされるコンテナ・ランタイム・オプション

コンテナ・ランタイム・オプション

サポート元

JSR 286標準

javax.portlet.actionScopedRequestAttributes

アプリケーション

ポートレット

はい

javax.portlet.escapeXml

アプリケーション

ポートレット

はい

java.portlet.renderHeaders

サポート対象外

はい

javax.portlet.servletDefaultSessionScope

アプリケーション

ポートレット

はい

com.oracle.portlet.allowEventPayloadsWithoutJAXBBinding

アプリケーション

いいえ

com.oracle.portlet.allowWsrpExport

アプリケーション

いいえ

com.oracle.portlet.compatibilityMode

アプリケーション

ポートレット

いいえ

com.oracle.portlet.defaultProxiedResourceRequiresWsrpRewrite

アプリケーション

ポートレット

いいえ

com.oracle.portlet.defaultServedResourceRequiresWsrpRewrite

アプリケーション

ポートレット

いいえ

com.oracle.portlet.disallowResourceServing

アプリケーション

ポートレット

いいえ

com.oracle.portlet.escapeXmlEncodeUrls

アプリケーション

ポートレット

いいえ

com.oracle.portlet.eventPayloadsXmlType

アプリケーション

いいえ

com.oracle.portlet.excludedActionScopeRequestAttributes

アプリケーション

ポートレット

いいえ

com.oracle.portlet.externalScopeRequestAttributes

アプリケーション

ポートレット

いいえ

com.oracle.portlet.importCssToIFrame

アプリケーション

ポートレット

いいえ

com.oracle.portlet.minimumWsrpVersion

アプリケーション

ポートレット

いいえ

com.oracle.portlet.offerPortletOverWsrp

アプリケーション

ポートレット

いいえ

com.oracle.portlet.portalInfoProvider

アプリケーション

ポートレット

いいえ

com.oracle.portlet.redirectAfterAction

アプリケーション

ポートレット

いいえ

com.oracle.portlet.renderHeaders

アプリケーション

ポートレット

いいえ

com.oracle.portlet.requireIFrame

アプリケーション

ポートレット

いいえ

com.oracle.portlet.streamingOptimized

アプリケーション

ポートレット

いいえ

com.oracle.portlet.suppressWsrpOptimisticRender

アプリケーション

ポートレット

いいえ

com.oracle.portlet.trapWsrpRenderExceptions

アプリケーション

ポートレット

いいえ

com.oracle.portlet.trimEncodeUrls

アプリケーション

ポートレット

いいえ

com.oracle.portlet.useWsrpUserContextForUserAuthentication

アプリケーション

いいえ

com.oracle.portlet.wsrpHeaderMode

アプリケーション

ポートレット

いいえ

com.oracle.portlet.wsrpLegacyPortletHandle

ポートレット

いいえ

com.oracle.portlet.wsrpPortletHandle

ポートレット

いいえ

oracle.portlet.bridge.adf.raiseUndeclaredContextualEvents

ポートレット

いいえ

13.3.6.1.1 javax.portlet.actionScopedRequestAttributes

アクション・スコープ指定型リクエスト属性を保存して、新しいアクションが発生するまで、その属性を使用できるようにするかどうかを指定します。

WebCenter Portal固有のexcludedActionScopeRequestAttributesコンテナ・ランタイム・オプションを使用すると、スコープで保存するリクエスト属性を制限できます。

有効な値は、次のとおりです。

- true - リクエスト属性をprocessActionから、その次のprocessActionまで保存します。numberOfCachedScopesの2番目の値と、ポートレット・コンテナによりキャッシュされるスコープの数を示す3番目の値を指定できます。

- false - リクエスト属性を保存しません。

13.3.6.1.2 javax.portlet.escapeXml

JSR 286タグ・ライブラリのタグactionUrl、renderUrl、およびresourceUrlから返されたURLをXMLエンコードするかどうかを指定します。

このオプションは、encodeXml属性を使用することで、タグごとにオーバーライドできます。

有効な値は、次のとおりです。

- true - (デフォルト) actionUrlタグ、renderUrlタグ、およびresourceUrlタグで返されたURLがXMLエンコードされます(パラメータの区切りには、アンパサンドのエンティティが使用されます)。

- false - actionUrlタグ、renderUrlタグ、およびresourceUrlタグから返されたURLは、XMLエンコードされません(また、アンパサンド文字は、そのまま使用されます)。

注意:

このオプションは、PortletURL.toString()またはResourceURL.toString()の戻り値には一切影響しません。どちらの場合も、JSR 286では、出力にアンパサンド文字のみを使用します。生成するURLがタグ・ライブラリを使用しないときに、アンパサンド・エンティティを使用する場合や、使用するXMLエンコーディングを指定する場合は、BaseURL.write()メソッドを参照してください。

13.3.6.1.3 javax.portlet.servletDefaultSessionScope

Javaポートレットに含まれている、またはJavaポートレットから転送されるサーブレットまたはJSPに提供するセッション・オブジェクトのスコープを指定します。

有効な値は、次のとおりです。

- APPLICATION_SCOPE - (デフォルト)ポートレット・セッションをアプリケーション・スコープにマップします。

- PORTLET_SCOPE - ポートレット・セッションをポートレット・スコープにマップします。

13.3.6.1.4 com.oracle.portlet.allowEventPayloadsWithoutJAXBBinding

portlet.xmlで宣言されたイベント・ペイロードのタイプと、JSR 286ポートレットから送信されるイベント・ペイロードが、JSR 286の仕様(これらのタイプには、有効なJAXBバインディングが必要という要件)をバイパスできるようにします。

有効な値は、次のとおりです。

- true - 有効なJAXBバインディングがないイベント・ペイロードが許可されます。

- false - 有効なJAXBバインディングがないイベント・ペイロードは許可されず、JSR 286仕様に従います。

13.3.6.1.5 com.oracle.portlet.allowWsrpExport

Webアプリケーションに対してWSRPのexport-portlets操作をサポートするべきかどうかを指定します。

このオプションは主に後方互換性のために使用されます。export-portlets操作はwsrp-producer-config.xml設定を使用して制御することをお薦めします。

有効な値は、次のとおりです。

- true - (デフォルト)ポートレットのエクスポートが許可されます。

- false - ポートレットのエクスポートは許可されません。これにより、WEB-INF/wsrp-producer-config.xmlの設定がオーバーライドされます。

13.3.6.1.6 com.oracle.portlet.compatibilityMode

owc168に設定すると、WebCenter PortalのJSR 286コンテナをJSR 168互換モードで呼び出します。

さらに、disallowResourceServingランタイム・オプションが、自動的にtrueに設定されます(別の値が指定されていない場合)。

13.3.6.1.7 com.oracle.portlet.defaultProxiedResourceRequiresWsrpRewrite

ポートレットが提供しないリソースのURLエンコードするときに使用する、デフォルトのWSRP requiresRewriteフラグを指定します。PortletResponse.encodeURL()メソッドの呼出し時にoracle.portlet.server.resourceRequiresRewritingリクエスト属性でオーバーライドしないかぎり、この設定はPortletResponse.encodeURL()メソッドで戻されたすべてのURLに使用されます。

有効な値は、次のとおりです。

- true - (デフォルト) requiresRewriteフラグにtrueが設定されます。これは、コンシューマがリソースを書き換える必要があることを示します。

- false - requiresRewriteフラグがfalseに設定されます。これは、コンシューマがリソースを必ずしも書き換える必要がないことを示します。

13.3.6.1.8 com.oracle.portlet.defaultServedResourceRequiresWsrpRewrite

ポートレットが提供するリソースのリソースURLを生成するときに使用する、デフォルトのWSRP requiresRewriteフラグを指定します。

この設定はポートレットで作成されたすべてのリソースURLに使用されます。ただし、リソースURLのメソッドwrite()またはtoString()の呼出し時にresourceRequiresRewritingリクエスト属性の有無でオーバーライドされます。この設定は、提供されたリソースのレスポンスにWSRP requiresRewritingフラグを指定するためにも使用されます。ただし、ポートレットのserveResource()メソッドの復帰時にresourceRequiresRewritingリクエスト属性の有無でオーバーライドされることがあります。

有効な値は、次のとおりです。

- true - requiresRewrite URLフラグおよびrequiresRewritingレスポンス・フラグがtrueに設定されます。これは、コンシューマがリソースを書き換える必要があることを示します。

- false - requiresRewrite URLフラグおよびrequiresRewritingレスポンス・フラグがfalseに設定されます。これは、コンシューマがリソースを必ずしも書き込む必要がないことを示します。ただし、コンシューマがURLを書き換える可能性はあります。

これを指定していない場合、requiresRewrite URLフラグに値が指定されなくなり、serveResource操作のrequiresRewritingレスポンス・フラグはレスポンスのMIMEタイプに基づいて設定されます。

13.3.6.1.9 com.oracle.portlet.disallowResourceServing

ポートレットによるリソースの提供を許可するかどうかを指定します。これは、JSR 168ポートレットを286コンテナで実行する場合に役立ちます。javax.portlet.GenericPortletを拡張しているJSR 168ポートレットは、自動的にJSR 286の機能を継承するため、リソースIDに関連する名前の付いたWebアプリケーション内のファイルにリソース・リクエストを自動的に転送します。このことが、潜在的なセキュリティ問題になります。同様のセキュリティ上の理由から、リソースを提供しないJSR 286ポートレットは、リソースの提供を禁止することで最も安全になります。

有効な値は、次のとおりです。

- true - ポートレットにリソースの提供を許可しません。

- false - ポートレットにリソースの提供を許可します。

13.3.6.1.10 com.oracle.portlet.escapeXmlEncodeUrls

JSR 286コンテナのPortletResponse.encodeURL()メソッドで生成されるURLを、XMLエンコードするかどうかを指定します。

有効な値は、次のとおりです。

- true - PortletResponse.encodeURL()メソッドで生成されるURLは、XMLエンコードされます。

- false - (デフォルト) PortletResponse.encodeURL()メソッドで生成されるURLは、XMLエンコードされません。

13.3.6.1.11 com.oracle.portlet.eventPayloadsXmlType

イベントがWSRPを通じて送信されたされたときに、JAXBバインディング可能なJavaオブジェクトのイベント・ペイロードに対して、オプションのXMLスキーマ・タイプを指定します。これは、複数値のランタイム・オプションです。各値は、Javaクラス名とQNameのペアで構成し、コロン(:)で区切ります。QNameには、QNameの標準Java文字列表現({namespace}localpart)を使用する必要があります。指定した各値に対して、XMLスキーマ・タイプとしてQNameが使用され、オブジェクトがXMLにマーシャリングされた後で、指定したJavaオブジェクト・タイプのWSRPイベント・ペイロードに注釈を付けます。これは、複数のプロデューサにあるポートレット間で通信するイベントを使用するときに役立ちます。

13.3.6.1.12 com.oracle.portlet.excludedActionScopeRequestAttributes

これは、各値が正規表現の複数値プロパティです。com.oracle.portlet.externalScopeRequestAttributesコンテナ・ランタイム・オプションに定義された正規表現と一致する値を含むリクエスト・パラメータに加えて、正規表現と一致するリクエスト属性は、javax.portlet.actionScopedRequestAttributesコンテナ・ランタイム・オプションが使用されている場合、アクション・スコープ指定リクエスト属性としては保存されません。

13.3.6.1.13 com.oracle.portlet.externalScopeRequestAttributes

これは、各値が正規表現の複数値プロパティです。正規表現のいずれかと一致するリクエスト属性は、ポートレット・スコープの外側にあるとみなされ、その基になるポータル・リクエストで共有されます。

javax.portlet.actionScopedRequestAttributesオプションを使用すると、externalScopeRequestAttributesで宣言された正規表現と一致するリクエスト属性は、アクション・スコープのリクエスト属性に保存されなくなります。

13.3.6.1.14 com.oracle.portlet.importCssToIFrame

ポータル・コンシューマに対して、IFRAMEポートレットにCSSファイルをインポートする必要があるかどうかを指定します。

有効な値は、次のとおりです。

- false: (デフォルト)何も実行されません。

- true: コンシューマからのCSSファイルがIFRAMEポートレットに適用されます。

13.3.6.1.15 com.oracle.portlet.minimumWsrpVersion

ポートレットの動作に必要なWSRPの最小バージョンを指定します。指定した値よりも小さいWSRPバージョンが使用されている場合、WSRP GetServiceDescription、GetPortletDescription、GetMarkupなどのWSRPレスポンスにポートレットが含まれなくなります。

有効な値は、次のとおりです。

- 1

- 2

13.3.6.1.16 com.oracle.portlet.offerPortletOverWsrp

WSRPプロデューサのサービスの説明にポートレットを提示するかどうかを指定します。

JSR 168/286ポートレットを参照する.portletファイルのofferRemote設定は、このコンテナ・ランタイム・オプションをオーバライドします。

有効な値は、次のとおりです。

- true - (デフォルト)ポートレットは、WSRPプロデューサのサービスの説明に提示されます。

- false - ポートレットは、サービスの説明に含まれません。

すべての指定を省略すると、WEB-INF/producer-config.xmlで指定されたデフォルト値が使用されます。

13.3.6.1.17 com.oracle.portlet.portalInfoProvider

com.bea.portlet.container.IPortalInfoインタフェースのオプション実装のクラス名を指定します。この実装では、JSR 286コンテナのrequest.getPortalContext().getPortalInfo()から返される値を定義します。デフォルトの実装は、プロデューサ/ローカル・サーバーの名前とバージョンを返しますが、カスタムの実装はWSRPシナリオでコンシューマ・サーバー情報とプロデューサ・サーバー情報の両方を渡すことがあります

13.3.6.1.18 com.oracle.portlet.redirectAfterAction

JSR 286コンテナは、processActionが実行された後で(また、イベントが処理された後で)、ブラウザにポータルのレンダラURLへのリダイレクトを送信して、結果のページをリロードしても別のprocessActionにならないようにします。

有効な値は、次のとおりです。

- true - ポートレット・アクションの終了ごとに、リダイレクトが発行されます。

- false - ポートレット・アクションの後に、リダイレクトが自動的には発行されません。

13.3.6.1.19 com.oracle.portlet.requireIFrame

IFRAME内でポートレットをレンダリングする必要があるかどうかを指定します。

有効な値は、次のとおりです。

- true - ポートレットをIFRAME内でレンダリングします。

- false - ポートレットをIFRAME内でレンダリングすることを強制しません。

13.3.6.1.20 com.oracle.portlet.streamingOptimized

ポートレットがストリーミング・モードでの実行に最適化されていることを示します。これにより、パフォーマンスが向上することがあります。

有効な値は、次のとおりです。

- true - ストリーミング・モードでの実行に向けてポートレットが最適化されています。

- false - ストリーミング・モードでの実行に向けてポートレットは最適化されていません。

13.3.6.1.21 com.oracle.portlet.suppressWsrpOptimisticRender

ポートレットがWSRPで実行されている場合、アクションとイベント(または、そのどちらか)のライフサイクル終了後に、ポートレットのオプティミスティック・レンダリングを抑制します。

有効な値は、次のとおりです。

- true - オプティミスティック・レンダリングが常に抑制されます。

- false - オプティミスティック・レンダリングが実行される場合があります。

13.3.6.1.22 com.oracle.portlet.trapWsrpRenderExceptions

レンダリング時にJSR 286コンテナがWSRP SOAP障害として例外を送信する必要があるのか、そのかわりにポートレット・マークアップの例外メッセージをレンダリングする必要があるのかを指定します。

有効な値は、次のとおりです。

- true - 例外はSOAPフォルトとして送信されず、かわりにレンダリングされた例外スタック・トレースとして送信されます。

- false - (デフォルト)レンダリング中にポートレットによって生成された例外はSOAPフォルトとして処理されます。

13.3.6.1.23 com.oracle.portlet.trimEncodeUrls

JSR 286コンテナでPortletResponse.encodeURL()メソッドに渡すURLから空白をトリミングする必要があるかどうかを指定します。

有効な値は、次のとおりです。

- true - (デフォルト) PortletResponse.encodeURL()に渡されるURLから先頭と末尾の空白がトリミングされます。

- false - PortletResponse.encodeURL()に渡されるURLから空白はトリミングされません。

13.3.6.1.24 com.oracle.portlet.useWsrpUserContextForUserAuthentication

PortletRequestのメソッドgetRemoteUser()、getUserPrincipal()およびisUserInRole()がWSRPユーザー・コンテキスト情報と標準J2EEセキュリティのどちらに基づくかを指定します。

有効な値は、次のとおりです。

- true - ポートレットがWSRPで実行される場合、ユーザー情報はWSRPユーザー・コンテキストに基づきます。これはセキュリティ上の問題になることがあるため、このオプションの使用には十分な注意が必要です。

- false - (または、ポートレットがWSRPで実行されていない場合)ユーザー情報は、J2EE認証済ユーザーに基づきます。

13.3.6.1.25 com.oracle.portlet.wsrpHeaderMode

ポートレットがWSRPリモート・ポートレットとしてレンダリングされている場合にのみ使用します。ヘッダーまたはCookieの目的の最終宛先についてのWSRPコンシューマへのヒントとして、CookieとヘッダーがWSRP SOAPレスポンスのどこに含まれているかを示します。

ポートレットがローカルに(WSRPを経由しないで)実行されている場合、ポートレットで設定するヘッダーとCookieは、常にクライアントに向けられていると仮定されます。このコンテナ・ランタイム・オプションを設定することで、PortletRequest属性のcom.oracle.portlet.wsrpHeaderModeにデフォルト値を設定することになります。この値は、実行時にヘッダーごとにポートレットによりオーバーライドされる可能性があります。

有効な値は、次のとおりです。

- client - ポートレットで設定されたヘッダーとCookieは、クライアント(たとえば、ブラウザ)に向けてリダイレクトされます。

- consumer - ポートレットで設定されるヘッダーとCookieは、コンシューマに向けてリダイレクトされ、クライアントには渡されません。

- both - ポートレットで設定されるヘッダーとCookieは、クライアントとコンシューマに向けてリダイレクトされます。

設定されていない場合、ポートレット・コンテナは、WEB-INF/wsrp-producer-config.xmlファイルで指定されている、プロデューサのデフォルト値を仮定します。

13.3.6.1.26 com.oracle.portlet.wsrpLegacyPortletHandle

レガシーWSRPポートレット・ハンドルの仕様をポートレットで使用できるようにします。このハンドルは、Webアプリケーション内で一意にする必要があります。これは、従来のポートレットの位置ベースのWSRPポートレット・ハンドルを使用するWebCenter Portalコンシューマとの後方互換性を維持するために役立ちます。

指定されていると、レガシー・ポートレット・ハンドルがポートレットのレガシー・ハンドル拡張としてWSRP serviceDescriptionで公開され、コンシューマはレガシー・ポートレット・ハンドルを使用してポートレットにアクセスできるようになります。ただし、そのポートレットが、レガシー・ポートレット・ハンドルでWSRP serviceDescriptionに公開されることはありません。

13.3.6.1.27 com.oracle.portlet.wsrpPortletHandle

WSRPポートレット・ハンドルの仕様をポートレットで使用できるようにします。このハンドルは、Webアプリケーション内で一意にする必要があります。

13.3.6.1.28 oracle.portlet.bridge.adf.raiseUndeclaredContextualEvents

Oracle JSF Portlet Bridgeで、portlet.xmlファイル内で対応するポートレット・イベントが宣言されていないADFmイベントを発生できるようにします。

有効な値は、次のとおりです。

- true - 発生したADFmイベントは、ポートレット・イベントとして転送されます。

- false - ポートレット・イベントの宣言に対応するイベントのみが転送されます。

13.3.6.2 アプリケーション内のすべてのポートレットに対するコンテナ・ランタイム・オプションの設定

コンテナ・ランタイム・オプションをアプリケーション・レベルで設定すると、その設定はアプリケーション内のすべてのポートレットに作用します。

アプリケーションレベルのコンテナ・ランタイム・オプションを設定するには:

1. portlet.xmlファイルの概要エディタを開きます。

詳細は、「ポートレット・デプロイメント・ディスクリプタ・ファイルの編集方法」を参照してください。

2. 「アプリケーション」タブをクリックします(必要な場合)。

3. 「コンテナ・ランタイム・オプション」セクションを開きます(必要な場合)。

4. 「コンテナ・ランタイム・オプションの追加」アイコンをクリックして、選択可能なオプションのリストを表示します。

このリストには、WebCenter Portalのポートレット・コンテナでサポートされているコンテナ・ランタイム・オプション(表13-1を参照)がすべて含まれています。

リストにないその他のコンテナ・ランタイム・オプションをサポートする別のポートレット・コンテナを使用する場合は、「カスタマイズ」を選択して、「名前」フィールドにオプションの名前を入力します。

ポートレット・コンテナでサポートされていないコンテナ・ランタイム・オプションを指定すると、そのオプションは無視されます。

5. 「値」フィールドに、コンテナ・ランタイム・オプションの値を入力します。

コンテナ・ランタイム・オプションが、次に示すようにportlet.xmlコードに追加されます。

<container-runtime-option>
<name>com.oracle.portlet.requireIFrame</name>
<value>true</value>
</containter-runtime-option>

6. portlet.xmlファイルを保存します。

13.3.6.3 個々のポートレットに対するコンテナ・ランタイム・オプションの設定

個別のポートレット・レベルでコンテナ・ランタイム・オプションを設定すると、アプリケーション全体の設定をオーバーライドできます。

ポートレットレベルのコンテナ・ランタイム・オプションを設定するには:

1. portlet.xmlファイルの概要エディタを開きます。

詳細は、「ポートレット・デプロイメント・ディスクリプタ・ファイルの編集方法」を参照してください。

2. 「ポートレット」タブをクリックします(必要な場合)。

3. 「詳細」タブをクリックします。

4. 「コンテナ・ランタイム・オプションの追加」アイコンをクリックして、選択可能なオプションのリストを表示します。

このリストには、WebCenter Portalのポートレット・コンテナでサポートされているコンテナ・ランタイム・オプション(表13-1を参照)がすべて含まれています。

リストにないその他のコンテナ・ランタイム・オプションをサポートする別のポートレット・コンテナを使用する場合は、「カスタマイズ」を選択して、「名前」フィールドにオプションの名前を入力します。

ポートレット・コンテナでサポートされていないコンテナ・ランタイム・オプションを指定すると、そのオプションは無視されます。

5. 「値」フィールドに、コンテナ・ランタイム・オプションの値を入力します。

コンテナ・ランタイム・オプションが、次に示すようにportlet.xmlコードに追加されます。

<container-runtime-option>
<name>com.oracle.portlet.requireIFrame</name>
<value>false</value>
</containter-runtime-option>

6. portlet.xmlファイルを保存します。

13.3.7 JSR 286ポートレットでのパブリック・レンダラ・パラメータの使用方法

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

- パブリック・レンダラ・パラメータについて

- アプリケーション・レベルでのパブリック・レンダラ・パラメータの宣言

- ポートレットごとのパブリック・レンダラ・パラメータの定義

- パブリック・レンダラ・パラメータの使用: 例

13.3.7.1 パブリック・レンダラ・パラメータについて

パブリック・レンダラ・パラメータを使用すると、複数のポートレットでパラメータ値を共有できるようになり、ポートレット間通信が可能になります。

たとえば、地図ポートレットと天気概況ポートレットが、どちらもZipcodeパブリック・レンダラ・パラメータを使用するように構成されていると、地図ポートレットに郵便番号を入力することで、天気概況ポートレットの同じパラメータの値も更新されます。

ポートレットでサポートされるパブリック・レンダラ・パラメータは、ポートレット・デプロイメント・ディスクリプタ・ファイル(portlet.xml)のアプリケーション・セクションで宣言する必要があります。このように、アプリケーション・レベルで定義したパブリック・レンダラ・パラメータは、アプリケーション内のすべてのポートレットで使用できるようになります。

その後で、アプリケーション内の個別のポートレットでは、それらのパブリック・レンダラ・パラメータから使用する必要のあるものを指定できます。

パブリック・レンダラ・パラメータを後述するように宣言して定義すると、自動的にポートレット間通信が始まります。そのためのコーディングは必要ありません。

パブリック・レンダラ・パラメータの詳細と実装方法は、次の場所にあるJSR 286の仕様を参照してください。

http://jcp.org/en/jsr/detail?id=286

13.3.7.2 アプリケーション・レベルでのパブリック・レンダラ・パラメータの宣言

パブリック・レンダラ・パラメータをポートレットで使用できるようにするには、最初に、ポートレット・デプロイメント・ディスクリプタ・ファイル(portlet.xml)のアプリケーション・セクションで、このパラメータを宣言する必要があります。

アプリケーション・レベルでパブリック・レンダラ・パラメータを定義するには:

1. portlet.xmlファイルの概要エディタを開きます。
詳細は、「ポートレット・デプロイメント・ディスクリプタ・ファイルの編集方法」を参照してください。

2. 「パラメータ」タブをクリックします。

3. 「追加」アイコンをクリックして、新しいパブリック・レンダラ・パラメータを作成します。

4. ドロップダウン・リストから、パラメータに完全修飾名(QName)を指定するか、名前のローカル・パートのみを指定するかを選択します。

- 修飾名 - パラメータのネームスペースとローカル名を指定することで、QNameは、パブリック・レンダラ・パラメータをアプリケーション間で一意に特定します。ポートレット・コード内では、識別子でパブリック・レンダラ・パラメータにアクセスします。この識別子により、アプリケーション内でパラメータを一意に識別します。ただし、一般に、ページには複数のポートレットが収容されていて、それらが異なるアプリケーションから取得されている可能性があります。QNamesを使用することで、あるポートレットのパブリック・レンダラ・パラメータが、ページ上の別のポートレットに意図せず干渉することがなくなります。これらのポートレットの取得先は問題になりません。

- 未修飾名 - パラメータのネームスペースが、アプリケーションのデフォルト・ネームスペースと同じ場合は、パラメータの定義時に未修飾名を指定することで、ネームスペースを省略できます。アプリケーションのデフォルト・ネームスペースが定義されていない場合、未修飾名のパラメータにはXMLのデフォルト・ネームスペースが使用されます。

ヒント:

アプリケーションのデフォルト・ネームスペースが定義されているかどうかを確認するには、「アプリケーション」タブをクリックして、「デフォルト・ネームスペース」フィールドに値が入力されているかどうかを調べます。

5. パラメータの名前を入力します。

- 「修飾名」を選択した場合 - 「ネームスペース」フィールドにパラメータのネームスペースを入力し、「名前」フィールドにパラメータ名のローカル・パートを入力します。

- 「未修飾名」を選択した場合 - 「名前」フィールドに、パラメータ名のローカル・パートを入力します。このパラメータには、パラメータのネームスペースとしてアプリケーションのデフォルト・ネームスペースが使用されます(アプリケーションにデフォルト・ネームスペースが定義されていない場合は、XMLのデフォルト・ネームスペースが使用されます)。

6. 「識別子」フィールドに、パブリック・レンダラ・パラメータをアプリケーション内で識別するための名前を入力します。
この識別子は、アプリケーション内で一意にする必要があります。また、この識別子は、ポートレットとポートレットのコード内でパラメータにアクセスする際に、パラメータを識別するために使用されます。識別子を使用することで、ポートレット開発者は、パラメータの完全修飾名を認識する必要がなくなります。完全修飾名よりも単純なアプリケーション固有の識別子を知っていればよいことになります。

7. 「説明」フィールドに、パブリック・レンダラ・パラメータの説明を入力します。説明には、このパラメータをポートレットに使用する開発者が、その使用方法を判断できる情報を指定する必要があります。

8. (オプション)「別名」パネルでは、別名のリストを指定できます。これらの別名により、異なるQNameが付いていても別のパブリック・レンダラ・パラメータの値を受け取れるようになります。

a. 「作成」アイコンをクリックして、パラメータの新しい別名を作成します。

b. 「ネームスペース」フィールドに、この別名に使用するパラメータのネームスペースを入力します。

c. 「名前」フィールドに、この別名に使用するパラメータのローカル・パートを入力します。

ヒント:

パブリック・レンダラ・パラメータの別名を作成するときには、相互互換の別名を設定するようにしてください。つまり、ポートレットAのパラメータがポートレットBのパラメータに対応する別名を持つ場合は、可能であれば、ポートレットBのパラメータにもポートレットAのパラメータに対応する別名を作成するようにします。

9. パブリック・レンダラ・パラメータが、次に示すようにportlet.xmlファイルのアプリケーション定義セクションに追加されます。

<public-render-parameter>
<description>Parameter for zip code</description>
<identifier>Zip</identifier>
<qname xmlns:x="http://example.com/params">x:Zip</qname>
<alias xmlns:x="http://example.com/params">x:ZipCode</alias>
</public-render-parameter>

10. portlet.xmlファイルを保存します。

13.3.7.3 ポートレットごとのパブリック・レンダラ・パラメータの定義

あるポートレットでパブリック・レンダラ・パラメータをサポートする必要がある場合は、そのポートレットにパラメータを追加します。

ポートレットにパブリック・レンダラ・パラメータを追加するには:

1. portlet.xmlファイルの概要エディタを開きます。

詳細は、「ポートレット・デプロイメント・ディスクリプタ・ファイルの編集方法」を参照してください。

2. ポートレット・プロデューサ・アプリケーション内でパブリック・レンダラ・パラメータを定義していない場合は、この定義を先に実行しておく必要があります。

詳細は、「アプリケーション・レベルでのパブリック・レンダラ・パラメータの宣言」を参照してください。

3. 「ポートレット」タブをクリックして、パブリック・レンダラ・パラメータを使用するポートレットを選択します。

4. 「パラメータ」タブをクリックします。

「イベントの公開中」パネルの「使用可能」リストに、アプリケーションに定義されているすべてのポートレット・イベントが示されます。

5. 「パラメータ」タブをクリックします。

「パブリック・レンダラ・パラメータ」パネルの「使用可能」リストには、アプリケーションに定義されているすべてのパブリック・レンダラ・パラメータが示されます。

6. ポートレットで使用するパブリック・レンダラ・パラメータを選択し、「追加」アイコンをクリックして、そのパラメータを「選択済」リストに移動します。

これにより、次に示すように、パブリック・レンダラ・パラメータがportlet.xmlのポートレット定義に追加されます。

<supported-public-render-parameter>Zip</supported-public-render-parameter>

7. portlet.xmlファイルを保存します。

8. この時点で、このパブリック・レンダラ・パラメータはポートレットのコード内で使用できるようになります。

13.3.7.4 パブリック・レンダラ・パラメータの使用: 例

次の例では、パブリック・レンダラ・パラメータを使用して、異なる名前のパラメータを使用している2つのポートレットの動作をリンクする方法を示しています。この例では、パブリック・レンダラ・パラメータの更新を可能にする汎用パラメータ・フォーム・ポートレットを取り上げて、どのようにして株価をレンダリングする株価ポートレットにそれをリンクして、パブリック・レンダラ・パラメータから株式記号を取得できるかを示します。パラメータ・フォーム・ポートレットのパラメータの一般名(parameter1)は、株価ポートレットのパラメータ名(stocksymbol)と一致しないため、株価ポートレットの開発者は、この2つのパラメータ間をリンクする別名を使用することになります。

次の例は、パラメータ・フォーム・ポートレットを含むポートレット・プロデューサ・アプリケーションのportlet.xmlファイルの抜粋部分を示しています。ポートレット・プロデューサ・アプリケーションでは、パラメータ・フォーム・ポートレットでサポートするパブリック・レンダラ・パラメータ(parameter1)を定義します。

<portlet-app ...>
<portlet id="1234567890">
...
<supported-public-render-parameter>
parameter1
</supported-public-render-parameter>
...
</portlet>
...
<public-render-parameter>
<description xml:lang="en">First parameter set by portlet</description>
<identifier>parameter1</identifier>
<qname xmlns:op="http://xmlns.oracle.com/portlet/oracle-portlet-app">
op:parameter1
</qname>
</public-render-parameter>
...
</portlet-app>

パラメータ・フォーム・ポートレットのコードでは、このポートレットに値が入力されたときに、parameter1ポートレットの値を設定します。

public void processAction(ActionRequest request,
ActionResponse actionResponse)
throws PortletException, IOException
{
//
//Read the new parameter value posted in the portlet form
//
String param1 =actionResponse.getParameter("form_param1");

//
//Set the new parameter values. These will be intepreted by the
//container as public render parameters as the names match the names
//of the declared parameters.
//
actionResponse.setRenderParameter("parameter1", param1);
}

次の例は、株価ポートレットを含むポートレット・プロデューサ・アプリケーションのportlet.xmlファイルの抜粋部分を示しています。このポートレット・プロデューサ・アプリケーションでは、株価ポートレットでサポートされているパブリック・レンダラ・パラメータ(stocksymbol)も定義しています。パラメータ・フォーム・ポートレットのパラメータとリンクするように、stocksymbolパラメータに、parameter1という別名を追加します。

<portlet-app ...>
<portlet>
...
<supported-public-render-parameter>
stocksymbol
</supported-public-render-parameter>
...
</portlet>
...
<public-render-parameter>
<description xml:lang="en">The stock symbol</description>
<identifier>stocksymbol</identifier>
<qname xmlns:s="http://www.oracle.com/stocks">s:stocksymbol</qname>
<!-- Alias matches the Parameter Form portlet's first parameter name -->
<alias xmlns:op="http://xmlns.oracle.com/portlet/oracle-portlet-app">
op:parameter1
</alias>
</public-render-parameter>
...
</portlet-app>

株価ポートレットのコードでは、パラメータ・フォーム・ポートレットでポストされたパブリック・レンダラ・パラメータの値を読み取ります。

public void doView(RenderRequest request, RenderResponse response)
throws PortletException, IOException
{
response.setContentType("text/html; charset=UTF-8");
PrintWriter out =response.getWriter();

//Retrieve any values for the public render parameter.
//The parameter is looked up in the request using its identifier in portlet.xml
//(not it's name or alias).
String symbol =request.getParameter("stocksymbol");
...
}

これらの2つのポートレットが同じページにドロップされると、相互に自動的にリンクされます。パラメータ・フォーム・ポートレットの最初のパラメータ・フィールドに値を入力すると、その新しい値で株価ポートレットが更新されるようになります。

13.3.8 JSR 286ポートレットでのポートレット・イベントの使用方法

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

- ポートレット・イベントについて

- アプリケーション・レベルでのポートレット・イベントの宣言

- ポートレットごとの処理イベントの定義

- ポートレットごとの公開イベントの定義

- ポートレット・イベントの使用: 例

13.3.8.1 ポートレット・イベントについて

ポートレット・イベントとは、ポートレットの外部で行われたアクション(たとえば、そのポートレットを含むページで実行されたアクションや同じページ上の別のポートレットで実行されたアクション)に反応できるようにすることで、ポートレットのポートレット間通信を可能にするJSR 286の機能です。ポートレット・イベントは、ポートレットがそれ自体のイベントをトリガーすることでイベントに応答し、それがそのページ上の他のポートレットに影響を与えるようにカスケードできます。

ポートレットでサポートするポートレット・イベントは、ポートレット・デプロイメント・ディスクリプタ・ファイル(portlet.xml)のアプリケーション・セクションで宣言する必要があります。このように、アプリケーション・レベルで定義したポートレット・イベントは、アプリケーション内のすべてのポートレットで使用できるようになります。

その後で、アプリケーション内の個別のポートレットで、それらのポートレット・イベントから使用する必要のあるものを指定できます。ポートレットでは、受信を目的とする処理イベントというイベントと、ポートレットがトリガーする公開イベントというイベントを宣言できます。

ポートレット・イベントを後述するように宣言して定義すると、自動的にポートレット間通信が始まります。そのためのコーディングは必要ありません。

ポートレット・イベントの詳細と実装方法は、次の場所にあるJSR 286の仕様を参照してください。

http://jcp.org/en/jsr/detail?id=286

13.3.8.2 アプリケーション・レベルでのポートレット・イベントの宣言

ポートレット・イベントをポートレットで使用できるようにするには、最初に、ポートレット・デプロイメント・ディスクリプタ・ファイル(portlet.xml)のアプリケーション・セクションで、ポートレット・イベントを宣言する必要があります。

アプリケーション・レベルでポートレット・イベントを定義するには:

1. portlet.xmlファイルの概要エディタを開きます。
詳細は、「ポートレット・デプロイメント・ディスクリプタ・ファイルの編集方法」を参照してください。

2. 「イベント」タブをクリックします。

3. 「追加」アイコンをクリックして、新しいポートレット・イベントを作成します。

4. ドロップダウン・リストから、ポートレット・イベントに完全修飾名(QName)を指定するか、名前のローカル・パートのみを指定するかを選択します。

- 修飾名 - イベントのネームスペースとローカル名を指定することで、QNameは、ポートレット・イベントをアプリケーション間で一意に特定します。一般に、ページには複数のポートレットが収容されていて、それらが異なるアプリケーションに属していることがあります。QNamesを使用することで、あるポートレットのポートレット・イベントが、ページ上の別のポートレットに意図せず干渉することがなくなります。これらのポートレットの取得先は問題になりません。

- 未修飾名 - ポートレット・イベントのネームスペースが、アプリケーションのデフォルト・ネームスペースと同じ場合は、このイベントの定義時に未修飾名を指定することで、ネームスペースを省略できます。アプリケーションのデフォルト・ネームスペースが定義されていない場合、未修飾名のポートレット・イベントにはXMLのデフォルト・ネームスペースが使用されます。

ヒント:

アプリケーションのデフォルト・ネームスペースが定義されているかどうかを確認するには、「アプリケーション」タブをクリックして、「デフォルト・ネームスペース」フィールドに値が入力されているかどうかを調べます。

5. ポートレット・イベントの名前を入力します。

- 「修飾名」を選択した場合 - 「ネームスペース」フィールドにポータル・イベントのネームスペースを入力し、「名前」フィールドにイベント名のローカル・パートを入力します。

- 「未修飾名」を選択した場合 - 「名前」フィールドに、ポータル・イベント名のローカル・パートを入力します。このイベントには、イベントのネームスペースとしてアプリケーションのデフォルト・ネームスペースが使用されます(アプリケーションにデフォルト・ネームスペースが定義されていない場合は、XMLのデフォルト・ネームスペースが使用されます)。

6. 「ペイロード・タイプ」フィールドに、ポートレット・イベントでサポートするペイロードのデータ・タイプを入力します。または、そのデータ・タイプを参照します。

7. 「説明」フィールドに、ポートレット・イベントの説明を入力します。

8. (オプション)「別名」パネルでは、別名のリストを指定できます。これらの別名により、ポートレットで定義されたものと異なるQNameが付いていてもポートレット・イベントを認識できるようになります。

a. 「作成」アイコンをクリックして、ポートレット・イベントの新しい別名を作成します。

b. 「ネームスペース」フィールドに、この別名に使用するポートレット・イベントのネームスペースを入力します。

c. 「名前」フィールドに、この別名に使用するポートレット・イベントのローカル・パートを入力します。

9. ポートレット・イベントが、次に示すようにportlet.xmlファイルのアプリケーション定義セクションに追加されます。

<event-definition id="latLong">
<qname xmlns:x="http://xmlns.oracle.com/portlet/EventSample">
x:latLong
</qname>
<value-type>portlet.LatLong</value-type>
</event-definition>

10. portlet.xmlファイルを保存します。

13.3.8.3 ポートレットごとの処理イベントの定義

あるポートレットで特定のポートレット・イベントをリスニングする必要がある場合、そのイベントは処理イベントとして定義します。

ポートレットに処理イベントを追加するには:

1. portlet.xmlファイルの概要エディタを開きます。

詳細は、「ポートレット・デプロイメント・ディスクリプタ・ファイルの編集方法」を参照してください。

2. ポートレット・プロデューサ・アプリケーション内でポートレット・イベントを定義していない場合は、この定義を先に実行しておく必要があります。

詳細は、「アプリケーション・レベルでのポートレット・イベントの宣言」を参照してください。

3. 「ポートレット」タブをクリックして、ポートレット・イベントを使用するポートレットを選択します。

4. 「イベント」タブをクリックします。

「イベントの処理中」パネルの「使用可能」リストには、アプリケーションに定義されているすべてのポートレット・イベントが示されます。

5. ポートレットで使用するポートレット・イベントを選択し、「追加」アイコンをクリックして、そのイベントを「選択済」リストに移動します。

これにより、次に示すように、ポートレット・イベントが処理イベントとしてportlet.xmlのポートレット定義に追加されます。

<supported-processing-event id="latLong">
<qname xmlns:x="http://xmlns.oracle.com/portlet/EventSample">
x:latLong
</qname>
</supported-processing-event>

6. portlet.xmlファイルを保存します。

この時点で、このポートレット・イベントは、ポートレットのコード内で使用できるようになります。

13.3.8.4 ポートレットごとの公開イベントの定義

あるポートレットで特定のポートレット・イベントをトリガーする必要がある場合、そのイベントは公開イベントとして定義します。

ポートレットに公開イベントを追加するには:

1. portlet.xmlファイルの概要エディタを開きます。

詳細は、「ポートレット・デプロイメント・ディスクリプタ・ファイルの編集方法」を参照してください。

2. ポートレット・プロデューサ・アプリケーション内でポートレット・イベントを定義していない場合は、この定義を先に実行しておく必要があります。

詳細は、「ポートレットごとの公開イベントの定義」を参照してください。

3. 「ポートレット」タブをクリックして、ポートレット・イベントを使用するポートレットを選択します。

4. 「イベント」タブをクリックします。

「イベントの公開中」パネルの「使用可能」リストに、アプリケーションに定義されているすべてのポートレット・イベントが示されます。

5. ポートレットで使用するポートレット・イベントを選択し、「追加」アイコンをクリックして、そのイベントを「選択済」リストに移動します。

これにより、次に示すように、ポートレット・イベントが公開イベントとしてportlet.xmlのポートレット定義に追加されます。

<supported-publishing-event>
<qname xmlns:x="http://xmlns.oracle.com/portlet/EventSample">
x:latLong
<qname>
</supported-publishing-event>

6. portlet.xmlファイルを保存します。

この時点で、このポートレット・イベントは、ポートレットのコード内で使用できるようになります。

13.3.8.5 ポートレット・イベントの使用: 例

次の例では、あるポートレットのアクションが同じページ上の別のポートレットに作用するために使用するポートレット・イベントの使用方法について説明しています。この例では、ある企業の様々なオフィスの地理的な場所を一覧表示する、部署の所在地ポートレットというポートレットを使用します。この例では、そのポートレットを別のポートレット(地図ポートレット)とリンクする方法を示します。地図ポートレットは、部署の所在地ポートレットで選択した場所のGoogleマップを表示します。

次の例は、2つのポートレットを含むポートレット・プロデューサ・アプリケーションのportlet.xmlファイルの抜粋部分を示しています。ポートレット・プロデューサ・アプリケーションでは、これら2つのポートレットでサポートするポートレット・イベント(latLong)を定義します。イベントのペイロードは、1つの場所の緯度と経度をカプセル化するオブジェクトです。

<event-definition id="latLong">
<qname xmlns:x="http://xmlns.oracle.com/portlet/EventSample">x:latLong</qname>
<value-type>portlet.LatLong</value-type>
</event-definition>

次の例は、部門場所ポートレットでlatLongイベントを公開イベントとして使用していることを示しています。これは、特定の状況下でイベントを発生します。

<portlet id="locations">
...
<supported-publishing-event>
<qname xmlns:x="http://xmlns.oracle.com/portlet/EventSample">x:latLong<qname>
</supported-publishing-event>
...
</portlet>

部門場所ポートレットでは、このポートレット内で場所が選択されると、processActionメソッドでlatLongイベントが発生します(次の例を参照)。さらに、そのイベントのペイロードに、選択された場所の緯度と経度を設定します。

public void processAction(ActionRequest request, ActionResponse response)
throws PortletException
{
String locationId =request.getParameter("locationId");
Location location =getLocation(Integer.parseInt(locationId));

if (location != null)
{
//QName matches the event declared as a supported-publishing-event in
//portlet.xml for this portlet.

//LatLong event used by the Map portlet.
response.setEvent(new QName("http://xmlns.oracle.com/portlet/EventSample", "latLong"),
new LatLong(location.getLatitude(), location.getLongitude()));

}
}

次の例に、もう一方のポートレット(地図ポートレット)を示します。このポートレットもlatLongイベントを使用しますが、こちらは処理イベントとして使用します。そのため、イベントをリスニングして、ページ上の別の場所でイベントが発生したときには特定のアクションを実行することになります。

<portlet id="map">
...
<supported-processing-event id="latLong">
<qname xmlns:x="http://xmlns.oracle.com/portlet/EventSample">x:latLong</qname>
</supported-processing-event>
...
</portlet>

地図ポートレットのprocessEventメソッドは、latLongイベントを受信し、このイベントのペイロードを使用してLAT_LONG_PARAMETERレンダリング・パラメータを設定します。このパラメータは、レンダリング時にGoogleマップに表示する場所を決定するために、ポートレットで使用されます。

@Override
public void processEvent(EventRequest request,
EventResponse response)
throws PortletException, IOException
{
response.setRenderParameters(request);

Event event =request.getEvent();
if (event.getName().equals("latLong"))
{
response.setRenderParameter(LAT_LONG_PARAMETER, event.getValue().toString());
}
}

ヒント:

ここでは、部署の所在地ポートレットと地図ポートレットで使用されるイベントには同じ名前(latLong)が付けられています。地図ポートレットが別の名前(たとえば、geolocation)を使用してイベントをリスニングしている場合でも、次に示すように、portlet.xmlファイルでgeolocationイベントに別名を定義することで、これら2つのポートレットは自動的にリンクされるようになります。

<event-definition id="geolocation"> <qname xmlns:x="http://xmlns.oracle.com/portlet/Map">
x:geolocation
</qname> <alias xmlns:x="http://xmlns.oracle.com/portlet/EventSample">
x:latLong
</alias>
<value-type>portlet.LatLong</value-type>
</event-definition>

ただし、自動的なリンクが機能するには、この2つのイベントのペイロード・タイプを同じにする必要があることに注意してください。

注意:

ポートレット間でイベント・ペイロードを受け渡しするには、そのイベント・ペイロードからXMLペイロードに形式変換できる必要があります。これを可能にするには、次のいずれかの条件を満たしている必要があります。

- ペイロードには、JAXBバインディングが必要です。たとえば、次に示すように、ポートレット・クラスにXmlRootElementアノテーションを追加します。

package portlet;

import java.io.Serializable;
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement(namespace="http://xmlns.oracle.com/portlet/EventSample")
public class LatLong implements Serializable
{
private final double _latitude;
private final double _longitude;
...

- allowEventPayloadsWithoutJAXBBindingsコンテナ・ランタイム・オプションは、portlet.xmlでtrueに設定する必要があります。
詳細は、「JSR 286ポートレット用のランタイム環境のカスタマイズ方法」を参照してください。

13.3.9 JSR 286ポートレットへのポートレット・プリファレンスの追加方法

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

- ポートレット・プリファレンスについて

- JSR 286ポートレットへのポートレット・プリファレンスの追加

- ポートレットの単純なパーソナライズの追加: 例

13.3.9.1 ポートレット・プリファレンスについて

ポートレット・プリファレンスを使用すると、エンド・ユーザーは、実行時にポートレットをパーソナライズまたはカスタマイズできるようになります。パーソナライズはこれらを実行するユーザーのみに表示され、他のユーザーには表示されません。カスタマイズは、ポートレットをパーソナライズしていないすべてのユーザーに表示されます。

デフォルトでは、JDeveloperのウィザードを使用してJSR 286ポートレットを作成すると、実行時にユーザーがポートレットのタイトルを変更できるようにポートレット・プリファレンスが作成されます。実行時にエンド・ユーザーがこれとは別の変更をポートレットに加えられるようにすために、追加のポートレット・プリファレンスを作成できます。追加のポートレット・リファレンスは、ポートレットの作成時に作成することも、ポートレットの作成後にportlet.xmlファイルを編集して作成することもできます。

ポートレットの作成後にポートレット・プリファレンスをportlet.xmlファイルに追加する方法の詳細は、「JSR 286ポートレットへのポートレット・プリファレンスの追加」を参照してください。ポートレットの作成時にポートレット・プリファレンスを追加する方法の詳細は、「JSR 286 Javaポートレットの作成」を参照してください。

13.3.9.2 JSR 286ポートレットへのポートレット・プリファレンスの追加

ポートレットの動作またはコンテンツを、実行時にユーザーが変更できるようにするには、ユーザーが変更できるようにするポートレットの属性に応じたポートレット・プリファレンスを作成する必要があります。

ポートレット・プリファレンスをポートレットに追加するには:

1. portlet.xmlファイルの概要エディタを開きます。

詳細は、「ポートレット・デプロイメント・ディスクリプタ・ファイルの編集方法」を参照してください。

2. 「ポートレット」タブをクリックして、ポートレット・プリファレンスを追加するポートレットを選択します。

3. 「詳細」タブをクリックします。

「プリファレンス」パネルには、そのポートレットに存在する既存のポートレット・プリファレンス(たとえば、portletTitleプリファレンス)がリストされます。

4. 「追加」アイコンをクリックして、新しいポートレット・プリファレンスを作成します。

5. 「名前」フィールドに、プリファレンスの名前を入力します。

この名前は、ポートレット内で一意である必要があります。

6. 「値」フィールドに、プリファレンスの1つ以上のデフォルト値を入力します。

複数入力するときはカンマで区切ります。

7. 「読取り専用」を選択すると、そのプリファレンス値はユーザーが変更できなくなります。

ポートレット・プリファレンスが、次に示すようにportlet.xmlファイルのアプリケーション定義セクションに追加されます。

<portlet-preference>
<name>portletTitle</name>
</portlet-preference>
<portlet-preference>
<name>myPreference</name>
<value>7</value>
</portlet-preference>

8. portlet.xmlファイルを保存します。

この時点で、このプリファレンスは、getPreferenceメソッドを使用することで、ポートレットのコード内で使用できるようになります。

ヒント:

プリファレンスを翻訳可能にするには、リソース・バンドル・クラスに適切なキーと値のペアを追加する必要があります。

13.3.9.3 ポートレットの単純なパーソナライズの追加: 例

次の例では、ポートレットでの単純なパーソナライズを有効にする方法の手順を示します。

単純なパーソナライズをポートレットに追加するには:

1. JDeveloperで、デフォルト値をそのまま使用してポートレット・プロデューサ・アプリケーションを作成します。

2. JSR 286ポートレットを作成します。このとき、デフォルト値をそのまま使用します。

3. アプリケーション・ナビゲータで、「ポートレット」プロジェクトを開きます。

4. portlet.xmlを右クリックして、「開く」を選択します。

5. 「ポートレット」タブをクリックして、portlet1を選択します。

6. 「詳細」タブをクリックします。

7. 「追加」アイコンをクリックして、新しいポートレット・プリファレンスを作成します。

8. 「名前」フィールドに、portletContentと入力します。

9. アプリケーション・ナビゲータで、view.jspを右クリックして、「開く」を選択します。

10. ビジュアル・エディタで、「ソース」タブをクリックし、次の例で太字で示したコードを追加してportletContentポートレット・プリファレンスが表示されるようにします。

<%@ page contentType="text/html"
import="javax.portlet.*,java.util.*,Portlets.Portlet1,
Portlets.resource.Portlet1Bundle"%>
<%@ taglib uri="http://java.sun.com/portlet" prefix="portlet"%>

<portlet:defineObjects/>
<%
String[] str ={"Portlet Content"};
PortletPreferences prefs =renderRequest.getPreferences();
str =prefs.getValues("portletContent",str);
for (int i=0; i<str.length; i++)
{
%><%=(i<str.length-1)?str[i]+", ":str[i]%><%}%>

11. アプリケーション・ナビゲータで、edit.jspを右クリックして、「開く」を選択します。

このJSPは、フォーム・フィールド、フォーム入力フィールドおよび2つのフォーム・ボタン・フィールドで構成されています。

12. ビジュアル・エディタで「ソース」タブをクリックし、次の例で太字で示したコードを追加してユーザーがportletContentカスタマイズ・プリファレンスの値を入力するためのフォーム・フィールドを実装します。

<%@ page contentType ="text/html; charset=windows-1252"
pageEncoding ="windows-1252"
import ="javax.portlet.*, java.util.*,
Portletenhance.Portletenhance,
Portletenhance.resource.PortletenhanceBundle"%>
@ <%@ taglib uri ="http://java.sun.com/portlet" prefix="portlet"%>
<portlet:defineObjects/>
<%
PortletPreferences prefs =renderRequest.getPreferences();
ResourceBundle res =
portletConfig.getResourceBundle(renderRequest.getLocale());
%>
<form action="<portlet:actionURL/>" method="POST">
<table border="0">
<tr>
<td width="20%">
<p class="portlet-form-field" align="right">
<%= res.getString(PortletenhanceBundle.PORTLETCONTENT) %>
</p>
</td>
<td width="80%">
<input class="portlet-form-input-field"
type="TEXT"
name="<%= Portletenhance.PORTLETCONTENT_KEY %>"
value="<%= Portletenhance.buildValue(prefs,
Portletenhance.PORTLETCONTENT_KEY) %>"
size="20">
</td>
</tr>
<tr>
<td width="20%">
<p class="portlet-form-field" align="right">
<%= res.getString(PortletenhanceBundle.PORTLETTITLE) %>
</p>
</td>
<td width="80%">
<input class="portlet-form-input-field"
type="TEXT"
name="<%= Portletenhance.PORTLETTITLE_KEY %>"
value="<%= prefs.getValue(Portletenhance.PORTLETTITLE_KEY,
res.getString("javax.portlet.title")) %>"
size="20">
</td>
</tr>
<%
String[] str ={"Portlet Content"};
str =prefs.getValues("portletContent",str);
%>
<tr><td width="20%">
<p class="portlet-form-field" align="right">
Content
</p>
</td><td width="80%">
<textarea rows="10" cols="60" class="portlet-form-input-field"
name="portletContent"><%
for (int i=0; i<str.length; i++)
{%><%= (i<str.length-1) ? str[i]+", " : str[i] %><%}%>
</textarea>
</td></tr>
<tr>
<td colspan="2" align="center">
<input class="portlet-form-button" type="submit"

name="<%=Portletenhance.OK_ACTION%>"

value="<%=res.getString(PortletenhanceBundle.OK_LABEL)%>">
<input class="portlet-form-button" type="submit"

name="<%=Portletenhance.APPLY_ACTION%>"

value="<%=res.getString(PortletenhanceBundle.APPLY_LABEL)%>">
</td>
</tr>
</table>
</form>

13. アプリケーション・ナビゲータで、Portlet1.javaを右クリックして、「開く」を選択します。

14. ビジュアル・エディタで、「ソース」タブをクリックし、次の例で太字で示したコードをprocessActionメソッドに追加します。

// Save the preferences.
PortletPreferences prefs =request.getPreferences();
String param =request.getParameter(PORTLETTITLE_KEY);
prefs.setValues(PORTLETTITLE_KEY, buildValueArray(param));
String contentParam =request.getParameter("portletContent");
if (contentParam != null)
{
prefs.setValues("portletContent", buildValueArray(contentParam));
}
prefs.store();

このポートレットをページで使用できるようにすると、ユーザーがパーソナライズできるようなります。編集モードのポートレットには、「Portlet Content」フィールドが表示されます。ユーザーは、このフィールドにテキストを入力できます。入力されたテキストは、ポートレットのコンテンツとして表示されます。

13.3.10 JSR 286ポートレットでのポートレット・フィルタの使用方法

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

- ポートレット・フィルタについて

- アプリケーションへのポートレット・フィルタの追加

- ポートレットへのポートレット・フィルタの適用

13.3.10.1 ポートレット・フィルタについて

ポートレット・フィルタは、実行時にポートレットのコンテンツを変更できるようにするJSR 286の機能です。ポートレット・フィルタは、ポートレット・リクエストおよびポートレット・レスポンスのコンテンツを変換できる、再利用可能なJavaコンポーネントです。一般に、フィルタはポートレットのように応答を作成したり、リクエストに反応したりすることはありません。そのかわりに、リクエストおよびレスポンスを変更または変換します。

ポートレット・フィルタの詳細と実装方法は、次の場所にあるJSR 286の仕様を参照してください。

http://jcp.org/en/jsr/detail?id=286

13.3.10.2 アプリケーションへのポートレット・フィルタの追加

ポートレットでポートレット・フィルタを使用できるようにするには、最初に、そのフィルタをアプリケーション内で定義しておく必要があります。

ポートレット・フィルタをアプリケーションに追加するには:

1. portlet.xmlファイルの概要エディタを開きます。
詳細は、「ポートレット・デプロイメント・ディスクリプタ・ファイルの編集方法」を参照してください。

2. 「Filters」タブをクリックします。

3. 「追加」アイコンをクリックして、新しいポートレット・フィルタを作成します。

4. 「ポートレット・フィルタの作成」ダイアログでは、新しいポートレット・フィルタを作成することも、以前に作成したポートレット・フィルタを選択することもできます。

- 新しいポートレット・フィルタを作成するには:

a. 「新規ポートレット・フィルタ」を選択します。

b. 「名前」フィールドに、ポートレット・フィルタの名前を入力します。
この名前はアプリケーション内で一意にする必要があります。また、文字、数字およびアンダースコアのみを使用する必要があります。

c. 「パッケージ」フィールドに、新しいフィルタ・クラスを格納するパッケージを入力します。または、そのパッケージを参照します。

d. 1つ以上の「ライフサイクル・フェーズ」チェック・ボックスを選択して、このフィルタ・クラスが実装するjavax.portlet.filterインタフェースを指定します。
アクション - このフィルタ・クラスはActionFilterインタフェースを実装します

イベント - このフィルタ・クラスは、EventFilterインタフェースを実装します。

レンダリング - このフィルタ・クラスは、RenderFilterインタフェースを実装します。

リソース - このフィルタ・クラスは、ResourceFilterインタフェースを実装します。

ヒント:

「ポートレット・フィルタの作成」ダイアログを使用して新しいフィルタ・クラスを作成するときには、そのフィルタ・クラスに実装するフィルタ・インタフェースを指定できます。フィルタ・クラス作成した後では、概要エディタ使用してフィルタ・インタフェースを追加または削除できなくなります。そのかわりに、フィルタ・クラスのソースを直接編集して、インタフェースと、そのインタフェースに定義されたdoFilterメソッドを手動で追加または削除することが必要になります。

- 既存のポートレット・フィルタを選択するには:

a. 「既存のクラスから選択」を選択します。

b. フィルタ・クラスを入力または参照します。

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

6. 「表示名」フィールドに、ポートレット・フィルタのわかりやすい名前を入力します。

7. 「説明」フィールドに、ポートレット・フィルタの説明を入力します。

8. 「初期化パラメータ」パネルでは、フィルタ・クラスのinit()メソッドに値を渡すための初期化パラメータを指定できます。

a. 「追加」アイコンをクリックして、ポートレット・フィルタの初期化パラメータを指定します。

b. 「名前」フィールドに、初期化パラメータの名前を入力します。

c. 「値」フィールドに、初期化パラメータに渡す値を入力します。

d. 「説明」フィールドに、初期化パラメータの説明を入力します。

ポートレット・フィルタが、次に示すようにportlet.xmlファイルのアプリケーション定義セクションに追加されます。

<filter>
<display-name>Test Filter</display-name>
<filter-name>filter_1</filter-name>
<filter-class>javaportlets.MyFilter</filter-class>
<lifecycle>ACTION_PHASE</lifecycle>
<lifecycle>RENDER_PHASE</lifecycle>
</filter>

9. portlet.xmlファイルを保存します。

13.3.10.3 ポートレットへのポートレット・フィルタの適用

アプリケーションでポートレット・フィルタを定義しておくと、そのフィルタをアプリケーション内の1つ以上のポートレットに適用できるようになります。また、ポートレット・フィルタがポートレットに適用される順序を指定することもできます。

ポートレットにポートレット・フィルタを適用するには:

1. portlet.xmlファイルの概要エディタを開きます。

詳細は、「ポートレット・デプロイメント・ディスクリプタ・ファイルの編集方法」を参照してください。

2. 「フィルタ・マッピング」タブをクリックします。

3. 「追加」アイコンをクリックして、フィルタ・マッピング表に新しい行を追加します。

4. 「フィルタ名」ドロップダウン・リストから、ポートレットに適用するポートレット・フィルタを選択します。

このドロップダウン・リストには、portlet.xmlファイルで定義したすべてのポートレット・フィルタが移入されています。

5. 「ポートレット名」ドロップダウン・リストから、ポートレット・フィルタを適用するポートレットを選択します。

このドロップダウン・リストには、portlet.xmlファイルで定義したすべてのポートレットが移入されています。

別の方法として、ワイルドカードを使用することで、複数のポートレットにポートレット・フィルタを適用できます。たとえば*と入力して、ポートレット・フィルタをアプリケーション内のすべてのポートレットに適用することができます。

フィルタ・マッピングがportlet.xmlファイルのアプリケーション定義セクションに追加されます。次の例は、Portlet1という名前のポートレットに適用されるfilter_1ポートレット・フィルタを示しています。

<filter-mapping>
<filter-name>filter_1</filter-name>
<portlet-name>Portlet1</portlet-name>
</filter-mapping>

6. 「一番上」、「上へ」、「下へ」、および「一番下」の各アイコンを使用して、portlet.xmlファイル内のポートレット・フィルタを並べ替えます。ポートレット・フィルタの順序により、ポートレットにフィルタが適用される順序が決定されます。

注意:

ポートレット・フィルタは、複数のポートレットにマッピングされている可能性があります。複数のポートレットが1つの(共有)フィルタにマップされているときに、フィルタの順序を不用意に変更すると、不必要な副作用が発生することがあります。たとえば、あるポートレットに適用されているフィルタの順序を変更すると、並べ替えた順序が、そのフィルタを共有する他のすべてのポートレットに適用されるようになります。

7. portlet.xmlファイルを保存します。

13.3.11 異なるページ間でのポートレット間通信の実装方法

通常、ポートレット間通信は同じページに表示されているポートレット間で行われます。ただし、次の例で示すように別のページのポートレットとの間で通信することも可能です。

異なるページ間でのポートレット間通信の実装方法

1. カスタム・データ・コントロールを作成し、メソッドを公開してポートレット間通信を起動するイベントを取得します。

public void handleEvent(Object payload) {
if(!(payload instanceof HashMap)){
throw new IllegalArgumentException("Payload not a HashMap<String,String>.");
}
String p1 = "",p2 = "",p3 = "";
HashMap map = (HashMap) payload;
String[] pa1 = (String[])map.get("parameter1");
String[] pa2 = (String[])map.get("parameter2");
String[] pa3 = (String[])map.get("parameter3");
if(pa1 != null)
p1 = pa1[0];
if(pa2 != null)
p2 = pa2[0];
if(pa3 != null)
p3 = pa3[0];
//Only forward when all 3 parameters have values
if(!p1.equals("") && !p2.equals("") && !p3.equals("")){
HashMap<String,String> paramMap = new HashMap<String,String>();
paramMap.put("parameter1", p1);
paramMap.put("parameter2", p2);
paramMap.put("parameter3", p3);
Map<String, Object> pageFlowScope = ADFContext.getCurrent().getPageFlowScope();
pageFlowScope.put("paramMap", paramMap);
//now the navigation
FacesContext fctx = FacesContext.getCurrentInstance();
Application application = fctx.getApplication();
NavigationHandler navHandler = application.getNavigationHandler();
navHandler.handleNavigation(fctx, null, "target");
}
}

2. このメソッドをページ・バインディングに追加して、そこからイベントを作成します。

<methodAction id="handleEvent" InstanceName="EventDataControl.dataProvider"
DataControl="EventDataControl" RequiresUpdateModel="true"
Action="invokeMethod" MethodName="handleEvent"
IsViewObjectMethod="false">
<NamedData NDName="payload" NDType="java.lang.Object"/>
<events xmlns="http://xmlns.oracle.com/adfm/contextualEvent">
<event name="handleEvent"/>
</events>
</methodAction>

3. イベントをポートレット・イベントに関連付けます。これにより、ポートレットによってトリガーされたイベントのペイロードがカスタム・メソッドに確実に渡されます。

<eventMap xmlns="http://xmlns.oracle.com/adfm/contextualEvent">
<event name="ParameterFormPortlet1_1_Event">
<producer region="*">
<consumer region="" handler="handleEvent" handleCondition="">
<parameters>
<parameter name="payload" value="#{payLoad}"/>
</parameters>
</consumer>
</producer>
</event>
</eventMap>

4. 2番目のポートレットを含むページのpageFlowScopeにペイロードを渡すためにHashMapを作成します。

HashMap<String,String> paramMap = new HashMap<String,String>();
paramMap.put("parameter1", p1);
paramMap.put("parameter2", p2);
paramMap.put("parameter3", p3);
Map<String, Object> pageFlowScope = ADFContext.getCurrent().getPageFlowScope();
pageFlowScope.put("paramMap", paramMap);

5. faces-config.xmlファイルにナビゲーション・ルールを定義し、ターゲット・ページにナビゲートします。

FacesContext fctx = FacesContext.getCurrentInstance();
Application application = fctx.getApplication();
NavigationHandler navHandler = application.getNavigationHandler();
navHandler.handleNavigation(fctx, null, "target");

6. parameterMap属性を使用して、pageFlowScopeのパラメータをターゲット・ポートレット渡します。

<portlet id="ParameterDisplayPortlet1_1"
portletInstance="/oracle/adf/portlet/PortletExample/ap/Ei2default_354ce3c1_013d_1000_8002_c0a83801a490"
class="oracle.adf.model.portlet.binding.PortletBinding"
retainPortletHeader="false"
listenForAutoDeliveredPortletEvents="true"
listenForAutoDeliveredParameterChanges="true"
xmlns="http://xmlns.oracle.com/portlet/bindings"
parameterMap="#{pageFlowScope.paramMap}">
<events>
<event eventType="ParametersChange"
name="ParameterDisplayPortlet1_1_Event"/>
</events>
</portlet>

ヒント:

単一の汎用eventHandlerを作成して、ページ・テンプレートに追加することもできます。ページ・テンプレートのメソッド・バインディングを追加することで、これはすべてのページで使用できるようになります。パブリッシャにワイルドカードを使用することで、特定の名前ですべてのイベントをリッスンできるようにします。

詳細およびサンプル・アプリケーションのダウンロードは、次のブログ・エントリを参照してください。

http://www.ateam-oracle.com/inter-portlet-communication-between-pages/

13.3.12 キャッシュを使用してJSR 286ポートレットのパフォーマンスを向上する方法

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

- ポートレット・キャッシュについて

- JSR 286ポートレットでの有効期限ベースのキャッシュの実装

- JSR 286ポートレットでの検証ベースのキャッシュの実装

13.3.12.1 ポートレット・キャッシュについて

ポートレットの基本機能の設定が完了した後は、ポートレットのパフォーマンスに注目する必要があります。

キャッシュは、高度な動的コンテンツを含むWebサイトのパフォーマンスの向上に使用される一般的な手法です。JSR 286ポートレットでは、有効期限ベースおよび有効化ベースのキャッシュがサポートされています。

キャッシュの詳細は、「ポートレット・パフォーマンス」を参照してください。

13.3.12.2 JSR 286ポートレットでの有効期限ベースのキャッシュの実装

JSR 286ポートレットの作成ウィザードを使用して、最初にポートレットを作成するときには、有効期限ベースのキャッシュの実装を選択できます。ただし、ポートレットの初期デプロイメント時には、ポートレットのキャッシュをオフにして、デプロイメント・サイクルの後半でポートレット・コンテンツが安定してきたときに、このキャッシュを実装することが望まれることがあります。さらに、有効期間の編集や、キャッシュ・スコープの変更が必要になることもあります。

有効期限ベースのキャッシュを実装するには:

1. portlet.xmlファイルの概要エディタを開きます。

詳細は、「ポートレット・デプロイメント・ディスクリプタ・ファイルの編集方法」を参照してください。

2. 「ポートレット」タブをクリックして、有効期限ベースのキャッシュを実装するポートレットを選択します。

3. 「詳細」タブをクリックします。

4. 「キャッシュ管理」パネルで、「キャッシュ・ポートレット」を選択します。

注意:

ポートレットのキャッシュを無効にするには、「キャッシュ・ポートレット」を選択解除します。これにより、キャッシュの有効期間が0に設定されます。これは、キャッシュされたコンテンツが常に有効期限切れになることを意味します。

5. 「キャッシュ・スコープ」を選択します。

- 「パブリック」を選択すると、キャッシュされたコンテンツがユーザー全体で共有されます

- 「プライベート」を選択すると、キャッシュされたコンテンツはユーザー全体では共有されなくなります。

6. キャッシュの有効期間を指定します。

- 「キャッシュ・コンテンツ失効なし」を選択すると、キャッシュの有効期間が-1に設定されます。これは、キャッシュされたコンテンツが有効期限切れになることはなく、コンテンツが常にキャッシュから取得されることを意味します。このオプションは、ポートレット・コンテンツが変更される可能性のほとんどない静的コンテンツであると確信できるときに使用してください。このオプションを設定すると、次に示すコードがportlet.xmlファイルに追加されます。

<expiration-cache>-1</expiration-cache>

- 「キャッシュ・コンテンツ有効期限」を選択すると、指定した秒数の経過後にキャッシュされたポートレット・コンテンツが有効期限切れになります。その横にあるフィールドに、有効期間(n)を秒単位で入力します。このオプションを設定すると、次に示すコードがportlet.xmlファイルに追加されます。

<expiration-cache>n</expiration-cache>

7. portlet.xmlファイルを保存します。

13.3.12.3 JSR 286ポートレットでの検証ベースのキャッシュの実装

検証ベースのキャッシュの実装は、初期ポートレットの作成後に、手動でコーディングする必要があります。

次の例では、コンシューマが検証ベースのキャッシュを使用してマークアップをキャッシュするようにGenericPortletでdoView()メソッドを実装する場合の一般的な方法を示します。この例では、有効期限ベースのキャッシュをプログラム的に(CacheControl.setExpirationTime()メソッドを使用して)定義する方法と、検証ベースのキャッシュとの併用でプロデューサの負荷をさらに削減する方法についても示しています。これは、serveResource()の場合にも同様に機能します。

protected void doView (RenderRequest request, RenderResponse response)
throws PortletException, IOException
{
CacheControl cacheControl =response.getCacheControl();
String eTag =request.getETag();
if (isMarkupStillValid(eTag))
{
//Wait 30 seconds before checking ETag again
cacheControl.setExpirationTime(30);
//Tell consumer to use its cached content
cacheControl.setUseCachedContent(true);
return;
}
//ETag not valid so set a new one ...
//Define a new ETag
cacheControl.setETag(generateETag(...));
//Wait 60 seconds before checking ETag again
cacheControl.setExpirationTime(60);
//... and generate fresh portlet markup
createMarkup(request, response);
}
private boolean isMarkupStillValid(String eTag)
{
if (eTag ==null)
{
return false; //No ETag was supplied
}
//Perform portlet specific checks for the consumer's cached
//copy of the markup still being valid based on the given ETag
...
}
private String generateETag(...)
{
//Portlet specific code to generate an ETag, for example, a hash
//of the data on which the portlet's markup is based
...
return eTag;
}

JSR 286ポートレットの検証ベースのキャッシュの詳細は、次の場所にあるJSR 286の仕様を参照してください。

http://jcp.org/en/jsr/detail?id=286

13.3.13 リソース・プロキシに対して書きなおされたURLの実装方法

リソース・プロキシは、WSRPでリソースを取得する標準的な方法です。ポートレット内でのURLの問題を回避するには、指定したリソース内のURLをすべて書きなおすためのフラグを設定できます。たとえば、URLを含むHTMLのフラグメントがある場合、WSRPリソース・プロキシを考慮に入れてURLをリライトするために、このフラグを設定できます。

URLのリライトが必要なことを示すには、PortletRequest属性のoracle.portlet.server.resourceRequiresRewritingをtrueに設定します。たとえば、次のコードの抜粋部分のようなコードを含めると、エンコードするURLにリソース・プロキシが使用されるようになります。このコードはメソッド内にカプセル化して、このコードがURLごとに繰り返されないようにします。

request.setAttribute("oracle.portlet.server.resourceRequiresRewriting",
Boolean.TRUE);
String url =response.encodeURL(pathToResourceForRewriting);
request.removeAttribute("oracle.portlet.server.resourceRequiresRewriting");

oracle.portlet.server.resourceRequiresRewritingを具体的に設定していないと、falseにデフォルト設定され、URLはリライトされなくなります。この属性をtrueに設定することで、この機能を明示的にアクティブにする必要があります。

defaultProxiedResourceRequiresWsrpRewriteコンテナ・ランタイム・オプションを使用すると、デフォルトのWSRP requiresRewriteフラグを使用するように指定できます。このコンテナ・ランタイム・オプションで指定したオプション(デフォルトの設定はtrue)は、リクエスト属性でオーバーライドされていない場合に使用されます。詳細は、「com.oracle.portlet.defaultProxiedResourceRequiresWsrpRewrite」を参照してください。

13.3.14 ステートレス・リソース・プロキシの実装方法

リライトの必要がないプロトコル・リソースがある場合は、ステートレス・リソース・プロキシを使用できます。ステートレス・リソース・プロキシでは、ブラウザに返されるURLに、ポートレットIDなどのコンテキスト情報が必要なくなります。これにより、該当するリソースに対するキャッシュ・ヒット率が向上します。ステートレス・リソース・プロキシは、静的なJavaScriptファイルや静的なイメージなどの機能に有用なことがわかります。

ステートレス・プロキシが必要なことを示すには、PortletRequest属性のoracle.portlet.server.useStatelessProxyingをtrueに設定します。たとえば、次のコードの抜粋部分のようなコードを含めると、エンコードするURLにステートレス・プロキシが使用されるようになります。このコードはメソッド内にカプセル化して、このコードがURLごとに繰り返されないようにします。

request.setAttribute("oracle.portlet.server.useStatelessProxying", Boolean.TRUE);
String url =response.encodeURL(pathToResource);
request.removeAttribute("oracle.portlet.server.useStatelessProxying");

oracle.portlet.server.useStatelessProxyingを具体的に設定していないと、falseにデフォルト設定されます。この属性をtrueに設定することで、この機能を明示的にアクティブにする必要があります。

13.3.15 JSR 286ポートレット用の永続ストアの管理方法

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

- 永続ストアについて

- WSRPプロデューサ用の永続ストアのセットアップ

- WSRPプロデューサの永続ストアの移行

13.3.15.1 永続ストアについて

ポートレット永続ストアは、コンシューマ登録ハンドルおよびポートレット・プリファレンス・データを永続的に保持するために使用されます。ポートレット・プロデューサは、3種類の永続ストアのうちの1つを使用できます。

- Consumer - プロデューサのメタデータをコンシューマ・アプリケーションに関連付けます。このオプションをお薦めします。

- Database - リレーショナル・データベースを使用してデータを永続化します。これは、主に後方互換性を維持することを目的としていますが、大量のカスタマイズが見込まれる場合には有効です。

- File - ファイル・システムを使用してデータを永続化します。これは下位互換性の目的で提供されています。本番環境ではファイル・ベースの永続ストアは使用しないでください。この永続ストアでは、多層化環境や高可用性環境がサポートされません。ただし、ファイル・ベースの永続ストアを使用しながら、統合WLSを使用してアプリケーションをテストすることが必要になる場合があります。

詳細は、「ポートレットのパーソナライズとカスタマイズ」を参照してください。

13.3.15.2 WSRPプロデューサ永続ストア用のJNDI変数

表13-2に、WSRPプロデューサの永続ストアを指定するために使用するJNDI変数の一覧と説明を示します。

表13-2 WSRPプロデューサ・データベース・プリファレンス・ストア関連のJNDI変数

変数名

変数値

説明

oracle/portal/wsrp/server/persistentStore

Database

File

Consumer

ポートレット・プロデューサ・アプリケーションのコンシューマ登録ハンドルとポートレット・プリファレンスを永続化するために使用する、データ・ストア(ファイル、データベース、またはコンシューマ)を指定します。

oracle/portal/wsrp/server/fileStoreRoot

portletdata

ファイル・プリファレンス・ストアで使用されるルート・ディレクトリのパスを定義します。

絶対パスは、ファイル・システム・ルートを基準として解釈されます。相対パスは、WC_ORACLE_HOME/portalディレクトリを基準として解釈されます。

同じWebLogic Server内で実行されているすべてのプロデューサは、この変数に同じパスを使用する必要があります。このようにしていないと、一部のポートレットでPortlet unavailableエラーが発生します。

13.3.15.3 WSRPプロデューサ用の永続ストアのセットアップ

WSRPポートレット・プロデューサでは、JNDI変数(persistentStore)を使用して、どのタイプの永続ストアを使用するかを判断します。アプリケーション内で最初のポートレットを作成するときには、この変数はデフォルトでConsumerに設定されています。この変数の値は、ポートレット・プロデューサ・アプリケーションのweb.xmlファイルで変更できます。

注意:

すでに別のポートレットが含まれているアプリケーションにポートレットを作成すると、既存の永続ストアの設定が維持されます。

ファイル永続ストアを使用する場合は、その永続ストアに使用するルート・ディレクトリへのパスを指定するために、JNDI変数のfileStoreRootも使用します。「WSRPプロデューサ永続ストア用のJNDI変数」を参照してください。

WSRPポートレット・プロデューサの永続ストアをセットアップするには:

1. JDeveloperで、永続ストアをセットアップするポートレット・プロデューサ・アプリケーションを開きます。

2. ポートレット・プロジェクト(「ポートレット」など)を開きます。

3. 「Webコンテンツ」ノード、「WEB-INF」ノードの順に開きます。

4. web.xmlを右クリックして、「開く」を開きます。

5. 「ソース」タブをクリックします。

6. データベース永続ストアを指定する場合は、次のコードを追加します。

<env-entry>
<env-entry-name>oracle/portal/wsrp/server/persistentStore</env-entry-name>
<env-entry-type>java.lang.String</env-entry-type>
<env-entry-value>Database</env-entry-value>
</env-entry>

ファイルベース永続ストアを指定する場合は、次のコードを追加します。

<env-entry>
<env-entry-name>oracle/portal/wsrp/server/persistentStore</env-entry-name>
<env-entry-type>java.lang.String</env-entry-type>
<env-entry-value>File</env-entry-value>
</env-entry>
<env-entry>
<env-entry-name>oracle/portal/wsrp/server/fileStoreRoot</env-entry-name>
<env-entry-type>java.lang.String</env-entry-type>
<env-entry-value>myPrefStore</env-entry-value>
</env-entry>

コンシューマ永続ストアを指定する場合は、次のコードを追加します。

<env-entry>
<env-entry-name>oracle/portal/wsrp/server/persistentStore</env-entry-name>
<env-entry-type>java.lang.String</env-entry-type>
<env-entry-value>Consumer</env-entry-value>
</env-entry>

7. web.xmlファイルを保存します。

8. WebLogic Serverを再起動します。

13.3.15.4 WSRPプロデューサの永続ストアの移行

たとえば、テスト環境から本番環境に移動するときに、ポートレット・プロデューサで使用する永続ストアのタイプを変更する必要がある場合は、既存のデータを元の永続ストアから新しい永続ストアに移行できます。

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

- データベースまたはファイルベースの永続ストアの移行

- コンシューマ永続ストアの移行

- WSRPポートレット・プロデューサの移動

13.3.15.4.1 データベースまたはファイルベースの永続ストアの移行

WSRPポートレット・プロデューサの永続ストア移行ユーティリティ(PersistenceMigrationTool)を使用すると、データベース永続ストアとファイルベース永続ストアとの間で既存のデータを移行できます(たとえば、テストで使用していたファイルベース永続ストアから、本番環境のデータベース永続ストアへの移行)。また、このユーティリティを使用して、アップグレード中のユーザーは、既存のロケール固有のポートレット・プリファレンス・データが最新のJSPリリースと互換性のある名前形式を使用していることを確認できます。さらに、このユーティリティは、移行元と移行先のストアが同じタイプになる移行にも使用できるため、データベース間でのデータの移行も可能です。

注意:

PersistenceMigrationToolユーティリティを実行するときには、クラスパスで次のライブラリを参照する必要があります。

- wcs-producer-spi.jar

- portlet-utils.jar

- portlet-producer-container-common.jar

- portlet-producer-container-persistence.jar

- oracle-portlet-api.jar

- wsrp-container.jar

- oracle-portlet-tags.jar

- ojdbc6.jar

クラスパスで参照されるojdbc6.jarライブラリは、データベースで使用されるライブラリと同じにする必要があります。

データベースまたはファイルベースの永続ストアを移行するには:

1. 次に示すように、適切なライブラリがクラスパスで参照されていることを確認します。

./java -classpath
ORACLE_COMMON_HOME/modules/oracle.wccore/portlet-producer-container-persistence.jar:
ORACLE_COMMON_HOME/modules/oracle.wccore/portlet-producer-container-common.jar:
ORACLE_COMMON_HOME/modules/oracle.adf.share.ca/adf-share-base.jar:
ORACLE_COMMON_HOME/modules/oracle.wccore/portlet-utils.jar:
ORACLE_COMMON_HOME/modules/oracle.wccore/wcs-producer-spi.jar:
ORACLE_COMMON_HOME/modules/oracle.adf.share/adflogginghandler.jar:
DB_ORACLE_HOME/jdbc/lib/ojdbc6.jar

2. 次の構文を使用して、PersistenceMigrationToolを実行します。

java oracle.portlet.server.containerimpl.PersistenceMigrationTool
-sourceType [file │db]
-destType [file │db]
{-sourcePath [dir │
-sourceUsername username -sourcePassword password -sourceDatabase db
-sourceDriver srcDriver]}
{-destPath [dir │destUsername username -destPassword password -destDatabase db
-destDriver dstDriver]}
[-debug]

説明:

- sourceTypeは、移行元ストアがファイル(file)またはデータベース(db)のどちらにあるかを指定します。ソース・ストアと宛先ストアを同じタイプにすることができます。したがって、1つのデータベースからもう1つのデータベース、あるいは1つのファイル・システムからもう1つのファイル・システムへの移行が可能です。

- destTypeは、移行先ストアがファイル(file)またはデータベース(db)のどちらにあるかを指定します。ソース・ストアと宛先ストアを同じタイプにすることができます。したがって、1つのデータベースからもう1つのデータベース、あるいは1つのファイル・システムからもう1つのファイル・システムへの移行が可能です。

- sourcePathは、ファイルベース永続ストアの場所です。この引数は、sourceTypeがfileの場合に必要です。

- sourceUsernameは、永続ストア・データベースのデータベース・ユーザー名です。この引数は、sourceTypeがdbの場合に必要です。

- sourcePasswordは、永続ストア・データベースのデータベース・パスワードです。この引数は、sourceTypeがdbの場合に必要です。

- sourceDatabaseは、永続ストア・データベースの名前です。この引数は、sourceTypeがdbの場合に必要です。

- sourceDriverは、使用するデータベース・ドライバの名前です。たとえば、SQL Serverデータベースの場合、データベース・ドライバはcom.microsoft.sqlserver.jdbc.SQLServerDriverになります。この引数の値を省略すると、移行ツールは、sourceDatabase引数から使用する適切なドライバの判断を試みます。

- destPathは、ファイルベース永続ストアの場所です。この引数は、destTypeがfileの場合に必要です。

- destUsernameは、永続ストア・データベースのデータベース・ユーザー名です。この引数は、destTypeがdbの場合に必要です。

- destPasswordは、永続ストア・データベースのデータベース・パスワードです。この引数は、destTypeがdbの場合に必要です。

- destDatabaseは、永続ストア・データベースの名前です。この引数は、destTypeがdbの場合に必要です。

- destDriverは、使用するデータベース・ドライバの名前です。たとえば、SQL Serverデータベースの場合、データベース・ドライバはcom.microsoft.sqlserver.jdbc.SQLServerDriverになります。この引数の値を省略すると、移行ツールは、destDatabase引数から使用する適切なドライバの判断を試みます。

- debugは、標準出力による完全ロギングをオンにします。これによりユーザーは、ツール実行時に発生する問題を診断できます。

次の例は、PersistenceMigrationToolユーティリティの実行を示しています。この例では、ファイル・ストアのプリファレンスがデータベース・ストアにコピーされます。

./java -classpath

ORACLE_COMMON_HOME/modules/oracle.wccore/portlet-producer-container-persistence.jar:
ORACLE_COMMON_HOME/modules/oracle.wccore/portlet-producer-container-common.jar:
ORACLE_COMMON_HOME/modules/oracle.adf.share.ca/adf-share-base.jar:
ORACLE_COMMON_HOME/modules/oracle.wccore/portlet-utils.jar:
ORACLE_COMMON_HOME/modules/oracle.wccore/wcs-producer-spi.jar:
ORACLE_COMMON_HOME/modules/oracle.adf.share/adflogginghandler.jar:
DB_ORACLE_HOME/jdbc/lib/ojdbc6.jar
oracle.portlet.server.containerimpl.PersistenceMigrationTool
-sourceType file \
-sourcePath /data/prefs
-destType db \
-destUsername scott \
-destPassword tiger \
-destDatabase abc.mycompany.com:1521:yourdatabase \

説明:

- ORACLE_COMMON_HOMEは、Oracle共通ホームです

- DB_ORACLE_HOMEは、データベースのOracleホームです(WebCenter Portal Oracleホームと同じマシン上にある場合)。データベースのOracleホームが別のマシンにある場合は、DB_ORACLE_HOME/jdbc/libディレクトリを、WebCenter Portal Oracleホームの一時ディレクトリにコピーします。クラスパスでは、この一時ディレクトリのojdbc6.jarライブラリを参照する必要があります。

13.3.15.4.2 コンシューマ永続ストアの移行

コンシューマ永続ストア間の移行には、永続ストア移行ユーティリティを使用できません。コンシューマ永続ストア間の移行には、データをコンシューマのあるプロデューサからエクスポートして別のプロデューサにインポートする必要があります。

コンシューマ永続ストアを移行するには:

1. プロデューサ・メタデータをコンシューマ・アプリケーションからEARファイルにエクスポートします。

これは、カスタマイズ・データなどを取得するために、リモート・プロデューサに接続します。WLSTを使用してこれを実行するには、『Oracle Fusion Middleware WebCenter WLSTコマンド・リファレンス』のexportPortletClientMetadataに関する項を参照してください。

2. プロデューサの接続を別のプロデューサに再マップするか(すべての永続ストア・タイプの使用が可能)、現在のプロデューサのプリファレンス・ストア構成を変更します。

3. エクスポート済のEARファイルから再度コンシューマ・アプリケーションにインポートします。これにより、関連するメタデータがプロデューサに再度送信され、構成済の永続ストアに格納されます。

13.3.15.4.3 WSRPポートレット・プロデューサの移動

ポートレット・プロデューサを別のサーバーに移動したときには、そのプロデューサの永続ストアも移動する必要があります。

新しいプロデューサをインストールした後で、次に示すように永続ストアを移動します。

- コンシューマ永続ストア - データはコンシューマに保存されるため、永続ストアを移動するための要件はありません。

- データベース永続ストア: 次のいずれかを実行します。

- WebLogic Serverのデータ・ソースが元のプロデューサと同じデータベースを参照するように、新しいプロデューサを構成します。

- 永続ストア移行ユーティリティを使用して、永続ストアを移行します(詳細は、「WSRPプロデューサの永続ストアの移行」を参照)。

- ファイル永続ストア: 次のいずれかを実行します。

- 元のプロデューサと同じファイル・システムの場所を参照するように、新しいプロデューサを構成します。

- 永続ストア移行ユーティリティを使用して、永続ストアを移行します(詳細は、「WSRPプロデューサの永続ストアの移行」を参照)。

最後に、Enterprise Manager Fusion Middleware ControlまたはWLSTコマンドsetWSRPProducerRegistrationを使用して、プロデューサ登録のURLを更新します。

13.4 JSR 286ポートレットのテスト

ポートレットを本番環境にデプロイする前に、まず、期待通りに動作することを確認するためにテストすることを強くお薦めします。

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

- 統合WebLogic ServerでのWSRPポートレット・プロデューサの実行方法

- 統合WebLogic ServerへのWSRPポートレット・プロデューサのデプロイ方法

- WSRPテスト・ページを非表示または削除する方法

13.4.1 統合WebLogic ServerでのWSRPポートレット・プロデューサの実行方法

統合WebLogic Server (統合WLS)は、デプロイメント・プロファイルを作成しなくても、JDeveloper内でアプリケーションを実行できるように事前に構成されているため、ポートレットを短時間で簡単にテストする手段となります。

統合WLSでJSR 286ポートレットをテストするには:

1. JDeveloperで、テストするポートレットが属するポートレット・プロデューサ・アプリケーションを開きます。

2. ポートレット・プロジェクト(「ポートレット」など)を開きます。

3. 「Webコンテンツ」ノード、「WEB-INF」ノードの順に開きます。

4. portlet.xmlを右クリックして、「実行」を選択します。

portlet.xmlを実行すると、ポートレット・プロデューサ・アプリケーションのパッケージ化とデプロイメントが、そのアプリケーションの名前に関連する名前の統合WLSインスタンスで開始されます。

5. 「IntegratedWebLogicServer - ログ」ウィンドウを確認し、デプロイの進行状況を監視します。ログには、アプリケーション・ページのURLが示されます。WSRPプロデューサのURLには、次の構文が使用されます。

http://host:port/applicationname-Portlets-context-root/info

説明:

- hostは、プロデューザがデプロイされているサーバーです。

- portはHTTPリスナー・ポートです。通常、7101です。サーバーが起動すると、ポートがコンソールに表示されます。

- context-rootは、Webアプリケーションのコンテキスト・ルートです。

ブラウザのウィンドウに、図13-4のようなテスト・ページが表示されます。

図13-4 WSRPプロデューサ・テスト・ページ

6. アプリケーションの実行中に、JDeveloperとブラウザを切り替え、アプリケーションを設計時に変更してその変更を保存し、ブラウザでテスト・ページをリフレッシュできます。

7. プロデューサが正常に実行している場合、プロデューサをアプリケーションに登録し、1つ以上のポートレットをページに追加して、それが正常に動作していることを確認する必要があります。プロデューサにより、そのプロデューサを探して通信するために必要な情報がアプリケーションに提供されます。プロデューサを登録すると、接続として表示され、プロデューサとそのポートレットは「アプリケーション・リソース」パネルの「接続」ノードまたは「リソース」パレットで使用できるようになります。

8. 統合WLSインスタンスを停止するには、「Run Manager」タブで、DefaultServerを選択し、赤い「停止」アイコンをクリックします。インスタンスが停止すると、アプリケーションはアンデプロイされるため、使用できなくなります。

ヒント:

「IntegratedWebLogicServer - ログ」ウィンドウで、赤い「停止」アイコンをクリックするか、DefaultServerを選択しても、統合WLSインスタンスを停止できます。

統合WebLogic ServerでのWSRPポートレット・プロデューサの実行時の処理

これらの構成は、ポートレットの要件によって異なります。

- ポートレットをWebサービスとして構成するために、WSDLとその他の構成ファイルがWEB-INFディレクトリに追加されます。

- web.xmlファイルは、JSR 286ポートレット・プロデューサ・アプリケーションを正常に実行するために必要な、リスナー・クラスとサーバー・クラス、フィルタ、パラメータ、およびその他の構成で更新されます。
例: oracle.portlet.server.adapter.web.ServerContextListenerクラス、WSRP_v2_PortletManagement_Serviceフィルタ、WSRPBaseServiceフィルタなど。

- JSR 286ポートレットに必要なライブラリ(oracle.portlet-producer.wsrpなど)が、weblogic.xmlファイルに追加されます。

WSRPポートレット・プロデューサを統合WLSで実行すると、次の処理が行われます。

13.4.2 統合WebLogic ServerへのWSRPポートレット・プロデューサのデプロイ方法

WSRPポートレット・プロデューサ・アプリケーションを統合WLSインスタンスで実行すると、そのインスタンスが停止したときに、アプリケーションはアンデプロイされるため使用できなくなります。より安定したテスト・シナリオの場合、デフォルト・サーバーの実行中に常に使用できるように、ポートレット・プロデューサ・アプリケーションを統合WLSにデプロイできます。

この方法を選択する場合、まずデプロイメント・プロファイルを作成する必要があります。アプリケーションを統合WLSにデプロイする場合、「デプロイメント構成」ダイアログが表示され、デプロイメント設定を構成およびカスタマイズできます。JDeveloperで事前作成されたファイル・システムMDSリポジトリが、「リポジトリ名」フィールドに表示されます。

13.4.3 WSRPテスト・ページを非表示または削除する方法

セキュリティ上の理由から、WSRPテスト・ページを非表示にして管理者のみが確認できるようにすることも、そのページを完全に削除することもできます。

この項では、次の内容について説明します。

- WSRPテスト・ページの非表示

- WSRPテスト・ページの削除

注意:

WebブラウザでプロデューサへのSOAPリクエストを作成できる、Webserviceテスト・ページもあります。WSRPポートレット・プロデューサについては、このページがデフォルトで無効にされています。このページには、ポートレット・プロデューサのテストについての有用な情報は示されませんが、このページを有効にすることもできます。このページを有効にするには、デプロイ済プロデューサのWARファイルからoracle-webservices.xmlファイルを抽出して、WSRP v1とWSRP v2の両方のプロデューサのexpose-testpageフラグをtrueに設定してから、WARファイルとEARファイルを再パッケージ化してプロデューサを再デプロイします。

13.4.3.1 WSRPテスト・ページの非表示

WSRPテスト・ページをすべてのユーザーが確認する必要がない場合は、このページを管理者のみが確認できるようにして保護できます。

WSRPテストページを非表示にするには:

1. JDeveloperで、テスト・ページを非表示にするポートレット・プロデューサ・アプリケーションを開きます。

2. ポートレット・プロジェクト(「ポートレット」など)を開きます。

3. 「Webコンテンツ」ノード、「WEB-INF」ノードの順に開きます。

4. web.xmlを右クリックして、「開く」を開きます。

5. 「ソース」タブをクリックします。

6. 次のコードを追加します。

<security-role>
<description>AdministratorRole</description>
<role-name>Admin</role-name>
</security-role>
<security-constraint>
<display-name>TestPageInfo</display-name>
<web-resource-collection>
<web-resource-name>TestPageInfo</web-resource-name>
<description>Protect the test page servlet.</description>
<url-pattern>/info/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<description>Administrators</description>
<role-name>Admin</role-name>
</auth-constraint>
<user-data-constraint>
<transport-guarantee>NONE</transport-guarantee>
</user-data-constraint>
</security-constraint>

7. web.xmlファイルを保存します。

13.4.3.2 WSRPテスト・ページの削除

WSRPテスト・ページは完全に削除できます。

WSRPテスト・ページを削除するには、パッケージ化するときにweb.xmlファイルに挿入された要素を編集する必要があります。つまり、パッケージした結果のEARファイル内のweb.xmlファイルを編集することが必要になります。

WSRPテスト・ページを削除するには:

1. パッケージ化したときに作成されたEARファイルからweb.xmlファイルを抽出して、このファイルを任意のエディタで開きます。

2. 次のコードのコメントを解除します。

<servlet-mapping>
<servlet-name>WSRPTestPage</servlet-name>
<url-pattern>/info</url-pattern>
</servlet-mapping>

3. web.xmlファイルを保存して、編集したファイルをEARファイルに追加します。

13.5 WebLogic PortalポートレットのWebCenter Portalへの移行

一般に、WebLogic PortalのEclipse IDEで開発したJSR 286標準ポートレット(Javaポートレット)は、WebCenter Portal/JDeveloper環境に直接移動できます。ポートレットのすべてのアーティファクト(portlet.xml、.javaファイル、.jspファイルなど)を、単に、JDeveloperのポートレット・プロデューサ・アプリケーション・プロジェクトにコピーします。

注意:

ポートレットで使用しているWebLogic Portal固有のAPIは、WebCenter PortalのAPIに書き直す必要があります。WebLogic Portal固有のAPIは、WebCenter環境では動作しなくなります。

ヒント:

WebLogic Portalのエクスポート機能を使用すると、Javaポートレットをアーカイブ・ファイルにエクスポートできます。このアーカイブ・ファイルは、JDeveloperのプロジェクトにインポートできます。この方法は、ポートレットのすべてのアーティファクトを環境間で手動コピーするよりも簡単です。Oracle WebLogic Portalポートレット開発ガイドの別のシステムで使用するためのJavaポートレットのエクスポートに関する項を参照してください。

WLP開発環境からWebCenter Portal開発環境へのポートレットの移行は、直接的にはサポートされていません。一般に、このプロセスには、移行したポートレットのコードと関連ファイルに対する、大幅な書き直しとリファクタリングを伴います。

注意:

WebLogic PortalのWSRPで実行可能であったポートレットは(どのタイプでも)、WebCenter Portalコンシューマに含まれるWebLogic Portalポートレット・プロデューサから直接利用できます。Oracle WebLogic Portalフェデレーテッド・ポータル・ガイドの「WSRPのOracle WebCenter PortalおよびOracle Portalとの相互運用」を参照してください。

次に、WLPポートレットをWebCenter Portalのポートレット・プロデューサ環境に移動する際の一般的なガイダンスを示します。

- JSPポートレット - JSPポートレットをWebCenter Portalプロジェクトに直接移動することはサポートされていません。JSPポートレットをJSR286ポートレットにリファクタリングしてから移行することを検討できます。

- JSR 168/286ポートレット - ほとんどのJava (JSR 168/286)ポートレットは、WebCenter Portalポートレット・プロデューサに直接インポートして、JSR286ポートレットとして実行できます。JSR168仕様で保証されている特定のエラー条件を利用する一部のJSR168ポートレットは、JSR168互換モードでの実行が必要になることがあります。Oracle WebLogic Portalポートレット開発ガイドのJSR-286/JSR-168ポートレットの互換性に関する項を参照してください。WLPに独自のイベント機能(.portletファイルで宣言されるイベントのサブスクリプション)を使用するJSR168ポートレットは、JSR286のイベントを使用するように書き直す必要があります。

- Javaページ・フロー・ポートレット – JPFポートレットは、WebCenter Portalのポートレット・プロデューサではサポートされていないため、WebLogic Portal WSRPプロデューサから使用するか、JSR286またはJSFポートレットとなるようにリファクタする必要があります。

- JSFポートレット – このポートレットが、WLPでJSR329 JSFポートレット・ブリッジに書き込まれる場合、WebCenterプロデューサでそのまま実行する必要があります。WLPの"ネイティブ" JSFポートレット・ブリッジを使用するポートレットについては、そのポートレットをWebLogic Portalプロデューサから利用するか、JSR329ブリッジを使用するJSF 1.2ポートレットにアップグレードする必要があります。Oracle WebLogic Portalポートレット開発ガイドの「JSF-Javaポートレットの使用」も参照してください。

- Clipperポートレット - ClipperポートレットはWebCenter Portalではサポートされていませんが、WebCenter Portalのページレット・プロデューサのWebクリッピング機能により、同等の機能が提供されます。

- Strutsポートレット - StrutsポートレットをWebCenter Portalプロジェクトに直接移動することはサポートされていません。JSPポートレットをJSR286ポートレットにリファクタリングしてから移行することを検討できます。

- コンテンツ・プレゼンタ・ポートレット – WLPコンテンツ・プレゼンタ・ポートレットは、WSRPおよびWebCenter Portalでは機能しません。ただし、これに相当する機能がWebCenter Portalのコンテンツ・プレゼンタでは使用できます。『Oracle Fusion Middleware Oracle WebCenter Portalでのポータルの構築』のコンテンツ・プレゼンタを使用したコンテンツの公開に関する項を参照してください。

- リモート(WSRP)ポートレット – WLPで使用されるリモート(WSRP)ポートレットは、かわりにWebCenter Portalのコンシューマで使用できます。WLP固有のWSRP機能を利用するリモート・ポートレットには、変更が必要になることがあります。たとえば、カスタムのデータ・転送機能は、データを伝達するためのイベントまたは共有パラメータを使用して置き換える必要があります。Oracle WebLogic Portalフェデレーテッド・ポータル・ガイドの「WSRPのOracle WebCenter PortalおよびOracle Portalとの相互運用」および「WLPとWebCenter Portal: Frameworkアプリケーション間のWSRPセキュリティの構成」を参照してください。

WebLogic Portalポートレットを、JDeveloperのWebCenter Portalプロジェクトに直接移動すると、次の特有の問題が発生することがあります。

- URL生成 – WebLogic PortalでサポートされるURLタイプには、WebCenter Portalで機能しないものもあります(DesktopURL、CustomEventURL、PageURL、WindowURL、StandalonePortletURLなど)。

- イベント – WebCenter Portalコンシューマでは、WebLogic Portalフレームワークで生成されるすべてのイベントが生成されるわけではありません。これに該当するサポートされないイベントには、Init、LookAndFeelReinit、Notification、Refresh、WindowActivation、WindowDeactivationなどがあります。

- レンダリングの依存性 - WLPのレンダリングの依存性は、WebCenter Portalでは機能しません。

- WLP Framework API – 多数のWLP APIがWebCenter Portalではサポートされません。

13.6 JSR 286ポートレット関連のファイル

この項では、JSR 286ポートレットを構築する際に作成されるファイルについて説明します。次のトピックが含まれています:

- portlet.xml

- oracle-portlet-tags.jar

- portlet_mode.jsp

- portlet_name.java

- portlet_nameBundle.jar

- web.xml

13.6.1 portlet.xml

portlet.xmlは、JSR 286ポートレットの特性を定義します。portlet.xmlの詳細は、次で入手できるJavaポートレット仕様を参照してください。

http://jcp.org/en/jsr/detail?id=168

次の例は、portlet.xmlファイルのサンプル・フラグメントです。この例には、portlet.xmlの使用可能な要素がすべて含まれているわけではありません。

portlet.xmlの例

<portlet>
<description xml:lang="en">JSR 286 map portlet </description>
<portlet-name>portlet1</portlet-name>
<display-name xml:lang="en">Map Portlet</display-name>
<portlet-class>jsrportlet.MapPortlet</portlet-class>
<expiration-cache>0</expiration-cache>
<supports>
<mime-type>text/html</mime-type>
<portlet-mode>edit</portlet-mode>
<portlet-mode>help</portlet-mode>
<portlet-mode>about</portlet-mode>
</supports>
<supported-locale>en</supported-locale>
<resource-bundle>jsrportlet.resource.MapPortletBundle</resource-bundle>
<portlet-info>
<title>Map Portlet</title>
<short-title>Map</short-title>
<keywords/>
<portlet-preferences>
<preference>
<name>portletTitle</name>
</preference>
</portlet-preferences>
<security-role-ref>
<role-name>viewer</role-name>
</security-role-ref>
</portlet>

JSR 286ポートレットの場合、portlet.xmlファイルには、ポートレットおよびそれらの設定関連の情報がすべて含まれています。前のサンプルでは、これらの設定がすべて使用されているわけではありません。

- <description>: エンド・ユーザーに詳細情報を提供するポートレットについて説明します。

- <portlet-name>: ポートレット・アプリケーション内でポートレット・プロデューサ・アプリケーションを一意に識別します。

- <display-name>: ユーザーに使用可能なポートレットのリストを表示するときに使用します。

- <portlet-class>: javax.portlet.Portletインタフェースを実装するクラス、またはポートレット・ロジックのエントリ・ポイントとなるGenericPortlet抽象クラスを拡張するクラスの完全修飾クラス名が入ります。ポートレット・コンテナは、ポートレット・ライフ・サイクル・メソッドを起動するときにこのクラスを使用します。Oracle JSF Portlet Bridgeを使用して作成されるJSFポートレットの場合、これはoracle.portlet.bridge.adf.application.ADFBridgePortletになります。

- <expiration-cache>: 有効期限のキャッシュのデフォルトの期間です。

- <init-param>: ポートレットの動作を構成する初期化パラメータを定義します。Oracle JSF Portlet Bridgeは、表示モードなど、ポートレットでサポートされる別のポートレット・モデルのエントリ・ポイントを識別するために初期化パラメータを使用します。

<init-param>
<name>javax.portlet.faces.defaultViewId.view</name>
<value>/myPage.jspx</value>
</init-param>

他のWebCenter Portal対応モードの初期化パラメータは、次のとおりです。

- 編集モード: javax.portlet.faces.defaultViewId.edit

- ヘルプ・モード: javax.portlet.faces.defaultViewId.help

- 情報モード: javax.portlet.faces.defaultViewId.about

- 構成モード: javax.portlet.faces.defaultViewId.config

- デフォルト編集モード: javax.portlet.faces.defaultViewId.edit_defaults

- プレビュー・モード: javax.portlet.faces.defaultViewId.preview

- 印刷モード: javax.portlet.faces.defaultViewId.print

注意:

defaultViewIdの値はアプリケーションのコンテキスト・ルートと関連しており、必ず/で始まる必要があります。例では、defaultViewId.viewの値が/myPage.jspxに指定されています。

defaultViewIdに他のポートレット・モードを追加する場合は、<supports>タグにもモードを追加する必要があります。たとえば、<portlet-mode>HELP</portlet-mode>のようになります。

- <supports>: コンテンツ・タイプごとにサポートされているポートレット・モードについての情報を提供します。WebCenter Portalでサポートされているポートレット・モードには、edit、help、about、config、edit_defaults、previewおよびprintがあります。

- <supported-locale>: ポートレットで実行時にサポートされるロケールをリストします。

- <resource-bundle>: リソース・バンドルの完全修飾クラス名で、タイトルやキーワードなど、言語専用のポートレット情報提供するために使用されます。

- <title>: ポートレットの静的タイトル。通常は、ポートレット・ウィンドウ上のポートレットの装飾内で表示されます。

- <short-title>: 表示能力が限られているデバイス(携帯電話など)で使用されるタイトル。

- <keywords>: ユーザーに検索能力を提供するアプリケーションで使用されます。

- <portlet-preferences>: プリファレンス属性定義です。

- <supported-processing-event>: ポートレットで受信可能なイベントです。

- <supported-publishing-event>: ポートレットを呼び出すイベントです。

- <supported-public-render-parameter>: ポートレットでサポートされるパブリック・レンダラ・パラメータです。

- <container-runtime-option>: 追加の実行時の動作を定義するオプションです。

- <security-role-ref>: web.xmlでセキュリティ・ロールにロール名をマップします。<security-role-ref>をマップする先のweb.xml内にあるロールのリストは、プロデューサのユーザー・カテゴリとしてコンシューマに公開されます。web.xmlでは、<security-role>は次のように表示されます。

<security-role>
<description>Viewer role</description>
<role-name>viewer</role-name>
</security-role>

13.6.2 oracle-portlet-tags.jar

oracle-portlet-tags.jarは、Javaポートレット仕様で定義されているJSPタグ・ライブラリのOracle実装です。

13.6.3 portlet_mode.jsp

ポートレット用に作成するポート・モードの実装スタイルに応じて、対応するJSPファイルが、そのモードを定義するためにportlet_name\htmlディレクトリに作成されます。たとえば、ポートレットに表示モードと編集モードを使用する場合、portlet_name\htmlディレクトリにview.jspとedit.jspが必要になります。JSR 286ポートレットの場合、使用するポートレット・モードに対して次のJSPファイルが作成されます。

- about.jsp

- config.jsp

- edit_defaults.jsp

- edit.jsp

- help.jsp

- preview.jsp

- print.jsp

- view.jsp

ポートレット・モードの詳細は、「ポートレット・モード」を参照してください。

13.6.4 portlet_name.java

portlet_name.javaは、ポートレット・ロジックのエントリ・ポイントの役割を果すクラスです。このクラスは、javax.portlet.Portletインタフェースを実装するか、GenericPortlet抽象クラスを拡張する必要があります。ポートレット・コンテナは、ポートレット・ライフ・サイクル・メソッドを起動するときにこのクラスを使用します。

13.6.5 portlet_nameBundle.jar

portlet_nameBundle.jarは、ポートレットで使用される文字列の翻訳が含まれるリソース・バンドル・クラスです。

13.6.6 web.xml

web.xmlファイルは、Webアプリケーションに関する詳細情報が含まれたJava EE標準ディスクリプタです。web.xmlの詳細は、『Oracle Fusion Middleware Oracle Application Development Framework FusionによるWebアプリケーションの開発』のアプリケーション・サーバー互換性のためのweb.xmlファイルの構成に関する項を参照してください。

第IV部 ページレットの使用

この部は、次の章で構成されています。

- ページレットの概要

- ページレット・プロデューサ・オブジェクトの作成

- ページレットおよびガジェットの使用

- カスタム・ページレットの作成

- Webアプリケーションでのページレットの使用

- ページレットの作成: 例および高度なトピック

14 ページレットの概要

この章では、Oracle WebCenter Portalのページレット・プロデューサを使用したページレットの作成方法の概要を説明します。

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

- ページレット・プロデューサを使用したページレットの作成について

- ページレット・プロデューサ設定の構成

14.1 ページレット・プロデューサを使用したページレットの作成について

この項では、ページレット・プロデューサの概念と機能の概要について説明します。ページレット・プロデューサの使用方法と、その基になるアーキテクチャおよびコンポーネントについて説明し、重要な概念を紹介します。

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

- 概要

- ページレット・プロデューサのアーキテクチャ

- 要件

14.1.1 概要

ページレットは、再使用可能なユーザー・インタフェース・コンポーネントです。任意のHTMLフラグメントをページレットにできますが、ページレット開発者は、パラメータ化され、その他のページレットと動的にやり取りしたり、ユーザー入力に応答するように構成可能なページレットを記述することもできます。ページレットは、ポータルやその他のWebアプリケーション内など、任意のWebページで実行できます。ページレットを使用すれば、他のWeb環境でプラットフォーム固有のポートレットを公開できます。Oracle WebCenter Portalのページレット・プロデューサ(旧Oracle WebCenter Ensemble)は、動的なページレット開発を容易にする有用なツールと機能のコレクションを提供します。

ページレット・プロデューサにより、既存のWebインフラストラクチャを新しい方法で使用できるようにすることで、このインフラストラクチャへの投資を活用できます。ページレット・プロデューサによって、次のものを利用できます。

- デフォルトで統合APIやポートレットを公開しないアプリケーションのWeb UI

- WSRP (JSR-168またはJSR-286)、Oracle PDK-Java、CSP、WebPartsなどの標準ポートレット

また、Web UIをWebCenter Portal、WebCenter SitesまたはほとんどのHTMLページに配信でき、さらに、ページレット・プロデューサ・リソースに対するロールベースのアクセス制御や、HTMLマークアップの解析、クリッピング、挿入およびイベント処理(ページレット間の通信)によるWebリソースのリバース・プロキシも可能になります。

ページレット・プロデューサでは、次のものが提供されます。

- 既存のWeb UIを利用し、それをページレットという移植可能なコンポーネントとして再利用するためのツール

- ポートレットの標準をサポートしない非標準または非コンプライアンス・コンテナおよびコンポーネントを統合するための代替手段。たとえば、次の操作が可能です。

- ポートレットを公開しないWebアプリケーションから機能を取得します

- 既存のWSRP、Oracle PDK-JavaまたはContent Syndication Protocol (CSP)ポートレットを非ポータル設定で使用できるようにします

- HTMLマークアップを変更するためのインジェクタとパーサー

- ページレット間の通信およびイベント処理用のJavaScriptフレームワーク

14.1.2 ページレット・プロデューサのアーキテクチャ

この項では、ページレット・プロデューサのアーキテクチャと主要コンポーネントについて説明します。

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

- ページレット・プロデューサのアーキテクチャとコンポーネント

- ページレット・プロデューサの主要概念

- ページレット・プロデューサ・コンソール

- HTTPとContent Syndication Protocolの使用

- ページレット・プロデューサのプロキシ

14.1.2.1 ページレット・プロデューサのアーキテクチャとコンポーネント

図14-1に、ページレット・プロデューサのコンポーネントとその相互作用の概念図を示します。また、図14-1には、ページレット・リクエストがページレット・プロデューサ内でどのように処理されるかも反映されています。リクエストは、受信リクエストをリソースにマップするプロキシ・サーブレットによって受信されます。次に、リクエストは認証されます。リクエストされたリソースにユーザーがアクセスできる場合、ページレットの処理は、バックエンド・システムからHTMLマークアップをリクエストすることによって開始されます。受信したマークアップは、定義済のクリッパやパーサーなどを使用して変更されます。

図14-1 ページレット・プロデューサ - 大まかなアーキテクチャ

図14-2に、コンポーネントの相互作用を異なる見方で示します。

図14-2 ページレット・プロデューサ - 相互作用フロー

A: ページレット・プロデューサ・アプリケーションがJ2EEアプリケーション・サーバー上で実行されます。ページレット・プロデューサにはWebCenterスキーマは必要ありませんが、MDSインスタンス(通常はWebCenterと共有されている)は必要です。

B: ユーザーがページレットを含むWebCenter Portalページをコールします。

C: WebCenter Portalによってページが返され、さらにページレットをレンダリングするためのページレット・プロデューサをコールするJavaScriptが返されます。

D: JavaScriptによってページレット・プロデューサへのレンダリング・コールが行われます。

E: ページレット・プロデューサでは、外部(E1)または内部(E2) WebアプリケーションをHTMLコンテンツのソースとしてコールできます。ページレット・プロデューサによってコンテンツが変換され(つまりURLがリライトされ)、ページに挿入できるようブラウザに返されます。ページレット・プロデューサ自体には、外部から(つまり、DMZ内で)アクセスできます。

14.1.2.2 ページレット・プロデューサの主要概念

ページレット・プロデューサの使用時に役立つ主要概念は、次のとおりです。

- リソースは、スタンドアロンのWebアプリケーション、ページレット・プロデューサ、OpenSocialコンテナなど、ページレット・プロデューサ内のアプリケーションを登録するために使用する主要オブジェクトです。リソースを作成すると、プロキシによる外部URLへの内部アプリケーションのマッピング、認証の管理およびアプリケーションの変換が可能になります。Webアプリケーションをページレット・プロデューサのリソースとして登録すると、次の操作ができるようになります。

- 外部アドレスへの内部Webアプリケーションのプロキシ。

- プロキシ・レベルとリソース・レベルの両方における認証の管理

- プロキシされたWebアプリケーションの変換(URLのリライトを含む)。

リソースの作成の詳細は、「リソースの作成」を参照してください

- ページレットは、ページレット・プロデューサを通してアクセスするWebページのサブコンポーネントであり、プロキシされた任意のアプリケーションに挿入できます。ページレット・プロデューサのリソース上にあるアプリケーションでマークアップを返すものはページレットとして登録でき、登録すると、WebCenter Portalまたは他のWebアプリケーションで表示できるようになります。
どのようなHTMLフラグメントでもページレットにできます。ページレット開発者は、他のページレットと動的に相互作用し、Asynchronous Javascript and XML (AJAX)を使用してユーザー入力に対応する、パラメータ化され構成可能なページレットを作成できます。

ページレットの作成の詳細は、「ページレットの作成」を参照してください。

ページレット・プロデューサの登録は動的です。既存のプロデューサに対する追加および更新は、すぐに実行できます。ほとんどの場合、WebCenter Portalまたは管理対象サーバーを再起動する必要はありません。

14.1.2.3 ページレット・プロデューサ・コンソール

ページレット・プロデューサ・コンソールは、ページレット・プロデューサのデプロイで様々なオブジェクトの作成と管理に使用されるブラウザ・ベース管理ツールです。このコンソールから、リソースとしてのWebアプリケーションの登録、ページレットの作成、プロキシおよび変換設定の管理などを行うことができます。

ページレット・プロデューサ・コンソールには、次のURLで任意のWebブラウザからアクセスできます。

http://<host>:<port>/pagelets/admin

ページレット・プロデューサ・コンソールは、次の場所からアクセシビリティ・モードで起動することもできます:

http://<host>:<port>/pagelets/admin/accessible

実行中、ページレット・プロデューサ・コンソールには、WebCenter Portalの「共有アセット」タブからアクセスすることもできます。

注意:

ページレット・プロデューサ・コンソールでは、標準の管理言語とオランダ語のみがサポートされています。これらの言語以外をブラウザの言語に構成すると、現在のサーバーに定義された言語に戻ります。

ページレット・プロデューサ・コンソールを使用したページレット・プロデューサの構成およびオブジェクトの作成の詳細は、「ページレット・プロデューサ設定の構成」および「ページレット・プロデューサ・オブジェクトの作成」を参照してください。ページレット・プロデューサ・コンソールを使用したプロデューサの登録およびページレット・データの移行の詳細は、『Oracle Fusion Middleware Oracle WebCenter Portalの管理』のページレット・プロデューサの管理に関する項を参照してください。

14.1.2.4 HTTPとContent Syndication Protocolの使用

HTTPは通常WebページのコンテンツとXMLをサーバーとクライアント間で送信するために使用されるプロトコルです。Content Syndication Protocol (CSP)は、HTTPを拡張したオープン標準であるHTTP 1.1に基づく、プラットフォームに依存しないプロトコルで、ページレット・プロデューサと外部CSPリソース間の通信構文を定義します。

外部リソースのサービスは、CSPを使用してページレット・プロデューサと通信します。たとえば、ブラウザがページをリクエストすると、ページレット・プロデューサが各外部リソースに対する同時リクエストを作成し、ページからページレット・コンテンツを取得します。外部リソースは、現在のユーザーのプリファレンスをページレット・プロデューサから送信されたCSPヘッダーから読み取り、適切なHTMLを戻します。ページレット・プロデューサはHTMLをページ・マークアップに挿入します。イメージ・サービスに格納されたイメージは、ブラウザによって取得、表示されます。

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

- HTTP

- Content Syndication Protocol

14.1.2.4.1 HTTP

HTTP通信は、リクエストとレスポンスで構成されます。リクエストとレスポンスは、基本的にはヘッダー内のメタデータの名前/値ペアのリストで、オプションでボディが付いています。ボディは、送信されているデータ(HTMLページまたはXMLファイル)です。ヘッダー内のメタデータは、リクエストまたはレスポンス自体の情報(コンテンツを表示する言語、ブラウザがコンテンツをキャッシュする期間など)です。リクエストとレスポンスには、それぞれ、次に説明する固有の情報が含まれています。HTTPの詳細は、RFC 2616を参照してください(http://www.faqs.org/rfcs/rfc2616.html)。

クライアントはサーバーにHTTPリクエストを送信し、コンテンツを要求します。リクエスト・ボディは、POSTやPUTなど、サーバーにデータを送信するリクエストにのみ使用されます。

HTTPリクエストの形式:

[METHOD] [REQUEST-URI] HTTP/[VERSION]
[fieldname1]: [field-value1]
[fieldname2]: [field-value2]
[request body, if any]

HTTPリクエストの例:

GET /index.html HTTP/1.1
Host: www.xmlns.oracle.com
User-Agent: Mozilla/3.0 (compatible; Opera/3.0; Windows 95/NT4)
Accept: */*
Cookie: username=JoeSmith

サーバーは、ページ・コンテンツ、およびコンテンツのタイプ、ドキュメントの最終変更時期、サーバー・タイプなどの重要な詳細を含むHTTPレスポンスを返します。リクエストされたコンテンツが見つからない場合は、レスポンスにエラー・メッセージが含まれます。

HTTPレスポンスの形式:

HTTP/[VERSION] [CODE] [TEXT]
[fieldname1]: [field-value1]
[fieldname2]: [field-value2]
[response body, if any (document content here)]

HTTPレスポンスの例:

HTTP/1.0 200 Found
Last-modified: Thursday, 20-Nov-97 10:44:53
Content-length: 6372
Content-type: text/html
<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 3.2 Final// EN'><HTML>
...followed by document content...

カスタムHTTPヘッダーを、特殊な情報を格納するように構成できます。

注意:

ヘッダー・サイズ制限は、コードをホストしているサーバーによって制御されます。IIS/ASPの標準制限は60Kです。Javaアプリケーション・サーバーの場合は2Kから10Kまでです。これらの制限は通常、構成可能です。詳細は、使用しているサーバーのドキュメントを参照してください。

サービスからも、Set-CookieヘッダーやHTTP 1.1 Basic認証ヘッダーなどの標準のHTTPヘッダーにアクセスできます。HTTPをさらに調べる場合は、ロギングを使用して、ブラウザとWebサーバー間でやり取りされるすべてのヘッダーを表示できます(「ページレットのデバッグ」を参照)。HTTPは、SSLとともに使用され、セキュアなコンテンツを提供します。また、シングル・サインオン(SSO)でもBasic認証用のHTTPヘッダーが使用されます。

14.1.2.4.2 Content Syndication Protocol

Content Syndication Protocol (CSP)は、HTTPを拡張し、ページレット・プロデューサと外部CSPリソース(具体的にはOracle WebCenter Interactionポートレット)間で設定を渡すための専用ヘッダーを定義します。CSPでは、これらのサービスがHTTPを使用して設定を通信および変更する方法の概略を記述します。CSPプロトコルの最新バージョンは1.4で、次の場所から入手できます。

http://docs.oracle.com/cd/E13158_01/alui/wci/docs103/devguide/references/CSP1.4.pdf

システム変数とユーザー構成変数(表14-1を参照)の通信に使用されるカスタムCSPヘッダーは、ページレットでも使用できます。

表14-1 ページレット・プロデューサのヘッダー

ヘッダー名

説明

ユーザーID

現在ログインしているユーザーのユーザーID。この値は、セッションの有効期限を判別するときに使用できます。UserID=2の場合、デフォルトの'Guest'ユーザーがログインして、その他のユーザーのセッションはすべて終了します。

ユーザー名

ログインしているユーザーの名前。ユーザー名は、表示のパーソナライズやフォーム・フィールドの事前指定に使用できます。

イメージ・サービスのURL

ページレット・プロデューサのユーザー実装での、イメージ・サービスの仮想ルート・ディレクトリのURL。この場所は、サービスで使用されるすべての静的イメージに使用する必要があります。

スタイルシートのURL

現在のユーザーのスタイルシートのURL。ページレット・プロデューサの実装ごとに、UIがカスタマイズされます。一部のポータルでは、ユーザーはスタイルシートの中から選択できます。これらのスタイルを使用すると、ページレットが、現在のユーザーによるページレット・プロデューサの実装スタイルで表示されます。

ページレットID

現在のリソース(ページレット)のID、および現在のページレットのインスタンスID。この値は、HTMLフォームおよびクライアント側JavaScript機能の名前に追加し、ページ上のフォームや機能の一意の名前を確保して名前の競合を回避するために役立ちます。

ホスト・ページのURL

ページレットをホストするページのURL。設定の構成後にユーザーを正しいページに戻すために、プリファレンス・ページにはこのURLが必要です。この値を使用して、単一のページレットで様々なページに各種コンテンツを表示できるようにすることもできます。

14.1.2.5 ページレット・プロデューサのプロキシ

ページレット・プロデューサはプロキシ・サーバーとして動作し、クライアント・コンピュータと外部リソース間のトランザクションを仲介します。この構成は通常、それ以外の方法では外部リソースにアクセスできない可能性のあるクライアントに対するコンテンツとして使用されますが、これは、ポリシーの使用も含めて、クライアントに対して追加のセキュリティ制約を課するために使用することもできます。プロキシでは外部リソースは表示されず、コンテンツはプロキシ・サーバーから直接送られてくるように見えます。

このアーキテクチャにより、ページレット・プロデューサはコンテンツの単一アクセス・ポイントとなり、外部リソースがプライベート・ネットワークやファイアウォールの内側に存在できるようになります。ページレット・プロデューサが外部リソースに接続できるかぎり、ユーザーはコンテンツに直接アクセスできない場合でも、そのコンテンツを表示できます。ブラウザにとっては、ページレット・プロデューサは外部リソースのコンテンツのソースであるように見えます。

ユーザーがサービスとやり取りする際、プロキシで行われたURLへのリクエストはすべて、ページレット・プロデューサを通して自動的に再ルーティングされます。ユーザーにとって、コンテンツはページレット・プロデューサから送信されてくるように見えます。外部リソースは不明のバックエンド・システムです。

この構成には多くのメリットがあります。サービスに最も役に立つメリットは次のとおりです。

- 動的な機能とパーソナライズ: ページレット・プロデューサは、ページレットからのリクエストをインターセプトするため、MDS、リクエストまたはレスポンスからの情報を使用して、レスポンスを動的に変更することが可能になります。

- セキュリティ: サービスを使用すると、ユーザーはパブリックに使用できないコンテンツにアクセスできます。特定のURLをプロキシの構成に含めることにより、保護されたサーバーに格納されているファイルが使用可能になります。

警告:

プロキシは強力な機能であるため、不適切に構成された場合はセキュリティを著しく低下させます。保護されていないプライベート・コンテンツをホストしている外部リソースに直接アクセスできるようにすると、危険なセキュリティ・ギャップが生じる可能性があります。

- パフォーマンス: ページレット・プロデューサはプロキシ・コンテンツをキャッシュし、エンド・ユーザーに対するレスポンス時間を短縮し、外部リソースのパフォーマンスを向上させます。プロキシはHTMLなどのコンテンツに対しては効率的に機能しますが、静的イメージなどのバイナリ・データには通常は適していません。イメージは変換する必要がないため、大きなイメージをプロキシすると、パフォーマンスに悪影響を与える可能性があります。これが、イメージ・サービスを使用してプロキシ経由での静的イメージのルーティングを避ける必要がある1つの理由です。

プロキシされる他のCSPまたはWebリソースのURLはすべて、「プロキシしないホスト」フィールドに指定されていないかぎり、デフォルトでプロキシされます。プロキシの構成の詳細は、「プロキシ設定の構成方法」を参照してください。

プロキシを使用するサービスを実装する場合は、次の警告とベスト・プラクティスに留意してください。

- URL変換: ページレット・プロデューサは、プロキシされるURLを正確に開くため、コードを変換する必要があります。ページレット・プロデューサは、レスポンスを送信する前にHTMLを解析し、「HTTPプロキシ・サーバーURL」フィールドの接頭辞を含むURLを探します(「プロキシ設定の構成方法」を参照)。ページレット・プロデューサは、レスポンスをクライアントに返す前に、プロキシするURLを変換します。関連するURLは、正しい場所を指すように変換されます。

- スクリプト制限: URLを動的に作成するJavaScript構成は、コンテンツがすでに変換された後に実行されるため、問題を起こすことがあります。VBScriptはプロキシによって変換されません。使用しているコードがプロキシを認識するかぎり、動的スクリプトとVBScriptを引き続き使用できます。パーサーとWebインジェクタを使用して、URLのリライトに対するターゲット・コントロールを実装できます。パーサーとWebインジェクタの詳細は、「実行時のページレット機能の変更」を参照してください。

- URLエンコーディング: 予期しない変換を防ぐために、URLであるヘッダーをすべてエンコードすることはベスト・プラクティスです。JSPでは、書き込まれたURLをすべてエンコードします。コードによってページ本体にURLが書き込まれる場合は(たとえば、プリファレンス・ページへのリンクなど)、そのコードをエンコードする必要があります。標準のJavaサーブレット・コマンド、response.encodeURL()は優先される方法ですが、URLEncoder.encode(url)も使用できます。.NETフレームワークでは、HttpUtility.URLEncodeクラスによって必要な機能が提供されます。.NETでは、リダイレクトURLをエンコードする必要はありません。これは、バックエンドで自動的に処理されます。

14.1.3 要件

『Oracle Fusion Middleware Oracle WebCenterインストレーション・ガイド』の手順に従って、WebCenter Portalをインストールします。WebCenter Contentサーバー、ディスカッション・サーバー、ページレット・プロデューサを含むすべての依存コンポーネントもインストールされていて、構成済であることを確認します。

14.2 ページレット・プロデューサ設定の構成

この項では、すべてのページレット・プロデューサ・リソースに影響を与える重要な構成設定、およびページレット・プロデューサ・コンソールの「設定」ページを使用してそれらを設定する方法について説明します。ページレット・プロデューサ・コンソールの概要は、「ページレット・プロデューサ・コンソール」を参照してください。

「設定」ページは次の項を参照してください。

- WCIデータ・ソースの構成方法

- ロギング設定の構成方法

- プロキシ設定の構成方法

- 変換設定の構成方法

- CSP設定の構成方法

- Kerberos設定の構成方法

- OpenSocial設定の構成方法

14.2.1 WCIデータ・ソースの構成方法

WCIリソースを消費するには、CSPログイン・トークンが必要であり、そのログイン・トークンをページレット・プロデューサからCSPポートレットに伝播するには、データ・ソースが必要です。ページレット・プロデューサによって生成されたログイン・トークンは、ユーザー・アイデンティティを伝播し、受信リクエストを検証するために、すべてのリモート・ポートレットに送信されます。データ・ソースを構成するには、『Oracle Fusion Middleware Oracle WebLogic Server JDBCデータ・ソースの管理』のJDBCデータ・ソースの構成に関する項の手順に従います。データ・ソースにはwcidbという名前を付ける必要があります。

14.2.2 ロギング設定の構成方法

「ロギング」ページでは、ページレット・プロデューサ・コンポーネントのロギング・レベルを設定できます。

図14-3 ページレット・プロデューサ・コンソール: 設定 - ロギング

任意のコンポーネントのロギングを有効にするには、次のいずれかのロギング・レベルを選択します。

- 重度

- 警告

- 情報

- 構成

- 普通

- 詳細

- 最も詳細

ロギング・メッセージは、管理対象サーバーのログ・ファイル内で確認できます。Oracle WebLogic Serverの場合、この場所はdomain_home/servers/managed server name/managed server name.logおよびmanaged server name-diagnostic.logです。

14.2.3 プロキシ設定の構成方法

「プロキシ」ページでは、プロキシしないURLのリストを定義し、必要に応じてHTTPプロキシのURL、ユーザー名およびパスワードを設定できます。

プロキシ設定を変更したら、ページレット・プロデューサを再起動する必要があります。

注意:

デプロイメント環境内の外部接続にHTTPプロキシが必要な場合、サーバーの初回起動時に接続エラーが報告されます。これらのエラーは環境の問題を示しているのではなく、一部の外部OpenSocialライブラリをリモートでロードできないことを示しています。エラーを解決するには、前述の説明に従ってプロキシ設定を構成し、サーバーを再起動します。

注意:

「プロキシ」ページで入力したHTTPプロキシ・サーバーURLは、ページレット・プロデューサをホストするサーバーで実行されているすべてのアプリケーションに適用されます(Oracle WebLogic Serverでは、この設定はWC_Portlet管理対象サーバーで実行されているすべてのアプリケーションに適用されます)。Oracle WebLogic Serverユーザーは、特にこの設定に注意し、WLS管理サーバー・ホストとすべてのクラスタ化された管理対象サーバーが「プロキシしないホスト」リストに含まれていることを確認する必要があります。

図14-4 ページレット・プロデューサ・コンソール: 「設定」 - 「プロキシ」

「プロキシ」ページには、次の設定が含まれます。

- 「プロキシしないホスト」フィールドでは、プロキシしないURLのリストをセミコロンで区切って定義できます(ワイルドカードを使用できます)。Oracle WebLogic Serverデプロイメントの場合は、WLS管理サーバー・ホストとすべてのクラスタ化された管理対象サーバーをこのリストに含めてください。

- 「HTTPプロキシ・サーバーのパスワード」フィールドでは、プロキシ・サーバーのパスワードを設定できます。

- 「HTTPプロキシ・サーバーURL」フィールドでは、プロキシ・サーバーのURLを定義できます。

- 「HTTPプロキシ・サーバーのユーザー名」フィールドでは、プロキシ・サーバーへのアクセスに使用するユーザー名を定義できます。

14.2.4 変換設定の構成方法

「変換」ページでは、資格証明ボールト・プロバイダへのパスを入力したり、ページレット・プロデューサのセキュア・ポートとセキュアでないポートを構成できます。このページでは、変換前および変換後のコンテンツをログに記録するかどうかを選択することもできます。

図14-5 ページレット・プロデューサ・コンソール: 「設定」 - 「変換」

「変換」ページには、次のフィールドが含まれます。

- 「資格証明ボールト・プラグインのパス」フィールドでは、プラグインが格納されている資格証明ボールトへのパスを定義できます。

- 「セキュアでないポート」フィールドでは、ページレット・プロデューサのセキュアでないポートを定義できます。

注意:

「セキュアでないポート」のデフォルトは8889です。ページレット・プロデューサを異なるポートにデプロイした場合、このエントリを変更し、サーバーを再起動します。

- 「セキュア・ポート」フィールドでは、ページレット・プロデューサ用にセキュアなポートを定義します。

- 「変換のトレース」オプションを選択すると、変換前および変換後のコンテンツに対するロギングがオンになります。このオプションはデバッグに役立ちますが、本番環境ではオンにしないことをお薦めします。

14.2.5 CSP設定の構成方法

CSPは、HTTP 1.1のオープン標準に基づく、プラットフォームに依存しないプロトコルです。CSPは、ページレット・プロデューサと外部リソース間の通信構文を定義します。また、カスタム・ヘッダーを定義し、サービスがHTTPを使用して設定を通信および変更する方法の概略を記述します。

「CSP」ページでは、Oracle WebCenter Interaction資格証明マッパー、SOAP APIサービスおよびイメージ・サービスを構成できます。

注意:

Oracle WebCenter Interactionがデプロイメント内に存在しない場合、このページは無視される可能性があります。これらの設定は、Oracle WebCenter Interaction用に記述されたCSPポートレットとの下位互換性を維持するために使用されます。

14.2.6 Kerberos設定の構成方法

「Kerberos」ページは、Kerberos構成ファイル(java.security.krb5.confおよびjava.security.auth.login.conf)へのパスを定義するために使用します。これら2つの構成ファイルは、Kerberosサービス・チケットの取得場所をHTTPClientに指示するようKerberosレルムとKDCを構成するために必要です。

14.2.7 OpenSocial設定の構成方法

「OpenSocial」ページでは、OpenSocialガジェットを使用するようページレット・プロデューサを構成できます。

図14-6 ページレット・プロデューサ・コンソール: 「設定」 - 「OpenSocial」

「OpenSocial」ページには、次の設定が含まれます。

- 「キャッシュ」オプションでは、OpenSocialガジェットに対してページレット・プロデューサの内部キャッシュを有効にできます。

- 「コンテキスト」フィールドでは、ページレット・プロデューサのデプロイ先となるコンテキストを定義します。この値は、OpenSocialコンテナによって変更を要求されないかぎり、デフォルト設定(pagelets)のまま残してください。コンテキストの変更の詳細は、『Oracle Fusion Middleware Oracle WebCenter Portalの管理』の異なるコンテキストへのページレット・プロデューサの再デプロイに関する項を参照してください。

- 「デバッグ」オプションでは、OpenSocialガジェットに対してデバッグを有効に(JavaScriptの不明瞭化を無効に)できます。

- 「ホスト」フィールドには、ページレット・プロデューサ・ホストの完全修飾ドメイン名を含める必要があります。この値は、環境から自動的に取得されます。取得されない場合は、サーバーを再起動して正しい構成設定を取得します。「コンテキスト」の設定と同様、この値は、OpenSocialコンテナによって変更を要求されないかぎり、デフォルトのまま残してください。

- 「SSL」オプションでは、OpenSocialガジェットに対してSSLを有効にできます。

注意:

OpenSocialガジェットをインポートする前に、セキュア(HTTPS)およびセキュアでない(HTTP)ポートも構成する必要があります。これらの設定の詳細は、「変換設定の構成方法」を参照してください。

15 ページレット・プロデューサ・オブジェクトの作成

この章では、リソース、ページレット、Webインジェクタ、パーサー、ホストされたファイルなど、ページレット・プロデューサ・デプロイメント内の様々なオブジェクトを作成および構成する方法について説明します。

「ページレット・プロデューサ・コンソール」で説明したように、ページレット・プロデューサ・コンソールは、ページレット・プロデューサ・デプロイメント内の様々なオブジェクトを作成および管理するために使用する、ブラウザベースの管理ツールです。この章では、オブジェクトの各タイプに必要な設定について説明します。

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

- リソースの作成

- ページレットの作成

- Webインジェクタの作成

- カスタム・パーサーの作成

- ホストされたファイルの作成

15.1 リソースの作成

リソースは、ページレット・プロデューサに登録されたアプリケーションです。リソースとしてのアプリケーションにより、プロキシによる外部URLへの内部アプリケーションのマッピング、認証の管理およびアプリケーション機能の変換が可能になります。

新しいリソースを作成するには、次の手順を使用します。

1. ページレット・プロデューサ・コンソールのナビゲータで、ドロップダウン・リストから「リソース」オプションを選択します。

2. いずれかの既存のリソースをクリックし、ナビゲーション・ツールバーの「作成」アイコンをクリックします。(このボタンは、作成可能なオブジェクト・タイプを選択した場合のみ有効になります。)

図15-1 ページレット・プロデューサ・コンソール - リソースの作成

3. 「プロデューサ・タイプの選択」ダイアログ・ボックスで、リソースをプロキシするよう構成するプロデューサのタイプをドロップダウン・リストから選択します。

- Web: すべての標準Webアプリケーション

- CSP: CSPポートレット・プロバイダ・アプリケーション(Oracle WebCenter Interactionとともに使用)

- WSRP/JPDK: WSRPまたはOracle PDK-Javaポートレット・プロデューサ(このタイプのリソースを作成する前に、『Oracle Fusion Middleware Oracle WebCenter Portalの管理』のページレット・プロデューサの管理に関する項の説明に従って、関連するプロデューサを登録してください)。

- OpenSocial: OpenSocialコンテナ

図15-2 「プロデューサ・タイプの選択」ダイアログ

4. 「OK」をクリックします。<new>というエントリがリソースのリストに追加されます。この新しいリソースには、選択したプロデューサのタイプに必要な構成ページが含まれます。

5. ページレット・プロデューサ・コンソールでリソースを構成します。必要な構成ページは、プロデューサのタイプによって異なります。任意の時点で変更を保存するには、ナビゲーション・ツールバーの「保存」アイコンをクリックします。

- WebおよびCSPリソースの構成方法

- WSRPおよびOracle PDK-Javaリソースの構成方法

- OpenSocialリソース(OpenSocialガジェット・プロデューサ)の構成方法

リソースを定義したら、そのリソース内のページレットやその他のオブジェクトを作成します。詳細は、次のトピックを参照してください。

- ページレットの作成

- Webインジェクタの作成

- カスタム・パーサーの作成

- ホストされたファイルの作成

15.1.1 WebおよびCSPリソースの構成方法

この項では、WebおよびCSPリソースの構成方法について説明します。

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

- 全般設定の構成方法

- CSP設定の構成方法

- ポリシー設定の構成方法

- 自動ログインの構成方法

- 自動ログインの構成方法: フォーム・ログイン

- 自動ログインの構成方法: 基本ログインとNTLMログイン

- 自動ログインの構成方法: Kerberosログイン

- 自動ログインの構成方法: 認証のソース

- ヘッダーの構成方法

この項では、ページレット・プロデューサのインストール時に作成されるwelcome_resourceを例として使用します。

15.1.1.1 全般設定の構成方法

「全般」ページ(図15-3を参照)を使用して、リソースの基本情報を入力します。

図15-3 ページレット・プロデューサ・コンソール: 「リソース」 - 「全般」ページ

- リソースの名前を入力します。

- リソースの説明を入力します(オプション)。

- 「ソースURL」フィールドに、プロキシするWebアプリケーション・リソースの場所を示すURLを入力します。たとえば、 http://internalServer/foo/です。

注意:

ADF Webアプリケーションをリソースとして構成する場合、ソースURLをhttp://hostname:portnumber/context-root/よりも詳細に指定することはできません。

- デフォルトでは、ページレット・プロデューサは、エラー・メッセージを返すまで30秒間リソースへの接続を試行します。この値を変更するには、新しいソースのタイムアウトを秒単位で入力します。

- 「宛先URL」フィールドに、リソースへのアクセスに使用する相対パスを入力します。このパスは、ページレット・プロデューサをホストするサーバー上にあるリソースのURLを作成するために使用します。

- 動的HTMLを有効にするには、「DHTMLリライト」を選択します。このオプションでは、サーバーから返される元のHTMLに含まれず、DHTMLによって追加されるURLがサポートされます。ほとんどの場合、このオプションを有効にする必要があります。

- 非同期Ajaxコールを通じたDHTMLのリライトを有効にするには、「非同期リライト」を選択します。

15.1.1.2 CSP設定の構成方法

デフォルトでは、CSPログイン・トークンは、プロキシされるリソースに渡されません。この機能を有効にするには、「CSPログイン・トークンの送信」を選択します。「CSP」ページはCSPリソースにのみ使用できます。

15.1.1.3 ポリシー設定の構成方法

「ポリシー」ページ(図15-4を参照)では、リソースへのアクセスをWebCenter Portal内の特定のロールに制限できます。

図15-4 ページレット・プロデューサ・コンソール: 「リソース」 - 「ポリシー」ページ

ページレット・プロデューサをホストするJ2EEコンテナ(Oracle WebLogic Serverなど)では、現在のユーザーに関連付けられたロールのメンバーシップを確立する必要があります。「ポリシー」ページでは、1つのリソースに複数のロールを指定でき、ユーザーは指定されたいずれかのロールのメンバーである場合、アクセスを許可されます。そうでない場合、ユーザーはJ2EEコンテナによって委任された適切な認証ページに移動し、必要な資格証明を確立します。リストにロールが入力されていない場合、匿名アクセスが許可され、そのリソースは匿名リソースと呼ばれます。

注意:

このページで入力するロール名は、J2EEコンテナ(Oracle WebLogic Serverなど)内に作成されているロール名と一致する必要があります。

15.1.1.4 自動ログインの構成方法

自動ログイン機能を使用すると、ページレット・プロデューサから自動的に資格証明をアプリケーションに提供できるようになります。「自動ログイン」ページ(図15-5)では、リソースにアクセスするすべてのユーザーの認証情報を構成できます。

図15-5 ページレット・プロデューサ・コンソール: 「リソース」 - 「自動ログイン」ページ

次の項では、認証の資格証明マッピングを構成する方法について説明します。

- 「自動ログインの構成方法: フォーム・ログイン」では、HTMLフォームによる認証が必要なリソースの自動ログインを構成する方法について説明します。

- 「自動ログインの構成方法: 基本ログインとNTLMログイン」では、Basic認証とNTLMによる認証が必要なリソースの自動ログインを構成する方法について説明します。

- 「自動ログインの構成方法: Kerberosログイン」では、Kerberosによる認証が必要なリソースの自動ログインを構成する方法について説明します。

- 「自動ログインの構成方法: 認証のソース」では、静的、ユーザー・プロファイルおよび資格証明ボールトの認証フィールドに使用するソースについて説明します。

15.1.1.4.1 自動ログインの構成方法: フォーム・ログイン

この項では、HTMLフォームによる認証が必要なリソースの自動ログインを構成する方法について説明します。

1. リソースの「自動ログイン」ページで、「フォーム・ログイン」セクションを開きます(図15-6)。

図15-6 「自動ログイン」ページ - 「フォーム・ログイン」

2. ログイン・ページは、URLや正規表現によって識別できます。「ログイン・フォームの識別」セクションで、次のいずれかのオプションを選択します。

- ログイン・フォームの場所が静的URLである場合、「URL」を選択し、「値」フィールドにURLを入力します。ページ上の「フォーム・フィールドの自動検出」を選択するか、次の手順4の説明に従って、それらのフィールドを手動で入力できます。

- ログイン・フォームが動的である場合、「RegEx」を選択し、ボックスに正規表現パターンを入力します。

3. ログイン・フォームのアクションを設定します。「フォームの送信場所」セクションで、次のいずれかのオプションを選択します。

- ログイン・フォームのアクションが静的URLである場合、「URL」を選択し、ボックスにURLを入力します。フォーム送信のアクションをPOSTまたはGETから選択します。

- ログイン・フォームが動的である場合、「RegEx」を選択し、ボックスに正規表現パターンを入力します。

4. フィールドをフォームから認証フィールドのソースにマップするには、前述の説明に従って「ログイン・フォームの識別」セクションの「フォーム・フィールドの自動検出」をクリックするか、次のプロセスを使用して、それらのフィールドを手動で入力します。

a. 「作成」をクリックして、新しい行を「フォーム・フィールド」リストに追加します。

b. HTMLフォーム入力の名前を「フィールド名」ボックスに入力します。

c. 「ソース」プロパティおよび「値」プロパティを構成する方法の詳細は、「自動ログインの構成方法: 認証のソース」を参照してください。

注意:

重要なフィールドは、資格証明ボールト(「ユーザー・ボールト」または「保護」)を使用して安全に格納する必要があります。

d. フィールドのマッピングを削除するには、「削除」をクリックします。

5. ログアウト・ページとログイン・エラー・ページは、URLや正規表現によっても識別できます。「ログアウト・ページID」および「ログイン・エラー・ページの識別」セクションで、次のいずれかのオプションを選択します。

- ページの場所が静的URLである場合、「URL」を選択し、表示されたフィールドにURLを入力します。

- ページが動的である場合、「RegEx」を選択し、表示されたフィールドに正規表現パターンを入力します。

15.1.1.4.2 自動ログインの構成方法: 基本ログインとNTLMログイン

この項では、基本認証またはNTLMによる認証が必要なリソースの自動ログインを構成する方法について説明します。

1. リソースの「自動ログイン」ページで、「基本ログイン」または「NTLMログイン」セクションを開きます。

注意:

基本認証では、パスワードがプレーン・テキストとして送信されるため、本番システムでは使用しないでください。また、基になるトランスポートとしてHTTPSを使用することを強くお薦めします。

2. 「ユーザー名」および「パスワード」セクションで、適切な認証のソースを選択し、必要に応じて値を入力します。これらのプロパティを構成する方法の詳細は、「自動ログインの構成方法: 認証のソース」を参照してください。

15.1.1.4.3 自動ログインの構成方法: Kerberosログイン

この項では、Kerberosを使用した認証が必要なリソースの自動ログインを構成する方法について説明します。基本的なKerberos設定の定義の詳細は、「ページレット・プロデューサ設定の構成」を参照してください。

1. リソースの「自動ログイン」ページで、「Kerberosログイン」セクションを開きます。

2. 「ユーザー名」および「パスワード」セクションで、適切な認証のソースを選択し、必要に応じて値を入力します。これらのプロパティを構成する方法の詳細は、次の「自動ログインの構成方法: 認証のソース」を参照してください。

3. 「SPN」フィールドに、Kerberosアカウントのサービス・プリンシパル名(SPN)を、http://hostname_with_kerberosの形式で入力します。(Kerberos認証サービスでSPNを使用してサービスを認証するには、そのサービス・インスタンスがログオンに使用するアカウント・オブジェクトに、SPNを登録する必要があります。)

15.1.1.4.4 自動ログインの構成方法: 認証のソース

認証のソースによって、ログイン・フィールドのソースが定義されます。表15-1に、各認証フィールドのソースの値をまとめます。

表15-1 ページレット・プロデューサの認証のソース

フィールド

説明

非保護

指定した認証情報を、リソースにアクセスするすべてのユーザーに使用します。表示されたフィールドに静的な値を入力します。

保護

ページレット・プロデューサ管理コンソールで管理者によって入力されたフィールド値を使用します。値は資格証明ボールトに格納され、認証されていない(匿名)ユーザーを含むすべてのユーザー間で共有されます。フィールド・キーは自動生成され、読取り専用フィールドとして管理コンソールに表示されます。

ユーザー・ボールト

リソースへの初回アクセス時に、ユーザーに資格証明を要求します。提供された資格証明は暗号化され、資格証明ボールトに格納されます。その後、リソースへのアクセスは、格納された資格証明を使用して認証されます。フィールド・キーは自動生成され、読取り専用フィールドとして管理コンソールに表示されます。2番目のフィールドには、使用する資格証明ボールトの名前を入力するか、サーバー・ボールトを使用する場合はエントリを「default」のまま残します。

注意: 「ユーザー・ボールト」を選択すると、ユーザーには、「ページレットに直接アクセスするにはここをクリックします。」というリンクを含むエラー・ページが表示されます。このリンクによって認証ダイアログが開きます。これは既知の問題であり、ユーザーが初めてリソースにアクセスした場合のみ発生します。

生成済

(フォーム・ログインのみ)バックエンド・サーバーのレスポンスに含まれるマークアップからフィールド値を取得します。

15.1.1.5 ヘッダーの構成方法

「ヘッダー」ページ(図15-7を参照)では、ページレット・プロデューサによって提供されるHTTPから削除するリクエストおよびレスポンス・ヘッダーを選択できます。

図15-7 ページレット・プロデューサ・コンソール: 「リソース」 - 「ヘッダー」ページ

一部のヘッダー要素は、バックエンド・アプリケーションに渡さないようにしてください。たとえば、委任された(サード・パーティSSO)認証を使用したときに、SSOシステムによって挿入されるいくつかのヘッダーは、バックエンド・アプリケーションに渡さないようにする必要があります。そのようなヘッダーが渡されると、バックエンド・アプリケーションの機能が妨げられる場合があります。

次のヘッダーはデフォルトで削除されます。

リクエスト・ヘッダー

レスポンス・ヘッダー

Cache-Control

Connection

Cookie

Host

Max-Forwards

Pragma

Proxy-Connection

Proxy-Authorization

TE

Trailer

Transfer-Encoding

Upgrade

Max-Forwards

Proxy-Authenticate

Proxy-Connection

Set-Cookie

Trailer

Transfer-Encoding

Upgrade

Content-Lengthヘッダーは、常に暗黙的に削除されます。これは、プロキシ操作中にコンテンツを操作すると、ほとんどの場合、無効な長さのコンテンツがレンダリングされるためです。

ヘッダーをリストに追加するには、「作成」をクリックし、表示されたフィールドにヘッダー名を入力します。

WebまたはCSPリソースを定義したら、ページレットやその他のオブジェクトを作成できます。詳細は、以下のトピックを参照してください。

- ページレットの作成

- Webインジェクタの作成

- カスタム・パーサーの作成

- ホストされたファイルの作成

15.1.2 WSRPおよびOracle PDK-Javaリソースの構成方法

この項では、WSRPおよびOracle PDK-Javaポートレット・プロデューサに基づいてWSRP/JPDKリソースを構成する方法について説明します。

注意:

WSRPまたはOracle PDK-Javaポートレット・プロデューサに基づいてリソースを作成できるようにするには、まず、そのプロデューサを登録しておく必要があります(登録手順の詳細は、『Oracle Fusion Middleware Oracle WebCenter Portalの管理』のページレット・プロデューサの管理に関する項の説明を参照)。

この項では、次の内容について説明します。

- 全般設定の構成方法

- ポリシー設定の構成方法

15.1.2.1 全般設定の構成方法

「全般」ページを使用して、WSRPまたはJPDKリソースの基本情報を入力します。

- 「ポートレット・プロデューサ」ドロップダウン・リストから、ポートレット・プロデューサのタイプを選択します。このリストは、登録済のプロデューサによって移入されます(登録方法は、『Oracle Fusion Middleware Oracle WebCenter Portalの管理』のポートレット・プロデューサの管理に関する項の説明を参照)。

- リソースの名前を入力します。

- リソースの説明を入力します(オプション)。

15.1.2.2 ポリシー設定の構成方法

「ポリシー」ページでは、リソースへのアクセスをWebCenter Portal内の特定のロールに制限できます。

ページレット・プロデューサをホストするJ2EEコンテナ(Oracle WebLogic Serverなど)では、現在のユーザーに関連付けられたロールのメンバーシップを確立する必要があります。「ポリシー」ページでは、1つのリソースに複数のロールを指定でき、ユーザーは指定されたいずれかのロールのメンバーである場合、アクセスを許可されます。そうでない場合、ユーザーはJ2EEコンテナによって委任された適切な認証ページに移動し、必要な資格証明を確立します。リストにロールが入力されていない場合、匿名アクセスが許可され、そのリソースは匿名リソースと呼ばれます。

注意:

このページで入力するロール名は、J2EEコンテナ(Oracle WebLogic Serverなど)内に作成されているロール名と一致する必要があります。

WSRPまたはJPDKリソースを定義したら、ページレットやWebインジェクタを作成できます。詳細は次のトピックを参照してください。

- ページレットの作成

- Webインジェクタの作成

15.1.3 OpenSocialリソース(OpenSocialガジェット・プロデューサ)の構成方法

この項では、OpenSocialガジェット・プロデューサに基づいてOpenSocialリソースを構成する方法について説明します。

- 全般設定の構成方法

- ポリシー設定の構成方法

注意:

OpenSocialリソースを作成する前に、ページレット・プロデューサをOpenSocialとともに使用するよう構成します。詳細は、「OpenSocial設定の構成方法」を参照してください。

15.1.3.1 全般設定の構成方法

「全般」ページでは、リソースの基本情報を入力できます。

- リソースの名前を入力します。

- リソースの説明を入力します(オプション)。

15.1.3.2 ポリシー設定の構成方法

「ポリシー」ページでは、リソースへのアクセスをWebCenter Portal内の特定のロールに制限できます。

ページレット・プロデューサをホストするJ2EEコンテナ(Oracle WebLogic Serverなど)では、現在のユーザーに関連付けられたロールのメンバーシップを確立する必要があります。「ポリシー」ページでは、1つのリソースに複数のロールを指定でき、ユーザーは指定されたいずれかのロールのメンバーである場合、アクセスを許可されます。そうでない場合、ユーザーはJ2EEコンテナによって委任された適切な認証ページに移動し、必要な資格証明を確立します。リストにロールが入力されていない場合、匿名アクセスが許可され、そのリソースは匿名リソースと呼ばれます。

注意:

このページで入力するロール名は、J2EEコンテナ(Oracle WebLogic Serverなど)内に作成されているロール名と一致する必要があります。

OpenSocialリソースを定義したら、ページレットやファイルを作成できます。詳細は次のトピックを参照してください。

- ページレットの作成

- ホストされたファイルの作成

15.2 ページレットの作成

ページレット・コレクションには、リソースに関連付けられたページレットがリストされます。新しいページレットを作成するには、ページレット・プロデューサ・コンソール内で使用するリソースの下にある「ページレット」セクションを選択し、ツールバーの「作成」アイコンをクリックします。<new>というページレットがリストに追加されます。既存のページレットを変更するには、そのページレット名をクリックします。

注意:

シードされたリソース(welcome_resource、 login_resourceおよびpagelet_api)を更新しないでください。これらは変更が想定されていません。

この項では、次の項目について説明します。

- 全般設定の構成方法

- プリファレンスの構成方法

- パラメータの構成方法

- クリッパの構成方法

- ページレットとプリファレンス・エディタへのアクセス方法

15.2.1 全般設定の構成方法

ページレットの名前と、そのページレットを関連付けるライブラリの名前を入力します。(ページレット・ライブラリは、関連するページレットをユーザー定義によってグループ化する方法の1つです。)ページレットの説明を入力します(オプション)。

- WebおよびCSPページレットの場合、ページレットへのパスを「URL接尾辞」フィールドに入力します(リソースに対して入力したソースURLの接頭辞は含めない)。「URL接尾辞」を空白のまま残した場合、リソース全体がページレットと見なされます。

- WSRPまたはOracle PDK-Javaポートレットに基づくページレットの場合、ページレットの基になるポートレットを「ポートレット」ドロップダウン・リストから選択します。このリストには、親リソースに関連付けられたWSRPまたはOracle PDK-Javaポートレット・プロデューサ上のポートレットが移入されます。ポートレットに関連付けられたすべてのパブリック・パラメータは、自動的にページレット・パラメータとしてインポートされます。WSRPおよびOracle PDK-Javaポートレットのサポートの詳細は、「WSRPおよびOracle PDK-Javaポートレットに対するページレット・クロムの使用」を参照してください。

- OpenSocialガジェットに基づくページレットの場合、ガジェットXMLスキーマの場所を「ガジェットURL」フィールドに入力します。「ガジェット・メタデータのインポート」ボタンをクリックして、次の情報をXMLスキーマからインポートします。

- ガジェット名: この値は、「全般」ページの「説明」フィールドにインポートされます。

- ガジェットのユーザー・プリファレンス: 「パラメータの構成方法」のページレット・パラメータに、ガジェットのユーザー・プリファレンスが移入されます。

OpenSocialガジェットのサポートの詳細は、「OpenSocialガジェットの使用」を参照してください。

ページレットへのアクセスをブロックするには、「無効」を選択します。ページレットがいずれかのページに含まれている場合、単純なエラー・メッセージが表示されます。

15.2.2 プリファレンスの構成方法

「プリファレンス」ページ(図15-8を参照)では、ページレットに必要なすべてのプリファレンス・ページ(「グローバル」、「カスタマイズ」または「パーソナライズ」)の相対URLを入力します。リソースに対して入力したソースURLの接頭辞は含めないでください。(前述のように、ユーザー・プリファレンスを含むOpenSocialガジェットに対しては、デフォルト・エントリが作成されます。このエントリは変更しないでください。)

「プリファレンス」ページは、WSRPまたはOracle PDK-Javaベースのページレットでは使用されません。

図15-8 ページレット・プロデューサ・コンソール: 「ページレット」 - 「プリファレンス」ページ

15.2.3 パラメータの構成方法

ページレット・パラメータを使用すると、データをページレットに渡すことができます。パラメータによって、次のように、名前/値ペアがページレット・アプリケーションに渡されます。

「パラメータ」ページ(図15-9を参照)で、ページレットに渡すパラメータを入力します。

パラメータを追加するには、「作成」をクリックします。

- パラメータの名前を入力します。

- パラメータがページレットに必要な場合、「必須」チェック・ボックスを選択します。

- 適切なデータ型を文字列または数値から選択します。

- 説明を入力します(オプション)。

図15-9 ページレット・プロデューサ・コンソール: 「ページレット」 - 「パラメータ」ページ

15.2.4 クリッパの構成方法

クリッピングを使用すると、プロキシされたアプリケーションに含まれる大きいWebページの一部をクリップして、ページレットを作成できます。たとえば、ニュースのWebページには、最新の主な項目をリストするボックスが含まれている場合があります。そのボックスに含まれるHTMLを識別することによって、主な項目のみをクリップし、ニュースWebページのサブセットをページレットとして提供できます。

クリッパを作成するには、ページレットの下にある「クリップ」セクションを選択し、ツールバーの「作成」アイコンをクリックします。2つの構成ページを含む新しいクリッパが作成されます。

- 「全般」ページでは、クリッパの名前を入力できます。

- 「コンテンツ」ページ(図15-10を参照)では、クリッパのコンテンツを定義できます。

図15-10 ページレット・プロデューサ・コンソール: 「クリップ」 - 「コンテンツ」ページ

- グラフィカル・ツールを使用してページ・コンテンツを選択するには、「クリッパの起動」をクリックします。

- クリップするセクションが記述されたHTMLタグ属性を指定するには、「クリッパの詳細設定」セクション(図15-11)を開き、クリッピング・タグ名と関連属性を入力します。

図15-11 拡張クリッパ

クリッパを使用する際には、次の点に注意してください。

- バックエンド・リソースにHTTPS経由でアクセスする場合は、ページレット・プロデューサ・コンソールにもセキュア・ポート経由でアクセスしてください。

- クリップのソースをログイン・フォームまたはその他の認証フォームによって保護する場合は、「自動ログインの構成方法」の説明に従って、親リソースの自動ログインを構成してください。ボールトを使用して資格証明の値を格納している場合は(「自動ログインの構成方法: 認証のソース」を参照)、クリッパを使用する前に必ず資格証明を取得します。

- クリッパで問題が発生した場合は、ブラウザが構成済のページレットURLをリダイレクトなしでロードできることを確認してください。必要に応じて、ブラウザがすべてのリダイレクトに従った後で最終的にロードするURLを反映するよう、ページレットの接尾辞を変更します。

- ホストされたファイルを使用して上書きされたイメージとコードはクリップできません。(ホストされたファイルの詳細は、「ホストされたファイルの作成」を参照してください。)

- グラフィカル・クリッパが使用できない場合(たとえば、ページIDが無効な場合)、拡張クリッパを使用して、ページ・リージョンを正規表現でクリップに定義します。

15.2.5 ページレットとプリファレンス・エディタへのアクセス方法

「ドキュメント」ページ(図15-12を参照)では、JavaScriptまたはREST APIを使用してページレットおよびプリファレンス・エディタにアクセスするためのサンプル・コードを表示できます。

図15-12 ページレット・プロデューサ・コンソール: 「ページレット」 - 「ドキュメント」ページ

15.3 Webインジェクタの作成

Webインジェクタは、プロキシされているリソース・ページの指定の場所にコンテンツを挿入します。コンテンツには、HTML、CSS、JavaScriptおよびページレット宣言などのテキストを指定できます。ページから不要なコンテンツを削除するために空のインジェクタを使用することもできます。インジェクタをOpenSocialリソース用に作成することはできません。

Webインジェクタを作成するには、使用するリソースの下にある「インジェクタ」セクションを選択し、ツールバーの「作成」アイコンをクリックします。<new>という新しいインジェクタがリストに追加されます。その後、次のトピックの説明に従い、「全般」および「コンテンツ」構成ページを使用して、インジェクタを構成できます。

- 全般設定の構成方法

- コンテンツの挿入方法

注意:

シードされたリソース(welcome_resource、 login_resourceおよびpagelet_api)を更新しないでください。これらは変更が想定されていません。

15.3.1 全般設定の構成方法

「全般」ページ(図15-13を参照)では、インジェクタの基本設定を構成できます。

Webインジェクタの名前を入力します。

「URLフィルタ」ボックスにURLパターンを入力することにより、インジェクタをリソースのサブセットに適用できます。インジェクタは、「URLフィルタ」ボックスに指定されたテキストで始まるリソース内のURLにのみ適用されます。このボックスが空または/のみ指定されている場合は、インジェクタはリソース全体に適用されます。

インジェクタで特定の種類のコンテンツに制限するには、「MIMEフィルタ」ボックスにMIMEタイプのカンマ区切りリストを入力します。たとえば、text/htmlではインジェクタはHTMLコンテンツに制限される一方、text/cssではCSSコンテンツのみに制限されます。

「挿入位置」セクションでは、リソース出力内のどの部分に対して、一意の文字列に関連した挿入を行うかを定義します。表示されたフィールドに一意の文字列を入力し、「次より前」、「次より後」または「置換」を選択して、その文字列に関連するコンテンツの配置先を定義します。文字列の置換を選択した場合、「囲みタグ」を使用すると、文字列と囲みタグの両方を置換できます。「大文字/小文字を区別しない」を選択することにより、文字列の大/小文字を区別しないようにできます。

図15-13 ページレット・プロデューサ・コンソール: 「インジェクタ - 全般」ページ

15.3.2 コンテンツの挿入方法

「コンテンツ」ページでは、インジェクタを使用して挿入するコンテンツを定義できます。HTML、CSS、JavaScript、ページレット宣言など、任意のテキストを挿入できます。

たとえば、次のコードはページ上部に挿入できます。この例では、ハンドラ関数をページ・ロード・イベントに登録し、(ヘッダーやフッターを検索および非表示にすることにより)ハンドラを使用してページ・マークアップを変更します。

<script type="text/javascript">
if (window.addEventListener) {
window.addEventListener('load', hideHeaderFooter, false);
} else if (document.attachEvent) {
window.attachEvent('onload', hideHeaderFooter);
}
function hideHeaderFooter() {
var header =null;
//find the header table by class
if (document.getElementsByClassName) {
header =document.getElementsByClassName('page_header')[0];
}else {
//for older versions of IE
var tables =document.getElementsByTagName('table');
for (var table in tables) {
if (table.class =='page_header') {
header =table;
break;
}
}
}
if (header != null) {
header.style.display ='none';
}
//now find and hide the footer (easier to find, since it has an id)
var footer =document.getElementById('t23PageFooter');
if (footer != null) {
footer.style.display ='none';
}
}
</script>

15.4 カスタム・パーサーの作成

カスタム・パーサーを使用すると、コンテンツを解析し、URLを検索するための組込みのロジックを補足したり変更できます。組込みのパーサーがURLの識別やURLとしてリライトしてはいけないセクションの識別に失敗した場合は、カスタム・パーサーを使用してデフォルトの動作を変更できます。パーサーは、WSRPまたはOracle PDK-Javaポートレット・プロデューサ用に、あるいはOpenSocialガジェット・プロデューサ用に作成することはできません。

注意:

シードされたリソース(welcome_resource、 login_resourceおよびpagelet_api)を更新しないでください。これらは変更が想定されていません。

カスタム・パーサーを作成するには、使用するリソースの下にある「パーサー」セクションを選択し、ツールバーの「作成」アイコンをクリックして、パーサーの「全般」ページ(図15-14を参照)を表示します。

- パーサーの名前を入力します。

- 「URLフィルタ」ボックスにURLパターンを入力することにより、パーサーをリソースのサブセットに適用できます。パーサーは、「URLフィルタ」ボックスに指定されたテキストで始まるリソース内のURLにのみ適用されます。ボックスが空または/のみ指定されている場合は、パーサーはリソース全体に適用されます。

- 新しい解析ルールを追加するには、「作成」をクリックして新しい行を「フラグメントの場所」セクションに追加します。

- 「正規表現」欄に、変換するURLフラグメントを識別するための正規表現を入力します。最初のグループ化表現(かっこ内)はフラグメントを識別し、残りの表現はそれを検索するためのコンテキストを提供します。

- 「フラグメント・タイプ」から選択し、選択した場所を解析する方法を定義します。

- 「静的URL」はサーバー上で変換されます。

- 「動的URL」は、クライアント上でJavaScriptを使用して変換されます。

- 「HTMLフラグメント」および「JavaScriptフラグメント」タイプは、XMLなどの別のコンテンツ・タイプに埋め込まれるコンテンツに使用します。

- 「リライトなし」では、URLを検索しない場所を指定します。このオプションは、URLとして間違って識別されたマークアップのリライトを避けるために使用します。

- ナビゲータ・ツールバーの保存アイコンをクリックします。

図15-14 ページレット・プロデューサ・コンソール: 「パーサー」 - 「一般」ページ

たとえば、正規表現XMLFile=(.*?)"は、<embed src="/i/flashchart/anychart_5/swf/OracleAnyChart.swf?>XMLFile=http://apex.oracle.com/pls/apex/apex_util.flash?p=53557:1:74175370346201:FLOW_FLASH_CHART5_R45192463162785599619_en"のようにタグ内に定義されたXMLファイルへのURLを識別します。

15.5 ホストされたファイルの作成

ページレット・プロデューサでは、あらゆるタイプのコンテンツ(HTML、JavaScript、CSSなど)をホストし、仮想URLの場所でそのファイルを提供できます。ホストされたファイルは、様々な目的で使用できます。

- ファイルをアップロードし、元のファイルと同じURLを使用するようそれらを構成することによって、プロキシされたアプリケーション内のコンテンツと機能を上書きします。

- インジェクタ内のホストされたファイルを使用して、プロキシされたアプリケーションにイメージやコンテンツを挿入します。

- ページレット・ファイルをページレット・プロデューサ・サーバー上でホストします。

注意:

シードされたリソース(welcome_resource、 login_resourceおよびpagelet_api)を更新しないでください。これらは変更が想定されていません。

ファイルをアップロードするには、使用するリソースの下にある「ファイル」セクションを選択し、ツールバーの「作成」アイコンをクリックします。

- 「全般」ページ(図15-15を参照)で、「名前」フィールドにファイルへの相対パスを入力します。先行スラッシュ("/")を使用しないでください。ナビゲータのファイル・コレクションのディレクトリ構造は、ファイルのパスに一致するように更新されます。
ファイルのMIMEタイプを入力します。

図15-15 ページレット・プロデューサ・コンソール: 「ファイル」 - 「全般」ページ

- 「コンテンツ」ページで、ファイルへのパスを入力するか、「参照」をクリックしてそのファイルに移動します。
「アップロード」をクリックして、ファイルをページレット・プロデューサ・サーバーにアップロードします。テキストまたはHTMLをMIMEタイプとして入力した場合、「コンテンツ」ページ上のエディタを使用して、ファイル・コンテンツを入力または編集することもできます。(このエディタはテキストまたはHTMLファイルの場合のみ使用できます。)イメージ・タイプをMIMEタイプとして入力した場合、アップロードしたイメージが「コンテンツ」ページに表示されます。

注意:

ページレット・プロデューサにアップロードするテキスト・ファイル(テキスト/プレーン)は、UTF-8として保存する必要があります。

- ナビゲータ・ツールバーの保存アイコンをクリックします。

アップロードしたファイルはインジェクタおよびページレット内で使用でき、次のURLに配置されます。http://<host_name>:<port_number>/pagelets/<resourcename>/<filepath>

たとえば、ファイルをwelcome_resourceの下にアップロードし、入力したファイル名がimages/myimage.jpgである場合、ページレット・プロデューサ・サーバー上のホストされたファイルへのパスは、次のようになります。http://<host_name>:<port_number>/pagelets/welcome_resource/images/myimage.jpg

ホストされたファイルを使用する際には、次の点に注意してください。

- ホストされたファイル機能は、大きいファイルには使用しないでください。

- OpenSocialガジェットXMLファイルをホストする場合は、このファイルを匿名リソース(セキュリティ・ポリシーなし)の下に配置する必要があります。そこに配置しないと、ガジェットが正常に機能しません。

- ホストされたファイルは、WSRPまたはOracle PDK-Javaポートレット・プロデューサ用に作成することはできません。

16 ページレットおよびガジェットの使用

この章では、Oracle WebCenter Portalのページレット・プロデューサを使用したページレットの作成方法について説明します。

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

- OpenSocialガジェットの使用

- WSRPおよびOracle PDK-Javaポートレットに対するページレット・クロムの使用

16.1 OpenSocialガジェットの使用

ページレット・プロデューサ・サーバーからアクセス可能なOpenSocialガジェットは、ページレットとして登録して、ポータルなどのWebアプリケーションで使用できます。OpenSocialガジェットをサポートするには、まず「OpenSocial設定の構成方法」の説明に従って、OpenSocialコンテナを定義する必要があります。

ページレット・プロデューサでは、OAuthを除く、標準のOpenSocial APIのほとんどをサポートしています。完全なOpenSocial APIリファレンス・ドキュメントは、次の場所から入手できます。

http://docs.opensocial.org/display/OSD/Specs

ページレット・プロデューサでは、OpenSocial APIを使用した、ガジェットによるプリファレンスの保存、WebCenter Portalプロファイルと接続情報の取得およびユーザーのアクティビティ・ストリームへのアクセスが可能です。

この項では、次の項目について説明します。

- 認証の構成方法

- ユーザー・プリファレンスの格納方法

- WebCenter Portalのプロファイル情報へのアクセス方法

- ユーザーのアクティビティ・ストリームへのアクセス方法

- ガジェット・イベントの使用方法

- 例: 外部OpenSocialガジェットの使用方法

- 例: ローカルOpenSocialガジェットの使用方法

16.1.1 認証の構成方法

ガジェットからユーザーレベルのデータ(プリファレンスやピープル・コネクション)をリクエストするには、エンド・ユーザーのIDを確立する必要があります。いずれかのOpenSocialガジェットから、サーバーにあるユーザーレベルのデータにアクセスする必要がある場合、ページレット・プロデューサ・コンソールで、親OpenSocialリソースのセキュリティ・ポリシーを構成する必要があります(「ポリシー設定の構成方法」を参照)。ユーザーがOpenSocialガゼットに初めてアクセスすると、ログイン・ページが表示されます。初回ログイン後は、OpenSocialガゼットに対する後続のリクエストで確立されたユーザーIDが使用されます。

16.1.2 ユーザー・プリファレンスの格納方法

OpenSocialガゼットでは、ユーザー・プリファレンスを使用してコンテナでデータを格納できます。ユーザー・プリファレンスは、特定のユーザーにスコープ設定されますが、オプションで、appIdにスコープ設定することもできます(ガゼットappIdはページレットのコンテキストIDです)。OpenSocial gadget.Prefs APIを使用する場合は、ユーザー・プリファレンスはユーザーとページレット・インスタンスにスコープ設定されます。または、opensocial.DataRequest APIを使用して、他のページレットと共有可能なプリファレンスをユーザー・レベルで管理することもできます。

ページレットとして登録した場合は、ガゼットのユーザー・プリファレンスはページレット・プリファレンスとして処理されます。WebCenter Portalでは、たとえば、隠されていないユーザー・プリファレンスを、「パーソナライズ」ボタンを使用してエンド・ユーザーが編集できます。さらに、ユーザー間で共有されたプリファレンスをシミュレートするために、ページレット・パラメータを介してユーザー・プリファレンスを渡すことができます。ページレット・プリファレンスが設定されている場合は、対応するページレット・パラメータが常にオーバーライドされます(つまり、パーソナライズはカスタマイズに優先します)。

WebCenter Portalの外では、ガジェットがサポートするページレットに、プリファレンス・エディタにアクセスし、ガジェットを最大/最小化するためのガジェット・タイトルとボタンを表示する簡単なクロムが提供されます。値noneをページレット注入APIのクロム・パラメータに渡すことにより、クロムを抑止できます。プリファレンス・エディタのUIでは、次の4種類のユーザー・プリファレンスをすべてサポートしています。

- string: テキスト・フィールドとしてレンダリング

- bool: チェック・ボックスとしてレンダリング

- enum: ドロップダウン・リストとしてレンダリング

- list: テキスト・フィールドとしてレンダリング(値はパイプ「│」文字で区切る必要があります)

16.1.3 WebCenter Portalのプロファイル情報へのアクセス方法

OpenSocialガジェットでは、標準のOpenSocial APIを介して現在のユーザーのプロファイル・データとピープル・コネクションを問合せできます。この機能を使用するには、WebCenterDSデータ・ソースのターゲットとしてWC_Portletサーバーを手動で指定する必要があります(詳細は、『Oracle Fusion Middleware Oracle WebCenter Portalの管理』のページレット・プロデューサの管理に関する項を参照)。

注意:

OpenSocial APIをプロファイルや接続情報の更新に使用することはできません。

サポートされているユーザー・プロファイルのフィールドを表16-1に示します。

表16-1 ユーザー・プロファイルのフィールド

OpenSocialフィールド

タイプ

説明

aboutme

string

個人に関する一般的な説明。

addresses

Plural-Field <Address>

個人の物理メーリング・アドレス。

appData

Plural-Field <AppData>

AppDataのキーと値のコレクションで、プリファレンスに使用。

birthday

Date

個人の生年月日。値は有効な日付である必要があります。この個人の年齢がプライベートであるか、入力した年が使用不可能である場合は、年が0000に設定される場合があります。

emails

Plural-Field <string>

個人の電子メール・アドレス。

location

string

個人の物理的な住所。

name

Name

個人の実名のコンポーネントを分解して書式設定したバージョン。

organizations

Plural-Field <Organization>

個人の現在や過去の組織的な所属。

phoneNumbers

Plural-Field <string>

個人の電話番号。このタイプに正当な標準値に加え、このフィールドでは、モバイル、ファックスおよびページャなどの追加の値を定義します。

photos

Plural-Field <string>

個人の写真のURL。値は、イメージが含まれているWebページではなく、実際のイメージ・ファイル(例: GIF、JPEGまたはPNGイメージ・ファイル)を指し示す必要があります。このフィールドは、連絡先を記述する際の表示に適した連絡先プロファイル写真をダウンロードするためにのみ使用してください。

preferredUsername

string

ユーザー名を要求するサイトでの、この個人の優先ユーザー名(jsmarrやdaveman692など)。

status

string

個人のステータス、ヘッドラインまたは挨拶。

thumbnailUrl

string

文字列として指定された、個人の写真のサムネイルのURL。これは完全修飾URLである必要があります。

16.1.4 ユーザーのアクティビティ・ストリームへのアクセス方法

OpenSocialガジェットは、OpenSocial APIを使用してユーザーのアクティビティ・ストリームを操作できます。次の操作がサポートされています。

- アクティビティの取得

- アクティビティの作成

次の操作はサポートされていません。

- アクティビティの更新

- アクティビティの削除

サポートされているアクティビティ・ストリームのフィールドを表16-2に示します。

表16-2 アクティビティ・ストリームのフィールド

OpenSocialフィールド

タイプ

説明

appId

Object-Id

アクティビティが関連付けられているアプリケーション。

body

string

アクティビティのオプションの拡張バージョン。本体には次のHTMLタグ、 <b> <i>、<a>、<span>のみを含めることもできますが、このフォーマットは無視できます。

externalId

Object-Id

投稿アプリケーションで生成されるオプションのID。

id

Object-Id

アクティビティに永続的に関連付けられているID。

postedTime

string

エポック以降にアクティビティが実行された時間(ミリ秒)。

priority

number

同じソースの別のアクティビティとの関連で、該当のアクティビティの相対的な優先度を表す0から1までの数値。

title

string

アクティビティのプライマリ・テキスト。タイトルには次のHTMLタグ、 <b> <i>、<a>、<span>のみを含めることもできますが、このフォーマットは無視できます。

userId

Object-Id

アクティビティの定義対象であるユーザーのID。

16.1.5 ガジェット・イベントの使用方法

ページレット・プロデューサでは、OpenSocial PubSubガジェット間イベント・モデルをサポートしています。ガジェットでは、JavaScriptで任意の数のチャネル(単純な文字列名で定義)を通じてイベントを公開できます。受信が終了すると、ガジェットは、再びJavaScriptで任意の数のチャネルを通じてイベントの受信をサブスクライブし、イベントに応じて適切な処理を実行できます。

function connSelected(element) {
var connId =element.id;
var connName =element.lastChild.textContent;
gadgets.pubsub.publish(channel, {id: connId, name: connName});

サポートされているイベント処理APIに対する完全なJavaScriptリファレンスについては、次を参照してください。

http://docs.opensocial.org/display/OSD/Specs

16.1.6 例: 外部OpenSocialガジェットの使用方法

次の例は説明のために簡略化されています。OpenSocialガジェットをサポートするには、まず「OpenSocial設定の構成方法」の説明に従って、OpenSocialコンテナを定義する必要があります。

1. ページレット・プロデューサ・コンソールを使用して新しいリソースを作成し、タイプに「OpenSocial」を選択します。必要に応じてURLおよびポリシーを定義します。新しいリソースを保存します。

2. ページレット・プロデューサ・コンソールを使用して、新しいページレットを作成し、「ガジェットURL」フィールドにガジェットXMLスキーマの場所を入力します。

- ガジェット名およびガジェットに定義されたすべてのプリファレンスをインポートするには、「ガジェット・メタデータのインポート」ボタンをクリックします。いずれかのプリファレンスが編集可能な場合、ページレット・プロデューサは、インポートされたプリファレンスを使用してプリファレンス・エディタを作成します。

- 生成されたプリファレンス・エディタを構成またはカスタマイズするには、「ページレット・パラメータ」ページに移動します。

3. 「ドキュメント」ページに移動し、JavaScriptまたはREST APIを使用してページレットおよびプリファレンス・エディタにアクセスするためのサンプル・コードを確認します。

4. 新しいページレットを保存します。

16.1.7 例: ローカルOpenSocialガジェットの使用方法

次の例は説明のために簡略化されています。OpenSocialガジェットをサポートするには、まず「OpenSocial設定の構成方法」の説明に従って、OpenSocialコンテナを定義する必要があります。

1. ページレット・プロデューサ・コンソールを使用して新しいリソースを作成し、タイプに「OpenSocial」を選択します。必要に応じてURLおよびポリシーを定義します。新しいリソースを保存します。

2. ガジェット・ファイルを作成またはアップロードします。

注意:

OpenSocialガジェットXMLファイルをホストする場合は、このファイルを匿名リソース(セキュリティ・ポリシーなし)の下に配置する必要があります。そこに配置しないと、ガジェットが正常に機能しません。

a. リソースの下の「ファイル」セクションを選択し、ツールバーの「作成」アイコンをクリックします。

b. 「一般」ページで、「名前」フィールドにファイルへの相対パスを入力します。先行スラッシュ("/")を使用しないでください。たとえば、「gadgets/activities.xml」です。任意のパスと名前を使用できます。パスは、ページレット・プロデューサがファイルの処理に使用する仮想URLです。ナビゲータのファイル・コレクションの仮想ディレクトリ構造は、ファイルのパスに一致するように更新されます。

c. ガジェット・ファイルをアップロードまたは作成するには、「コンテンツ」ページに進みます。
ガジェット・ファイルをアップロードするには、ファイルへのパスを入力するか「参照」ボタンをクリックしてファイルに移動し、「アップロード」ボタンをクリックし、ページレット・プロデューサ・サーバーにファイルをアップロードします。

ガジェット・ファイルを作成するには、「コンテンツ」ページでエディタを使用してコンテンツを入力したり編集します。

d. ナビゲータ・ツールバーの保存アイコンをクリックします。

3. ガジェットで必要なその他のファイル(JavaScript、イメージなど)を、リソースの「ファイル」セクションで作成またはアップロードします。ガジェット・コードのパスに一致するファイルのパスを定義します。たとえば、ガジェットが"js"というサブフォルダのJavaScriptファイルを使用する場合は、ファイルをアップロードする際に「名前」フィールドにそのディレクトリ(gadgets/js/activities.jsなど)を指定します。

4. ページレット・プロデューサ・コンソールを使用して、新しいページレットを作成し、「ガジェットURL」フィールドに(ステップ2で作成またはアップロードした)ガジェットのXMLスキーマの相対パスを入力します。ローカル・ファイルの場合、これはファイル・オブジェクトの「名前」フィールドに定義されているパスと同じです(gadgets/activities.xmlなど)。

- ガジェット名およびガジェットに定義されたすべてのプリファレンスをインポートするには、「ガジェット・メタデータのインポート」ボタンをクリックします。いずれかのプリファレンスが編集可能な場合、ページレット・プロデューサは、インポートされたプリファレンスを使用してプリファレンス・エディタを作成します。

5. 「ドキュメント」ページに移動し、JavaScriptまたはREST APIを使用してページレットおよびプリファレンス・エディタにアクセスするためのサンプル・コードを確認します。

6. 新しいページレットを保存します。

16.2 WSRPおよびOracle PDK-Javaポートレットに対するページレット・クロムの使用

ページレット・プロデューサを使用すると、WSRPおよびOracle PDK-Javaポートレットを表示して任意のWebアプリケーションで使用できるようになります。この項では、ページレット・クロムを使用して、実行時にWSRPまたはOracle PDK-Javaポートレットでマークアップを変更する方法について説明します。WSRPまたはOracle PDK-Javaポートレット・プロデューサに接続するためのページレット・プロデューサの構成の詳細は、『Oracle Fusion Middleware Oracle WebCenter Portalの管理』のページレット・プロデューサの管理に関する項を参照してください。

ページレット・クロム・テンプレートは次の各方法を指定するHTMLファイルです。

- ポートレット・マークアップのスタイル・レンダリング方法

- ポートレット・タイトルの表示方法

- モード切替えオプションのレンダリング方法

デフォルトのクロム・テンプレートには、ポートレット名と、異なるモードへの切替えが可能なドロップダウン・メニューが表示されます。ドロップダウン・メニューは、基礎となるポートレットによりサポートされるすべての標準モードが動的に移入されます。テンプレートは、次の予約済トークン(表16-3を参照)を使用して主要なポートレット要素を特定していますが、これらは実行時にページレット・プロデューサによって置き換えられます。

表16-3 ページレット・クロム・テンプレートのトークン

トークン

説明

$$PORTLET TITLE$$

ポートレット・タイトル

$$REPEAT MENU ITEM$$

ナビゲーショナル・アイテムの繰返しセクションの始まりを示すために使用

$$END REPEAT MENU ITEM$$

ナビゲーショナル・アイテムの繰返しセクションの終わりを示すために使用

$$MENU ITEM URL$$

ナビゲーションURL(ポートレット・モードまたはウィンドウ状態の切替え用)

$$MENU ITEM$$

ナビゲーショナル・アイテムの名前(Customizeなど)の表示

$$TOKEN$$

ページ上のページレット・インスタンスの一意の識別子

$$PORTLET CONTENT$$

ポートレット・コンテンツ

pt://images

imageserverのURLを示すために使用されるタグ

次に、非常に単純なページレット・クロム・テンプレートの例を示します。

<script type="text/javascript">
function goto(url)
{
document.location =url;
return false;
}
</script>
<div style="border: 1px solid">
<span><b><!-- $$PORTLET TITLE$$ --></b></span>
<span style="align: right">
Switch Mode:
<select size="1" name="mode">
<!-- $$REPEAT MENU ITEM$$ -->
<option onclick="goto('$$MENU ITEM URL$$')"><!-- $$MENU ITEM$$ --></option>
<!-- $$END REPEAT MENU ITEM$$ -->
</select>

</span>
</div>
<!-- $$PORTLET CONTENT$$ -->

注意:

ページレット・クロム・テンプレート・ファイルは、ページレット・プロデューサWebアプリケーションのclasspathでホストする必要があります。

外部イメージ・サーバーを使用するようにページレット・プロデューサを構成した場合は、ensemblestatic.war/imageserver/yahooからイメージ・サーバーにファイルをコピーしてデフォルトのクロム・テンプレートが正しくレンダリングされるようにします。

クロム・テンプレートを実装するには、それをパラメータとしてページレット注入URL (RESTまたはJavaScript)に追加します。ページレット挿入URLの詳細は、「Webページへのページレットの追加」を参照してください。次に例を示します。

- REST: /inject/v2/pagelet/pagelet_lib/pagelet_name?chrome=mychrome.html

- JavaScript: injectpagelet(library, name, iframe_options, payload, params, context_id, element_id, is_in_community, chrome)

クロム・パラメータの値として、クロム・テンプレートが含まれているファイルの名前、またはすべてのクロムを抑止してポートレット・マークアップのみを返す特別な予約値「none」を指定できます。クロム・パラメータが省略された場合は、デフォルトのクロムがポートレット・マークアップとともに返されます。デフォルトのクロム・テンプレートでは、YUIメニュー・コントロールを使用してグラデーション・タイトル・バーとモード切替え用のDHTMLドロップダウン・メニューが表示されます。(ADFコンテンツが検出された場合は、デフォルトにより別のクロム・テンプレートが使用されます。このテンプレートはカスタム・テンプレートによってオーバーライドするか、chrome=chrometemplate.htmlを設定することによって標準のデフォルト・テンプレートでオーバーライドできます。)

17 カスタム・ページレットの作成

この章では、アダプティブ・ページレットのスクリプティング・フレームワークを使用する方法、ページレットおよびリソースのセキュリティ設定を構成してユーザーの認証を管理する方法、カスタムWebインジェクタおよびパーサーを使用して実行時にページレット機能を変更する方法、デバッグ用の拡張ロギング・トレースにアクセスする方法など、ページレット・プロデューサを使用したページレットの構築について詳しく説明します。

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

- アダプティブ・ページレットのスクリプティング・フレームワークの使用

- 実行時のページレット機能の変更

- ページレットのデバッグ

17.1 アダプティブ・ページレットのスクリプティング・フレームワークの使用

アダプティブ・ページレットのスクリプティング・フレームワークは、サービスをCSPページレットとプロキシされたページに提供するクライアント側JavaScriptライブラリです。この項では、スクリプティング・フレームワークを使用して動的機能をページレットに実装する方法について説明します。

注意:

CSP (およびアダプティブ・ページレットのスクリプティング・フレームワーク)は、WCIとその前のPlumtree Portalにのみ適用されます。WebCenter PortalではCSPはサポートされません。

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

- 構造化されたHTTPレスポンスの処理方法

- イベント通知の使用方法

- インプレース・リフレッシュの使用方法

- セッション・プリファレンスの使用方法

クラスとメソッドの完全リストについては、JSPortlet APIのドキュメントを参照してください。アダプティブ・ページレットの詳細は、「アダプティブ・ページレットの開発に関する必知事項」を参照してください。

17.1.1 構造化されたHTTPレスポンスの処理方法

この項では、アダプティブ・ページレットのスクリプティング・フレームワークを、通常XMLとしてエンコードされる、構造化されたHTTPのクライアント側レスポンス・ハンドラとして使用する方法について説明します。

ごく一部のユーザー・インタフェースのみを変更する必要がある場合、一部のHTTPリクエストに応じて大量のHTMLを返すのは多くの場合費用がかかり非効率的な可能性があります。これは、より複雑なユーザー・インタフェースに特に当てはまります。このような場合は、レスポンスをXMLでエンコードできます。クライアント側レスポンス・ハンドラはXMLを解析し、そのレスポンスに基づいてユーザー・インタフェースを更新(またはその他の処理を実行)できます。構造化されたレスポンス設計パターンを使用して、HTTPリクエストの作成後にユーザー・インタフェースの小領域を再描画するか、単純なHTTP/URIタイプのWebサービスにページレットからアクセスします。次のコード例 (structuredresponse_portlet.html) では、新しいサイトの選択からRSSフィードにアクセスします。

<!-- jsxml includes -->
<a id="imgServerHref" href="/images/plumtree" style="display:none"></a>
<script type="text/javascript"
src="/images/plumtree/common/private/js/PTLoader.js"></script>
<script type="text/javascript">
var oImgServer =new Object();
oImgServer.location =document.getElementById('imgServerHref').href;
var imageServerURL =document.getElementById('imgServerHref').href;
var imageServerConnectionURL =oImgServer.location;
new PTLoader(imageServerURL, imageServerConnectionURL).include('jsxml','en');
</script>

<!-- jscontrols includes -->
<link rel="stylesheet" type="text/css" href="/portal-remote-server/js/jscontrols/styles/css/PTMenu.css"/>
<link rel="stylesheet" type="text/css" href="/portal-remote-server/js/jscontrols/styles/css/PTRichTextEditor.css"/>
<script type="text/javascript" src="/portal-remote-server/js/jscontrols/strings/PTControls-en.js"></script>
<script type="text/javascript" src="/portal-remote-server/js/jscontrols/PTControls.js"></script>

<!-- Inline JS helper functions -->
-->

<script defer type="text/javascript" id="structured-response-portlet-A-script">
// Function that gets the RSS XML feed found at the specified url
getRSSFeed =function(url)
{
//First clear out any existing rows in the table
channelTable.clearRows();

//Force the transformer to fix up the url
var oURL =new Object();
oURL.location =url;

//Do the http get
var get =new PTHTTPGETRequest(oURL.location, handleRSSResponse);
get.invoke();
}

//Function that handles the RSS XML response and updates the table based on the RSS items
handleRSSResponse =function(response)
{
//Get the rss xml
var xml =response.responseText;
if (!xml ││xml.indexOf('<?xml') ==-1) {return; }

//Parse into a dom, and get the channel node
var xmlDOM =new PTXMLParser(xml);
var rssNode =xmlDOM.selectSingleNode('rss');
var channelNode =rssNode.selectSingleNode('channel');

//Get the channel title and set the status bar text in the table
var channelTitle =channelNode.selectSingleNode('title').getNodeValue();
channelTable.statusBarText ='<b>Loaded Channel</b>: ' +channelTitle;

//Get channel item nodes
var itemNodes =channelNode.selectNodes('item');

//Build table rows
channelTable.rows =new Array();
for (var i=0; i<itemNodes.length; i++)
{
var itemNode =itemNodes[i];

//Get channel item properties
var itemTitle =itemNode.selectSingleNode('title').getNodeValue();
var itemLink =itemNode.selectSingleNode('link').getNodeValue();
var itemDescription =itemNode.selectSingleNode('description').getNodeValue();
if (itemNode.selectSingleNode('author'))
var itemAuthor =itemNode.selectSingleNode('author').getNodeValue();
if (itemNode.selectSingleNode('category'))
var itemCategory =itemNode.selectSingleNode('category').getNodeValue();
if (itemNode.selectSingleNode('pubDate'))
var itemPubDate =itemNode.selectSingleNode('pubDate').getNodeValue();

//Create a row and add it to the table
var row =new PTRow();
row.parent =channelTable;
row.id =i;
row.uid =i;
row.previewText =itemDescription;
row.link =itemLink;
row.columnValues[0] =new PTTextColumnValue(itemTitle);
row.columnValues[1] =new PTTextColumnValue(itemCategory);
row.columnValues[2] =new PTTextColumnValue(itemAuthor);
row.columnValues[3] =new PTTextColumnValue(itemPubDate);
channelTable.rows[channelTable.rows.length] =row;
}

//Redraw the table
channelTable.draw();
}
</script>

<b>Select RSS Feed:</b>
<a href="#" onclick="getRSSFeed('http://www.wired.com/news/feeds/rss2/0,2610,,00.xml'); return false;">Wired News</a>
<a href="#" onclick="getRSSFeed('http://news.com.com/2547-1_3-0-5.xml'); return false;">CNET News.com</a>
<a href="#" onclick="getRSSFeed('http://partners.userland.com/nytRss/nytHomepage.xml'); return false;">NY Times</a>
<br><br>

<!-- Set up a table control to display channel items -->
<div id="channelTableContainer"></div>
<script defer type="text/javascript">
var channelTable =new PTTableControl();
channelTable.locale ='en_US';
channelTable.objName ='channelTable';
channelTable.container ='channelTableContainer';
channelTable.baseURL ='/imageserver/plumtree/common/private/portal-remote-server/js/jscontrols/1/';
channelTable.statusBarText ='No RSS Feed Selected';
channelTable.rowDetailAction =new PTJavaScriptAction('window.open(\'${ROW.link}\');');
channelTable.columns[0] =new PTColumn();
channelTable.columns[0].name ='Title';
channelTable.columns[0].width ='40%';
channelTable.columns[1] =new PTColumn();
channelTable.columns[1].name ='Category';
channelTable.columns[1].width ='20%';
channelTable.columns[2] =new PTColumn();
channelTable.columns[2].name ='Author';
channelTable.columns[2].width ='20%';
channelTable.columns[3] =new PTColumn();
channelTable.columns[3].name ='Publication Date';
channelTable.columns[3].width ='20%';
channelTable.areColumnsResizable =true;
channelTable.clientSortEnabled =true;
channelTable.scrollHeight =250;
channelTable.init();
channelTable.draw();
</script>
</div>

17.1.2 イベント通知の使用方法

この項では、アダプティブ・ページレットのスクリプティング・フレームワークにより、ページレットがどのように、その他のページレットによって生成されたページレベルのイベントとカスタム・イベントの両方に応答できるようになるかを説明します。

スクリプティング・フレームワーク内のメソッドregisterForWindowEventおよびregisterOnceForWindowEventは、ページレベルのイベントにアクセスできるページレットを指定します。完全なリストは、「スクリプティング・フレームワークでページレベルのイベントを使用する方法」を参照してください。これらのイベントの通知を登録するには、イベントの名前と、イベント発生時にコールする必要のあるメソッドの名前を渡します。ページレベルのイベントが発生すると、JavaScriptイベント・オブジェクトが引数としてイベント・ハンドラに渡されます。スクリプティング・フレームワークでは、ページレットはraiseEventおよびregisterForEventを使用してカスタム・イベントを発生させ、応答することができます。ブロードキャスト/リスナー・デザイン・パターンは、セッション・プリファレンスを指定して通知サービスを使用する重要な例です。ユーザーはアイテムを選択するか、「ブロードキャスト」ページレットで別のアクションを実行できます。これによって、その他の「リスナー」ページレットのコンテンツが再作成されます。次の例では、ブロードキャスト・ページレットによって、テキスト・ボックスに数字を入力できるフォームが表示されます。

図17-1 ブロードキャスト・ポートレット

ユーザーがテキスト・ボックスに数値を入力すると、リスナー・ページレットの値が変更されます。最初のリスナー・ページレットには、ブロードキャスト・ページレットに入力した数値の平方根が表示されます。

図17-2 リスナー1のポートレット

2番目のリスナー・ページレットには、ブロードキャスト・ページレットに入力した数値の立方根が表示されます。

図17-3 リスナー2のポートレット

次の手順では、ページレットがどのように機能するのかについてまとめています。

- ロード時に、各リスナー・ページレットは固有のインスタンス・メソッド(registerForEvent)をコールし、onBroadcastUpdateタイプのイベントを登録します。

- Enter numberテキスト・ボックスに発生するonkeyupイベントごとに、ブロードキャスト・ページレットはセッション・プリファレンスをこのテキスト・ボックスに入力された値に設定し、その固有のインスタンス・メソッド(raiseEvent)をコールしてonBroadcastUpdateタイプのイベントを生成します。

- onBroadcastUpdateイベントが発生したり、ページが再ロードされた場合は、各リスナー・ページレットがブロードキャスト・ページレットによって設定されたセッション・プリファレンスを取得し、プリファレンスの値に基づいて表示する新しい値を計算します。

ブロードキャスト・ページレット

<div style="padding:10px;" align="center">
<p><b>Enter number:</b>
&nbsp;<input type="text" style="font-size:22px;font-weight:bold;text-align:center;"
id="broadcast_prefName" value="4" size="7" onkeyup="broadcast_setPrefs(this.value)"></p>
<br>
</div>

<script type="text/javascript">
function broadcast_setPrefs(val)
{
var prefName ='broadcastNumber';
var prefValue =val;
PTPortlet.setSessionPref(prefName,prefValue);
var broadcastPortlet =PTPortlet.getPortletByGUID('{D9DFF3F4-EAE7-5478-0F4C-2DBD94444000}');

if (!broadcastPortlet)
{
broadcast_debug('Could not locate PTPortlet object which corresponds to <b>Broadcast Portlet</b> on page.');
return;
}
broadcast_debug('<b>Broadcast Portlet</b> raising onBroadcastUpdate event.');
broadcastPortlet.raiseEvent('onBroadcastUpdate',false);
}
function broadcast_debug(str)
{
if (window.PTDebugUtil)
{
PTDebugUtil.debug(str);
}
}
</script>

リスナー・ページレット#1

<div style="padding:10px;" align="center">
<p><b>Square root:</b>
<div style="height:21px;border:2px solid black;padding:2px;overflow:visible;font-size:14px;"id="listener1-swatch">
</div>
</div>

<script>
function listener1_update()
{
var broadcastNumber =parseFloat(PTPortlet.getSessionPref('broadcastNumber'));
if (isNaN(broadcastNumber))
{
listener1_error('<b>Listener-1 Portlet</b> cannot parse number from session pref broadcastNumber');
return;
}

listener1_debug('<b>Listener-1 Portlet</b> computing square root of ' +broadcastNumber);
var swatch =document.getElementById('listener1-swatch');
swatch.innerHTML =Math.sqrt(broadcastNumber);
}

function listener1_debug(str)
{
if (window.PTDebugUtil)
{
PTDebugUtil.debug(str);
}
}

function listener1_error(str)
{
if (window.PTDebugUtil)
{
PTDebugUtil.error(str);
}
}

function listener1_getPortlet()
{
var portletGUID ='{D9DFF3F4-EAE7-5478-0F4C-2DBDB4F4A000}';
var listener1Portlet =PTPortlet.getPortletByGUID(portletGUID);
return listener1Portlet;
}

var listener1Portlet =listener1_getPortlet();
if (listener1Portlet)
{
listener1Portlet.registerForEvent('onBroadcastUpdate','listener1_update');
listener1_debug('<b>Listener-1 Portlet</b> registered refreshOnEvent for event onBroadcastUpdate');
listener1Portlet.registerForEvent('onload','listener1_update');
}

</script>

リスナー・ページレット#2

<div style="padding:10px;" align="center">
<p><b>Cube root:</b>
<div style="height:21px;border:2px solid black;padding:2px;overflow:visible;font-size:14px;"id="listener2-swatch">
</div>
</div>

<script>
var listener2_oneThird =(1/3);
function listener2_update()
{
var broadcastNumber =parseFloat(PTPortlet.getSessionPref('broadcastNumber'));
if (isNaN(broadcastNumber))
{
listener2_error('<b>Listener-2 Portlet</b> cannot parse number from session pref broadcastNumber');
return;
}

listener2_debug('<b>Listener-2 Portlet</b> computing square root of ' +broadcastNumber);
var swatch =document.getElementById('listener2-swatch');
swatch.innerHTML =Math.pow(broadcastNumber,listener2_oneThird);
}

function listener2_debug(str)
{
if (window.PTDebugUtil)
{
PTDebugUtil.debug(str);
}
}

function listener2_error(str)
{
if (window.PTDebugUtil)
{
PTDebugUtil.error(str);
}
}

function listener2_getPortlet()
{
var portletGUID ='{D9DFF3F4-EAE7-5478-0F4C-2DBDCA1C7000}';
var listener2Portlet =PTPortlet.getPortletByGUID(portletGUID);
return listener2Portlet;
}

var listener2Portlet =listener2_getPortlet();
if (listener2Portlet)
{
listener2Portlet.registerForEvent('onBroadcastUpdate','listener2_update');
listener2_debug('<b>Listener-2 Portlet</b> registered refreshOnEvent for event onBroadcastUpdate');
listener2Portlet.registerForEvent('onload','listener2_update');
}

</script>

17.1.2.1 スクリプティング・フレームワークでページレベルのイベントを使用する方法

スクリプティング・フレームワークでは、次のページレベルのイベントに自動的にアクセスできます。

表17-1 ページレベルのイベント

イベント

トリガー時期:

onload

ブラウザがページをロードした直後

onbeforeunload

ページがアンロードされる(ブラウザ・ウィンドウが閉じるか別の場所に移動する)前

onunload

ページがアンロードされる(ブラウザ・ウィンドウが閉じるか別の場所に移動する)直前

onactivate

ページがアクティブ要素として設定された(フォーカスを取得した)とき

onbeforeactivate

ページがアクティブ要素として設定される(フォーカスを取得する)直前

ondeactivate

アクティブ要素が現在のページから親ドキュメントの別のページに変更されたとき

onfocus

ページがフォーカスを取得したとき

onblur

ページがフォーカスを喪失したとき

oncontrolselect

ユーザーがページのコントロールをまさに選択するとき

onresize

ページのサイズをまさに変更するとき

onresizestart

ユーザーがコントロールの選択でページのディメンションの変更を開始したとき

onresizeend

ユーザーがコントロールの選択でページのディメンションの変更を終了したとき

onhelp

ブラウザがアクティブ・ウィンドウになっている状態でユーザーが[F1]キーを押したとき

onerror

ページのロード中にエラーが発生したとき

onafterprint

関連するドキュメントが印刷されたまたは印刷プレビューされた直後

17.1.3 インプレース・リフレッシュの使用方法

この項では、ページレットで、スクリプティング・フレームワークを使用してインプレース・リフレッシュを実装することによって、ページをリフレッシュすることなく内部コンテンツを再ロードする方法について説明します。

ページレットの多くは時間に影響を受けるデータを表示します。場合によっては、ユーザーはページの残りの部分を変更またはリフレッシュすることなく、ページレット内のリンク間を移動できる必要があります。ページレット・コンテンツは、コマンドを使用する、リフレッシュ・アクションをイベントに関連付ける (refreshOnEvent)、または設定した間隔でリフレッシュするようにページレットをプログラムする(setRefreshInterval)ことでリフレッシュできます。スクリプティング・フレームワークにはまた、ページレットを開閉するためのメソッドも用意されています。次の単純な例では、リフレッシュ・ページレットに「ポートレットのリフレッシュ」ボタンが表示されます。このボタンをクリックすると、ページレットに表示される日時が更新されます。

図17-4 ポートレットのリフレッシュ

インプレース更新は、ページレット・オブジェクト・インスタンスに対してrefresh()メソッドをコールすることにより、実行されます。リフレッシュ時には、新しいURLがページレット内に表示されるように設定することもできます。(タイトル・バーはリフレッシュ時に変更できません。)

<div style="padding:10px;" align="center">
<p><button onclick="refresh_portlet()">Refresh Portlet</button></p>
<p><b>Current time is:</b><br> <span id="refreshTimeSpan"></span></p>
</div>

<script type="text/javascript">
function refresh_portlet()
{
var refreshPortlet =PTPortlet.getPortletByID($PORTLET_ID$);
if (!refreshPortlet)
{
refresh_debug('Could not locate PTPortlet object which corresponds to <b>Refresh Portlet</b> on page.');
return;
}
refresh_debug('<b>Refresh Portlet</b> calling refresh() method.');
refreshPortlet.refresh();
}

function refresh_debug(str)
{
if (window.PTDebugUtil)
{
PTDebugUtil.debug(str);
}
}

var t =new Date();
document.getElementById('refreshTimeSpan').innerHTML =t;
</script>

17.1.4 セッション・プリファレンスの使用方法

この項では、ブラウザレベルの変数が同一ページ上にない場合でも、その変数を格納してページレット間で共有する方法について説明します。たとえば、1つのページレットにユーザーが入力した値は、別のユーザーが取得できます。スクリプティング・フレームワークは仲介として機能するため、セッション・プリファレンスを使用すると、すべてのページレットで共通セッションに格納されているすべての値にアクセスできます。

ページレットはプリファレンスを使用して相互に通信できますが、プリファレンスにアクセスするには通常、データベースへのラウンドトリップが必要です。セッション・プリファレンスは、クライアント・ブラウザ内でユーザーのセッションの設定を保存および共有する手段を提供します。「マスター/ディテール」デザイン・パターンは、セッション・プリファレンスの最も基本的な使用方法です。このデザイン・パターンでは、2つのページレットの間で制御と表示が分割されます。たとえば、「マスター」ページレットではデータをリスト形式で要約し、「ディテール」ページレットではユーザーの選択に応じてデータ・アイテムごとにディテールを表示することができます。次の例では、マスター・ページレットによって、テキスト・ボックスに色コードを入力できるフォームが表示されます。

図17-5 色コード

ユーザーが色コードをテキスト・ボックスに入力すると、ディテール・ページレットに表示されている色が変更されます。

図17-6 色見本

マスター・ページレットの「色の入力」テキスト・ボックスでonkeyupが発生するたびに、次の手順が実行されます。

1. マスター・ページレットのテキスト・ボックスの現在値を使用してセッション・プリファレンスが設定されます。

2. マスター・ページレットからディテール・ページレットの更新メソッドがコールされます。

3. ディテール・ページレットにより、セッション・プリファレンスから色の値が取得されます。

4. ディテール・ページレットの色見本領域が再描画され、新しい色の値が反映されます。

注意:

共有のセッション・プリファレンスは、ページレット・プロデューサ・コンソール内のページレットの「プリファレンス」ページから名前で指定する必要があります。指定しないと、プリファレンスはページレットに送信されません。

アダプティブ・ページレットのスクリプティング・フレームワークには、ページレット間の関係を解除し、共通のイベント・インタフェースを使用して通信するための簡単な方法が用意されています。

注意:

次の例は極度に簡略化されたもので、マスター・ページレットからディテール・ページレットのJavaScriptメソッドが直接コールされます。マスター・ページレットで、ディテール・ページレットが同一ページ上に実際に存在することを確認するためのなんらかの処置を講じないかぎり、マスターからディテールに対してコールすると、エラーが発生する可能性があります。

マスター・ページレット

<div style="padding:10px;" align="center">
<p><b>Enter color:</b> &nbsp;
<input type="text" style="font-size:22px;font-weight:bold;text-align:center;" id="master_prefName"
value="#FFFFFF" size="8" onkeyup="master_setPrefs(this.value)"></p><br>
</div>

<script type="text/javascript">
function master_setPrefs(val)
{
var prefName ='masterColor';
var prefValue =val;
PTPortlet.setSessionPref(prefName,prefValue);

master_debug('<b>Master Portlet</b> called PTPortlet.setSessionPref(\'masterColor\',\'' +prefValue +'\').');

if (window.detail_update)
{
master_debug('<b>Master Portlet</b> calling detail_update().');
detail_update();
}
else
{
master_debug('Could not locate portlet <b>Detail Portlet</b> on page.');
}
}
function master_debug(str)
{
if (window.PTDebugUtil)
{
PTDebugUtil.debug(str);
}
}
</script>

ディテール・ページレット

<div style="padding:10px;" align="center">
<p><b>Color swatch</b> &nbsp;
<div style="width:100px;height:100px;border:2px solid black;padding:2px;"id="detail-swatch"></div>
<script>
function detail_update()
{
var color =PTPortlet.getSessionPref('masterColor');
detail_debug('<b>Detail Portlet</b> received value="' +color +'" for PTPortlet.getSessionPref(\'masterColor\')');

var swatch =document.getElementById('detail-swatch');
if (swatch)
{
swatch.innerHTML ='<div style="background-color:' +color +';width:100%;height:100%;"></div>';
}
else
{
detail_debug('<b>Detail Portlet</b> cannot find \'detail-swatch\' DIV element.');
}
}

function detail_debug(str)
{
if (window.PTDebugUtil)
{
PTDebugUtil.debug(str);
}
}
</script>

17.1.5 アダプティブ・ページレットの開発に関する必知事項

次のヒントは、アダプティブ・ページレットのスクリプティング・フレームワークを使用するほとんどのページレットに当てはまります。

- すべてのフォームと関数に一意の名前を使用します。一意の名前と値の形成にページレットのGUIDを使用し、ページ上の他のコードと名前の衝突が発生しないようにします。

- すべてのURLをプロキシします。コール元のページと異なるホスト/ポートを持つURLに対するリクエストを作成することはできません。JavaScriptを通じてリクエストされるURLはすべてプロキシする必要があります。

- アダプティブ・ページレットのスクリプティング・フレームワークを使用している場合は、サポートをチェックします。コンポーネントが存在するかどうかを判断するコードを組み込むことをお薦めします。理想的には、ページレットでいずれの状況も処理できる必要があります。最も簡単な解決方法は、スクリプティング・フレームワークがサポートされていない場合にユーザーに警告を行うIf文を備えたコードを優先することです。

<script>
if (PTPortlet ==null)
{
if (document.PCC ==null)
{
alert("This pagelet only works in portals that support the JSPortlet API .
The pagelet will be displayed with severely reduced
functionality. Contact your Administrator.");
}
}
else
{
[scripting code here]
}
</script>

- ウィンドウが閉じるときに、ページレットによって開かれたポップアップ・ウィンドウをすべて閉じます。onunloadイベントを使用してポップアップ・ウィンドウを閉じる場合に、スクリプティング・フレームワークを使用できます。

- 必要なすべてのJavaScriptを前もってページに追加しておきます。innerHTMLプロパティを使用してページに追加されたスクリプト・ブロック/インクルードは、ブラウザで処理されない場合があります。

- Microsoft Internet Explorer: スクリプト・タグにdefer(遅延)属性を追加します。

- Netscape: RegExpを使用してレスポンスを解析し、スクリプトを見つけて評価します。

- JavaScript HTTPとプロキシされたHTTPで同じ認証資格証明を使用する必要があります。JavaScriptで仲介されたHTTPリクエストからは、ゲートウェイ処理された正常なHTTPリクエストの作成時と同じ認証トークン(cookie)が送信されます。

17.2 実行時のページレット機能の変更

この項では、カスタム・インジェクタおよびパーサーを使用して、実行時にページレット機能を変更する方法について説明します。

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

- Webインジェクタの使用方法

- カスタム・パーサーの使用方法

17.2.1 Webインジェクタの使用方法

Webインジェクタは、プロキシされているリソース・ページの指定の場所にコンテンツを挿入します。コンテンツには、HTML、CSS、JavaScriptおよびページレット宣言などのテキストを指定できます。ページから不要なコンテンツを削除するために空のインジェクタを使用することもできます。インジェクタをOpenSocialリソース用に作成することはできません。単純なHTMLコンテンツの注入についてはユース・ケースが限られていますが、ページレットのHTMLマークアップを直接変更するJavaScriptを注入することもできます。Webインジェクタの作成の詳細は、「Webインジェクタの作成」を参照してください。

17.2.2 カスタム・パーサーの使用方法

カスタム・パーサーを使用すると、コンテンツを解析し、URLを検索するための組込みのロジックを補足したり変更できます。組込みのパーサーがURLの識別やURLとしてリライトしてはいけないセクションの識別に失敗した場合は、カスタム・パーサーを使用してデフォルトの動作を変更できます。パーサーは、WSRPまたはOracle PDK-Javaポートレット・プロデューサ用に、あるいはOpenSocialガジェット・プロデューサ用に作成することはできません。カスタム・パーサーの作成の詳細は、「カスタム・パーサーの作成」を参照してください。

17.3 ページレットのデバッグ

この項では、ページレットのデバッグに拡張ロギング・トレースを使用する方法について説明します。ロギングは、ページレット・プロデューサ・コンソールの「設定」セクションで構成され、ここで、ページレット・プロデューサの各コンポーネントについて様々なレベルのロギングを定義できます。詳細は、「ページレット・プロデューサ設定の構成」を参照してください。

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

- HTTPリクエストおよびレスポンスの表示方法

- 変換コンテンツの表示方法

17.3.1 HTTPリクエストおよびレスポンスの表示方法

ページレット・プロデューサによって送受信されたHTTPリクエストおよびレスポンスを表示するには、ロギング設定ページで「HTTP」コンポーネントを「最も詳細」に設定します。「ページレット・プロデューサによって受信されたHTTPリクエスト」、「ページレット・プロデューサによって送信されたHTTPレスポンス」、「ページレット・プロデューサによって送信されたHTTPリクエスト」および「ページレット・プロデューサによって受信されたHTTPレスポンス」のトレースは、テスト環境から取得したものです。

ページレット・プロデューサによって受信されたHTTPリクエスト

URL: http://example.com:7001/pagelets/bidwiki/includes/js/ajax.js
METHOD: GET
SESSION ID: GdYGNJzMhxy1CJBMVTX8xTNq32GmLXYNY9VqFBcdprFnhcyQtzdp!1377086614!1305769149498
HEADERS:
Host: example.com
Connection: keep-alive
Referer: http://example.com:7001/pagelets/bidwiki/dashboard.action
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.205 Safari/534.16
Accept: */*
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8,ru;q=0.6,it;q=0.4
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
If-None-Match: W/"736-1124953206000"
If-Modified-Since: Thu, 25 Aug 2012 07:00:06 GMT
COOKIES:
JSESSIONID: GdYGNJzMhxy1CJBMVTX8xTNq32GmLXYNY9VqFBcdprFnhcyQtzdp!1377086614

ページレット・プロデューサによって送信されたHTTPレスポンス

URL: http://example.com:7001/pagelets/bidwiki/styles/main-action.css
Response Code: 200
Reason:
HEADERS:
Date: Thu, 19 May 2011 01:39:14 GMT
Content-Type: text/css;charset=UTF-8
Server: Apache-Coyote/1.1
BODY:
.sidebar {
/*background-image: url(http://example.com:7001/pagelets/bidwiki/download/ resources/leftnav_bg.jpg);*/
/*background-repeat: repeat-y;*/
background-color: #F0F0F0;
/*border-bottom:1px solid #F0F0F0;*/
} ...

ページレット・プロデューサによって送信されたHTTPリクエスト

URL: http://xmlns.oracle.com/includes/js/ajax.js
METHOD: GET
HEADERS:
CSP-Ensemble-REST-API: http://example.com:7001/pagelets
X-Client-IP: example.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.205 Safari/534.16
CSP-Session-Username: weblogic
Accept-Language: en-US,en;q=0.8,ru;q=0.6,it;q=0.4
CSP-Gateway-Type: Proxy
PT-Proxy-Passes: 1
If-Modified-Since: Thu, 25 Aug 2012 07:00:06 GMT
CSP-Protocol-Version: 1.4
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
Accept-Encoding: gzip,deflate,sdch
Referer: http://example.com:7001/pagelets/bidwiki/dashboard.action
If-None-Match: W/"736-1124953206000"
Accept: */*
CSP-Aggregation-Mode: Single
PT-Proxy-instance0: {DECBB085-D891-72CF-2B75-005E7FE20000}
CSP-Gateway-Specific-Config: PT-User-Name=weblogic,PT-Guest-User=0,...

ページレット・プロデューサによって受信されたHTTPレスポンス

Original URI: http://xmlns.oracle.com/styles/main-action.css
Effective URI: http://xmlns.oracle.com/styles/main-action.css
Status Code: 200
Reason: OK
Version: HTTP/1.1
HEADERS:
Content-Type: text/css;charset=UTF-8
Content-Length: 29178
Server: Apache-Coyote/1.1
Date: Thu, 19 May 2011 01:39:14 GMT
TRAILERS:
BODY:
body, p, td, table, tr, .bodytext, .stepfield {
font-family: Verdana, arial, sans-serif;
font-size: 11px;
line-height: 16px;
color: #000000;
font-weight: normal;
}

17.3.2 変換コンテンツの表示方法

変換の前後にページレット・プロデューサによってプロキシされたコンテンツを表示するには、ロギング設定ページで「変換」コンポーネントを「最も詳細」に設定します。これらのトレースの目的は、変換の様々な段階でレスポンス・コンテンツをログに記録して、それらを比較したり、異なる変換の結果を表示できるようにすることです。次の各例のトレース例は、テスト環境から取得したものです。

例: 未変換のマークアップ

Original request: URL: http://example.com:7001/pagelets/bidwiki/styles/main-action.css
METHOD: GET
SESSION ID: GdYGNJzMhxy1CJBMVTX8xTNq32GmLXYNY9VqFBcdprFnhcyQtzdp!1377086614!1305769149498
HEADERS:
Host: example.com:7001
Connection: keep-alive
Referer: http://example.com:7001/pagelets/bidwiki/dashboard.action
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.205 Safari/534.16
Accept: text/css,*/*;q=0.1
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8,ru;q=0.6,it;q=0.4
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
COOKIES:
JSESSIONID: GdYGNJzMhxy1CJBMVTX8xTNq32GmLXYNY9VqFBcdprFnhcyQtzdp!1377086614

Untransformed content:
body, p, td, table, tr, .bodytext, .stepfield {
font-family: Verdana, arial, sans-serif;
font-size: 11px;
line-height: 16px;
color: #000000;
font-weight: normal;
}

例: 変換済のマークアップ(トランスフォーマ・クラスによって変換)

Transformed by: class com.plumtree.server.impl.portlet.transformers.CSSTurboParser
Original request: URL: http://example.com:7001/pagelets/bidwiki/styles/main-action.css
METHOD: GET
SESSION ID: GdYGNJzMhxy1CJBMVTX8xTNq32GmLXYNY9VqFBcdprFnhcyQtzdp!1377086614!1305769149498
HEADERS:
Host: 10.148.118.211:7001
Connection: keep-alive
Referer: http://example.com:7001/pagelets/bidwiki/dashboard.action
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US) AppleWebKit/534.16 (KHTML, like Gecko) Chrome/10.0.648.205 Safari/534.16
Accept: text/css,*/*;q=0.1
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8,ru;q=0.6,it;q=0.4
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
COOKIES:
JSESSIONID: GdYGNJzMhxy1CJBMVTX8xTNq32GmLXYNY9VqFBcdprFnhcyQtzdp!1377086614

Transformed content:
body, p, td, table, tr, .bodytext, .stepfield {
font-family: Verdana, arial, sans-serif;
font-size: 11px;
line-height: 16px;
color: #000000;
font-weight: normal;
}

18 Webアプリケーションでのページレットの使用

この章では、WebまたはWebCenter Portalページにページレットを追加する方法について説明します。

注意:

ページレットを任意のWebアプリケーションに追加する前に、『Oracle Fusion Middleware Oracle WebCenter Portalの管理』のポータル、テンプレート、アセットおよび拡張機能のデプロイに関する項の説明に従って、ページレット・プロデューサでリソースとページレットをデプロイして構成しておく必要があります。

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

- Webページへのページレットの追加

- ポータル・ページへのページレットの追加

18.1 Webページへのページレットの追加

ページレットをデプロイすると、次の操作が可能です。

- 簡単なJavaScript関数を使用して、ページレットをプロキシされていないページに挿入すること。

- ページレット・プロデューサからリソースおよびページレットに関する情報を取得し、ページレット・プロデューサのREST APIを使用してページレットをプロキシされたページおよびプロキシされていないページに挿入すること。

- ページレット挿入関数を使用してページレット・コンテンツをカプセル化するIFrameのサイズを自動的に変更すること。

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

- JavaScriptを使用したページレットの挿入方法

- RESTを使用したページレットへのアクセス方法

- IFrameでの自動サイズ変更の使用方法

18.1.1 JavaScriptを使用したページレットの挿入方法

簡単なJavaScript機能を使用して、ページレットをプロキシされていないページに挿入できます。

この機能をアクティブにするには、次のHTMLスニペットをページの<HEAD>セクションに追加します。

<script type="text/javascript" src="http://proxy:port/pagelets/inject/v2/csapi">
</script>

このスクリプトを実行すると、すべてのCSAPIおよびページレット注入関数がページレットを表示するページに注入されます。注入されたセクションの1つには、次の関数があります。

function injectpagelet(library, name, iframe_options, params, context_id, element_id, is_in_community, chrome, forward_params)
{
...
}

この関数は、ページレットをウィジェットとして親ページに注入します。メソッド・インタフェースでは、次のパラメータが使用されます。

- library: 必須。注入するページレットのライブラリ名を表す文字列です。Unicode文字と数字のみ使用でき、スペースを含めることはできません。

- name: 必須。注入するページレットの名前を表す文字列です。Unicode文字と数字のみ使用でき、スペースを含めることはできません。

- iframe_options: ページレット・コンテンツの周囲にIFRAMEを使用するかどうかを指定します。IFRAMEオプションのサンプルは、iframe width=100% height=auto frameborder=0のようになります。省略または空白のままにすると、ページレット・コンテンツがインラインにレンダリングされます。

- params: 問合せ文字列形式のページレット・パラメータ。たとえば、 'param1=value1&param2=value2&param3=value3'のようになります。

- context_id: ページレット・インスタンスの外部識別子で、プリファレンスのスコープをページレット・プロデューサ・サーバーに設定するために使用されます。整数を指定する必要があります。

- element_id: ページレット・コンテンツの注入先のHTML要素IDです。省略されたまたは空白のままの場合は、injectpageletコールが評価された場合に、document.write()を使用してページレット・コンテンツが注入されます。

- is_in_community: このページレットがコミュニティまたはグループ・ページのいずれにあるのかを指定します。値がtrueに設定されている場合は、コミュニティIDヘッダーのcontext_idがページレットに送信されます。デフォルトはfalseです。

- chrome: WSRP/JPDKページレット用に使用するChromeテンプレートの名前を指定します。Chromeが表示されないようにするには、値にnoneを指定します。

- forward_params: 問合せ文字列引数を消費ページからバックエンド・サーバーに転送するかどうかを指定します。この機能を抑制するには、値falseを使用します。

注意:

これらの引数は前後関係に依存しているため、所定の順番で指定する必要があります。特定の引数を指定せずに後続の引数を指定するには、指定しない引数を空の値('')で渡す必要があります。libraryおよびnameを除くすべての引数はオプションです。

このスクリプトによって、injectpagelet関数への参照を含む、一意の名前を持つ新しい<div>も作成されます。次に例をいくつか示します。

<div>
<script type="text/javascript">
injectpagelet('library', 'name');
</script>
</div>

<div>
<script type="text/javascript">
injectpagelet('library', 'name', 'iframe', 'payload', 'param1=value1&param2=value2&param3=value3');
</script>
</div>

<div>
<script type="text/javascript">
injectpagelet('library', 'name', 'iframe width=100% height=200', 'payload');
</script>
</div>

18.1.1.1 JavaScriptを使用したプリファレンス・エディタの追加方法

injecteditor関数を使用すると、ユーザーがこの機能をサポートするページレットに個人プリファレンスと共有プリファレンスを設定できるようにするプリファレンス・エディタを追加できます。この機能は、WebCenter Portalのパーソナライズ機能とカスタマイズ機能に似ています。

injecteditor(library, name, type, iframe_options, context_id, element_id, is_in_community, chrome)

説明:

- library: 必須。注入するページレットのライブラリ名です。Unicode文字と数字のみ使用でき、スペースを含めることはできません。

- name: 必須。注入するページレットの名前です。Unicode文字と数字のみ使用でき、スペースを含めることはできません。

- type: エディタのタイプ。この引数では、値admin、pagelet、communityをサポートします。community引数の場合は、context_idがコミュニティID CSPヘッダーのページレットに送信されます。

- iframe_options: ページレット・エディタのコンテンツの周りにIFRAMEを使用するかどうかを指定します。IFRAMEオプションのサンプルは、iframe width=100% height=auto frameborder=0のようになります。省略または空白のままにすると、エディタ・コンテンツがインラインにレンダリングされます。

- context_id: ページレット・インスタンスの外部識別子で、プリファレンスのスコープをページレット・プロデューサ・サーバーに設定するために使用されます。整数を指定する必要があります。

- element_id: ページレット・コンテンツの注入先のHTML要素IDです。省略または空白のままにすると、 injecteditorコールが評価された場合に、document.write()を使用してページレット・コンテンツが注入されます。

- is_in_community: このページレットがコミュニティまたはグループ・ページのいずれにあるのかを指定します。値がtrueに設定されている場合は、コミュニティIDヘッダーのcontext_idがページレットに送信されます。デフォルトはfalseです。

- chrome: WSRP/JPDKページレット用に使用するChromeテンプレートの名前を指定します。Chromeが表示されないようにするには、値にnoneを指定します。

注意:

これらの引数は前後関係に依存しているため、所定の順番で指定する必要があります。特定の引数を指定せずに後続の引数を指定するには、指定しない引数を空の値('')で渡す必要があります。libraryおよびnameを除くすべての引数はオプションです。

18.1.2 RESTを使用したページレットへのアクセス方法

Representational State Transferを表すRESTは、HTTPを介してAPIを提供する簡単な手法です。RESTの基本原則は次のとおりです。

- API URLは汎用的なメソッド・エンドポイントではなくリソースを指します。

- リクエストでは、簡素化されたCRUDメソッドに標準のHTTP動詞を使用します。これは読取り専用APIで、GETリクエストのみを許可します。

- すべてのリクエストは、取得したオブジェクト(ページレットまたはリソース)の完全表現を返します

ページレット・プロデューサREST APIには、次の機能があります。

- ページレットをプロキシされていないページに挿入して、ページレット・プロデューサがOracle WebCenter Interaction、Oracle WebLogic Portalまたはその他のサード・パーティ・ポータルのポートレット・プロバイダとして動作できるようにします

- リモートWebサービスで、リソースとページレットに関する情報をページレット・プロデューサから取得できます。

この項では、次の項目について説明します。

- ページレット挿入APIに関する必知事項

- データ取得APIに関する必知事項

18.1.2.1 ページレット挿入APIに関する必知事項

ページレット注入URLは、リモート・ポートレットの場所を指定するためにポータルで使用できます(この方法でページレットをポートレットとして使用できます)。また、挿入URLを、HTMLページでIFrameタグのソース属性として使用することもできます。

URLは次の形式を使用する必要があります。

http://host:port/pagelets/inject/v2/pagelet/libraryname/pageletname?content-type=html

ここで、librarynameおよびpageletnameは、ページレット・プロデューサで構成されたライブラリとページレットを参照します。

注意:

ページレット挿入APIをOracle WebCenter InteractionでポートレットWebサービスのURLとして使用する場合は、URLの"pagelet"を"portlet"に変更する必要があります。たとえば、前述のURLは次のようになります。

http://host:port/pagelets/inject/v2/portlet/libraryname/pageletname?content-type=html

前述のコールに対する問合せ文字列引数は、ページレットが返される方法を定義します。次のパラメータが定義されます。

- instanceid: オプション。ページレットのインスタンスIDで、ページ上のページレットを一意に識別し、ページレット間通信を容易にするために使用されます。ページに対して一意である必要があります。

- context: オプション。ページレットのインスタンスの外部識別子で、ページレット・プロデューサ・サーバー上でのプリファレンスのスコーピングに使用されます。整数を指定する必要があります。

- content-type: 戻り型。次の3つの型がサポートされています。

- javascript: 注入可能なコードが返されます。

- html: ページレット・マークアップがそれに関連付けられたPTPortletオブジェクトとともに返されます。

- iframe: ページとの直接インラインを実行するかわりにIFrameにページレットのコンテンツを入力して、注入APIを再び指し示すIFrameを返します。IFrameは、一連の問合せ文字列パラメータを指定することによってスタイルを設定できます。

パラメータ

説明

デフォルト

ifwidth

IFrameの幅を設定します。パーセント'%'またはピクセル'px'で指定できます。例: ifwidth=500px。'auto'に設定すると、コンテンツの幅に収まるようにIFrameを自動的にサイズ変更できます。詳細は、「IFrameでの自動サイズ変更の使用方法」を参照してください。

100%

ifheight

IFrameの高さを設定します。パーセント'%'またはピクセル'px'で指定できます。例: ifheight=500px。'auto'に設定すると、コンテンツの幅に収まるようにIFrameを自動的にサイズ変更できます。詳細は、「IFrameでの自動サイズ変更の使用方法」を参照してください。

デフォルトなし

ifborder

IFrameの境界を設定します。

'none'

ifalign

IFrame内の位置あわせ規則を設定します(ifalign=centerなど)。

デフォルトなし

ifdesc

IFrameの説明を設定します。

デフォルトなし

ifmarginheight

マージンの高さを設定します。パーセント(%)またはピクセル(px)単位で指定できます(ifmarginheight=500pxなど)。

デフォルトなし

ifmarginwidth

マージンの幅を設定します。 パーセント(%)またはピクセル(px)単位で指定できます(ifmarginwidth=500pxなど)。

デフォルトなし

ifscrolling

IFrameのスクロールバーを設定します。許容される値は、yes、no、autoです。

auto

ifstyle

IFrameのCSSスタイルを設定します

デフォルトなし

ifclass

IFrameのCSSクラスを設定します。

デフォルトなし

- csapi: オプション。CSAPIをページレット・レスポンスに含めるかどうかを設定します(trueまたはfalse)。CSAPIの組込みはオプションですが、レスポンスに含まれるページレットは、ページレットがレンダリングされるページ上に存在するCSAPIライブラリに依存します。csapi=falseの場合は、CSAPIライブラリは親ページ(通常はHEADセクション)に含まれる必要があります。

- onhtttperror: オプション。ページレット・リクエストの結果として403、404またはその他のエラー・コードが発生する場合は、ページレット・プロデューサは、ユーザーに表示するためにエラー・コードとエラー・ページ自体をブラウザに転送できます。onhttperrorパラメータは次の値を受け入れます。

- comment (デフォルト): ページレット・プロデューサは失敗したページレットのかわりにHTMLコメントを生成します(失敗したページレットは単に表示されないだけです)。

- inline: ページレット・エラーはサーバー・エラー・ページとともにインラインに表示されます。この場合、ページレットは通常、ページに表示されます。

- fullpage: httpエラーはページ全体を消費します。このモードは、ページレット・プロデューサが親ページを制御する場合にのみ使用可能です。

- inline-refresh: オプション。有効な値はtrueまたはfalse (デフォルト)です。inline-refreshオプションをtrueに設定した場合、ページレット・プロデューサは、ページレット・マークアップをページに埋め込むためにiFrameを使用しません。ユーザーがページレットと相互作用するときに、マークアップがインラインで更新されるため、inline-refreshという名前が付いています。これを行うために、ページレット・プロデューサは、かわりにJavaScriptメソッド・コールを使用するようページレット・マークアップ内のURLをリライトします。つまり、ユーザーがリンクをクリックするか、フォーム・リクエストをバックエンドに送信すると、この処理がブラウザ上でJavaScriptによって実行され、その後レスポンスが動的に挿入されます。
inline-refreshオプションは、HTMLマークアップが比較的単純な場合、適切に機能します。ページレットで、ADFタスク・フローなどの機能豊富なUIが公開される場合、inline-refreshは適切に機能しないか、単純に中断が発生する可能性があります。このため、inline-refreshオプションはデフォルトでfalseに設定されています(つまり、ページレット・マークアップがiFrame内に挿入されます)。

次のURLの例は、samplesライブラリのlinkspageletを指します。

http://host:port/pagelets/inject/v2/pagelet/samples/linkspagelet?content-type=iframe&csapi=true&ifheight=123px&ifclass=myclass

このURLは、次のコードに似たマークアップになります。

注意:

IFrameソースは元の注入APIを指しますが、今回、content-typeパラメータはhtmlに設定されます。この機能により、ページレットの取得で手順が追加されます。csapiパラメータは、後続のコールでtrueに設定され、IFrameコンテンツを取得して必須のCSAPIコンテンツがIFrameに格納されるようにします(これが当てはまらない場合は、ページレット・コードはIFrameの外に格納されているCSAPIスクリプトにアクセスできないため、JavaScript解決エラーが返されます)。

<html>
<head>
</head>
<body>
<iframe frameborder="none" class="myclass" width="100%" height="123px" scrolling="auto" src="http://proxy:port/inject/v2/pagelet/samples/linkspagelet?asdg=asdfgas&param=true&content-type=html&jswrap=false&csapi=true">
<html>
<head>
<script src="http://proxy:loginserverport/loginserver/ensemblestatic/imageserver/plumtree/common/private/js/jsutil/LATEST/PTUtil.js" type="text/javascript"> </script>
<script src="http://proxy:loginserverport/loginserver/ensemblestatic/imageserver/plumtree/common/private/js/jsutil/LATEST/PTDateFormats.js" type="text/javascript"></script>
<script src="http://proxy:loginserverport/loginserver/ensemblestatic/imageserver/plumtree/common/private/js/jsxml/LATEST/PTXML.js" type="text/javascript"></script>
<script src="http://proxy:loginserverport/loginserver/ensemblestatic/imageserver/plumtree/common/private/js/jsportlet/LATEST/PTPortletServices.js" type="text/javascript"></script>
</head>

<body>
<div id="pt-pagelet-content-1" class="pagelet-container" style="display: inline;">
<span xmlns:pt="http://www.xmlns.oracle.com/xmlschemas/ptui/">
Pagelet links:
<br/>
<a href="http://proxy:port/inject/RP_PID393219_I1/headpagelet1.html">The first pagelet</a>
<br/>
<a href="http://proxy:port/inject/RP_PID393219_I1/headpagelet2.html">The second pagelet</a>
<br/>
<a href="http://proxy:port/inject/RP_PID393219_I1/csapipagelet.html">The csapi pagelet</a>
<br/>
<a href="http://proxy:port/inject/RP_PID393219_I1/linkspagelet.html">This pagelet</a>
<br/>
</span>
</div>
</body>
</html>
</iframe>
</body>
</html>

18.1.2.2 データ取得APIに関する必知事項

ページレット・プロデューサからデータを取得するには、次の2つのREST APIが使用できます。

- ページレットAPI: リモート・アプリケーションを使用してページレット・プロデューサからページレット・データを取得できます。(「すべてのページレット」および「ライブラリおよび名前別ページレット」の例を参照してください。)

- リソースAPI: リモート・アプリケーションを使用してページレット・プロデューサからリソース・データを取得できます。(「すべてのリソース」および「名前別リソース」の例を参照してください。)

すべてのリクエストの基本のURLは、 http://host:port/pagelets/restservice/pageletproducer/です。

例: すべてのページレット

http://host:port/pagelets/restservice/pageletproducer/pagelets/
http://host:port/pagelets/restservice/pageletproducer/pagelets/?format=xml

例: ライブラリおよび名前別ページレット

http://host:port/pagelets/restservice/pageletproducer/pagelet/libraryname/pageletname/
http://host:port/pagelets/restservice/pageletproducer/pagelet/libraryname/pageletname/?format=xml

例: すべてのリソース

http://host:port/pagelets/restservice/pageletproducer/resources/
http://host:port/pagelets/restservice/pageletproducer/resources/

例: 名前別リソース

http://host:port/pagelets/restservice/pageletproducer/resource/name
http://host:port/pagelets/restservice/pageletproducer/resource/name/?format=xml

18.1.3 IFrameでの自動サイズ変更の使用方法

ページレット・プロデューサ・ページレット注入APIは、ページレット・コンテンツをカプセル化するIFrameのサイズを自動的に変更できます。IFrameがストレッチして中のコンテンツに合うようにサイズ変更が行われます。この機能を使用するには、次の例に示すように、ifwidthおよびifheightパラメータをautoに設定する必要があります。

http://proxy:port/inject/v2/pagelet/samples/linkspagelet?content-type=iframe&csapi=true&ifheight=auto&ifwidth=auto&ifclass=myclass

さらに、この機能はコンシューマ・ページと同じドメイン上にある外部ページに依存します。このページは、内部非表示IFrameとしてページレットIFrameに格納されます。このページでは、サイズ設定情報を収集して親コンシューマ・ページに渡します。このページは、コンシューマ・ページと同じディレクトリにデプロイする必要があります。

次の例では、ロードの終了後に、ページレットIFrameのサイズが変更されます。初回ロード後に動的自動サイズ変更機能をユーザー対話型アクティビティに追加するには、マウスやキーボードのイベントについてイベント・リスナーをさらに追加するだけで済みます。

<html>
<head>
<title>Resizing Page</title>
<script type="text/javascript">
function onLoad() {
var params =window.location.search.substring( 1 ).split( '&' );
var height;
var width;
var iframe;

for( var i =0, l =params.length; i < l; ++i ) {
var parts =params[i].split( '=' );
switch( parts[0] ) {
case 'height':
height =parseInt( parts[1] );
break;
case 'width':
width =parseInt( parts[1] );
break;
case 'iframe':
iframe =parts[1];
break;
}
}
window.top.updateIFrame( iframe, height, width );
}

if (window.addEventListener) {
window.addEventListener("load", onLoad, false)
}else if (window.attachEvent) {
window.detachEvent("onload", onLoad)
window.attachEvent("onload", onLoad)
}else {
window.onload=onLoad
}
</script>
</head>
<body>
</body>
</html>

18.2 ポータル・ページへのページレットの追加

ページ・エディタを使用して、ページレットをポータル・ページに追加します。デフォルトでは、ページレットは「デフォルト・ポータル・カタログ」の「マッシュアップ」フォルダに表示されます。ページレットをページに追加するには、リソース・カタログでそのページレットに移動して選択します。

リソースをポータル内のページに追加する方法の詳細は、『Oracle Fusion Middleware Oracle WebCenter Portalでのポータルの構築』のページでのリソース・カタログ・コンポーネントの追加と編集に関する項を参照してください

ページレットをページ内で構成するには、該当のページを編集モードで表示し、ページレットの「アクション・メニューの表示」をクリックして「パラメータ」を選択します。

19 ページレットの作成: 例および高度なトピック

この章では、Oracle WebCenter Portalのページレット・プロデューサを使用したページレットの作成方法について例を示します。

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

- 単純なページレットの作成(例)

- WebCenterポータルでのページレットの消費(例)

- WebCenterポータルでのページレットの消費(例)

- WebCenter Interactionでのページレットの消費(例)

- Oracle WebCenter Sitesでのページレットの消費(例)

- WSRPポートレットのページレットとしての消費

- カスタムADFタスクフローをWSRPポートレットとして公開

- サイトにおけるWebCenter Portalサービスのページレットとしての消費

- EBS11iを使用したページレットとしてのアプリケーションの消費

- ページレット・プロデューサを使用したOpenSocialガジェットの消費

- 有効なジオメトリ管理とページ区切りのガイドライン

- 高度なURLリライト

19.1 単純なページレットの作成(例)

この項では、ページレット・プロデューサを使用してWebページをプロキシする方法について簡単に説明します。ここでは、単純な静的Webページ"Hello World"をプロキシし、そのページから1つのセクションを切り取り、後からWebCenter PortalやWebCenter Interactionで挿入できるページレットとして独自のアプリケーション・ページに表示します。

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

- ページレット・プロデューサの初期設定の構成

- リソースの作成

- ページレットの作成

- ページレットのクリップ

19.1.1 ページレット・プロデューサの初期設定の構成

この例では、ページレット・プロデューサ・サーバーがhttp://pageletserver.company.com:8889/pagelets/で実行されているものとします。

1. まず、そのページレット・プロデューサが稼働しているかどうかを確認します。
これを行うには、単純にそのURL (http://pageletserver.company.com:8889/pagelets/など)にアクセスする必要があります。図19-1に、返される結果を示します。

図19-1 ページレット・プロデューサのようこそページ

2. 管理者資格証明を使用して、ページレット・プロデューサの管理画面にログインします。
たとえば、http://pageletserver.company.com:8889/pagelets/adminを使用します

図19-2 ページレット・プロデューサの管理画面

3. プロキシ・サーバーを経由してインターネットに接続する場合は、ページレット・プロデューサ設定でプロキシを構成する必要があります。

a. ナビゲータ・ペインの「移動先」ドロップダウン・リストで、「設定」を選択します。

b. 「プロキシ」をクリックします。

c. 図19-3に示すように、プロキシ・サーバーの構成を入力します。

図19-3 ページレット・プロデューサのプロキシ設定

19.1.2 リソースの作成

まず、Webページのリソースを作成する必要があります。これにより、ページレット・プロデューサに、Webページのすべてのサブパスをプロキシする必要があることが通知されます。また、Webページのプロキシ方法に関する共通ルールの設定が可能になり、ページレットのコンテナとして提供されます。

1. ナビゲータ・ペインの「移動先」ドロップダウン・リストから、「リソース」を選択します。

2. いずれかの既存のリソースをクリックします(welcome_resourceなど)。

3. 「選択したタイプの作成」をクリックします。

4. 「プロデューサ・タイプの選択」ダイアログから「Web」を選択し、「OK」をクリックします。

5. リソースを作成したら、ナビゲーション・ペインの「全般」ノードをクリックし、次の値を指定します(図19-4を参照)。

- 名前: AppServer

- ソースURL: http://appserver.company.com:1234/

- 宛先URL: /appserver/

図19-4 ページレット・プロデューサの「全般」設定ページ

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

リソースを作成すると、WebページにURL: http://pageletserver.company.com:8889/pagelets/appserver/からアクセスできるようになります

図19-5 Hello Worldページレット

元のWebページ・アドレスのソースURLは、ページレット・プロデューサのURL (http://pageletserver.company.com:8889/pagelets)と宛先URLを組み合せたものに置き換えられています。

19.1.3 ページレットの作成

次はHello Worldページレットを作成します。

1. 「リソース」ノードの下にある新しく作成された「AppServer」ノードを開きます。

2. 「選択したタイプの作成」をクリックします。

3. 新しく作成したページレットの「全般」ノードをクリックし、次の値を指定します(図19-6を参照)。

名前: Hello_World

ライブラリ: MyLib

ライブラリは、論理グループ化に使用します。ポータルでは、ライブラリの値を使用して、ページレットをそれぞれのUIにグループ化します。たとえば、ページレットをWebCenter Portalポータルに追加すると、「ライブラリ」の下に個々のページレットがリストされます。

URL接尾辞: helloworld/index.html

URL接尾辞は、Hello WorldページのHTMLの提供元です。

図19-6 Hello Worldページレットのページレット・プロデューサ設定

4. 「保存」をクリックします。

ライブラリ名には任意の名前を指定でき、リソース名と一致している必要はありません。これはページレットの論理グループ化に使用されます。また、ページレットを複数のリソースから同じライブラリに含めたり、ページレットごとに新しいライブラリを作成できます。

ページレットを保存したら、次の場所からそのページレットにアクセスできます。

http://pageletserver.company.com:8889/pagelets/inject/v2/pagelet/MyLib/Hello_World

つまり、次のようになります。

http://pageletserver.company.com:8889/pagelets/inject/v2/pagelet/ +[Library] +[Name]

また、iFrameへのページレットの挿入をテストするために、ページレットの「ドキュメント」ノードをクリックし、「RESTを使用してページレットにアクセス」のURLを使用することもできます。

図19-7 ページレットの「ドキュメント」ページ

「ドキュメント」ページのURLをクリックすると、次のような画面が表示されます。

図19-8 Hello Worldページレット

19.1.4 ページレットのクリップ

作成したページレットは、Webページ全体に表示されます。必要なのはHello Worldのセグメントのみであるため、次の手順に従って、そのセグメントをクリップする必要があります。

1. 「Hello_World」ページレット・ノードの下にある「クリップ」をクリックします。

2. 「選択したタイプの作成」をクリックします。

3. 新しく作成するクリッパの名前を指定します(c1など)。

4. クリッパの「コンテンツ」ノードをクリックし、「クリッパの起動」をクリックします。

図19-9 ページレット・プロデューサのクリッパ

5. ブラウザ・ウィンドウで、クリップする領域をマウスで選択します。

マウス・ボタンをクリックすると、ブラウザ・ウィンドウが非表示になり、クリッピング・パスが自動的に生成されます。

6. クリップされたページレットを保存し、もう一度「ドキュメント」ページからそのリンクにアクセスします。

7. これでページレットが適切にクリップされ、WebCenter Portalポータル内で使用できるようになりました(図19-10を参照)。

図19-10 クリップされたHello Worldページレット

19.2 WebCenterポータルでのページレットの消費(例)

この項では、単純なHello WorldページレットをWebCenter Portal内で消費する方法の例を示します。先に進む前に、まず「単純なページレットの作成(例)」の手順に従って、この例で使用する"Hello World"ページレットを作成します。

この項では、次の内容について説明します。

- WebCenter Portalへのページレット・プロデューサの登録

- ポータルへのページレットの挿入

19.2.1 WebCenter Portalへのページレット・プロデューサの登録

新しく作成したページレットをWebCenter Portalから使用するには、まずページレット・プロデューサを登録する必要があります。

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

注意:

WebCenter PortalのAdministratorロールまたは次の権限を付与するカスタム・ロールが必要です。

- Portal Server-Manage Configuration

2. 「ポータル」メニューから「管理」を選択し、「設定」タブをクリックします。

3. 「ツールとサービス」ページで、「ポートレット・プロデューサ」をクリックします。

4. 「登録」をクリックします。

5. 「ページレット・プロデューサ」を選択し、フィールドの値を次のように入力します。

プロデューサ名: MyPageletProducer

サーバーURL: http://pageletserver.company.com:8889/pagelets/

6. 「テスト」をクリックし、接続が正しく構成されたことを確認します。

すべて成功した場合、「テストのステータス」ダイアログに、テスト接続が成功したことを示すメッセージが表示されます。

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

これでページレット・プロデューサが登録されました。

19.2.2 ポータルへのページレットの挿入

この演習用に、ポータルを作成する必要があります。まず、WebCenter Portalにログインし、デフォルトの「ポータル」テンプレートを使用してmyportalというポータルを作成します。

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

2. 「ポータル」テンプレートを使用して、myportalというポータルを作成します。

新しいポータルのホーム・ページがポータル・エディタで開きます。

3. ページレットを追加するページの領域で「コンテンツの追加」をクリックしてリソース・カタログを開きます。

4. 「ページレット・プロデューサ」をクリックします。

5. 以前に登録したページレット・プロデューサを選択します。

Hello_Worldページレットを含むライブラリMyLibが表示されます。

6. 「MyLib」をクリックし、Hello_Worldページレットを選択します。

7. ページを保存します。

8. 「ポータルの表示」をクリックします。

これで、Hello Worldページレットがmyportalのホーム・ページに挿入されます。

19.3 WebCenter Interactionでのページレットの消費(例)

この項では、単純なHello WorldページレットをWebCenter Interaction (WCI) 10.3.0以降で消費する方法の例を示します。先に進む前に、まず「単純なページレットの作成(例)」の手順に従って、この例で使用する"Hello World"ページレットを作成します。

この項では、次の内容について説明します。

- ページレット・プロデューサ・リモート・サーバーの登録

- Hello World Webサービスの作成

- Hello Worldポートレットの作成

- WCIホーム・ページでのHello Worldポートレットの使用

19.3.1 ページレット・プロデューサ・リモート・サーバーの登録

新しく作成したページレットをWCIから使用するには、まずページレット・プロデューサを登録する必要があります。

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

2. 「管理」をクリックします。

3. 次の手順に従って、すべてのページレット・プロデューサ関連のオブジェクトを格納するフォルダを作成します。

a. 「オブジェクトの作成」ドロップダウン・リストを開き、「管理フォルダ」を選択します。

b. 「名前」に「PageletProducer」と入力し、「OK」をクリックします。

図19-11 WCI - 「管理フォルダの作成」

4. 新しく作成したPageletProducerフォルダをクリックします。

図19-12 WCI - 新しく作成したフォルダ

5. 「オブジェクトの作成」ドロップダウンを開き、「リモート・サーバー」を選択します。

図19-13 WCI - 「リモート・サーバーの作成」

6. 「ベースURL」フィールドに、http://pageletserver.company.com:8889/pageletsと入力します(この例では、これがページレット・プロデューサのアドレスになります)。

7. 「終了」をクリックします。

8. PageletProducerフォルダを選択し、「名前を付けて保存」フィールドにPagelet Producer Remote Serverと入力します。

図19-14 WCI - ページレット・プロデューサ・リモート・サーバー・オブジェクトの保存

9. 「保存」をクリックします。
これで、PageletProducerフォルダ内にページレット・プロデューサ・リモート・サーバー接続が作成されました。

図19-15 WCI - ページレット・プロデューサ・リモート・サーバー・オブジェクト

19.3.2 Hello World Webサービスの作成

この項では、"Hello World" Webサービスを作成します。

1. 「オブジェクトの作成」ドロップダウンを開き、「Webサービス - リモート・ポートレット」を選択します。

2. 「参照」をクリックし、ページレット・プロデューサ・リモート・サーバーを選択します。

図19-16 WCI - 「リモート・サーバーの選択」ダイアログ

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

4. 「ポートレットURL」フィールドの値を、次のように入力します。

inject/v2/portlet/MyLib/Hello_World?content-type=iframe&csapi=true&ifheight=300px

MyLibはHello Worldページレットを含むライブラリで、Hello_Worldはページレットの名前です。

図19-17 WCI - Webサービス - リモート・ポートレットの作成ダイアログ

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

6. PageletProducerフォルダを選択し、「名前を付けて保存」フィールドにHello World Web Serviceと入力します。

7. 「保存」をクリックします。

これで、Hello World Webサービスが作成されました。

19.3.3 Hello Worldポートレットの作成

この項では、Hello Worldポートレットを作成します。

1. 「オブジェクトの作成」ドロップダウン・リストを開き、「ポートレット」を選択します。

「テンプレートまたはWebサービスの選択」ダイアログが表示されます(図19-18)。

図19-18 WCI - 「テンプレートまたはWebサービスの選択」

2. テンプレートまたはWebサービスのリストから、「Hello World Web Service」を選択し、「OK」をクリックします。

3. 「ポートレット・タイプ/サイズ」で、使用するポートレット・タイプおよびサイズを選択し、「終了」をクリックします。

4. 「PageletProducer」フォルダを選択します。

5. 「名前を付けて保存」フィールドにHello World Portletと入力し、「保存」をクリックします。

これで、Hello Worldポートレットが作成されました。

19.3.4 WCIホーム・ページでのHello Worldポートレットの使用

ページレット・プロデューサの登録、ページレット・プロデューサWebサービスの設定およびHello Worldポートレットの作成が完了したので、次はそのポートレットをWCIのページ上で使用します。ここでは、説明を簡潔にするためにWCIホーム・ページを使用しますが、他のWCIページを使用することもできます。

1. WCIで、「マイ・ページ」→「ホーム・ページ」に移動します。

2. 「ページの編集」をクリックし、「PageletProducer」フォルダを開きます。

3. Hello Worldポートレットをクリックします。

4. 「エディタを閉じる」をクリックします。

WCIのホーム・ページに挿入されたHello Worldページレットを次に示します。

図19-19 WCI - ホーム・ページ上のHello Worldページレット

19.4 Oracle WebCenter Sitesでのページレットの消費(例)

この項は、既存のWSRPポートレットまたは、Oracle EBSなどのバックエンド・アプリケーションにより公開されるWeb UIの要素も含めて、Oracle WebCenter Sites 11gの各ページにコンテンツを統合する必要のある開発者を対象としています。開発者はOracle WebCenter SitesおよびOracle WebCenterページレット・プロデューサに精通しており、Webテクノロジを十分に理解している必要があります。

この項では、次の内容について説明します。

- Oracle WebCenter Sitesへのページレットの追加

- アイデンティティ伝播の使用

- ページレット・プロデューサからバックエンド・アプリケーションへのアイデンティティの伝播

- WSRPポートレットのページレットとしての消費

- サイトにおけるWebCenter Portalサービスのページレットとしての消費

- EBS11iを使用したページレットとしてのアプリケーションの消費

19.4.1 Oracle WebCenter Sitesへのページレットの追加

ページレットとその関連リソースが構成されたら、JavaScriptまたはRESTを使用してそれをWebページに挿入できます。詳細は、「Webページへのページレットの追加」を参照してください。

ここでは、コンテンツ・ソースとしてページレットにアクセスするためのREST URLを指定したIFrameを使用して、ページレットがOracle WebCenter Sites内のページ・テンプレートに直接追加されるアプローチを採用します。このためには、CSAPI JavaScriptライブラリ(必要な機能を親ページに追加します)と、ページレット・コンテンツをロードする実際のiFrameをロードするために、ページ・テンプレート・スクリプト・タグに次のように追加する必要があります。

<script type="text/javascript" src="http://%PAGELET_PRD_HOST%/pagelets/inject/v2/csapi"/>
<iframe id="pt-pagelet-iframe-1" width="100%" frameborder="0" src="http://%PAGELET_PRD_HOST%/pagelets/inject/v2/pagelet/lib_name/pagelet_name?content-type=html&consumepage=true&ifheight=auto"></iframe>

ここで、lib_nameおよびpagelet_nameはページレット・プロデューサに構成されたライブラリとページレットを示しています。パラメータの詳細は、「RESTを使用したページレットへのアクセス方法」を参照してください。

19.4.1.1 IFrameの自動サイズ変更の有効化

ページレットをよりシームレスに消費側ページに統合するには、コンテンツを収められるように動的にサイズ変更することによって、ページレットiFrameがよりインライン・マークアップらしく動作するように設定できます。この機能を有効にするには、サイトとページレット・プロデューサの両方でさらに構成を加える必要があります。

この項では、WebCenter Sitesに同梱されているAviSportsサンプル・サイトを使用します。このサイトに新しいアセットを追加するには、サイト管理ページにログインして、図19-20に示すように左側のナビゲーションで開発セクションを開きます。

図19-20 サイト管理ページ

まず、次の設定を使用して新しいテンプレートを作成します。

- 名前

- 名前: iFrameResizeRelay (または任意の名前)

- アセット・タイプの場合: 様々なアセット・タイプに適用可能(タイプなし)

- エレメント

- 使用方法: 要素はHTMLページ全体を定義し、外部からコール可能です。

- 要素記憶域パス/ファイル名: iframe-resize.html(または任意の名前)

- エレメント・ロジック:

<html>
<head>
<title>Resizing Page</title>
<script type="text/javascript">
function onLoad() {
var params =window.location.search.substring( 1 ).split( '&' );
var height;
var width;
var iframe;
for( var i =0, l =params.length; i < l; ++i ) {
var parts =params[i].split( '=' );
switch( parts[0] ) {
case 'height':
height =parseInt( parts[1] );
break;
case 'width':
width =parseInt( parts[1] );
break;
case 'iframe':
iframe =parts[1];
break;
}
}
window.top.updateIFrame( iframe, height, width );
}
if (window.addEventListener) {
window.addEventListener("load", onLoad, false);
} else if (window.attachEvent) {
window.detachEvent("onload", onLoad);
window.attachEvent("onload", onLoad);
} else {
window.onload=onLoad;
}
</script>
</head>
<body>
</body>
</html>

- サイト・エントリ

- キャッシュ・ルール: キャッシュ済(デフォルト)

- 保存

- SiteCatalogパラメータを%PAGENAME%として記録(デフォルト名を使用した場合、これは<site_name>/iFrameResizeRelayになります)

新しいテンプレートには、次のようにアドレス可能です。

http://%SITES_HOST%/cs/Satellite?pagename=%PAGENAME%

このURLをメモしておきます。これは、ページレット用にインジェクタを構成するために使用します。

次に、ページレット・プロデューサ管理コンソールを使用して新しいインジェクタをページレットに追加することによって、iFrameサイズ変更機能を適用します。ページレットを開き、「インジェクタ」を選択して、次の設定で新しいインジェクタを作成します。

- 全般

- 名前: auto_resizer (または任意の名前)

- URLフィルタ: <none>

- MIMEフィルタ: text/html

- 挿入位置: </head>の前

- コンテンツ: 「テキスト」(デフォルト)を選択し、次のJavaScriptをテキスト・エリアにコピーします。
次のJavaScript内のSITES_RESIZE_RELAY_PAGEを、前の手順で作成したテンプレートのURLに置き換えます。

<script type="text/javascript">
var SITES_RESIZE_RELAY_PAGE ="http://%SITES_HOST%/cs/Satellite?pagename=%PAGENAME%"; //CHANGE ME!

if (window.addEventListener) {
window.addEventListener("load", calculateSizeFixed, false);
} else if (window.attachEvent) {
window.attachEvent("onload", calculateSizeFixed);
} else {
window.onload=calculateSizeFixed;
}
function calculateSizeFixed() {
var PTResizeIFrame =PTResizeIFrame ││{};
if (PTPortalPage && PTPortalPage.portlets) {
for (var i in PTPortalPage.portlets) {
if ( PTPortalPage.portlets[i].id != "page") {
PTResizeIFrame.pageletInstanceID =PTPortalPage.portlets[i].id;
break;
}
}
}
else if (!PTResizeIFrame.pageletInstanceID) {
PTResizeIFrame.pageletInstanceID =1;
}

if (!PTResizeIFrame.pageletResizePage) {
var match =window.location.search.match(/resizepage=[^&]*/);
if (match != null && match.length > 0) PTResizeIFrame.pageletResizePage =unescape(match[0].substr("resizepage=".length));
else PTResizeIFrame.pageletResizePage =SITES_RESIZE_RELAY_PAGE;
}
var agent =navigator.userAgent;
var ffversion =agent.indexOf("Firefox") >= 0 ? agent.substring(agent.indexOf("Firefox")).split("/")[1] : -1;
var FFextraHeight =parseFloat(ffversion)>=0.1? 25 : 0;
var scrollHeightExtra =15;
if (agent.indexOf('MSIE') > 0) {
scrollHeightExtra =35;
}
if (FFextraHeight > 0) scrollHeightExtra =FFextraHeight;
var wrapper =document.getElementById( 'pt-inner-iframe-wrapper-' +PTResizeIFrame.pageletInstanceID);
if (wrapper ==null) wrapper =createRelayIFrame(PTResizeIFrame.pageletInstanceID);
var iframe =document.getElementById( 'pt-inner-iframe-' +PTResizeIFrame.pageletInstanceID);
var height =0;
var width =0;
var iframename ='';

if( (document.contentDocument) && (document.contentDocument.documentElement.offsetHeight) ) {
height =document.contentDocument.documentElement.offsetHeight +FFextraHeight;
}else if( (document.contentDocument) && (document.contentDocument.body.offsetHeight) ) {
height =document.contentDocument.body.offsetHeight+FFextraHeight;
}else if (document && document.documentElement.scrollHeight ) {
height =document.documentElement.scrollHeight +scrollHeightExtra;
}else if( document && document.body.scrollHeight ) {
height =document.body.scrollHeight +scrollHeightExtra;
}else {
height =wrapper.offsetHeight;
}
width =wrapper.offsetWidth;
iframename ='pt-pagelet-iframe-' +PTResizeIFrame.pageletInstanceID;
var qsSeparator =PTResizeIFrame.pageletResizePage.indexOf("?") >= 0 ? "&" : "?";

iframe.setAttribute("src", PTResizeIFrame.pageletResizePage +qsSeparator +'height=' +height +'&' +'width=' +width +'&' +'iframe=' +iframename);
}

function createRelayIFrame(pageletInstanceId) {
var wrapper =document.createElement("div");
wrapper.id ="pt-inner-iframe-wrapper-" +pageletInstanceId;
var iframe =document.createElement("iframe");
iframe.id ="pt-inner-iframe-" +pageletInstanceId;
iframe.setAttribute("height", 0);
iframe.setAttribute("frameborder", 0);
iframe.setAttribute("width", 0);
wrapper.appendChild(iframe);
document.body.appendChild(wrapper);
return wrapper;
}
</script>

IFrame内でREST URLを使用して、サイトにあるページ・テンプレートにページレットを追加します。IFrameでは、IDパラメータにはページレットIFrameを識別する一意の番号を使用する必要があります(たとえば、「pt-pagelet-iframe-1」)。IFrame自動サイズ変更をサポートするために、次の問合せ文字列パラメータをページレットURLに追加する必要があります。

- resizepage=http://%SITES_HOST%/cs/Satellite?pagename=%PAGENAME%

- ifheight=auto

例:

<script type="text/javascript" src="http://%PAGELET_PRD_HOST%/pagelets/inject/v2/csapi"/>
<iframe id="pt-pagelet-iframe-1" width="100%" frameborder="0" src="http://%PAGELET_PRD_HOST%/pagelets/inject/v2/pagelet/lib_name/pagelet_name?content-type=html& consumepage=true&resizepage=http://%SITES_HOST%/cs/Satellite?pagename=%PAGENAME%&ifheight=auto">
</iframe>

注意:

1ページに複数のページレットが存在する場合は、自動サイズ変更が適切に機能しないことがあります。これは、外部認証サーバーに対してフォーム自動ログインを必要とするページレットで発生することが知られています。この場合は自動サイズ変更用に構成できるページレットは1つだけであり、その他のページレットには静的なIFrameサイズ設定を使用する必要があります。

19.4.1.2 ページレット・スタイルの変更

消費側WebCenter Sitesのページでページレットが見栄えよく収まるようにするには、インジェクタを使用して元のCSSをオーバーライドするスタイルを追加することもできます。オーバーライドが適切に機能するためには、インジェクタによるスタイル定義がバックエンド・アプリケーションによって定義されたスタイルの後に置かれることが重要です。次の例では、置換CSSを<HEAD>セクションの末尾に注入することで、これを処理しています。

ページレットのスタイルを変更するには、ページレット・プロデューサ管理コンソールを使用して新しいインジェクタをページレットに追加します。ページレットを開き、「インジェクタ」を選択して、次の設定で新しいインジェクタを作成します。

- 全般:

- 名前: new_styles (または任意の名前)

- URLフィルタ: <none>

- MIMEフィルタ: text/html

- インジェクタの場所: </head>の前

- コンテンツ

Injector Location: Before </head>

「EBS11iを使用したページレットとしてのアプリケーションの消費」には、WebCenter SitesでサンプルのAviSportsサイトを適合させるためにEBS UIのスタイル変更に使用されるインジェクタの作業例が含まれています。

19.4.2 アイデンティティ伝播の使用

ページレット・プロデューサの中心的な目的は、バックエンド・アプリケーションをプロキシ設定することです。ページレット・プロデューサはブラウザとバックエンド・アプリケーションの仲介役として動作するため、アイデンティティ伝播を次の2つの部分に分ける必要があります。

- ページレット・プロデューサでのアイデンティティの確立

- ページレット・プロデューサにより指定されたログイン・ページの使用

19.4.2.1 ページレット・プロデューサでのアイデンティティの確立

ページレット・プロデューサは通常、図19-21に示すようなIFrameを使用して、WebコンテンツをWebCenter Sitesに挿入します。

図19-21 サイトにおけるIFrameとしてのページレット・プロデューサのコンテンツ

コンテンツはIFrameとして注入されるため、ユーザーIDは、図19-22に示すようにサイト・コンテナとページレット・プロデューサ・コンテナの両方に設定されている必要があります。図19-22では、2つの認証スキーム間での共有が前提となっているユーザー・ディレクトリが省略されていることに注意してください。

図19-22 サイトおよびページレット・プロデューサで異なる認証スキーム

ブラウザと2つのコンテナ間でアイデンティティを管理する理想的な方法は、図19-23に示すようにOracle Access Manager (OAM)を使用することです。図19-23では、2つの認証スキーム間での共有が前提となっているユーザー・ディレクトリが省略されていて、OAMアクセス・サーバーが除外されていることに注意してください。また、この構成は11g以前のバージョンではサポートされていないことにも注意してください。

図19-23 OAMを使用した理想的なフロントエンド認証構成

WebCenter Sites11g用にOAMを設定する場合は、Oracle WebCenter Sitesでサポートするソフトウェアの構成の「Oracle Access Manager統合の設定」の章を参照してください。

19.4.2.2 ページレット・プロデューサにより指定されたログイン・ページの使用

OAMを設定する前に、サイトでページレット・プロデューサの統合をテストしておくと役立つ場合があります。OAMを使用しないと、ユーザーはページレット・プロデューサとサイトでそれぞれ別々に認証する必要があります(図19-22を参照)。この項では、ページレット・プロデューサでの個別認証の構成方法について説明します。

OAM SSOがページレット・プロデューサまたはサイトのどちらかに存在していない場合は、必ずページレット・プロデューサからログイン・フォームが表示されるようにして、図19-24に示す認証スキームをサポートする必要があります。

ページレット・プロデューサでログイン・フォームが表示されるようにするには:

1. ページレットへのアクセスを制限するJ2EEロールを特定するか、ページレット・プロデューサをホストしているJ2EEアプリケーション・サーバーに新しいロールを作成します。

この例では、デフォルトのWLSインストールに存在しているグローバルなWebLogic Server (WLS)の「匿名」J2EEロールを使用しています。

2. ページレット・プロデューサ管理コンソールにログインし、サイト内で表面化する必要のあるページレットが含まれているリソースに移動して、ステップ1で選択したロールを追加します。

ロールは、リソースの「ポリシー」ページで定義されます。

図19-24 ページレット・プロデューサ管理コンソール - 「ポリシー」ページ

19.4.3 ページレット・プロデューサからバックエンド・アプリケーションへのアイデンティティの伝播

アイデンティティの確立方法は、次の各項で説明するようにアプリケーションのタイプによって異なります。

- WSRP/JPDKポートレット

- ネイティブ認証(非SSO)により保護されたスタンドアロン・バックエンド・アプリケーション

- 自動ログインによるアイデンティティ伝播

- SSOにより保護されたスタンドアロン・バックエンド・アプリケーション

- 参照: 共通自動ログイン構成

19.4.3.1 WSRP/JPDKポートレット

WSRPポートレットは、アイデンティティ伝播のためにWSSトークンを使用する必要があります。セキュリティ・トークンの構成方法の詳細は、『Oracle Fusion Middleware Oracle WebCenter Portalの管理』のページレット・プロデューサでのWSRPポートレット・プロデューサの登録に関する項と、「WSRPポートレットのページレットとしての消費」を参照してください。

アイデンティティを必要とするOracle PDK-Javaポートレットごとに、外部アプリケーションのログイン・フォームによって提供される情報に基づいて資格証明が渡されます。詳細は、『Oracle Fusion Middleware Oracle WebCenter Portalの管理』の外部アプリケーションの管理に関する項およびOracle PDK-Javaポートレット・プロデューサの登録に関する項を参照してください。

19.4.3.2 ネイティブ認証(非SSO)により保護されたスタンドアロン・バックエンド・アプリケーション

ページレット・プロデューサには「自動ログイン」という機能があり、この機能によってページレット・プロデューサはバックエンド・アプリケーションにより確立されたネイティブ認証メカニズムと相互作用できます。

19.4.3.3 自動ログインによるアイデンティティ伝播

バックエンド・アプリケーションにはそれぞれ独自の認証手段があるため、必要な資格証明を収集するには、ページレット・プロデューサで独自のログイン・プロンプトを開始する必要があります。ページレット・プロデューサのリソースは、資格証明を基本的な認証ヘッダー、NTLMトークンまたはKerberosトークンとしてバックエンド・アプリケーションに送信し、さらにフォーム・ベースの認証を(通常はセッションCookieを介して)管理するように構成できます。自動ログインの構成の詳細は、「自動ログインの構成方法」を参照してください。

注意:

「ユーザー・ボールト」を使用するように「ユーザー名」フィールドと「パスワード」フィールドを設定して、バックエンド・アプリケーションへのアクセスに必要なユーザー自身の一意の資格証明を入力するプロンプトが各ユーザーに表示されるようにします。

19.4.3.4 SSOにより保護されたスタンドアロン・バックエンド・アプリケーション

バックエンド・アプリケーションに適切な自動ログイン設定を決定することは、かなり大変な場合があります。この作業では、リクエスト・ヘッダーの参照、リダイレクトの確認、マークアップ(ときには動的に生成されたもの)の調査が必要になります。この調査および構成プロセスは、自動ログインが必要なアプリケーションが複数存在する場合は、気の滅入るような作業になりかねません。したがって、Oracle Access Manager (OAM) SSOまたはOracle SSO (OSSO)が使用可能な場合は、バックエンド・アプリケーションを保護するためにこれらのシングル・サインオン・ソリューションの1つを使用することを強くお薦めします。

バックエンド・アプリケーションがOAMで保護されると、次のサブセクションで説明するように、次の2つの方法でページレット・プロデューサが資格証明を提供できるようになります。

- OAMで保護されたバックエンド・アプリケーションへのアイデンティティ直接伝播の使用

- 自動ログインとSSOによるアイデンティティ伝播

19.4.3.4.1 OAMで保護されたバックエンド・アプリケーションへのアイデンティティ直接伝播の使用

OAM 11g WebGateは、OAMサーバーでユーザー資格証明のすべての検証を管理するOracle HTTP Server (OHS)で実行するApacheモジュールです。ユーザーの妥当性が確立されると、OHSがプロキシ設定しているアプリケーション・サーバー上のWebアプリケーションにOAM_REMOTE_USERヘッダーが送信されます。アプリケーション・サーバー上ではOAMアイデンティティ・アサーション・プロバイダが実行して、JAASユーザー・プリンシパル名をOAM_REMOTE_USERヘッダー値に設定します。

ページレット・プロデューサがOAM 11g WebGateで保護されると、OAM_REMOTE_USERヘッダーを受信します。これによってプロキシ設定されたWebアプリケーションもすべて、このヘッダーを受信します。プロキシされているWebアプリケーションがOAMアイデンティティ・アサータを備えたアプリケーション・サーバー上に存在する場合、OAMアイデンティティ・アサータではページレット・プロデューサから渡されたOAM_REMOTE_USERヘッダー値を使用してユーザー・プリンシパルを設定します。この動作は、ページレット・プロデューサが、保護されたWebアプリケーションに対してWebGateのURLをプロキシしようとしないかぎり、すべて実行されます。この項の以降の部分では、サイト統合のコンテキストでこれが実行できる方法を詳しく説明します。

設定例

この例では、図19-23に示すように、WebCenter Sitesとページレット・プロデューサの両方がOAM WebGateによって保護され、次のホストとポートがアプリケーションによって使用されることを前提としています。

- OAM SSO WebGate: www.example.com:80

- WebCenter Sites: sites_host:8080

- WebCenterページレット・プロデューサ: pp_host:8889

- バックエンド・アプリケーション: backendhost:8001

- ブラウザから(WebGate経由で)表示されるバックエンド・アプリケーションの完全URL
http://www.example.com/backend/console

- アプリケーション・サーバーから直接アクセスする場合のバックエンド・アプリケーションの完全URL(内部ネットワークのみで使用可能) http://backendhost:8001/console

バックエンド・アプリケーションへの直接URLを使用するようにページレット・プロデューサ・リソースを設定して、WebGateをバイパスします(つまり、http://backendhost:8001/console)。

図19-25 ページレット・プロデューサ管理コンソール - 「一般プロパティ」ページ

バックエンド・アプリケーションを直接コールするようにページレット・プロデューサを設定(WebGateをバイパス)することにより、ページレット・プロデューサで受信されるすべてのOAMセキュア・ヘッダーは、バックエンド・アプリケーションをホストしているアプリケーション・サーバー上のOAMアイデンティティ・アサーション・プロバイダに渡されます。バックエンド・アプリケーションをホストしているアプリケーション・サーバー上のOAMアイデンティティ・アサーション・プロバイダは、OAMヘッダーを受信すると、適切なユーザー・プリンシパルを設定します(図19-26を参照)。図19-26では、2つの認証スキーム間での共有が前提となっているユーザー・ディレクトリが省略されていることに注意してください。また、OAMアクセス・サーバーも除外されています。

図19-26 バックエンド・アプリケーションを直接コールするページレット・プロデューサ

注意:

WebGateをバイパスするようにページレット・プロデューサを設定するとシングル・サインオンが実行できますが、このソリューションはいつでも適用できるわけではありません。WebGateをホストしているOHSサーバーがバックエンド・アプリケーションのロード・バランシングも管理している場合は、WebGateをバイパスすることによってロード・バランシングもバイパスされます。アプリケーションへのトラフィックはすべて1つのサーバーにルーティングされます。この場合は、「自動ログインとSSOによるアイデンティティ伝播の使用」で説明するように、自動ログイン用にページレット・プロデューサを構成することをお薦めします。

19.4.3.4.2 自動ログインとSSOによるアイデンティティ伝播

OAM WebGateのバイパス(「OAMで保護されたバックエンド・アプリケーションへのアイデンティティ直接伝播の使用」を参照)が実行可能なオプションでない場合でも、ページレット・プロデューサの自動ログイン機能を使用して資格証明を提供できます。バックエンド・アプリケーションごとに個別のログイン・フォームを使用する場合(「自動ログインによるアイデンティティ伝播」を参照)と異なり、Oracle SSOソリューション(OAMまたはOSSO)のログイン・ページによる自動ログインを使用すると、自動ログインを1回だけ設定すればよく、構成手順はすべての実装で同じであるという利点があります。

OSSOによる自動ログインの設定手順については、「自動ログインの構成」を参照してください。本番環境では、この手順はそのまま実行できますが、例外としてssousernameフォーム・フィールドとpasswordフォーム・フィールドを「ユーザー・ボールト」にリンクする必要があります。

OAMで保護されたバックエンド・アプリケーションも、このドキュメントの自動ログインの構成に関する項でOSSOに関して説明した手順に従って設定できますが、次の例外があります。

- login form URLは設定済の場所(例: http://oam11g.mycompany.com:14100/oam/server/obrareq.cgi)です。
自動ログインのフォーム識別URLを設定するときに、固定位置引数の後の問合せ文字列を必ず削除してください。

- form action URLは異なる値になりますが、静的な値である必要があります。OAM formを調べて、form action URLを決定します。

- 「username」フィールドと「password」フィールドの値が異なる場合があります。「OAM form」フィールドを調べて、これらの値を決定します。

- 次の生成された2つの値、「request_id」および「OAM_REQ」を含めます。

19.4.3.5 参照: 共通自動ログイン構成

この項では、一般的なバックエンドSSOシナリオに対するページレット・プロデューサでの自動ログイン設定のクイック参照を示します。

この項では、次の項目について説明します。

- Oracle Access Manager (OAM)の自動ログイン設定

- Oracle SSO (OSSO)の自動ログイン設定

19.4.3.5.1 Oracle Access Manager (OAM)の自動ログイン設定

ログイン・フォームID:

- URL: http://%OAM_ROOT%/server/obrareq.cgi

フォームの送信場所:

- URL: /oam/server/auth_cred_submit

フォーム・フィールド:

- actionURL: 静的: /oam/server/auth_cred_submit

- request_id: 生成済

- username: 非保護または資格証明ボールト

- OAM_REQ: 生成済

- password : 非保護または資格証明ボールト

19.4.3.5.2 Oracle SSO (OSSO)の自動ログイン設定

ログイン・フォームID:

- URL: %OSSO_HOST%/sso/jsp/login.jsp

フォームの送信場所:

- URL: %OSSO_HOST/sso/auth - POST

フォーム・フィールド:

- appctx: 生成済

- locale: 生成済

- password : 非保護または資格証明ボールト

- site2pstoretoken: 生成済

- ssousername: 非保護または資格証明ボールト

- v: 生成済

19.5 WSRPポートレットのページレットとしての消費

ページレット・プロデューサにはWebCenter Common Consumerが組み込まれているため、WSRPポートレットをページレットとして公開して、WebCenter SitesまたはWSRPコンシューマが含まれていないその他のすべてのWebコンテナで使用することができます。

WSRPポートレット・プロデューサは、Fusion Middleware Control、WLSTまたはページレット・プロデューサ管理コンソールを使用してページレット・プロデューサに登録できます。詳細は、『Oracle Fusion Middleware Oracle WebCenter Portalの管理』のページレット・プロデューサでのWSRPポートレット・プロデューサの登録に関する項を参照してください。登録が完了すると、WSRPプロデューサはページレット・プロデューサ管理コンソールにリソースとして表示され、WSRPエンドポイントに関連付けられたポートレットがリソースのページレット・コレクションにリストされます。

注意:

自動生成されたWSRPリソースとページレットは変更できません。変更可能なバージョンを作成するには、ページレット・プロデューサ管理コンソールで該当するリソースを選択して、「コピー」をクリックします。リソースのクローン・バージョンは編集可能であり、インジェクタなどの各種要素を追加してページレットの機能をカスタマイズできます。たとえば、カスタム・インジェクタを使用してCSSクラスを注入し、ポートレット・マークアップがページレットをホストするサイトのルック・アンド・フィールのように表示されるように変更することもできます。

ページレット・プロデューサに登録しているWSRPプロデューサで認証が必要な場合は、次の手順を実行する必要があります。

- 『Oracle Fusion Middleware Oracle WebCenter Portalの管理』のWeb Servicesセキュリティの構成に関する項の説明に従って、ページレット・プロデューサとWSRPプロデューサ間にWSセキュリティを構成します。Javaキーストア(JKS)がWSRPプロデューサとページレット・プロデューサ間で適切に構成されていることを確認する必要があります。詳細は、『Oracle Fusion Middleware Oracle WebCenter Portalの管理』のWebCenterポータル・ドメイン・キーストアの設定に関する項を参照してください。

- WSRPプロデューサの登録時に、「セキュリティ」セクションで適切な「トークン・プロファイル」を選択して、必要な構成情報を入力します。キーストアへのパスは絶対パスである必要があります。

19.6 カスタムADFタスクフローをWSRPポートレットとして公開

ADFタスク・フローがホストされているページからそれを「クリッピング」することで、そのADFタスク・フローをページレット・プロデューサで消費できますが、この方法はお薦めできません。ADFページによって生成されたマークアップの複雑さや、他のタスク・フローまたはADFページ・パラメータへの潜在的な依存性を考慮すると、お薦めできる方法は、タスク・フローに基づいてWSRPポートレットを作成してから、そのポートレットをページレット・プロデューサで消費することです。この方法の利点の1つは、ADFタスク・フローのパラメータがポートレットのパラメータになってページレット・パラメータにマップ可能になり、情報をサイト・ページからタスク・フローに渡せるようになることです。ADFタスク・フローからポートレットを作成する方法の手順は、「タスク・フローに基づいたJSFポートレットの作成方法」を参照してください。

ADFタスク・フローがポートレットとして公開された後で、WLSドメインにある管理対象サーバー(たとえば、WebCenterドメイン上のWC_Portletサーバー)に新しいWSRPプロデューサをデプロイします。WSDL URLを情報ページ(http://%PRODUCER_HOST%/%APP_CONTEXT%/info)から取得して、それをメモしておきます。新しいWSRPプロデューサをページレット・プロデューサに登録するには、『Oracle Fusion Middleware Oracle WebCenter Portalの管理』のページレット・プロデューサでのWSRPポートレット・プロデューサの登録に関する項を参照してください。

19.6.1 Oracle WebLogic Portal用に開発されたWSRPポートレットの公開

Oracle WebLogic Portal (WLP)では、Javaポートレット、Java Server Facesポートレット、Java Server PageおよびHTMLポートレットなど、様々なポートレット・タイプをサポートしています(完全なリストは、Oracle WebLogic Portalポートレット開発ガイドの「ポートレット・タイプ」を参照してください)。リモート(プロキシ)ポートレットはWSRPポートレットであり、ページレット・プロデューサでWSRPプロデューサによってそのままページレットとして公開できます。

19.6.2 WLPをWSRPプロデューサとして使用したWLPポートレットの公開

WLPは、Java、ページ・フロー、JSP、JSFおよびStrutsのポートレットを、必須のWSRPインタフェース、オプションのインタフェースおよびいくつかの拡張インタフェースを含んだ"複合プロデューサ"として公開できます(詳細は、Oracle Fusion Middleware Oracle WebLogic Portalフェデレーテッド・ポータル・ガイドのWebLogic Portalのプロデューサに関する項を参照)。その結果、ページレット・プロデューサはネイティブWLPポートレットをその他のすべてのWSRPポートレットとして消費できます。WLPとWebCenter共通コンシューマ間のWSRPの相互運用の構成とベスト・プラクティスについては、Oracle WebLogic Portalフェデレーテッド・ポータル・ガイドの「Oracle WebCenter PortalおよびOracle PortalとのWSRPの相互運用」に記載されています。

注意:

WLPポータルは、デフォルトではバージョン9.2以降、WSRPに対応しています。それ以前のバージョンでは、ポートレットのプロパティを編集し、「Offer as Remote」プロパティをtrueに設定する必要があります。

19.6.3 WLP WSRPプロデューサとWebCenterコンシューマ間のWSセキュリティの構成

WebCenter共通コンシューマ(ページレット・プロデューサ)でWLPにより公開されたWSRPポートレットを消費するには、プロデューサとコンシューマの両方で構成する必要があります。

通常、WebLogic Portalによって公開されたWSRPポートレットを匿名ユーザーとして消費することはできないため、プロデューサとWebCenter共通コンシューマに対してWLP上でSAMLセキュリティを構成する必要があります手順は、Oracle WebLogic Portalフェデレーテッド・ポータル・ガイドのWebCenter Portal: Frameworkアプリケーション・コンシューマとWebLogic Portalプロデューサ間のSAMLセキュリティに関する項に記載されています。これらの手順は包括的であり、次の調整が加えられています。

- プロデューサの構成に関する項の第5項で、WSRPコンシューマでのキーストア情報の構成に関する手順はJDeveloperで実行します。この手順は、WebCenter共通コンシューマ(ページレット・プロデューサ)で完了する必要があります。WLSTまたはFusion Middleware Controlを使用すると、署名の別名やキーストア・パスワードを指定できます。詳細は、『Oracle Fusion Middleware Oracle WebCenter Portalの管理』のWebCenter Portalドメイン・キーストアの設定に関する項を参照してください。

注意:

キーストア値を構成したら、JPS構成変更が選択されるようにするために、ページレット・プロデューサをホストしている管理対象サーバー(デフォルトではWC_Portlet)とWLS管理サーバーの両方を再起動する必要があります。

- プロデューサの構成の第4項の手順では、発行者名の重要性は強調されていません。ここに入力される名前は、コンシューマにより送信された名前と一致する必要があります。Oracle JPSの場合、送信されたデフォルトの発行者IDはwww.oracle.comです。

19.6.4 ページレット・プロデューサでのWLP WSRPプロデューサの登録

ページレット・プロデューサでWLP WSRPプロデューサを登録するには、『Oracle Fusion Middleware Oracle WebCenter Portalの管理』のページレット・プロデューサでのWSRPポートレット・プロデューサの登録に関する項に記載されている新しいWSRPプロデューサの作成および構成の標準的な手順に従ってください。次の設定が含まれていることを確認します。

- WSDL URL:
http://%WLP_HOST%/%PORTAL_APP_NAME%/producer/wsrp-1.0/markup?WSDL

- セキュリティ:
トークン・プロファイル: 「WSS 1.0 Token with Message Integrity」を選択

登録後、新しいページレット・プロデューサ・リソースが自動的に作成され、ページレットに移入されて、このWSRPエンドポイントに関連付けられたWLPポートレットを表現します。

注意:

ポートレットへのユーザー・アイデンティティ伝播を可能にするには「ページレット・プロデューサからバックエンド・アプリケーションへのアイデンティティの伝播」の説明に従って、WLPとページレット・プロデューサの両方を構成する必要があります。(テスト目的の場合または認証なしでアクセス可能なポートレット・コンテンツの場合は、「セキュリティ」の「デフォルト・ユーザー」フィールドに有効なユーザー名を指定できます。)

19.6.5 サイトへのWLP WSRPポートレットの追加

WLP WSRPポートレットをサイト内のページに追加するには、「Oracle WebCenter Sitesへのページレットの追加」の手順を実行します。ページレット・コンテンツをロードするIFrameタグのsrc属性に使用するURLは、「RESTを使用したページレットへのアクセス方法」の「ドキュメント」を参照してください。

自動生成されたWSRPリソースとページレットは変更できません。WLPポートレットのマークアップの変更、たとえば、カスタムCSSスタイルの注入によりポートレットUIのルック・アンド・フィールを変更するためにページレット・プロデューサの機能を使用するには、新しいバージョンのリソースを作成する必要があります。ページレット・プロデューサ管理コンソールでWLP WSRPプロデューサ用に作成されたリソースを選択し、「コピー」をクリックします。リソースのクローン・バージョンは変更可能であり、インジェクタなどの要素を追加してページレットの機能をカスタマイズできます。

19.7 サイトにおけるWebCenter Portalサービスのページレットとしての消費

WebCenter Portalには、WebCenter Sitesでユーザーのコラボレーションが容易に実行できるように、お知らせやドキュメントなどのサービスやツールが組み込まれています。これらのツールの概要は、『Oracle Fusion Middleware Oracle WebCenter Portalの使用』の最新情報の入手に関する項および情報の整理に関する項を参照してください。

これらのサービスおよびツールをサイトで公開する場合のお薦めできる方法は、Oracle WebCenter Portal (11.1.1.6およびそれ以降)に組み込まれているサービス・プロデューサ・コンポーネントを利用して、関連するWSRPポートレットをページレット・プロデューサ内で消費することです。

次のポータル・ツールは、デフォルトではWSRPポートレットとして公開されています。

- アクティビティ・ストリーム

- ディスカッション・フォーラム

- メール

- ドキュメント・マネージャ

- リスト

- タグ・クラウド

- ブログ

- お知らせ

注意:

追加のツールを公開するには、サービス・プロデューサを新しいJSFページに拡張し、そのページにタスク・フローを追加します。

19.7.1 要件

『Oracle Fusion Middleware Oracle WebCenter Portalインストレーション・ガイド』の手順に従って、WebCenter Portalをインストールします。WebCenter Contentサーバー、ディスカッション・サーバー、ページレット・プロデューサを含むすべての依存コンポーネントもインストールされていて、構成済であることを確認します。詳細は、「要件」を参照してください。

19.7.2 セキュリティおよびシングル・サインオンの構成

サイト駆動のWebサイトからWebCenter Portalサービスへのアクセスを可能にするには、次の2つの前提条件があります。

- WebサイトとWebCenter Portal間に共通のユーザー・ベースを作成する

- WebサイトからWebCenter Portalへのユーザー・アイデンティティ伝播を確立する

次の各項で、これらの前提条件について説明します。

- 共通ユーザー・ベースの作成: LDAP統合

- ユーザー・アイデンティティ伝播の確立: OAM構成

- アイデンティティ・ストアでのGUID属性の構成

- ディスカッション・サーバー用SSOの構成

19.7.2.1 共通ユーザー・ベースの作成: LDAP統合

共通ユーザー・ベースを作成するには、WebCenter SitesとすべてのWebCenter Portalコンポーネントで使用される共通のLDAPリポジトリを構成する必要があります。LDAPサーバーを選択する際、それがWebCenter Portalコンポーネントを実行するWebLogic Serverに準拠していることを確認します。

WLSでのセキュリティ構成時に、次の点を忘れないようにしてください。

- 「オーセンティケータ」の優先度を「SUFFICIENT」に設定します。

- 「制御フラグ」(カッコ内)と認証プロバイダの順序を次のように設定します。

- OAMアイデンティティ・アサータ(REQUIRED)

- LDAPオーセンティケータ(SUFFICIENT)

- デフォルト・オーセンティケータ(SUFFICIENT)

- デフォルトのアイデンティティ・アサーション・プロバイダ: (SUFFICIENT)

19.7.2.2 ユーザー・アイデンティティ伝播の確立: OAM構成

ユーザー・アイデンティティ伝播を確立するには、Oracle Access Manager (OAM)を使用してWebCenter SitesおよびWebCenter Portal用にSSOソリューションを構成することをお薦めします。

OAMを使用している場合は、ユーザー・プリンシパル名がORACLE_REMOTE_USERヘッダーに渡されるように構成されていることを確認します。ObSSOCookieとOAM_REMOTE_USERの両方が、WebLogic Server上のOAMアイデンティティ・アサーション・プロバイダでアクティブに設定されている必要があります。

19.7.2.3 アイデンティティ・ストアでのGUID属性の構成

GUID属性値を指定して、アイデンティティ・ストアで使用される値がLDAP認証プロバイダで構成された値と一致していることを確認します。この値は、jps-config.xmlファイル内で構成されます。

使用しているLDAPオーセンティケータのGUIDをjps-config.xmlファイルに設定します。

<serviceInstance provider="idstore.ldap.provider" name="idstore.ldap">
<property value="oracle.security.jps.wls.internal.idstore.WlsLdapIdStoreConfigProvider" name="idstore.config.provider"/>
<property value="oracle.security.idm.providers.stdldap.JNDIPool" name="CONNECTION_POOL_CLASS"/>
<property value="GUID=uuid" name="PROPERTY_ATTRIBUTE_MAPPING"/>
</serviceInstance>

19.7.2.4 ディスカッション・サーバー用SSOの構成

ディスカッションを使用するには、WebLogic Serverでオーセンティケータの順序付けを行う前に(デフォルトのオーセンティケータおよびデフォルトのアイデンティティ・アサーション・プロバイダを使用)、ディスカッション・サーバーをSSO用に構成します。WLSTを使用してディスカッション・サーバー用にSSOを構成することもできます。詳細は、『Oracle Fusion Middleware Oracle WebCenter Portalの管理』のディスカッション・サーバーをSSO対応に構成する方法に関する項を参照してください。

19.7.3 WSRPポートレットとして公開されたWebCenterサービスのインポート

WebCenterサービスを公開するWSRPポートレットをページレット・プロデューサにインポートするには、Enterprise Manager、WLSTまたはページレット・プロデューサ管理コンソールを使用して、サービス・プロデューサをページレット・プロデューサにWSRPプロデューサとして登録するだけです。

図19-27では、ページレット・プロデューサ管理コンソールでのWSRPエンドポイントの登録例を示しています。詳細は、『Oracle Fusion Middleware Oracle WebCenter Portalの管理』のページレット・プロデューサのWSRPポートレット・プロデューサに関する項を参照してください。

図19-27 ページレット・プロデューサ管理コンソール - WSRPエンドポイント

このページの「セキュリティ」セクションの「トークン・プロファイル」は、サービス・プロデューサをサポートするために「WSS 1.0 SAML Token」に設定する必要があります。また、ページレット・プロデューサで設定されたサービス・プロデューサに対するリクエストに適切な実行タイムアウトを入力します(デフォルトは30秒)。

登録が完了すると、サービス・プロデューサはページレット・プロデューサ管理コンソールにリソースとして表示され、プロデューサによって公開されたすべてのWSRPポートレットがリソースのページレット・コレクションにリストされます。

19.7.3.1 サイト・ページへのページレットの追加

WebCenterサービスを公開しているページレットはすべて、Oracle WebCenter Sitesへのページレットの追加に関する項で説明する手順に従って、WebCenter Sitesのページに追加できます。図19-28に、WebCenter SitesにあるサンプルのAviSportsサイトのページに埋め込まれたドキュメント・マネージャ・サービスを示します。

注意:

自動生成されたWSRPリソースとページレット(サービス・プロデューサに関連付けられているものなど)は変更できません。インジェクタを追加したり、その他の変更を加えるには、編集可能なバージョンを作成する必要があります。ページレット・プロデューサ管理コンソールでリソースを選択し、「コピー」をクリックします。リソースのクローン・バージョンは編集可能であり、インジェクタなどの各種要素を追加してページレットの機能をカスタマイズできます。

図19-28 ドキュメントが埋め込まれたサンプルのAviSportsサイト

19.8 EBS11iを使用したページレットとしてのアプリケーションの消費

この項では、Oracle E-Business Suite 11i Order InformationモジュールのUIをページレットとして消費する場合の詳細な手順を説明します。ここでは、自動ログイン、ナビゲーション抑止、スタイル変更、およびURLリライトについて説明します。

この例は、Oracle SSOで保護されているEBS 11iインスタンスを使用して作成されました。この例では、次の共通用語と変数を使用しています。

- %EBS_HOST%: EBSホストのルートURL(http://my-ebs.company.com:port/など)

- %OSSO_HOST%: OSSOホストのルートURL(http://sso.company.com:port/など)

この項では、次の項目について説明します。

- 基本のURLマッピング(プロキシ)に対するリソースの作成

- 自動ログインの構成

- ページレットの作成

- 修正構成の作成

19.8.1 基本のURLマッピング(プロキシ)に対するリソースの作成

次の手順によって、ページレット・プロデューサ内の新しいEBSリソースに対して基本的なURLマッピングを設定します。

1. 次の設定を使用して新しいWebリソースを作成します。

- 名前: EBS 11(または任意の名前)

- ソースURL: %EBS_HOST%
UIで使用されるURLと見間違いされないように、このURLはあまり具体的にしないようにしてください

- 宛先のURL: /ebs11/(または任意のもの)

- URLリライト: オン

- DHTMLリライト: オン

2. 「保存」をクリックします。

19.8.2 自動ログインの構成

この手順では、EBSシステムがOSSOによって保護されていて、ページレット・プロデューサがSSOに関与する(WebサイトがSSOで保護されていない場合の一般的なシナリオ)のではなく、「自動ログイン」フォームを提供するように構成されることを前提としています。EBS資格証明はすべてのユーザー用に共有することも(テスト用に有効)、ページレット・プロデューサの資格証明ボールトにユーザー別に格納することもできます。

1. 次の設定を使用して新しいWebリソースを作成します。

- 名前: OSSO(または任意の名前)

- ソースURL: %OSSO_HOST%

- 宛先のURL: /osso/(または任意のもの)

- URLリライト: オン

- DHTMLリライト: オフ

2. 「保存」をクリックします。

3. 新規に作成されたOSSOリソースの下で、次のように「フォーム・ログイン」オプションを使用して「Autologin」を構成します。

- ログイン・フォームの識別: URL - %OSSO_HOST%/sso/jsp/login.jsp

- フォームの送信場所: URL - %OSSO_HOST/sso/auth - POST

- フォーム・フィールド:
appctx: 生成済

locale: 生成済

password: 非保護またはユーザー・ボールト

site2pstoretoken: 生成済

ssousername: 非保護またはユーザー・ボールト

- v: 生成済

4. 「保存」をクリックします。

注意:

ログイン・フォームのフィールド名は通常、バックエンド・リソースを保護しているログイン・ページのHTMLソースを調べることによって取得されます。

19.8.3 ページレットの作成

この手順では、ページレットをEBS Order Informationモジュールの順序ステータス・ページに関連付けます。新しいページレットを作成するには、作成したEBSリソースの下で「ページレット」セクションを選択して「作成」アイコンをクリックします。次の設定を使用して新しいページレットを作成します。

- 名前: order_status (または任意の名前)

- ライブラリ: ebs11 (または任意のもの)

- URL接尾辞: OA_HTML/RF.jsp?function_id=1005664&resp_id=22480&resp_appl_id=660&security_group_id=0&lang_code=US

- インラインのリフレッシュ: オフ

構成済のページレットをテストするには、「ドキュメント」ページで、そのページレットにRESTリンク経由でアクセスします。ログインしなくても「Sales Order」ページが表示されます(ページレットでユーザー・ボールトを使用して資格証明を格納していて、そのページレットにはじめてアクセスする場合を除きます)。このページから「簡易検索」を使用て、ワイルドカード文字として'%'を使ってオーダーを検索できます。

19.8.4 修正構成の作成

ページレットの登録後に、プロキシ設定されたマークアップでのURLリライト関連の問題に対応するため、あるいは単にマークアップのスタイルを変更したり不必要な要素を非表示にするために、ページレットで追加機能(パーサー、インジェクタ、クリップなど)が必要になる場合があります。この項では、EBSでOrder InformationのUIを公開するサンプルのページレットに適用された修正構成について説明します。

この項では、次の内容について説明します。

- ポップアップURLリライト用のプラガブル・パーサーの作成

- フレーム・バストを無効化するインジェクタの作成

- iFrameを自動サイズ変更するインジェクタの作成

- JavaScriptの注入によるクリッピングの設定

- ページレットのスタイル変更用にインジェクタを作成

- ページレットのテスト

- 最終結果

- トラブルシューティング

19.8.4.1 ポップアップURLリライト用のプラガブル・パーサーの作成

パーサーを使用して、コンテンツを解析したり、リライトする必要のあるURLを検索するために、ビルトイン・ロジックを補足または変更することができますビルトイン・パーサーがURLの識別に失敗した場合は、カスタム・パーサーを使用してこの失敗を修正することができます。EBS 11i UIの場合、この手順は「拡張検索」でのポップアップ処理の修正に必要です。

EBSリソースの下で、次の設定を使用して新しいパーサーを作成します。

- 名前: popupRewriter(または任意の名前)

- URLフィルタ: *.jsp*

- 基本パーサーの使用: オン

- フラグメントの場所

- var _jspDir='(.*?)'; (タイプ静的URL)

- <frame .? src="(.?) (タイプ静的URL)

図19-29にpopupRewriterの設定を示します。

図19-29 popupRewriter

19.8.4.2 フレーム・バストを無効化するインジェクタの作成

インジェクタによって、プロキシ設定されているリソース・ページの指定された場所にコンテンツが挿入されます。コンテンツには、HTML、CSS、JavaScript、およびページレット宣言も含めて、任意のテキストが使用できます。空のインジェクタを使用して、不必要なコンテンツをページから削除することもできます。次のインジェクタはEBSページレットに対して作成されたものですが、その目的は、ユーザーが職責を選択するよう求められる最初のページで発生するページの継承をEBSページレットが行わないようにすることです。

EBSリソースの下で、次の設定を使用して新しいインジェクタを作成します。

- 全般

- 名前: frameBustDisabler

- URLフィルタ: <none>

- MIMEフィルタ: text/html

- 挿入位置: target=_topを置換

- コンテンツ: (テキスト)alt=''

図19-30に、新しいインジェクタのパラメータ設定を示します。

図19-30 frameBustDisablerインジェクタ

19.8.4.3 iFrameを自動サイズ変更するインジェクタの作成

よりシームレスに消費側ページに統合するには、コンテンツを収められるように動的にサイズ変更することによって、ページレットiFrameがよりインライン・コンテンツらしく動作するように構成できます。詳細は、このドキュメントの「IFrameの自動サイズ変更の有効化」を参照してください。

19.8.4.4 JavaScriptの挿入によるクリッピングの設定

ページレットとして公開されたページ要素を抑止するオプションの1つとして、ページレット・プロデューサで使用可能なグラフィカル・クリッピングまたは正規表現ベースのクリッピングを使用してクリップを作成します。ただし、お薦めできる方法は、プロキシ設定されたページに注入されているカスタムJavaScriptを使用することです。この方法では、抑止する要素の識別ルールを動的に調節する必要性や、ページ上の複数要素の抑止ルールを調整する必要性に容易に適応できるため、より柔軟に対応できます。

カスタムJavaScriptは、プロキシ設定されたリソースにインジェクタを使用して追加できます。EBS 11i標準ヘッダーとナビゲーション要素を抑止するには、次のインジェクタ定義を使用して、ページのロード時に不必要な要素を非表示にするJavaScriptのスニペットを挿入します。(ページレット・プロデューサの標準クリッパ機能は、EBS Web UIが複雑であるため使用しません。)

EBSリソースの下で、次の設定を使用して新しいインジェクタを作成します。

- 全般:

- 名前: nav_suppressor(または任意の名前)

- URLフィルタ: <none>

- MIMEフィルタ: text/html

- 挿入位置: </body>の前

- コンテンツ: (テキスト - 次のコンテンツをコピーおよび貼付け)

<script type="text/javascript">
// this script is injected into the page by ensemble
// it hides header and footer tables at page load

//register handler function to the page load event
if (window.addEventListener) {
window.addEventListener('load', hideHeaderFooter, false);
} else if (document.attachEvent) {
window.attachEvent('onload', hideHeaderFooter);
}

//this function does the actual hiding
function hideHeaderFooter() {
var form =document.forms[0];
if (typeof(form) =='undefined') return;
//main span is form's second child span
var spansFound =0;
var mainSpan =null;
for (var i =0; i < form.childNodes.length; i++) {
var child =form.childNodes[i];
if (child.tagName && child.tagName.toLowerCase() =='span') {
if (++spansFound ==2) {
mainSpan =child;
break;
}
}
}
if (typeof(mainSpan) != "undefined" && mainSpan != null) {
for (var i =0; i < mainSpan.childNodes.length; i++) {
var child =mainSpan.childNodes[i];
if (child.tagName && child.tagName.toLowerCase() =='table') {
child.style.display ='none';
}
}
}
}
//call this function directly
hideHeaderFooter();
</script>

19.8.4.5 ページレットのスタイル変更用にインジェクタを作成

消費側のページでEBSページレットが見栄えよく収まるようにするには、インジェクタを使用して元のCSSをオーバーライドするスタイルを追加できます。

次のインジェクタ定義の例では、WebCenter SitesにおけるサンプルのAviSports Webサイトのスタイル変更の実装方法を示しています。

注意:

オーバーライドが適切に機能するためには、インジェクタによるスタイル定義がバックエンド・アプリケーションによって定義されたスタイルの後に置かれることが重要です。次の例では、コンテンツはページの<HEAD>セクションの終わりに注入されています。

EBSリソースの下で、次の設定を使用して新しいインジェクタを作成します。

- 全般:

- 名前: avisports_styles

- URLフィルタ: <none>

- MIMEフィルタ: text/html

- 挿入位置: 次より前 </head>

- コンテンツ: (テキスト - 次のコンテンツをコピーおよび貼付け)

<style>
* {
font: 11px Arial,Helvetica,sans-serif;
}
body {
background: url("http://sites-host:port/cs/avisports/images/BlueSliver.png") repeat-x scroll center bottom transparent;
}
.OraTableCellText, .x1l, .OraTableCellNumber, .x1n, .OraTableCellIconButton, .x1p, .OraTableCellSelect, .x55,
.OraTableControlBarTop, .x1i, .OraTableControlBarBottom, .x1j {
background-color: #eceef1;
border-color: #0b2a55;
}
.OraTableColumnHeader, .x1r, .OraTableSortableColumnHeader, .x20, .OraTableSortableHeaderLink, .x23 {
background-color: #0b2a55;
border-color: #F7F7E7;
color: #336699;
}
.OraTableHeaderLink, .x24, .OraTableColumnHeaderNumber, .x1s, .OraTableColumnHeaderIconButton, .x1t {
background-color: #0b2a55;
color: #ffffff;
}
.p_InContextBrandingText, .x2l, .OraHGridNavRowInactiveLink, .x3v, .OraNavBarInactiveLink, .x42,
.OraBINavBarInactiveLink, .x7n, .OraBINavBarInactiveLink_small, .x7o {
color: #000000;
}
.OraLink:link, .xd:link, .OraBreadCrumbs, .xh, .OraBulletedList a, .xj a, .OraLinkText, .x2v,
.OraHGridNavRowActiveLink, .x3u, .OraNavBarActiveLink, .x41, .OraBINavBarActiveLink, .x7l, .OraBINavBarActiveLink_small, .x7m {
color: #0b2a55;
}
.OraBreadCrumbs a, .xh a {
color: #0b2a55;
}
</style>

19.8.4.6 ページレットのテスト

これでEBS11リソースには、図19-31に示すように、ページレット、カスタム・インジェクタ、およびカスタム・パーサーが含まれるようになりました。

図19-31 EBS11プロジェクト・リソース

ページレットをテストするには、「ドキュメント」ページを参照し、次に示すURLを使用して、「example.com」をローカル・ホストIDに置き換えます。

http://example.com:8889/pagelets/inject/v2/pagelet/ebs11/order_status?content-type=iframe&csapi=true&ifheight=300px

19.8.4.7 最終結果

次のスクリーンショットは、iFrameのページレット・アクセス用のREST URLを使用してWebCenter SitesにあるサンプルのAviSportsサイトのページに埋め込まれたEBS 11i Order Informationの画面を示しています。

19.8.4.8 トラブルシューティング

イメージが適切にレンダリングされない場合は、DHTMLリライトが有効になっていることを確認します。(DHTMLリライトの設定はリソースの「一般」ページにあります。)

19.9 ページレット・プロデューサを使用したOpenSocialガジェットの消費

ページレット・プロデューサは、次の機能を公開するOpenSocialコンテナです。

- ユーザー(ピープル・コネクションを公開)

- アクティビティ(アクティビティ・ストリームを公開)

- アプリケーション・データ(ガジェットのパーソナライズをサポート)

- Pub-Subメカニズム

ユーザーおよびアクティビティ機能には、WebCenter Portalが必要です。ユーザーおよびアクティビティ機能を使用するには、WebCenterDSのターゲットとして、WC_Portlet管理対象サーバー(つまり、ページレット・プロデューサ)を指定します。アプリケーション・データに対して、ページレット・プロデューサでは、ユーザー、インスタンスおよびページレット・スコープのプリファレンスをサポートします。

次に例を示します。

1. ページレット・プロデューサを開き、新しいOpenSocialリソースを作成します。

2. 必要に応じてURLとポリシーを定義します。

3. 新しいページレットを作成し、外部ガジェットのURLを指定します。
例:

http://bayareacoder.com/gogo/localweather/localweather.xml

4. ガジェットでプリファレンスをサポートする場合、必須パラメータを構成します(図19-32および図19-33を参照)。

図19-32 プリファレンス・エディタ

図19-33 「ページレット・パラメータ」ダイアログ

5. ガジェットXMLファイルを作成またはアップロードします(図19-34を参照)。

図19-34 ページレット・プロデューサ内のアクティビティJavaScriptおよびXMLオプション

「名前」フィールドに指定するパスは、ページレット・プロデューサがファイルの提供に使用する'仮想'URLであり、任意のパスまたは名前を使用できます。

6. 新しいガジェットに必要な他のファイル(JavaScriptファイルやイメージなど)を作成またはアップロードしたら、作業は完了です。

19.10 有効なジオメトリ管理とページ区切りのガイドライン

有効なジオメトリ管理を実施すると、ページでのタスク・フローのサイズ設定と配置を効率良く実行できます。タスク・フローが適切に設計されていない場合、応答時間が遅いページまたはコンポーネント間に不要なスクロール・バーや空白が大量に表示されるページが生成されます。たとえば、データをストレッチするコンテナ(Show Detail Frameコンポーネントなど)をタスク・フローで使用していて、そのコンテナの内部に非常に少量のデータしか存在しない場合、タスク・フローではデータの下に大量の空白が表示されます。設計が不適切な場合、大量のデータが表に表示されるタスク・フローで、スクロールが遅くなったり、予期しない動作を示したりする可能性もあります。これらの問題を避けるために、大量のデータ・セットを表示する際は必ず、従来のページ区切りモデルを使用するフロー・タスク・フローを設計してください。

WebCenter Portalの新しいタスク・フローを設計する際は、この項のガイドラインに従ってください。また、WebCenter Portalの既存のタスク・フローを編集する際も、必ずこの項のガイドラインに従ってください。

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

- インジェクタでのJavaScriptの使用

- インジェクタでのSSLの使用

19.10.1 インジェクタでのJavaScriptの使用

タスク·フローで不要な空白を回避するためには、タスク·フロー·コンテンツがフローし、タスク·フロー·コンテナによってストレッチされていないことを確認する必要があります。ストレッチ・タスク・フローは、コンテナの高さにストレッチされたもので、フロー・タスク・フローは、ストレッチ・コンテナやタスク・フロー自身の固定された高さではなく、そのコンテンツによって決定されます。データ量の少ないフロー・タスク·フローは、データ量の多いフロー・タスク・フローよりも短くなります

フロー・タスク・フローを設計するには、次のことを保証する必要があります。

- タスク・フローの子コンポーネントの高さが固定されていない。

- タスク・フロー・リージョンを囲むShow Detail Frameコンポーネントの高さが(そのcontentStyle属性を使用して)固定されていない。

19.10.2 インジェクタでのSSLの使用

SSLリソースを消費するには、次のものを含むHTTPS経由のページレット・プロデューサ接続が必要です。

- WLSとページレット・プロデューサ間のセキュアなポート・マッピング

- HTTPSを経由したコンテナへのアクセス

インジェクタでは、ページレット・プロデューサによってプロキシされるHTMLマークアップを、次のように変更できます。

- URLパターン(リソース・スコープ)に基づきます。

- MIMEタイプに基づきます。

- 場所(上部または下部)またはテキストの完全一致(前、後、置換)に基づきます。

- コンテンツ・ページで挿入内容を定義します。

19.11 高度なURLリライト

この項では、ページレット・プロデューサの自動ログイン機能を使用する方法、およびカスタム・パーサーを設計する方法について説明します。

この項では、次の項目について説明します。

- 自動ログインの使用

- カスタム・パーサーの使用

19.11.1 自動ログインの使用

自動ログインを使用すると、ユーザー名およびパスワード資格証明をバックエンド・リソースに渡すことができます。これらは、次のいずれかのものとして渡すことができます。

- 静的な資格証明: すべてのユーザーに1つのセット

- リソースへの初回アクセス時にユーザーから動的に取得し、セキュアな資格証明ボールトに格納

- ユーザー・プロファイル(ユーザー名を取得して渡す)

自動ログインでサポートされる認証メカニズムは、次のとおりです。

- 基本ログイン

- フォーム・ログイン(次の例で使用)

- NTLMログイン

- Kerberosログイン

図19-35の例と、次のコード・スニペットは、自動ログインを使用してログイン・ページをリダイレクトする方法を示しています。

図19-35 ページレット・プロデューサ - 自動ログインの例

次のコードは、図19-35の設定を反映しています。

<form action="wwv_flow.accept" method="post" name="wwv_flow" id="wwvFlowForm" autocomplete="off">
<input type="hidden" name="p_flow_id" value="53557" id="pFlowId" />
<input type="hidden" name="p_flow_step_id" value="101" id="pFlowStepId" />
<input type="hidden" name="p_instance" value="724836084846701" id="pInstance" />
<input type="hidden" name="p_page_submission_id" value="1431956852758801" id="pPageSubmissionId" />
<input type="hidden" name="p_request" value="" id="pRequest" />
<div id="login"> <div id="messages"></div> <div id="login-main">
<table id="myapp_layout_45149677586857064102" border="0" class="formlayout" summary="" role="presentation" datatable=0 >
<tr><td align="right"><label for="P101_USERNAME" tabindex="999“><a class="optional-w-help"
href="javascript:popupFieldHelp('45149677686365064111','724836084846701')" tabindex="999">
User Name</a></label></td> <td colspan="1" rowspan="1" align="left"><input
type="hidden" name="p_arg_names" value="45149677686365064111" /><input type="text"
id="P101_USERNAME" name="p_t01" value="" size="20" maxlength="100" class="text_
field" /></td></tr><tr><td align="right"><label for="P101_PASSWORD" tabindex="999"><a class="optional-w-help"
href="javascript:popupFieldHelp('45149677888869064121','724836084846701')" tabindex="999">Password</a></label></td> <td colspan="1" rowspan="1"
align="left"><input type="hidden" name="p_arg_names" value="45149677888869064121"/> <input type="password" name="p_t02" size="20"
maxlength="100" value="" id="P101_PASSWORD" class="password" onkeypress="return
submitEnter(this,event)" /> <input type="button" value="Login"onclick="myapp.submit('LOGIN');" id="P101_LOGIN" /> </td></tr>
</table> Please refer to "Using Myapp" in the Myapp User's Guide for more
information.</div> </div> <input type="hidden" name="p_md5_checksum" value="" />
<input type="hidden" name="p_page_checksum" value="D95DBE8607E971820E98E93FC0EC064E" /></form>

19.11.2 カスタム・パーサーの使用

パーサーを使用すると、URL解析の組込みロジックを拡張または変更できます。URLフィルタと正規表現を使用すると、ページ内でパーサーによって変更される部分を絞り込むことができます(図19-36)。

図19-36 ページレット・プロデューサ - カスタム・パーサーの例

正規表現を使用すると、解析するHTMLフラグメントを指定できます。カッコで囲まれた最初のグループ化表現はフラグメントを識別し、残りの表現はそれを検索するためのコンテキストを提供します。プラガブル・パーサー・フレームワークを使用すると、プロキシが様々なタイプのコンテンツを、MIMEタイプ、HTTPヘッダーまたはURLに基づいてどのように認識するかを微調整できます。

この例では、Flashを動作させるために、ページ・マークアップ内の2つの場所にある3つのURLを変更する必要があります。

<embed src=“ /i/flashchart/anychart_5/swf/OracleAnyChart.swf?
XMLFile=http://example.com/pls/myapp/myapp_ util.flash?p=53557:1:74175370346201:FLOW_FLASH_CHART5_R45192463162785599619_en"
<param name="movie" value=“/i/flashchart/anychart_5/swf/AnyChart.swf?
XMLFile=http://example.com/pls/myapp/myapp_ util.flash?p=53557:1:74175370346201:FLOW_FLASH_CHART5_R45192463162785599619_en"

これを行うには、次の3つの正規表現(図19-36の「正規表現」の下)を使用します。

- XMLFile=(.*?)“

- param name="movie" value="(.*?\.swf)

- embed src="(.*?\.swf)

第V部 WebCenter Portalの追加カスタマイズ

この部は、次の章で構成されています。

- 共有ライブラリの開発

- ポータルのローカライズ

- Oracle Composerの拡張

- WebCenter Portal偽装セキュリティのカスタマイズ

20 共有ライブラリの開発

この章では、タスク・フロー、データ・コントロール、マネージドBeanなどのADFアセットを、WebCenter Portalで使用するための共有ライブラリとして開発、拡張およびデプロイする方法の概要を説明します。

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

- WebCenter Portalで使用する共有ライブラリの開発

- WebCenter Portalで使用するADFコンポーネントのパッケージ化およびデプロイ

20.1 WebCenter Portalで使用する共有ライブラリの開発

WebCenter Portalには標準で、情報、ビジネス・アプリケーションおよびビジネス・プロセスにアクセスし、やり取りするための、より効果的で効率的な方法をユーザーに提供する、ポータル、イントラネット、エクストラネットおよびセルフサービス・アプリケーションを迅速かつ容易に作成するための上級者および開発者用のツールが用意されています。WebCenter Portalは、ブラウザベースのツールおよびJDeveloperを使用してカスタマイズできます。

WebCenter Portalで独自のADFタスク・フロー、データ・コントロールおよびマネージドBeanを開発、テスト、デプロイおよび使用する方法を理解できるよう、図20-1に単一のタスク・フロー(mytaskflow)の開発ライフサイクルを示します。開発ステップ1から5は、「WebCenter Portalで使用するADFコンポーネントのパッケージ化およびデプロイ」に記載されています。

図20-1 ADFタスク・フローの開発ライフサイクル

20.2 WebCenter Portalで使用するADFコンポーネントのパッケージ化およびデプロイ

この項では、ADFタスク・フロー、データ・コントロールおよびマネージドBeanを、WebCenter Portalで使用するために、独自のカスタム共有ライブラリ(WAR files)でパッケージ化し、デプロイする方法について説明します。

WebCenter Portalには、「WebCenter Portalサーバー拡張機能」というJDeveloperテンプレートが用意されており、このテンプレートを使用すると、WebCenter Portalで使用するカスタム共有ライブラリを1つ以上指定できます。

同じ「WebCenter Portalサーバー拡張機能」テンプレートを初期テンプレートとして使用して、WebCenter Portalで使用するためのADFライブラリ・コンポーネント(タスク・フロー、データ・コントロール、マネージドBeanなど)を構築してデプロイすることもできます。

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

- 「WebCenter Portalサーバー拡張機能」テンプレートの理解

- WebCenter Portalの共有ライブラリ開発の理解

- 「WebCenter Portalサーバー拡張機能」ワークスペースの作成

- WebCenter Portalでの追加の共有ライブラリの使用

- WebCenter Portal共有ライブラリ(extend.spaces.webapp.war)への拡張機能のデプロイ

- PortalExtensionプロジェクトを使用したWebCenter PortalのADFライブラリ・コンポーネントの開発

20.2.1 WebCenter Portalサーバー拡張機能テンプレートの理解

「WebCenter Portalサーバー拡張機能」テンプレートを使用して、次の2つのプロジェクトを持つワークスペースを作成します。

- PortalSharedLibrary: デプロイ時に、次のような共有ライブラリextend.spaces.webapp.warを作成するプロジェクト。

- WebCenter Portal用の1つ以上のカスタム共有ライブラリを参照します。

- PortalExtensionプロジェクトから作成されたADFライブラリJARをラップします(使用された場合のみ)。

注意:

このプロジェクトにコードを追加しないでください。このプロジェクトは、他の共有ライブラリを参照し、またはADFライブラリJARを含む、ディスクリプタ・ファイルのみを含みます。

- PortalExtension: タスク・フロー、データ・コントロールおよびマネージドBeanなどのカスタムADFコンポーネントを作成する初期プロジェクト。このプロジェクトをADFライブラリにデプロイできます。ADFライブラリは、extend.spaces.webapp.war共有ライブラリに追加されます。
PortalExtensionプロジェクトで作成したコンポーネントは通常、Java、ADFおよびその他関連するソフトウェア開発技術を必要とします。

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

- 「WebCenter Portalサーバー拡張機能」ワークスペースを編成する方法

- PortalSharedLibraryプロジェクト

- PortalExtensionプロジェクト

20.2.1.1 WebCenter Portalサーバー拡張機能ワークスペースを編成する方法

「WebCenter Portalサーバー拡張機能」ワークスペースには、2つのデフォルト・プロジェクトPortalExtensionおよびPortalSharedLibraryが含まれています。各プロジェクトはそれぞれ固有のライブラリとデフォルト・ファイルを含んでいます(図20-2)。

図20-2 「アプリケーション・ナビゲータ」内の「WebCenter Portalサーバー拡張機能」ワークスペース

20.2.1.2 PortalSharedLibraryプロジェクト

PortalSharedLibraryプロジェクトは、図20-3で示すように、WebCenter Portalで使用する1つ以上のカスタム共有ライブラリの登録を可能にし、(PortalExtensionプロジェクトで開発された)タスク・フロー、データ・コントロールおよびマネージドBeanをWebCenter Portalを実行する管理対象サーバーにデプロイするための便利なメカニズムも提供します。

PortalSharedLibraryプロジェクトには、extend.spaces.webappというWARデプロイメント・プロファイルも含まれます。extend.spaces.webapp.warにデプロイする際、(weblogic.xmlに)登録するすべてのカスタム共有ライブラリおよびPortalExtensionプロジェクトを使用して作成する任意のADFライブラリは、extend.spaces.webapp.warに依存するものとして自動的に組み込まれます。

「WebCenter Portalでの追加の共有ライブラリの使用」および「WebCenter Portal共有ライブラリ(extend.spaces.webapp.war)への拡張機能のデプロイ」を参照してください。

注意:

PortalSharedLibraryプロジェクトにコードを追加しないでください。このプロジェクトは、他の共有ライブラリを参照し、またはADFライブラリJARを含む、ディスクリプタ・ファイルのみを含みます。

共有ライブラリに関する一般的な情報は、「共有ライブラリ・デプロイメントの一般ドキュメント」を参照してください。

図20-3 PortalSharedLibraryプロジェクト

20.2.1.2.1 extend.spaces.webapp.warのバージョニング

PortalSharedLibraryプロジェクトには、MANIFEST.MFファイルが含まれます。extend.spaces.webapp.warを更新しデプロイするたびに、このMANIFEST.MFファイルを編集して共有ライブラリの実装バージョンを増分します。繰り返すたびに、extend.spaces.webappのマニフェスト・ファイルの例に示すように、MANIFEST.MFファイルのImplementation-Version数を増やす必要があります。デフォルトの実装バージョンは12.2.1.0.1です。

extend.spaces.webappのマニフェスト・ファイル

Manifest-Version: 1.0
Ant-Version: Apache Ant 1.7.1
Created-By: 23.7-b01 (Oracle Corporation)
Extension-List: bpmSpaces
bpmSpaces-Extension-Name: oracle.bpm.spaces
Package:
Specification-Version: 2.0
Implementation-Version: 12.2.1.0.1
Implementation-Label: 12.2.1.0.1
Implementation-Vendor: Oracle
Implementation-Patch-Number:
Implementation-Patch-List:
Implementation-Title: Oracle WebCenter Spaces App Extension View V2
Extension-Name: extend.spaces.webapp

実装バージョンを変更する方法の詳細な手順は、「WebCenter Portal共有ライブラリ(extend.spaces.webapp.war)への拡張機能のデプロイ」を参照してください。

20.2.1.3 PortalExtensionプロジェクト

PortalExtensionプロジェクトは、タスク・フロー、データ・コントロールおよびマネージドBeanなどのカスタム・コンポーネントを作成できる標準ADFプロジェクトです。

PortalExtensionプロジェクトは、ADFライブラリにデプロイされます。このライブラリは、PortalSharedLibraryプロジェクトから生成されたextend.spaces.webapp.war共有ライブラリ・ファイルに依存するものとして自動的に追加されます。「PortalExtensionプロジェクトを使用したWebCenter PortalのADFライブラリ・コンポーネントの開発」を参照してください。

ADFライブラリの詳細は、「ADFライブラリ開発の一般ドキュメント」を参照してください。

図20-4 PortalExtensionプロジェクト

20.2.2 WebCenter Portalの共有ライブラリ開発の理解

WebCenter Portalには、標準の共有ライブラリextend.spaces.webapp.warが組み込まれています。このWARファイルには、カスタムADFライブラリ・コンポーネントが格納されている他の共有ライブラリを参照するデプロイメント・ディスクリプタ(weblogic.xml)を含めることができます。

WebCenter Portalで使用する複数のソースから様々な共有ライブラリにデプロイされるカスタム・コードまたはタスク・フローがある場合は、図20-5に示すように、それらをextend.spaces.webappにリストできます。

図20-5 extend.spaces.webapp.warでの複数のカスタム共有ライブラリの参照

この開発モデルは、開発者、顧客、パートナなど、複数のコントリビュータからの追加の共有ライブラリをWebCenter Portalで簡単に利用できる手段となります。

WebCenter Portalの拡張機能を含む新しい共有ライブラリをデプロイする場合は必ず、WebCenter Portalに共有ライブラリの名前を登録し、extend.spaces.webapp.warを再デプロイする必要があります。詳細は、「WebCenter Portalでの追加の共有ライブラリの使用」を参照してください。

このガイドでは、ADFタスク・フロー、データ・コントロールおよびマネージドBeanを開発し、カスタム共有ライブラリにパッケージ化する方法については説明しません。これは、そのような手法および手順がWebCenter Portal固有のものではないためです。共有ライブラリを初めて開発する場合は、次にリストするドキュメントを参照することをお薦めします。

- ADFライブラリ開発の一般ドキュメント

- 共有ライブラリ・デプロイメントの一般ドキュメント

このガイドでは、「WebCenter Portalサーバー拡張機能」テンプレートを使用してWebCenter Portalで使用する共有ライブラリを参照する方法について説明します。表20-1では、ADFライブラリおよび共有ライブラリの開発プロセスの概要を説明し、WebCenter Portalに固有の情報を強調表示し、該当する場合は他のドキュメントの参照先を示します。

表20-1 WebCenter PortalのADFライブラリおよび共有ライブラリの開発とデプロイ

テーマ

WebCenter Portalドキュメント

一般ドキュメント

ADFライブラリ・コンポーネントの作成

WebCenter Portalは、タスク・フロー、データ・コントロールおよびマネージドBeanなど、ADFライブラリJARにデプロイされるいくつかのコンポーネント・タイプをサポートします。

WebCenter Portalのタスク・フロー、データ・コントロールまたはマネージドBeanを標準ADFライブラリ・コンポーネントと同じ方法で作成します。

または、WebCenter Portalが提供する初期プロジェクトを使用します。「PortalExtensionプロジェクトを使用したWebCenter PortalのADFライブラリ・コンポーネントの開発」を参照してください。

『Oracle Fusion Middleware Oracle Application Development FrameworkによるFusion Webアプリケーションの開発』の再利用可能なコンポーネントについてに関する項では、タスク・フローなど、ADFライブラリJARにデプロイできる様々なタイプの再利用可能なADFコンポーネントについて説明しています。

拡張機能ライブラリはWebCenter Portalに適用されないことに注意してください。

『Oracle Fusion Middleware Oracle Application Development FrameworkによるFusion Webアプリケーションの開発』の再利用可能なコンポーネントの作成に関する項も参照してください。

- ネーミング規則

WebCenter Portalで使用する各ADFライブラリJARファイルのファイル名は一意である必要があります。内容が完全に異なっていても、同じ名前を持つ2つのADFライブラリJARファイルの追加はできません。

『Oracle Fusion Middleware Oracle Application Development FrameworkによるFusion Webアプリケーションの開発』のネーミング規則に関する項も参照してください。

- 接続の管理

ADFライブラリJARが接続を使用する場合は、同じ接続名と詳細情報を使用してWebCenter Portalに接続を手動で登録する必要があります(ADFライブラリJAR内に接続を単に含めても、その接続はWebCenter Portalで公開されません)。

WebCenter Portalの接続を作成するには、Fusion Middleware ControlまたはWLSTコマンドを使用する必要があります。

WebCenter Portal固有の接続を追加する場合は、『Oracle Fusion Middleware Oracle WebCenter Portalの管理』のツールとサービスの管理に関する項を参照してください。

データベース接続を追加する場合は、『Oracle Fusion Middleware Oracle Fusion Middlewareの管理』のJDBCデータ・ソースの作成と管理に関する項を参照してください。

Webサービス接続を追加するには、システムMBeanブラウザを使用してADFConnections MBeanを構成します。『Oracle Fusion Middleware Oracle WebCenter Portalの管理』のシステムMBeanブラウザに関する項と、『Oracle Fusion Middleware Oracle ADFアプリケーションの管理』のWebサービス接続に関する項を参照してください。

『Oracle Fusion Middleware Oracle Application Development FrameworkによるFusion Webアプリケーションの開発』の接続に対するネーミングの考慮事項に関する項も参照してください。

- ディスクリプタの組込み

web.xmlおよびapplication.xmlなど、カスタム共有ライブラリのディスクリプタは、WebCenter Portalアプリケーションでデプロイされた対応するディスクリプタとマージします。WebCenter Portalインストールの破損を避けるには、カスタム共有ライブラリにディスクリプタ・ファイルを組み込まないことをお薦めします。

- バージョニング

ADFライブラリJARを追加またはカスタム共有ライブラリを参照するために、WebCenter Portal共有ライブラリWARファイル(extend.spaces.wepapp.war)を再デプロイするたびに、共有ライブラリ実装バージョン番号を増分する必要があります。

詳細は、「extend.spaces.webapp.warのバージョニング」および「WebCenter Portal共有ライブラリ(extend.spaces.webapp.war)への拡張機能のデプロイ」を参照してください。

ADFライブラリJARへのコンポーネントのパッケージ化

タスク・フロー、データ・コントロールまたはマネージドBeanを標準ADFライブラリJARにパッケージ化します。

または、PortalExtension初期プロジェクトを使用します。詳細は、「PortalExtensionプロジェクトを使用したWebCenter PortalのADFライブラリ・コンポーネントの開発」を参照してください。

『Oracle Fusion Middleware Oracle Application Development FrameworkによるFusion Webアプリケーションの開発』のADFライブラリへの再利用可能なADFコンポーネントのパッケージ化に関する項では、タスク・フローなど再利用可能なコンポーネントをADFライブラリJARファイルにパッケージ化する方法について説明しています。

JDeveloper JARファイルを配置してアクセスする方法はWebCenter Portalに適用されないことに注意してください。

ADFライブラリ・コンポーネントの共有ライブラリへの追加

WebCenter PortalでADFライブラリ・コンポーネントを使用するには、次の操作が必要です。

1. ADFライブラリ・コンポーネントを共有ライブラリWARファイルへデプロイします。
『Oracle Fusion Middleware Oracle WebLogic Serverアプリケーションの開発』の共有Java EEライブラリおよびオプション・パッケージの作成に関する項を参照してください。

2. WebCenter Portalがデプロイされている管理対象サーバーに共有ライブラリをデプロイします。

3. WebCenter Portal共有ライブラリ(extend.spaces.webapp.war)へ共有ライブラリを登録します。

4. WebCenter Portal共有ライブラリ(extend.spaces.webapp.war)の新しいバージョンをデプロイします。

5. Fusion Middleware ControlまたはWLSTを使用して、カスタムADFライブラリ・コンポーネントに必要な任意の接続を作成します。

6. WebCenter Portalがデプロイされている管理対象サーバーを再起動します。

注意: ADFライブラリ・コンポーネントをWebCenter Portal共有ライブラリWAR (extend.spaces.webapp.war)に直接追加できます。詳細は、「WebCenter Portal共有ライブラリ(extend.spaces.webapp.war)への拡張機能のデプロイ」を参照してください。

『Oracle Fusion Middleware Oracle Application Development FrameworkによるFusion Webアプリケーションの開発』のプロジェクトへのADFライブラリ・コンポーネントの追加に関する項では、タスク・フローなどのADFライブラリ・コンポーネントをプロジェクトにデプロイする方法について説明しています。

この項の情報は、WebCenter Portalに適用されません。

ADFライブラリ・コンポーネントの使用

WebCenter Portalのリソース・カタログのADFライブラリ・アダプタは、extend.spaces.webapp.warを介してデプロイおよび参照される任意のタスク・フロー、データ・コントロールおよびマネージドBeanを自動的に認識し、それらをWebCenter Portalのリソース・レジストリに追加します。リソース・レジストリのカスタム・コンポーネントは、リソース・カタログを介して、ページ・ポータルにドロップできるコンポーネントとしてWebCenter Portalユーザーに公開されます。

1. WebCenter Portalにログインします。

2. カスタム・コンポーネントをリソース・カタログに追加します。
『Oracle Fusion Middleware Oracle WebCenter Portalでのポータルの構築』のリソース・カタログへのリソースの追加に関する項を参照してください。

3. リソース・カタログにアクセスできるページを開きます。

4. ページにカスタム・コンポーネントを追加します。
『Oracle Fusion Middleware Oracle WebCenter Portalでのポータルの構築』のページへのコンポーネントの追加に関する項を参照してください。

『Oracle Fusion Middleware Oracle Application Development FrameworkによるFusion Webアプリケーションの開発』のADFライブラリ・コンポーネントの使用についての必知事項に関する項では、各種ADFライブラリ・コンポーネント・タイプがJDeveloperでどのように表示されるかについて説明しています。WebCenter Portalの場合、タスク・フロー、データ・コントロールおよびマネージドBeanに関する情報のみ適用されます。

共有ライブラリWARの作成

「WebCenter Portalサーバー拡張機能」テンプレートは、WebCenter Portal共有ライブラリWAR extend.spaces.webapp.warのデプロイメント・プロファイルを提供します。

詳細は、「「WebCenter Portalサーバー拡張機能」ワークスペースの作成」を参照してください。

『Oracle Fusion Middleware Oracle WebLogic Serverアプリケーションの開発』の共有Java EEライブラリの作成に関する項では、共有ライブラリWARファイルを作成する方法について説明しています。

共有ライブラリWARのデプロイ

「WebCenter Portalサーバー拡張機能」テンプレートは、WebCenter Portal共有ライブラリWAR extend.spaces.webapp.warの再デプロイを可能にします。

詳細は、「WebCenter Portal共有ライブラリ(extend.spaces.webapp.war)への拡張機能のデプロイ」を参照してください。

『Oracle Fusion Middleware Oracle WebLogic Serverアプリケーションの開発』の共有Java EEライブラリと依存アプリケーションのデプロイに関する項では、共有ライブラリWARファイルをデプロイする方法について説明しています。

以前の共有ライブラリ・バージョンの回復

WebLogic Server管理コンソールを使用して、以前の共有ライブラリWARバージョンを回復させるか、不要なバージョンを削除します。

詳細は、「以前のWebCenter Portal共有ライブラリ・バージョンへの回復」を参照してください。

『Oracle Fusion Middleware Oracle Application Development FrameworkによるFusion Webアプリケーションの開発』のADFライブラリJARのプロジェクトからの削除に関する項では、JDeveloperでADFライブラリ・コンポーネントを削除する方法について説明しています。

この項の情報は、WebCenter Portalに適用されません。

20.2.2.1 ADFライブラリ開発の一般ドキュメント

- ADFタスク・フロー、データ・コントロール、およびマネージドBeanの作成の詳細は、『Oracle Fusion Middleware Oracle Application Development FrameworkによるFusion Webアプリケーションの開発』のADFタスク・フローの概説に関する項、ADFデータ・コントロールの概要に関する項、およびマネージドBeanを使用したコンテキスト・イベントの作成に関する項を参照してください。

- 『Oracle Fusion Middleware Oracle Application Development FrameworkによるFusion Webアプリケーションの開発』のアプリケーション・コンポーネントの再利用に関する項も参照してください。

20.2.2.2 共有ライブラリ・デプロイメントの一般ドキュメント

- 共有ライブラリのバージョニングの詳細は、『Oracle Fusion Middleware Oracle WebLogic Serverアプリケーションの開発』の共有Java EEライブラリと依存アプリケーションのデプロイに関する項を参照してください。

- 『Oracle Fusion Middleware Oracle WebLogic Serverアプリケーションの開発』の共有Java EEライブラリと依存アプリケーションのデプロイに関する項も参照してください。

20.2.3 WebCenter Portalサーバー拡張機能ワークスペースの作成

この項では、「WebCenter Portalサーバー拡張機能」ワークスペースをJDeveloperで作成する方法について説明します。このワークスペースを使用して次のことができます。

- 使用する1つ以上のカスタム共有ライブラリをWebCenter Portalに登録します。

- タスク・フロー、データ・コントロールまたはマネージドBeanなどWebCenter PortalのカスタムADFコンポーネントを作成し、デプロイします。

「WebCenter Portalサーバー拡張機能」ワークスペースを作成するには:

1. Oracle JDeveloper 12c (12.2.1.0.0)をダウンロードおよびインストールします。

詳細は、「Oracle JDeveloperのインストール」を参照してください。

2. WebCenter PortalのJDeveloper (12.2.1.0.0)用拡張機能をインストールします。

詳細は、「JDeveloper用のWebCenter Portal拡張機能のインストール」を参照してください。

3. JDeveloperを開き、「ファイル」→「新規」を選択します。

4. 「新規ギャラリ」ダイアログで「一般」ノードを開き、「アプリケーション」を選択します。

5. 「項目」リストで、「WebCenter Portalサーバー拡張機能」を選択し、「OK」をクリックします。

図20-6を参照してください。

図20-6 「新規ギャラリ」ダイアログ

注意:

この時点では、WebCenter Portalサーバー拡張機能ウィザードの最初のページが表示されています。このウィザードには、次の各手順で説明する4つのページがあります。

6. 図20-7に示すように、「WebCenter Portalサーバー拡張機能の作成」ダイアログで、「アプリケーション名」フィールドにワークスペースの名前を入力します。

図20-7 WebCenter Portalサーバー拡張機能の作成ウィザード(ステップ1/4)

7. 「ディレクトリ」フィールドにワークスペースを格納するベース・ディレクトリへのパスを入力するか、デフォルト・パスを受入れます。

例:

/scratch/latest_build/mywork/ExtensionApplication

オプションで、「参照」ボタンをクリックして、目的のディレクトリに移動します。

8. オプションで、「アプリケーション・パッケージの接頭辞」を入力します。

この接頭辞は、ワークスペース内で作成されるJavaクラス、インタフェースおよびパッケージに使用されます。たとえば、共通の接頭辞パターンは、com.oracleのようにcom.companyDomainNameです。

ヒント:

この時点で「終了」をクリックすると、デフォルトのポータル・プロジェクト名とディレクトリを使用したプロジェクトを作成できます。次の手順では、ウィザードの残りのページについて説明を続けます。

9. 「Next」をクリックします。

10. 図20-8に示すように、ウィザードの「プロジェクト1名」部分に「プロジェクト名」を入力するか、またはデフォルトの名前を使用します。

このプロジェクトには、WebCenter PortalのカスタムADFコンポーネント(タスク・フロー、データ・コントロールおよびマネージドBean)を構築し、テストするために必要なプロジェクト・テクノロジ・コンポーネントがすべて用意されています。

図20-8 WebCenter Portalサーバー拡張機能の作成ウィザード(ステップ2/4)

11. プロジェクトのデフォルト・ディレクトリを変更する場合は、ディレクトリを入力するか、「参照」ボタンを使用してディレクトリを選択します。

12. 「Next」をクリックします。

13. 図20-9に示すように、必要に応じて、Javaソース・ファイルのデフォルトのパッケージ名とディレクトリを編集し、プロジェクトのクラス・ファイルを出力します。

図20-9 WebCenter Portalサーバー拡張機能の作成ウィザード(ステップ3/4)

14. 図20-10に示すように、ウィザードの「プロジェクト2名」部分に「プロジェクト名」を入力するか、またはデフォルトの名前を使用します。

このプロジェクトを使用して、WebCenter Portalで使用する1つ以上の共有ライブラリを登録し、PortalExtensionプロジェクトを使用して構築したカスタムADFコンポーネントをデプロイできます。「WebCenter Portal共有ライブラリ(extend.spaces.webapp.war)への拡張機能のデプロイ」を参照してください。

図20-10 WebCenter Portalサーバー拡張機能の作成ウィザード(ステップ4/4)

15. プロジェクトのデフォルト・ディレクトリを変更する場合は、ディレクトリを入力するか、「参照」ボタンを使用してディレクトリを選択します。

16. 「終了」をクリックします。

20.2.4 WebCenter Portalでの追加の共有ライブラリの使用

WebCenter Portalで使用するカスタム・タスク・フロー、データ・コントロールまたはマネージドBeanを含む共有ライブラリが1つ以上ある場合は、WebCenter Portalの共有ライブラリextend.spaces.webapp.warに関連付けられたweblogic.xmlファイルに登録する必要があります。

1. PortalSharedLibraryプロジェクトを選択します(図20-11)。
WebCenter Portal拡張機能ワークスペースをまだ作成していない場合は、「「WebCenter Portalサーバー拡張機能」ワークスペースの作成」を参照してください。

図20-11 PortalSharedLibraryプロジェクト

2. デプロイメント・ディスクリプタweblogic.xmlがPortalSharedLibrary\Web Content\WEB-INFの下にない場合は、次の手順でデプロイメント・ディスクリプタを作成します。

a. 「新規」→「デプロイメント・ディスクリプタ」→「WebLogicデプロイメント・ディスクリプタ」を選択します。

b. 「OK」を選択します。

c. リストからweblogic.xmlを選択します(図20-12)。

図20-12 WebLogicデプロイメント・ディスクリプタweblogic.xmlの作成

d. 「終了」を選択します。

3. weblogic.xml (PortalSharedLibrary\Web Content\WEB-INFの下)を開きます。
最初は、追加の共有ライブラリはファイルにリストされていません。

4. 「概要」ページで、「ライブラリ」を選択します。

5. WebCenter Portalで使用する各共有ライブラリの「ライブラリ名」を指定します。
図20-13に示すように、単一の共有ライブラリまたは複数の共有ライブラリを登録できます。

必要に応じて、「ヘルプ」アイコンをクリックして詳細を表示します。

図20-13 weblogic.xml - 複数の共有ライブラリ参照

6. 参照する各共有ライブラリがWebCenter Portal管理対象サーバー(デフォルト名WC_Portal)にデプロイされていることを確認します。

7. 共有ライブラリ参照に含まれるWebCenter Portal共有ライブラリWAR (extend.spaces.webapp.war)の新しいバージョンを再デプロイします。
MANIFEST.MFのバージョン番号を増分してください。詳細は、「WebCenter Portal共有ライブラリ(extend.spaces.webapp.war)への拡張機能のデプロイ」を参照してください。

20.2.5 WebCenter Portal共有ライブラリ(extend.spaces.webapp.war)への拡張機能のデプロイ

この項では、WebCenter Portal共有ライブラリ(extend.spaces.webapp.war)に拡張機能をデプロイする方法について説明します。拡張機能は次の場所のいずれかにあります。

- weblogic.xmlに登録されているタスク・フロー、データ・コントロールまたはマネージドBeanを含む既存の共有ライブラリ。
「WebCenter Portalでの追加の共有ライブラリの使用」を参照してください

- PortalExtensionプロジェクトから作成され、WebCenter Portal共有ライブラリに組み込まれたADFライブラリJAR。
「PortalExtensionプロジェクトを使用したWebCenter PortalのADFライブラリ・コンポーネントの開発」を参照してください

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

- ポータル・サーバーへの拡張機能の直接デプロイ

- アーカイブへの拡張機能のデプロイ

- 以前のWebCenter Portal共有ライブラリ・バージョンへの回復

20.2.5.1 ポータル・サーバーへの拡張機能の直接デプロイ

JDeveloperからWebCenter Portalへ拡張機能をデプロイする前に、次の手順を実行します。

- 少なくともWebLogic Monitorロールがあることを確認します。
ロールの詳細は、『Oracle Fusion Middleware Oracle WebLogic Server ロールおよびポリシーによるリソースの保護』のユーザー、グループおよびセキュリティ・ロールに関する項を参照してください。

- WebCenter Portalサーバーへの接続が存在することを確認します。
接続の作成の詳細は、「WebCenter Portalサーバー接続の作成」を参照してください。

- 共有ライブラリのバックグラウンド情報は、『Oracle Fusion Middleware Oracle WebLogic Serverアプリケーションの開発』の共有Java EEライブラリとオプション・パッケージの作成に関する項を参照してください。

JDeveloperからWebCenter Portalへ拡張機能をデプロイするには:

1. デプロイする拡張機能を含むワークスペースをJDeveloperで開きます。
「WebCenter Portalでの追加の共有ライブラリの使用」および「PortalExtensionプロジェクトを使用したWebCenter PortalのADFライブラリ・コンポーネントの開発」も参照してください。

2. 「アプリケーション・ナビゲータ」で、「PortalSharedLibrary」→「アプリケーション・ソース」→「META-INF」フォルダへ移動します。

3. テキスト・エディタでMANIFEST.MFファイルを開きます。

4. Implementation-Version番号を増分します。デフォルト・バージョンはImplementation-Version: 12.2.1.0.1です。

注意:

WebCenter Portal共有ライブラリ(extend.spaces.webapp.war)を更新および再デプロイするたびに、共有ライブラリImplementation-Version番号を増分する必要があります。それ以外の場合は、WebLogic Serverの「デプロイメント - ログ」タブからエラーが報告されます。詳細は、「PortalSharedLibraryプロジェクト」を参照してください。

5. 「アプリケーション・ナビゲータ」で、「PortalSharedLibrary」プロジェクトを右クリックし、「デプロイ」、「extend.spaces.webapp」の順に選択します(図20-14)。

注意:

extend.spaces.webappは、サーバーにデプロイしようとしている共有ライブラリに対する、デプロイメント・プロファイルの名前であることに注意してください。後続のデプロイメント・アクションにより作成された共有ライブラリは、extend.spaces.webapp.warと呼ばれます。

図20-14 共有ライブラリextend.spaces.webappの選択

6. 「デプロイ」ダイアログで「アプリケーション・サーバーへのデプロイ」を選択して、「次へ」をクリックします(図20-15)。

図20-15 ポータル拡張機能デプロイメント・アクション

7. 共有ライブラリをデプロイするWebLogic Serverを指す接続(WC_Portalなど)を選択し、「Next」をクリックします。

8. 図20-16に示すように、「extend.spaces.webappのデプロイ」ダイアログで、「ドメイン内の選択したインスタンスへのデプロイ」を選択します。

図20-16 デプロイメント・オプションの選択

9. 図20-17に示すように、サーバーのリストからWebCenter Portalがデプロイされている管理対象サーバーを選択します。

注意:

管理対象サーバーの名前は、システム管理者がサーバーをどのように設定したかによって異なります。デフォルトでは、名前はWC_Portalですが、この名前はシステムによって異なる場合があります。

図20-17 管理対象サーバーの選択

10. 図20-18に示すように、「共有ライブラリとしてデプロイ」を選択します。

注意:

この手順は重要です。「共有ライブラリとしてデプロイ」を選択する必要があります。それ以外の場合は、デプロイメントは成功しません。

図20-18 「共有ライブラリとしてデプロイ」を選択

11. 「Next」をクリックします。

12. 「デプロイメント・サマリー」画面でデプロイメント・オプションを確認して「終了」をクリックし、ポータル拡張機能をサーバーへデプロイします。

13. 「デプロイメント - ログ」タブを開き、デプロイメントの問題を調べます。デプロイメントが成功すると、図20-19に示すように「アプリケーションは正常にデプロイされました。」というログ・エントリが表示されます。

図20-19 「デプロイメント - ログ」タブ

14. 新しいデプロイメントを確認するには、WebLogic Server管理コンソールにログインし、デプロイメントの概要ページへ移動して表示される実装バージョンを確認します。

a. WebLogic Server管理コンソールにログインします。

b. 「デプロイメント」をクリックし、extend.spaces.webappを見つけます。

c. extend.spaces.webapp共有ライブラリのエントリを書き留め、MANIFEST.MFファイルで以前に更新した実行バージョンのものであることを確認します。「extend.spaces.webapp.warのバージョニング」も参照してください。

注意:

WebLogic Serverは、アプリケーションが起動された時点の最新の共有ライブラリ・バージョンのみを使用します。変更、ビルド、デプロイ、テストを何度も繰り返した場合、デフォルトでは、増分バージョンが保持されます。管理コンソールを使用して不要な共有ライブラリ・バージョンを削除できますが、最初のバージョン(extend.spaces.webapp(12.2.1,12.2.1))をバックアップとして保持して、必要に応じてデフォルト動作を回復できるようにすることをお薦めします。

15. (オプション)カスタムADFライブラリ・コンポーネントに必要な場合のある接続を次の手順で作成します。

- データベース接続を追加する場合は、『Oracle Fusion Middleware Oracle Fusion Middlewareの管理』のJDBCデータ・ソースの作成と管理に関する項を参照してください。

- Webサービス接続を追加するには、Fusion Middleware ControlのシステムMBeanブラウザを使用してADFConnections MBeanを構成します。『Oracle Fusion Middleware Oracle WebCenter Portalの管理』のシステムMBeanブラウザに関する項と、『Oracle Fusion Middleware Oracle ADFアプリケーションの管理』のWebサービス接続に関する項を参照してください。

- ポートレット・プロデューサまたはコンテンツ・リポジトリ接続など、WebCenter Portal固有の接続タイプを追加する場合は、『Oracle Fusion Middleware Oracle WebCenter Portalの管理』のツールとサービスの管理に関する項を参照してください。

16. WebCenter Portalが稼働している管理対象サーバーを再起動します。
この手順は、共有ライブラリのタスク・フロー、データ・コントロールおよびマネージドBeanをWebCenter Portalリソース・レジストリで表示するために必要です。詳細は、『Oracle Fusion Middleware Oracle WebCenter Portalの管理』のWebCenter Portalアプリケーションのデプロイメント用管理対象サーバーの起動と停止に関する項を参照してください。

注意:

管理対象サーバーの名前は、システム管理者がサーバーをどのように設定したかによって異なります。デフォルトでは、名前はWC_Portalですが、この名前はシステムによって異なる場合があります。

17. WebCenter Portalにログインし、すべての新しくデプロイされたタスク・フロー、データ・コントロールまたはマネージドBeanがリソース・レジストリで使用可能であることを確認します。

デプロイに成功したコンポーネントがリソース・レジストリに追加されると、それらをポータル・ページへのドラッグ・アンド・ドロップで使用できるようにするリソース・カタログへ追加できます。『Oracle Fusion Middleware Oracle WebCenter Portalでのポータルの構築』のリソース・レジストリに関する項も参照してください。

20.2.5.2 アーカイブへの拡張機能のデプロイ

ポータル・サーバーへの接続、またはポータル・サーバー上でextend.spaces.webapp共有ライブラリをデプロイする権限を持っていない場合は、extend.spaces.webapp共有ライブラリの拡張機能をアーカイブ(.warファイル)にデプロイして、その.warファイルをWebCenter Portalを実行している管理対象サーバーにデプロイをする管理者に渡します。

extend.spaces.webapp共有ライブラリの拡張機能をアーカイブにデプロイするには:

1. デプロイする拡張機能を含むワークスペースをJDeveloperで開きます。

「WebCenter Portalでの追加の共有ライブラリの使用」および「PortalExtensionプロジェクトを使用したWebCenter PortalのADFライブラリ・コンポーネントの開発」も参照してください。

2. 「アプリケーション・ナビゲータ」で、「PortalSharedLibrary」→「アプリケーション・ソース」→「META-INF」フォルダへ移動します。

3. テキスト・エディタでMANIFEST.MFファイルを開きます。

4. 必要に応じて、Implementation-Version番号を増分します。デフォルト・バージョンはImplementation-Version: 12.2.1.0.1です。

注意:

新規アーカイブ(.warファイル)を生成するたびにバージョン番号を増分する必要はありません。ただし、新規の拡張機能バージョンをサーバーへデプロイする場合、または「デプロイメント」 - 「ログ」タブでWebLogic Serverからエラーが報告される場合は毎回、共有ライブラリImplementation-Version番号を増分する必要があります。詳細は、「PortalSharedLibraryプロジェクト」を参照してください。

5. 「アプリケーション・ナビゲータ」で、「PortalSharedLibrary」プロジェクトを右クリックし、「デプロイ」、デプロイメント・プロファイル「extend.spaces.webapp」の順に選択します。

注意:

extend.spaces.webappは、ファイルにデプロイしようとしている共有ライブラリに対する、デプロイメント・プロファイルの名前であることに注意してください。後続のデプロイメント・アクションにより作成された共有ライブラリは、extend.spaces.webapp.warと呼ばれます。

6. 「デプロイ」ダイアログで「WARにデプロイ」を選択して、「次へ」をクリックします(図20-20)。

図20-20 デプロイメント・アクション

7. 「サマリー」ページを確認し、「終了」をクリックします。

「デプロイメント - ログ」タブに.warファイルの場所が表示されます。ここで、この新規共有ライブラリ.warファイル・バージョンを、WebCenter Portalがデプロイされている任意のサーバー・インスタンスにデプロイできます。

詳細について

JDeveloperオンライン・ヘルプのアプリケーションのデプロイに関する項を参照してください。『Oracle Fusion Middleware Oracle WebLogic Serverアプリケーションの開発』の共有Java EEライブラリおよびオプション・パッケージの作成に関する項も参照してください。

20.2.5.3 以前のWebCenter Portal共有ライブラリ・バージョンへの回復

最新のWebCenter Portal共有ライブラリに問題がある場合、またはなんらかの理由で以前のバージョンに戻す必要がある場合は、WebLogic Server管理コンソールを使用して、現在のバージョンをアンデプロイ(削除)し、以前のバージョンに戻すことができます。

不要な共有ライブラリ・バージョンを削除することもできます。変更、ビルド、デプロイ、テストを何度も繰り返した場合、デフォルトでは、各増分バージョンが保持されます。WebCenter Portalでは共有ライブラリの最新バージョンのみを使用するため、必要に応じて旧バージョンをクリーンアップまたは削除できます。

最新バージョンをアンデプロイする前に、WebCenter Portalが実行されている管理対象サーバーを停止する必要があります。最新バージョンを削除したら、管理対象サーバーを再起動します。

注意: 元のextend.spaces.webapp共有ライブラリ(バージョン12.2.1)があれば必要に応じてデフォルト・バージョンに戻ることができるため、このライブラリを削除しないことをお薦めします。

1. WebCenter Portalがデプロイされている管理対象サーバーを停止します。

詳細は、『Oracle Fusion Middleware Oracle WebCenter Portalの管理』のWebCenter Portalアプリケーションのデプロイメント用管理対象サーバーの起動と停止に関する項を参照してください。

2. WebLogic Server管理コンソールにログインします。

3. 「デプロイメント」をクリックし、削除するextend.spaces.webappの最新バージョンを見つけて選択します。

4. 「削除」をクリックして共有ライブラリの最新バージョンをアンデプロイします。

元の extend.spaces.webapp.war共有ライブラリに戻すには、extend.spaces.webapp.warバージョン12.2.1以外のすべてバージョンの共有ライブラリを削除します。

5. WebCenter Portalがデプロイされている管理対象サーバーを起動します。

詳細は、『Oracle Fusion Middleware Oracle WebCenter Portalの管理』のWebCenter Portalアプリケーションのデプロイメント用管理対象サーバーの起動と停止に関する項を参照してください。

20.2.6 PortalExtensionプロジェクトを使用したWebCenter PortalのADFライブラリ・コンポーネントの開発

WebCenter PortalのADFライブラリの開発は、他のADFライブラリの開発とまったく同じです。ADFライブラリ開発に精通していない場合は、「ADFライブラリ開発の一般ドキュメント」のドキュメント・リンクを参照してください。

通常、開発チームは、WebCenter Portalなど、複数のアプリケーションで再使用できるように、明確に定義された共有ライブラリのセットに対してADFライブラリを構築し、デプロイします。

開始に役立つように、タスク・フロー、データ・コントロールおよびマネージドBeanを含むADFライブラリを構築し、それらをWebCenter Portalの独自の共有ライブラリextend.spaces.webapp.warにデプロイできるPortalExtensionプロジェクトが用意されています。

PortalExtensionプロジェクトを使用する場合は、次の手順に従います。

1. WebCenter Portalサーバー拡張機能ワークスペースを作成します。

詳細は、「「WebCenter Portalサーバー拡張機能」ワークスペースの作成」を参照してください。

2. PortalExtensionプロジェクトを開き、ADFライブラリにカスタム・コードを追加します。

「PortalExtensionプロジェクト」も参照してください。

3. WebCenter Portal共有ライブラリextend.spaces.webapp.warにADFライブラリをデプロイします。

「WebCenter Portal共有ライブラリ(extend.spaces.webapp.war)への拡張機能のデプロイ」も参照してください。

21 ポータルのローカライズ

この章では、ユーザーのブラウザの適切な言語でテキストが表示されるように、アプリケーションを構成する方法を説明します。

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

- 複数言語に対応したポータル構築のガイドライン

- ADF Facesコンポーネントの言語サポート

- リソース・バンドルを使用した複数言語のサポート

- 新しい言語用のサポートの追加

21.1 複数言語に対応したポータル構築のガイドライン

アプリケーションを複数の国のユーザーが表示する場合、様々なロケールを使用するようにそのJSFページまたはアプリケーションを構成することで、ユーザーのブラウザの言語設定に応じて適切な言語を表示できます。たとえば、作成したページがイタリアで表示されることがわかっている場合は、イタリア語を使用するようにユーザーのブラウザが設定されたときに、そのブラウザ・ページにテキスト文字列をイタリア語で表示するように、ページをローカライズできます。

また、ロケールの選択では、選択されたロケールに適用可能な書式に関する特別な考慮事項も適用されます。たとえば、情報の通常の表示方向(左から右または右から左)や数字の表記(通貨情報など)が考えられます。

複数言語に対応したポータルを開発する場合、次のことを考慮する必要があります。

- Oracle WebCenter Portalのツールとサービスで提供される複数言語のサポートを利用します。詳細は、「ADF Facesコンポーネントの言語サポート」を参照してください。

- すべてのリソースをリソース・バンドルに含め、代替言語リソース・バンドルを提供し、ユーザーによって選択された言語に対応できるようにアプリケーションをコーディングします。詳細は、「リソース・バンドルを使用した複数言語のサポート」を参照してください。

- 使用するデータベース文字セットで、必要なすべての言語がサポートされていることを確認します。
詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』の「キャラクタ・セットの選択」を参照してください。

- 必要なすべてのロケールをサポートする数字、日付および時間書式を使用します。
詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』の「グローバリゼーション・サポート環境の設定」を参照してください。

- 言語ソート・パラメータを使用して、ロケールに合ったソート順序を適用します。
たとえば、フランス語とフランス語(カナダ)では、同じ文字でもソート順序が異なります。

詳細は、『Oracle Databaseグローバリゼーション・サポート・ガイド』の「言語ソートと照合」を参照してください。

- 左から右または右から左(アラビア言語をサポートする必要がある場合)に正しくレンダリングされるWebページを記述します。

グローバリゼーションの詳細なガイドラインは、『Oracle Fusion Middleware Oracle ADF FacesによるWebユーザー・インタフェースの開発』のページの国際化とローカライズに関する項を参照するか、『Oracle Databaseグローバリゼーション・サポート・ガイド』を参照してください。

21.2 ADF Facesコンポーネントの言語サポート

いくつかのADF Facesコンポーネントは、コンポーネントの一部であるテキストを含むことがあります。たとえば、データの初期ロード中に表がデータをフェッチしているとき、または表がスクロールされているときに、af:tableコンポーネントでは、ブラウザで表示されるメッセージ・テキストにリソース文字列af_table.LABEL_FETCHINGが使用されます。Oracle JDeveloperでは、これらのテキスト・リソースの28言語の翻訳を提供します。したがって、指定されたコンポーネントを使用するときは、コンポーネントのテキストを翻訳するために追加の手順を実行する必要はありません。

21.3 リソース・バンドルを使用した複数言語のサポート

テキスト属性を設定してaf:commandButtonコンポーネントのラベルを定義する場合など、どのテキストをコンポーネントに追加する場合でも、実際のテキストを保持するリソース・バンドルを提供し、各ロケールに対応したリソース・バンドルのバージョンを作成し、<locale-config>要素をアプリケーションのfaces-config.xmlファイル内に追加してデフォルトのロケールとサポート対象のロケールを定義する必要があります。また、<resource-bundle>要素をアプリケーションのfaces-config.xmlファイルに追加して、アプリケーションのすべてのページからリソース・バンドルを使用できるようにする必要があります。一度リソース・バンドルを構成および登録すると、式言語(EL)エディタにそのバンドルのキーが表示されるため、アプリケーション・ページ内でバンドルを参照しやすくなります。

ADFコンポーネントに追加するテキスト用のテキスト・リソースの作成プロセスを単純化するために、JDeveloperでは、ビジュアル・エディタ内のどの翻訳可能な文字列に対しても、自動リソース・バンドルの同期がサポートされています。ビジュアル・エディタまたはプロパティ・インスペクタで直接コンポーネントを編集すると、ベース・リソース・バンドルにテキスト・リソースが自動的に作成されます。

自動リソース・バンドルの詳細は、『Oracle Fusion Middleware Oracle ADF FacesによるWebユーザー・インタフェースの開発』のJDeveloperにおける自動リソース・バンドル統合の使用に関する項を参照してください。

リソース・バンドルの手動による定義の詳細は、『Oracle Fusion Middleware Oracle ADF FacesによるWebユーザー・インタフェースの開発』のリソース・バンドルおよびロケールの手動による定義に関する項を参照してください。

21.4 新しい言語用のサポートの追加

Oracle WebCenter Portalには、28の言語と100の異なるロケール用のランタイム翻訳が用意されています。デフォルトでサポートされていない言語をサポートする場合は、新しい言語用の文字列ファイルを用意して、新しい言語用の<language>タグをsupported-languages.xml構成ファイルに追加する必要があります。

新しい言語用のサポートの追加の詳細は、Oracle Technology NetworkのOracle WebCenter Portalホワイト・ペーパーおよびテクニカル・ノートのページのホワイト・ペーパー、WebCenter Spacesの拡張サンプルの使用を参照してください。

22 Oracle Composerの拡張

この章では、JDeveloperを使用して(ランタイムではページ・エディタと呼ばれる)Oracle Composerに対して加えることできるWebCenter Portal用の拡張機能について説明します。

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

- コンポーネントへのカスタム・アクションの追加

22.1 コンポーネントへのカスタム・アクションの追加

ポータルのコンポーネントを編集する際にユーザーが使用できる組込みアクションを増やすために、カスタム・アクションをコンポーネントに追加できます。

図22-1 コンポーネントの「アクション」メニュー

コンポーネントに追加できるカスタム・アクションには3つのタイプがあります。

- Javaべースのカスタム・アクション: どのコンポーネントに対しても機能するため、最も柔軟性のある選択肢であり、ビジネス・ロジックを実装できます。次を参照してください。

- デザイン・ビューでのShow Detail FrameコンポーネントへのJavaベースのカスタム・アクションの追加

- 選択ビューでのコンポーネントへのJavaベースの直接選択カスタム・アクションの追加

- IDドリブンのカスタム・アクション。次を参照してください。

- ファセットを使用したShow Detail Frameコンポーネントへのカスタム・アクションの追加

- タスク・フロー・アクション・ドリブンのカスタム・アクション: タスク・フロー・コンポーネント専用で、アクションはタスク・フローのナビゲーションです。次を参照してください。

- タスク・フローへのカスタム・アクションの追加

- コンポーネント・ナビゲータ内のタスク・フローに表示されるカスタム・アクションの追加

22.1.1 デザイン・ビューでのShow Detail FrameコンポーネントへのJavaベースのカスタム・アクションの追加

コンポーザのデザイン・ビューで、Show Detail Frameコンポーネントのクロームに、「アクション」メニューに表示されるカスタム・アクションを追加できます。このカスタム・アクションは、インタフェースCustomActionListenerを実装するJavaクラスです。アクションがメニューから選択されると、メソッドprocessActionにより、(ダイアログを開くなど)指示された操作がコンポーネントに対して実行されます。

コンポーザのデザイン・ビューでShow Detail Frameコンポーネントにカスタム・アクションを追加するには:

1. カスタム・アクションを実装するためにメソッドprocessAction()を使用して、インタフェースCustomActionListenerを実装します。

メソッドprocessActionはクラスCustomActionEventをパラメータとして取ります。CustomActionEvent内のpublicメソッドは、次のとおりです。

- getPagePath。コンポーネントが存在するページのパスを返します。

- getComponent。デザイン・ビューで選択されているコンポーネントを返します。

- setMessageSeverity。FacesMessageの重大度レベルを設定します。

- setShowMessage。カスタム・アクションの処理後にメッセージを表示するためのフラグを設定します。

- setMessageSummary。メッセージ・サマリーを設定します。

- setMessageDetail。メッセージ詳細を設定します。

例:

package custom
public class SaveTaskflowToCatalog implements CustomActionListener
{
public void processAction(CustomActionEvent event)
{
// get the the page the component is on
String pagePath = event.getPagePath();
// get the SDF component
UIComponent sdf = event.getComponent();
try
{
// process the task flow and save to the cata log

// set the error message in case exception occurs
event.setErrorSummary("Failed to save the task flow to the resource catalog");
}
catch(AbortProcessingException ae)
{
throw ae;
}
catch(Exception ee)
{
throw new AbortProcessingException("unexpected error");
}
}
}

2. pe_ext.xmlでカスタム・アクションを構成します。次に例を示します。

<event-handlers>
<event-handler event="custom-action">custom.SaveTaskflowToCatalog</event-handler>
</event-handlers>

3. ページ上のShow Detail Frameコンポーネントごとにカスタム・アクションを1つ構成するには、<このコードの移動先はどこか>。次に例を示します。

<cust:showDetailFrame shortDesc="Mac Rumors " displayHeader="true"
id="showDetailFrame1"  text="Mac Romors">
<af:region value="#{bindings.customactionstaskflowdefinition1.regionModel}"=
id="r1"/>
<cust:customAction location="menu" action="custom.SaveTaskflowToCatalog"
id="ca1"  text="Save to Catalog"/>
</cust:showDetailFrame>

4. すべてのShow Detail Frameコンポーネントに対してカスタム・アクションを1つ構成するには、adf-config.xmlにカスタム・アクション定義を追加します。次に例を示します。

<cust:adf-config-child xmlns="http://xmlns.oracle.com/adf/faces/customizable/config">
<enableSecurity value="true" />
<customActions>
<cust:customAction action="custom.SaveTaskflowToCatalog"
displayName="Save to Catalog"
location="menu"
rendered="#{custom.util.isSaveToCatalogEnabled}"/>
</customActions>

22.1.2 選択ビューでのコンポーネントへのJavaベースの直接選択カスタム・アクションの追加

コンポーザの選択ビューでコンポーネントを選択すると、ポップアップ・メニューに表示される直接選択カスタム・アクションをコンポーネントに追加できます。このカスタム・アクションは、インタフェースSelectActionListenerを実装するJavaクラスです。アクションがメニューから選択されると、メソッドprocessActionにより、(ダイアログを開くなど)指示された操作がコンポーネントに対して実行されます。

コンポーザの選択ビューでコンポーネントに直接選択カスタム・アクションを追加するには:

1. カスタム・アクションを実装するためにメソッドprocessAction()を使用して、インタフェースSelectActionListenerを実装します。

メソッドprocessActionはクラスSelectActionEventをパラメータとして取ります。CustomActionEvent内のpublicメソッドは、次のとおりです。

- getPagePath。コンポーネントが存在するページのパスを返します。

- getComponent。選択ビューで選択されているコンポーネントを返します。

- setMessageSeverity。FacesMessageの重大度レベルを設定します。

- setShowMessage。カスタム・アクションの処理後にメッセージを表示するためのフラグを設定します。

- setMessageSummary。メッセージ・サマリーを設定します。

- setMessageDetail。メッセージ詳細を設定します。

例:

package custom
public class RemoveSelectedComponent implements SelectActionListener
{
public void processAction(SelectActionEvent event)
{
// get the the page the component is on
String pagePath = event.getPagePath();
// get the selected component
UIComponent comp = event.getComponent();
try
{
// set the error message in case exception occurs
event.setErrorSummary("Failed to delete the component");

// popup deletion confirmation dialog or delete the component here
}
catch(AbortProcessingException ae)
{
throw ae;
}
catch(Exception ee)
{
throw new AbortProcessingException("unexpected error");
}
}
}

2. 必要に応じて、first、lastまたはメニューでの項目の位置を表す整数に設定したseq属性を使用してメニュー項目を順番に並べます。

seq属性を指定しないと、アクションは構成で定義した順に配置されます。

seq値を指定されたアクションは、seq値を指定されていないアクションの前に表示されます。プロパティ・パネルを構成すると、組込みアクション「コンポーネントの編集」および「親コンポーネントの編集」が常に他のカスタム・アクションの前に表示されます。

例:

<selection-config>
<selection-taglib-filter namespace="http://xmlns.oracle.com/adf/faces/rich">
<tag name="inputText">
<selection view="design" enabled="true"/>
<operation name="view.SelectActionText2"
label="InputText Action2"
seq="2"
filtered="false"/>
<operation name="view.SelectActionTest3"
label="InputText Action3"
seq="3"
filtered="false"/>
<operation name="view.SelectActionTest"
label="InputText Action1"
seq="first"
filtered="false"/>
<operation name="separator" seq="1" filtered="false"/>
</tag>
</selection-taglib-filter>
</selection-config>

3. 必要に応じて、selection構成でoperation nameをseparatorに設定して、セパレータをカスタム・アクション・メニューに追加します。次に例を示します。

<selection-taglib-filter namespace="http://xmlns.oracle.com/adf/faces/rich">
<tag name="goLink">
<selection view="design" enabled="true"/>
<operation name="oracle.adf.pageeditor.pane.inline-style-editor"
label="Inline Style"
filtered="false"/>
<operation name="separator" filtered="false"/>
<operation name="custom.action1" label="Action 1" filtered="false" icon="icon.png"/>
<operation name="separator" filtered="false"/>
<operation name="custom.action2" label="Action 2" filtered="false"/>
</tag>
</selection-taglib-filter>

4. コンポーネントのselection構成でadf-custom-actions演算を追加して、カスタム・アクションを個々のコンポーネントの選択ビューに組み込むか、すべてのコンポーネント・インスタンスに対してグローバルに組み込みます。

例:

<selection-config>
<global-filter>
<selection view="design" enabled="false"/>
<operation name="oracle.adf.pageeditor.pane.generic-property-inspector"
label="Change Property"
filtered="false"/>
<operation name="oracle.adf.view.page.editor.event.SelectRemoveListener"
label="Remove"
icon="/adf/images/composer_delete_ena.png"
filtered="#{testBean.compSelected ? 'false' : 'true'}"/>
</global-filter>

<selection-taglib-filter namespace="http://xmlns.oracle.com/adf/faces/rich">
<tag name="goLink">
<selection view="design" enabled="true"/>
<operation name="oracle.adf.pageeditor.pane.inline-style-editor"
label="Inline Style"
filtered="false"/>
<operation name="view.SelectActionTest"
label="#{testBean.goLinkActionLabel}1"
seq="last"
filtered="false"/>
<operation name="view.SelectActionTest2"
label="#{testBean.goLinkActionLabel}2"
filtered="false"/>
<operation name="separator" seq="first" filtered="false"/>
</tag>
</selection-taglib-filter>

</selection-config>

5. pe_ext.xmlで、カスタム・アクションを構成します。

例:

<selection-taglib-filter namespace="http://xmlns.oracle.com/adf/faces/rich">
<tag name="inputText">
<selection view="design" enabled="true"/>
<operation name="oracle.adf.pageeditor.pane.generic-property-inspector"
label="Change Property"
filtered="false"/>
<operation name="custom.RemoveSelectedComponent"
label="Remove"
filtered="false"/>
</tag>
</selection-taglib-filter>

6. pe_ext.xmlで、イベント・ハンドラを登録します。

例:

<event-handlers>
<event-handler event="select-action">
oracle.adf.view.page.editor.event.SelectRemoveListener</event-handler>
</event-handlers>

22.1.3 ファセットを使用したShow Detail Frameコンポーネントへのカスタム・アクションの追加

Show Detail Frameコンポーネントのファセットを使用して、Show Detail Frameコンポーネントのカスタム・アクションを定義して表示できます。たとえば、アプリケーションが提供するサービスのリストがShow Detail Frameに含まれている場合、様々なサービスの詳細を含むタスク・フローを開くカスタム・アクション(Show Detailed Information)を追加できます。

Oracle JDeveloperでは、「構造」ウィンドウにShow Detail Frameコンポーネントで使用可能なファセットがすべて表示されますが、UIコンポーネントを含むファセットのみがアクティブで表示されます。

Show Detail Frameファセットを追加するには:

1. 「構造」ウィンドウでShow Detail Frameコンポーネントを右クリックし、「ファセット - 詳細フレームの表示」を選択して、このオプションの右側に表示される矢印をクリックします。

2. サポートされているファセットのリストから追加するファセットを選択します。

注意:

ファセット名の隣のチェック・マークは、ファセットがすでにShow Detail Frameコンポーネントに挿入されていることを意味します。そのファセット名を再度選択すると、このファセットはページから削除されます。

そのファセットのf:facet要素はページに挿入されます。

3. 設計要件に応じてファセットにコンポーネントを追加します。

Show Detail Frameファセットの作成および使用を始めから終わりまで示す例は、「例: ファセットを使用したShow Detail Frameコンポーネントへのカスタム・アクションの追加」を参照してください。

22.1.3.1 例: ファセットを使用したShow Detail Frameコンポーネントへのカスタム・アクションの追加

Panel Customizableコンポーネントを指定したJSFページ(Page1.jspx)を前提とします。Panel Customizable内にShow Detail Frameコンポーネント(showDetailFrame1)があります。Show Detail Frame内にADFタスク・フローがあります。Panel Customizableには、他に2つのShow Detail Frameコンポーネントがあり、一方はshowDetailFrame1の上、他方は下にあります。タスク・フローは、2つのOutput Textコンポーネントをページに表示します。

Additional ActionsファセットをShow Detail Frameコンポーネントで構成して、「処理」メニューに「上へ移動」アクションと「下へ移動」アクションとともに「カスタマイズ」アクションを表示できます。実行時、「カスタマイズ」アクションを使用すると、ユーザーはOutput Textコンポーネントのテキストをカスタマイズできます。この項では、この結果を得るための手順を説明します。次のサブセクションが含まれます:

- ADFタスク・フローの作成方法

- 追加のアクション・ファセットを組み込む方法

- リダイレクト・ページの作成方法

- ページ間のナビゲーション・ルールの作成方法

- 実行時の処理内容

22.1.3.1.1 ADFタスク・フローの作成方法

ADFタスク・フローを作成するには:

1. 「file」メニューから、「新」を選択します。

2. 「新規」ダイアログで、「Web層」ノードの下の「JSF」を選択し、アイテムの下の「ADFタスク・フロー」を選択します。

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

4. 「タスク・フローの作成」ダイアログで「OK」をクリックし、デフォルト値を受け入れてタスク・フロー定義ファイルを作成します。

5. コンポーネント・パレットの「ADFタスク・フロー」タグ・ライブラリから、2つのビュー要素(view1とview2)をタスク・フロー定義ファイルにドロップします。

6. 「制御フロー・ケース」をview1からview2にドロップします。

7. 最初のビュー要素をクリックし、次に2番目のビュー要素をクリックして制御フロー・ラインを描きます。

この制御フロー・ケースにnextという名前を付けます。

8. 同様に、「制御フロー・ケース」をview2からview1にドロップして戻し、これにprevという名前を付けます。

9. BackingBean.javaというバッキングBeanを作成し、2つの変数view1とview2の値を含めます。

view1とview2は、それぞれinitialValue1とinitialValue2を使用して初期化されます。Beanのコードが、次の例に示すとおりであることを確認します。

package view;

public class BackingBean {
public BackingBean() {
}

private String view2 ="initial Value1";
private String view1 = "initial Value2";

public void setView2(String view2) {
this.view2 = view2;
}

public String getView2() {
return view2;
}

public void setView1(String view1) {
this.view1 = view1;
}

public String getView1() {
return view1;
}
}

10. タスク・フロー定義ファイルで、view1をダブルクリックし、その要素にページ・フラグメント(view1.jsff)を作成します。

11. Panel Group Layoutおよび2つのOutput Textコンポーネントをview1.jsffに追加します。

12. 最初のOutput TextコンポーネントのValueを#{backingBean.view1}に指定し、2番目のOutput TextコンポーネントのValueを#{backingBean.view2}に指定します。

13. view1.jsffを保存して閉じます。

14. タスク・フロー定義ファイルで、view2をダブルクリックし、その要素のページ・フラグメント(view2.jsff)を作成します。

15. Output Textコンポーネントを1つだけview2.jsffに追加し、Valueを#{backingBean.view2}に指定します。

16. view2.jsffを保存して閉じます。

22.1.3.1.2 追加のアクション・ファセットを組み込む方法

追加のアクション・ファセットを組み込むには:

1. Panel CustomizableコンポーネントおよびネストされたShow Detail Frameコンポーネントを備えているJSFページ(Page1.jspx)を作成します。

2. さらに2つのShow Detail Frameコンポーネントを既存のShow Detail Frameコンポーネントの上下に追加します。

3つのShow Detail Frameコンポーネントを追加する目的は、「上へ移動」アクションと「下へ移動」アクションを最初のShow Detail Frameコンポーネント(showDetailFrame1)の追加アクションとともに表示できるようにすることです。

3. 前の手順で作成したタスク・フロー定義ファイルをshowDetailFrame1内に追加します。

4. 「構造」ウィンドウで最初のShow Detail Frameを右クリックし、「ファセット - 詳細フレームの表示」を選択します。

5. このオプションの右にある矢印をクリックし、サポートされているファセットのリストから「追加のアクション」を選択します。

そのファセットのf:facet-additionalActions要素はページに挿入されます。

6. Panel Group Layoutを「追加のアクション」ファセット内に追加し、ButtonコンポーネントをPanel Group Layoutコンポーネント内に追加します。

7. ButtonのText属性をCustomizeに設定し、customizeをAction値として指定します。

構造ナビゲータのページは、図22-2のように表示されます。

図22-2 構造ナビゲータのPage1.jspx

8. ページを保存します。

22.1.3.1.3 リダイレクト・ページの作成方法

リダイレクト・ページを作成するには:

1. Page2.jspxというJSFページを作成し、Input Textコンポーネントを2つとButtonコンポーネントを1つ追加します。

2. 最初のInput TextコンポーネントのValueを#{backingBean.view2}に指定し、2番目のInput TextコンポーネントのValue 属性を#{backingBean.view1}に設定します。

バッキングBeanに関してInput Textコンポーネントを追加する目的は、ユーザーの入力をBeanに渡し、これがPage1.jspxのOutput Textコンポーネントで反映できるようにすることです。

3. Buttonコンポーネントで、Text属性をOKに設定し、backをAction値として指定します。

4. ページを保存します。

ナビゲーション・ルールを定義することによって2つのページ間を切り替えることができます。

22.1.3.1.4 ページ間のナビゲーション・ルールの作成方法

ページ間のナビゲーション・ルールを定義するには:

1. アプリケーション・ナビゲータのプロジェクトのWEB-INFフォルダの下で、faces-config.xmlファイルをダブルクリックしてこれを開きます。

2. 「概要」タブをクリックして、概要モードでファイルを表示します。

3. 「マネージドBean」セクションの「追加」アイコンをクリックします。

4. 「マネージドBeanの作成」ダイアログで、backingBeanを名前として指定します。

5. 「クラス名」フィールドで、その隣の「参照」ボタンをクリックし、前に作成したBackingBean Javaクラスを参照します。「OK」をクリックします。

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

7. 「有効範囲」リストで、「セッション」を選択し「OK」をクリックします。

8. ページ上の「ナビゲーション・ルール」タブを選択します。

9. 「ビュー(自)」表で、Page1.jspxを選択します。

10. 「ナビゲーション・ケース」の下で、「ビューID(至)」列でPage2.jspx、「結果(自)」列で「カスタマイズ」、「リダイレクト」列で「true」を選択します。

11. 「ビュー(自)」表で、Page2.jspxを選択します。

12. 「ナビゲーション・ケース」の下で、「ビューID(至)」列でPage1.jspx、「結果(自)」列で「戻る」、「リダイレクト」列で「true」を選択します。

「ソース」ビューで、これらのエントリが次のように表示されます。

<managed-bean>
<managed-bean-name>backingBean</managed-bean-name>
<managed-bean-class>view.BackingBean</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
</managed-bean>
<navigation-rule>
<from-view-id>/Page1.jspx</from-view-id>
<navigation-case>
<from-outcome>customize</from-outcome>
<to-view-id>/Page2.jspx</to-view-id>
<redirect/>
</navigation-case>
</navigation-rule>
<navigation-rule>
<from-view-id>/Page2.jspx</from-view-id>
<navigation-case>
<from-outcome>back</from-outcome>
<to-view-id>/Page1.jspx</to-view-id>
<redirect/>
</navigation-case>
</navigation-rule>

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

22.1.3.1.5 実行時の処理内容

JDeveloperで、Page1.jspxを実行します。showDetailFrame1コンポーネントの「アクション」メニューには、図22-3に示すように「カスタマイズ」アクションが表示されます。

図22-3 「アクション」メニューの「カスタマイズ」アクション

「カスタマイズ」をクリックするとPage2.jspx(図22-4)に移動します。ここで、Label1とLabel2の値を更新できます。

図22-4 テキストを編集するオプションを備えたページ

「OK」をクリックするとPage1.jspxに戻り、最近のテキスト変更が反映されます。

22.1.4 タスク・フローへのカスタム・アクションの追加

タスク・フローをShow Detail Frameコンポーネントに含めることによって、これをカスタマイズできます。Show Detail Frameコンポーネントには、コンポーネントを再配置、表示または非表示にする特定のデフォルトのアクションが用意されています。さらに、カスタム・アクションを定義して、実行時にタスク・フロー内で目的のナビゲーション・フローをトリガーできます。タスク・フローでカスタム・アクションを有効にできる方法は2つあります。

- タスク・フローでカスタム・アクションを直接有効にして、カスタム・アクションがShow Detail Frameコンポーネントの「アクション」メニューに表示されるようにします。

- タスク・フローを囲んでいるShow Detail Frameコンポーネントでカスタム・アクションを有効にして、カスタム・アクションがShow Detail Frameコンポーネントの「アクション」メニューに表示されるようにします。

この項では、両方の方法について説明します。次のサブセクションが含まれます:

- タスク・フローでのカスタム・アクションの直接追加

- タスク・フローを囲んでいるShow Detail Frameでのカスタム・アクションの追加

- 実行時の処理内容

- 例: タスク・フローを囲んでいるShow Detail Frameへのカスタム・アクションの追加

22.1.4.1 タスク・フローでのカスタム・アクションの直接追加

タスク・フローを自己完結にし、アプリケーション・レベルで定義されたグローバル・カスタム・アクションを継承する必要がない場合、この項の手順を実行します。ネストされた<customActions>要素を持つ<customComps-config>セクションをadf-settings.xmlファイルで構成することによって、タスク・フローでカスタム・アクションを定義できます。adf-settings.xmlファイルで指定された追加カスタム・アクションは、このタスク・フローを囲むShow Detail Frameコンポーネントに表示されます。

通常、タスク・フローはパッケージ化されADFライブラリとしてデプロイされます。タスク・フローのカスタム・アクションを含むadf-settings.xmlファイルを作成すると、このファイルもADFライブラリでパッケージ化されます。

タスク・フローでカスタム・アクションを有効にするには:

1. adf-settings.xmlファイルが存在していない場合、このファイルをプロジェクトのWebコンテキスト・ルート(たとえば、APPLICATION_ROOT/Portal/src/META-INFディレクトリ)の下のMETA-INFディレクトリに作成します。

a. 「file」メニューから、「新」を選択します。

b. 「新規ギャラリ」ダイアログで、「一般」を展開し、「XML」、「XML文書」の順に選択します。

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

ファイルにadf-settings.xmlという名前を付けます。

2. ファイルで<custComps-config>セクションをネストされた<customActions>要素とともに追加します。

3. Show Detail Frameの「処理」メニューにカスタム・アクションとして表示する内部タスク・フローのアクションそれぞれに<customAction>要素を1つ追加します。
<customActions>要素の下に任意の数のカスタム・アクションを追加できます。

次の例に、<customAction>エントリが指定されたadf-settings.xmlファイルのコードを示します。

<cust:custComps-config xmlns="http://xmlns.oracle.com/adf/faces/customizable/config">
<customActions>
<customAction action="next" location="chrome"
rendered="true"
icon="/adf/webcenter/editheader_ena.png"
text="Next"
taskFlowId="/WEB-INF/task-flow-definition.xml#task-flow-definition"
shortDesc="next"/>
<customAction action="prev" location="chrome"
rendered="true"
icon="/adf/webcenter/editheader_ena.png"
text="Previous"
taskFlowId="/WEB-INF/task-flow-definition.xml#task-flow-definition"
shortDesc="prev"/>
</customActions>
</cust:custComps-config>

カスタム・アクションの定義は、タスク・フロー・レベルの設定で使用するtaskFlowId属性を除いて、タスク・フロー・レベルとアプリケーション・レベルで似ています。この属性は、カスタム・アクションを定義する必要があるタスク・フローを識別するために使用されます。ADFライブラリには複数のタスク・フローが存在する場合があるため、カスタム・アクションをレンダリングする必要があるタスク・フローを識別する際にこの属性は役に立ちます。

注意:

- カスタム・アクションのアイコンを定義する場合、指定するイメージがプロジェクト・ルート・フォルダで利用できることを確認する必要があります。

- ページのすべてのタスク・フローで定義された内部アクションのカスタム・アクションを定義できますが、実行時、Show Detail Frameは、タスク・フローの現在のビューのADFc結果に対応するカスタム・アクションのみを表示します。

4. adf-settings.xmlファイルを保存します。

22.1.4.2 タスク・フローを囲んでいるShow Detail Frameでのカスタム・アクションの追加

囲んでいるShow Detail Frameコンポーネントでタスク・フローのカスタム・アクションを定義できます。これらのアクションが実行時に起動されると、タスク・フローで目的のナビゲーション・フローがトリガーされます。たとえば、ターゲットのタスク・フロー・フラグメントがShow Detail Frame内ではなく別個のブラウザ・ウィンドウで開くことを指定するShow Detail Frameでカスタム・アクションを定義できます。

Custom ActionコンポーネントをページのShow Detail Frameコンポーネントの子として追加することによって、Show Detail Frameコンポーネントでカスタム・アクションを指定できます。この方法で定義されたカスタム・アクションは、このカスタム・アクションを子として持っているShow Detail Frameインスタンスでのみ使用できます。または、アプリケーションのadf-config.xmlファイルでカスタム・アクションを指定できます。この方法で定義されたカスタム・アクションは、アプリケーションのすべてのShow Detail Frameインスタンスで使用できます。

この項では、Show Detail Frameでのカスタム・アクションの定義について説明します。次のサブセクションが含まれます:

- インスタンス・レベルでのカスタム・アクションの定義

- グローバル・レベルでのカスタム・アクションの定義

- グローバル・レベルのカスタム・アクションとインスタンス・レベルのカスタム・アクションの間の競合の解決

- 別個のブラウザ・ウィンドウにタスク・フロー・ビューを表示するカスタム・アクションの構成

22.1.4.2.1 インスタンス・レベルでのカスタム・アクションの定義

Custom Actionコンポーネントを使用して特定のShow Detail Frameコンポーネントのインスタンスでカスタム・アクションを定義します。Custom Actionコンポーネントはコンポーザ・タグ・ライブラリにあります。カスタム・アクションは、Show Detail Frameを含むページのJSFページ定義ファイルに格納されます。

インスタンス・レベルでカスタム・アクションを定義するには:

1. コンポーネント・パレットで、「コンポーザ」を選択します。

2. Custom Actionをドラッグし、これをShow Detail Frameコンポーネント内のページ上でaf:region要素の下にドロップします。

Show Detail Frameの「処理」メニューにカスタム・アクションとして表示する内部タスク・フローのアクションそれぞれにCustom Actionコンポーネントを1つ追加します。

注意:

Custom Actionコンポーネントをaf:region要素の下に追加します。リージョンがShow Detail Frameの最初の子コンポーネントでない場合、問題が発生する場合があります。

3. 参照してCustom Actionの属性を定義します。

各Custom Actionのaction属性には、関連するタスク・フローの適切なADFcの結果を移入してください。コードは次のようになります。

<cust:showDetailFrame text="showDetailFrame 1" id="sdf1">
<af:region value="#{bindings.taskflowdefinition1.regionModel}"
id="r1"/>
<cust:customAction action="navigatefromview1" id="ca1"
location="both" icon="/Logo1.JPG"
text="View1 Action"
shortDesc="Custom View1 Action"/>
<cust:customAction action="navigatefromview2"
location="both" id="ca2"
icon="/Logo2.JPG" text="View2 Action"
shortDesc="Custom View2 Action"/>
</cust:showDetailFrame>

注意:

タスク・フローのADFc結果のすべてに対してカスタム・アクションを追加できますが、表示するタスク・フローのビューに応じて、いくつかのカスタム・アクションを実行時に使用できるか、どのカスタム・アクションも使用できません。

対応するタスク・フローのアクションなしでカスタム・アクションを定義すると、そのカスタム・アクションは実行時にShow Detail Frameヘッダーにレンダリングされません。

関連項目:

詳細は、『Oracle Fusion Middleware Oracle Application Development FrameworkによるFusion Webアプリケーションの開発』のタスク・フローの作成に関する項を参照してください。

4. 保存してページを実行します。

実行時、Show Detail Frameの「処理」メニューから処理を選択すると、関連する制御フロー・ルールがトリガーされ、ターゲットのタスク・フロー・フラグメントがレンダリングされます。

22.1.4.2.2 グローバル・レベルでのカスタム・アクションの定義

グローバル・レベルでカスタム・アクションを定義することは、そのカスタム・アクションをアプリケーションのすべてのShow Detail Frameインスタンスで使用可能にすることを意味します。グローバル・レベルのカスタム・アクションはアプリケーションのすべてのShow Detail Frameコンポーネントで使用可能ですが、実行時にShow Detail Frameのヘッダーにはタスク・フローの現在のビューのADFc結果に対応するカスタム・アクションのみが表示されます。

グローバル・レベルのカスタム・アクションは、アプリケーションのadf-config.xmlファイルで定義します。

グローバル・レベルでカスタム・アクションを定義するには:

1. アプリケーションのadf-config.xmlファイルを開きます。これは、「アプリケーション・リソース」パネルの「ディスクリプタ」の下のADF META-INFフォルダにあります。

2. 次のように、各アクションに対してネストされた<customAction>タグを指定した<customActions>要素を使用してカスタム・アクションを定義します。

ヒント:

ページ編集モードにのみカスタム・アクションをレンダリングするために、<customAction>タグのrendered属性を#{composerContext.inEditMode}に設定できます。こうすると、ページが編集モードの場合にtrueの値が返されます。

<cust:adf-config-child xmlns="http://xmlns.oracle.com/adf/faces/customizable/config">
<enableSecurity value="true" />
<customActions>
<cust:customAction action="forward" displayName="Move Forward"
location="menu" rendered="true"
icon="/move_forward.png"/>
<cust:customAction action="backward" tooltip="Move Backward"
location="chrome" rendered="true"
icon="/move_backward.png"/>
</customActions>
</cust:adf-config-child>

注意:

- ???の手順を実行してShow Detail Frameコンポーネントのアクションに制限を施行した場合、cust:customizableComponentsSecurityセクションはすでにadf-config.xmlファイルにあります。例に示すcust:adf-config-childセクションではなく、そのセクション自体でカスタム・アクションを定義できます。

- カスタム・アクションのアイコンを定義する場合、指定するイメージがプロジェクト・ルート・フォルダで利用できることを確認する必要があります。

- ページのすべてのタスク・フローで定義された内部アクションのカスタム・アクションを定義できますが、実行時、Show Detail Frameのヘッダーは、タスク・フローの現在のビューのADFc結果に対応するカスタム・アクションのみを表示します。

3. adf-config.xmlファイルを保存します。

カスタム・アクションの定義の詳細は、「例: タスク・フローを囲んでいるShow Detail Frameへのカスタム・アクションの追加」を参照してください。

22.1.4.2.2.1 グローバル・レベルのカスタム・アクションとインスタンス・レベルのカスタム・アクションの間の競合の解決

各カスタム・アクションは、そのaction属性の値によって一意に識別されます。グローバル・レベルとインスタンス・レベルで同じaction属性値を持つカスタム・アクションを定義した場合、他の属性値に応じて実行時にこれらのカスタム・アクションがどのように起動されるか関して競合が発生する場合があります。このような場合、Show Detail FrameのinheritGlobalActions属性が他のカスタム・アクション属性(action属性以外)の動作を次のように定義します。

注意:

Show Detail FrameコンポーネントのinheritGlobalActions設定(trueまたはfalse)に関係なく次のようになります。

- rendered属性は、インスタンス・レベルで指定されていなくても継承されません。

- グローバル・レベルまたはインスタンス・レベルのlocation属性は、グローバル・レベルとインスタンス・レベルの両方で同じ値に設定する必要があります。

- inheritGlobalActions=trueまたはinheritGlobalActions(デフォルトはfalse)の値を指定しなかった場合、カスタム・アクション属性の動作は次のようになります。

- グローバル・レベルとインスタンス・レベルでカスタム・アクション属性を定義した場合、インスタンス・レベルで指定した属性値が使用されます。

- カスタム・アクション属性をインスタンス・レベルでのみ定義した場合、その属性値が使用されます。

- カスタム・アクション属性をグローバル・レベルでのみ定義した場合、その値は無視され、デフォルト値が使用されます。

- inheritGlobalActions=trueの場合、カスタム・アクション属性の動作は次のようになります。

- カスタム・アクション属性をインスタンス・レベルで定義した場合、同じ属性がグローバル・レベルで指定されているかどうかにかかわらず、その値が使用されます。

- カスタム・アクション属性をグローバル・レベルでのみ定義した場合、その値が使用されます。

- カスタム・アクション属性をグローバル・レベルでもインスタンス・レベルでも定義しなかった場合、属性のデフォルト値が使用されます。

アプリケーション・ページを設計した後、アプリケーションを本番環境にデプロイする必要があります。詳細は、???を参照してください。

注意:

開発環境のページで実行する実行時カスタマイズは、アプリケーションをターゲット・サーバーにデプロイするときに引き継がれません。

22.1.4.2.3 別個のブラウザ・ウィンドウにタスク・フロー・ビューを表示するカスタム・アクションの構成

カスタム・アクションは通常、ターゲットのタスク・フロー・ビューをShow Detail Frameコンポーネント内の所定の場所に表示します。ただし、カスタム・アクションを定義して、別個のブラウザ・ウィンドウにタスク・フロー・ビューを表示できます。

別個のブラウザ・ウィンドウにタスク・フロー・ビューを表示するには、そのビューに対応するカスタム・アクションのタスク・フロー定義ファイルおよびaction属性において、そのビューの制御フロー・ルールに接頭辞dialog:を付ける必要があります。次の例にaction属性の定義を示します。

<cust:customAction action="dialog:Next" id="ca1"
location="both" icon="/move_forward.png"
text="Next Action"
shortDesc="Next Action"/>

ポップアップ・ウィンドウでのプロパティの設定

タスク・フロー・リージョン内のコマンド・コンポーネントに対して、useWindow、windowEmbedStyle、windowHeight、windowWidthおよびreturnListenerの各属性を使用して、デフォルトの動作を指定できます。コマンド・コンポーネントは、使用できるこのような属性が他にも存在する場合があります。戻りリスナーを指定した場合、ダイアログを閉じるときに特定アクション・イベントがコールされ、次のナビゲーションの結果が決定されます。デフォルトでは、この設定がないと、ダミーのRich Command Linkコンポーネントが作成され、タスク・フロー・アクションをトリガーします。

コマンド・コンポーネントでリスナーを定義する場合、カスタム・アクションを構成してこのコンポーネントのアクション・イベントをコールする必要もあります。カスタム・アクション定義(グローバル・レベルとインスタンス・レベル)のactionComponent属性では、アクション・イベントのキューに入る必要があるコマンド・コンポーネントのIDを指定できます。actionComponent属性が指定された場合、Show Detail Frameコンポーネントは、このコンポーネントのアクション・イベントをキューに入れます。このコマンド・コンポーネントはタスク・フロー内部にあるため、いつでもその属性値を変更できます。

例

タスク・フローをShow Detail Frameコンポーネント内に含め、このタスク・フローのナビゲーションの結果に対応するSimple Editカスタム・アクションを定義した例について考えてみます。タスク・フロー内のCommand Buttonコンポーネントは、Simple Editカスタム・アクションをクリックすると300x200のサイズのモード付きインライン・ポップアップを起動するように構成されています。戻りリスナーは、ポップアップが閉じると必ずコールされるようにコマンド・コンポーネントで構成されています。

リージョン内のCommand Buttonコンポーネントのソース・コードは次のとおりです。

<af:commandButton text="dialog:simpleEditPoup"
id="SDFCustomActionCmd_simpleEditPoup"
action="dialog:simpleEditPoup" useWindow="true"
windowEmbedStyle="inlineDocument" windowWidth="300"
windowHeight="200"
windowModalityType="applicationModal"
returnListener="#{pageFlowScope.recentPagesBean.refreshMainView}"
visible="false"/>

次の例では、adf-config.xmlファイルでカスタム・アクションを定義して、タスク・フローの結果に対応するグローバル・カスタム・アクションを指定する方法を示します。Command ButtonコンポーネントのIDは、カスタム・アクションのactionComponent属性に対して指定されます。

<customizableComponentsSecurity xmlns="http://xmlns.oracle.com/adf/faces/customizable/config">
<enableSecurity value="true"/>
<customActions>
<customAction action="dialog:simpleEditPoup"
text="Simple Edit"
shortDesc="Simple Edit"
location="menu"
rendered="#{!changeModeBean.inEditMode}"
icon="/adf/pe/images/editproperties_ena.png"
actionComponent="SDFCustomActionCmd_simpleEditPoup"/>
</customActions>
</customizableComponentsSecurity>

次の例では、コンポーザ・タグ・ライブラリからJSFページにCustom Actionコンポーネントを追加して、タスク・フローの結果に対応するインスタンス・レベルのカスタム・アクションを指定する方法を示します。Command ButtonコンポーネントのIDは、カスタム・アクションのactionComponent属性に対して指定されます。

<cust:showDetailFrame id="sdf_for_RecentPagesTF1"
text="Recent Pages" stretchContent="false"
showResizer="never">
<af:region id="RecentPagesTF1"
value="#{bindings.regionBinding1.regionModel}"/>
<cust:customAction action="dialog:simpleEditPoup"
text="My Simple Edit"
shortDesc="Simple Edit"
location="menu"
rendered="#{!changeModeBean.inEditMode}"
icon="/adf/pe/images/editproperties_ena.png"
actionComponent="SDFCustomActionCmd_simpleEditPoup"/>
</cust:showDetailFrame>

注意:

ポップアップ・ダイアログで起動されるカスタム・アクションは、新しいリクエストとしてサーバーに送信されます。コンポーザのサンドボックスを使用していて、ページ編集モードで操作している場合、このリクエストはコードをサーブレット・フィルタに追加することによって表示モードで起動されるため、新しいサンドボックスはこのページに対して作成されません。

22.1.4.3 実行時の処理内容

adf-settings.xmlファイルで構成したカスタム・アクションは、adf-config.xmlファイルで構成したカスタム・アクションとマージされ、選択したタスク・フローの現在のビューと関係のあるすべてのアクションが親のShow Detail Frameコンポーネントの「アクション」メニューに表示されます。

グローバル・レベルでカスタム・アクションを有効にした場合、これらのカスタム・アクションが子のタスク・フローの現在のビューのナビゲーション結果に対応する場合、Show Detail Frameのヘッダーにこれらのカスタム・アクションが表示されます。

action属性値に接頭辞dialog:を付けると、タスク・フローのターゲット・ビューが別個のブラウザ・ウィンドウに開きます。

22.1.4.4 例: タスク・フローを囲んでいるShow Detail Frameへのカスタム・アクションの追加

この例では、アプリケーションにタスク・フロー(customactions)が含まれていて、Show Detail Frame内にあるものとします。このタスク・フローには、3つのビュー要素(view_gadget、edit_settingsおよびabout_gadget)と3つの関連制御フロー・ルール(ViewGadget、EditSettingsおよびAboutGadget)が含まれています。目的は、カスタム・アクションを定義して、制御フロー・ルールをShow Detail Frameコンポーネントの「アクション」メニューのアクションとして使用できるようにすることです。

この例では、制御フロー・ルールは、ユーザーが3つのビュー間をナビゲートして行き来できるように追加されています。各ビュー要素には、同じ名前の関連ページ・フラグメントがあります。

- view_gadget.jsffフラグメントには、Panel Stretch Layoutコンポーネントがあります。このコンポーネントのcenterファセットには、Value属性がView Gadgetに設定されているActive Output Textコンポーネントが移入されます。

- edit_settings.jsffフラグメントには、Panel Stretch Layoutコンポーネントがあります。このコンポーネントのcenterファセットには、Value属性がEdit Gadget Settingsに設定されているActive Output Textコンポーネントが移入されます。

- about_gadget.jsffフラグメントには、Panel Stretch Layoutコンポーネントがあります。このコンポーネントのcenterファセットには、Value属性がAbout This Gadgetに設定されているActive Output Textコンポーネントが移入されます。

タスク・フローでカスタム・アクションを有効にするには:

1. customactionsタスク・フローをカスタマイズ可能ページ(MyPage.jspx)のShow Detail Frameコンポーネント内に配置します。
カスタマイズ可能ページの作成の詳細は、???を参照してください。

2. Custom Actionコンポーネントをコンポーザ・タグ・ライブラリからShow Detail Frameコンポーネントの子として追加し、Action属性およびText属性をそれぞれViewGadgetおよびView Gadgetに設定します。

3. さらに2つのCustom ActionコンポーネントをShow Detail Frameに追加します。

- 最初のコンポーネントのAction属性およびText属性をそれぞれEditSettingsおよびEdit Settingsに設定します。

- 2番目のコンポーネントのAction属性およびText属性をそれぞれAboutGadgetおよびAbout Gadgetに設定します。

4. MyPage.jspxを保存して実行します。
view_gadgetページ・フラグメントは、ページの(My Gadgetという名前の)Show Detail Frameコンポーネントにレンダリングされます。「アクション」メニューには、「About Gadget」オプションおよび「Edit Settings」オプションが表示されます。「About Gadget」をクリックして、about_gadgetフラグメントにナビゲートします。「アクション」メニューに、他の2つのフラグメントのナビゲーション・ルールが表示されていることに注意してください(図22-5)。

図22-5 タスク・フローを囲んでいるShow Detail Frameのカスタム・アクション

この実際の動作を確認するには、Oracle Technology Network (OTN)のOracle WebCenter Suite 11gのデモとサンプルのページにある、Composer Custom Actionsサンプル・アプリケーションComposerCustomActions.jwsをご覧ください。

22.1.5 コンポーネント・ナビゲータ内のタスク・フローに表示されるカスタム・アクションの追加

コンポーザの「構造」ビューのコンポーネント・ナビゲータには、図22-6に示すように、タスク・フローにズーム・インして、そのページまたはフラグメント上のコンポーネントを表示するオプションが用意されています。

図22-6 タスク・フロー・インスタンスの編集処理

ユーザーは、ズーム・インし、ページまたはフラグメントを編集し、タスク・フローからズーム・アウトしてそのタスク・フローを含むページにナビゲートして戻ることができます。タスク・フロー名の隣に表示される「タスク・フローの編集」リンクおよび「閉じる」リンクに加えて、図22-7に示すように、タスク・フロー名の隣にカスタム・アクションも表示するようにアプリケーションを構成できます。

図22-7 タスク・フロー・インスタンスのカスタム・アクション

この項では、コンポーネント・ナビゲータでタスク・フローのカスタム・アクションを有効にする手順を説明します。内容は次のとおりです。

- コンポーネント・ナビゲータでカスタム・アクションを構成する方法

- 実行時の処理内容

22.1.5.1 コンポーネント・ナビゲータでカスタム・アクションを構成する方法

コンポーネント・ナビゲータでタスク・フローに対するカスタム・アクションを表示するには、カスタム・アクションの動作を定義するJava Beanを作成し、このBeanをタスク・フローを含むアプリケーション・ページからコールする必要があります。この項では、これを行う手順を詳細に説明します。次のサブセクションが含まれます:

- カスタム・アクションのロジックの定義

- カスタム・アクションを含むJSFページの作成

- タスク・フローを含むアプリケーション・ページからのJSFページのコール

22.1.5.1.1 カスタム・アクションのロジックの定義

まず、ユーザーに提供するカスタム・アクションを決定し、ユーザーがそのカスタム・アクションを選択したときに実装されるロジックを含むJava Beanを作成する必要があります。この項では、カスタム・アクションをクリックするとユーザーにメッセージを表示する単純なロジックを実装する手順を説明します。サンプルのBeanには、カスタム・リンクとともに「閉じる」リンクと「タスク・フローの編集」リンクを表示するコードも含まれています。

Java Beanを作成するには:

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

2. 「新規ギャラリ」ダイアログで、「一般」を開き、「Java」、「Javaクラス」の順に選択して、「OK」をクリックします。

3. 「Javaクラスの作成」ダイアログで、「名前」フィールドにBackingBeanと入力し、「OK」をクリックします。

「ソース」ビューにBackingBean.javaファイルが表示されます。

4. 次のように必要なライブラリをインポートします。

import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import oracle.adf.view.page.editor.sourceview.ComponentInfo;

5. 次のコードを追加します。

public class BackingBean {
public BackingBean() {
}

public void action(ActionEvent actionEvent) {
FacesContext context = FacesContext.getCurrentInstance();
context.addMessage(null,
new FacesMessage(FacesMessage.SEVERITY_INFO, "Sample message to test whether the custom action works.",
null));
}

public boolean isRendered() {
return ComponentInfo.isRegion();
}

public String getZoomText() {
return ComponentInfo.isRootNode() ? "Close" : "Edit Task Flow";
}
}

このロジックでは、ユーザーがタスク・フロー・リージョンに対するカスタム・アクション・リンクをクリックすると、定義したサンプル・メッセージが表示されます。

isRegion() APIを使用して、カスタム・アクション・リンクがページのタスク・フロー・リージョンに対してのみ表示されていることを確認します。isRootNode() APIを使用して、「タスク・フローの編集」リンクまたは「閉じる」リンクがタスク・フローのルート・コンポーネントに対して表示されていることを確認します。

6. Beanを保存します。

22.1.5.1.2 カスタム・アクションを含むJSFページの作成

この項では、コンポーザでユーザーに表示するカスタム・アクションを含むJSFページを作成する手順を説明します。

JSFページを作成するには:

1. アプリケーション・プロジェクトで、customList.jspxというJSFファイルを作成します。

a. 「file」メニューから、「新」を選択します。

b. 「新規ギャラリ」ダイアログで、「Web層」を展開し、「JSF」、「JSFページ」の順に選択します。

c. ページの名前を入力し、「OK」をクリックします。

2. 次のサンプル・ページに示すように、Output Text、Command Linkなどのコンポーネントを使用してカスタム・アクションUIを設計します。

<?xml version='1.0' encoding='UTF-8'?>
<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" version="2.1"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:af="http://xmlns.oracle.com/adf/faces/rich">
<jsp:directive.page contentType="text/html;charset=UTF-8"/>
<af:componentDef var="attrs" componentVar="component">
<af:panelGroupLayout id="dc_pgl1" rendered="#{backingBean.rendered}">
<af:outputText value="[" id="dc_ot1"/>
<af:commandLink text="Test" id="dc_cl1"
actionListener="#{backingBean.action}"
binding="#{backingBean.customLink}"/>
<af:outputText value="]" id="dc_ot2"/>
</af:panelGroupLayout>
</af:componentDef>
</jsp:root>

このサンプルでは、Testというカスタム・アクションを作成します。このアクションのactionListener属性およびbinding属性は、前に作成したBackingBeanにバインドされます。

3. デフォルトの「タスク・フローの編集」オプションおよび「閉じる」オプションもタスク・フローの隣に表示するには、次の例に示すように、zoomというファセットを定義する必要があります。

<af:xmlContent>
<component xmlns="http://xmlns.oracle.com/adf/faces/rich/component">
<facet>
<facet-name>zoom</facet-name>
</facet>
</component>
</af:xmlContent>

4. 次の例に示すように、ページ・コンテンツにzoomファセットを含めます。

<af:outputText value="[" id="dc_ot3"/>
<af:facetRef facetName="zoom"/>
<af:outputText value="]" id="dc_ot4"/>

customLink.jspxページのソースは次のとおりです。

<?xml version='1.0' encoding='UTF-8'?>
<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" version="2.1"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:af="http://xmlns.oracle.com/adf/faces/rich">
<jsp:directive.page contentType="text/html;charset=UTF-8"/>
<af:componentDef var="attrs" componentVar="component">
<af:panelGroupLayout id="dc_pgl1" rendered="#{backingBean.rendered}">
<af:outputText value="[" id="dc_ot1"/>
<af:commandLink text="Test" id="dc_cl1"
actionListener="#{backingBean.action}"
binding="#{backingBean.customLink}"/>
<af:outputText value="]" id="dc_ot2"/>
<af:outputText value="[" id="dc_ot3"/>
<af:facetRef facetName="zoom"/>
<af:outputText value="]" id="dc_ot4"/>
</af:panelGroupLayout>
<af:xmlContent>
<component xmlns="http://xmlns.oracle.com/adf/faces/rich/component">
<facet>
<facet-name>zoom</facet-name>
</facet>
</component>
</af:xmlContent>
</af:componentDef>
</jsp:root>

5. JSFページを保存します。

22.1.5.1.3 タスク・フローを含むアプリケーション・ページからのJSFページのコール

タスク・フローを含む単純なJSFページ(MyPage.jspx)があるとします。ページのソースを次の例に示します。

<?xml version='1.0' encoding='UTF-8'?>
<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" version="2.1"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:af="http://xmlns.oracle.com/adf/faces/rich"
xmlns:pe="http://xmlns.oracle.com/adf/pageeditor"
xmlns:cust="http://xmlns.oracle.com/adf/faces/customizable">
<jsp:directive.page contentType="text/html;charset=UTF-8"/>
<f:view>
<af:document id="d1">
<af:form id="f1">
<af:panelStretchLayout topHeight="50px" id="psl1">
<f:facet name="top">
<pe:changeModeLink id="cml1"/>
</f:facet>
<f:facet name="center">
<!-- id="af_one_column_header_stretched"  -->
<pe:pageCustomizable id="pageCustomizable1">
<cust:panelCustomizable id="panelCustomizable1" layout="scroll">
<af:region value="#{bindings.taskflowdefinition1.regionModel}"
id="r1"/>
</cust:panelCustomizable>
<f:facet name="editor">
<pe:pageEditorPanel id="pep1"/>
</f:facet>
</pe:pageCustomizable>
</f:facet>
</af:panelStretchLayout>
</af:form>
</af:document>
</f:view>
</jsp:root>

タスク・フロー(taskflowdefinition1)には、次のview.jsffフラグメントが含まれています。

<?xml version='1.0' encoding='UTF-8'?>
<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" version="2.1"
xmlns:af="http://xmlns.oracle.com/adf/faces/rich">
<af:panelGroupLayout layout="scroll" id="pgl1">
<af:commandButton text="commandButton 1" id="cb1"/>
<af:commandButton text="commandButton 2" id="cb2"/>
</af:panelGroupLayout>
</jsp:root>

作成したカスタム・アクションを表示するには、コンポーザ内からcustomLink.jspxページがコールされるようにする必要があります。Page CustomizableコンポーネントのsourceViewNodeAction属性を使用して、このカスタム・アクションを含むJSFページを参照します。

Page Customizableタグが、ページ・ソースに次のように表示されます。

<pe:pageCustomizable id="pageCustomizable1"
sourceViewNodeAction="/customLink.jspx">

sourceViewNodeAction属性は、JSF (.jspx)ファイルの名前、またはJSF (.jspx)ファイル名として評価されるEL値を取ることができます。

22.1.5.2 実行時の処理内容

ブラウザに対してMyPage.jspxを実行し、コンポーザの「構造」ビューでページを開くと、コンポーネント・ナビゲータでは、ページの各タスク・フロー・インスタンスの隣に「テスト」リンクおよび「タスク・フローの編集」リンクが表示されます

23 WebCenter Portal偽装セキュリティのカスタマイズ

この章では、一連のWebCenter Portal偽装式言語式および適合する偽装APIを使用して偽装セッションをカスタマイズする方法について説明します。

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

- WebCenter Portal偽装のカスタマイズについて

- WebCenter Portal偽装ELの使用

- WebCenter Portal偽装APIの使用

23.1 WebCenter Portal偽装のカスタマイズについて

WebCenter Portal偽装を使用すると、指定されたユーザーが他のポータル・ユーザーになりすまし、そのユーザーとして操作を実行できます。このようなセッションは、一連のWebCenter Portal偽装式言語式(EL)および適合するJava APIを使用してカスタマイズできます。

偽装セッションの(偽装者による)開始方法および偽装セッションの(被偽装者による)許可方法の手順については、『Oracle Fusion Middleware Oracle WebCenter Portalの使用』のWebCenter Portal偽装の使用に関する項を参照してください。

23.2 WebCenter Portal偽装ELの使用

WebCenter Portal偽装では、偽装セッションのカスタマイズに使用できる一連の式言語式(EL)が提供されています。

公開されるELは、次のとおりです。

- #{WCSecurityContext.impersonationConfigured}: 現在のドメインで、偽装が有効化されているかどうかを返します。
このELは、偽装セッションの終了が早すぎることが原因でエラーが発生したのかどうかを判別したり、セッションが終了したことを示す追加のインジケータを提供する場合に便利です。

- #{WCSecurityContext.userInImpersonationSession}: 現在のユーザーが偽装セッション内かどうかを返します。
このELを使用して、コンテンツを保護し、偽装セッション中はアクセスできないようにレンダリングできます。たとえば、ページ上の管理タスク・フローのレンダリングされた属性をこのELにマップして、ユーザーが偽装セッションでタスク・フローを表示しない場合、タスク・フローのレンダリングのみを行うことができます。

- #{WCSecurityContext.currentImpersonator}: もし存在すれば、現在の偽装者を返します。
このELを使用すると、ページ・テンプレートを変更して偽装者を表示したり、特定の偽装者のみにアクセスできるようにコンテンツをレンダリングできます。

偽装およびその他のELの詳細は、「式言語式」を参照してください。

23.3 WebCenter Portal偽装APIの使用

WebCenter Portal偽装では、偽装セッションのカスタマイズに使用できるJava APIも提供されています。

oracle.webcenter.security.common.WCSecurityUtilityでは、次のパブリックAPIが公開されます。

- isImpersonationConfigured(): 現在のドメインで、偽装が有効化されているかどうかを返します。
このAPIは、エラーの原因が偽装セッションの終了が早すぎるためなのかを判定するため、またはセッション終了のインジケータを追加して提供するために役立ちます。

- isUserInImpersonationSession(): 現在のユーザーが偽装セッション内かどうかを返します。
このAPIは、コンテンツを保護するため、また偽装セッションの間にコンテンツをアクセス不能にするために使用することをお薦めします。たとえば、認証の例外をスローするか、ユーザーが偽装セッションでタスク・フローを表示している場合に空のリストを返すかして、ページ上の管理タスク・フローの変更された属性を、このAPIにマップすることが可能です。

- getCurrentImpersonatorId(): もし存在すれば、現在の偽装者を返します。
このAPIを使用して、偽装者を表示するようにページ・テンプレートを変更したり(次の例を参照)、特定の偽装者にかぎりアクセスできるコンテンツをいくつかレンダリングすることが可能です。

各種APIの詳細は、Oracle WebCenter Portal Java APIリファレンスを参照してください。

例: getCurrentImpersonatorId API

import oracle.webcenter.security.common.WCSecurityUtility;
if (WCSecurityUtility.isUserInImpersonationSession())
{
String impersonator =WCSecurityUtility.getCurrentImpersonatorId();
String currentUser =ADFContext.getCurrent().getSecurityContext().getUserName();
//Code to be executed when the user is in an impersonation session.
..log("User " +impersonator +" is impersonating as user " +currentUser);
}

第VI部 Oracle WebCenter Portalのコンポーザ

この部では、Oracle WebCenter Portalのコンポーザに関するリファレンス情報を示します。

この部は、次の章で構成されています。

- WebCenter Portalコンポーザの使用

- コンポーザを使用したページの実行時編集の有効化

- コンポーザを使用した実行時編集機能の拡張

- コンポーザの拡張構成の実行

- コンポーザ固有のMDS構成の実行

- コンポーザ・コンポーネントのデフォルトのセキュリティ動作の変更

- コンポーザ・コンポーネントのプロパティおよびファイル

24 WebCenter Portalコンポーザの使用

この章では、Oracle WebCenter Portalのコンポーザについて概説し、実行時にサポートする様々なタスクについて説明します。

この章のトピックは、次のとおりです:

- コンポーザの概要

- アプリケーションのカスタマイズとユーザーのカスタマイズの理解

- ページの編集モードと表示モードの理解

- ページ表示モードでのカスタマイズ機能

- ページ編集モードの「デザイン」ビューおよび「コンテンツの追加」ビューでの編集機能

- ページ編集モードの「構造」ビューでの編集機能

- コンポーザ・コンポーネント

- セキュリティおよびコンポーザ

24.1 コンポーザの概要

コンポーザは、アプリケーション実行時にページ・コンテンツを追加および編集するための完全に統合されたページ・エディタです。コンポーザの機能を理解するには、まず、次のステージから構成される、典型的なアプリケーション開発ライフサイクルを確認します。

- アプリケーション開発者は、設計時にアプリケーションを作成します。
設計時は従来から、アプリケーションの作成または編集の統合開発環境(IDE)を表します。Oracle WebCenter Portalの場合、Oracle JDeveloperが設計時環境を提供します。

- アプリケーション管理者は、これらのアプリケーションをマネージド・サーバーにデプロイします。

- エンド・ユーザーは、実行時にデプロイされたアプリケーションにアクセスします。
実行時とは、Webアプリケーションにアクセスするために使用されるブラウザ・ベースの環境を表します。

各ステージに異なるカテゴリのユーザーが関与することがわかります。多くの場合、これらのユーザーの一部またはすべてが実行時にページを変更する必要があります。たとえば、ワークリストやメール・タスク・フローなどの、ログイン・ユーザーに関する情報を表示するダッシュボードのようなアプリケーションについて考えてみます。ページ開発者は、ダッシュボード・ページを作成し、これに必要なコンポーネントおよびタスク・フローを移入します。アプリケーション管理者は、アプリケーションを顧客のサイトにデプロイします。顧客のサイトでは、組織の様々なレベルの人がダッシュボードを表示し、次のリクエストを行います。

- 部門の管理者は、「部門ニュース」タスク・フローを追加します。

- ライン・オブ・ビジネス(LOB)管理者は、「個人/役職者が使用する経費」タスク・フローを追加します。
ライン・オブ・ビジネス機能は、ビジネス・アナリストまたは同等の役職によって実行できる管理機能です。LOB管理者は、実行に最上位レベル管理機能を必要としない管理タスクを実行できます。

- 国のサイト管理者は、それぞれの国の運営または規則を表示するタスク・フローを追加します。

また、コンテンツ・コントリビュータ、モデレータおよびエンド・ユーザーは、ビジネス・ニーズに基づいてページ・アーティファクトを追加、削除または変更します。典型的なアプリケーション開発環境では、これらのリクエストはページ開発者に渡されます。開発者は、開発環境でアプリケーションを変更し、これを顧客のサイトに再デプロイします。

単純な変更を開発者に戻すのではなく、コンポーザはMetadata Services (MDS)とともに、ビジネス・ユーザーが実行時にアプリケーション・ページを編集できる編集ツールを提供します。実行時に行われた変更はメタデータとして保存され、ベースのアプリケーション定義から隔離されます。実行時にアプリケーション・ページを編集するこの概念は、実行時に設計と呼ばれます。これは、設計時にアプリケーションを変更してこれを再デプロイする必要を最小化します。

コンポーザは、実行時にアプリケーション設計を行う動作を制御するコンポーネントを提供します。この章では、コンポーザを効果的に使用するために必要な基本的な概念および用語について説明します。

24.2 アプリケーションのカスタマイズとユーザーのカスタマイズの理解

ユーザーが実行時にページを変更すると、通常その変更はそのユーザーのみが使用できます。アプリケーションを構成して、ページにアクセスするすべてのユーザーまたはユーザーのサブセットが実行時の変更を使用できるようにすることができます。LOBのメンバーが使用する経費の詳細を表示するダッシュボード・ページの例について考えてみます。LOB管理者がページを変更し、いくつかの経費に関するガイドラインを追加する場合、その変更はすべてのメンバーに表示される必要があります。そのような要件に対処するために、コンポーザでは、ユーザーはページを異なるモードで編集し、変更をユーザーのカスタマイズ(個々のユーザーのページの表示にのみ影響)またはアプリケーションのカスタマイズ(全員のページの表示に影響)として保存できます。

変更をユーザーのカスタマイズまたはアプリケーションのカスタマイズのいずれかとして保存するには、これらをバックエンドで別々に保存する必要があります。メタデータ・ドメインでは、MDSは、ベース・アプリケーション定義の上の別々のレイヤーにカスタマイズを保存することを許可しています。ビジネス要件に応じて、単一のレイヤーまたは複数のレイヤーに変更を保存できます。

単一レイヤー構成では、変更は、アプリケーションのカスタマイズとしてすべてのユーザーがアクセスできる共通レイヤーに保存されます。この場合、変更をユーザーのカスタマイズとして保存することはできません。

複数レイヤー構成では、変更は、ページが編集されたモード、ページを編集したユーザー、ユーザー・ロールなどの指定された条件に基づいて個別の場所に保存されます。この種の構成では、各カスタマイズ・レイヤーは他のレイヤーから隔離されますが、レイヤーを相互に積み重ねてアップグレード時に柔軟性を持たせることができます。たとえば、ユーザーが、表示されるページのデフォルトのテーマを変更する必要があるとします。この変更は、ページの他者の表示に影響を与えずに、このユーザーに対してのみ保存されることが期待されているとします。したがって、このページのパーソナライズ権限を持っているエンド・ユーザーによって行われる変更がユーザーのカスタマイズとして保存され、カスタマイズレベル権限を持っているログイン・ユーザーによって行われる変更がアプリケーションのカスタマイズとして保存されるように設定できます。パーソナライズ権限とカスタマイズ/編集権限を持つユーザーが使用できるタスクをそれぞれ決定できます。

MDSおよびカスタマイズ・レイヤーの詳細は、「MDSの概要」を参照してください。

24.3 ページの編集モードと表示モードの理解

ユーザーがブラウザでアプリケーション・ページを開くと、ページは表示モードで開きます。コンポーザは、編集モードという別のモードへのアクセスを提供し、適切な権限を持つユーザーはアプリケーション・ページを編集できます。これらのモードを詳細に説明します。

- 編集モード: 通常このモードは、アクセス権限を持つ認証されたユーザーが使用してページ・コンテンツを編集できます。表示モードで実行できる標準タスクに加えて、コンポーザは、編集モードへの切り替えおよびコンポーネントの追加、コンポーネントの削除、コンポーネントのプロパティの編集などのタスクの実行のための制御を提供します。通常、編集モードでページに対して行われる変更はアプリケーションのカスタマイズとして保存され、そのページにアクセスするすべてのユーザーが使用できます。

- 表示モード: ブラウザで開いたときに表示されるページのデフォルト・ビュー。このモードでは、ユーザーは、コンポーネントの再配置、コンポーネントの折りたたみと展開およびレイアウトの変更などのタスクを実行できます。通常、表示モードでページに対して行われる変更はそのユーザーのみが使用でき、ユーザーのカスタマイズとして保存されます。

24.3.1 編集モードについて

コンポーザの編集モードには、広範なアプリケーションのカスタマイズ機能が用意されています。編集モードでは、ユーザーは、コンテンツの追加、ページとコンポーネントのプロパティの編集、コンポーネントの削除、コンポーネントの再配置、ページ・レイアウトの変更などを行えます。

この章で説明する機能をアプリケーションに提供するには、Change Mode LinkまたはChange Mode Button、Page Customizable、Panel Customizable、Show Detail Frame、Custom ActionsおよびLayout Customizableの各コンポーザ設計時コンポーネントをページに追加します。これらのコンポーネントの詳細は、「コンポーザ・コンポーネント」を参照してください。

Change Mode LinkコンポーネントまたはChange Mode Buttonコンポーネントをカスタマイズ可能なページに追加すると、コンポーザの表示モードのページに「編集」リンクが表示されます。ユーザーが「編集」リンクまたはボタンをクリックすると、編集モードのコンポーザでページが開きます。図24-1は、表示モードのページの「編集」リンクを示しています。

図24-1 表示モードでの「編集」リンク

編集モードでは、デフォルトのコンポーザ・ツールバーに、編集中のページのタイトル、「ページ・プロパティ」アイコン、「ページのリセット」アイコンおよび「閉じる」ボタン(図24-2)が表示されます。

図24-2 コンポーザのツールバー

デフォルトでは、編集モードのページには「コンテンツの追加」と「構造」の2つのビューが表示されます。ただし、「デザイン」、「コンテンツの追加」、「構造」、「選択」および「プレビュー」のいずれかまたはすべてのビューを表示するようにページを構成できます。DesignViews属性を使用して、編集モードで表示するビューを指定します。値をallと指定すると、「コンテンツの追加」ビューを除くすべてのビューが編集モードで使用可能になります。

拡張機能を使用できるように、コンポーザにすべてのビューを表示するようにページを構成することをお薦めします。DesignViews属性は、編集モードで表示するビューを指定するために使用します。この属性によって、ユーザーがコンポーザで使用できるビューを指定します。「コンテンツの追加」ビューおよび「構造」ビューは、後方互換性のためにデフォルトで利用できます。この属性には要素の空白区切りリストを指定できます。選択可能なオプションは、design、add-content、source、select、previewおよびallです。値をallに設定すると、「コンテンツの追加」以外のすべてのビューがレンダリングされ、「デザイン」ビューがコンポーザでのデフォルトのビューになります。

designViews属性を設定すると、adf-config.xmlのdesignViews設定がオーバーライドされます。ただし、この属性がNullを返すELに設定されている場合、designViewsにはadf-config.xmlの設定が使用されます。

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

- 編集モードの「コンテンツの追加」ビューについて

- 編集モードの「構造」ビューについて

- 編集モードの「デザイン」ビューについて

- 編集モードの「選択」ビューについて

- 編集モードの「プレビュー」ビューについて

24.3.1.1 編集モードの「コンテンツの追加」ビューについて

「コンテンツの追加」ビューは、コンポーザのページを開く際のデフォルト・ビューです。このビューでは、ページとコンテンツがWYSIWYGで表示され、各コンポーネントのコントロールを直接選択できます。

図24-3 コンポーザの「コンテンツの追加」ビュー

24.3.1.2 編集モードの「構造」ビューについて

「構造」ビューでは、ページ・コンポーネントがWYSIWYG表示と階層表示を組み合せて表示されます。つまり、ページ構造ペインのツールバーで、ページ・コンポーネントの追加、編集、削除、非表示および再配置のためのコントロールを使用できます(図24-4)。

注意:

childCreation属性は、ポップアップ・ダイアログの子をコンポーザで表示できるかどうかを決定します。デフォルトでは、この属性はdeferredに設定されており、ポップアップ・ダイアログの子を表示する際に使用できます。値をimmediateに設定すると、ポップアップ・ダイアログの子を表示できます。

childrenCreation属性をimmediateに設定すると、パフォーマンスに影響を与えます。ページ上でポップアップを使用する必要がない場合には、deferredのデフォルト設定を使用するとCPUのペナルティと不要なメモリーの使用を避けることができます。ポップアップは非モーダルで表示されるため、アプリケーションではエラーなしでそのファクトを処理できる必要があります。コンポーザに関連するEL式の詳細は、「コンポーザに関連するEL」を参照してください。

図24-4 ページ編集モードの「構造」ビュー

24.3.1.3 編集モードの「デザイン」ビューについて

「デザイン」ビューでは、ページとコンテンツがWYSIWYGで表示され、各コンポーネントのコントロールを直接選択できます。リソース・カタログがページの右側にインライン表示され、そこからページに追加するコンポーネントを選択できます(図24-5)。

インライン・リソース・カタログを非表示にして、かわりにページの各領域に「コンテンツの追加」ボタンを表示することもできます。これは、コンポーネントを追加できる場所の特定に役立ちます。

「デザイン」ビューは、デフォルトでは編集モードで使用できません。このビューを使用可能にするには、Page CustomizableコンポーネントのDesignViews属性の値をdesignまたはallに設定します。詳細は、「Page Customizableコンポーネント」を参照してください。

「デザイン」ビューの表示を選択した場合は、このビューがデフォルト・ビューとして表示され、「コンテンツの追加」ビューは編集モードで表示されません。

図24-5 コンポーザの「デザイン」ビュー

24.3.1.4 編集モードの「選択」ビューについて

「選択」ビューは、ページとそのコンテンツのWYSIWYG表示を提供します。このビューでは、コンポーネントを選択して、そのコンポーネントのプロパティまたはその親コンポーネントのプロパティにすばやくアクセスできます。選択ビューでは、コンポーネントを削除できません。

「デザイン」ビューと同様に、ページの右側にリソース・カタログがインラインで表示されます。ここでは、ページに追加するコンポーネントを選択できます(図24-6)。

編集モードでは、「選択」ビューはデフォルトでは使用できません。このビューを使用可能にするには、Page CustomizableコンポーネントのDesignViews属性の値をselectまたはallに設定します。詳細は、「Page Customizableコンポーネント」を参照してください。

図24-6 ページ編集モードの「選択」ビュー

24.3.1.5 編集モードの「プレビュー」ビューについて

「プレビュー」ビューは、公開されるページのプレビューを、アプリケーションに表示されるときと同様に表示します。

編集モードでは、「プレビュー」ビューはデフォルトでは使用できません。このビューを使用可能にするには、Page CustomizableコンポーネントのDesignViews属性の値をpreviewまたはallに設定します。詳細は、「Page Customizableコンポーネント」を参照してください。

24.4 ページ表示モードでのカスタマイズ機能

コンポーザによって、ユーザーは表示モードと編集モードでページをカスタマイズできます。この項では、ページ表示モードでユーザーが可能なユーザー・カスタマイズ・タスクの概要について説明します。このようなタスクには、コンポーネントの再配置、コンポーネントの折りたたみと展開およびページ・レイアウトの変更などがあります。この項で説明する機能を有効にするには、次のコンポーザの設計時コンポーネントをページに追加します: Panel Customizable、Show Detail Frame、Custom ActionsおよびLayout Customizable。これらのコンポーネントの詳細は、「コンポーザ・コンポーネント」を参照してください。表示モードでページに加えられた変更は、その変更を行ったユーザーにのみ有効になります。

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

- コンポーネントの再配置

- レイアウトの変更

- コンポーネントの展開と縮小

注意:

ページで実行できる編集タスクの詳細は、『Oracle Fusion Middleware Oracle WebCenter Portalでのポータルの構築』の「ポータル・ページの作成および編集」の章を参照してください。

24.4.1 コンポーネントの再配置

この機能では、ユーザーは、最も役に立つコンテンツがページの上部に表示されるようにページのコンポーネントを編成できます。ユーザーは、次の2つの方法でコンポーネントを再配置できます。

- ドラッグ・アンド・ドロップ
ユーザーは、ページのPanel Customizableコンポーネント内またはPanel Customizableコンポーネント間でコンポーネントをドラッグ・アンド・ドロップしてこれを再配置できます。編集モードでPanel Customizableコンポーネントを識別するのは困難であるため、ユーザーは単純にコンポーネントを配置したい場所にドラッグできます。実線のボックスはドロップできる場所を示します。

- 「アクション」メニューの使用
Show Detail Frameコンポーネントまたはポートレット・コンポーネントの移動アクションでは、ユーザーは、これらのコンポーネントを親のPanel Customizableコンポーネント内で移動できます。Panel Customizableに複数の子コンポーネントがある場合、子のShow Detail Frameまたはポートレットを他の子コンポーネントの位置に対して左右または上下に移動できます。図24-7は、「上へ移動」アクションおよび「下へ移動」アクションがあるサンプルのShow Detail Frameコンポーネントを示しています。この例では、「下へ移動」を選択すると、Latest NewsコンポーネントがPress Releaseコンポーネントの真下に移動します。

図24-7 Show Detail Frameの「アクション」メニュー

24.4.2 レイアウトの変更

この機能を使用すると、ユーザーは、コンポーザに用意されている一連の事前定義済のレイアウトを切り替えることができます。「レイアウトの変更」アイコンを使用して、ユーザーはニーズや好みに合せて8つの異なるレイアウトから選択できます。コンポーザ・ライブラリのLayout Customizableコンポーネントは、図24-8に示すように、ページ上の「レイアウトの変更」アイコンの表示を有効にします。

図24-8 「レイアウトの変更」アイコン

図24-9は、Layout Customizableコンポーネントで使用可能なレイアウト・オプションを示しています。ページまたは領域に現在適用されているレイアウトは、グレーの境界線で強調表示されています。

図24-9 レイアウト・オプション

24.4.3 コンポーネントの展開と縮小

ページでコンポーネントの展開と縮小を有効にすることによって、外観を損ねることなくページにより多くの詳細情報を含めることができます。ユーザーは、必要に応じてコンポーネントを縮小したり展開したりできます。

Show Detail Frameまたはポートレットの「縮小」アイコンを使用すると、ユーザーはそのコンポーネントを縮小し、そのヘッダーのみを表示できます。図24-10は、Show Detail Frameコンポーネントの「縮小」アイコンを示しています。

図24-10 Show Detail Frameの「縮小」アイコン

縮小されたコンポーネントで「展開」アイコンを使用すると、ユーザーはコンポーネントがヘッダーとコンテンツを表示するようにこれを展開できます。図24-11は、2つの閉じられたShow Detail Frameコンポーネントの「展開」アイコンを示しています。

図24-11 Show Detail Frameの「展開」アイコン

24.4.4 ポートレットのパーソナライズ

アプリケーションにポートレットが含まれている場合、ユーザーは、そのポートレットに必要な情報を表示させることも、ポートレットを非表示にすることも、ページから削除することもできます。表示モードでポートレットに加えた変更は、そのユーザーにのみ有効になります。図24-12に、Web Clippingポートレットでユーザーが実行できるアクションを示します。「パーソナライズ」オプションは、ページ表示モードのポートレットでのみ使用できます。

図24-12 Web Clippingポートレットの「パーソナライズ」アクション

24.5 ページ編集モードの「デザイン」ビューおよび「コンテンツの追加」ビューでの編集機能

この項では、コンポーザがページ編集モードで提供する編集機能について説明します。次のサブセクションが含まれます:

- コンテンツの追加

- ページ・コンテンツの再配置

- コンポーネントのプロパティおよびパラメータの編集

- 現在のレイヤーのコンポーネント・プロパティのリセットとオーバーライド

- リソース文字列の編集

- コンポーネントの表示または非表示

- コンポーネントの削除

- レイアウトの変更

- ページ・プロパティの編集

- ページ・パラメータへのコンポーネントの関連付け

- ページのリセット

- エラー検出時のアプリケーションのカスタマイズのリセット

- 子コンポーネントの表示名のカスタマイズ

- アプリケーションのカスタマイズ保存時のラベルの作成

- アプリケーションのカスタマイズの管理

注意:

アプリケーションを保護し、コンポーネントにカスタマイズ制限を適用することによって、ユーザーがこれらのタスクのすべてまたは一部を実行できないように制限することができます。詳細は、「セキュリティおよびコンポーザ」を参照してください。

ユーザーがページで実行できる実行時編集タスクの詳細は、『Oracle Fusion Middleware Oracle WebCenter Portalでのポータルの構築』のページの編集に関する項を参照してください。

24.5.1 コンテンツの追加

権限のあるユーザーは、ニュースや株式の最新情報を表示するポートレットなどのページにカスタム・コンテンツを追加できます。コンポーザにより、ユーザーは編集モードで任意のコンテナにコンテンツを追加できます。Oracle WebCenter Portalのリソース・カタログ(Oracle Business Dictionaryとも呼ばれる)には、ユーザーがページに追加できるリソースが含まれています。これらには、ドキュメント、Oracle ADFコンポーネント、ポートレットおよびタスク・フローが含まれています。カタログは、ページの編集モードで、次の方法を使用して起動できます。

- 「コンテンツの追加」ビューと「デザイン」ビューで、ページの任意のコンテナ・コンポーネントの「コンテンツの追加」ボタンをクリックします。
「デザイン」ビューで、デフォルトではインライン・リソース・カタログが使用可能ですが、これを非表示にして、かわりにページの各領域に「コンテンツの追加」ボタンを表示することもできます。これは、コンポーネントを追加できる場所の特定に役立ちます。

- 「構造」ビューでは、コンテナ・コンポーネントを選択して、「構造」ビューのツールバーの「選択したコンポーネントにコンテンツを追加」アイコンをクリックします。

注意:

コンテナ・コンポーネントのカスタマイズを制限している場合、ユーザーは、実行時にこの内部にコンポーネントを追加できません。詳細は、「カスタマイズ・ポリシーの定義によるコンポーネント・レベルの制限の適用」を参照してください。

図24-13は、Frameworkアプリケーションの「コンテンツの追加」ダイアログを示しています。

図24-13 「コンテンツの追加」ダイアログ

「コンテンツの追加」ダイアログにはフォルダとコンポーネントが含まれています。カタログのアイテムの隣にある「開く」リンクは、アイテムがフォルダであることを示しています。権限のあるユーザーは、このリンクをクリックしてフォルダをドリルダウンできます。アイテムの隣にある「追加」リンクは、アイテムをページに追加できることを示しています。「追加」リンクは、コンポーネントまたはフォルダの隣に表示されます。コンポーネントは、「コンテンツの追加」リンクがクリックされたコンテナに最初の子として追加されます。

注意:

ダイアログの「上」アイコンを使用すると、ユーザーは最上位フォルダに戻ることができます。

リソースをページに追加するためのドロップ・ハンドラを構成した場合、「追加」リンクに、コンポーネントをページに追加するためのものと異なるオプションを含むコンテキスト・メニューが表示されます。詳細は、「コンポーザUIイベントのイベント・ハンドラの構成」を参照してください。

構成に応じて、ダイアログは権限のあるユーザーに対して次のコンポーネントのすべてまたはサブセットを公開します。

- ADF Facesコンポーネント
「Web開発」フォルダには、BoxコンポーネントおよびMovable Boxコンポーネントが用意されています。これらは、JDeveloperの設計時コンポーネントPanel CustomizableおよびShow Detail Frameと類似のものです。JDeveloperでは、これらのコンポーネントは、コンポーザ・タグ・ライブラリで使用できます。

注意:

設計時にページに追加されたPanel CustomizableコンポーネントおよびShow Detail Frameコンポーネントは、引き続き同じ呼び名です。これらのコンポーネントは、実行時にそれぞれBoxコンポーネントおよびMovable Boxコンポーネントと表示されることはありません。

このフォルダには、HTML Markup、Hyperlink、Image、TextおよびWeb Pageの各コンポーネントが用意されています。これらは、それぞれJDeveloperの設計時コンポーネントOutput Text、Go Link、Go Image Link、Rich Text EditorおよびInline Frameに類似しています。JDeveloperでは、これらのコンポーネントは、ADF Facesタグ・ライブラリで使用できます。

カタログの「Web開発」フォルダには、図24-14に示すようにこれらのコンポーネントが含まれています。

図24-14 ページに追加可能なADF Facesコンポーネント

- タスク・フロー
権限のあるユーザーは、カスタム・タスク・フローおよび即時利用可能なWebCenter Portalのツールとサービス・タスク・フローをページに追加できます。ページに追加されるタスク・フローは、Movable Boxコンポーネント内に自動的に含まれます。その結果、タスク・フローは、コンポーネントを移動または削除するためのオプション付きのヘッダーを表示します。

注意:

タスク・フローを囲んでいるMovable Boxコンポーネントは、そのタスク・フローがページで表示されている場合のみ表示されます。つまり、タスク・フローの表示権限すら付与しない場合、これを囲むMovable Boxもページで表示されません。

- ポートレット
ポートレット・フォルダは、登録済プロデューサをすべてリストします。権限のあるユーザーは必要なポートレットにナビゲートし、これをページに追加できます。ポートレット・フォルダは、Oracle JDeveloperで登録された任意のJava-PDKまたはWSRPプロデューサからポートレットを公開します。ポートレット・プロデューサの登録の詳細は、『Oracle Fusion Middleware Oracle WebCenter Portalの管理』のOracle PDK-Javaポートレット・プロデューサの登録に関する項を参照してください。

- ドキュメント
コンテンツ管理フォルダは、ユーザーがページに追加できるドキュメントおよびフォルダをリストします。

詳細は、『Oracle Fusion Middleware Oracle WebCenter Portalでのポータルの構築』のページのWeb開発コンポーネントの使用に関する項を参照してください。

24.5.1.1 タブ・セットまたはタブのBoxコンポーネントへの追加

「ボックス」コンポーネントにあるツールバーには、タブまたはタブのセットをBoxコンポーネントに追加するオプション(図24-15)が用意されています。タブを使用して、ページの個別のレイヤーとしてコンテンツ・リージョンを追加します。新しいタブそれぞれが現在選択されたタブの下のレイヤーとして配置され、コンテンツを移入できるリージョンを含みます。

「タブ・セットまたはタブの追加」アイコンは、Panel CustomizableコンポーネントのshowTabAction属性がtrueに設定されている場合に使用可能です。

図24-15 「ボックス」コンポーネントにある「タブ・セットまたはタブの追加」アイコン

ユーザーがBoxコンポーネントにある「タブ・セットまたはタブの追加」アイコンをクリックすると、コンポーザはBoxコンポーネントの周りにタブを追加します。「構造」ビューでは、図24-16に示すように、BoxコンポーネントがShow Detail Itemコンポーネント内にネストされていて、さらにこれがPanel Tabbedコンポーネント内にネストされています。ユーザーは、この方法で任意の数のタブを追加できます。

図24-16 「構造」ビューのTabコンポーネント

ユーザーが最初に追加するタブは、選択したBoxコンポーネントを囲みます。その後の各タブは、新しいBoxコンポーネントをその内部に含みます。

権限のあるユーザーは、「コンテンツの追加」ビューまたは「デザイン」ビューの「削除」アイコンをクリックしてタブを削除できます。最後のタブを削除すると、Panel Tabbedコンポーネントがページから削除されます。また、「構造」ビューでPanel Tabbedコンポーネントを削除することによって、タブ・セットを削除できます。その内部にあるBoxを削除せずにタブのみを削除するには、ユーザーは、まずBoxをPanel Tabbedコンポーネントの外側に移動(切取りおよび貼付け)してからPanel Tabbedコンポーネントを削除する必要があります。

24.5.1.2 既存のコンポーネントに隣接するBoxコンポーネントの追加

「コンテンツの追加」ビューまたは「デザイン」ビューの「ボックス」コンポーネントにあるツールバーには、コンポーネントの前または後ろに別のBoxコンポーネントを追加するオプションが用意されています。この機能を使用すると、ユーザーは、ページでコンポーネントのレイアウトを変更できます。

ユーザーがBoxコンポーネントにある「追加」アイコンをクリックすると、コンポーザは別のBoxコンポーネントをその前または後ろに追加し、両方のBoxコンポーネントをPanel Group Layoutで囲みます。使用するアイコンに応じて、新しいBoxコンポーネントは、元のBoxコンポーネントの左、右、上または下に追加され、親のPanel Group LayoutコンポーネントにあるLayout属性がhorizontalまたはverticalに設定されます。ユーザーは、この方法で多くの連続したBoxコンポーネントを追加できます。新しいBoxコンポーネントの方向が変わるたびに、適切なレイアウト設定(水平方向または垂直方向)を持つ新しいPanel Group Layoutが新規および既存のBoxコンポーネントの周りに追加されます。

注意:

「追加」アイコンは、次の場合にはコンポーネント上にレンダリングされません。

- Panel CustomizableコンポーネントのallowAction属性がfalseに設定されている場合

- Panel Customizableがストレッチされている場合

- Panel Customizableコンポーネントが制限されている場合

詳細は、「コンポーザ・コンポーネントのデフォルトのセキュリティ動作の変更」を参照してください。

ユーザーは、「コンテンツの追加」ビュー、「デザイン」ビューおよび「構造」ビューを使用して、追加したBoxコンポーネントを削除できます。

注意:

Panel Group LayoutにBoxコンポーネントが2つしかなく、その内の1つを削除すると、Panel Group Layoutも削除されます。

「ボックス」コンポーネントのツールバーには、編集アイコンに加えて次のボックス追加アイコンがあります。

- 上にボックスを追加

- 下にボックスを追加

- 左にボックスを追加

- 右にボックスを追加

24.5.1.2.1 上にボックスを追加

「上にボックスを追加」アイコン(図24-17)をクリックすると、Boxコンポーネントが選択したBoxコンポーネントの上に追加されます。Panel Group Layoutのlayout属性はverticalに設定されます。

図24-17 「ボックス」コンポーネントの「上にボックスを追加」アイコン

図24-18は、Boxコンポーネントの隣に別のBoxコンポーネントを追加する前の「構造」ビューでのBoxコンポーネントの表示です。

図24-18 隣接する別のBoxコンポーネントを追加する前のBoxコンポーネント

図24-19は、コンポーネント・ナビゲータで垂直に整列された2つのBoxコンポーネントを示しています。

図24-19 上に追加されたBoxコンポーネント

ユーザーは、「上にボックスを追加」アイコンを繰り返しクリックして、多くの連続したBoxコンポーネントを同じ親Panel Group Layoutの中に垂直に追加できます。

24.5.1.2.2 下にボックスを追加

「下にボックスを追加」アイコン(図24-20)をクリックすると、Boxコンポーネントが選択したBoxコンポーネントの下に追加されます。Panel Group Layoutのlayout属性はverticalに設定されます。

図24-20 「ボックス」コンポーネントの「下にボックスを追加」アイコン

ユーザーは、「下にボックスを追加」アイコンを繰り返しクリックして、多くの連続したBoxコンポーネントを同じ親Panel Group Layoutの中に垂直に追加できます。

24.5.1.2.3 左にボックスを追加

「左にボックスを追加」アイコン(図24-21)をクリックすると、Boxコンポーネントが選択したBoxコンポーネントの左に追加されます。Panel Group Layoutのlayout属性はhorizontalに設定されます。

図24-21 「ボックス」コンポーネントの「左にボックスを追加」アイコン

図24-22は、コンポーネント・ナビゲータで水平に整列された2つのBoxコンポーネントを示しています。

図24-22 左に追加されたBoxコンポーネント

ユーザーは、「左にボックスを追加」アイコンを繰り返しクリックして、多くの連続したBoxコンポーネントを同じ親Panel Group Layoutの中に水平に追加できます。

24.5.1.2.4 右にボックスを追加

「右にボックスを追加」アイコン(図24-23)をクリックすると、Boxコンポーネントが選択したBoxコンポーネントの右に追加されます。Panel Group Layoutのlayout属性はhorizontalに設定されます。

図24-23 「ボックス」コンポーネントの「右にボックスを追加」アイコン

ユーザーは、「右にボックスを追加」アイコンを繰り返しクリックして、多くの連続したBoxコンポーネントを同じ親Panel Group Layoutの中に水平に追加できます。

24.5.2 ページ・コンテンツの再配置

この機能では、たとえば、最も役に立つコンテンツがページの上部に移動できるように、最も簡単に使用できる場所に基づいて、ユーザーはページのコンポーネントを編成できます。「コンテンツの追加」ビューと「デザイン」ビューで、ユーザーは次の方法でページ上のコンテンツを再配置できます。

- ページにある同じPanel Customizableコンポーネント内またはPanel Customizable(あるいはBox)コンポーネントの間でコンポーネントをドラッグ・アンド・ドロップします。

- Show Detail Frameまたはポートレットの「アクション」メニューにある「移動」アクションを使用して、これを親Panel Customizableコンポーネント内で移動します。Panel Customizableコンポーネントの子コンポーネントの数、およびそれらのコンポーネントの向きに応じて、コンポーネントを左、右、上または下に移動できます。

- コンテナ内でコンポーネントの順序を変更するには、コンテナの「コンポーネント・プロパティ」ダイアログで、「子コンポーネント」タブをクリックし、子コンポーネントごとに表示される上下の矢印を使用します(図24-24)。

注意:

カスタマイズが制限されているコンポーネントは、その親がカスタマイズ可能である場合、その親コンテナ内で再配置できます。

「子コンポーネント」タブには、直接の子コンポーネントのリストをタブの上部に表示し(「コンポーネント」リスト)、次にそのコンポーネントに対して定義されたすべてのファセットのリストを表示します(「固定コンポーネント」リスト)。ファセット・コンポーネントは再配置できないため、これらのコンポーネントには上下の矢印はありません。「固定コンポーネント」リストは、コンポーネントにファセットが含まれている場合のみ表示されます。

図24-24 コンテナの「子コンポーネント」タブの順序変更オプション

24.5.3 コンポーネントのプロパティおよびパラメータの編集

「コンポーネント・プロパティ」ダイアログを使用すると、ユーザーは、ポートレットやタスク・フローなどのコンポーネントに関連付けられたコンポーネントのプロパティおよびパラメータを編集できます。

注意:

コンポーネントは次の場合には編集できません。

- 設計時に、コンポーネントにId属性が設定されなかった場合

- コンポーネントまたはその属性のいずれかが制限されている場合
カスタマイズの制限の詳細は、「コンポーザ・コンポーネントのデフォルトのセキュリティ動作の変更」を参照してください。

- これがADF Facesライブラリのコンポーネントである場合

「コンテンツの追加」ビューおよび「デザイン」ビューで、コンポーネントの「編集」アイコンをクリックすると、図24-25に示すように「コンポーネント・プロパティ」ダイアログが表示されます。

図24-25 「コンポーネント・プロパティ」ダイアログ

「表示オプション」タブでは、ユーザーは、背景やタイトルなどの視覚的なプロパティを編集できます。「パラメータ」タブが使用可能な場合、ユーザーはこのタブを使用して、ポートレットやタスク・フローなどのコンポーネントのパラメータを編集できます。

グラフ、円グラフおよびゲージ

コンポーネントが「グラフ」コンポーネント、「円グラフ」コンポーネントまたは「ゲージ」コンポーネントの場合、グラフのプロパティを編集するために追加パネルが使用できます。

図24-26 「グラフ」コンポーネントの追加コンポーネント・プロパティ・タブ

「コンポーネント・プロパティ」のカスタマイズの視覚的な意味

「表示オプション」タブにあるプロパティの隣のアイコンは、プロパティが実行時に編集されたことを意味します。2つの異なるアイコンが使用され、現在のコンテキストおよび異なるレイヤーで行われた変更を示します。図24-27は、プロパティが更新されたことを示すために使用される2つの異なるアイコンを示しています。

注意:

プロパティのカスタマイズの視覚的意味は、アプリケーションで複数のカスタマイズ・レイヤーを構成した場合のみ関係します。詳細は、「カスタマイズ・レイヤーの表示モードおよび編集モードへの追加: 例」を参照してください。

図24-27 プロパティのカスタマイズの視覚的意味

EL値を含むプロパティはグレー表示され、デフォルトの式値はテキスト・フィールドの下側にグレーのテキストで表示されます。ユーザーがプロパティのEL値を文字列値に変更すると、古いEL値はプロパティ・フィールドの下側に表示されます。これは、古いEL値を必要とする別のユーザーにとって役立ちます。

「コンポーネント・プロパティ」ダイアログでは、ユーザーは、現在のコンテキストの視覚的プロパティをリセットすることもできます。詳細は、「現在のレイヤーのコンポーネント・プロパティのリセットとオーバーライド」を参照してください。

24.5.4 現在のレイヤーのコンポーネント・プロパティのリセットとオーバーライド

ユーザーは、現在のレイヤーのコンポーネント・プロパティに対して行ったアプリケーションのカスタマイズをリセットおよびオーバーライドできます。「コンポーネント・プロパティ」ダイアログには、「コンポーネント・プロパティ」ダイアログのパネルにある特定のプロパティまたはすべてのプロパティをリセットするオプションが用意されています。

プロパティのコンテキスト・メニューにある「オーバーライド」オプション(図24-28)を使用すると、ユーザーは、別のレイヤーの値を現在のレイヤーの固定値として使用できます。たとえば、ユーザーは、レイヤーXのMovable BoxコンポーネントにあるShort Descプロパティを編集して、これをFirst Frameに設定します。別のレイヤーYでこのコンポーネントを編集しているユーザーは、First FrameをレイヤーYのShort Descの固定値として選択できます。レイヤーYのこのコンポーネントにアクセスしているすべてのユーザーには、今後この値が表示されます。Short Descの値は、レイヤーXでこの値が変更されてもレイヤーYでは変更されません。ユーザーがプロパティに値を入力すると、そのプロパティの「オーバーライド」オプションはグレー表示されます。

図24-28 「コンポーネント・プロパティ」ダイアログの「リセット」オプションと「オーバーライド」オプション

プロパティのコンテキスト・メニューにある「リセット」オプションを使用すると、ユーザーは、そのプロパティを元の状態にリセットできます。プロパティがそのレイヤーで編集されたことがない場合、またはユーザーがそのプロパティを表示された値(別のレイヤーから取得)でオーバーライドすることを選択した場合、「リセット」オプションはグレー表示されます。

「すべてリセット」ボタンを使用すると、ユーザーは、「表示オプション」タブにあるすべてのプロパティをリセットできます。ユーザーは、「表示オプション」タブでレンダリングされた視覚的なプロパティに適用されたアプリケーションのカスタマイズのみをリセットできます。

注意:

「リセット」オプションと「すべてリセット」ボタンは、コンポーネントが新しく作成された場合または現在のレイヤーで変更された属性がない場合には使用できません。

24.5.5 リソース文字列の編集

コンポーザで編集されたコンポーネント・プロパティは、現在の言語でのみ使用できます。たとえば、タスク・フローをページに追加する場合、コンポーザで入力したタスク・フロー・タイトルは現在の言語でのみ使用可能です。そのため、別のロケールのユーザーには、そのようなプロパティの翻訳された値が表示されません。実行時に編集されたコンポーネント・プロパティの言語サポートを提供するために、コンポーザによって、ユーザーは文字列値を取るプロパティのリソース文字列を編集できます。これは、JDeveloperが提供するリソース文字列エディタ機能に似ています。コンポーザでリソース文字列に変更を加えると、その変更はアプリケーション・オーバーライド・バンドルに保存されます。バンドルは翻訳に送られ、翻訳されたバージョンがアプリケーションに戻されます。こうして、ユーザーは自身の言語でプロパティ値を表示できます。

オーバーライド・バンドルおよび既存のFrameworkアプリケーションでのリソース文字列編集の構成の詳細は、「実行時リソース文字列編集の構成」を参照してください。

実行時、文字列値を取ることができるコンポーネント表示オプションについては、プロパティ・フィールドの隣の「編集」メニューで、図24-28に示すように、「テキスト・リソースの選択」オプションが提供されます。ユーザーは、このオプションを選択して、プロパティのリソース文字列を編集できます。

「テキスト・リソースの選択」ダイアログ(図24-29)には、既存のリソースを検索するオプション、リソース・キーを編集または削除するオプションおよび新しいリソース・キーと値のペアを追加するオプションが用意されています。

図24-29 「テキスト・リソースの選択」ダイアログ

「テキスト・リソースの選択」ダイアログは、次のものを表示します。

- 「キー」フィールド: 新しいキー名の指定または既存の名前の変更を行います。これは、リソース・バンドルのロケール固有のオブジェクトを一意に識別するために使用される文字列値です。
このキー名には、リソースが属しているMDSレイヤーが自動的に接頭辞として付いています。この接頭辞は、実行時に作成されたキーと設計時に作成されたキーを区別する際に役に立ちます。

既存のキーに対して表示される「編集」アイコンと「新規キー/値」アイコン(図24-30)を使用すると、ユーザーは次のタスクを実行できます。

- 編集: 既存のリソース文字列のキー値を変更します。新しい値を持つ文字列は、オーバーライド・バンドルに保存されます。

- 新規キー/値: アプリケーション・オーバーライド・バンドルにキーと値のペアを作成します。

図24-30 リソース文字列キーを作成および編集するためのアイコン

ユーザーが編集できるのは、同じMDSレイヤーで作成された文字列のみです。その他の文字列は、読取り専用として表示されます。

注意:

「テキスト・リソースの選択」ダイアログで値を直接入力してリソース・バンドルのデフォルトのコンテンツをオーバーライドしようとすると、この変更は有効にならず、空白ページが表示されます。

したがって、「テキスト・リソースの選択」ダイアログで値を直接入力するのではなく、新しいリソース文字列を作成することをお薦めします。

- 「表示値」フィールド: リソース文字列を指定してUIでの表示用に変換するかまたは既存の文字列を変更します。

- 「説明」フィールド: リソースの翻訳可能な説明を指定するかまたは既存の説明を変更します。

- 「作成」ボタン: 新しいリソース文字列を作成します。「作成」ボタンをクリックすると、検索結果表に、新しいリソースを作成するための入力フィールドを備えた新しい行が用意されます。ユーザーは、行の内側をダブルクリックし(図24-31)、「キー」、「表示値」および「説明」に値を指定してから「OK」をクリックして新しい文字列を作成できます。

図24-31 検索結果表で新しいリソース文字列を作成するためのフィールド

ユーザーは、オーバーライド・バンドルに保存される非アクティブ文字列を作成できるのみです。最後の列の「使用」ボタンをクリックすると、現在のプロパティ値として文字列を使用することが選択されます。

- 「削除」ボタン: 選択したリソースを検索結果表から削除します。

- 「検索」フィールド: 既存のリソースを検索します。ユーザーは、同じレイヤー、異なるMDSレイヤーまたは設計時にJSPXファイルで定義および使用されたリソース・バンドルで作成された文字列を検索できます。

- 「リフレッシュ」: 検索結果表をリフレッシュします。

- 検索結果表: 検索結果を表示し、文字列を編集し、新しい文字列に値を指定します。
ユーザーは、同じレイヤーで作成された文字列を編集できます。設計時または別のMDSレイヤーで作成されたその他の文字列は、プロパティで使用できるだけで編集できません。

リンクまたはステータス・インジケータ・トグルは最後の列に表示され、ユーザーは文字列をアクティブにしたり、翻訳対象リソースにしたり、文字列をアクティブ・リソースとして指定できます(図24-32)。

図24-32 リソース文字列の「アクティブ」ステータス

注意:

設計時に作成されたリソース文字列を検索すると、コンポーザは、JSPXファイルでリソース文字列を指定するときに使用されるc:setタグを検索します。

次の例は、JSPXページでComposerBundleを定義する際に使用されるc:set要素を示しています。

<c:set var="portalBundle"
value="#{compBundle['test.resource.ComposerBundle']}"/>

注意

- コンポーザは、実行時に約500のリソース文字列の作成をサポートします。この数を超えると、アプリケーションのパフォーマンスは低下します。

- リソース文字列エディタの検索条件では、大文字と小文字が区別されます。

- 検索文字列の説明を検索するには、ユーザーは検索条件に完全な文字列値を指定する必要があります。

- JDeveloperの「プロパティ・バンドル」形式または「リスト・リソース・バンドル」形式で作成されたエントリの文字列の説明は、リソース文字列エディタには表示されません。

- リソース文字列を編集するオプションは、「パラメータ」タブと「イベント」タブのプロパティには無効です。
ADFリソースのEL値がページ・パラメータ、タスク・フロー・パラメータ、ポートレット・パラメータなどのページ定義パラメータで参照される場合、ELをバインドすると空の値が返されます。ユーザーは、ページ定義パラメータでADFリソースのEL値を参照しないようにする必要があります。

24.5.6 コンポーネントの表示または非表示

ユーザーは、ページで様々なオプションを使用してコンポーネントの表示と非表示を選択できます。ユーザーは、次の方法でコンポーネントを非表示または表示にできます。

注意:

動作の表示または非表示がコンポーネントのrenderedプロパティに関連付けられます。ユーザーがコンポーネントを非表示にする場合、renderedプロパティはfalseに設定されます(またはこの逆)。コンポーネントのrendered属性がEL値の場合は、その値は表示または非表示オプションの使用時に失われます。値はtrueまたはfalseに設定されます。

- コンポーネントの「編集」アイコンをクリックします。「コンポーネント・プロパティ」ダイアログで、「コンポーネントの表示」チェック・ボックスを選択解除します(図24-33)。

図24-33 「コンポーネント・プロパティ」ダイアログの「コンポーネントの表示」オプション

「コンポーネントの表示」チェック・ボックスを選択解除して、ダイアログの「適用」または「OK」をクリックすると、ページにコンポーネントが再度レンダリングされます。

- コンポーネントのコンテナで「編集」アイコンをクリックします。「コンポーネント・プロパティ」ダイアログの「子コンポーネント」タブで、コンポーネント名に対して表示されているチェック・ボックスを選択解除すると、コンポーネントが非表示になります。(図24-34)

図24-34 コンテナの「コンポーネント・プロパティ」ダイアログの「コンポーネントの非表示」リンク

24.5.7 コンポーネントの削除

ユーザーは、ページのヘッダーにある「削除」アイコンをクリックして、ページからコンポーネントを削除できます。

ユーザーは「削除」ダイアログで削除の確認を求められます。

注意:

コンポーネントに対してカスタマイズ制限を定義した場合、そのコンポーネントに対する「削除」アイコンは実行時に無効になります。詳細は、「タイプ・レベルのカスタマイズ・ポリシーの定義方法」を参照してください。

24.5.8 レイアウトの変更

「レイアウトの変更」アイコンを使用すると、ユーザーは8つの事前定義されたレイアウトのセットからレイアウトを選択できます。デフォルトのページ・レイアウトはthreeColumnです。

「構造」ビューで、ユーザーはLayout Customizableコンポーネントを選択し、そのプロパティを表示できます。レイアウト・オプションは、「コンポーネント・プロパティ」ダイアログに表示されます。ユーザーは、任意の事前定義されたレイアウトを選択し、「適用」または「OK」をクリックできます。

注意:

ユーザーが事前定義されたレイアウト・オプションを使用できるのは、設計時にページにLayout Customizableコンポーネントを追加した場合のみです。詳細は、「Layout Customizable」を参照してください。

24.5.9 ポートレットのカスタマイズ

アプリケーションにポートレットが含まれている場合、ユーザーは、ポートレットに必要な情報を表示させることも、ポートレットを非表示にすることも、ページから削除することもできます。編集モードでポートレットに加えた変更は、すべてのアプリケーション・ユーザーに表示されます。図24-35に、Web Clippingポートレットでユーザーが実行できるアクションを示します。「カスタマイズ」オプションは、ページ編集モードのポートレットにのみ表示されます。これは、そのポートレットがカスタマイズ可能ページに追加されている場合にのみ表示されます。

図24-35 Web Clippingポートレットの「カスタマイズ」アクション

24.5.10 ページ・プロパティの編集

「ページ・プロパティ」ダイアログでは、ユーザーは、ページのパラメータの作成または編集およびプロパティの表示を実行できます。図24-36は、「ページ・プロパティ」ダイアログの「セキュリティ」タブを示しています。

図24-36 「ページ・プロパティ」ダイアログ

「パラメータ」タブで、ユーザーは、コンポーネント・プロパティにリンク可能なページ・パラメータを作成し、ページ上のコンポーネントをページ・コンテキストに適応させることができます。たとえば、ページにSYMBOLというパラメータがあり、このデフォルト値がORCLであるとします。このページには、株式グラフ、株価および会社情報のタスク・フローが含まれているとします。これらのタスク・フローは、これらすべてのタスク・フローがSYMBOLの値の変化に応答し、これに応じて更新されるようにページ・パラメータでリンクすることができます。

24.5.11 ページ・パラメータへのコンポーネントの関連付け

コンポーザを使用すると、ユーザーはポートレットやタスク・フローをページ・パラメータとリンクできます。これにより、それらのコンポーネントはページ・パラメータを読み取って、それに応じて動作を変更できるようになります。

ユーザーは、「コンポーネント・プロパティ」ダイアログを使用して、ポートレットとタスク・フロー・パラメータをページ・パラメータに関連付けられます。詳細は、『Oracle Fusion Middleware Oracle WebCenter Portalでのポータルの構築』の「ページ、タスク・フロー、ポートレットおよびADFコンポーネントの作成」の章を参照してください。

コンポーネントとページ・パラメータの関連付けに加えて、コンポーザを使用すると、ユーザーは、表示オプションとパラメータの値をページURLを通じて渡すこともできます。詳細は、Oracle Fusion Middleware Oracle WebCenter Portalでのポータルの構築』のページURLによるパラメータ値の受渡しに関する項を参照してください。

24.5.12 ページのリセット

「ページのリセット」アイコンは、編集モードのページで使用できます。このアイコンは、「ページのリセット」ダイアログを起動します。このダイアログでは、現在のレイヤーまたは最上位レイヤーでページに対して行われた編集を削除し、これを前に保存されたバージョンまたは元のデフォルトの状態にリセットするオプションを使用できます。

図24-37 「ページのリセット」ダイアログ

注意:

「ページのリセット」アイコンは、コンポーザのツールバーにレンダリングされるデフォルトのアドオンです。ユーザーにページをリセットさせたくない場合、このアイコンを無効にできます。詳細は、「アドオンを選択的に表示する方法」を参照してください。

特定のラベルへのロールバック

アプリケーションがデータベース・ストアを使用するように構成されている場合、ユーザーがアプリケーションのカスタマイズを保存するたびに新しいバージョンのページが生成されます。アプリケーションにサンドボックスが構成されている場合、SAVE_LABEL_%規則を備えたラベルを作成することによって、コンポーザによってページを確実に次のようにリセットできます。

- SAVE_LABEL_%規則に従うラベル名が1つのみの場合、コンポーザは、そのラベルの状態にページをリセットします。

- SAVE_LABEL_%規則に従うラベル名がない場合、コンポーザは元のデフォルトの状態にページをリセットします。

- SAVE_LABEL_%規則に従うラベルが複数ある場合、コンポーザは、それらのうち最新のラベルの状態にページをリセットします。

特定のラベルにロールバックするには、サンドボックスを使用するようにアプリケーションを構成しておく必要があります。具体的には、カスタマイズされるページのネームスペースは、アプリケーションのadf-config.xmlファイルの<metadata-namespaces>セクションで定義する必要があります。詳細は、「コンポーザのサンドボックスの作成を有効にする方法」を参照してください。

特定のラベルにロールバックすることは、カスタマイズ・メタデータに対する依存性がアプリケーションにあり、ページを元の状態にリセットすると問題が発生する場合に便利です。

注意:

- ユーザーは、ページで行われたアプリケーションのカスタマイズのみをリセットできます。ベース・ページまたは共有コンポーネントのページで定義されたコンポーネントはそのままになります。

- ユーザーがページをリセットすると、実行時にページに追加されたコンポーネントは削除されます。ただし、ページでテンプレートを使用している場合、テンプレートにあるPanel Customizableコンポーネント内に追加されたコンポーネントは削除されません。

例24-1は、SAVE_LABEL_接頭辞を持つラベルを作成するサンプル・コードを示しています。

例24-1 SAVE_LABEL_接頭辞を持つラベルを作成するコード

import oracle.mds.versioning.VersionHelper;
import oracle.mds.naming.Namespace;

....
long labelNumber = (long)(Math.random() * 1000000000);
String savedlabel = "SAVE_LABEL_" + labelNumber;

MDSInstance mdsInstance = (MDSInstance)ADFContext.getCurrent().getMDSInstanceAsObject();

VersionHelper vh = VersionHelper.get(mdsInstance);

Namespace[] validNamespaces = new Namespace[1];
Namespace pageNamespace = Namespace.create(<pagePath or taskflow path>, NamespaceRestriction.CUSTOMIZATIONS);

validNamespaces[0] = pageNamespace;
vh.createLabel(savedlabel, null, validNamespaces);

24.5.13 エラー検出時のアプリケーションのカスタマイズのリセット

コンポーザは、ページの破損を引き起こすカスタマイズ・エラーをユーザーに警告するメカニズムを備えています。ユーザーは、次の方法でエラーに関する警告を受けます。

- 変更がMDSに保存される場合、「エラー」ダイアログ(図24-38)によって、ユーザーが現在のコンテキストで行った最後の変更のみまたはすべての変更をロールバックするオプションが提供されます。

図24-38 ユーザーに変更の破棄を求める「エラー」ダイアログ

- 変更がまだMDSに保存されていない場合、「エラー」ダイアログ(図24-39)は、エラーが発生し、ページが再ロードされることをユーザーに通知します。

図24-39 ページの再ロードをユーザーに通知する「エラー」ダイアログ

次の操作を実行中に発生するエラーは、ページの破損を引き起こす場合があります。

- 切取りおよび貼付けオプション使用時の間違った位置へのコンポーネントの貼付け(表の列の表外への貼付けなど)。

- コンポーネントまたはタスク・フローの追加(エラーが発生するWebサービスをコールするタスク・フローの追加など)。

- ドラッグ・アンド・ドロップの方法を使用したページへのShow Detail Frameコンポーネントの移動

24.5.14 子コンポーネントの表示名のカスタマイズ

ページ上のコンポーネントは、多数の子コンポーネントの親である場合があります。親コンポーネントのプロパティを表示すると、「コンポーネント・プロパティ」ダイアログの「子コンポーネント」タブに記載されたその親の子コンポーネントを検索できます。複数の子コンポーネントが同じタイプの場合、それらを子コンポーネントのリストで互いに区別できないことがあります。たとえば、panelGroupLayoutコンポーネントはそのlayout属性の値を表示名として使用します(例: vertical)。そのため、「構造」ビューでは図24-40に示すように、複数のpanelGroupLayoutコンポーネントが子コンポーネントのリストですべて同じ名前になる場合があります。

図24-40 子コンポーネント名: 「構造」ビューおよび「コンポーネント・プロパティ」ダイアログ

特定の子コンポーネントを特定して操作する必要がある場合、ページのソース・コードを編集して任意のコンポーネントに一意の表示名を指定し、容易に識別できるようにすることが可能です。この表示名は、ヒント・テキストと「コンポーネント・プロパティ」ダイアログに表示されます。この機能を実装するカスタム属性はcomposer_name_hintで、次のように<f:attribute>を使用して指定できます。

構文:

<f:attribute name="composer_name_hint" value="display_name"/>

例:

<af:panelGroupLayout id="pgl1" layout="scroll" inlineStyle="">
<f:attribute name="composer_name_hint" value="Main Area"/>
</ af:panelGroupLayout>

図24-41に、親panelCustomizable (Box)コンポーネントに対する「コンポーネント・プロパティ」ダイアログの「子コンポーネント」タブを示します。子の親コンポーネントには4つのpanelCustomizable (Box)子コンポーネントが含まれます。

この表示名Boxは親コンポーネントと4つの子コンポーネントに使用され、それらを識別することはできません。

図24-41 composer_name_hintを定義していないコンポーネント: 「構造」ビューと「コンポーネント・プロパティ」ダイアログ

これらのコンポーネントの表示名をカスタマイズするために、ソース・コードを編集してcomposer_name_hint属性を各コンポーネントに追加できます。composer_name_hint 値は、次の場所で公開されています。

- 「構造」ビューでは、composer_name_hint値がコンポーネントのヒント・テキストとして表示されます(図24-42)。

図24-42 composer_name_hintが定義されたコンポーネント: 「構造」ビューのヒント・テキスト

- 「選択」ビューで選択したコンポーネントを右クリックすると、コンポーネントやその親コンポーネントのcomposer_name_hint値を示すコンテキスト・メニューが表示されます(図24-43)。

図24-43 composer_name_hintが定義されたコンポーネント: 「選択」ビューのヒント・テキスト

- コンポーネントの「コンポーネント・プロパティ」ダイアログには、タイトルにcomposer_name_hint値が含まれます(図24-44)。

- 親コンポーネントの「コンポーネント・プロパティ」ダイアログでは、「子コンポーネント」タブにcomposer_name_hint値を表示名として使用する各子コンポーネントの一覧が示されます(図24-44)。

図24-44 <f:attribute>が定義されたコンポーネント: 「コンポーネント・プロパティ」ダイアログ

図24-44に示された親Box (panelCustomizable)コンポーネントとその4つの子Boxコンポーネントに対するこのページのソース・コードは、次のようになります。

<af:showDetailItem id="82127" text="Project XYZ" xmlns:af="http://xmlns.server.com/adf/faces/rich" disclosed="true" inflexibleHeight="100">
<cust:panelCustomizable id="45399" layout="scroll" xmlns:cust="http://xmlns.server.com/adf/faces/customizable">
<f:attribute name="composer_name_hint" value="Project XYZ content area"/>
<cust:panelCustomizable id="273" xmlns:cust="http://xmlns.server.com/adf/faces/customizable">
<f:attribute name="composer_name_hint" value="header area"/>
</cust:panelCustomizable>
<cust:panelCustomizable id="959" xmlns:cust="http://xmlns.server.com/adf/faces/customizable">
<f:attribute name="composer_name_hint" value="dept area"/>
</cust:panelCustomizable>
<cust:panelCustomizable id="393" xmlns:cust="http://xmlns.server.com/adf/faces/customizable">
<f:attribute name="composer_name_hint" value="employee area"/>
</cust:panelCustomizable>
<cust:panelCustomizable id="941" xmlns:cust="http://xmlns.server.com/adf/faces/customizable">
<f:attribute name="composer_name_hint" value="project area"/>
</cust:panelCustomizable>
</cust:panelCustomizable>
</af:showDetailItem>

24.5.15 アプリケーションのカスタマイズ保存時のラベルの作成

図24-45に示す、コンポーザのツールバーの「保存してラベル付け」ボタンを使用すると、ユーザーは、アプリケーションのカスタマイズを新しいラベルに保存できます。コンポーザで作成されたラベルはcomposer_の接頭辞を付けて格納されます。つまり、myLabelという名前で作成されたラベルはcomposer_myLabelとして格納されます。

ラベルを作成すると、ユーザーは、選択したオブジェクトのカスタマイズを選択したラベルのカスタマイズにリセットできます。これは、「カスタマイズ・マネージャ」の「プロモート」リンクを使用して実現できます。詳細は、「カスタマイズ・メタデータのプロモート」というタイトルの項を参照してください。

注意:

「保存してラベル付け」ボタンが表示されるのは、サンドボックスをアプリケーションのMDSデータベース・ストアで構成し、Page CustomizableコンポーネントのallowLabel属性をtrueに設定した場合のみです。この属性の詳細は、「Page Customizableコンポーネント」を参照してください。

図24-45 コンポーザのツールバーの「保存してラベル付け」ボタン

24.5.16 アプリケーションのカスタマイズの管理

「カスタマイズ・マネージャ」はコンポーザのアドオン・パネルです。ユーザーは、このパネルでXMLドキュメント、ページ、ページ・フラグメント、ページのタスク・フローなどのオブジェクトのカスタマイズ・メタデータを管理できます。これは、このようなすべてのオブジェクトのリストをページに表示し、これらのオブジェクトがカスタマイズされるレイヤーに関する詳細を提供します。ユーザーは、選択したオブジェクトのカスタマイズ・メタデータをダウンロードし、これを編集し、修正したメタデータ・ファイルをアップロードできます。また、「カスタマイズ・マネージャ」は、カスタマイズを削除したり、前に保存したラベルからのカスタマイズをプロモートしたりするオプションも提供します。

カスタマイズ・マネージャは、デフォルトではカスタム・アプリケーションで使用できません。特定の構成を実行することにより有効にできます。詳細は、「カスタマイズ・マネージャのアドオンの表示方法」を参照してください。カスタマイズ・マネージャ・アドオンを表示するようにアプリケーションを構成すると、図24-46に示すように、コンポーザのツールバーに「カスタマイズ・マネージャ」アイコンが表示されます。

図24-46 「カスタマイズ・マネージャ」ボタン

「カスタマイズ・マネージャ」ボタンをクリックすると、図24-47に示すように、「カスタマイズ・マネージャ」ダイアログが起動します。

図24-47 「カスタマイズ・マネージャ」ダイアログ

「カスタマイズ・マネージャ」は、各レイヤーのカスタマイズされたページ、フラグメントまたはXMLドキュメントそれぞれに対して、「削除」、「プロモート」、「ダウンロード」および「アップロード」のリンクを表示します。ユーザーは、検索フィールドでJSPX、JSFFまたはXMLのファイル名を指定し、そのファイルのオブジェクトのカスタマイズの詳細を表示し、そのカスタマイズを管理できます。ファイルを検索するには、ファイルへの絶対パス(/oracle/webcenter/portalapp/pages/home.jspxなど)を指定する必要があります。

注意:

深くネストされたタスク・フローまたは循環依存性を持つタスク・フローの場合、「カスタマイズ・マネージャ」は、最大で深度10のタスク・フローを表示します。

ユーザーは、アプリケーションが実行されている現在のMDSコンテキストでカスタマイズを管理できます。「現在のコンテキスト」列には、選択したレイヤーのカスタマイズを管理するオプションが表示されます。ドロップダウン・メニューには、ページまたはフラグメントがカスタマイズされたレイヤーがリストされます。この列は、行ったカスタマイズを管理するすべてのユーザーにとって便利です。「すべてのレイヤー」列には、アプリケーションのすべてのレイヤーのカスタマイズを管理するオプションが表示されます。この列は、すべてのレイヤーで行われたカスタマイズを管理する管理者にとって便利です。

注意:

- アプリケーションのサンドボックスを構成し、すべての「カスタマイズ・マネージャ」操作をサンドボックスで実行する場合(ユーザーがカスタマイズ・ドキュメントをアップロードする場合など)、これは、ユーザーがそのセッションで行われた変更を保存または破棄するまで、サンドボックスに格納されます。

- 選択したオプションを表示するためにのみ「カスタマイズ・マネージャ」をカスタマイズできます。たとえば、「ダウンロード」、「削除」または「アップロード」のリンクを表示または非表示にできます。さらに、現在のコンテキストの詳細のみまたはすべてのレイヤーの詳細を表示することを選択できます。
これらの設定は、カスタマイズ・マネージャ・タスク・フローのパラメータを使用して行えます。タスク・フローでパラメータ・サポートを有効にすることによって、ユーザーが実行時に「カスタマイズ・マネージャ」をカスタマイズできるようにすることも可能です。詳細は、「プロパティ・フィルタの定義」を参照してください。

この項では、「カスタマイズ・マネージャ」によって提供される機能について説明します。次のサブセクションが含まれます:

- カスタマイズ・メタデータのダウンロード

- カスタマイズされるすべてのオブジェクトのカスタマイズ・メタデータのダウンロード

- カスタマイズ・メタデータのアップロード

- カスタマイズ・メタデータの削除

- カスタマイズ・メタデータのプロモート

カスタマイズ・メタデータのダウンロード

「ダウンロード」リンクでは、ユーザーは、選択したページ、フラグメントまたはXMLドキュメントのカスタマイズ・ドキュメントを選択したレイヤーからダウンロードできます。これは、ユーザーがコンポーネントのカスタマイズ・メタデータを編集する場合やカスタマイズ・メタデータを調査する場合に便利です。たとえば、ページにエラーが表示されている場合、ユーザーはカスタマイズをダウンロードして確認し、必要に応じてこれをOracleサポート・サービスに送信できます。こうすることによって、ページのカスタマイズの問題の診断に役立ちます。

「保存」ダイアログを使用すると、ユーザーは、ドキュメントを保存する場所を選択できます。ユーザーは、このファイルをローカルで編集し、これをサイトに再アップロードできます。ファイルのアップロードの詳細は、「カスタマイズ・メタデータのアップロード」を参照してください。

カスタマイズされるすべてのオブジェクトのカスタマイズ・メタデータのダウンロード

ページの下部にある「すべてのレイヤーに対するカスタマイズのダウンロード」リンクを使用すると、ユーザーは、「カスタマイズ・マネージャ」に表示されるすべてのカスタマイズ・ドキュメントを含むZIPファイルをダウンロードできます。

カスタマイズ・メタデータのアップロード

「アップロード」リンクを使用すると、ユーザーは、選択したアーティファクト(ページ、フラグメント、XMLドキュメントなど)のカスタマイズ・ドキュメントを特定のレイヤーにアップロードできます。図24-48は、ユーザーがアップロードするファイルを選択できる「カスタマイズのアップロード」ダイアログを示しています。

図24-48 「カスタマイズのアップロード」ダイアログ

アーティファクトは、アップロードしたドキュメントのメタデータに基づいてカスタマイズされます。

注意:

ページのFormタグのusesUpload属性は、「カスタマイズ・マネージャ」の「アップロード」リンクの表示を制御します。usesUploadをfalseに設定すると、「アップロード」リンクは動作しません。

カスタマイズ・メタデータの削除

「削除」リンクを使用すると、ユーザーは、選択したアーティファクトのカスタマイズ・ドキュメントを特定のレイヤーから削除できます。

カスタマイズ・メタデータのプロモート

ページをカスタマイズしている間、ユーザーは、任意の時点でアプリケーションのカスタマイズを保存し、新しいラベルを作成してそのカスタマイズを保存できます。「カスタマイズ・マネージャ」の「プロモート」リンクを使用すると、ユーザーは、ラベルを選択し、選択したページまたはタスク・フローのアプリケーションのカスタマイズをラベルのカスタマイズにリセットできます。

注意:

「プロモート」オプションが使用可能なのは、サンドボックス対応のアプリケーションのみです。

コンポーザの「保存してラベル付け」オプションの詳細は、「アプリケーションのカスタマイズ保存時のラベルの作成」を参照してください。

「プロモート」リンクは、図24-49に示すように、プロモートされるすべての使用可能なラベルおよびファイルをリストする「ドキュメントのプロモート」ダイアログを起動します。

図24-49 「ラベルの選択」ダイアログ

ユーザーは、ラベルを選択し、そのラベルを選択したアーティファクトのサンドボックスにプロモートできます。つまり、選択したアーティファクトのアプリケーションのカスタマイズは、指定したラベルのカスタマイズにリセットされます。タスク・フローを選択した場合、すべてのページ・フラグメントおよびページ定義がプロモートされます。ページまたはフラグメントを選択した場合、ページまたはフラグメントおよびそのページ定義がプロモートされます。ユーザーは、使用可能な任意のレイヤーからラベルを選択し、そのラベルのカスタマイズをプロモートできます。たとえば、アプリケーションにレイヤーMCOOPER、JDOEおよびSITEがあり、MCOOPERレイヤーで作業しているユーザーがページの「プロモート」リンクをクリックすると、「プロモート」ダイアログに3つすべてのレイヤーで使用可能なすべてのラベルがリストされます。

24.6 ページ編集モードの「構造」ビューでの編集機能

「構造」ビュー(図24-50)は、コンポーネント・ナビゲータのページ・コンポーネントをWYSIWYGおよび階層式にレンダリングします。「コンテンツの追加」、「切替え」、「削除」、「切取り」および「貼付け」の各コントロールを「構造」ビューのツールバーで使用でき、これらによりコンポーザで特定の操作が実行されます。「構造」ビューでは、ユーザーは「デザイン」ビューまたは「コンテンツの追加」ビューでは選択できないコンポーネントのプロパティにアクセスし、プロパティを変更できます。たとえば、多くのADF Facesコンポーネントは「構造」ビューでのみ編集できます。ユーザーは、タスク・フロー内のコンポーネントも編集できます。

図24-50 ページの「構造」ビュー

デフォルトでは、コンポーネント・ナビゲータはコンポーザ内でページの右側に表示されます。「ドッキング」メニューを使用して、上、下または左側の表示を選択できます(図24-51)。ユーザーは、コンポーネント・ナビゲータのエッジの境界をドラッグして、その高さまたは幅を変更できます。

図24-51 構造の配置オプションとサイズ変更

コンポーネント・ナビゲーションのルートには、設計時のPage Customizableコンポーネントの直接の子があります。ノードがコンポーネント・ナビゲーションで選択されると、対応するコンポーネントがページで選択されます。同様に、コンポーネントがページで直接選択されると、対応するノードがコンポーネント・ナビゲータで選択されます。

ページの下部にあるグレーの領域には、選択したコンポーネントのブレッドクラム・トレイルが表示されます(図24-52)。ブレッドクラム・トレイルは、ページでコンポーネントがどのようにネストされているかを示します。コンポーネントが選択されていないと、ブレッドクラム・バーはページ名のみを表示します。コンテナ名は、クリックすると選択したコンポーネントを強調表示するリンクです。

図24-52 ページの「構造」ビューで選択されたコンポーネントのブレッドクラム

編集可能なタスク・フローには、タスク・フローの横に「タスク・フローの編集」リンクがあります。「タスク・フローの編集」リンクをクリックすると、コンポーネント・ナビゲータにタスク・フローのページまたはフラグメント内のコンポーネントの階層が表示されます。ユーザーは、このページまたはフラグメントを編集し、タスク・フローをズーム・アウトするために「閉じる」をクリックできます。詳細は、「タスク・フロー内のコンテンツの編集」を参照してください。同様に、宣言型コンポーネントには「開く」リンクが表示されます。このリンクを使用すると、ユーザーは選択した宣言型コンポーネントのファセット内でコンポーネントを編集できます。

「デザイン」ビューおよび「コンテンツの追加」ビューと同様に、「構造」ビューでもユーザーは、コンポーネントの追加、ページおよびコンポーネントのプロパティの編集、ページ・レイアウトの変更、コンポーネントの削除などのタスクを実行できます。ユーザーは、ページまたはコンポーネント・ナビゲータでコンポーネントを選択し、「構造」ビューのツールバーでボタンをクリックしてこれらのタスクを実行できます。コンポーネントを編集または削除するために、ユーザーは、コンポーネントのコンテキスト・メニューにあるオプションを選択することもできます。これらのタスクに加えて、ユーザーは、ページの「構造」ビューで次のタスクを実行できます。

- 切取りオプションおよび貼付けオプションを使用したページ・コンテンツの再配置

- タスク・フロー内のコンテンツの編集

- 宣言型コンポーネント内のコンテンツの編集

- コンポーネントの表示または非表示

注意:

- 「保存」ボタンは、アプリケーションがサンドボックスを使用するように構成されている場合にのみコンポーザのツールバーに表示されます。サンドボックスの詳細は、「コンポーザのサンドボックスの使用」を参照してください。

- アプリケーションを保護し、コンポーネントにカスタマイズ制限を適用することによって、ユーザーがこれらのタスクのすべてまたは一部を実行できないように制限することができます。詳細は、「セキュリティおよびコンポーザ」を参照してください。

24.6.1 切取りオプションおよび貼付けオプションを使用したページ・コンテンツの再配置

ユーザーは、「構造」ビューのツールバーで「切取り」オプションおよび「貼付け」オプションを使用して、ページのコンポーネントを再配置できます(図24-53)。「貼付け」メニューを使用すると、ユーザーは、コンポーネント・ナビゲーションでコンポーネントを他の任意のコンポーネントの中、前または後ろに貼り付けることができます。

図24-53 「構造」ビューのツールバーの「切取り」オプションおよび「貼付け」オプション

「切取り」ボタンおよび「貼付け」ボタンは、ユーザーが切取りまたは貼付けの操作をサポートしていないコンポーネントを選択した場合にはグレー表示されます。切取りおよび貼付けの操作は、次の条件ではサポートされません。

表24-1

表24-1 切り取り操作と貼り付け操作をサポートしているコンポーネント

貼り付けのターゲット

貼り付け可能なコンポーネント

Panel Customizable

任意のコンポーネント

Panel Form Layout

任意のコンポーネント

Panel Group Layout

任意のコンポーネント

Table/Tree Table

Column

Column (Group)

Column

Panel Tabbed

Show Detail Item

Panel Accordion

Show Detail Item

Navigation Pane

Command Navigation Item (スタンプされていない場合のみ)

Toolbar

Command Toolbar Item

- ターゲット・コンポーネントが切り取ったコンポーネントと同じページにない場合。

- ターゲット・コンポーネントが切り取ったコンポーネント内部にネストされている場合。

- ターゲット・コンポーネントがファセットされたコンポーネント(つまり、ファセット内部のコンポーネント)の前または後ろにある場合。

- ターゲット・コンポーネントの親がカスタマイズ可能でない場合。

- 切り取ったコンポーネントの親がカスタマイズ可能でない場合。

注意:

カスタマイズが制限されているコンポーネントは、その親がカスタマイズ可能である場合、その親コンテナ内で再配置できます。

例

カスタマイズ可能ページにADF Faces Tableコンポーネントが含まれている場合、コンポーザの「構造」ビューで、ユーザーは表および列グループ内またはこれらの間で列を順序変更または移動できます。コンピュータのアクセサリを販売するために作成したサンプル・アプリケーションについて考えてみます。このアプリケーションのホーム・ページには、ソフトウェアおよびハードウェアの販売に関する詳細を含む2つの表があります。ハードウェア・オプションの表には3つの列があります。ハード・ディスクの列には、図24-54に示すように、列グループ内に磁気ディスクおよび半導体の列があります。

図24-54 サンプル・アプリケーションの表

ユーザーは、「構造」ビューに切り替えて、ハード・ディスク列内で磁気ディスクと半導体の列を順序変更したり、これらを列グループ外に移動して他の任意の列(ワイヤレスの列など)の隣に貼り付けることができます。

ユーザーは、列を選択し、「切取り」をクリックしてから別の列を選択し、「前に貼付け」または「後に貼付け」をクリックできます。

24.6.2 タスク・フロー内のコンテンツの編集

Oracle ADFタスク・フローは、1つ以上のビューから構成され、タスク・フローの各ビューはページまたはページ・フラグメントと関連付けられています。タスク・フローをページに追加すると、現在のビューに関連付けられたフラグメントのコンテンツがページに表示されます。コンポーザにより、ユーザーは、タスク・フローの現在のビューで使用されるページまたはフラグメントのコンポーネントを編集できます。タスク・フローのページまたはフラグメントに対して変更が行われるため、変更は、タスク・フローのページまたはフラグメントが使用されるすべての場所に反映されます。

「構造」ビューには、タスク・フローを開き、コンポーネント・ナビゲータでそのページまたはフラグメントにあるコンポーネントのみを表示するオプションが用意されています。ユーザーは、ページまたはフラグメントを編集し、タスク・フローを閉じて、そのタスク・フローを含むページにナビゲートして戻ることができます。

タスク・フローのカスタマイズ権限を持つユーザーは、そのページまたはフラグメントを編集できます。

コンポーネント・ナビゲータの各タスク・フローは、図24-55に示すように、その隣に「タスク・フローの編集」リンクを表示します。

図24-55 タスク・フローの「タスク・フローの編集」リンク

「タスク・フローの編集」リンクをクリックすると、「構造」ビューがズーム・インし、タスク・フローのページとそのコンポーネントが表示されます(図24-56)。

図24-56 タスク・フロー内のコンポーネント

ユーザーは、タスク・フローのページでコンポーネントを選択して、他のページのコンポーネントの編集と同様にコンポーザでこれを編集できます。ただし、コンポーザは、あるタスク・フローから別のタスク・フローへのコンポーネントの移動をサポートしていません。

複数のユーザーが同時に同じタスク・フローを編集しようとすると、それぞれのユーザーに互いに注意するよう警告する並行性警告がコンポーザに表示されます。ただし、この警告は、サンドボックスがアプリケーションで構成されている場合のみ表示されます。このような場合の変更の保存方法の詳細は、「並行編集時の処理」を参照してください。

開いているタスク・フローの隣の「閉じる」リンクをクリックすると、コンポーネント・ナビゲータは、このタスク・フローを含むページを表示します。

24.6.2.1 タスク・フローのリセット

「構造」ビューのツールバーにある「タスク・フローのリセット」ボタン(図24-57)は、タスク・フローに対して行われたアプリケーションのカスタマイズを削除し、これを前に保存されたバージョンまたは元のデフォルトの状態にリセットするオプションを提供する「タスク・フローのリセット」ダイアログを起動します。タスク・フローを前に保存されたラベルの状態に確実にリセットできるのは、アプリケーションがデータベース・ストアを使用するように構成されている場合のみです。「タスク・フローのリセット」ボタンは、タスク・フローへのズーム・イン時にのみレンダリングされます。

注意:

アプリケーションで「ページのリセット」ボタンを無効にすると、「タスク・フローのリセット」ボタンも無効になります。ユーザーは、変更を行った後にはタスク・フローをリセットできません。詳細は、「ページのリセット」を参照してください。

図24-57 「タスク・フローのリセット」ボタン

特定のラベルへのロールバック

アプリケーションがデータベース・ストアを使用するように構成されている場合、ユーザーがアプリケーションのカスタマイズを保存するたびに新しいバージョンのタスク・フローが生成されます。アプリケーションにサンドボックスが構成されている場合、SAVED_LABEL_%規則に従ったラベルを作成することで、次に示すように、コンポーザによってタスク・フローを確実にリセットできます。

- SAVED_LABEL_%規則に従うラベル名が1つのみの場合、コンポーザは、そのラベルの状態にタスク・フローをリセットします。

- SAVED_LABEL_%規則に従うラベル名がない場合、コンポーザは元のデフォルトの状態にタスク・フローをリセットします。

- SAVED_LABEL_%規則に従うラベルが複数ある場合、コンポーザは、それらのうち最新のラベルの状態にタスク・フローをリセットします。

特定のラベルにロールバックするには、サンドボックスを使用するようにアプリケーションを構成しておく必要があります。具体的には、カスタマイズされるタスク・フローのネームスペースは、アプリケーションのadf-config.xmlファイルの<metadata-namespaces>セクションで定義する必要があります。詳細は、「コンポーザのサンドボックスの作成を有効にする方法」を参照してください。

特定のラベルにロールバックすることは、カスタマイズ・メタデータに対する依存性がアプリケーションにあり、タスク・フローを元の状態にリセットすると問題が発生する場合に便利です。

ユーザーがタスク・フローをリセットすると、次の変更が発生します。

- 現在選択されているフラグメントのみがリセットされます。タスク・フローのその他のフラグメントはリセットされません。

- ネストされたタスク・フローはリセット操作によって影響を受けません。

- タスク・フローがリセットされると、変更は、このタスク・フローを使用するすべてのページに反映されます。

- 実行時にタスク・フローに追加されたコンポーネントは削除されます。ただし、タスク・フローのページまたはフラグメントでテンプレートを使用している場合、テンプレートにあるPanel Customizableコンポーネント内に追加されたコンポーネントは削除されません。

例24-2は、SAVE_LABEL_接頭辞を持つラベルを作成するサンプル・コードを示しています。

例24-2 SAVE_LABEL_接頭辞を持つラベルを作成するコード

import oracle.mds.versioning.VersionHelper;
import oracle.mds.naming.Namespace;

. . .
long labelNumber = (long)(Math.random() * 1000000000);
String savedlabel = "SAVE_LABEL_" + labelNumber;

MDSInstance mdsInstance = (MDSInstance)ADFContext.getCurrent().getMDSInstanceAsObject();

VersionHelper vh = VersionHelper.get(mdsInstance);

Namespace[] validNamespaces = new Namespace[1];
Namespace pageNamespace = Namespace.create(<pagePath or taskflow path>, NamespaceRestriction.CUSTOMIZATIONS);

validNamespaces[0] = pageNamespace;
vh.createLabel(savedlabel, null, validNamespaces);

24.6.3 宣言型コンポーネント内のコンテンツの編集

アプリケーション・ページに宣言型コンポーネントが含まれている場合、ユーザーは、これらのコンポーネントをコンポーザで編集できます。宣言型コンポーネントの編集は、タスク・フローの編集と似ています。詳細は、「タスク・フロー内のコンテンツの編集」を参照してください。

図24-58および図24-59に、宣言コンポーネントで使用可能な「コンポーネントの編集」および「閉じる」オプションを示します。

図24-58 宣言型コンポーネントの編集オプション

図24-59 宣言型コンポーネントを編集中に表示される「閉じる」オプション

24.6.4 コンポーネントの表示または非表示

コンポーネントを非表示にするには、コンポーネント・ナビゲータまたはページでコンポーネントを右クリックし、コンテキスト・メニューで「コンポーネントの非表示」を選択します(図24-60)。

図24-60 ページの「構造」ビューの「コンポーネントの非表示」オプション

非表示のコンポーネントはページに表示されませんが、コンポーネント・ナビゲータにはグレー表示されます。非表示のコンポーネントのコンテキスト・メニューには「コンポーネントの表示」オプションが表示されます。このオプションを選択すると、ページにコンポーネントが再レンダリングされます。

注意:

動作の表示または非表示がコンポーネントのrenderedプロパティに関連付けられます。ユーザーがコンポーネントを非表示にする場合、renderedプロパティはfalseに設定されます(またはこの逆)。コンポーネントのrendered属性がEL値の場合は、その値は表示または非表示オプションの使用時に失われます。値はtrueまたはfalseに設定されます。

24.7 コンポーザ・コンポーネント

実行時にJSPXドキュメント(*.jspx)を編集できるようにするには、アプリケーション設計時にOracle JDeveloperで、ページにコンポーザ・コンポーネントを追加する必要があります。

注意:

コンポーザは、JSPXページおよびADF Facesでのみ動作します。これらのコンポーネントはJSPページには追加できません。コンポーザ・コンポーネントのページへの追加の詳細は、「コンポーザ・コンポーネントを使用した編集可能ページの設計」を参照してください。

JDeveloperのコンポーザ・タグ・ライブラリ(図24-61)は、「コンポーネント・パレット」から使用でき、ページを編集可能にするために追加できるコンポーネントを提供します。

図24-61 「コンポーネント・パレット」のコンポーザ・タグ・ライブラリ

この項では、ページの編集を可能にするために使用されるコンポーザ・コンポーネントの概要について説明します。次のサブセクションが含まれます:

- Page Customizable

- Change Mode LinkおよびChange Mode Button

- Panel Customizable

- Show Detail Frame

- Layout Customizable

24.7.1 Page Customizable

Page Customizableコンポーネントは、ページの編集可能領域を定義します。この領域内では、コンポーネントのプロパティの編集、ページへのコンテンツの追加、コンテンツの配置などを行えます。

Page Customizableコンポーネントを追加すると、実行時にコンポーザをページに含めることが可能になります。ユーザーは、ページの上部で使用できるページ関連の制御、コンポーネントの「コンテンツの追加」ボタンおよび各編集可能ページ・コンポーネントの「編集」アイコンを使用して、コンポーザでページを編集できます(図24-62)。

図24-62 Page Customizableコンポーネント

1操作で複数のアプリケーション・ページの実行時編集を可能にするには、Page Customizableコンポーネントをそれらのページに使用するADFページ・テンプレートに追加します。これにより、Page Customizableを各ページに手動で追加する必要がなくなります。Page Customizableコンポーネントの追加の詳細は、「Page Customizableコンポーネントを使用した実行時カスタマイズの有効化方法」を参照してください。

24.7.2 Change Mode LinkおよびChange Mode Button

Change Mode LinkまたはChange Mode Buttonコンポーネントは、ページの表示モードから編集モードへの簡単な切替え方法を提供します。図24-63は、ページのChange Mode Linkコンポーネントを示しています。

図24-63 Change Mode Linkコンポーネント

Change Mode LinkまたはChange Mode Buttonの使用の詳細は、「Change Mode LinkまたはChange Mode Buttonを使用したページ・モードの切替えを有効にする方法」を参照してください。

24.7.3 Panel Customizable

Panel Customizableは、ユーザーが実行時にコンポーネントを追加できるページの領域を定義します。ユーザーは、Panel Customizableの子コンポーネントとして追加されるShow Detail Frameコンポーネントまたはポートレットを移動または最小化できます。ユーザーは、ページの別のPanel Customizableコンポーネントにこれらのコンポーネントをドラッグ・アンド・ドロップすることも可能です。

編集モードでは、Panel Customizableコンポーネントは、点線のボックスとしてレンダリングされます。実際、Panel Customizableは、実行時リソース・カタログではBoxと呼ばれます。図24-64に示すように、ページの各Panel Customizableコンポーネントに「コンテンツの追加」ボタンが表示されます。このボタンを使用してリソース・カタログ・ビューアを開き、Panel Customizable内にコンポーネントを追加できます。

図24-64 Panel Customizableコンポーネント

詳細は、「Panel Customizableコンポーネントを使用したページの編集可能領域の定義方法」を参照してください。

24.7.4 Show Detail Frame

Show Detail Frameコンポーネントは、アイコンを含むヘッダーとともに子コンポーネントの周りに境界またはクロムをレンダリングし、ユーザーがいくつかの操作を実行できるようにします。このメニューで使用可能なアクションでは、ユーザーがコンポーネントおよびそのコンテンツをページの新しい場所に移動できます(図24-65)。ユーザーは、Show Detail FrameコンポーネントをあるPanel Customizableコンポーネントからページにある別のPanel Customizableコンポーネントにドラッグ・アンド・ドロップすることも可能です。Show Detail Frameは、移動可能にするためにはPanel Customizableコンポーネント内に含まれている必要があります。

図24-65 Show Detail Frameコンポーネント

Show Detail Frameコンポーネントは次のアクションを可能にします。

- コンポーネントを縮小および展開します。

- コンテンツをページの別の位置に移動します。

- タスク・フローを子コンポーネントとして追加した場合、「アクション」メニューを使用してカスタム・アクションとともにタスク・フロー・ナビゲーションを有効にします。

- ADF Facesの「リッチ・テキスト・エディタ」を子コンポーネントとして追加した場合、エンド・ユーザーは、「リッチ・テキスト・エディタ」のテキストを編集および保存できるようになります。

Show Detail Frameのファセットを使用すると、独自のUIコントロールを追加してコンテンツの表示をさらにカスタマイズできます。これらのファセットの使用方法の詳細は、「ファセットを使用したShow Detail Frameコンポーネントへのカスタム・アクションの追加」を参照してください。

このコンポーネントのページへの追加の詳細は、「Show Detail Frameコンポーネントを使用したコンポーネントのカスタマイズの有効化方法」を参照してください。

24.7.5 Layout Customizable

Layout Customizableコンポーネントは、エンド・ユーザーがその子コンポーネントをいくつかの事前定義された方法(2列、3列など)でレイアウトできるコンテナです。ページのすべてのコンポーネントがLayout Customizableコンポーネントに囲まれるような方法でページを設計できます。このような場合、レイアウトはページ全体に適用されます。

レイアウト変更を使用して事前定義されたレイアウトにアクセスします。デフォルトでは、レイアウト変更は、ページの表示モードとページの編集モードの両方で表示されます。Layout Customizableコンポーネント属性を使用することによって、レイアウト変更をアイコン、テキストまたはアイコンおよびテキストとして表示することを選択できます。また、表示モードでレイアウト変更を表示するか非表示にするかを決定できます。図24-66は、ユーザーがレイアウト変更をクリックしたときに表示するLayout Customizableコンポーネントおよび事前定義されたレイアウトを示しています。

図24-66 Layout Customizableコンポーネント

詳細は、「Layout Customizableコンポーネントを使用したページのレイアウトのカスタマイズの有効化方法」を参照してください。

24.8 セキュリティおよびコンポーザ

エンド・ユーザー、アプリケーション開発者および管理者によってアクセスされるアプリケーションでは、すべての編集タスクの実行をすべてのユーザーに許可することは推奨されない場合があります。たとえば、コンポーネントの再配置や表示したくない領域の非表示などのタスクを実行することによってページの表示をカスタマイズすることのみをエンド・ユーザーに許可する必要がある場合があります。一方、アプリケーション開発者は、ページのコンテンツ、コンポーネント・プロパティなどを更新することを許可される必要があります。ページ、コンポーネントまたはコンポーネント属性をカスタマイズする機能は、タグ、ページ、コンポーネントおよび属性のレベルでセキュリティ定義から継承されます。ただし、ビジネス要件に合せてデフォルトのセキュリティ定義を様々なレベルでオーバーライドできます。

ページ、操作、コンポーネント、コンポーネント属性などの様々なレベルでアプリケーション・セキュリティを定義できます。コンポーネントでアプリケーション・カスタマイズを制限できるいくつかの方法があります。コンポーザは、これらのルールに従ってコンポーネントのカスタマイズが可能かどうかを判断します。たとえば、ユーザーがコンポーネントをカスタマイズするには、その前に、アプリケーション・カスタマイズが許可されるかどうかを判断するために、コンポーネントのセキュリティ制限のソースを問い合せます。コンポーネントがアプリケーション・カスタマイズを許可しない場合、コンポーザはこれが制限されているとみなします。つまり、コンポーザはコンポーネントを明示的にセキュリティ保護されているものとして処理します。表24-2に、アプリケーションのカスタマイズ制限を反映するコンポーザの動作を示します。

表24-2 コンポーザ・コンポーネントのカスタマイズ制限

制限

動作

ページ(およびそのコンテンツ)をカスタマイズ可能

コンポーザにより、制限なしでコンポーネントの編集が許可されます。

ページが制限されている

コンポーザは表示されますが、どのオプション(「ページ・プロパティ」、「編集」アイコンなど)にもアクセスできません。

いくつかの操作が制限されている

コンポーザは表示されますが、制限された操作に対応するオプションは無効になります。

コンポーネントが制限されている

「編集」アイコンはコンポーネントにレンダリングされず、そのプロパティは編集できません。

コンポーネントの属性が制限されている

制限された属性はコンポーザに表示されません。

開発者は、コンポーザのAPIを使用して、コンポーネントの属性が制限されているかどうかを確認できます。

セキュリティを実装中に付与される権限に応じて、ユーザーは、アプリケーションにログインするときに、異なるユーザーおよびアプリケーションのカスタマイズのタスクを実行できます。

注意:

保護されたアプリケーションでは、すべてのユーザーの権限を確認し、権限のあるユーザーに対してのみページ上で「編集」リンクまたはボタンを有効にすることをお薦めします。認証されていないユーザーが偶然ページの編集モードに入った場合でも、コンポーネント・プロパティの変更が可能です。

選択したユーザーの「編集」リンクまたはボタンを有効にするには、Change Mode LinkまたはChange Mode Buttonコンポーネントのrendered属性のEL値を指定します。詳細は、「Change Mode LinkおよびChange Mode Button」を参照してください。

この項では、コンポーザ・コンポーネントのデフォルトのセキュリティ動作について説明します。次のサブセクションが含まれます:

- ページおよびタスク・フローのセキュリティ

- MDSのカスタマイズ制限

- コンポーネントのアクション・レベルのセキュリティ

デフォルトのセキュリティ動作のオーバーライドの詳細は、「コンポーザ・コンポーネントのデフォルトのセキュリティ動作の変更」を参照してください。

24.8.1 ページおよびタスク・フローのセキュリティ

アプリケーションのjazn-data.xmlファイルは、ページ・レベルおよびタスク・フロー・レベルのセキュリティ情報のリポジトリです。コンポーザは、このファイルを参照して、ユーザーの権限に基づいて編集機能を有効にします。

- ページまたはタスク・フローのパーソナライズ権限を持っているユーザーは、「ページ表示モードでのカスタマイズ機能」で説明しているユーザーのカスタマイズのみを実行できます。

- 編集権限またはカスタマイズ権限を持っているユーザーは、コンテンツの追加、コンポーネント・プロパティの編集、コンポーネントの削除などのすべての実行時編集タスクを実行できます。コンポーザおよびOracle WebCenter Portalのカスタマイズ可能コンポーネントは、編集権限とカスタマイズ権限を区別しません。

注意:

コンポーザおよびOracle WebCenter Portalのカスタマイズ可能コンポーネントは、付与権限をすべての権限のスーパー・セットとする権限のカスケードをサポートしています。ページまたはタスク・フローの付与権限を持つユーザーは、編集、パーソナライズおよび表示の権限を持っているとみなされます。パーソナライズ権限を持つユーザーは、表示権限も持っているとみなされます。

表24-3では、ページ・レベルの権限およびタスク・フロー・レベルの権限に基づいたコンポーザの動作について説明しています。コンポーザおよびOracle WebCenter Portalのカスタマイズ可能コンポーネントと関係のある権限のみがこの表にリストされています。付与権限は、すべての権限のスーパー・セットであるためリストされていません。付与権限を持つユーザーは、すべての編集タスクを実行できます。

表24-3 ページ権限またはタスク・フロー権限とコンポーザの動作のマッピング

権限

コンポーザの動作

編集またはカスタマイズ

ユーザーは、コンポーザが起動されるページの編集モードに切り替えてページを編集できます。

編集権限またはカスタマイズ権限のいずれかを持つユーザーは、すべての実行時編集タスクを実行できます。

ページまたはタスク・フローの編集権限またはカスタマイズ権限を持っている場合、ユーザーは次のことを実行できます。

- コンテンツの追加

- コンポーネント・プロパティの編集

- コンテンツの再配置

- コンポーザでのコンポーネントの削除

- ポートレットのパーソナライズまたはカスタマイズ

- 表示モードでのポートレットまたはタスク・フローの移動。これはユーザー・カスタマイズとして存続されます。

- 表示モードでのタスク・フローまたはポートレットの展開および縮小。これはユーザー・カスタマイズとして存続されます。

- タスク・フローでの表の列のサイズ変更。これはユーザー・カスタマイズとして存続されます。

- ページの元の状態へのリセット

- 表示モードでのコンポーネントの削除

注意: ページ・レベルの権限を持っているかまたはタスク・フロー・レベルの権限の持っているかに応じて、これらのタスクのすべてまたは一部を実行できます。

ユーザーがページの編集権限またはカスタマイズ権限を持っていないのにこれを編集しようとすると、これを行う権限がないことを示すメッセージが表示されます。

ユーザーがタスク・フローの編集権限またはカスタマイズ権限を持っていない場合、「構造」ビューにタスク・フローの「編集」オプションが表示されません。

パーソナライズ

表示モードで、ページのパーソナライズ権限を持っているユーザーは次のことを実行できます。

- コンテンツの再配置

- ポートレットのパーソナライズ

- 表示モードでのポートレットまたはタスク・フローの移動。これはユーザー・カスタマイズとして存続されます。

- 表示モードでのタスク・フローまたはポートレットの展開および縮小。これはユーザー・カスタマイズとして存続されます。

- タスク・フローでの表の列のサイズ変更。これはユーザー・カスタマイズとして存続されます。

- 表示モードでのコンポーネントの削除

注意: パーソナライズ権限を持っていても、ユーザーはポートレットのカスタマイズは実行できません。

パーソナライズ権限、編集権限、カスタマイズ権限のいずれも持っていないユーザーがページを編集しようとすると、これを行う権限がないことを示すメッセージが表示されます。

表示

表示権限を持っているユーザーは、ページまたはタスク・フローの表示のみを行え、ユーザーまたはアプリケーションのカスタマイズは実行できません。

24.8.1.1 タスク・フローのセキュリティ

タスク・フローをカスタマイズ可能ページに追加すると、コンポーザは、タスク・フローおよびタスク・フローのページのコンポーネントを編集するオプションを提供します。保護されたアプリケーションでは、コンポーザは、カスタマイズ可能なページおよびタスク・フローにプロビジョニングされた権限に基づいて、編集機能を提供します。タスク・フロー権限およびコンポーザの動作の詳細は、表24-3を参照してください。

アプリケーション・ページで、コンポーネントは、JSPXページに直接またはタスク・フローなどの共有コンポーネント内のページ・フラグメントに配置できます。タスク・フロー内のコンポーネントに対する制限は、ページ・フラグメントから導出されます。タスク・フローのセキュリティについて理解を深めるには、図24-67に示すような、タスク・フローを含むページで、このタスク・フローが別のタスク・フローを含む例を検討します。

図24-67 ネストされたタスク・フローを含むページの構造

このページのコンポーネントは次のようにセキュリティを継承します。

- Component1、Component2およびRegion3はDocument.jspxからセキュリティ定義を継承します。

- ComponentA、ComponentBおよびRegionCはregion3.jsffからセキュリティ定義を継承します。

- ComponentXおよびComponentYはregionC.jsffからセキュリティ定義を継承します。

タスク・フローは権限のカスケードをサポートしません。つまり、ページ権限は、タスク・フロー内のコンポーネントによって継承されません。ただし、ページの編集権限またはカスタマイズ権限を持っていないユーザーは、ページのタスク・フローをカスタマイズできません。

たとえば、Document.jspxおよびregionC.jsffの編集権限またはカスタマイズ権限を付与するがregion3.jsffの編集権限またはカスタマイズ権限を付与しない場合、ユーザーは、Component1、Component2、RegionC、ComponentXおよびComponentYはカスタマイズできますが、ComponentA、ComponentBおよびRegionCはカスタマイズできません。

保護されたアプリケーションでは、タスク・フローの権限は、アプリケーションのjazn-data.xmlファイルに格納されます。タスク・フローで使用可能なアクションのリストはタスク・フローの権限クラスoracle.adf.controller.security.TaskFlowPermissionによって定義されます。この権限クラスは、タスク・フローの操作にマップされる、タスク・フロー固有のアクションを定義します。デフォルトでは、表示権限のみがタスク・フローに与えられます。ユーザーが実行時にタスク・フローを編集できるようにするには、カスタマイズ権限がタスク・フローに付与されていることを確認する必要があります。詳細は、「タスク・フローの追加に関する考慮事項」および「タスク・フローのセキュリティの実装」を参照してください。

タスク・フローとそのセキュリティ動作の詳細は、『Oracle Fusion Middleware Oracle Application Development FrameworkによるFusion Webアプリケーションの開発』のADFタスク・フローの作成に関する項を参照してください。

24.8.2 MDSのカスタマイズ制限

Portal Frameworkアプリケーションには、すべてのアプリケーション・オブジェクトのアプリケーションのカスタマイズを制限するデフォルトのMDS構成があります。実行時のページ編集を有効にするには、Page Customizableコンポーネントをページに追加して、このデフォルトの制限を非アクティブにする必要があります。Page Customizableコンポーネントは、その下にあるすべてのコンポーネントのアプリケーションのカスタマイズを有効にします。ただし、ネストされたページまたはフラグメントのコンポーネントのカスタマイズは有効になりません。たとえば、Page Customizableがページ・テンプレートで使用されていて、その内部にFacet Refがある場合、Facet Ref内部のコンポーネントのカスタマイズはデフォルトで有効になりません。

MDSのタイプ・レベルの制限またはインスタンス・レベルの制限を使用して、コンポーネントの一連の属性に対するアプリケーションのカスタマイズを有効化できます。タイプ・レベルの制限は、インスタンス全体の指定されたコンポーネント・タイプに適用できます。実行時、カスタマイズを有効化した属性は、コンポーザで編集可能プロパティとして表示され、制限された属性は、選択したコンポーネントの「コンポーネント・プロパティ」ダイアログに表示されません。詳細は、「カスタマイズ・ポリシーの定義によるコンポーネント・レベルの制限の適用」を参照してください。

カスタマイズ・ポリシーの問合せ

特定のタイプまたはオブジェクト・インスタンスについては、現在のMDSSessionに設定されたポリシー値に基づいて実施中のカスタマイズ・ポリシーを問合せできるようになります。

オブジェクトがカスタマイズ可能かどうかをチェックするために、次に示すように、クラスoracle.mds.cust.policies.CustomizationPolicyProviderの静的メソッドを呼び出せます。

public static boolean isCutomizationAllowed(MDSSession   session,                                            PolicyTarget target);

targetには、次のいずれかを指定できます。

public static PolicyTarget createMOPolicyTarget(MDSReference ref);
public static PolicyTarget createAttributePolicyTarget(MDSReference  ref,                                                       QualifiedName attribute);

24.8.3 コンポーネントのアクション・レベルのセキュリティ

Panel CustomizableコンポーネントおよびShow Detail Frameコンポーネントは、サポートされている個々のアクションに制限を行うことができます。たとえば、現在のユーザーがShow Detail Frameを最小化できるかどうかの制限を指定できます。

コンポーネントのアクションの制限を行うかどうかを決定できます。コンポーネントのアクションの制限はadf-config.xmlで指定できます。制限を指定して、現在のユーザーに適用可能な場合、Panel CustomizableまたはShow Detail Frameはアクションをレンダリングしません。

アクション・レベルの制限の適用の詳細は、「Panel CustomizableおよびShow Detailコンポーネント・アクションでのアクション・レベルの制限の適用」を参照してください。

25 コンポーザを使用したページの実行時編集の有効化

この章では、Portal Frameworkアプリケーションのページにコンポーザ・コンポーネントを追加して、ページの実行時編集を可能にする方法を説明します。

この章のトピックは、次のとおりです:

- コンポーザ・コンポーネントを使用した編集可能ページの設計

- コンポーザ・コンポーネントを使用した編集可能ページの設計: 例

- ページへのコンテンツの移入

- コンポーザの問題のトラブルシューティング

25.1 コンポーザ・コンポーネントを使用した編集可能ページの設計

コンポーザ・タグ・ライブラリには、Oracle JDeveloperでページに追加できる設計時コンポーネントが用意されており、実行時のページ編集が可能になります。設計時にコンポーザ・コンポーネントを使用してページを作成すると、実行時にコンポーザはページ編集モードに入り、要件に応じてページを変更するオプションを提供します。

Frameworkアプリケーションと非Frameworkアプリケーションでカスタマイズを有効にできます。アプリケーション内で、次のタイプのページのカスタマイズを有効にできます。

- ページ・テンプレートに基づいていない通常のJSPXページ

- JSPXテンプレート・ページ

- ページ・テンプレートに基づくJSPXページ

コンポーザ・コンポーネントおよびその属性の詳細は、「コンポーザ・コンポーネント」を参照してください。

この項では、設計時にコンポーザ・コンポーネントをページに追加し、これを実行時に編集可能にする方法を説明します。次のサブセクションが含まれます:

- カスタマイズ可能ページの作成方法

- Page Customizableコンポーネントを使用した実行時カスタマイズの有効化方法

- Change Mode LinkまたはChange Mode Buttonを使用したページ・モードの切替えを有効にする方法

- Panel Customizableコンポーネントを使用したページの編集可能領域の定義方法

- Layout Customizableコンポーネントを使用したページのレイアウトのカスタマイズの有効化方法

- Show Detail Frameコンポーネントを使用したコンポーネントのカスタマイズの有効化方法

- カスタマイズ可能ページを作成するページ・テンプレートの作成方法

- 移入されたページでカスタマイズを有効にする方法

- コンポーザ・コンポーネントの追加時に行われる処理

- 実行時の処理内容

- 編集可能ページの設計時に必要な知識

25.1.1 カスタマイズ可能ページの作成方法

Frameworkアプリケーションにカスタマイズ可能なJSPXアプリケーションを作成する方法の詳細について。

JDeveloperで新しいページを作成すると、そのページは、図25-1に示すように、「アプリケーション・ナビゲータ」の「Webコンテンツ」の下にリストされます。また、ページはエディタで開かれ、アクティブなエディタ・パネルになります。

図25-1 「アプリケーション・ナビゲータ」のカスタマイズ可能JSPXページ

セキュリティに関する考慮事項

デフォルトでは、FrameworkアプリケーションはADFセキュリティで構成されます。デフォルトのユーザー名およびパスワード(weblogic/weblogic1)は自動的に作成されます。

保護されたアプリケーションでユーザーがページを編集できるようにするには、ページの編集権限またはカスタマイズ権限を必要なユーザーまたはロールに付与する必要があります。権限付与の詳細は、『Oracle WebCenter Portalの管理』のユーザー・ロールとアプリケーション・ロールの管理に関する項を参照してください。

アプリケーションでADFセキュリティが有効になっていない場合、セキュリティを実装し、アプリケーションを構成してユーザーが個別のアイデンティティを持つようにユーザーを認証することによって、ユーザーの権限が実行時のカスタマイズ機能にどのように影響するかをテストできます。アプリケーションに基本的なセキュリティ・モデルを実装する手順は、『Oracle Application Development FrameworkによるFusion Webアプリケーションの開発』のFusion WebアプリケーションでのADFセキュリティの有効化に関する項を参照してください。

25.1.2 Page Customizableコンポーネントを使用した実行時カスタマイズの有効化方法

Page Customizableコンポーネントをページに追加することで、ユーザーがページの編集モードに切り替えたときにコンポーザが起動します。Page Customizableコンポーネントを追加すると、一部の構成ファイルがデフォルトのコンポーザ固有の設定によって自動的に更新されます。詳細は、「コンポーザ・コンポーネントの追加時に行われる処理」を参照してください。

注意:

ページにPage Customizableを追加する前の考慮事項については、「編集可能ページの設計時の必知事項」を参照してください。

ページにPage Customizableコンポーネントを追加するには:

1. カスタマイズ可能なJSPXページを開きます。

2. コンポーネント・パレットで、ドロップダウン・リストから「ADF Faces」を選択し、Panel Stretch Layoutコンポーネントをページにドラッグします。

注意:

Panel Stretch Layoutコンポーネントは、centerファセットの子をストレッチし、使用可能なスペースすべてを埋めます。これは、ユーザーがブラウザ上の場合にも当てはまります。

3. 「コンポーネント・パレット」で、ドロップダウン・リストから「コンポーザ」を選択します。

4. Page CustomizableコンポーネントをPanel Stretch Layoutのcenterファセットに追加します。

Page Customizableがaf:form要素内でネストされていることを確認する必要があります。Page Customizableはリッチ・クライアント・コンポーネントで、正常に機能するためにはリッチ・クライアント・フレームワークが必要です。

5. Page Customizableコンポーネントの必須属性には、ページにコンポーネントを追加する際にデフォルト値が移入されます。

属性値の定義または変更の詳細は、「Page Customizableコンポーネント」を参照してください。

6. ページを保存します。

図25-2に示すように、Page Customizableコンポーネントの下にPanel Customizableコンポーネントが子コンポーネントとしてデフォルトで追加され、Page Editor Panelとその他の各種ファセットが追加されます。

図25-2 Page Customizableコンポーネント

例25-1は、ページのソース・ビューのpe:pageCustomizableタグを示しています。

例25-1 ページの「ソース」ビューのPage Customizableコンポーネント

<pe:pageCustomizable id="pageCustomizable1"
<cust:panelCustomizable id="panelcustomizable1"
layout="scroll"/>
<f:facet name="editor">
<pe:pageEditor id="pep1"/>
</f:facet>
</pe:pageCustomizable>

25.1.3 Change Mode LinkまたはChange Mode Buttonを使用したページ・モードの切替えを有効にする方法

ユーザーがページの編集モードに簡単に切り替えられるようにするには、ページにChange Mode LinkまたはChange Mode Buttonコンポーネントを追加する必要があります。

注意:

編集モードへの切替えを可能にする別の方法は、変更モードAPIを使用することです。このAPIの詳細は、Oracle WebCenter Portal Java APIリファレンスを参照してください。

ページにPage Customizableコンポーネントを追加する前の考慮事項については、「編集可能ページの設計時の必知事項」を参照してください。

Change Mode LinkまたはChange Mode Buttonコンポーネントを追加するには:

1. コンポーネント・パレットで、「コンポーザ」を選択します。

2. 「構造」ウィンドウの、前の項で追加したPanel Stretch Layoutのtopファセット内で、コンポーネント・パレットからChange Mode LinkまたはChange Mode Buttonコンポーネントをドラッグします。

Change Mode LinkまたはChange Mode Buttonがaf:form要素内でネストされていることを確認する必要があります。Change Mode LinkまたはChange Mode Buttonコンポーネントはリッチ・クライアント・コンポーネントで、正常に機能するためにはリッチ・クライアント・フレームワークが必要です。

注意:

- ページでPanel Stretch Layoutを使用していない場合は、Change Mode LinkまたはChange Mode Buttonコンポーネントを「構造」ウィンドウのPage Customizableコンポーネントの上に追加します。こうすることによって、Change Mode LinkまたはChange Mode Buttonが実行時に正しく表示されます。

- ページにPage Customizableがある場合のみChange Mode LinkまたはChange Mode Buttonを使用します。Change Mode LinkまたはChange Mode Buttonが含まれているがPage Customizableコンポーネントが含まれていないページを実行すると問題が発生する場合があります。

3. Change Mode LinkまたはChange Mode Buttonコンポーネントの必須属性は、ページにコンポーネントを追加する際にデフォルトで設定されます。

その他の属性については、表30-2を参照して、必要に応じて設定してください。

注意:

保護されたアプリケーションでは、すべてのユーザーの権限を確認し、権限のあるユーザーに対してのみページ上で「編集」リンクまたはボタンを有効にすることをお薦めします。認証されていないユーザーが偶然ページ編集モードに入った場合、コンポーネント・プロパティを変更することはできますが、その変更は保存されません。

選択したユーザーの「編集」リンクまたはボタンを有効にするには、Change Mode LinkまたはChange Mode Buttonコンポーネントのrendered属性のEL値を指定します。詳細は、「Change Mode LinkおよびChange Mode Button」を参照してください。

図25-3に示すように、「構造」ウィンドウのaf:formタグ内に、pe:changeModeLinkまたはpe:changeModeButtonタグが表示されます。

図25-3 Change Mode Link

図25-4に、JDeveloperのページの「設計」ビューのChange Mode Linkを示します。

図25-4 「設計」ビューのChange Mode Link

25.1.4 Panel Customizableコンポーネントを使用したページの編集可能領域の定義方法

Panel Customizableコンポーネントは、ポートレットまたはリージョンの追加、配置、削除などのページ構成またはコンテンツ管理のタスクに必要です。デフォルトでは、1つのPanel CustomizableコンポーネントがPage Customizableコンポーネントの直接の子として自動的に追加されます。要件に応じて、このPanel Customizableコンポーネント内にさらにPanel Customizableコンポーネントを追加できます。

実行時にコンポーネントをドラッグ・アンド・ドロップできるのはPanel Customizableコンポーネント内のみです。

注意:

ページにPage Customizableを追加する前の考慮事項については、「編集可能ページの設計時の必知事項」を参照してください。

ページにPanel Customizableコンポーネントを追加するには:

1. 「コンポーネント・パレット」で、ドロップダウン・リストから「コンポーザ」を選択します。

2. コンポーネント・パレットから「構造」ウィンドウにPanel Customizableコンポーネントをドラッグして、フォーム内の適切な場所にドロップします。

Panel Customizableがaf:form要素内でネストされていることを確認する必要があります。Panel Customizableコンポーネントはリッチ・クライアント・コンポーネントで、正常に機能するためにはリッチ・クライアント・フレームワークが必要です。

注意:

- Page Customizableコンポーネントには、デフォルトで1つの直接の子のPanel Customizableコンポーネントが含まれています。別のPanel CustomizableをPage Customizableの直接の子コンポーネントとして追加しないでください。Page Customizableに複数の子コンポーネントがある場合、最初の子コンポーネントのみはページの実行中に選択されます。

- 実行時にコンポーネントをドロップできるのはPanel Customizableコンポーネント内のみであるため、ページのルートのPanel Customizableコンポーネントは削除しないでください。

3. Panel Customizableコンポーネントの必須属性は、ページにコンポーネントを追加する際にデフォルトで設定されます。

その他の属性については、表30-1を参照して、必要に応じて設定してください。

注意:

ストレッチ・レイアウトをPanel Customizableに選択した場合、最初の子コンポーネントがストレッチされ、Panel Customizableコンポーネントの使用可能なスペースを埋めます。その他の子コンポーネントは、ページから削除されていなくても無視されます。

25.1.5 Layout Customizableコンポーネントを使用したページのレイアウトのカスタマイズの有効化方法

Layout Customizableコンポーネントを使用して、ページまたはページの領域にあるコンポーネントのレイアウトの実行時定義または変更を有効にします。実行時にユーザーがレイアウトをカスタマイズすることを許可する場合のみ、このコンポーネントを使用します。静的レイアウトでは、Panel Group LayoutまたはPanel Stretch Layoutなどの代替のコンポーネントを使用します。

Layout Customizableコンポーネントを追加するには:

1. 「コンポーネント・パレット」で、ドロップダウン・リストから「コンポーザ」を選択します。

2. Layout Customizableコンポーネントを「構造」ウィンドウにドラッグして、Panel Customizableコンポーネント内にドロップします。

ターゲットのPanel Customizableコンポーネントは、Page Customizableコンポーネントの子である必要があります。

Layout Customizableがaf:form要素内でネストされていることを確認します。Layout Customizableコンポーネントはリッチ・クライアント・コンポーネントで、正常に機能するためにはリッチ・クライアント・フレームワークが必要です。

注意:

Page Customizableの直接の子のPanel Customizableを削除し、Layout CustomizableをPage Customizableの直接の子として追加できます。ただし、Page Customizableに直接の子コンポーネントが1つしかないことを確認する必要があります。

3. Layout Customizableコンポーネントの必須属性は、ページにコンポーネントを追加する際にデフォルトで設定されます。

その他の属性については、表30-1を参照して、必要に応じて設定してください。

注意:

Layout Customizableコンポーネントが実行時にページにはっきりと表示されることを確認するには、Text属性を使用してコンポーネントに説明ラベルを提供します。

図25-5に示すように、pe:layoutCustomizableタグは、「構造」ウィンドウのcust:panelCustomizableタグ内にあります。子のPanel Customizableコンポーネントは、デフォルトでLayout Customizableコンポーネント内に追加されます。また、Panel Customizableコンポーネントは、Layout Customizableコンポーネントの各ファセット内に追加されます。これらのPanel Customizableコンポーネントにより、実行時にLayout Customizableコンポーネント内にコンテンツを追加できるようになります。

直接の子として追加されたPanel Customizableは、メイン領域(実行時のレイアウトの中央領域)になります。デフォルトの2つのLayout Customizableファセット内に追加されたPanel Customizableコンポーネントは、AおよびBという2つのコンテンツ領域になります。実行時に事前定義済のレイアウトを選択すると、選択したパターンでコンテンツが表示されるように、これら3つの領域が配置されます。次を参照してください。

レイアウト・タイプごとのコンテンツのレイアウト方法に関する詳細について。

注意:

oneColumnレイアウトでは、AおよびBは、Panel Customizableコンポーネントに子コンポーネントが含まれている場合のみレンダリングされます。

図25-5 Layout Customizableコンポーネント

25.1.6 Show Detail Frameコンポーネントを使用したコンポーネントのカスタマイズの有効化方法

プロパティの編集、コンポーネントの移動、最小化、削除などのカスタマイズを有効にする場合、Show Detail FrameコンポーネントをページのPanel Customizableコンポーネント内にドロップできます。その後、このShow Detail Frame内にコンポーネントを追加できます。

注意:

各Show Detail Frameコンポーネントにある子コンポーネントは1つのみである必要があります。複数の子コンポーネントを追加した場合、最初の1つのみがレンダリングされます。その他の直接の子コンポーネントは、設計時または実行時にレンダリングされません。

複数のコンポーネントがShow Detail Frameに囲まれる必要がある場合、Panel Group LayoutやPanel Customizableなどのグループ化コンポーネントをShow Detail Frameコンポーネントに追加し、ADF Facesコンポーネントまたはその他のコンテンツをこのグループ化コンポーネントに含めます。

Show Detail Frameコンポーネントを使用して、ページ表示モードおよび編集モードでのカスタマイズを有効にします。表示モードで行われた変更はそのユーザーのみが使用でき、編集モードで行われた変更はすべてのアプリケーション・ユーザーが使用できます。

ページにShow Detail Frameコンポーネントを追加するには:

1. コンポーネント・パレットで、「コンポーザ」を選択します。

2. 「構造」ウィンドウにShow Detail Frameコンポーネントをドラッグして、Panel Customizableコンポーネント内にドロップします。

Show Detail Frameコンポーネントは、ページのPanel Customizableコンポーネントにネストさせる必要があります。

3. Show Detail Frameコンポーネントの必須属性は、ページにコンポーネントを追加する際にデフォルトで設定されます。

その他の属性については、表30-5を参照して、必要に応じて設定してください。

図25-6に示すように、cust:showDetailFrameタグがcust:panelCustomizableタグ内に追加されます。

図25-6 Show Detail Frameコンポーネント

このタイプのタスクをさらに理解するには、「コンポーザ・コンポーネントを使用した編集可能ページの設計: 例」を参照してください。

25.1.7 カスタマイズ可能ページを作成するページ・テンプレートの作成方法

アプリケーションでカスタマイズ可能ページを多数作成することを計画している場合、カスタマイズを可能にしたADFページ・テンプレートのページに基づいて作成できます。コンポーザ・コンポーネントをテンプレート自体に追加することで、これらのコンポーネントをカスタマイズ可能ページごとに追加する作業が必要なくなります。

ページ・テンプレートを作成し、そのカスタマイズを有効にするには:

1. JDeveloperの「アプリケーション・ナビゲータ」で、テンプレートを作成するアプリケーションのポータル・プロジェクトに移動し、そのポータル・プロジェクトを右クリックし、「新規」を選択します。

2. 「新規ギャラリ」で、「Web層」を開き、「JSF」、「JSFページ・テンプレート」の順に選択し、「OK」をクリックします。

3. 「JSFページ・テンプレートの作成」ダイアログで、テンプレートのファイル名を入力し、レイアウトを選択し、新規ファセットを宣言します。

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

5. テンプレートで、コンポーザのタグ・ライブラリから、Change Mode LinkまたはChange Mode ButtonコンポーネントをPanel Stretch Layoutコンポーネントの上に追加します。

6. Page CustomizableコンポーネントをPanel Stretch Layoutコンポーネントのcenterファセット内に追加します。

7. 子のPanel CustomizableコンポーネントをPage Customizableから削除し、Panel Group Layoutコンポーネントをその場所に追加します。

8. Panel Group Layoutのlayout属性をscrollに設定します。

9. Facet RefコンポーネントをPanel Group Layout内に追加し、手順3でファセットを宣言する際に使用した同じ名前を指定します。テンプレートは、図25-7に示すようにファセットを表示します。

図25-7 新しいページ・テンプレート・ファイル

10. テンプレート・ファイルを保存します。

このテンプレートに基づいてカスタマイズ可能ページを作成できるようになりました。ページを作成したら、Panel CustomizableまたはLayout Customizableコンポーネントを新しいページに表示されるファセット内に追加できます。ページ・コンテンツをPanel CustomizableまたはLayout Customizableコンポーネントに追加できます。

25.1.8 移入されたページでカスタマイズを有効にする方法

コンテンツが移入されたJSPXページを持つ既存のADFアプリケーションがあり、カスタマイズを有効にする場合、Page Customizableコンポーネント内のすべてのコンテンツを移動してこれを実行できます。

まずPage Customizable、次にLayout Customizable、さらにPanel CustomizableコンポーネントおよびShow Detail Frameコンポーネントの必須の階層を追加する必要があります。既存のコンポーネントそれぞれをドラッグし、Page Customizable内の適切な場所にドロップします。

注意:

- Page Customizableコンポーネントの直接の子コンポーネントは1つのみであることを確認します。
複数の直接の子コンポーネントを追加すると、最初の子コンポーネントのみが実行時にレンダリングされます。最初の子コンポーネントがページに合せてストレッチされます。その他の直接の子コンポーネントはすべて無視され、ページにレンダリングされません。

- 実行時にユーザーがレイアウトをカスタマイズすることを許可する場合のみ、Layout Customizableコンポーネントを使用します。静的レイアウトでは、Panel Group Layout、Panel Stretch Layoutコンポーネントなどの代替のコンポーネントを使用します。

- 最良の結果を得るためには、ソース・コードの編集によってではなく、「構造」ウィンドウを使用してコンポーネントを移動します。

25.1.9 コンポーザ・コンポーネントの追加時に行われる処理

ページにPage Customizableコンポーネントを追加する際には、次の構成が自動的に実行されます。

- デフォルトのリソース・カタログ定義ファイルdefault-catalog.xmlがアプリケーションで構成されます。default-catalog.xmlファイルは、Application_Root/Portal/src/portalディレクトリにあります。
Frameworkアプリケーションで、default-catalog.xmlファイルはApplication_Root/Portal/public_html/oracle/webcenter/portalapp/catalogsディレクトリにあり、ページを作成してPage Customizableコンポーネントを追加しなくてもすぐに使用できます。

- アプリケーション用にリソース・カタログ・ビューアが構成されます。実行時、コンポーザは、このビューアからページにリソースを追加するオプションをユーザーに提供します。

- Application_Root/Project_Name/public_html/WEB-INFディレクトリで使用可能なweb.xmlファイルは、更新されてMDS JSPプロバイダを構成します。

- ComposerChangeManagerは、アプリケーションのweb.xmlファイル内に構成されます。詳細は、「永続性変更マネージャの構成」を参照してください。

- アプリケーションを作成すると、最小限のadf-config.xmlファイルも作成されます。アプリケーション・ページにPage Customizableコンポーネントを追加すると、必要な構成がadf-config.xmlファイルに追加されます。たとえば、変更の永続性は、このファイルのadf-faces-configセクションで構成されます。詳細は、「永続性変更マネージャの構成」を参照してください。

- Application_Root/Portal/adfmsrc/portalディレクトリのDataBindings.cpxファイルは更新され、ページにタスク・フローが存在できるようになります。

- ページ定義ファイルは、Oracle WebCenter Portal拡張JARファイルの一部として入手可能なコンポーザ・タスク・フローに対するバインディングを使用して更新されます。例25-2は、Page Customizableコンポーネントがアプリケーション・ページに追加された後のページ定義ファイルのコードを示しています。

関連項目:

コンポーザ・コンポーネントを追加するときに作成または変更されるファイルの詳細は、「コンポーザ固有のファイルと構成」を参照してください。

図25-2 Page Customizableコンポーネントを追加した後のページ定義ファイル

<?xml version="1.0" encoding="UTF-8" ?>
<pageDefinition xmlns="http://xmlns.oracle.com/adfm/uimodel"
version="11.1.1.57.95" id="rcpagePageDef"
Package="portal.pageDefs">
<parameters/>
<executables>
<variableIterator id="variables"/>
<taskFlow id="pageeditorpanel"
taskFlowId="#{pageEditorBean.pageEditorPanel}"
xmlns="http://xmlns.oracle.com/adf/controller/binding"/>
</executables>
<bindings/>
</pageDefinition>

25.1.10 実行時の処理内容

実行時、ユーザーは、「ページ表示モードでのカスタマイズ機能」および「ページ編集モードの「デザイン」ビューおよび「コンテンツの追加」ビューでの編集機能」で説明されているすべてのタスクを実行できます。

各コンポーザ・コンポーネントには、「コンポーザ・コンポーネント」で説明されている実行時機能が用意されています。

注意:

ページで実行する実行時カスタマイズは、アプリケーションをターゲット・サーバーにデプロイするときに引き継がれません。

25.1.11 編集可能ページの設計時の必知事項

カスタマイズ可能ページにコンポーザ・コンポーネントを追加する際には、次の事項に注意する必要があります。

- 保護されたアプリケーションでユーザーがページを編集できるようにするには、ページの編集権限またはカスタマイズ権限を必要なユーザーまたはロールに明示的に付与する必要があります。権限付与の詳細は、「ポータルのロールと権限の管理」を参照してください。

- コンポーネントの実行時カスタマイズを有効にするには、ページにPage Customizableコンポーネントを1つだけ追加します。

注意:

ページに2つ目のPage Customizableコンポーネントを追加しないでください。ページを実行すると、最初のPage Customizableコンポーネントのみが選択されます。

- Page Customizableコンポーネントの直接の子コンポーネントは1つのみであることを確認します。
複数の直接の子コンポーネントを追加すると、最初の子コンポーネントのみが実行時にレンダリングされます。最初の子コンポーネントがページに合せてストレッチされます。その他の直接の子コンポーネントはすべて無視されます。

- カスタマイズ可能にするすべてのコンポーネントをPage Customizableコンポーネント内に配置します。

- 実行時の編集を有効にするには、ID属性がページのすべてのコンポーネントで定義されていることを確認する必要があります。ID値がないコンポーネントの実行時編集は、コンポーザではサポートされていません。
ID値のないコンポーネントがページに含まれている場合、コンポーザでのページの編集中に問題が発生する場合があります。

- 表示モードのユーザー・カスタマイズを有効にするには、Show Detail FrameコンポーネントをPanel Customizableコンポーネント内に配置します。

- 単一の子のみを含める場合にはShow Detail Frameを使用します。Show Detail Frameで複数のコンポーネントを囲む必要がある場合、Panel Group LayoutやPanel Customizableなどのグループ化コンポーネントをShow Detail Frameコンポーネント内に配置し、ADF Facesコンポーネントまたはその他のコンテンツをこのグループ化コンポーネント内に配置します。

- ポートレットをShow Detail Frameコンポーネント内に配置する必要はありません。ポートレットは、Show Detail Frameコンポーネントと類似のヘッダーおよび表示オプションに備えられます。

25.2 コンポーザ・コンポーネントを使用した編集可能ページの設計: 例

この例では、実行時にカスタマイズ可能なページを作成するとします。MyPage.jspxという名前のページが、MyWebCenterAppというFrameworkアプリケーションにあります。

カスタマイズ可能ページを作成するには:

1. MyWebCenterAppという名前のFrameworkアプリケーションを作成します。

2. MyPage.jspxという名前のJSPXページを作成します。

3. ADF Facesタグ・ライブラリからMyPage.jspxにPanel Stretch Layoutを追加します。

注意:

Panel Stretch Layoutコンポーネントは、centerファセットの子をストレッチし、ブラウザの使用可能なスペースすべてを埋めます。これは、ブラウザ上でも同様です。したがって、コンポーネントをこの子コンポーネント内に配置することによって、確実にページのカスタマイズ可能部分がブラウザ領域全体を占めるようにできます。

4. 「Page Customizableコンポーネントを使用した実行時カスタマイズの有効化方法」の手順に従って、Page Customizableをコンポーザ・タグ・ライブラリから中央ファセットに追加します。

5. Page Customizableの境界色をblueに設定し、編集可能領域を他の編集できない領域から区別します。
Page Customizableのプロパティ・インスペクタのスタイル・カテゴリの下で、「ボックス」タブをクリックし、Border Color属性をBlueに設定します。

6. 子Panel Customizableの境界色をredに設定します。
Panel Customizableのプロパティ・インスペクタのスタイル・カテゴリの下で、「ボックス」タブをクリックし、Border Color属性をRedに設定します。

7. 「Change Mode LinkまたはChange Mode Buttonを使用したページ・モードの切替えを有効にする方法」の手順を実行して、Change Mode LinkコンポーネントをPanel Stretch Layoutの上部ファセットに追加します。

8. 中央ファセット内で、「Layout Customizableコンポーネントを使用したページのレイアウトのカスタマイズの有効化方法」の手順を実行して、Page Customizableの直接の子であるPanel Customizableに、Layout Customizableコンポーネントを追加します。

9. 「Show Detail Frameコンポーネントを使用したコンポーネントのカスタマイズの有効化方法」の手順を実行して、Show Detail Frameコンポーネントをページの各Panel Customizable内に追加します。
図25-8は、Layout Customizableの直接の子であるPanel Customizableコンポーネントの内部、およびContentAファセットとContentBファセットの直接の子であるPanel Customizableコンポーネントの内部にある、Show Detail Frameコンポーネントを示しています。

10. この例のため、Rich Text EditorおよびImageコンポーネントをLayout Customizableでネストされた2つのShow Detail Frameコンポーネント内に追加します。これらのコンポーネントそれぞれをADF Facesタグ・ライブラリからページの必要な場所にドラッグ・アンド・ドロップします。
ページのコンポーネントの階層を図25-8に示します。

図25-8 MyPage.JSPXのコンポーネント階層

11. ページの編集権限またはカスタマイズ権限を必要なユーザーまたはロールに付与します。権限付与の詳細は、「ポータルのロールと権限の管理」を参照してください。

12. MyPage.jspxを実行します。
ページが表示モードで開きます。ページの「編集」リンクをクリックして編集モードに入ります。「コンポーザ」でページが開きます。「コンポーザ」では、「ページ編集モードの「デザイン」ビューおよび「コンテンツの追加」ビューでの編集機能」で説明されているすべての編集タスクを実行できます。

図25-9に実行時の編集モードでのページの外観を示します。

図25-9 「コンポーザ」で開いたMyPage

アプリケーションがADFセキュリティで構成されていない場合、このガイドのその他の例でサンプル・ページを使用するには、アプリケーションでADFセキュリティを構成します。

アプリケーションでセキュリティを構成するには:

1. フォーム・ベースの認証でADFセキュリティを構成し、デフォルトのログイン・ページを生成します。
詳細は、「ADFセキュリティの有効化」を参照してください

2. 3人のユーザーahunold、skingおよびjdoeを作成します。
手順の詳細は、アプリケーションのロールと権限に関する項、およびアプリケーションのロールの作成方法に関する項を参照してください

MyPage.jspxを実行すると、ログイン画面が表示されます。作成した3つのユーザー名のいずれかを使用してログインできます。

25.3 ページへのコンテンツの移入

必須のコンポーザ・コンポーネントを備えた編集可能ページを作成すると、通常のJSPXページと同様にページにコンテンツを移入できます。ただし、コンポーザ対応のページにコンテンツを追加するときには、理解しておく必要がある制限および推奨事項があります。

設計時の編集可能ページの移入は、その他のADF Facesページの移入と似ています。コンポーネントをIDEの様々な領域からページにドラッグ・アンド・ドロップできます。ポートレット、タスク・フロー、ADF Facesコンポーネントなどのコンポーネントを追加できます。

Page Customizableコンポーネント内の任意の場所にコンポーネントをドラッグ・アンド・ドロップすると、Id属性が一意の値に設定されます。Id属性は、コンポーネントの編集および変更された状態の維持に必要です。実行時にコンポーネントをページに追加すると、Id属性が自動的に設定されます。

25.3.1 コンテンツをページに追加するときの必知事項

コンテンツを編集可能ページに追加するときには、次の点を考慮してください。

- Page CustomizableコンポーネントでネストされているPanel Customizableコンポーネント内にコンポーネントを追加します。こうすることによって、コンポーネントを実行時に編集できます。

- Show Detail Frameコンポーネントには、子コンポーネントとしてOracle ADF Facesコンポーネントまたはタスク・フローを含めることができます。ただし、ポートレットには、Show Detail Frameコンポーネントに用意されているものと似ているヘッダーが含まれ、直接Panel Customizableコンポーネントに追加できます。Show Detail Frameコンポーネントにポートレットを含めることの利点はこれ以上ありません。

- 「コンポーザ」の「構造」ビューで選択可能にするコンポーネントの場合、そのコンポーネントがリッチ・クライアント・フレームワークに準拠し、クライアント側コンポーネントを生成することを確認します。

- ページでADF FacesコンポーネントのOutput TextとOutput FormattedがPage Customizableコンポーネント内でネストされている場合、clientComponent属性値を設定していることを確認してください。この属性値が設定されていない場合、実行時にページでコンポーネントを移動または再配置しようとするとエラーが発生する場合があります。

- 編集可能ページでポートレットを消費するには、まずアプリケーションにポートレット・プロデューサを登録する必要があります。詳細は、「ポートレット・プロデューサの管理」を参照してください。

25.3.1.1 タスク・フローの追加に関する考慮事項

ユーザーは、カスタマイズ可能ページに追加されたタスク・フローをパーソナライズ、カスタマイズおよび編集できます。保護されたアプリケーションでは、タスク・フローのカスタマイズ権限を持つユーザーは、タスク・フローのページのコンポーネントも編集できます。

タスク・フローをカスタマイズ可能ページに追加するときには、次の点を考慮してください。

- ルック・アンド・フィール、レイアウト設計および対話に関する一貫性をユーザーに提供し、問題(過剰な余白、過剰なスクロール・バー、大きいデータ・セットを表示するときの遅い応答、不安定な応答、予期できない応答など)を回避するために、Oracle ADFの再利用可能な構成要素としてタスク・フローが作成されていることを確認します。

- 保護されたアプリケーションで、ユーザーが「コンポーザ」でタスク・フローのコンテンツを表示できるようにするには、アプリケーションのjazn-data.xmlファイルでタスク・フローにTaskFlowPermission権限が付与されていて、少なくともViewアクションがプロビジョニングされていることを確認します。これはデフォルトでは有効になっていないため、明示的に設定する必要があります。

- 保護されたアプリケーションで、ユーザーがタスク・フローのページでコンポーネントを編集できるようにするには、タスク・フローがアプリケーションのjazn-data.xmlファイルにTaskFlowPermission権限を持ち、Customizeアクションがプロビジョニングされていることを確認します。これはデフォルトでは有効になっていないため、明示的に設定する必要があります。

- タスク・フローですべての必須パラメータに有効な値を指定したことを確認します。

詳細は、「タスク・フローのセキュリティの実装」を参照してください。

25.4 コンポーザの問題のトラブルシューティング

この項では、コンポーザの使用中に発生する可能性のある問題のトラブルシューティングに役立つ情報を提供します。

コンポーザのADFロギングの構成

JDeveloperでアプリケーションを作成しているときには、JDeveloperのデバッグ・ツールを使用して、Webページまたはページ定義ファイルのエラーを簡単に検出できます。Javaロガーを設定してJava診断メッセージを表示することも可能です。ロギングの構成の詳細は、『Oracle Fusion Middleware Oracle Application Development FrameworkによるFusion Webアプリケーションの開発』の「ADFコンポーネントのテストおよびデバッグ」の章を参照してください。コンポーザのロギングを構成するには、そのガイドのタスクを実行し、logging.xmlファイル内でoracle.adf.view.page.editorパッケージおよびoracle.adfinternal.view.page.editorパッケージが目的のロギング・レベルで構成されていることを確認します。

問題

ページを実行すると、次のエラーが表示されます。

java.lang.IllegalStateException: The expression "#{bindings.pageeditorpanel.regionModel}"
(that was specified for the RegionModel "value" attribute of the region component with id "pePanel")
evaluated to null. This is typically due to an error in the configuration of the
objects referenced by this expression. If it helps, the expression
"#{bindings.pageeditorpanel}" evaluates to "null". If it helps, the expression
"#{bindings}" evaluates to "view_untitled1PageDef". Now using an empty RegionModel instead.

解決策

このエラーは、Page Customizableコンポーネントを含むページに、そのページ定義ファイルでバインドしている必須のタスク・フローがない場合に発生します。ページ定義ファイルの<executables>ノードの下に次の有効なエントリが含まれていることを確認します。

<taskFlow id="pageeditorpanel" taskFlowId="#{pageEditorBean.pageEditorPanel}"xmlns="http://xmlns.oracle.com/adf/controller/binding"/>

このエラーは、ページがページ・テンプレートに基づいていて、そのページ・テンプレートにPage Customizableコンポーネントが含まれている場合にも発生します。この場合は、af:pageTemplateタグにvalue="#{bindings.pageTemplateBinding}"属性が含まれていません。

ページ定義ファイルの<executables>ノードの下に次のエントリが含まれていることを確認します。

<page path="view.pageDefs.templateDef1PageDef" id="pageTemplateBinding" Refresh="ifNeeded"/>

問題

ユーザーが編集モードに切り替えられません。編集リンク(Change Mode LinkまたはChange Mode Button)が無効のように見えます。

解決策

そのページに関するユーザーの権限が表示権限のみである可能性があります。ユーザーがそのページの編集権限を持っていることを確認してください。ページの基になるページ・テンプレートでは、表示権限のみを持っていれば十分です。

問題

「コンポーザ」の「コンポーネント・プロパティ」ダイアログの書込みイベント中に例外が発生します。

解決策

このエラーは、アプリケーション・ページにADFデータ視覚化コンポーネントとコンポーザ・コンポーネントの両方が含まれる場合に発生します。

最も容易にロードされるアプリケーション・クラスに次のコードを追加して、DvtElementObjectFactoryクラスをOracle ADF FactoryManagerオブジェクトとともに登録します。

...
import oracle.adfdt.model.dvt.objects.DvtElementObjectFactory;
import oracle.adfdt.model.managers.FactoryManager;
...
static
{
FactoryManager.getInstance().registerFactory(new DvtElementObjectFactory());
}

26 コンポーザを使用した実行時編集機能の拡張

この章では、コンポーザの宣言的でプログラム可能な拡張性メカニズムを使用して、ビジネス・ニーズに合うように実行時機能をカスタマイズする方法について説明します。

この章のトピックは、次のとおりです:

- 拡張性オプションの概要

- コンポーザのアドオンの作成

- カスタム・プロパティ・パネルの作成

- 式ビルダーの拡張

- タスク・フローのパラメータのカスタムLOVまたはピッカーの構成

- コンポーザUIイベントのイベント・ハンドラの構成

- リソース・カタログのドロップ・ハンドラの構成

- プロパティ・フィルタの定義

- カスタマイズ・マネージャ・タスク・フローのパラメータ・サポートの有効化

- コンポーザのツールバーのカスタマイズ

- 「デザイン」ビューまたは「コンテンツの追加」ビューでの直接選択の有効化

- コンポーザの拡張性機能の問題のトラブルシューティング

26.1 拡張性オプションの概要

コンポーザは、カスタマイズ可能なアプリケーション・ページを構築するフレームワークを提供します。デフォルトの機能に加えて、コンポーザのフレームワークを拡張し、エンド・ユーザーが使用できる実行時機能を拡張できます。アプリケーションのadf-config.xmlファイルおよびコンポーザの拡張ファイルpe_ext.xmlで拡張機能を構成する必要があります。これらのファイルの詳細は、「構成ファイル」を参照してください。

この項では、コンポーザの実行時機能を宣言的に拡張するために使用できるオプションについて説明します。次のサブセクションが含まれます:

- コンポーザのアドオン

- コンポーザのカスタム・プロパティ・パネル

- コンポーザのイベント・ハンドラ

- ドロップ・ハンドラ

- コンポーネント・プロパティのフィルタ

- カスタマイズ・マネージャ

- コンポーザのツールバーのカスタマイズ

26.1.1 コンポーザのアドオン

デフォルトのコンポーザのツールバー(図26-1)には、次のものが含まれています。

- ページ・タイトル: 編集モードで開いているページのタイトルを示します。

- 「ページ・プロパティ」アイコン: 「ページ・プロパティ」ダイアログを開き、ユーザーがホスト・ページのメタデータを編集できるようにします。

- 「ページのリセット」アイコン: 現在の編集セッションでページに行った変更を元に戻します。

- 「閉じる」ボタン: 編集モードを終了し、標準UIにユーザーを戻します。

図26-1 コンポーザのツールバーのデフォルト・アドオン

「ページ・プロパティ」および「ページのリセット」アイコンはアドオンの例です。これらのアイコンをクリックして、ページ・プロパティの編集およびページ・カスタマイズのリセットを行うためのパネルを表示します。通常、アドオンは、ページ編集モードの「コンポーザ」ツールバーのアイコンとしてレンダリングされるカスタム・タスク・フローです。「ページ・プロパティ」アドオンと「ページのリセット」アドオンとともに表示されるアドオンを作成できます。たとえば、「コンポーザ」ツールバーに「リビジョン」アイコンが表示されるように、ページ・リビジョン履歴を表示するアドオンを作成できます。このアイコンをクリックするとページのリビジョン履歴が表示されます。「ページ・プロパティ」アドオンと「ページのリセット」アドオンを、作成するカスタム・アドオンと置き換えることもできます。

カスタムのアドオンを構成するプロセスには、タスク・フローを作成し、JARファイルにパッケージ化して、コンポーザ拡張ファイルで定義する作業が含まれます。詳細は、「コンポーザのアドオンの作成」を参照してください。

26.1.2 コンポーザのカスタム・プロパティ・パネル

「コンポーネント・プロパティ」ダイアログには、様々なタブに属性のカテゴリが表示されます。各タブは、プロパティ・パネルと呼ばれます。コンポーザのデフォルトの「コンポーネント・プロパティ」ダイアログは、Oracle JDeveloperの「プロパティ・インスペクタ」に似ています。コンポーネントのカスタム・プロパティ・パネルを作成して登録し、これらにコンポーネント・プロパティを移入し、「コンポーネント・プロパティ」ダイアログのデフォルトのタブとともにこれらをタブとして表示できます。

カスタム・プロパティ・パネルを構成するプロセスには、そのパネルをタスク・フローとして作成し、JARファイルにパッケージ化して、コンポーザ拡張ファイルで定義する作業が含まれます。詳細は、「カスタム・プロパティ・パネルの作成」を参照してください。

26.1.3 コンポーザのイベント・ハンドラ

「コンポーザ」には、実行時にページを編集するための直感的なユーザー・インタフェースが用意されています。これには、「保存」ボタン、「閉じる」ボタン、「削除」ボタンなどのUIコンポーネントが含まれます。ユーザーが「コンポーザ」でボタンやアイコンをクリックすると、イベント・ハンドラで確実に特定のアクションが実行されます。イベント・ハンドラは、コンポーザのイベントが起動されると、コンポーザによってコールされて戻されるコードです。コンポーザの各UIイベントはイベント・ハンドラと関連付けられています。イベントの起動時に異なる処理または複数の処理を実行して、コンポーザの本来の機能を拡張する必要がある場合があります。たとえば、ユーザーが「保存」をクリックしたとき、デフォルトで「コンポーザ」に用意されている保存動作に加えて、キャッシュした情報のクリーニングやリソースへの接続などの追加のタスクを実行するようにアプリケーションを構成する必要がある場合があります。イベント・ハンドラを使用してこれを実現できます。詳細は、「コンポーザUIイベントのイベント・ハンドラの構成」を参照してください。

26.1.4 ドロップ・ハンドラ

リソース・カタログは、ユーザーがページに追加できるリソースを提供します。リソース名の隣の「追加」リンクで、ユーザーはリソースをページに追加できます。コンポーザは、カタログの追加操作を処理するためのドロップ・ハンドラを提供します。デフォルトでは、ドロップ・ハンドラはカタログの各リソースに対して構成されています。リソースへのドロップ処理の完全な制御を提供する場合、そのリソースに追加のドロップ・ハンドラを作成できます。そうすると、「追加」リンクは、リソースをページに追加するための様々なオプションを備えたコンテキスト・メニューを表示します。1つ以上のドロップ・ハンドラを作成し、カタログでリソースの様々なフレーバを処理できます。

次のタイプのドロップ・ハンドラを追加できます。

- コンポーザに登録され、ユーザーが「リソース・カタログ」で「追加」リンクをクリックするとコールされるJavaクラス。この場合、リソースは選択したデータ・フレーバに基づくページに追加されます。

- コンポーザに登録され、ユーザーが「リソース・カタログ」で「追加」リンクをクリックするとコールされるタスク・フロー。この場合、リソースのどの情報をページに表示する必要があるかをユーザーが決定できるタスク・フローが起動されます。

詳細は、「リソース・カタログのドロップ・ハンドラの構成」を参照してください。

26.1.5 コンポーネント・プロパティのフィルタ

「コンポーネント・プロパティ」ダイアログは、選択したコンポーネントのプロパティを表示します。デフォルトでは、「コンポーザ」は特定のコンポーネント・プロパティをフィルタ処理して、ユーザーにプロパティのサブセットを表示します。フィルタを宣言的に定義して、ユーザーに表示する必要がないプロパティをさらに非表示にしたり、非表示のプロパティを表示したりできます。詳細は、「プロパティ・フィルタの定義」を参照してください。

26.1.6 カスタマイズ・マネージャ

カスタマイズ・マネージャは、ページやタスク・フローなどのオブジェクトに関するアプリケーションのカスタマイズをユーザーがダウンロード、アップロード、リセットおよび削除できるタスク・フローです。コンポーザの内外のある管理ページ上でカスタマイズ・マネージャを構成できます。カスタマイズ・マネージャの構成および使用の詳細は、「カスタマイズ・マネージャ・タスク・フローのパラメータ・サポートの有効化」を参照してください。

26.1.7 「コンポーザ」ツールバーのカスタマイズ

デフォルトの「コンポーザ」ツールバーには、図26-2に示すように、ページ名、「ページ・プロパティ」と「ページのリセット」のアイコン、および「閉じる」ボタンの各要素が表示されます。

図26-2 デフォルト要素を備えた「コンポーザ」ツールバー

要素を追加、削除または再配置してツールバーをカスタマイズできます。既存の要素をカスタム要素でオーバーライドすることも可能です。たとえば、編集しているページの名前をユーザーに表示しない場合、ページ名を表示するメッセージを削除できます。

コンポーザのツールバーのカスタマイズの詳細は、「コンポーザのツールバーのカスタマイズ」を参照してください。

26.1.8 構成ファイル

この章で説明する拡張性構成を開始する前に、理解する必要がある2つの重要な構成ファイルがあります。この章で説明するほとんどの拡張機能は、これらのファイルで定義されます。

- コンポーザ拡張ファイル(pe_ext.xml)
コンポーザ拡張ファイル(pe_ext.xml)では、コンポーザが提供する編集機能を拡張できます。このファイル内で、要素を追加して新しいコンポーザ・アドオンおよびカスタム・プロパティ・パネルを登録し、選択的にパネルをレンダリングし、イベント・ハンドラを登録し、プロパティ・フィルタを定義できます。pe_ext.xmlファイルは、デフォルトではアプリケーションで使用できません。アドオン、プロパティ・パネルまたはイベント・ハンドラなどのタスクを初めて実行するときにこのファイルを作成する必要があります。このファイルをプロジェクトのWebコンテキスト・ルートの下のMETA-INFディレクトリまたはapplication_home/project/src/META-INFディレクトリに作成します。アプリケーションを実行するとき、pe_ext.xmlファイルは、アプリケーションのクラスパスに含まれているJARファイルから取得されます。アプリケーションには複数の拡張ファイルを含めることができます。ただし、拡張ファイルを含むJARがアプリケーションのクラスパスで使用でき、pe_ext.xmlファイルが処理のために取得されるようにする必要があります。META-INFフォルダにpe_ext.xmlが含まれている各JARが処理され、コンポーザの拡張機能がロードされて結合されます。コンポーザの機能を拡張するためにpe_ext.xmlで定義できる様々な要素の詳細は、「pe_ext.xml」を参照してください。

- アプリケーションのadf-config.xmlファイル
adf-config.xmlファイルは、通常デプロイ時に決定され、実行時に変更されることがあるアプリケーション・レベルの設定を指定します。コンポーザでの新しいアドオンおよびカスタム・プロパティ・パネルの登録や、カスタマイズ・レイヤーの作成などのタスクを実行するときには、adf-config.xmlファイルに適切なエントリを追加する必要があります。adf-config.xmlファイルはアプリケーションを作成するときに自動的に作成され、Page Customizableコンポーネントをページに追加すると特定の構成がこのファイルに追加されます。

adf-config.xmlで設定できるコンポーザ固有の構成の詳細は、「adf-config.xml」を参照してください。

26.2 コンポーザのアドオンの作成

コンポーザには、実行時編集のために次のデフォルトのアドオンが用意されています。

- ページ・プロパティ
このダイアログは、「コンポーザ」ツールバーの「ページ・プロパティ」アイコンをユーザーがクリックすると開きます。「ページ・プロパティ」ダイアログは、現在のページのプロパティを表示し、ユーザーはプロパティ値を変更できます。

- ページのリセット
このダイアログは、「コンポーザ」ツールバーの「ページのリセット」アイコンをユーザーがクリックすると開きます。「ページのリセット」ダイアログでは、ユーザーはページに対して作成されたアプリケーションのカスタマイズを削除し、これを以前に保存したバージョンまたは元のデフォルトの状態にリセットできます。詳細は、「ページのリセット」を参照してください。

これらに加えて、コンポーザに新規アドオンを登録できます。たとえば、「コンポーザ」ツールバーに「リビジョン」アイコンが表示されるように、ページ・リビジョン履歴を表示するアドオンを作成できます。このアイコンをクリックするとページのリビジョン履歴が表示されます。

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

- アドオンの作成および登録の方法

- 実行時の処理内容

- コンポーザのデフォルト・アドオンの除外方法

- カスタマイズ・マネージャのアドオンの表示方法

- アドオンを選択的に表示する方法

26.2.1 アドオンの作成および登録の方法

「コンポーザ」ツールバーにあるアイコンから起動できるカスタム・タスク・フローを作成および登録できます。登録されたすべてのアドオンに、ツールバーに表示される関連アイコンがあります。

この項では、アドオンを作成して、コンポーザに登録する手順を順を追って説明します。ここには、アプリケーションに関する情報を表示するアドオンの作成方法を示す例が含まれています。この例のアドオンでは、「コンポーザ」ツールバーに「情報」アイコンをレンダリングします(図26-3)。ユーザーは、このアイコンをクリックすることで、アプリケーションの情報を含むタスク・フローを起動できます。

図26-3 コンポーザのツールバーの「情報」アイコン

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

- アドオン・タスク・フローの作成

- コンポーザへのアドオンの登録

- アドオンのadf-config.xmlへの登録

26.2.1.1 アドオン・タスク・フローの作成

コンポーザのアドオンは、JSPXページまたはページ・フラグメントを使用して作成するタスク・フローです。

アドオンを作成するには:

1. アプリケーション・プロジェクトで、custompanelview.jsffというJSFFファイルを作成します。

a. 「file」メニューから、「新」を選択します。

b. 「新規ギャラリ」ダイアログで、「Web層」を展開し、「JSF」を選択してから「JSFページ」またはJSFフラグメントを選択します。

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

2. 次の例に示したものと同様のコードを追加してフラグメントを設計します。

<?xml version='1.0' encoding='UTF-8'?>
<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" version="2.1"
xmlns:af="http://xmlns.oracle.com/adf/faces/rich">
<af:panelGroupLayout id="pnlgrp1" layout="vertical" halign="center">
<af:spacer id="sp1" height="20" />
<af:image id="customimage"              source="/images/DemoLogo.jpg"
shortDesc="Demo Logo"/>
<af:spacer id="sp2" height="20"/>
<af:outputText id="output1" value="This is a sample shopping cart application based on Oracle ADF Framework.
It also uses the Oracle WebCenter Portal
Framework to enable collaboration, application customization and user customization features."/>
<af:spacer id="sp3" height="20"/>
<af:outputText id="output2" value="Build : 11.1.1"
inlineStyle="font-weight:bold;"/>
</af:panelGroupLayout>
</jsp:root>

注意:

実行時、アドオン・パネルは、このフラグメントのコンテンツに合うように自動的にサイズ設定されます。

3. custom-panel-task-flowというタスク・フロー定義を作成します。

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

b. 「新規ギャラリ」ダイアログで、「Web層」を展開し、「JSF」、「ADFタスク・フロー」の順に選択します。

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

4. タスク・フロー定義に作成したcustompanelview.jsffフラグメントをドロップします。

関連項目:

詳細は、『Oracle Fusion Middleware Oracle Application Development FrameworkによるFusion Webアプリケーションの開発』のADFタスク・フローの概説に関する項を参照してください。

5. タスク・フロー定義ファイルを保存します。

(オプション)1つのアプリケーションでタスク・フローを作成し、これを別のアプリケーションで使用する場合、まずADFライブラリでこのタスク・フローをパッケージ化し、使用するアプリケーションに結果として得られるJARを追加する必要があります。

ADFライブラリでタスク・フローをパッケージ化するには:

1. タスク・フローのデプロイメント・プロファイルを作成します。

a. 「ポータル」プロジェクトを右クリックし、「新規」を選択します。

b. 「新規ギャラリ」で、「一般」を開き、「デプロイメント・プロファイル」、「ADFライブラリのJARファイル」の順に選択して「OK」をクリックします。

c. 「デプロイメント・プロファイルの作成 -- ADFライブラリJARファイル」ダイアログで、デプロイメント・プロファイルの名前を入力して「OK」をクリックします。

d. 「ADFライブラリJARデプロイメント・プロファイルのプロパティ」ダイアログで「OK」をクリックします。

e. 「プロジェクト・プロパティ」ダイアログで、「OK」をクリックします。

2. アプリケーション・ナビゲータで、プロジェクト・フォルダを右クリックして、「デプロイ」、デプロイメント・プロファイル名の順に選択します。

3. 「デプロイ」ダイアログで、「ADFライブラリのJARファイルへのデプロイ」を選択します。

4. 「終了」をクリックします。
こうすることによって、JARファイルを含むdeployフォルダが<Application_Root>\Portal\deploy\にあるプロジェクト・フォルダに作成されます。

アドオンを使用する任意のアプリケーションにこのJARファイルを追加できます。

26.2.1.2 コンポーザへのアドオンの登録

タスク・フローを作成したら、コンポーザに登録して、デフォルトのオプションとともにコンポーザ・ツールバーに表示されるようにする必要があります。

コンポーザにアドオンを登録するには:

1. コンポーザ拡張ファイルがまだ存在していない場合は、このファイル(pe_ext.xml)をプロジェクトのWebコンテキスト・ルート(たとえば、APPLICATION_HOME\Portal\src\META-INFディレクトリ)の下のMETA-INFディレクトリに作成します。

a. 「file」メニューから、「新」を選択します。

b. 「新規ギャラリ」ダイアログで、「一般」を展開し、「XML」、「XML文書」の順に選択します。

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

ファイルの名前をpe_ext.xmlにします。

2. ファイルの<addon-config>要素をネストされた<panels>要素とともに追加します。

3. アドオンとして登録する各タスク・フローに1つの<panel>要素を追加します。
拡張ファイルの<panels>要素には、パネルを必要な数だけ宣言できます。

次の例は、<panel>エントリを備えた拡張ファイルのコードを示しています。

<?xml version="1.0" encoding="US-ASCII" ?>
<pe-extension xmlns="http://xmlns.oracle.com/adf/pageeditor/extension">
<addon-config>
<panels>
<panel name="oracle.custom.panel" title="About"
icon="http://myforums.oracle.com/jive3/images/question-pts-available-16x16.gif"
taskflow-id="/WEB-INF/custom-panel-task-flow.xml#custom-panel-task-flow" />
</panels>
</addon-config>
</pe-extension>

addon-configおよび他のネストされた要素の詳細は、「pe_ext.xml」を参照してください。

4. (オプション)次の例に示すようにevent-handlers要素をpanel要素内に追加して、カスタム・パネルにイベント・ハンドラを登録します。

<event-handlers>
<event-handler event="close">
oracle.custom.TaskFlowEventHandler
</event-handler>
</event-handlers>

詳細は、「コンポーザUIイベントのイベント・ハンドラの構成」を参照してください。

5. pe_ext.xmlファイルを保存します。

26.2.1.3 アドオンのadf-config.xmlへの登録

アドオンを登録するには、これへの参照をアプリケーションのadf-config.xmlファイルに追加する必要があります。addon-panelsエントリを追加して新しいアドオンを定義します。

アドオンをadf-config.xmlファイルに登録するには:

1. アプリケーションのadf-config.xmlファイルを開きます。これは、「アプリケーション・リソース」パネルの「ディスクリプタ」の下のADF META-INFフォルダにあります。

2. ファイルで次のネームスペースをadf-config要素内に追加します。

xmlns:pe="http://xmlns.oracle.com/adf/pageeditor/config"

3. ネームスペースを付けて<pe:page-editor-config>エントリを追加し、その中に<pe:addon-panels>を含めます。

カスタム・アドインを登録するとき、デフォルトのアドオンはデフォルトでコンポーザに表示されます。デフォルトのアドオンをすべて表示するには、<pe:addon-panels>タグのshow-default-addons属性をtrueに設定する必要があります。この属性のデフォルト値はfalseです。

<pe:addon-panels>内で、次の例に示すように、新しいパネル用の<pe:addon-panel>エントリを追加します。

name属性には、コンポーザ拡張ファイルでパネルの登録に使用した名前が含まれている必要があります。

<pe:page-editor-config xmlns="http://xmlns.oracle.com/adf/pageeditor/config">
<pe:addon-panels show-default-addons="true">

<pe:addon-panel name="oracle.custom.panel" />

</pe:addon-panels>
</pe:page-editor-config>

注意:

<addon-panels>の下で<addon-panel>エントリをまったく指定しない場合、デフォルトのオプションのみがコンポーザに表示されます。

4. adf-config.xmlファイルを保存します。

adf-config.xmlで設定できるコンポーザ固有の構成の詳細は、「adf-config.xml」を参照してください。

26.2.2 実行時の処理内容

コンポーザに登録するカスタム・アドインは、デフォルトのアドインとともにコンポーザ・ツールバーにレンダリングされます。

この例では、コンポーザのツールバーに「情報」アイコンがレンダリングされます(図26-4)。

図26-4 コンポーザのツールバーの「情報」アイコン

このアイコンをクリックすると、アプリケーションの情報タスク・フローが表示されます(図26-5)。

注意:

アドオン・パネルは、タスク・フロー内のコンテンツに合せて自動的にサイズ設定されます。

図26-5 アプリケーションの情報タスク・フロー

26.2.3 コンポーザのデフォルト・アドオンの除外方法

「ページ・プロパティ」、「ページのリセット」および「カスタマイズ・マネージャ」の各アイコンをコンポーザ・ツールバーに表示することも非表示することもできます。これらのアドオンのいずれかを非表示にするには、<pe:addon-panels>のshow-default-addons属性をtrueに設定し、非表示にするデフォルトのアドオンのエントリを追加し、そのアドオンのrendered属性をfalseに設定する必要があります。

次の例は、「ページ・プロパティ」アドオンを非表示にするコードを示しています。

<pe:addon-panels show-default-addons="true">
<!-- Hide the Reset Page add-on -->
<pe:addon-panel name="oracle.adf.pageeditor.addonpanels.page-reset" rendered="false"/>

. . .

</pe:addon-panels>

除外されたアドオン(「ページのリセット」)は、コンポーザ・ツールバーに表示されません。他のデフォルトのアドオンはデフォルトの順序でツールバーに表示されます。

26.2.4 カスタマイズ・マネージャのアドオンの表示方法

カスタマイズ・マネージャは、タスク・フロー、ページおよび指定したページのページ・フラグメントのアプリケーションのカスタマイズをユーザーが管理できるコンポーザのアドオンです。詳細は、「アプリケーションのカスタマイズの管理」を参照してください。

カスタマイズ・マネージャのアドオンは、コンポーザのライブラリで使用できますが、デフォルトではレンダリングされません。これを有効にするには、次の例に示すように、<pe:page-editor-config>内部の<pe:addon-panel>要素を使用してアプリケーションのadf-config.xmlファイルでこれを構成します。

<pe:page-editor-config xmlns="http://xmlns.oracle.com/adf/pageeditor/config">
<pe:addon-panels show-default-addons="true">
<pe:addon-panel name="oracle.adf.pageeditor.addonpanels.customization-manager"/>

. . .

</pe:addon-panels>
. . .
</pe:page-editor-config>

この構成を行うと、図26-6に示すように、コンポーザ・ツールバーに「カスタマイズ・マネージャ」アイコンが表示されます。

図26-6「カスタマイズ・マネージャ」アイコン

26.2.5 アドオンを選択的に表示する方法

ビジネス要件に応じて、様々なユーザーがコンポーザで使用できるアドオンを選択的に非表示にすることが必要になる場合があります。アドオンを選択的に非表示にするには、次の例に示すように、<pe:addon-panels>のshow-default-addons属性をtrueに設定し、非表示にするデフォルトのアドオンのエントリを追加し、EL式を使用してそのアドオンのrendered属性をfalseにする必要があります。

<pe:page-editor-config xmlns="http://xmlns.oracle.com/adf/pageeditor/config">
<pe:addon-panels show-default-addons="true">
<pe:addon-panel name="oracle.adf.pageeditor.addonpanels.page-reset"
rendered="#{securityBean.userInPageResetRole}" />
. . .
</pe:addon-panels>
. . .
</pe:page-editor-config>

この例では、securityBeanバッキングBeanは、ログイン・ユーザーのロールに応じてtrueまたはfalseのいずれかを返します。返された値がfalseの場合、コンポーザはコンポーザ・ツールバーに「ページのリセット」アイコンを表示しません。trueの値が返された場合、コンポーザは「ページのリセット」アイコンを表示します。

注意:

コンポーザのツールバーで「ページのリセット」アイコンを非表示にすると、タスク・フローのコンテンツの編集中に表示される「タスク・フローのリセット」アイコンも非表示になります。

renderedのデフォルト値はtrueです。つまり、アドオンにrendered属性を指定しないと、そのアドオンは常に表示されます。

26.3 カスタム・プロパティ・パネルの作成

ユーザーがコンポーネントの「編集」アイコンをクリックすると、コンポーザは「コンポーネント・プロパティ」ダイアログにコンポーネントのプロパティを表示します。「コンポーネント・プロパティ」ダイアログには、一連のタブが用意されています。各タブは、関係する属性のグループを表示します。属性には、コンポーネントの動作および視覚的スタイルのプロパティを制御する関連値があります。たとえば、「スタイル」タブは、幅、高さ、背景色などのコンポーネントのスタイル関係のプロパティを表示します。

同様に、ユーザーが「ページ・プロパティ」アイコンをクリックすると、「ページ・プロパティ」ダイアログが独自の一連のタブとともに開きます。これらのタブには、表示関連のページ・プロパティ、ページ・パラメータおよびセキュリティ設定が含まれています。

「コンポーネント・プロパティ」ダイアログまたは「ページ・プロパティ」ダイアログに表示されるタブとともにレンダリングするカスタム・プロパティ・パネルを作成して登録できます。また、デフォルトのパネルの削除やカスタム・プロパティ・パネルへの置換も行えます。たとえば、Sourceプロパティのピッカーを表示することによってImageコンポーネントのよりフレンドリなプロパティ・パネルを開発できます。こうすることによって、ユーザーは使用可能なオプションからイメージを容易に選択できるようになります。

この項では、カスタム・プロパティ・パネルの作成方法を説明します。デフォルトのプロパティ・パネルを除外、オーバーライドおよび選択的にレンダリングする方法も説明します。次のサブセクションが含まれます:

- カスタム・プロパティ・パネルの作成および登録の方法

- 実行時の処理内容

- デフォルトのプロパティ・パネルのオーバーライド方法

- デフォルトのプロパティ・パネルの除外方法

- プロパティ・パネルの選択的レンダリング方法

- カスタム・プロパティ・パネルでのプロパティおよびパラメータの表示方法

26.3.1 カスタム・プロパティ・パネルの作成および登録の方法

カスタム・プロパティ・パネルの作成は、アドオンの作成と似ています。つまり、カスタム・プロパティ・パネルをタスク・フローとして作成して、コンポーザ拡張ファイルで登録するということです。ただし、コンポーザのアドオンはadf-config.xmlファイルのaddon-panels要素を使用して構成されますが、カスタム・プロパティ・パネルは拡張ファイル自体のproperty-panels要素を使用して構成されます。

カスタム・プロパティ・パネルを構成して、常に「コンポーネント・プロパティ」ダイアログに表示できます。または、パネルを構成して、特定のコンポーネントまたはタスク・フローが編集のために選択されたときのみ表示することも可能です。

この項では、カスタム・プロパティ・パネルを作成および登録する方法を説明します。次のサブセクションが含まれます:

- カスタム・プロパティ・パネルの作成

- コンポーネントに対するカスタム・プロパティ・パネルの登録

- タスク・フローに対するカスタム・プロパティ・パネルの登録

26.3.1.1 カスタム・プロパティ・パネルの作成

プロパティ・パネルには、ページまたはコンポーネントのプロパティを編集する方法が用意されています。たとえば、ユーザーは、選択したタスク・フローで「編集」アイコンをクリックし、そのパラメータ値を変更し、「コンポーネント・プロパティ」ダイアログでその視覚的属性を変更できます。

コンポーザを使用すると、プロパティ・パネルをコンポーネントおよびタスク・フローと関連付けることができます。ユーザーがコンポーネントまたはタスク・フローの「編集」アイコンをクリックすると、コンポーザは「コンポーネント・プロパティ」ダイアログを開き、オブジェクトと関連付けたカスタム・プロパティ・パネルをデフォルトのプロパティ・パネルとともに表示します。

カスタム・プロパティ・パネルを作成して、コンポーザ拡張ファイルで宣言する手順は、コンポーザのアドオンを作成して宣言する手順と似ています。詳細は、「アドオン・タスク・フローの作成」および「コンポーザへのアドオンの登録」を参照してください。

次の例は、pe_ext.xmlファイルでのサンプル・プロパティ・パネルの宣言を示しています。

<pe-extension xmlns="http://xmlns.oracle.com/adf/pageeditor/extension">
<addon-config>
<panels>
<panel name="sample-panel" title="Sample Panel"
taskflow-id="/WEB-INF/sample_task_flow.xml#sample_task_flow"/>
</panels>
</addon-config>
</pe-extension>

カスタム・パネルを作成して、pe_ext.xmlファイルで宣言した後で、次の例に示すように、<property-panels>要素を使用して構成する必要があります。こうすることによって、パネルは、コンポーザの「コンポーネント・プロパティ」ダイアログと「ページ・プロパティ」ダイアログに自動的に表示されます。

<addon-config>
<panels>
. . .
</panels>
<property-panels>
<property-panel name="samplepanel">
<panel name="sample-panel" rendered="true"/>
</property-panel>
</property-panels>
</addon-config>

1つの<panel>要素を使用して、各カスタム・パネルを登録します。<panel>は、「コンポーネント・プロパティ」ダイアログのタブに対応します。任意の数の<panel>要素を追加できます。

26.3.1.2 コンポーネントに対するカスタム・プロパティ・パネルの登録

拡張ファイルにカスタム・パネルを登録するとき、パネルをコンポーネントまたはタスク・フローと関連付けることができます。カスタム・プロパティ・パネルはそのコンポーネントまたはタスク・フローに対してのみレンダリングされます。この項では、特定のコンポーネントに対してプロパティ・パネルを登録する方法を説明します。

コンポーネントに対してプロパティ・パネルを登録するには:

1. コンポーザ拡張ファイル(pe_ext.xml)を作成します(このファイルがまだ存在していない場合)。

拡張ファイルの作成の詳細は、「コンポーザへのアドオンの登録」を参照してください。

2. pe_ext.xmlファイルの<addon-config>セクション内に<property-panels>要素を追加します。

3. <property-panel>宣言を<property-panels>要素内に追加します。

<property-panel>エントリは複数指定できます。

4. <property-panel要素内で、<component要素を追加してコンポーネントの実行時クラス名(オプション)および<panel要素を指定し、ファイルの<addon-configセクションのパネルを宣言する際に使用した名前を指定します。

次の例は、コンポーネントの完全修飾クラス名を指定することでCommand Buttonコンポーネントに関連付けられたカスタム・プロパティ・パネルを示しています。Oracle ADFコンポーネントとその実行時クラスの詳細は、『Oracle Fusion Middleware Oracle Application Development FrameworkによるFusion Webアプリケーションの開発』のビジネス・サービスの構築に関する項を参照してください。

<pe-extension xmlns="http://xmlns.oracle.com/adf/pageeditor/extension">
<addon-config>
<property-panels>
<property-panel name="cmdbtn">
<component>oracle.adf.view.rich.component.rich.nav.RichCommandButton</component>
<panel name="prop.panel.cmdbtn" />
<panel name="prop.panel.generic" />
</property-panel>
</property-panels>
</addon-config>
. . .
</pe-extension>

注意:

プロパティ・パネルを登録するとき、これをコンポーネントまたはタスク・フローと関連付けない場合(次の項で説明)、登録したパネルは常に「コンポーネント・プロパティ」ダイアログおよび「ページ・プロパティ」ダイアログにレンダリングされます。

コンポーネントに複数のプロパティ・パネルを構成するには、複数の<panel>要素を<property-panel>要素内に含めることができます。<property-panels>要素およびそのネストされた要素の詳細は、「コンポーザのデフォルト・アドオンとプロパティ・パネル」を参照してください。

「子コンポーネント」、「スタイル」、「パラメータ」などのすべてのデフォルトのパネルは、定義したカスタム・パネルとともに表示されます。

26.3.1.3 タスク・フローに対するカスタム・プロパティ・パネルの登録

タスク・フローのカスタム・プロパティ・パネルは、コンポーザ拡張ファイルに登録することで定義できます。次の例は、タスク・フローへのカスタム・プロパティ・パネルの登録に使用されるサンプル・コードを示しています。

特定のタスク・フローに対して登録されたカスタム・プロパティ・パネルは、これが関連付けられたタスク・フローが選択された場合のみ表示されます。それ以外の場合には、デフォルトのプロパティ・パネルが表示されます。

注意:

タスク・フロー固有のカスタム・プロパティ・パネルは、タスク・フロー・パラメータまたはタスク・フローの動作と関係のあるその他の側面をカスタマイズする際にのみ使用します。

カスタム・プロパティ・パネルは、Oracle JSF Portlet Bridgeを使用してレンダリングされたタスク・フローに関連付けられている場合には動作しません。

タスク・フローに対してプロパティ・パネルを登録するには:

1. pe_ext.xmlファイルの<addon-config>要素内に<property-panels>要素を追加します。

拡張ファイルの作成の詳細は、「コンポーザへのアドオンの登録」を参照してください。

2. この中にproperty-panel宣言を追加します。

property-panelエントリは複数指定できます。

3. taskflow-id要素およびpanel要素をproperty-panel要素内に追加します。

taskflow-id要素を追加してタスク・フロー名を指定します。panel要素を追加して、ファイルのaddon-configセクションでプロパティ・パネルを宣言する際に使用した名前を指定します。

次の例は、dashboardタスク・フローと関連付けられたカスタム・プロパティ・パネルを示しています。

<pe-extension xmlns="http://xmlns.oracle.com/adf/pageeditor/extension">
<addon-config>
<property-panels>
<property-panel name="dashboard">
<taskflow-id>/WEB-INF/dashboard-taskflow#prop-panel</taskflow-id>
<panel name="dashboard.prop-panel" />
</property-panel>
</property-panels>
</addon-config>
. . .
</pe-extension>

注意:

- (<component>または<taskflow-id>タグを使用して)カスタム・プロパティ・パネルをコンポーネントまたはタスク・フローと関連付けない場合、登録したパネルは、「コンポーネント・プロパティ」ダイアログおよび「ページ・プロパティ」ダイアログのすべてのページ、タスク・フローおよびコンポーネントにレンダリングされます。
property-panel要素内には、複数のpanel要素を登録できます。property-panels要素およびそのネストされた要素の詳細は、「コンポーザのデフォルト・アドオンとプロパティ・パネル」を参照してください。

- パネルのタスク・フロー・フラグメントでカスタム・プロパティ・パネルに関する属性およびパラメータをエンド・ユーザーが編集できるようにするには、表示する各プロパティのShow Propertyコンポーネントを追加する必要があります。Show Propertyコンポーネントの値属性は、プロパティおよびパラメータの値の読取りおよび書込みを行うロジックを含むマネージドBeanと関連付けられます。詳細は、「カスタム・プロパティ・パネルでのプロパティおよびパラメータの表示方法」を参照してください。

26.3.2 実行時の処理内容

カスタム・プロパティ・パネルを特定のコンポーネントまたはタスク・フローと関連付けた場合、実行時このパネルは、指定したコンポーネントまたはタスク・フローから起動した「コンポーネント・プロパティ」ダイアログでタブとしてレンダリングされます。カスタム・プロパティ・パネルを特定のコンポーネントまたはタスク・フローと関連付けなかった場合、実行時このカスタム・プロパティ・パネルは、すべてのページ、コンポーネントおよびタスク・フローに対して「ページ・プロパティ」ダイアログと「コンポーネント・プロパティ」ダイアログの両方でタブとしてレンダリングされます。

注意:

「コンポーネント・プロパティ」ダイアログおよび「ページ・プロパティ」ダイアログで、カスタム・パネルは、タスク・フローを含むタブ・コンポーネントによってサイズ設定されます。タブ・コンポーネント自体のサイズは、現在適用されているスキンのルールによって決まります。このルールはaf|panelTabbed.Tabをコールされます。

26.3.3 デフォルトのプロパティ・パネルのオーバーライド方法

コンポーザの「コンポーネント・プロパティ」ダイアログは、デフォルトで次のパネルを表示します: 「表示オプション」、「子コンポーネント」、「イベント」、「スタイル」、「コンテンツ・スタイル」および「パラメータ」。pe_ext.xmlファイルでカスタム・パネルを宣言および登録するときにデフォルトのパネルの名前を使用して特定のパネルをオーバーライドできます。デフォルトのパネルの詳細は、「コンポーザのデフォルト・アドオンとプロパティ・パネル」を参照してください。

次の例は、「表示オプション」パネルをcustom-panel-task-flowというタスク・フローを使用して定義したパネルで上書きするコードを示しています。

グローバル・パネルは、同じ名前(oracle.adf.pageeditor.prop-panel.global-panes)でカスタム・パネルを登録することでオーバーライドできます。ただし、グローバル・パネル名でカスタム・パネルを登録すると、デフォルトの3つのタブが「コンポーネント・プロパティ」ダイアログにレンダリングされなくなります。デフォルトのタブがカスタムのタブとともにレンダリングされるようにするには、デフォルトのタブを明示的に追加しなおすことが必要です。

次の例は、カスタム・パネルでグローバル・プロパティ・パネルをオーバーライドしながら、「表示オプション」タブも表示されるようにする方法を示しています。

<property-panels>
<property-panel name="oracle.adf.pageeditor.prop-panel.global-panes">
<panel name="oracle.adf.pageeditor.pane.generic-property-inspector"
rendered="true"/>
<panel name="custom-resource-editor"
rendered="true"/>
</property-panel>
</property-panels>

<addon-config>
<panels>
<panel name="oracle.adf.pageeditor.pane.generic-property-inspector" title="Sample Panel"
icon="http://myforums.oracle.com/jive3/images/question-pts-available-16x16.gif"
taskflow-id="/WEB-INF/custom-panel-task-flow.xml#custom-panel-task-flow" />
</panels>
<property-panels>
<property-panel name="samplepanel">
<panel name="oracle.adf.pageeditor.pane.generic-property-inspector" rendered="true"/>
</property-panel>
</property-panels>
</addon-config>

26.3.4 デフォルトのプロパティ・パネルの除外方法

即時利用可能な、すべてのデフォルトのプロパティ・パネルは、構成したカスタム・プロパティ・パネルとともに表示されます。「ページ・プロパティ」ダイアログまたは「コンポーネント・プロパティ」ダイアログでデフォルトのプロパティ・パネルを非表示にするために、そのパネル専用の行を追加し、rendered属性をfalseに設定できます。

次の例は、Command Buttonコンポーネントの「コンテンツ・スタイル」プロパティ・タブがfalseに設定されたrendered属性を示しています。デフォルトのプロパティ・パネルの詳細は、「コンポーザのデフォルト・アドオンとプロパティ・パネル」を参照してください。

<pe-extension xmlns="http://xmlns.oracle.com/adf/pageeditor/extension">
<addon-config>
<property-panels>
<property-panel name="cmdbtn">
<component>oracle.rich.CommandButton</component>
<panel name="prop.panel.cmdbtn" />
<panel name="oracle.adf.pageeditor.pane.content-style-editor" rendered="false" />
</property-panel>
</property-panels>
</addon-config>
. . .
</pe-extension>

26.3.5 プロパティ・パネルの選択的レンダリング方法

アプリケーションに登録されたカスタム・プロパティ・パネルは、指定したコンポーネントの「編集」アイコンをユーザーがクリックすると、「コンポーネント・プロパティ」ダイアログにレンダリングされます。アプリケーションを構成して、ログイン・ユーザーのロール、表示中のページなどの異なる条件に基づいてプロパティ・パネルを選択的にレンダリングできます。プロパティ・パネルを選択的に表示するために、次の例に示すように、property-panelのrendered属性のEL値を使用できます。

<property-panel name="global-but-just" rendered="#{bean.showProperty}">

26.3.6 カスタム・プロパティ・パネルでのプロパティおよびパラメータの表示方法

コンポーネントのカスタム・プロパティ・パネルを構築する場合、コンポーザ・タグ・ライブラリから使用可能なShow Propertyコンポーネントを使用して、カスタム・パネルにコンポーネントの属性を表示できます。カスタム・パネル・タスク・フローを定義するページ・フラグメントで、表示する各属性に対して1つのShow Propertyコンポーネントを追加する必要があります。Show Propertyは、(カスタム・パネルを作成した)コンポーネントまたはタスク・フローのプロパティ値を読み取る宣言型コンポーネントで、カスタム・パネルにそのプロパティの入力フィールドを表示します。ユーザーは、入力フィールドを使用してパネルのプロパティ値を編集できます。

カスタム・パネルの詳細は、「カスタム・プロパティ・パネルの作成」を参照してください。

Show Propertyコンポーネントを追加するには:

1. カスタム・パネル・タスク・フロー用に作成したページ・フラグメントを開きます。

2. 「コンポーネント・パレット」で、「コンポーザ」を選択します。

3. カスタム・パネルに表示するコンポーネント属性それぞれのShow Propertyコンポーネントをドラッグ・アンド・ドロップします。

4. カスタム・パネルに属性が正しく表示されるようにするには、「Show Property」を参照して、各Show Propertyコンポーネントに属性を設定します。

注意:

コンポーザの外側のページでもShow Propertyコンポーネントを使用できます。

26.3.6.1 「コンポーネント・プロパティ」を表示するカスタム・パネルの例

Show Detail Frameコンポーネント内に含まれている天気ウィジェットの例を考えてみます。カスタム・プロパティ・パネルが作成され、ユーザーは、天気ウィジェットのText、Auto RefreshおよびRefresh Intervalの各属性を編集できます。これには、ユーザーがこれらの属性に値を指定するための3つのフィールドがあります。ユーザーが天気ウィジェットの3つの属性を設定できるようにするために、パネルで表示する各属性に1つのShow Propertyコンポーネントが追加されます。実行時にユーザーが天気ウィジェットを編集すると、「コンポーネント・プロパティ」ダイアログは、図26-7に示すように3つの属性を含むカスタム・パネルを表示します。

図26-7 Show Detail Frameコンポーネント・プロパティを表示するカスタム・パネル

天気ウィジェットは、次の例に示すようにPollコンポーネントとともにページで使用されます。

<cust:showDetailFrame text="Weather" id="sdf1" contentStyle="height:220.0px;"
partialTriggers="p1">
<af:region value="#{bindings.weathertaskflowdefinition1.regionModel}"
id="r1"/>
<af:poll id="p1" interval="60000"/>
</cust:showDetailFrame>

Pollコンポーネントは、リフレッシュされたコンテンツを天気ウィジェットに一定間隔で送信するために使用されます。デフォルトの間隔は60000ミリ秒です。

カスタム・パネルには、3つのpanelLabelandMessageコンポーネントが含まれ、Text、Auto RefreshおよびRefresh Intervalの各属性の入力フィールドが用意されています。このパネルのフィールドは次のように実装されます。

- showPropertyコンポーネントは、次の例に示すように各panelLabelandMessageコンポーネントに追加されます。

<!-- Input field for setting the Text attribute, which displays on the component header -->
<af:panelLabelAndMessage label="Text" id="plam2">
<pedc:showProperty label="Text" id="sp1" simple="true"
value="#{sdfCustomPanel.text}"/>
</af:panelLabelAndMessage>

<!-- Checkbox to enable auto refresh, which controls whether the widget must be refreshed -->
<af:panelLabelAndMessage label="Auto Refresh" id="plam3">
<pedc:showProperty label="Auto Refresh" id="sp2" simple="true"
type="boolean" autoSubmit="true"
value="#{sdfCustomPanel.autoRefresh}"/>
</af:panelLabelAndMessage>

<!-- LOV to display values for Refresh Interval when auto refresh is enabled -->
<af:panelLabelAndMessage label="Refresh Interval" id="plam4">
<pedc:showProperty label="Refresh Interval" id="sp3" simple="true"
type="list" disabled="#{!sdfCustomPanel.autoRefresh}"
value="#{sdfCustomPanel.refreshInterval}"
selectItems="#{sdfCustomPanel.selectItems}"
binding="#{sdfCustomPanelRequestBean.refreshIntervalShowProp}"/>
</af:panelLabelAndMessage>

ここで、sdfCustomPanelは、マネージドBeanであるSDFCustomPanelBean.javaを参照します。

- カスタム・パネルのタスク・フロー定義には、Beanへの参照が含まれています。

<managed-bean id="mb1">
<managed-bean-name id="mb1_name">sdfCustomPanel</managed-bean-name>
<managed-bean-class id="mb1_class">portal.weather.panel.SDFCustomPanelBean</managed-bean-class>
<managed-bean-scope id="mb1scope">session</managed-bean-scope>
</managed-bean>

- SDFCustomPanelBean.java Beanには、パネルに表示される様々な属性の値を処理するロジックが用意されています。Beanでは、SelectionContext APIは、次のように各属性の値を読み書きするために使用されます。

- 選択したコンポーネント、つまりプロパティが表示されるコンポーネントを保持します。この例では、Show Detail Frameコンポーネントが天気ウィジェットとしてその内部に含まれます。

- 選択したコンポーネントの属性値を読み取ります。

- ユーザーが指定した属性値を取得し、その値をコンポーネント属性に設定します。

たとえば、Refresh Interval属性は、Auto Refreshが選択された場合のみ有効で、マネージドBeanで定義された値を含むドロップダウン・メニューを表示します。ページのPollコンポーネントは、Show Propertyコンポーネントにワイヤリングされ、ウィジェットのリフレッシュがShow Propertyコンポーネントの値によって行われるようになります。Refresh Intervalプロパティの値を処理するコードは次のとおりです。

. . .
/** Set the refresh interval attribute value on the component
public void setRefreshInterval(String _refreshInterval)
{
this._refreshInterval = _refreshInterval;
}
**/

public String getRefreshInterval()
{
if (_autoRefresh == true && _refreshInterval != null)
return _refreshInterval;

// Get hold of the component whose properties you want to edit
SelectionContext selCtx =
Context.getCurrentInstance().getSelectionContext();
UIComponent selComp = selCtx.getSelectedComponent().getUIComponent();
if (selComp instanceof ShowDetailFrame)
{
// Get the refresh interval value specified for the Poll component
RichPoll pollComp = (RichPoll) selComp.findComponent("p1");
if (_autoRefresh == false)
_refreshInterval = "Refresh interval not applicable";
else if (pollComp.getInterval() < 0)
_refreshInterval = "60000";
else
_refreshInterval = Integer.toString(pollComp.getInterval());
}

return _refreshInterval;
}
. . .
public List<SelectItem> getSelectItems()
{
return _selectItems;
}
. . .
private static List<SelectItem> _selectItems;
static
{
_selectItems = new ArrayList<SelectItem>();
SelectItem si = new SelectItem("60000", "1 Minutes");
_selectItems.add(si);
si = new SelectItem("120000", "2 Minutes");
_selectItems.add(si);
si = new SelectItem("180000", "3 Minutes");
_selectItems.add(si);
}

- ユーザーがRefresh Intervalプロパティの値を選択し、「コンポーネント・プロパティ」ダイアログで「適用」をクリックすると、保存リスナーがコールされ、保存イベント・ハンドラによって値がBeanに戻されて保存されます。保存イベント・ハンドラの実装の関連コードは次のとおりです。

public void save()
{
. . .
if (_autoRefresh)
{
aa = new AttributeComponentChange("interval", Integer.parseInt(_refreshInterval));
changeManager.addComponentChange(context, pollComp, aa);
aa.changeComponent(pollComp);
}
else
{
aa = new AttributeComponentChange("interval", new Integer(-1));
changeManager.addComponentChange(context, pollComp, aa);
aa.changeComponent(pollComp);
}
}

26.4 式ビルダーの拡張

「コンポーネント・プロパティ」ダイアログの「パラメータ」タブおよび「表示オプション」タブのすべてのプロパティは、式言語(EL)式を取ることができます。このようなパラメータで使用できる「式ビルダー」オプションは、図26-8に示すように単純に式ビルダーである「編集」ダイアログを開きます。式ビルダーは、取得可能だが取得できない場合には未知である値が必要な場合(たとえば、値を現在のユーザーまたは現在のアプリケーション・スキンの名前にする場合)に特に便利です。

図26-8 式言語エディタ

式ビルダーをカスタマイズして、コンポーザ拡張ファイルpe_ext.xmlに必要なエントリを作成することでオプションを増やすことができます。また、コンポーザは、ELを無効化するように構成することも、既存のELが上書きされないように構成することもできます。

この項では、式ビルダーを拡張してカスタム機能を追加する方法を説明します。次のサブセクションが含まれます:

- 式ビルダーの拡張方法

- 式言語を保護する方法

- 実行時の処理内容

26.4.1 式ビルダーの拡張方法

カスタム・オプションを式の値のドロップダウン・リストに追加することによって、式ビルダーを拡張できます。カスタム・オプションを定義し、pe_ext.xmlファイルに含める必要があります。追加する新しい各オプションに対して、<selector>要素を定義し、これをpe_ext.xmlファイルに含める必要があります。

コンポーザ拡張ファイルでカスタム・オプションを構成するには:

1. 式ダイアログにカスタム・オプションを移入するロジックを備えたJava Bean(たとえば、UserInformation.java)を作成します。次の例は、新しい文字列(User Name)を式ダイアログのカスタム値として表示するために使用するJava Beanのサンプル・コードを示しています。

package view;

import java.util.ArrayList;
import java.util.List;

import oracle.adf.view.page.editor.elbuilder.ELParameter;
import oracle.adf.view.page.editor.elbuilder.ELParameterValue;

public class UserInformation implements ELParameter {
public String getName() {
return mName;
}

public List<ELParameterValue> getValues() {
if (mValues == null)
{
mValues = new ArrayList<ELParameterValue>();
for(String[] args : mValueList)
{
mValues.add(new ELParameterValue(args[0], args[1]));
}
}
return mValues;
}
private static String[][] mValueList =    {new String[]{"User Name", "#{securityContext.userName}"}};

private String mName = "User Name";
private List<ELParameterValue> mValues;  }

2. <elbuilder-config>要素をpe_ext.xmlファイルに追加してBeanを登録します。

拡張ファイルの作成の詳細は、「コンポーザへのアドオンの登録」を参照してください。

3. <selector>要素を<elbuilder-config>セクション内に追加し、次の例に示すように作成したBeanの詳細を提供します。

<elbuilder-config>
<!-- define selector -->
<selector id="UserInformation">
view.UserInformation
</selector>

<!-- include selector -->
<selectors>
<selector id="UserInformation" rendered="true"/>
</selectors>
</elbuilder-config>

複数の<selector>エントリを異なるカスタム・オプションに含めることができます。

カスタム・オプションは、デフォルトではすべての属性に対して表示されます。<selector>のrendered属性を使用して、特定の条件に基づいてオプションを条件付きで表示できます。

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

26.4.2 式言語を保護する方法

コンポーザは、アプリケーションまたは特定の.jspxページでELを無効化するように構成することも、既存のELを上書きから保護するように構成することもできます。これは、「「デザイン」ビューまたは「コンテンツの追加」ビューでの直接選択の有効化」で説明しているように、エンド・ユーザーに要素を公開する際に特に役立ちます。

アプリケーションの設定を定義するには、<pe:page-editor-config>タグ内のadf-config.xmlの次の要素を変更します。

- <pe:allow-el>は、コンポーネント・プロパティに対してELの入力が可能かどうかを定義します。デフォルトはtrueです。ELがすでにプロパティに対して定義されている場合、これを変更することはできません。

- <pe:protect-el>は、フォーム要素のELが読取り専用であるかどうかを定義します。デフォルトは、falseです。ELがすでに定義されていて、コンポーネントが別のレベルで編集されている場合は、ELを変更することはできません。

特定の.jspxページの動作を定義するには、<pe:pageCustomizable>タグ内の次の要素を使用します。

- allowEL (boolean)は、ELがアプリケーション・ページで実行できるかどうかを定義します。デフォルトはtrueです。ELがすでにプロパティに対して定義されている場合、これを変更することはできません。

- protectEL (boolean)は、フォーム要素のELが読取り専用であるかどうかを定義します。デフォルトは、falseです。ELがすでに定義されていて、コンポーネントが別のレベルで編集されている場合は、ELを変更することはできません。

.jspxページで定義された設定は、adf-config.xmlで定義された設定より優先されます。

26.4.3 実行時の処理内容

実行時の式ビルダーのセレクタは、カスタム値をデフォルト値とともに表示します。

ELが無効な場合、式ビルダーにはアクセスできず、ELはプロパティ・フィールドで許可されません。

ELが保護される場合、属性値としてすでに存在するELは、「パラメータ」タブおよび「表示オプション」タブのいずれかで変更することはできません。(LOVから取得されたELが許可されます。)

26.5 タスク・フローのパラメータのカスタムLOVまたはピッカーの構成

通常、コンポーザでタスク・フローのパラメータを編集中に、ユーザーは「コンポーネント・プロパティ」ダイアログにあるテキスト・ボックスに値を入力します。しかし、ユーザーが特定のフィールドに指定する値について混乱することが多いです。これを推測のままにしておくのではなく、各パラメータが取ることができる値がわかっている開発者は、可能な場合には有効なすべてのオプションをリストすることによってユーザーが容易に操作できるようにすることができます。コンポーザを構成して、値のリスト(LOV)またはピッカーを任意のパラメータに対して表示できます。

次のオプションを使用して事前定義された一連のパラメータ値を表示できます。

- 静的LOV
事前定義された値のリストを表示します。

- 動的LOV
ページが実行されているときに計算されるEL値を評価して生成される値のリストを表示します。

- グローバルLOV
アプリケーションの任意のタスク・フローで使用できる値のグローバル・リストを表示します。

- ピッカー
ピッカー・フォーマット(たとえば、ドキュメント・ピッカー)ですべての値を表示します。

この項では、様々なタイプのLOVをタスク・フローのパラメータ用に構成する方法を説明します。次のサブセクションが含まれます:

- LOVの構成方法

- 実行時の処理内容

単純な天気タスク・フローの例

この項の手順の一部は、図26-9に示すように、選択した都市の天気の情報を表示する単純な天気タスク・フロー(weather-task-flow-definition)の例を使用します。

図26-9 天気タスク・フロー

このタスク・フローには、選択した都市の天気の詳細を選択した温度単位(華氏または摂氏)で表示するようにそれぞれをユーザーが変更できる2つのパラメータ(zipCodeとtempUnits)が用意されています。この天気タスク・フローの例は、次のタイプのLOVを構成する方法を説明するために使用します。

- 図26-10に示すような、tempUnitsパラメータの値CelsiusおよびFahrenheitを持つ静的LOV。

図26-10 tempUnitsパラメータの静的LOV

- 都市名または郵便番号をユーザーが指定して対応する詳細を天気タスク・フローに表示できる2つのフィールドを持つピッカー(図26-11)。

図26-11 zipCodeパラメータの都市ピッカー

- または、実行時に評価されるEL値に基づいて値を表示するzipCodeパラメータの動的LOV(図26-12)。

図26-12 zipCodeパラメータの動的LOV

天気タスク・フローには、次の例に示すコードを備えたタスク・フロー定義ファイル(weather-task-flow-definition.xml)が含まれています。

<?xml version="1.0" encoding="US-ASCII" ?>
<adfc-config xmlns="http://xmlns.oracle.com/adf/controller" version="1.2">
<task-flow-definition id="weather-task-flow-definition">
<default-activity id="defaultactivity1">weather</default-activity>
<input-parameter-definition id="inputparam1">
<name id="inputparam1name">zipcode</name>
<value>#{pageFlowScope.zipcode}</value>
<class>java.lang.String</class>
<required/>
</input-parameter-definition>
<input-parameter-definition id="inputparam2">
<name id="ip2name">tempUnits</name>
<value>#{pageFlowScope.tempUnits}</value>
<class>java.lang.String</class>
</input-parameter-definition>
<view id="weather">
<page>/weather.jsff</page>
</view>
<use-page-fragments/>
</task-flow-definition>
</adfc-config>

太字で表示したパラメータは、実行時にユーザーが指定した値がセッションBean (pageFlowScope)に格納され、ここからその値を別のコンポーネントが読み取ることができるような方法で定義されます。

実行時にタスク・フローを編集すると、「パラメータ」タブは、パラメータ値を入力するための2つの入力テキスト・フィールドを表示します。次の項では、これらのタスク・フローのパラメータのLOVを有効にして、ユーザーが事前定義されたオプションのリストから選択できるようにする方法を説明します。

26.5.1 LOVの構成方法

この項では、様々なタイプのLOVをタスク・フローのパラメータ用に構成する方法を説明します。次のサブセクションが含まれます:

- 静的LOVの構成

- 動的LOVの構成

- ピッカーの構成

- グローバル・リストからのLOVの構成

26.5.1.1 静的LOVの構成

静的LOVを使用して、パラメータに対して事前定義された値のリストを表示します。静的LOVは、コンポーザ拡張ファイル(pe_ext.xml)でネストされた<enumeration>要素を備えた<lov-config>セクションを定義することで構成できます。この項では、天気タスク・フローの例を使用して、tempUnitsパラメータの静的LOVを構成する方法を説明します。

静的LOVを構成するには:

1. コンポーザ拡張ファイルのpe_ext.xmlが存在していない場合は、このファイルをプロジェクトのWebコンテキスト・ルート(たとえば、APPLICATION_HOME\Portal\adfmsrc\META-INFディレクトリ)の下のMETA-INFディレクトリに作成します。

a. 「file」メニューから、「新」を選択します。

b. 「新規ギャラリ」ダイアログで、「一般」を展開し、「XML」、「XML文書」の順に選択します。

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

ファイルの名前をpe_ext.xmlにします。

2. 次のコード例に示すように、<lov-config>セクションを追加し、ネストされた<enumeration>要素を備えたタスク・フロー定義を含みます。

<lov-config>
<!-- Entry for the task flow in which you are configuring the LOV -->
<task-flow-definition taskflow-id="/WEB-INF/weather-task-flow-definition.xml#weather-task-flow-definition">

<!-- Specifying the parameter for which you want to define a static LOV -->
<input-parameter-definition>
<name>tempUnits</name>
<!-- List of values to be displayed for the parameter -->
<enumeration inline="true">
<item>
<name>Celcius</name>
<value>c</value>
<description>Temperature in Celcius</description>
</item>
<item>
<name>Fahrenheit</name>
<value>f</value>
<description>Temperature in Fahrenheit</description>
</item>
</enumeration>
</input-parameter-definition>

</task-flow-definition>
</lov-config>

<lov-config>セクション内に任意の数の静的LOVを構成できます。

注意:

パラメータ名として翻訳可能な文字列を指定できるようにするために、名前にEL値を使用できます(たとえば、#{resourceBundle.temp_units})。

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

26.5.1.2 動的LOVの構成

動的LOVを使用して、実行時にEL値を評価して動的に生成されるリストを表示します。この項では、天気タスク・フローの例を使用して、zipCodeパラメータの動的LOVを構成する方法を説明します。例を簡潔にしておくために、マネージドBeanは、実行時にZipcodeフィールドに表示される静的値のみを提供します。

動的LOVを構成するには:

1. Bean(たとえば、weatherBean)を作成し、Zipcodeパラメータの値のリストを定義します。次の例に関連するコード・スニペットを示します。

package portal.weather;

. . .

public List<SelectItem> getCitiesList() {
return citiesList;
}

private static final String F = "&deg;F";
private static final String C = "&deg;C";
private static final String [][] selectItems = {{"Redwood City", "94065"},
{"Novi, MI", "48375"},
{"Los Angeles", "90001"},
{"New York", "10036"}};

private static final List<SelectItem> citiesList = new ArrayList<SelectItem>();
static {
for (String[] city : selectItems){
citiesList.add(new SelectItem(city[1], city[0]));
}
}

2. 次の例に示すように、アプリケーションのfaces-config.xmlファイルにweatherBeanを登録します。

<managed-bean>
<managed-bean-name>weatherBean</managed-bean-name>
<managed-bean-class>portal.weather.WeatherBean</managed-bean-class>
<managed-bean-scope>request</managed-bean-scope>
</managed-bean>

3. コンポーザ拡張ファイルのpe_ext.xmlが存在していない場合は、このファイルをプロジェクトのWebコンテキスト・ルート(たとえば、APPLICATION_HOME\Portal\adfmsrc\META-INFディレクトリ)の下のMETA-INFディレクトリに作成します。

a. 「file」メニューから、「新」を選択します。

b. 「新規ギャラリ」ダイアログで、「一般」を展開し、「XML」、「XML文書」の順に選択します。

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

ファイルの名前をpe_ext.xmlにします。

4. 次の例に示すように、<lov-config>セクションを追加し、<enumeration>要素を備えたタスク・フロー定義を含め、パラメータ値のマネージドBeanを参照します。

<lov-config>
<task-flow-definition taskflow-id="/WEB-INF/weather-task-flow-definition.xml#weather-task-flow-definition">
<input-parameter-definition>
<name>zipcode</name>
<value>90001</value>
<enumeration items="#{weatherBean.citiesList}"/>
<input-parameter-definition>
</task-flow-definition>
</lov-config>

<lov-config>セクション内に任意の数の動的LOVを構成できます。

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

26.5.1.3 ピッカーの構成

通常、ピッカーを使用すると、ユーザーは、使用可能なすべてのオプション(色ピッカー、日付ピッカーなど)を表示するポップアップ・ダイアログから値を選択できます。タスク・フローのパラメータのピッカーを構成することには、次の高水準のタスクが含まれます。

- 選択したUIを使用してピッカー・タスク・フローを作成します。

- ピッカー・タスク・フローのパラメータを定義します。これらのパラメータを使用して、メイン・タスク・フローのパラメータ(ピッカーを構成するためのパラメータ)を移入します。

- メイン・タスク・フローのパラメータを構成して、作成したピッカーを表示します。この構成をpe_ext.xmlファイルに追加する必要があります。

この項では、例として天気タスク・フローを使用して、これらの手順を詳細に説明します。zipCodeパラメータの都市ピッカーを構成する方法を示します。ピッカー・タスク・フローでは、ユーザーは、都市名を指定し、その場所の郵便番号を取得できます。ピッカーからの郵便番号は、天気タスク・フローのZipcodeフィールドに入力されます。この項には次のサブセクションが含まれます:

- ピッカー・タスク・フローの作成

- タスク・フローのパラメータに対するピッカーの登録

26.5.1.3.1 ピッカー・タスク・フローの作成

JSFFフラグメントを使用してピッカー・タスク・フローを作成します。フラグメントを設計して、選択したフィールドまたはオプションを表示します。

ピッカー・タスク・フローを作成するには:

1. アプリケーション・プロジェクトで、ADFタスク・フロー(たとえば、weather-picker-task-flow-definition)を作成します。

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

b. 「新規ギャラリ」ダイアログで、「Web層」を展開し、「JSF」、「ADFタスク・フロー」の順に選択します。

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

2. ビュー・オブジェクトをタスク・フローに追加します(たとえば、weatherPicker)。

3. ビューをダブルクリックしてweatherPicker.jsffフラグメントを作成します。

関連項目:

タスク・フローの作成の詳細は、『Oracle Fusion Middleware Oracle Application Development FrameworkによるFusion Webアプリケーションの開発』の「ADFタスク・フローの概説」の章を参照してください。

4. 選択したコンポーネントを使用してフラグメントを設計します。次の例は、XMLファイルでユーザーが郵便番号を検索できる2つのInput Textコンポーネントと、OKとCancelの2つのUIコントロールを含むサンプルのタスク・フローを示しています。

<?xml version='1.0' encoding='UTF-8'?>
<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" version="2.1"
xmlns:af="http://xmlns.oracle.com/adf/faces/rich"
xmlns:f="http://java.sun.com/jsf/core">
<af:panelStretchLayout id="psl1">
<f:facet name="center">
<af:panelGroupLayout id="pgl1" layout="vertical">

<af:panelGroupLayout id="pgl2" layout="horizontal">
<!-- Text field and Search button to search for a city by specifying the ZIP code -->
<af:inputText label="Enter Zip Code" id="it1"
value="#{pageFlowScope.weatherPicker.searchZipcode}"/>
<af:commandButton text="Search By Zipcode" id="cb1"
actionListener="#{pageFlowScope.weatherPicker.zipcodeSearch}"/>
</af:panelGroupLayout>

<af:panelGroupLayout id="pgl3" layout="horizontal">
<!-- Text field and Search button to search for a city by specifying the city name -->
<af:inputText label="Enter City" id="it2"                        value="#{pageFlowScope.weatherPicker.searchCity}"/>
<af:commandButton text="Search By City" id="cb2"
actionListener="#{pageFlowScope.weatherPicker.citySearch}"/>
</af:panelGroupLayout>

<!-- Output components to display the result from the search -->
<af:outputFormatted value="#{pageFlowScope.weatherPicker.city}"
id="of2"/>
<af:outputFormatted value="#{pageFlowScope.weatherPicker.zipcode}"
id="of3"/>

</af:panelGroupLayout>
</f:facet>
<f:facet name="bottom">
<af:panelGroupLayout layout="horizontal" halign="end" id="pkrPgl">

<!-- OK button -->
<af:commandButton action="ok"
actionListener="#{pageFlowScope.weatherPicker.populateReturnValue}"
text="#{Bundle.OK_BUTTON_TEXT}" id="okBtn"/>
<af:spacer width="5" id="s1"/>

<!-- Cancel button -->
<af:commandButton actionListener="#{pageFlowScope.weatherPicker.closePickerPopup}"
text="#{Bundle.CANCEL_BUTTON_TEXT}"
id="cnclBtn"/>
</af:panelGroupLayout>
</f:facet>
</af:panelStretchLayout>
</jsp:root>

「OK」ボタンと「Cancel」ボタンのアクション・リスナーは、マネージドBeanのweatherPickerを参照します。このBeanには、メイン・タスク・フローのパラメータにピッカーで指定した値を移入するロジックも含まれています。

5. ピッカー・タスク・フロー定義で参照したBeanを作成し、メイン・タスク・フローに値を返すロジックを追加します。
次の例は、名前によって都市を検索し、郵便番号を返すロジックを含むweatherPicker Beanの関連コード・スニペットを示しています。

package portal.weather.picker;

. . .

public void populateReturnValue(ActionEvent ae) {
Map map = (Map)RequestContext.getCurrentInstance().getPageFlowScope().get("outParam");
if (map != null)
map.put("outParamVal", _zipcode);
}

public void closePickerPopup(ActionEvent ae) {
UIComponent component = ae.getComponent();
while (!(component instanceof RichPopup))
component = component.getParent();
if (component != null)
((RichPopup)component).cancel();
}
. . .

6. 次の例に示すように、weatherPicker Beanをタスク・フロー定義ファイルに登録します。

<managed-bean id="pickerbean">
<managed-bean-name id="pickerbeanname">weatherPicker</managed-bean-name>
<managed-bean-class id="pickerbeanclass">portal.weather.picker.WeatherPicker</managed-bean-class>
<managed-bean-scope id="pickerbeanscope">pageFlow</managed-bean-scope>
</managed-bean>

7. 次の例に示すように、ピッカー・タスク・フローの2つの入力パラメータinParamValとoutParamを定義します。

<!-- Parameter used to store the value that must be passed to the main task flow -->
<input-parameter-definition id="pickerip1">
<name id="pickerip1name">outParam</name>
<value>#{pageFlowScope.outParam}</value>
<class>java.util.Map</class>
</input-parameter-definition>

<!-- Parameter used to store the value specified by the user in the picker -->
<input-parameter-definition id="pickerip2">
<name id="pickerip2name">inParamVal</name>
<value>#{pageFlowScope.inParamVal}</value>
<class>java.lang.String</class>
</input-parameter-definition>

これらのパラメータは、pageFlowScopeで参照され、メイン・タスク・フローのパラメータzipCodeを読み取り、移入するために使用されます。「郵便番号」フィールドの隣のピッカー・アイコンをユーザーがクリックすると、inParamValを使用して、フィールドの現在の値がセッションBeanに渡されます。ユーザーがピッカー・タスク・フローで都市名を指定して「OK」をクリックすると、Beanはその都市の郵便番号を取得し、outParamを使用してメインの天気タスク・フローに渡します。

8. タスク・フローの戻りアクティビティおよび「OK」ボタンと「取消」ボタンに対する制御フロー・ルールを定義します。これらのアクティビティおよびルールによって、いずれかのボタンがクリックされると制御はタスク・フローに返されます。次の例に示すようにタスク・フローの戻りアクティビティおよび制御フロー・ルールを定義できます。

<!-- The outcome to be returned to the task flow if a user clicks OK -->
<task-flow-return id="ok">
<outcome id="ok1">
<name id="okayed">ok</name>
</outcome>
</task-flow-return>
<!-- The outcome to be returned to the task flow if a user clicks Cancel -->
<task-flow-return id="cancel">
<outcome id="cancel1">
<name id="canceled">cancel</name>
</outcome>
</task-flow-return>

<!-- Rules to pass control flow to the ok activity if the user clicks OK and to the cancel activity if the user clicks Cancel -->
<control-flow-rule id="flowrule1">
<from-activity-id id="fromactivity1">weatherPicker</from-activity-id>
<control-flow-case id="flowcase1">
<from-outcome id="fromoutcome1">ok</from-outcome>
<to-activity-id id="toactivity1">ok</to-activity-id>
</control-flow-case>
<control-flow-case id="flowcase2">
<from-outcome id="fromoutcome2">cancel</from-outcome>
<to-activity-id id="toactivity2">cancel</to-activity-id>
</control-flow-case>
</control-flow-rule>

タスク・フロー定義は、次の例のようなコードを備えます。

<?xml version="1.0" encoding="US-ASCII" ?>
<adfc-config xmlns="http://xmlns.oracle.com/adf/controller" version="1.2">
<task-flow-definition id="weather-picker-task-flow-definition">
<default-activity id="pickeractivity1">weatherPicker</default-activity>
<input-parameter-definition id="pickerip1">
<name id="pickerip1name">outParam</name>
<value>#{pageFlowScope.outParam}</value>
<class>java.util.Map</class>
</input-parameter-definition>
<input-parameter-definition id="pickerip2">
<name id="pickerip2name">inParamVal</name>
<value>#{pageFlowScope.inParamVal}</value>
<class>java.lang.String</class>
</input-parameter-definition>
<managed-bean id="pickerbean">
<managed-bean-name id="pickerbeanname">weatherPicker</managed-bean-name>
<managed-bean-class id="pickerbeanclass">portal.weather.picker.WeatherPicker</managed-bean-class>
<managed-bean-scope id="pickerbeanscope">pageFlow</managed-bean-scope>
</managed-bean>
<view id="weatherPicker">
<page>/weatherPicker.jsff</page>
</view>
<task-flow-return id="ok">
<outcome id="ok1">
<name id="okayed">ok</name>
</outcome>
</task-flow-return>
<task-flow-return id="cancel">
<outcome id="cancel1">
<name id="canceled">cancel</name>
</outcome>
</task-flow-return>
<control-flow-rule id="flowrule1">
<from-activity-id id="fromactivity1">weatherPicker</from-activity-id>
<control-flow-case id="flowcase1">
<from-outcome id="fromoutcome1">ok</from-outcome>
<to-activity-id id="toactivity1">ok</to-activity-id>
</control-flow-case>
<control-flow-case id="flowcase2">
<from-outcome id="fromoutcome2">cancel</from-outcome>
<to-activity-id id="toactivity2">cancel</to-activity-id>
</control-flow-case>
</control-flow-rule>
<use-page-fragments/>
</task-flow-definition>
</adfc-config>

9. タスク・フロー定義ファイルを保存します。

26.5.1.3.2 タスク・フローのパラメータに対するピッカーの登録

タスク・フローのパラメータのカスタム・ピッカーを表示するには、そのパラメータのピッカーをコンポーザ拡張ファイルpe_ext.xmlで構成する必要があります。

タスク・フローのパラメータに対してピッカーを構成するには:

1. コンポーザ拡張ファイルのpe_ext.xmlが存在していない場合は、このファイルをプロジェクトのWebコンテキスト・ルート(たとえば、APPLICATION_HOME\Portal\adfmsrc\META-INFディレクトリ)の下のMETA-INFディレクトリに作成します。

a. 「file」メニューから、「新」を選択します。

b. 「新規ギャラリ」ダイアログで、「一般」を展開し、「XML」、「XML文書」の順に選択します。

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

ファイルの名前をpe_ext.xmlにします。

2. 次のコード例に示すように、<lov-config>セクションを追加し、ピッカー・タスク・フローを参照する<enumeration>要素を備えたタスク・フロー定義を含みます。

<?xml version="1.0" encoding="UTF-8"?>
<pe-extension xmlns="http://xmlns.oracle.com/adf/pageeditor/extension">
<lov-config>
<task-flow-definition taskflow-id="/WEB-INF/weather-task-flow-definition.xml#weather-task-flow-definition">
<!-- Parameter for which you defined the picker -->
<input-parameter-definition>
<name>zipCode</name>
<value>null</value>
<!-- enumeration items coming from the picker task flow -->
<enumeration picker="/WEB-INF/weather-picker-task-flow-definition.xml#weather-picker-task-flow-definition"/>
</input-parameter-definition>
</task-flow-definition>
</lov-config>
</pe-extension>

<lov-config>セクション内に任意の数のパラメータのピッカーを構成できます。

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

実行時にメイン・タスク・フローを編集すると、「コンポーネント・プロパティ」ダイアログにはそのパラメータの隣に拡大アイコンが表示されます。アイコンをクリックすると、ユーザーが値を選択できるピッカー・タスク・フローが起動します。

26.5.1.4 グローバル・リストからのLOVの構成

アプリケーション内の別のタスク・フローのパラメータにLOVを再使用する場合、LOVをグローバル・レベルで定義し、タスク・フローのパラメータからこれを参照できます。

グローバル・リストからLOVを構成するには:

1. コンポーザ拡張ファイルのpe_ext.xmlが存在していない場合は、このファイルをプロジェクトのWebコンテキスト・ルート(たとえば、APPLICATION_HOME\Portal\adfmsrc\META-INFディレクトリ)の下のMETA-INFディレクトリに作成します。

a. 「file」メニューから、「新」を選択します。

b. 「新規ギャラリ」ダイアログで、「一般」を展開し、「XML」、「XML文書」の順に選択します。

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

ファイルの名前をpe_ext.xmlにします。

2. 次のコード例に示すように、<lov-config>セクションを追加し、(タスク・フロー定義の外側で)<enumeration>要素内の値をリストします。

<lov-config>
<!-- Global enumerations ->
<enumeration id="temperature">
<item>
<name>Celcius</name>
<value>c</value>
<description>Temperature in Celcius</description>
</item>
<item>
<name>Fahrenheit</name>
<value>f</value>
<description>Temperature in Fahrenheit</description>
</item>
</enumeration>
<task-flow-definition . . . >
. . .
<lov-config>

<lov-config>セクション内に任意の数のグローバルLOVを構成できます。

3. 次の例に示すように、pe_ext.xmlファイルの任意の入力パラメータ定義からこのグローバルLOVを参照します。

<task-flow-definition taskflow-id="/WEB-INF/weather-task-flow-definition.xml#weather-task-flow-definition">
<input-parameter-definition>
<name>tempUnits</name>
<value>Celsius</value>
<enumeration ref="temperature"/>
</input-parameter-definition>
</task-flow-definition>

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

26.5.2 実行時の処理内容

タスク・フローのパラメータに対して構成したLOVのタイプに応じて、パラメータ値を指定するための異なるオプションがユーザーに表示されます。

温度の単位フィールドには、pe_ext.xmlファイルで定義した静的LOVから値がリストされます。

「郵便番号」フィールドのピッカーを構成した場合、このフィールドの右側に拡大アイコンが表示されます。このアイコンは、ユーザーが名前または郵便番号を指定することによって都市を選択できるピッカーを起動します。

26.6 コンポーザUIイベントのイベント・ハンドラの構成

イベント・ハンドラは、コンポーザに登録され、ユーザーがページでアクションを実行するとコールされるJavaクラスです。たとえば、「保存」ボタンをクリックすると、コンポーザはアプリケーションに保存イベントに応答する機会を与えるためにアプリケーション・コードにコール・バックします。コンポーザがデフォルトで提供するイベント・ハンドラに加えて、カスタム・プロパティ・パネルの変更を保存するなど、アプリケーション固有のイベントに対して追加のハンドラを構成できます。

この項では、コンポーザのUIイベント用にイベント・ハンドラを作成して登録する方法について説明します。次のサブセクションが含まれます:

- コンポーザUIイベントのハンドラの作成および登録の方法

- イベント・ハンドラを作成および登録する際の処理

- その他のコンポーザのイベント・ハンドラの構成

26.6.1 コンポーザUIイベントのハンドラの作成および登録の方法

コンポーザにイベント・ハンドラを登録すると、そのハンドラは対応するイベントがコンポーザUIで起動されるときにコールされます。

この項では、イベント・ハンドラを作成して、そのハンドラをコンポーザに登録する方法を説明します。次のサブセクションが含まれます:

- イベント・ハンドラの登録をサポートするUIイベント

- 保存イベント・ハンドラの作成: 例

- コンポーザへのイベント・ハンドラの登録

26.6.1.1 イベント・ハンドラの登録をサポートするUIイベント

表26-1に、現在コンポーザがハンドラの登録をサポートしているUIイベントをリストします。

表26-1 ハンドラの登録がサポートされているイベント

イベント

原因

イベント・タイプ

リスナー・インタフェース(oracle.adf.view.page.editor.event)

メソッド

イベント・インタフェース

保存

ユーザーがコンポーザ・ツールバーの「保存」ボタンまたは「保存してラベル付け」ボタンをクリックするか、「コンポーネント・プロパティ」ダイアログまたは「ページ・プロパティ」ダイアログの「適用」(保存)ボタンまたは「OK」(保存して閉じる)ボタンをクリックすると起動します。

save

SaveListener

processSave

SaveEvent

閉じる

ユーザーがコンポーザ・ツールバーで「閉じる」ボタンをクリックすると起動します。

close

CloseListener

processClose

CloseEvent

削除

ユーザーがコンポーネントを削除すると起動します。

delete

DeletionListener

processDeletion

DeletionEvent

getComponentを使用して削除されたコンポーネントを取得します。

追加

ユーザーがアイテムの「追加」ボタンをクリックして、リソース・カタログからページにコンポーネントを追加すると起動します。

add

AdditionListener

processAddition

AdditionEvent

選択

ユーザーが次の項目を選択すると起動します。

- 「デザイン」ビューまたは「コンテンツの追加」ビューのPanel CustomizableコンポーネントまたはShow Detail Frameコンポーネントの「編集」アイコン

- 「構造」ビューのページまたは階層に含まれるコンポーネント

select

SelectionListener

processSelection

SelectionEvent

属性の変更

ユーザーが属性を変更すると起動します。

属性変更が無効な場合、リスナーはAbortProcessingExceptionを呼び出して、警告メッセージの重大度を設定します。重大度が「致命的」または「エラー」(デフォルト)に設定される場合、ユーザーは「適用」または「OK」をクリックする前に、プロパティ・インスペクタで属性を修正するように強制されます。他の重大度のすべてが通知ポップアップに表示されますが、ユーザーはさらにアクションを行うことなく保存できます。

attribute-change

AttributeChangeListener

processAttributeChange

AttributeChangeEvent

getMessageSeverity and setMessageSeverityを使用して警告重大度を取得して設定します。

setMessageSummary and setMessageDetailを使用して警告のメッセージを定義します。リスナーがエラーなしに属性変更を確認する場合でもメッセージを表示するには、setMessageSummary("") setMessageSeverity(FacesMessage.SEVERITY_INFO); setShowMessage(true)を使用します。

26.6.1.2 保存イベント・ハンドラの作成: 例

コンポーザにイベントを登録するには、まず、Javaクラスを作成して、イベント・ハンドラに適切なリスナーを実装する必要があります。この項では、保存イベント・ハンドラを作成する手順を説明します。同様の手順を実行すると、表26-1にリストされている、すべてのサポート対象のイベントのイベント・ハンドラを作成できます。

保存イベント・ハンドラは、ユーザーがコンポーザのツールバーで「保存」ボタンをクリックするか、「コンポーネント・プロパティ」ダイアログまたは「ページ・プロパティ」ダイアログで「適用」ボタンまたは「OK」ボタンをクリックするとコールされます。保存イベント・ハンドラはoracle.adf.view.page.editor.event.SaveListenerを実装する必要があります。保存イベントのisCommitメソッドを使用して、ページに対して行われた変更とコンポーネント・プロパティに対して行われた変更を区別できます。値がtrueの場合、ユーザーがコンポーザのツールバーで「保存」ボタンをクリックし、ページに加えた変更を保存したことを示します。値がfalseの場合、ユーザーが「コンポーネント・プロパティ」ダイアログで「適用」ボタンまたは「OK」ボタンをクリックし、コンポーネント・プロパティに対して行われた変更を保存したことを示します。

保存イベント・ハンドラを作成するには:

1. JDeveloperで、Portalプロジェクトを選択し、「ファイル」メニューから「新規」を選択します。

2. 「新規ギャラリ」ダイアログで、「一般」を開き、「Java」、「Javaクラス」の順に選択して、「OK」をクリックします。

3. 「Javaクラスの作成」ダイアログで、クラスの名前(SaveHandlerなど)を指定します。

4. 「オプション属性」セクションで、oracle.adf.view.page.editor.event.SaveListenerインタフェースを追加します。

注意:

oracle.adf.view.page.editorクラスパスを表示できない場合は、プロジェクトのライブラリとクラスパスにコンポーザが含まれていることを確認してください。これを実行するには、アプリケーション・ナビゲータでプロジェクトを右クリックして「プロジェクト・プロパティ」を選択します。「プロジェクト・プロパティ」ダイアログで、「ライブラリとクラスパス」を選択し、「コンポーザ」をリストに追加します。

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

Javaクラスのソースは次のようになります。

package view;

import javax.faces.event.AbortProcessingException;

import oracle.adf.view.page.editor.event.SaveEvent;
import oracle.adf.view.page.editor.event.SaveListener;

public class SaveHandler implements SaveListener {
public Class1() {
super();
}
public void processSave(SaveEvent saveEvent) throws AbortProcessingException {
// Your implementation goes here
}
}

イベントを取り消す必要がある場合、メソッドはこの例外をスローすることがあるため、throws AbortProcessingExceptionとしてprocessSaveメソッドを宣言する必要があります。例外オブジェクト(作成時)にこのイベントを取り消すための理由を含めることができます。

この例外をスローするとき、このイベントの残りの処理は取り消され、キューに入っているリスナーはスキップされます。

これと同様の手順を実行することによって、サポートされているすべてのイベントのイベント・ハンドラを作成できます。

26.6.1.3 コンポーザへのイベント・ハンドラの登録

イベント・ハンドラを作成して実装したら、そのハンドラをコンポーザに登録する必要があります。登録は、対応するイベントがUIで発生したときに、コンポーザによってハンドラがコール・バックされるようにするために必要です。

コンポーザ拡張ファイル(/META-INF/pe_ext.xml)でイベント・ハンドラを登録します。このファイルの作成の詳細は、「コンポーザへのアドオンの登録」を参照してください。

イベント・ハンドラを登録するには:

1. アプリケーションのpe_ext.xmlファイルに、次のエントリを追加します。

<event-handlers>
<event-handler event="save">view.SaveHandler</event-handler>
</event-handlers>

event属性およびevent-handlerタグ間に提供する値は、入力したイベントのタイプおよびイベント・クラスに指定した名前に対して一意です。

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

26.6.2 イベント・ハンドラを作成および登録する際の処理

実行時、登録したイベント・ハンドラは、拡張ファイルの順序およびこれらがクラス・パスで見つかる順序に応じてコールされます。コンポーザのネイティブ・イベント・ハンドラは最後にコールされます。

イベント・ハンドラのprocessEventNameメソッドの起動時に、イベント・ハンドラがAbortProcessingExceptionをスローすると、イベントは取り消されて、コンポーザのネイティブ・イベント・ハンドラを含むイベント・ハンドラは、それ以上コールされなくなります。ただし、イベント・ハンドラのインスタンス化時にエラーが発生する場合は、コンポーザが次のイベント・ハンドラを続行します。警告メッセージがログに記録されます。

26.6.3 その他のコンポーザのイベント・ハンドラの構成

コンポーザのページでトリガーされた各UIイベントでは、対応するイベント・ハンドラはアプリケーションに登録されたリスナーからメソッドをコール・バックします。いくつかの追加の構成を実行することで、イベント・ハンドラが実行される順序を指定して、リスナーがプロセスを終了するように構成するか、イベントが処理されるようにコンポーザに通知できます。

26.6.3.1 イベント・ハンドラの順序番号の指定

イベント・ハンドラの順序を指定することによって、イベント・ハンドラ(したがってリスナー)がコールされる順序を決定できます。pe_ext.xmlファイルで登録されたイベント・ハンドラに対してsequence属性を定義することによって、リスナーへの順序番号の割当てまたはデフォルト値の変更を行えます。

リスナーに順序番号を指定するには:

1. アプリケーションのpe_ext.xmlファイルで、順序指定するハンドラのevent-handler要素を探します。

2. sequence属性を次のように追加します。

<event-handlers>
<event-handler event="save" sequence="101">view.SaveHandler</event-handler>
</event-handlers>

sequence属性の値は正の整数である必要があります。この属性を定義しないと、イベント・ハンドラは、デフォルトの順序番号100に内部的に割り当てられます。

コンポーザの組込みのリスナーおよび順序番号のないリスナーには、デフォルトの順序番号100が割り当てられます。特定のイベント・ハンドラを他のイベント・ハンドラより前にコールする場合、100未満の値を指定する必要があります。

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

26.6.3.2 イベント処理の終了

イベント・ハンドラを構成して、例外をスローすることによって現在のイベントおよびその後のすべてのイベントの処理を終了できます。このためには、リスナーをthrows AbortProcessingExceptionとして実装するときに使用したメソッドを宣言する必要があります。また、ハンドラを構成して、イベントがEvent.setEventHandled(true)メソッドを使用して処理されたことをコンポーザに通知できます。

たとえば、deleteイベント・ハンドラを構成して、ユーザーがコンポーザでコンポーネントを削除しようとしたときに、現在のイベントおよび保留中のすべての削除イベントを終了して例外をスローできます。これを有効にするには、次の例に示すように、DeletionListenerインタフェースを実装する必要があります。

public class DeleteHandler implements DeletionListener
{
...
public void processDeletion(DeletionEvent delEvent) throws  AbortProcessingException
{
// Get the component that must be deleted
UIComponent comp = delEvent.getComponent();

if (comp != null)
{
try
{
// Assuming that a custom method, handleDelete(comp), handles deletion of
// a component and returns true on successful deletion and false in case
// of failure
boolean deleteSucceeded = handleDelete(comp);

// If deletion failed, then notify Composer that the delete event
// has been handled. No further events are processed.
if (!deleteSucceeded)
delEvent.setEventHandled(true);
}

catch (Exception e)
{
// Catch Exception throw by handleDelete(comp) and handle it by throwing
// AbortProcessingException to stop processing of delete events.
throw new AbortProcessingException(e)
}
}
}
...
}

26.7 リソース・カタログのドロップ・ハンドラの構成

ドロップ・ハンドラは、コンポーザに登録され、ユーザーがリソース・カタログで「追加」リンクをクリックするとコールされるJavaクラスです。ドロップ・ハンドラは、処理できるデータ・フレーバを宣言します。カタログの各リソースにフレーバがあります。ユーザーがリソースの隣の「追加」リンクをクリックすると、コンポーザは登録されているすべてのドロップ・ハンドラを問い合せて、このフレーバを処理できるかどうか確認します。そのフレーバを処理できるドロップ・ハンドラが1つのみの場合、制御がそのドロップ・ハンドラに渡され、リソースがすぐにページに追加されます。そのフレーバを処理できるドロップ・ハンドラが複数ある場合、コンテキスト・メニューに使用可能なドロップ・ハンドラが表示されます。リソースは、ユーザーがコンテキスト・メニューからJavaドロップ・ハンドラを選択したときにページにドロップされます。

複数のJavaドロップ・ハンドラを持つリソースの例は、カタログでドキュメント・サービスを構成した場合のDocumentsフォルダ内で使用可能なPersonal Documentsサブフォルダです。このサブフォルダは、Content Presenter、Document List ViewerまたはDocument Libraryとして追加できます。

注意:

リリース11.1.1.1でAdd操作を処理するために使用されていたAdditionListenerメカニズムはまだ使用可能ですが、現在、コンポーザはまずドロップ・ハンドラをコールし、カタログでAdd操作を処理します。既存のAdditionListenerをドロップ・ハンドラに変換することをお薦めします。

この項では、ドロップ・ハンドラを作成し、これをアプリケーションに登録する手順を説明します。次のサブセクションが含まれます:

- ドロップ・ハンドラの作成および登録の方法

- 実行時の処理内容

26.7.1 ドロップ・ハンドラの作成および登録の方法

この項では、リソース・カタログからXMLコンテンツを追加するサンプルのドロップ・ハンドラを作成して、このドロップ・ハンドラをコンポーザに登録する方法を説明します。次のサブセクションが含まれます:

- ドロップ・ハンドラの作成

- コンポーザへのドロップ・ハンドラの登録

- XMLコンポーネントのリソース・カタログへの追加

26.7.1.1 ドロップ・ハンドラの作成

コンポーザを使用してドロップ・ハンドラを作成するには、まず抽象ベース・クラス(DropHandler)を拡張して、getName()、getAcceptableFlavors()およびhandleDrop()の各メソッドを実装する必要があります。この項では、TestというXMLコンポーネントをリソース・カタログに追加して、XMLコンテンツを追加するためのCustom XMLというドロップ・ハンドラを作成する例を説明します。

ドロップ・ハンドラを作成するには:

1. JDeveloperで、Portalプロジェクトを選択し、「ファイル」メニューから「新規」を選択します。

2. 「新規ギャラリ」ダイアログで、「一般」を開き、「Java」、「Javaクラス」の順に選択して、「OK」をクリックします。

3. 「Javaクラスの作成」ダイアログで、クラスの名前(TestDropHandlerなど)を指定します。

4. 「拡張」フィールドで、入力または参照してDrophandlerクラス(oracle.adf.view.page.editor.drophandler.DropHandler)を選択します。

注意:

oracle.adf.view.page.editorクラスパスを表示できない場合は、プロジェクトのライブラリとクラスパスにコンポーザが含まれていることを確認してください。これを実行するには、アプリケーション・ナビゲータでプロジェクトを右クリックして「プロジェクト・プロパティ」を選択します。「プロジェクト・プロパティ」ダイアログで、「ライブラリとクラスパス」を選択し、「コンポーザ」をリストに追加します。

5. 必要なインポート文を追加して「OK」をクリックします。

Javaクラスのソースは次のようになります。

package test;

import java.awt.datatransfer.DataFlavor;
import java.awt.datatransfer.Transferable;

import java.io.ByteArrayInputStream;

import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;

import oracle.adf.rc.component.XmlComponentFactory;
import oracle.adf.view.page.editor.drophandler.DropEvent;
import oracle.adf.view.page.editor.drophandler.DropHandler;

import org.apache.myfaces.trinidad.change.AddChildDocumentChange;
import org.apache.myfaces.trinidad.change.ChangeManager;
import org.apache.myfaces.trinidad.change.DocumentChange;
import org.apache.myfaces.trinidad.context.RequestContext;

import org.w3c.dom.Document;
import org.w3c.dom.DocumentFragment;

public class TestDropHandler extends DropHandler {
public TestDropHandler() {
super();
}

public String getName() {
return null;
}

public DataFlavor[] getAcceptableFlavors() {
return new DataFlavor[0];
}

public boolean handleDrop(DropEvent dropEvent) {
return false;
}
}

6. getName()メソッドを次のように実装し、ドロップ・ハンドラの名前を返します。

public class TestDrophandler extends DropHandler {
public TestDrophandler() {
super();
}

public String getName() {
return "Custom XML";
}
. . .

この値(Custom XML)は、リソース・カタログのXMLコンポーネントの隣の「追加」リンクのコンテキスト・メニューに表示されます。

7. getAcceptableFlavors()メソッドを次のように実装し、XMLコンポーネントでサポートされるデータ・フレーバのリストを取得します。

public class TestDropHandler extends DropHandler
{
private static final DataFlavor[] ACCEPTABLE_FLAVORS =
{ XmlComponentFactory.XML_STRING_FLAVOR };

. . .

public DataFlavor[] getAcceptableFlavors() {
return ACCEPTABLE_FLAVORS;
}
. . .

8. 次のサンプル・ファイルに示すようにhandleDrop(DropEvent)メソッドを実装し、ドロップ・ハンドラを処理し、XMLコンポーネントをページに追加します。

public class TestDropHandler extends DropHandler
{
. . .

public boolean handleDrop(DropEvent de) {
Transferable transferable = de.getTransferable();
UIComponent container = de.getContainer();
int index = de.getDropIndex();

try {
FacesContext context = FacesContext.getCurrentInstance();
RequestContext rctx = RequestContext.getCurrentInstance();

String fragMarkup = null;

// Get the TransferData from the Transferable (expecting a String)
Object data = getTransferData(transferable);
if (data instanceof String) {
fragMarkup = "<?xml version='1.0' encoding='UTF-8'?>" + (String)data;
} else {
return false;
}

// Get a DocumentBuilder
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setNamespaceAware(true);
factory.setValidating(false);
DocumentBuilder builder = factory.newDocumentBuilder();

// Parse the xml string into a Document object using DocumentBuilder
byte[] markupBytes = fragMarkup.getBytes();
Document newDoc =
builder.parse(new ByteArrayInputStream(markupBytes));

// Transform the Document into a DocumentFragment
DocumentFragment docFrag = newDoc.createDocumentFragment();
docFrag.appendChild(newDoc.getDocumentElement());

// Create an "add child" document change, that is, insert the fragment
DocumentChange change = null;
if (index < container.getChildCount()) {
// Get the ID of the component we'll be adding just before
String insertBeforeId = container.getChildren().get(index).getId();
change = new AddChildDocumentChange(insertBeforeId, docFrag);
} else {
change = new AddChildDocumentChange(docFrag);
}

// Apply the "add child" DocumentChange using ChangeManager
ChangeManager changeManager = rctx.getChangeManager();
changeManager.addDocumentChange(context, container, change);

// Refresh the target container using PPR
rctx.addPartialTarget(container);

// Mark the drop as completed.
return true;
} catch (Exception e) {
return false;
}
}

この例では、DropEventパラメータがhandleDropメソッドに渡されます。このパラメータには、次に説明する3つの属性があります。

- transferableは、DataFlavorと同様に、追加するデータを含む標準Javaクラスです。

- containerは、コンポーネントのドロップ先であるコンテナです。

- indexは、コンテナ内のコンポーネントの位置です。たとえば、1番目、2番目などです。

9. TestDropHandler.javaファイルを保存します。

26.7.1.2 コンポーザへのドロップ・ハンドラの登録

ドロップ・ハンドラを実装したら、このハンドラをコンポーザに登録する必要があります。登録は、ユーザーがカタログで「追加」リンクをクリックしたときに、ハンドラがコンポーザによってコールされるようにするために必要です。コンポーザ拡張ファイル(/META-INF/pe_ext.xml)でドロップ・ハンドラを登録します。このファイルの作成の詳細は、「コンポーザへのアドオンの登録」を参照してください。

ドロップ・ハンドラを登録するには:

1. pe_ext.xmlファイルで、次のエントリを追加します。

<drop-handlers>
<drop-handler>test.TestDropHandler</drop-handler>
</drop-handlers>

ここで、TestDropHandlerはドロップ・ハンドラの実装の名前です。

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

必要数の<drop-handler>要素を追加することによって、拡張ファイルに任意の数のドロップ・ハンドラを登録できます。

26.7.1.3 XMLコンポーネントのリソース・カタログへの追加

XmlComponentFactoryクラスによって生成されたXMLコンポーネントのドロップ・ハンドラは作成してあるため、XMLコンポーネントをリソース・カタログに追加してから、そのコンポーネントを実行時にページに追加すると、実行時にドロップ・ハンドラがどのように動作するかをテストできます。

XMLコンポーネントをカタログに追加するには:

1. デフォルトのカタログ定義ファイル(default-catalog.xml)を開きます。

2. 次のコードをファイルの<contents>セクション内に追加します。

<component id="pc" factoryClass="oracle.adf.rc.component.XmlComponentFactory">
<attributes>
<attribute attributeId="Title" value="Test"/>
<attribute attributeId="Description" value="XML content you can add to application pages"/>
<attribute attributeId="IconURI" value="/adf/pe/images/elementtext_qualifier.png"/>
</attributes>
<parameters>
<parameter id="xml">
<af:outputText value="Hello!" xmlns:af="http://xmlns.oracle.com/adf/faces/rich"/>
</parameter>
</parameters>
</component>

3. default-catalog.xmlファイルを保存します。

実行時に、リソース・カタログにはXMLコンポーネントが表示されます。詳細は、「リソース・カタログへのカスタム・コンポーネントの追加」を参照してください。

26.7.1.4 リソース・カタログへのカスタム・コンポーネントの追加

単一のADF Facesコンポーネント、2つ以上のコンポーネントを含む複合オブジェクト、内部に任意のHTMLコンテンツを追加できるJSF Verbatimタグなどのカスタム・コンポーネントを、リソース・カタログに追加できます。カタログに追加可能な任意のHTMLの例は、YouTubeビデオです。

カスタム・コンポーネントを追加するには:

1. アプリケーション・ナビゲータ内で、カスタム・コンポーネントを追加する対象のリソース・カタログを右クリックして、「開く」を選択します。

2. リソース・カタログの「デザイン」ビューで、左側の「カタログ」セクションから、カスタム・コンポーネントを追加する対象のリソース・カタログ内のノードを選択します。

3. 「新しいノードを追加します」アイコンをクリックして、「コンポーネント」を選択します。
component要素がカタログに追加されます。ページの右側には、新しいコンポーネントの属性とパラメータを定義するフィールドが表示されます。

4. 「ID」フィールドには自動的に生成されたIDが移入されます。このIDを保持することはできますが、より説明的なIDに変更することもできます。IDはリソース・カタログ内で一意であることが必要です。

5. 「コンポーネント・ファクトリ:*」フィールドに、oracle.adf.rc.component.XmlComponentFactory.など、oracle.adf.rc.component.ComponentFactoryインタフェースを実装し、一連のパラメータに基づいてコンポーネントのインスタンスを作成するJavaクラスの名前を入力します
名前を入力すると、クラスパスから有効なファクトリ・クラスがフィールドに自動的に入力されます。「参照」アイコンを使用しても、クラスを選択できます。

6. 「表示可能」フィールドで、実行時にリソース・カタログにコンポーネントを表示するかどうかを指定します。デフォルト値はEL式#{true}です。これはすべてのユーザーに対して常にコンポーネントを表示することを意味します。コンポーネントがすべてのユーザーに対して常に非表示になるようにするにはfalseまたは#{false}を入力します。あるいは、コンポーネントの表示条件を指定するEL式を入力します。フィールドが空の場合、値はデフォルトでtrueになります。オプションで、「コンポーネント属性」セクションにカスタム・コンポーネントの任意の表示オプションを指定します。

7. 「コンポーネント・パラメータ」セクションを使用して、ファクトリ・クラスを実装する際に定義されたパラメータを追加します。たとえば、XMLコンポーネントを追加する場合、「パラメータ」セクションで「追加」アイコンをクリックし、「xml」を選択します。表示される新しい行で、「値」フィールドにコンポーネントのXMLコードを指定します。
xmlオプションは、oracle.adf.rc.component.XmlComponentFactoryをコンポーネント・ファクトリとして選択している場合にのみ表示されます。

コンポーネントを正しく機能させるには、次の例のように、カスタム・コンポーネントIDが#になるように指定して、ネームスペースを指定する必要があります。

<cust:panelCustomizable id="#" xmlns:cust="http://xmlns.oracle.com/adf/faces/customizable"/>

#という値により、コンポーネントに対し、動的に一意のIDが生成されます。

8. カタログ定義ファイルを保存します。

26.7.2 実行時の処理内容

ユーザーがカタログのコンポーネントの「追加」リンクをクリックすると、そのフレーバをサポートしているすべてのドロップ・ハンドラが「追加」リンクのコンテキスト・メニューのオプションとして表示されます。ただし、そのフレーバを処理できるドロップ・ハンドラが1つのみの場合、リソースはすぐにページに追加されます。

図26-13に、Custom XMLオプションおよびデフォルトのXMLオプションを備えたTest XMLコンポーネントの「追加」リンクをクリックしたときに表示されるコンテキスト・メニューを示します。

図26-13 カタログのXMLコンポーネントのドロップ・ハンドラ

26.8 プロパティ・フィルタの定義

一部のコンポーネント・プロパティは、デフォルトでフィルタ処理によって除外されるため、コンポーザの「コンポーネント・プロパティ」ダイアログに表示されません。デフォルトのフィルタは、コンポーザの拡張ファイル(/META-INF/pe_ext.xml)の<filter-config>セクションで定義されています。

グローバル・フィルタは、すべてのコンポーネントの属性をフィルタ処理します。これらは<global-attribute-filter>タグを使用して定義されます。タグ・レベルのフィルタは、指定したコンポーネントの属性のみをフィルタ処理します。これらは<taglib-filter>タグを使用して定義されます。

注意:

拡張ファイルでは、任意の数の<taglib-filter>タグを<filter-config>の下に持つことができますが、すべてのグローバル属性フィルタを定義する<global-attribute-filter>タグは1つのみ持つことができます。

「コンポーネント・プロパティ」ダイアログでさらに多くのプロパティを非表示にするために追加のフィルタを定義できます。この項では方法について説明します。次のサブセクションが含まれます:

- プロパティ・フィルタの定義方法

- 実行時の処理内容

- プロパティ・フィルタの削除方法

26.8.1 プロパティ・フィルタの定義方法

コンポーザは、組込みフィルタ構成を定義します。拡張ファイル(pe_ext.xml)を使用して、追加のプロパティ・フィルタの定義およびフィルタの削除を実行できます。(1つのタグに対してでも)異なる拡張ファイルで任意の数のフィルタを定義できます。コンポーザは、すべての拡張ファイルからのフィルタ処理情報をマージします。

注意:

pe_ext.xmlファイルの作成の詳細は、「コンポーザへのアドオンの登録」を参照してください。

例外ファイルでプロパティ・フィルタを定義するには、filter-config要素を使用します。次の要素は、含まれているattributeタグに対して定義されます。

- label要素により、UIの要素に対するデフォルト・ラベルをオーバーライドできます。ELを使用してローカライズされた文字列を取得するか、またはデザイン・ビューまたはソース・ビューで異なるラベルを表示できます。

- view要素を特定のビュー(designまたはsource)の特定のタグの属性をフィルタするために使用できます。

- filtered要素は、グローバルにフィルタされる場合にも属性を表示するために使用できます。グローバルにフィルタされた要素をリストアするには、filtered="false"を使用します。

pe_ext.xmlファイルで、次の例に示すようにfilter-config要素を追加します。

<filter-config>
<global-attribute-filter>
<attribute name="readOnly" filtered="false" label="Read Only"/>
<attribute name="required" filtered="false" label="Mandatory"/>
<attribute name="shortDesc" filtered="false" label="#{Bundle.PNL_TB_SHORTDESC}"/>
</global-attribute-filter>

<taglib-filter namespace="http://xmlns.oracle.com/adf/faces/rich">
<tag name="goLink">
<attribute name="accessKey" view="design"/>
<attribute name="targetFrame" filtered="false" view="source"/>
<attribute name="destination" filtered="false" label="#{pageEditorPanelBean.layoutView ?  'Where do you want to surf?' : 'Destination'}"/>
</tag>
<tag name="inputText">
<attribute name="all" view="design"/>
<attribute name="label" label="Field Name" filtered="false" />
<attribute name="readOnly" filtered="false" />
<attribute name="required" filtered="false" />
<attribute name="rendered" filtered="false" />
<attribute name="wrap" filtered="false" />
</tag>
</taglib-filter>
</filter-config>

ファイルを保存します。

26.8.2 実行時の処理内容

実行時、コンポーザのプロパティを編集すると、フィルタ処理によって除外されたプロパティは「コンポーネント・プロパティ」ダイアログにレンダリングされません。

26.8.3 プロパティ・フィルタの削除方法

前にフィルタ処理されたプロパティが「コンポーネント・プロパティ」ダイアログにレンダリングされるように、グローバル・フィルタおよびタグレベル・フィルタを削除できます。これは、コンポーザの組込みフィルタやアプリケーションの別の場所で定義された別の拡張ファイルによってフィルタ処理されて除外されたプロパティを表示する際に便利です。

注意:

プロパティ・フィルタを削除した後、フィルタは、別の拡張ファイルでそのプロパティに対して定義されても「コンポーネント・プロパティ」ダイアログにレンダリングされます。

プロパティ・フィルタを削除するには:

1. META-INFディレクトリにあるコンポーザ拡張ファイル(pe_ext.xml)を編集します。

このファイルのエントリを編集してプロパティ・フィルタを削除できます。

2. フィルタの削除元の属性を検索し、次の例に示すように、<attribute>タグでfilteredをfalseに設定します。

<pe-extension xmlns="http://xmlns.oracle.com/adf/pageeditor/extension">
. . .
<filter-config>
<global-attribute-filter>
<attribute name="accessKey" filtered="false" />
<attribute name="attributeChangeListener" />
. . .
</global-attribute-filter>
<taglib-filter namespace="http://xmlns.oracle.com/adf/faces/rich">
<tag name="activeCommandToolbarButton">
. . .
<attribute name="windowWidth" filtered="false"/>
</tag>
</taglib-filter>
</filter-config>
</pe-extension>

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

26.9 カスタマイズ・マネージャ・タスク・フローのパラメータ・サポートの有効化

タスク・フローで受け渡すパラメータを有効にする場合、管理者は、特定のパラメータを設定することによってカスタマイズ・マネージャをカスタマイズできます。デフォルトでは、管理者は、コンポーザのカスタマイズ・マネージャ・タスク・フローにパラメータを渡すことはできません。表26-2では、カスタマイズ・マネージャ・タスク・フローでサポートされているパラメータについて説明しています。

表26-2 カスタマイズ・マネージャ・タスク・フローのパラメータ

パラメータ名

値

説明

defaultPage

ページのURI

管理するデフォルト・ページを指定するために使用します。この値がnullの場合、現在のページが使用されます。

dynamicNodeMap

Map<String,List<CustomizationManagerNode>>

ページ、XMLドキュメントまたは指定されたページあるいはフラグメントのタスク・フローのリストを次の形式を使用して返すために使用されます。

Page1.jspx -> List of {CustomizationManagerTaskFlowNode or CustomizationManagerPageNode or CustomizationManagerXMLNode}

そのページの動的タスク・フローを渡すためにはCustomizationManagerTaskFlowNodeを使用します。

そのページのページ・テンプレートを渡すためにはCustomizationManagerPageNodeを使用します。

このページが所有するXMLドキュメントを渡すためにはCustomizationManagerXMLNodeを使用します。

showBase

trueまたはfalse

デフォルト: false

ベース・ドキュメントの列を表示または非表示にするために使用します。

showCurrentLayers

trueまたはfalse

デフォルト: true

現在使用しているレイヤーの詳細を表示する列を表示または非表示にするために使用します。

showAllLayers

trueまたはfalse

デフォルト: true

現在のレイヤー以外のレイヤーの詳細を表示する列を表示または非表示にするために使用します。

showLayersforCurrent

Map<String,List<String>>

「現在のコンテキスト」列で使用可能である必要があるレイヤーのリストを指定するために使用します。

このパラメータは、レイヤー名およびレイヤー値のリストならびに「現在のコンテキスト」列に表示する必要があるパターンを取ります。詳細は、「カスタマイズ・マネージャ・タスク・フローのパラメータを設定する方法」を参照してください。

showLayersforAll

Map<String,List<String>>

「すべてのレイヤー」列で使用可能である必要があるレイヤーのリストを指定するために使用します。

このパラメータは、レイヤー名およびレイヤー値のリストならびに「すべてのレイヤー」列に表示する必要があるパターンを取ります。詳細は、「カスタマイズ・マネージャ・タスク・フローのパラメータを設定する方法」を参照してください。

labelPrefixes

List<String>

「プロモート」ダイアログに表示する必要がある、空白で区切られたラベルの接頭辞のリストを指定するために使用します。指定された接頭辞を使用して作成されたラベルのみが「プロモート」ダイアログに表示されます。

デフォルトでは、すべてのラベルが表示されます。

maxDepth

String

カスタマイズ・マネージャでのタスク・フローの階層の深さを制限するために使用します。

デフォルト値は10です。したがって、循環依存性を持つタスク・フローがある場合、このパラメータは、深さを10のネストされたタスク・フローに制限することによって、スタック・オーバーフローを防ぎます。

最大ネストの10タスク・フローを表示できます。カスタマイズ・マネージャは、10より大きい値を指定しても、深さ10しか表示しません。

showDownload

trueまたはfalse

デフォルト: true

「ダウンロード」リンクを表示または非表示にするために使用します。

showUpload

trueまたはfalse

デフォルト: true

「アップロード」リンクを表示または非表示にするために使用します。

showDelete

trueまたはfalse

デフォルト: true

「削除」リンクを表示または非表示にするために使用します。

showPromote

trueまたはfalse

デフォルト: true

「プロモート」リンクを表示または非表示にするために使用します。

注意:

MapおよびListの実装は、クラスタベースの環境で正しく動作するようにカスタマイズ・マネージャに対して連続化可能である必要があります。通常、ArrayListおよびHashMapは連続化可能です。

この項では、カスタマイズ・マネージャ・タスク・フローでパラメータの編集を可能にする手順を説明します。次のサブセクションが含まれます:

- カスタマイズ・マネージャ・タスク・フローのパラメータを設定する方法

- パラメータのサポートを有効にした場合の処理

26.9.1 カスタマイズ・マネージャ・タスク・フローのパラメータを設定する方法

カスタマイズ・マネージャ・タスク・フローにパラメータを渡すには、アプリケーションのadf-config.xmlファイルのカスタマイズ・マネージャのアドオン・パネル構成の一部としてparameters属性を定義する必要があります。

タスク・フローでパラメータ編集を有効にするには:

1. アプリケーションのadf-config.xmlファイルを開きます。これは、「アプリケーション・リソース」パネルの「ディスクリプタ」の下のADF META-INFフォルダにあります。

2. ファイルで次のネームスペースをadf-config要素内に追加します。

xmlns:pe="http://xmlns.oracle.com/adf/pageeditor/config"

3. ネームスペースを付けて<pe:page-editor-config>エントリを追加し、<pe:addon-panels>を含めます。

<pe:addon-panels>内で、次の例に示すように、デフォルトの「カスタマイズ・マネージャ」パネルの<pe:addon-panel>エントリを追加し、parameters属性をappUtilBean.customizationManagerParamsに設定することで定義します。

<pe:page-editor-config xmlns="http://xmlns.oracle.com/adf/pageeditor/config">
<pe:addon-panels>
<pe:addon-panel name="oracle.adf.pageeditor.addonpanels.customization-manager" parameters="#{AppUtilBean.customizationManagerParams}"/>
. . .
</pe:addon-panels>
</pe:page-editor-config>

ここで、AppUtilBeanは、AppUtilBeanクラスのサンプル実装で、これを次の例に示します。

public Map<String, Object> getCustomizationManagerParams()
{
Map<String, Object> paramMap = new HashMap<String, Object>();
Map<String, List<String>> showLayersForCurrent = new HashMap<String, List<String>>();
showLayersForCurrent.put("user", Arrays.asList("admin%", "weblogic"));
paramMap.put("showLayersForCurrent", showLayersForCurrent);

Map<String, List<String>> showLayersForAll = new HashMap<String, List<String>>();
showLayersForAll.put("enterprise", Arrays.asList("Frys"));
paramMap.put("showLayersForAll", showLayersForAll);

return paramMap;
}

4. adf-config.xmlファイルを保存します。

26.9.2 パラメータのサポートを有効にした場合の処理

カスタマイズ・マネージャは、新しいパラメータ設定の基づいてユーザーにオプションを表示します。

26.10 コンポーザのツールバーのカスタマイズ

デフォルトのコンポーザのツールバーは、要素を追加、削除または再配置して、既存の要素をオーバーライドすることでカスタマイズできます。ツールバーの拡張性を有効にするために、コンポーザのツールバーの要素がセクションにグループ化されています。これらのセクションを使用してツールバーをカスタマイズできます。それぞれのセクションには固有の名前が付いており、1つ以上の要素が中に含まれています。

注意:

「保存」ボタンがツールバーに表示されるのは、アプリケーションがサンドボックスを使用するように構成されている場合のみです。詳細は、「コンポーザのサンドボックスの使用」を参照してください。

「ヘルプ」アイコンは、アプリケーションでヘルプ・プロバイダを構成した場合、またはコンポーザのパネルまたはダイアログからヘルプをフックアップした場合にのみツールバーに表示されます。

コンポーザのツールバーは、ADF Faces Toolboxタグを使用して作成されます。ツールバーの各行はToolbarタグです。したがって、セパレータ・バーなどのUIコンポーネントはToolbarコンポーネントから継承されます。

表26-3ではツールバーの領域を説明します。

表26-3 ツールバーの領域

セクションまたは領域

説明

message

ページ名付きのメッセージを含む領域。

statusindicator

ステータス・インジケータを含む領域。

menu

ユーザーが「デザイン」ビューと「構造」ビューを切り替えることができる「表示」メニューを含む領域。

addonpanels

コンポーザのアドオンが含まれている領域。アドオンは、この領域内ですべて順次表示されます。詳細は、「コンポーザのアドオンの作成」を参照してください。

help

「ヘルプ」アイコンを含む領域。

button

「保存」ボタンおよび「閉じる」ボタンを含む領域。

stretch

2つのセクション間の広い空間。

newline

セクション間の改行。改行の後のすべてのセクションは、ツールバーで新しい行になります。

ツールバー・セクションを使用して、次の方法でコンポーザのツールバーをカスタマイズできます。

- 組込み要素の再配置および非表示

- カスタム要素を使用した新しいセクションの追加

- デフォルトのセクションを変更してカスタム要素を表示

この項では、コンポーザのツールバーをカスタマイズする手順を説明します。内容は次のとおりです。

- ツールバー要素を再配置または非表示にする方法

- 実行時の処理内容

- 新しいセクションをツールバーに追加する方法

- ツールバーのセクションをオーバーライドしてカスタム・コンテンツを表示する方法

26.10.1 ツールバー要素を再配置または非表示にする方法

Page CustomizableコンポーネントのtoolbarLayout属性を使用して、表示するツールバーのセクションおよびその表示順を制御します。

アプリケーションのすべての編集可能ページのツールバーをカスタマイズするために、テンプレートを作成し、Page Customizableコンポーネントをテンプレートに追加し、toolbarLayout属性をPage Customizableコンポーネントに対して指定できます。その後、このテンプレートに基づいてアプリケーションのすべてのページをカスタマイズできます。

toolbarLayoutの値を指定しないと、この属性は、コンポーザのツールバーのセクションのデフォルト・レイアウトであるmessage addonpanels stretch button helpに内部的に設定されます。

アプリケーション・ページのツールバーをカスタマイズするには:

1. JDeveloperでカスタマイズ可能なJSPXページを開き、「構造」ウィンドウでPage Customizableコンポーネントを選択します。

2. プロパティ・インスペクタで、Appearanceの下のtoolbarLayout属性に空白区切り値を指定します。

表26-3のセクション名は、この属性の有効値です。

注意:

ツールバーで1行ごとに1つのstretch値のみを追加できます。複数のstretch値を追加すると、最初の1つのみが表示され、その他はすべて無視されます。

「ソース」ビューで、toolbarLayout属性は次の例に示すように表示されます。

<pe:pageCustomizable id="pageCustomizable1"
toolbarLayout="button stretch statusindicator menu"
<cust:panelCustomizable id="panelCustomizable1" layout="scroll"/>
<f:facet name="editor">
<pe:pageEditorPanel id="pep1"/>
</f:facet>
</pe:pageCustomizable>

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

26.10.2 実行時の処理内容

実行時ツールバーには、指定したセクションが指定した順序で表示されます(図26-14)。

図26-14 カスタマイズしたコンポーザのツールバー

26.10.3 新しいセクションをツールバーに追加する方法

toolbarLayout属性でファセットを作成し、ファセット名を指定することによって、カスタム・セクションを追加できます。新しいファセットにツールバーに表示する要素を移入します。次の例は、セクションの作成方法、具体的には、ユーザーが不具合をレポートできるポップアップを開く「バグをレポート」アイコンを追加する方法を説明します。

カスタム・セクションを追加するには:

1. ツールバーをカスタマイズするJPSXページを開きます。

2. ファセットをPage Customizable内に追加し、これにbugreportという名前を付けます。

3. Command Toolbar Buttonコンポーネントをファセット内に追加し、text属性をReport a Bugに設定します。

4. アイコンにイメージを追加するには、icon属性を使用してイメージへのパスを指定します。

5. Show Popup Behaviorコンポーネントを追加し、Command Toolbar Buttonをクリックしたときにポップアップを起動します。

「ソース」ビューで、Page Customizableは次のように表示されます。

<pe:pageCustomizable id="pageCustomizable1"
toolbarLayout="message stretch bugrep newline menu stretch button"
<f:facet name="bugrep">
<af:commandToolbarButton id="cmd1" text="Report a bug"
icon="/images/bug.png"
clientComponent="true">
<af:showPopupBehavior popupId="p1" triggerType="action"/>
</af:commandToolbarButton>
</f:facet>
. . .
<af:popup id="p1">
<af:dialog id="dlg1" title="File a Bug"
affirmativeTextAndAccessKey="File">
<af:panelFormLayout labelWidth="30%" id="pfl1">
<af:inputText id="it0" maximumLength="80"
label="Product/Component" required="true"/>
<af:inputText id="it1" maximumLength="80" label="Subject"
required="true"/>
<af:inputText id="it2" rows="3" label="Problem" required="true"/>
<af:inputText id="it3" rows="3" label="Steps" required="true"/>
</af:panelFormLayout>
</af:dialog>
</af:popup>
. . .
</pe:pageCustomizable>

6. ページを保存します。

実行時に、コンポーザ・ツールバーに「バグをレポート」アイコンが表示されます。このアイコンをクリックすると、バグ提出ダイアログが表示され、ユーザーはこれを使用して不具合を報告できます。

26.10.4 ツールバーのセクションをオーバーライドしてカスタム・コンテンツを表示する方法

デフォルトのツールバーのセクションと同じ名前のファセットを追加し、これにカスタム・コンテンツを移入することによって、デフォルトのツールバーのセクションにカスタム・コンテンツを表示できます。ファセットのコンテンツは、デフォルトのセクションのコンテンツをオーバーライドします。たとえば、ユーザーへのカスタム・メッセージをEditing Page: Page_Nameメッセージの場所に表示するために、messageというカスタム・ファセットを作成し、ユーザーに表示するテキストを含むOutput Textコンポーネントを含めることができます。Output Textコンポーネントは、デフォルトのメッセージの場所に表示されます。次の例は、カスタム・ツールバー・メッセージを含むPage Customizableコンポーネントを示しています。

<pe:pageCustomizable id="pageCustomizable1"
toolbarLayout="message newline button stretch statusindicator menu"
<cust:panelCustomizable id="panelCustomizable1" layout="scroll"/>
<f:facet name="message">
<af:outputText value="Welcome!"/>
</f:facet>
<f:facet name="editor">
<pe:pageEditorPanel id="pep1"/>
</f:facet>
</pe:pageCustomizable>

26.11 「デザイン」ビューまたは「コンテンツの追加」ビューでの直接選択の有効化

直接選択により、ユーザーはコンポーザの「構造」ビューから「デザイン」ビューまたは「コンテンツの追加」ビューまで特定のカスタマイズ機能を拡張し、実行時にページ内から要素を変更できます。これにより、基礎となるアプリケーションにダメージを及ぼさないような安全な環境を作りながら、ビジネス・ユーザーの手でより多く制御することができます。

すべての直接選択機能は、「構造」ビューで使用できますが、ビジネス・ユーザーには「構造」ビューを安全かつ効率的に使用する知識や経験がありません。これらのユーザーは簡単にページを壊して、アプリケーション・ロジックを回避することができます。

直接選択を使用して、少数の選択したコンポーネントを選択可能および編集可能にすることができます。たとえば、フォーム内のフィールドの順序の変更、フォーム・フィールドのラベルの変更、表内の列名の変更またはフォームの特定のフィールドの非表示など。

直接選択機能の詳細は、「実行時の処理」を参照してください。

26.11.1 直接選択を有効化および構成する方法

この項では、アプリケーションで直接選択を有効化および構成する方法について説明します。

1. まず、「選択」ビューを有効にする必要があります。adf-config.xmlの<pe:page-editor-config>タグの内側に、<pe:enable-design-views>タグを追加して使用可能なビューを定義します。使用可能な定数値は次のとおりです。

- all: すべてのビューを使用可能にして、ビュー間を切り替えるタブを含むツールバーを表示します。

- design: 「デザイン」ビューを唯一の使用可能なビューにします。

- add-content: 従来の「コンテンツの追加」ビューを唯一の使用可能なビューにします。

- select: 「選択」ビューを唯一の使用可能なビューにします。

- source: 「構造」ビューを唯一の使用可能なビューにします。

- preview: 「プレビュー」を唯一の使用可能なビューにします。

たとえば、「選択」ビューと「コンテンツの追加」ビューのみを使用する場合は、次のタグを追加できます。

<pe:enable-design-views> select add content</pe:enable-design-views>

下の例に示すように、ELを使用して適切なビューを決定することもできます。

<pe:enable-design-views>#{testBean.designViews}</pe:enable-design-views>

注意:

この設定は、アプリケーションのデフォルトを定義します。designViews=""属性を使用してpageCustomizableタグでこの設定をオーバーライドできます。

2. pe-ext.xmlで、特定のコンポーネントの直接選択を有効化または無効化するために<selection-config>タグを追加し、関連付けられた操作を定義します。コンポーネントを選択可能にするためには、このタグ内で操作を定義する必要があります。(操作が定義されておらず、選択がコンポーネントに対して有効になっていない場合、コンポーネントを選択すると空のフレームが表示されます。)

<selection-config>タグ内で、<global-filter>を使用して、また<selection-taglib-filter>を使用してネームスペースおよびタグによって、直接選択をグローバルに構成できます。<selection>タグには2つの必須属性があります。

- view: 直接選択を有効にするビューを定義します。

- enabled: 直接選択が指定されたビューで有効化されるかどうかを設定します。

利用可能な操作は、各特定コンポーネントの下の<operation>タグ内で定義されています。次の要素は、操作の定義に使用されます。

- name: 実行される操作(標準またはカスタム)を定義します。操作名はプロパティ・パネルIDと同じです。標準操作のリストは、「コンポーザのデフォルト・アドオンとプロパティ・パネル」を参照してください。
カスタム操作の場合、名前はカスタム・パネルIDと同じです。カスタム操作の詳細は、「カスタム・プロパティ・パネルの作成」を参照してください。

- label(オプション): ポップアップ・ウィンドウにタブ・ラベルを設定します。デフォルト・ラベルは操作名です。

- filtered: ポップアップ・ウィンドウの操作を含むようにfalseに設定します。

注意:

最初に、少数のコンポーネントを選択し、次に機能がテストされ習得されるようにさらにコンポーネントを追加することをお薦めします。これは次の例に示すように、<global-filter>タグの選択をグローバルに無効にしてから、<selection-taglib-filter>を使用して個々のコンポーネントの選択を有効にすることによって、簡単に実行できます。

<selection-config>
<global-filter>
<selection view="design" enabled="false"/>
</global-filter>

<selection-taglib-filter
namespace="http://xmlns.oracle.com/adf/faces/customizable">
<tag name="showDetailFrame">
<selection view="design" enabled="true"/>
<operation name="oracle.adf.pageeditor.pane.sdfprop"
label="SDF Change Property"
filtered="false"/>
</tag>
</selection-taglib-filter>

<selection-taglib-filter namespace="http://xmlns.oracle.com/adf/faces/rich">
<tag name="goLink">
<selection view="design" enabled="true"/>
<operation name="oracle.adf.pageeditor.pane.generic-property-inspector"
label="Change Property"
filtered="false"/>
<operation name="oracle.adf.pageeditor.pane.inline-style-editor"
label="Inline Style"
filtered="false"/>
</tag>
<tag name="commandButton">
<selection view="design" enabled="true"/>
<operation name="oracle.adf.pageeditor.pane.generic-property-inspector"
label="Change Property"
filtered="false"/>
</tag>
</selection-taglib-filter>
</selection-config>

さらにユーザー経験を簡単にするため、直接選択によりユーザーは、よリ少数のセットが表示されるようにタグの特定の属性をフィルタできます。詳細は、「プロパティ・フィルタの定義方法」を参照してください。

3. .jspxページ内の特定のコンポーネントの直接選択を有効化または無効化するには、次の例に示すように、コンポーネント・タグ内に<f:attribute name="pe-select" value="true|false">タグを追加します。このタグの設定は、pe_ext.xmlファイルのコンポーネントの<selection-config>の設定をオーバーライドします。(前述のように、直接選択を有効にするには、pe_ext.xmlファイルのコンポーネントに対する操作を定義する必要があります。定義しない場合、これを選択すると空のダイアログが開きます。)

<af:panelGroupLayout id="pgl2" layout="vertical">
<f:attribute name="pe-select" value="false"/>
<af:inputText id="it6" label="Unselectable" value="Enter here..."/>
<af:goLink id="gl1" destination="http://www.oracle.com" text="Oracle"/>
<af:inputText id="it7" label="Selectable(override)" value="Enter here...">
<f:attribute name="pe-select" value="true"/>
</af:inputText>
</af:panelGroupLayout>

4. フォーム・フィールドで式言語の使用を拒否して既存のELが上書きされないようにするには、「式言語を保護する方法」を参照してください。

特定の要素の詳細は、「adf-config.xml」および「pe_ext.xml」を参照してください。

26.11.2 実行時の処理内容

直接選択が有効になっている場合、実行時のページの外部に対する表示は、エンド・ユーザーに対する表示と同じです(図26-15)。

図26-15 「選択」ビュー

コンポーネントのプロパティを編集するには、ユーザーは有効な要素を選択し、「コンポーネントの編集」または「親コンポーネントの編集」(適用可能な場合)をクリックできます(図26-16)。

図26-16 要素の直接選択の有効化

「コンポーネント・プロパティ」ダイアログにより、ユーザーはコンポーネントに対して定義されたプロパティを編集し、コンポーネントに対して構成された他の操作にアクセスできます。ユーザーが「親コンポーネントの編集」を選択した場合、「子の管理」タブがダイアログに含まれています。ELが上書きが許可されないか、上書きから保護されない場合、図26-17で示すように、「式ビルダー」および「オーバーライド」オプションが使用できません。このイメージには編集から保護されるフィールドの例も含まれています(「コンポーネントの表示」)。

図26-17 「コンポーネント・プロパティ」ダイアログ

複数の操作がダイアログのタブに表示されます。タブの順序はパネル登録で定義されています。操作が囲んでいるコンポーネントに対して登録されていない場合、その操作のタブは表示されません。パネル登録の詳細は、「カスタム・プロパティ・パネルの作成」を参照してください。

26.12 コンポーザの拡張性機能の問題のトラブルシューティング

この項では、コンポーザの拡張性機能の使用中に発生する可能性のある問題をトラブルシューティングする際に役立つ情報を提供します。

ロギングの構成の詳細は、「コンポーザを使用したページの実行時編集の有効化」を参照してください。

問題

アドオンを作成したが、コンポーザのツールバーに表示されません。

解決策

次の点を確認してください。

- pe_ext.xmlファイルがアプリケーションまたはJARファイルの/META-INFフォルダにあり、クラス・パスで利用可能です。

- パネルをpe_ext.xmlで登録する際に指定したタスク・フロー・バインディングIDが的確です。

- <pe:addon-panel>エントリがadf-config.xmlファイルの<pe:page-editor-config>セクションの下に存在します。

- アドオンがJARファイルにある場合、JARファイルがADFライブラリとして作成されていることを確認してください。

アドオンの詳細は、「コンポーザのアドオンの作成」を参照してください。

問題

カスタム・プロパティ・パネルを登録しました。ただし、プロパティを表示するコンポーネントを選択する際に、このパネルが「コンポーネント・プロパティ」ダイアログに表示されません。

解決策

次の点を確認してください。

- pe_ext.xmlファイルがアプリケーションまたはJARファイルの/META-INFフォルダにあり、クラス・パスで利用可能です。

- パネルをpe_ext.xmlで登録する際に指定したタスク・フロー・バインディングIDが的確です。

- property-panelの登録が正しく、パネルを表示するコンポーネントに対して指定されています。さらに、コンポーネントの完全修飾クラス名がcomponentノードを使用して正しく指定されています。

- プロパティ・パネルの登録の重複によってパネル・エントリがオーバーライドされていません。

- レンダリングされた属性を使用するようにパネルが構成されている場合、値またはELがtrueに評価されています。

- アドオンがJARファイルにある場合、JARファイルがADFライブラリとして作成されていることを確認してください。

カスタム・プロパティ・パネルの詳細は、「カスタム・プロパティ・パネルの作成」を参照してください。

問題

「コンポーネント・プロパティ」ダイアログでコンポーネントの一部のプロパティが表示されません。

解決策

コンポーネント・プロパティがフィルタ処理されていないことおよび制限されていないことを確認します。詳細は、「プロパティ・フィルタの定義方法」および「属性レベルのセキュリティの適用」を参照してください。

27 コンポーザの拡張構成の実行

この章では、コンポーザの特定の拡張構成を実行して、エンド・ユーザーの操作性を向上する方法を説明します。

この章のトピックは、次のとおりです:

- コンポーザにアクセスするためのキーボード・ショートカットの構成

- イベント対応のタスク・フローの作成

- 「構造」ビューにデフォルトで表示するアプリケーション・ページの構成

- アプリケーションの「構造」ビューの無効化

- タスク・フローのズーム機能の無効化

- コンポーネントへのスタイルの適用

- 永続性変更マネージャの構成

- 実行時リソース文字列編集の構成

- コンポーザの拡張構成の問題のトラブルシューティング

27.1 コンポーザにアクセスするためのキーボード・ショートカットの構成

通常、ユーザーは、ページで「編集」リンクまたはボタンをクリックしてページ編集モードに入ります。アプリケーションを構成して、キーボード・ショートカットを使用してページ編集モードにユーザーが入ることができるようにできます。さらに、アプリケーションを構成して、ショートカット・キーを使用して他のイベントを実行できます。この項では、コンポーザに対するキーボード・ショートカットを有効にして、そのショートカット・キーのイベント・ハンドラを構成する方法を説明します。次のサブセクションが含まれます:

- 編集モードへのリンクなしのエントリを有効にする方法

- ショートカット・キーのイベント・ハンドラの構成方法

- 実行時の処理内容

27.1.1 編集モードへのリンクなしのエントリを有効にする方法

<pe:mode-switch-key>要素をアプリケーションのadf-config.xmlファイルに追加することによって、ページ編集モードへのリンクなしのエントリを構成できます。<pe:mode-switch-key>要素を設定するときに構成されたデフォルトのキーボード・ショートカットは[Ctrl]+[Shift]+[E]です。ユーザーはこのキー・シーケンスを使用して、ページの表示モードと編集モードを切り替えられます。ただし、<pe:key-sequence>プロパティを追加することによって選択したキーを構成できます。

<pe:mode-switch-key>プロパティを追加するには:

1. アプリケーションのadf-config.xmlファイルを開きます。これは、「アプリケーション・リソース」パネルの「ディスクリプタ」の下のADF META-INFフォルダにあります。

2. 次の例に示すように、<pe:mode-switch-key>プロパティを追加して、その値をtrueに設定します。この例は、ショートカット値がCtrl+Eである<pe:key-sequence>プロパティを示します。

リンクなしの編集モード・エントリの有効化

<pe:page-editor-config xmlns="http://xmlns.oracle.com/adf/pageeditor/config">
<pe:mode-switch-key>
<pe:enabled>true</pe:enabled>
<pe:key-sequence>ctrl E</pe:key-sequence>
</pe:mode-switch-key>
. . .
</pe:page-editor-config>

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

27.1.2 ショートカット・キーのイベント・ハンドラの構成方法

次の例に示すように、<pe:mode-switch-handler>要素を使用して、ショートカット・キーを使用したときにトリガーされる必要があるイベントを指定します。

<pe:mode-switch-key>
<pe:enabled>true</pe:enabled>
<pe:mode-switch-handler>#{PageEditorBean.handleModeSwitch}</pe:mode-switch-handler>
</pe:mode-switch-key>

ここで、次のサンプルで示すように、handleModeSwitchはModeChangeEventメソッドを使用し、2つのモード間を切り替えるロジックを提供します。

public void handleModeSwitch(ModeChangeEvent editMode)
{
// Your implementation to handle mode change goes here
}

27.1.3 実行時の処理内容

ユーザーは、構成したショートカットを使用してアプリケーション・ページにアクセスし、編集モードに入れます。

27.2 イベント対応のタスク・フローの作成

コンポーザには、タスク・フローのイベントをコンテキストに沿って関連付ける方法が用意されています。コンテキスト・イベントをアクション・ハンドラと関連付け、プロデューサでイベントがトリガーされたときにプロデューサ・コンポーネントからコンシューマ・コンポーネントに値を渡すことができます。

実行時に使用可能なイベントの場合、設計時にイベント機能をタスク・フローに組み込む必要があります。イベント対応のタスク・フローをカスタマイズ可能ページに追加すると、各タスク・フローの「コンポーネント・プロパティ」ダイアログに「イベント」タブが組み込まれ、ここで関連付けアクティビティの多くが行われます。イベント機能を組み込む方法の詳細は、『Oracle Fusion Middleware Oracle Application Development Framework FusionによるWebアプリケーションの開発』のコンテキスト・イベントの作成に関する項を参照してください。

27.3 「構造」ビューにデフォルトで表示するアプリケーション・ページの構成

ユーザーがページ上の「編集」ボタンまたはリンクをクリックしてコンポーザを起動すると、デフォルトでは、そのページは「コンテンツの追加」ビューまたは「デザイン」ビューで開きます。ビジネス要件で求められる場合は、デフォルトでコンポーザの「構造」ビューで表示するようにアプリケーション・ページを構成できます。

27.3.1 「構造」ビューにデフォルトで表示するアプリケーション・ページを構成する方法

Page CustomizableコンポーネントのEdit Mode view属性を使用して、編集モードのデフォルトのページ・ビューを指定できます。

「構造」ビューにデフォルトでページを開くには:

1. JDeveloperでJSPXページを開きます。

2. 構造ナビゲータでPage Customizableコンポーネントを選択します。

3. プロパティ・インスペクタで、Edit Mode View属性のドロップダウン・リストをクリックして、「ソース」を選択します。

注意:

選択したユーザーのみ「構造」ビューでページを開くために、Edit Mode View属性にEL値を指定できます。

4. ページを保存します。

「構造」ビューの位置とサイズの設定

デフォルトでは、「構造」ビューのコンポーネント・ナビゲータは、ページの右側に表示され、そのデフォルトの幅は200ピクセルです。Page CustomizableコンポーネントでsourceViewPosition属性およびsourceViewSize属性をそれぞれ使用して、コンポーネント・ナビゲータに対して別の位置またはサイズを指定できます。これらの属性の詳細は、「Page Customizableコンポーネント」を参照してください。

27.3.2 実行時の処理内容

ユーザーが「編集」リンクまたはボタンをクリックすると、コンポーザは「構造」ビューでページを開きます。

27.4 アプリケーションの「構造」ビューの無効化

デフォルトでは、コンポーザ対応ページで「構造」ビューは有効になっています。タスク・フロー、ポートレットおよびレイアウトの各コンポーネントを除くページ・コンポーネントをユーザーが編集できないようにする場合、「構造」ビューを無効にできます。この項では方法について説明します。次のサブセクションが含まれます:

- 「構造」ビューを無効にする方法

- 実行時の処理内容

注意:

「構造」ビューの編集機能の詳細は、「ページ編集モードの「構造」ビューでの編集機能」を参照してください。

27.4.1 「構造」ビューを無効にする方法

アプリケーションのadf-config.xmlファイルで<pe:enable-source-view>エントリをfalseに設定して「構造」ビューを無効にできます。

注意:

adf-config.xmlで設定できるコンポーザ固有の構成の詳細は、次を参照してください。

「adf-config.xml」。

「構造」ビューを無効にするには:

1. アプリケーションのadf-config.xmlファイルを開きます。これは、「アプリケーション・リソース」パネルの「ディスクリプタ」の下のADF META-INFフォルダにあります。

2. 次の例に示すように、enable-source-viewプロパティを追加して、その値をfalseに設定します。

adf-config.xmlでの「構造」ビューの無効化

<pe:page-editor-config xmlns="http://xmlns.oracle.com/adf/pageeditor/config">
<pe:enable-source-view>false</pe:enable-source-view>
</pe:page-editor-config>

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

27.4.2 実行時の処理内容

ユーザーがページ編集モードに切り替えると、図27-1に示すように、ページは「コンテンツの追加」ビューまたは「デザイン」ビューにレンダリングされ、「構造」ビューはユーザーに表示されません。

図27-1 「構造」タブがないページの「コンテンツの追加」ビュー

27.5 タスク・フローのズーム機能の無効化

アプリケーションのadf-config.xmlファイルで<pe:enable-zoom>プロパティをfalseに設定することによって、アプリケーションでタスク・フローにズーム・インする機能を無効にできます。

注意:

adf-config.xmlで設定できるコンポーザ固有の構成の詳細は、

「adf-config.xml」を参照してください。

タスク・フローのズーム機能を無効にするには:

1. 「アプリケーション・リソース」パネルの「ディスクリプタ」の下のADF META-INFフォルダにあるadf-config.xmlファイルを開きます。

2. 次の例に示すように、<pe:enable-zoom>プロパティを追加して、その値をfalseに設定します。

adf-config.xmlでのタスク・フローのズーム機能の無効化

<pe:page-editor-config xmlns="http://xmlns.oracle.com/adf/pageeditor/config">
<pe:source-view>
<pe:enable-zoom>false</pe:enable-zoom>
</pe:source-view>
</pe:page-editor-config>

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

タスク・フローにズーム・インする機能はアプリケーション全体で無効になります。

27.6 コンポーネントへのスタイルの適用

次のいずれかの方法を使用して、コンポーネントのヘッダーおよびコンテンツに様々なスタイルを適用することで、コンポーザ・コンポーネントのルック・アンド・フィールを変更できます。

- スタイル・セレクタを使用してスキンを構築して、Frameworkアプリケーションにスキンを適用します。スタイル・セレクタとスキンの詳細は、『Oracle Fusion Middleware Oracle ADF FacesによるWebユーザー・インタフェースの開発』の「スタイルおよびスキンを使用した外観のカスタマイズ」の章を参照してください。

- プロパティ・インスペクタを介して、JDeveloperのスタイル・プロパティを使用して、スタイル情報を指定します。詳細は、「contentStyleプロパティおよびinlineStyleプロパティの理解」を参照してください。

注意:

JDeveloperのスタイル・プロパティを使用することで、スキンCSSからのスタイル情報をオーバーライドします。ただし、JDeveloperを使用してスタイル・プロパティを定義する場合、このスタイルは選択したコンポーネントのみのスタイルをオーバーライドし、子コンポーネントはスキンで指定されたスタイルを使用し続けます。

スタイル関連のプロパティinlineStyleおよびstyleClassを変更して、設計時にPage Customizable、Panel Customizable、Layout CustomizableおよびShow Detail Frameの各コンポーネントのルック・アンド・フィールを調整できます。

Show Detail Frameコンポーネントには、別の関連スタイル・プロパティ(contentStyle)があり、これはコンポーネント内のコンテンツのスタイルを定義します。styleClassプロパティでは、スキンから別のスタイルを選択でき、一方inlineStyleプロパティおよびcontentStyleプロパティは、コンポーネントのその特定のインスタンスのアプリケーション・スキンで指定された対応するスタイルをオーバーライドします。

inlineStyleプロパティはstyleClassをオーバーライドします。また、コンポーネント・インスタンスで設定されたプロパティは、コンポーネントのそのインスタンスのみに影響します。アプリケーション内のその他のコンポーネント・インスタンスは影響を受けません。

注意:

backgroundプロパティは、Show Detail Frameコンポーネントのルック・アンド・フィールを調整する際にも便利です。これは、コンポーネント・インスタンスにdark、mediumまたはlightの色のスキームを提供するために使用されます。inlineStyle、contentStyleおよびstyleClassの各プロパティとは異なり、backgroundプロパティはスキンで機能します。コンポーネント・インスタンスのbackgroundプロパティに指定された値に応じて、スキンは、関連するスタイルを適用します。

contentStyleプロパティおよびinlineStyleプロパティの理解

スタイル・プロパティのinlineStyleとcontentStyleは、サポートする属性のタイプが類似しています。これらのプロパティの違いは、影響の範囲です。inlineStyleがコンポーネント全体のスタイル情報を提供するのに対し、contentStyleはコンポーネント・コンテンツのスタイル情報のみを提供します。contentStyleプロパティはShow Detail Frameコンポーネントで使用できますがPanel Customizableコンポーネントでは使用できません。

inlineStyleプロパティは、CSSをコンポーネントのルート、つまり最上位のDOM要素に適用します。これは、スキンから色、フォントなどを選択する子要素のスタイルをオーバーライドしません。たとえば、コンポーネント・ヘッダーがスキニングされた場合、inlineStyleを設定してもコンポーネント・ヘッダーには影響しません。contentStyleは、コンポーネントのコンテンツ部分を囲むDOM要素にCSSを適用します。Show Detail Frameでは、コンテンツはヘッダーの下の領域のことです。

コンポーネント・コンテンツでは、contentStyleに指定した値が、inlineStyleに指定した値よりも優先されます。また、コンポーネント・インスタンスでは、contentStyleは、親コンポーネント(Panel Customizableコンポーネント内でネストされたポートレットなど)のinlineStyle値とcontentStyle値のいずれにも優先されます。

図27-2 プロパティ・インスペクタでのcontentStyleおよびinlineStyleのスタイルの定義

27.7 永続性変更マネージャの構成

セッション間でユーザー・カスタマイズおよびアプリケーション・カスタマイズを永続するには、アプリケーションを構成して変更の永続性フレームワークを使用する必要があります。コンポーザ・コンポーネントをカスタマイズ可能ページに追加すると、コンポーザは、ComposerChangeManagerを使用するようにアプリケーションを構成して、実行時にページに対して行われた変更が適切に永続されるようになります。この項では、コンポーザ対応ページが含まれている新しいFrameworkアプリケーションのデフォルト変更マネージャ構成について説明します。

コンポーザ・コンポーネントをアプリケーション・ページに初めて追加するときに、コンポーザは、次の操作を実行して変更の永続性を有効にします。

- CHANGE_PERSISTENCEコンテキスト・パラメータをweb.xmlファイルに追加し、その値をComposerChangeManagerに設定します。このコンテキスト・パラメータは、次の例に示すように、永続性を処理するために使用されるChangeManagerクラスを登録します。

<context-param>
<param-name>org.apache.myfaces.trinidad.CHANGE_PERSISTENCE</param-name>
<param-value>oracle.adf.view.page.editor.change.ComposerChangeManager</param-value>
</context-param>

- adf-config.xmlファイルのpersistent-change-manager要素をMDSDocumentChangeManagerに設定します。コンポーザは、adf-faces-configセクション内のMDSDocumentChangeManagerを次のように構成します。

<adf-faces-config xmlns="http://xmlns.oracle.com/adf/faces/config">
<persistent-change-manager>
<persistent-change-manager-class>
oracle.adf.view.rich.change.MDSDocumentChangeManager
</persistent-change-manager-class>
</persistent-change-manager>
. . .
</adf-faces-config>

ファイルのtaglib-configセクションは、次の例に示すように、デフォルトで永続されるコンポーネントのタグおよび属性をリストします。

<adf-faces-config xmlns="http://xmlns.oracle.com/adf/faces/config">
...
<taglib-config>
<taglib uri="http://xmlns.oracle.com/adf/faces/customizable">
<tag name="showDetailFrame">
<persist-operations>all</persist-operations>
<attribute name="expansionMode">
<persist-changes>true</persist-changes>
</attribute>
<attribute name="contentStyle">
<persist-changes>true</persist-changes>
</attribute>
</tag>
<tag name="panelCustomizable">
<persist-operations>all</persist-operations>
</tag>
</taglib>
<taglib uri="http://xmlns.oracle.com/adf/pageeditor">
<tag name="layoutCustomizable">
<persist-operations>all</persist-operations>
<attribute name="type">
<persist-changes>true</persist-changes>
</attribute>
</tag>
</taglib>
</taglib-config>
</adf-faces-config>

さらに、このセクションでその他のタグおよび属性を定義してpersist-changes属性をtrueに設定することによって、そのタグおよび属性の変更の永続性を有効にできます。詳細は、「コンポーネント・レベルでの変更の永続性の定義方法」を参照してください。

操作と属性への変更を永続化する場合は、persist-operations属性を含めて、値をallに設定します。persist-operations属性がタグに含まれる場合、タグが子の追加、移動、並べ替えおよび削除、ファセットの追加および削除などの変更を永続化します。

暗黙的に永続化されるADF Facesコンポーネントと属性のリストは、『Oracle Fusion Middleware Oracle Application Development FrameworkによるFusion Webアプリケーションの開発』の「実行時のユーザー・カスタマイズの許可」の章を参照してください。

ComposerChangeManager

ChangeManagerクラスは、エンド・ユーザーによって実行されたアプリケーション・カスタマイズを永続するために必要です。ComposerChangeManagerは、セッション内およびセッション間(MDSへ)の両方の変更の永続性を処理します。これは、次のようにユーザーの変更を適切な変更マネージャに委任します。

- 表示モードの変更は、FilteredPersistenceChangeManagerにルーティングされ、暗黙的カスタマイズ(列のサイズ変更やヘッダーの折りたたみなど)がアプリケーションのadf-config.xmlファイルで構成されたフィルタ・ルールに応じて動作するようにします。

- 編集モードの変更は、MDSDocumentChangeManagerにルーティングされ、暗黙的カスタマイズと明示的カスタマイズの両方が常に永続され、セッション間で使用できるようにします。

注意:

コンポーザ・コンポーネントをアプリケーション・ページに追加するときには、セッションの期間のカスタマイズを有効にするオプション(「プロジェクト・プロパティ」ダイアログ内のオプション)は無効になっています。これは、コンポーザ対応のアプリケーション・ページがセッション間で(MDSへ)永続される必要があるためです。

27.8 実行時リソース文字列編集の構成

コンポーザで編集されたコンポーネント・プロパティは、現在の言語でのみ使用できます。たとえば、タスク・フローをページに追加する場合、コンポーザで入力したタスク・フロー・タイトルは現在の言語でのみ使用可能です。そのため、別のロケールのユーザーには、そのようなプロパティの翻訳された値が表示されません。実行時に編集されるコンポーネント・プロパティの言語サポートを提供するために、コンポーザは、文字列値を取ることができるコンポーネント表示オプションのリソース文字列を編集するオプションをユーザーに提供するようになりました。これは、JDeveloperのADF Facesが提供するリソース文字列エディタ機能に似ています。コンポーザでリソース文字列に行われた変更は、アプリケーションのその他のリソース・バンドルとともに翻訳される、オーバーライドバンドルに保存されます。翻訳されたものは、アプリケーションにインポートされて戻されます。こうして、ユーザーは自身の言語でプロパティ値を表示できます。

注意:

コンポーザは、実行時に約500のリソース文字列の作成をサポートします。この数を超えると、アプリケーションのパフォーマンスは低下します。

この項では、リソース文字列の編集を可能にするための手順について説明します。内容は次のとおりです。

- リソース文字列エディタの概要

- アプリケーションでリソース文字列エディタを有効にする方法

- オーバーライド・バンドルの構成方法

- 実行時の処理内容

27.8.1 リソース文字列エディタの概要

実行時、文字列値を取ることができるコンポーネント表示オプションでは、プロパティ・フィールドの隣の「編集」メニューは、「テキスト・リソースの選択」オプションを提供します。このオプションをクリックするとリソース文字列エディタが開き、既存のリソースの検索、リソース・キーの編集または削除および新しいリソース・キー/値のペアの追加を行うオプションが提供されます。実行時のリソース文字列の編集の詳細は、「リソース文字列の編集」を参照してください。

コンポーザでリソース文字列に加えた変更は、アプリケーション・オーバーライド・バンドルに保存されます。バンドルは翻訳に送られ、翻訳されたバージョンがアプリケーションに戻されます。こうして、ユーザーは自身の言語でプロパティ値を表示できます。

ComposerOverrideBundle.xlfは、コンポーザ・ライブラリにパッケージされている空のXLIFFファイルです。このバンドルは、設計時にコンポーザ・コンポーネントをページに追加するとアプリケーションで使用できるようになります。実行時に、コンポーザは、このバンドルを内部的に使用して、リソース文字列の編集時にアプリケーションのオーバーライド・バンドルの読取りと書込みを実行します。

新しいプロパティ値および更新されたプロパティ値は、オーバーライドバンドルに保存されます。ユーザーは、作成または変更される各文字列のキー、値および説明を指定する必要があります。アプリケーションで行われるすべてのリソース文字列の変更は、単一のオーバーライドバンドルに保存されます。様々なレイヤーで行われた実行時の変更を区別するために、キー値にはMDSレイヤー名および値が接頭辞として付けられ、RT_<MDSレイヤー名><MDSレイヤー値>_キー名のフォーマットである必要があります。たとえば、RT_sitewebcenter_WELCOME_MESSAGEとなります。選択したプロパティに対して、ユーザーは、任意のMDSレイヤーで作成したリソース文字列を検索および使用できます。ただし、編集できるのは、同じMDSレイヤーで作成されたリソース文字列のみです。オーバーライドバンドルの検索に加えて、ユーザーは、設計時にJSPXページで作成されて使用された文字列も検索できます。内部的に、コンポーザは、JSPXファイルのc:setタグを使用して定義したすべてのリソース・バンドルを検索します。

英語でのリソース文字列の実行時の変更は、デフォルトのアプリケーションオーバーライドバンドルに保存されます。ユーザーは、言語を変更し、その言語でリソース文字列を作成または編集できます。ユーザーがリソース文字列を書き込む言語それぞれに対して個別のオーバーライドバンドルが作成され、ファイル名にはその言語のイニシャルが接尾辞として付けられます。たとえば、Application1でフランス語で編集されたリソース文字列は、Application1OverrideBundle_fr.xlfという名前のバンドルに保存されます。

リソース文字列エディタの現在の制限

- コンポーザは、実行時に約500のリソース文字列の作成をサポートします。この数値を超えると、アプリケーションのパフォーマンスが低下します

- リソース文字列エディタの検索条件では、大文字と小文字が区別されます。

- 検索文字列の説明を検索するには、ユーザーは検索条件に完全な文字列値を指定する必要があります。

- JDeveloperの「プロパティ・バンドル」形式または「リスト・リソース・バンドル」形式で作成されたエントリの文字列の説明は、リソース文字列エディタには表示されません。

- リソース文字列を編集するオプションは、「パラメータ」タブと「イベント」タブのプロパティには無効です。
ADFリソースのEL値がページ・パラメータ、タスク・フロー パラメータ、ポートレット・パラメータなどのページ定義パラメータで参照される場合、バインドしているELは空の値を返します。ユーザーは、ページ定義パラメータでADFリソースのEL値を参照しないようにする必要があります。

27.8.2 アプリケーションでリソース文字列エディタを有効にする方法

アプリケーションでリソース文字列の編集を有効にするには、アプリケーションのadf-config.xmlファイルの<pe:page-editor-config>セクションに<pe:resource-string-editor>要素を次のように追加する必要があります。

<pe:page-editor-config>
<pe:resource-string-editor>
<pe:enabled>true</pe:enabled>
</pe:resource-string-editor>
</pe:page-editor-config>

編集するページ、ユーザー、ロールなどの特定の条件に基づいてリソース文字列を選択的に有効にする場合、enabled属性にEL値を使用できます。

27.8.3 オーバーライド・バンドルの構成方法

アプリケーションでリソース文字列の編集を有効にする場合、オーバーライド・バンドルoracle.adf.view.page.editor.resource.ComposerOverrideBundle.xlfを使用するようにアプリケーションを構成する必要があります(まだ使用されていない場合)。このオーバーライド・バンドルは、pageeditor.jarファイルに含まれており、実行時にユーザーがリソース文字列を作成または編集するときに、アプリケーションのオーバーライド・バンドルに対する読取りおよび書込みに使用されます。

オーバーライドバンドルを構成するには:

1. JDeveloperでアプリケーションを開きます。

2. 「アプリケーション」メニューから、「アプリケーション・プロパティ」を選択します。

3. 「アプリケーション・プロパティ」ダイアログの左パネルの「リソース・バンドル」を選択します。

4. 「バンドル」セクションにoracle.adf.view.page.editor.resource.ComposerOverrideBundle.xlfが表示されていない場合は、「追加」ボタンをクリックしてバンドルを追加します。

5. 「リソース・バンドルの選択」ダイアログの「ファイル名」フィールドに、oracle.adf.view.page.editor.resource.ComposerOverrideBundle.xlfと入力して、「開く」をクリックします。

6. 「アプリケーション・プロパティ」ダイアログで、「オーバーライド済」チェック・ボックスを選択します(図27-3)。

こうすることによって、実行時にユーザーがファイルを使用できます。

図27-3 「アプリケーションのプロパティ」ダイアログ

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

この項の手順を繰り返し、アプリケーションの任意のリソース・バンドルを実行時にユーザーに表示します。

注意:

実行時の読取りおよび書込みの操作に関してリソース・バンドルにアクセスできるようにするには、「アプリケーションのプロパティ」ダイアログでそのバンドルの「オーバーライド」オプションを選択している必要があります。

実行時に、プロパティ・バンドル、リスト・リソース・バンドルおよびXLIFFリソース・バンドルにアクセスできるようにすることができます。

27.8.4 実行時の処理内容

文字列を取るプロパティの隣の「編集」アイコンをユーザーがクリックすると、「テキスト・リソースの選択」オプションが使用可能になります。このオプションをクリックすると、リソース文字列エディタが開き、そこでユーザーはリソース文字列を作成、変更または削除できます。詳細は、「リソース文字列の編集」を参照してください。

27.9 コンポーザの拡張構成の問題のトラブルシューティング

この項では、コンポーザの拡張構成の実行時に発生する可能性のある問題をトラブルシューティングする際に役立つ情報を提供します。

ロギングの構成の詳細は、「コンポーザのADFロギングの構成」を参照してください。

問題

グローバルまたはインスタンス・レベルのCustom Actionを追加しました。ただし、これはchromeまたはShow Detail Frameの「アクション」メニューのいずれにも表示されません。

解決策

次の点を確認してください。

- Show Detail Frameの最初の子は、af:regionである必要があります。

- タスク・フローに現在表示されているビューは、Custom Actionの処理と一致するそのタスク・フロー定義ファイルの結果を含む必要があります。

- この処理に接頭辞dialog:がある場合、タスク・フロー定義の結果にも同じ接頭辞がある必要があります。

詳細は、「タスク・フローを囲んでいるShow Detail Frameでのカスタム・アクションの追加」を参照してください。

問題

コンポーザがADFアプリケーション・ページで動作しません。Oracle WebCenter Portalのリソース・カタログまたは「コンポーネント・プロパティ」ダイアログを使用すると、エラーがログに報告されます。カスタマイズは、まったく保存されません。オブジェクトはカタログから追加されません。

解決策

コンポーザは、MDSDocumentChangeManagerおよびComposerChangeManagerと互換性があります。web.xmlファイルのCHANGE_PERSISTENCEコンテキスト・パラメータをこれらのいずれかに設定する必要があります。次の例に、CHANGE_PERSISTENCEをMDSDocumentChangeManagerに設定する方法を示します。

<context-param>
<param-name>org.apache.myfaces.trinidad.CHANGE_PERSISTENCE</param-name>
<param-value>oracle.adf.view.rich.change.MDSDocumentChangeManager</param-value>
</context-param>

コンポーザを構成すると、CHANGE_PERSISTENCEの値がoracle.adf.view.page.editor.change.ComposerChangeManagerに変更されます。

28 コンポーザ固有のMDS構成の実行

この章では、実行時にページに対して行われた変更を保存するためのカスタマイズ・レイヤーを作成する方法を説明します。コンポーザのサンドボックスの作成を有効にし、変更をバック・エンドに保存する前にプレビューするオプションをユーザーに提供する方法も説明します。

この章のトピックは、次のとおりです:

- MDSの概要

- コンポーザのサンドボックスの使用

- カスタマイズ・レイヤーの表示モードおよび編集モードへの追加: 例

- コンポーザを使用したMDS関連の問題のトラブルシューティング

28.1 MDSの概要

ほとんどの業界では、様々な顧客および分野で役に立つようにエンタープライズ・アプリケーションをカスタマイズします。サイトレベルでアプリケーションを変更すると問題が発生する可能性があります。たとえば、アプリケーション・レベルのカスタマイズでアプリケーションをアップグレードすると、データの損失またはデータ・マージ・エラーが発生する場合があります。結果として、すべてのマージ競合を解決するまで新しいバージョンのアプリケーションをデプロイできません。

メタデータ・ドメインでは、MDSにこのような問題に対処するカスタマイズ機能が用意されています。このカスタマイズ機能を使用すると、ベースのアプリケーション定義の上に適用される、元の状態に干渉しないカスタマイズ・レイヤーを作成できます。カスタマイズ・レイヤー(またはレイヤー化された変更)は、独自のドキュメントに記述され、ベースのアプリケーション定義から隔離されて格納されます。実行時、適用可能なカスタマイズは、メタデータ・ストアからロードされ、ベースのメタデータ定義の上にレイヤー化され、目的の効果を実現します。製品のアップグレードおよびパッチは、ベースのメタデータ定義にのみ影響するため、カスタマイズは正しい動作を継続します。

カスタマイズ・レイヤー

MDSでは、クライアントは複数のカスタマイズ・タイプを指定できます。たとえば、カスタマイズを実行時モード、アプリケーション・ロール、ユーザー・ロール、アプリケーションの状態またはクライアント指定の条件に追加できます。このようなカスタマイズ・タイプそれぞれは、カスタマイズ・レイヤーと呼ばれ、CustomizationClassを使用して描写されます。CustomizationClassはインタフェースMDSで、ベース定義でオーバーレイされるカスタマイズ・レイヤーを特定するために使用されます。たとえば、アプリケーションを構成して、ユーザーが属している部門に基づいてカスタマイズを保存できます。DepartmentCCというカスタマイズ・レイヤーを作成でき、そこで異なる部門のユーザーによって行われたアプリケーションのカスタマイズは、レイヤー内の異なるフォルダに格納されます。その他の例は、MDSを構成して表示モードの変更をユーザー・カスタマイズとしてあるレイヤーで保存し、編集モードの変更をアプリケーション・カスタマイズとして別のレイヤーで保存する場合(またはこの逆)です。

カスタマイズ・レイヤーは、優先順位の順番で適用されます。つまり、同じ変更が、指定のユーザーおよびセッションに適用される2つの異なるレイヤーで行われた場合、高い優先順位のレイヤーで定義された変更がまず適用されます。

CustomizationClassを実装する場合、これをMDSで登録する必要があります。MDSには、CustomizationClassタイプのリストを単一のMetadataObjectと関連付ける方法が用意されています。これは、ファイングレイン関連付けと呼ばれます。MDSには、CustomizationClassタイプのリストを一連のMetadataObjectsと関連付ける方法も用意されています。これは粗密な関連付けと呼ばれます。CustomizationClassおよびカスタマイズ・レイヤーの作成の詳細は、「カスタマイズ・レイヤーの表示モードおよび編集モードへの追加: 例」を参照してください。

コンポーザのサンドボックス

通常、Frameworkアプリケーションでは、実行時カスタマイズはJDEV_HOME/jdev/system_directory/o.mds.dt/adrs/application_name/AutoGeneratedMar/mds_adrs_writedirディレクトリにすぐに保存されます。表示モードと編集モードの両方で行われた変更はこの方法で保存されます。ただし、特定の状況では、ユーザーは、変更をバック・エンドに実際に保存する前に、まず独自のビューでカスタマイズを適用してその変更を保持するか取り消すかを評価する必要がある場合があります。データベース・リポジトリを使用してカスタマイズを格納する場合は、コンポーザを構成してサンドボックスを作成できます。サンドボックスの作成の詳細は、「コンポーザのサンドボックスの使用」を参照してください。

28.2 コンポーザのサンドボックスの使用

サンドボックスは、実行時のページ・カスタマイズをバック・エンドにコミットするまで保存する一時ストレージ・レイヤーです。サンドボックスを構成すると、コンポーザのツールバーに「保存」ボタンが表示され、ユーザーは変更を保存できます。サンドボックス対応のアプリケーションでは、ユーザーが変更の保存前に「閉じる」をクリックすると、クローズ確認ダイアログによって、コンポーザを終了する前に変更を保存するか、取り消すかの確認を求められます。

表示モードで行われたユーザー・カスタマイズはすぐに保存されます。このような変更はページを変更したユーザーに対してのみ使用可能であるため、保存する前に変更を確認する特定の値はありません。

編集モードのカスタマイズはページにアクセスするすべてのユーザーが使用できるため、サンドボックスを有効にして、変更をコミットする前にユーザーがページ・カスタマイズを確認し、これを評価できます。アプリケーションでサンドボックスを有効にした場合、ページの編集モードでコンポーザのツールバーに「保存」ボタンが表示されます。

この項では、サンドボックスの作成を有効にする手順およびサンドボックス対応アプリケーションの実行時の動作を説明します。次のサブセクションが含まれます:

- コンポーザのサンドボックスの作成を有効にする方法

- 実行時の処理内容

- アプリケーションのサンドボックスを無効にする方法

- 失効したサンドボックスを破棄する方法

28.2.1 コンポーザのサンドボックスの作成を有効にする方法

アプリケーションがデータベース・ストアを使用している場合のみサンドボックスを有効にできます。したがって、この項の手順を実行する前にデータベース・ストアが構成されていることを確認する必要があります。Oracle RACデータ・ソースの詳細は、『Oracle Fusion Middleware Oracle WebLogic Server JDBCデータ・ソースの管理』の概要とロードマップに関する項を参照してください。

この項では、コンポーザのサンドボックスの作成を有効にする方法を説明します。次のサブセクションが含まれます:

- アプリケーションのadf-config.xmlファイルの更新

- アプリケーションのweb.xmlファイルの更新

- アプリケーションのデータベース・ストアの選択

- 実行時のフル・ページ・リフレッシュの有効化

28.2.1.1 アプリケーションのadf-config.xmlファイルの更新

デフォルトでは、サンドボックスの作成は、(adf-config.xmlファイルの<mds-config>セクションで定義された)デフォルトのカスタマイズ・ストアにマップされたすべてのネームスペースに対して有効になっています。ただし、選択した数のネームスペースに対してのみサンドボックスを有効にできます。これを行うには、<pe:sandbox-namespaces>要素をadf-config.xmlファイルに追加してから、サンドボックスの作成をサポートするネームスペースを定義する必要があります。

注意:

adf-config.xmlで設定できるコンポーザ固有の構成の詳細は、「adf-config.xml」を参照してください。

adf-config.xmlでサンドボックスの作成を構成するには:

1. adf-config.xmlファイルを開きます。これは、「アプリケーション・リソース」パネルの「ディスクリプタ」の下のADF META-INFフォルダにあります。

2. 次の例に示すように、<metadata-namespaces>要素の下で、<namespace>要素が、サンドボックスの作成を有効にするすべてのメタデータに対して定義されていることを確認します。

adf-config.xmlファイルのネームスペースの定義

<!-- Your jspx customizations alone go here -->
<namespace path="/pages" metadata-store-usage="WebCenterFileMetadataStore">
<namespace-restriction type="CUSTOMIZATIONS"/>
</namespace>
<!-- Your pagedef customizations alone go here -->
<namespace path="/pageDefs" metadata-store-usage="WebCenterFileMetadataStore">
<namespace-restriction type="CUSTOMIZATIONS"/>
</namespace>

3. データベース・ストアを構成します。<<例を参照してください。

注意:

この手順は、WLS管理コンソールを使用してアプリケーションEARファイルをデプロイする予定がある場合にのみ実行してください。この構成は、アプリケーションのデプロイにFusion Middleware ControlまたはOracle JDeveloperを使用して、ターゲットMDS接続としてデータベース・リポジトリ接続を選択すると自動的に行われます。詳細は、『Oracle Fusion Middleware Oracle WebCenter Portalの管理』のWebCenterアプリケーションのデプロイに関する項を参照してください。

4. 次の例に示すように、<pe:sandbox-namespaces>要素を<pe:page-editor-config>セクション内に追加して、サンドボックスの作成を有効にするすべてのネームスペースの個別の<pe:namespace>タグを追加します。

サンドボックスの作成のためのネームスペースの構成

<pe:sandbox-namespaces>
<pe:namespace path="/pages"/>
<pe:namespace path="/pageDefs"/>
</pe:sandbox-namespaces>

5. adf-config.xmlファイルを保存します。

例28-1 adf-config.xmlファイルでのメタデータ・ストア構成

<metadata-store class-name="oracle.mds.persistence.stores.db.DBMetadataStore">
<property name="jdbc-userid" value="userone"/>
<property name="jdbc-password" value="userone123"/>
<property name="jdbc-url" value="jdbc:oracle:thin:@host_name:1521:orcl"/>
<property name="partition-name" value="partitionName"/>
</metadata-store>
<!-- <metadata-store class-name="oracle.mds.persistence.stores.file.FileMetadataStore">
<property name="metadata-path" value="C:\JDeveloper\mywork\Application2\ViewController\public_html"/>
</metadata-store> -->

28.2.1.2 アプリケーションのweb.xmlファイルの更新

ページの編集モードからサンドボックスが構成されたことを確認するには、アプリケーションのweb.xmlファイルでフィルタを作成し、適切なフィルタ・マッピングを設定する必要があります。すべてのリクエストがこのフィルタを通るようにルーティングされ、サンドボックスがすべての編集モードのカスタマイズに対して作成されます。ファイル・システムのメタデータ・ストアを使用している場合、フィルタされたリクエストに対して実行される処理はありません。

注意:

web.xmlで設定できるコンポーザ固有の構成の詳細は、「web.xml」を参照してください

この項では、コンポーザ固有のフィルタおよびその関連フィルタ・マッピングをアプリケーションのweb.xmlファイルで定義する例を提供します。ここでは、フィルタ(WebCenterComposerFilter)を追加する方法を説明します。

コンポーザ固有のフィルタおよびフィルタ・マッピングを定義するには:

1. application_root/Portal/public_html/WEB-INF/web.xmlファイルを開きます。

2. WebCenterComposerFilterを追加してからadfBindingsフィルタを追加します。

<filter>
<filter-name>composerFilter</filter-name>
<filter-class>oracle.adf.view.page.editor.webapp.WebCenterComposerFilter</filter-class>
</filter>

3. 次の例に示すように、対応する<filter-mapping>要素を追加してから、AdfBindingFilterのフィルタ・マッピングを追加します。

コンポーザ固有のフィルタのフィルタ・マッピング

<filter-mapping>
<filter-name>composerFilter</filter-name>
<servlet-name>Faces Servlet</servlet-name>
<dispatcher>FORWARD</dispatcher>
<dispatcher>REQUEST</dispatcher>
</filter-mapping>

<url-pattern>タグを使用してWebCenterComposerFilterを通過する必要があるページを指定し、ページが編集モードになったときにサンドボックスの作成を有効化できるようにします。

注意:

フィルタの定義順序が重要です。リクエストがこれらのフィルタで順番に渡されるので、適切な順序で定義されていないと、アプリケーションは設計されたように実行されません。web.xmlファイルではWebCenterComposerFilterを最初に実装してから、その後でAdfBindingFilterを実装する必要があります。

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

28.2.1.3 データベース・ストアへのメタデータの移行

ターゲット・サーバーでデータベース・ストアを使用していない場合は、まず、メタデータ・サービス(MDS)を使用して、ファイル・システムからデータベース・ストアにアプリケーション・メタデータを移行しておく必要があります。

これが必要になる理由は、アプリケーションのメタデータがデータベース・ストアに保存されている場合にのみ、コンポーザはサンドボックスを作成できるようになるためです。アプリケーションにデータベース・メタデータ・ストアが構成されていないと、サンドボックスは作成されなくなり、ページに加えたカスタマイズはMDSバックエンドにすぐにコミットされます。

MDSは、ファイル・システムからデータベース・ストアにカスタマイズを移行するためのmdstransferツールを提供しています。このツールを使用するには、例5-14に示すように、まず、ソース・ストアとターゲット・ストアに関する情報が含まれているパラメータ・ファイルを作成しておく必要があります。

例28-2 移行に使用するパラメータ・ファイル

<parameters version="11.1.1.000"  xmlns="http://xmlns.oracle.com/mds/config">
<source-store>
<metadata-store class-name="oracle.mds.persistence.stores.file.FileMetadataStore">
<property name="metadata-path" value="C:\JDeveloper\mywork\Application2\ViewController\public_html"/>
</metadata-store>
</source-store>
<target-store>
<metadata-store class-name="oracle.mds.persistence.stores.db.DBMetadataStore">
<property name="jdbc-userid" value="composerqa"/>
<property name="jdbc-password" value="composerqa"/>
<property name="jdbc-url" value="jdbc:oracle:thin:@10.177.254.62:1521:orcl"/>
<property name="partition-name" value="partitionName"/>
</metadata-store>
</target-store>
</parameters>

このファイル名は、次の例に示すように、mdstransferツールの実行時にソース・ディレクトリの名前とともに渡します。

mdstransfer "/test/**" --paramfile ToolsParamFile1.xml

testは、アプリケーション・メタデータのファイルとフォルダを格納しているディレクトリの名前です。

詳細は、MDSのドキュメントを参照してください。

注意:

- mdstransferツールは、MDSのドキュメントを参照して実行するようにしてください。このツールを実行するためのいくつかの前提条件が、ここでは説明されていない可能性があるためです。

- ランタイム・リソース・カタログのメタデータをデータベースに移行する場合は、移行するソースディレクトリにmds\oracle\webcenter\rc\default-catalog.xmlファイルを移動してください。たとえば、application_root/ViewController/public_html/test/。

28.2.1.4 アプリケーションのデータベース・ストアの選択

サンドボックスの作成を有効にするには、アプリケーションを構成しデータベース・ストアを使用する必要があります。したがって、アプリケーションをWebLogic管理対象サーバーにデプロイするときに、データベース・リポジトリを選択し、そのアプリケーションのパーティション名を指定します。

28.2.1.5 実行時のフル・ページ・リフレッシュの有効化

アプリケーションでサンドボックスの作成を有効にするとき、ページ編集モードに入るときとそのモードを終了するときにフル・ページ・リフレッシュが実行されるようにする必要があります。実行手順の詳細は、「サーブレットをリダイレクトしてMDSカスタマイズ・レイヤー間の切替えを有効にする方法」を参照してください。

28.2.2 実行時の処理内容

ユーザーがページ編集モードに切り替えたときに、コンポーザのツールバーに「保存」ボタンが表示されることで、そのアプリケーションはサンドボックスの作成が有効であるとわかります。ページまたはページの共有コンポーネントに対して行われた変更は、ユーザーが「保存」をクリックするまで保存されません。保存されると、すべてのアプリケーション・ユーザーがこのカスタマイズを使用できます。「保存」ボタンがレンダリングされない場合、サンドボックスを使用できず、各変更はすぐにコミットされます。

「コンポーネント・プロパティ」ダイアログでコンポーネント・プロパティを編集するとき、「適用」をクリックすると次のようになります。

- サンドボックスを使用できない場合、ページがリフレッシュされてコンポーネント・プロパティに対して行われた変更が表示され、変更はバック・エンドに保存されます。

- サンドボックスを使用できる場合、ページがリフレッシュされてコンポーネント・プロパティに対して行われた変更が表示されます。変更を保存するには、ユーザーは「保存」をクリックする必要があります。

ページで「保存」または「閉じる」をクリックすると、次のイベントが実行されます。

- 「保存」をクリックすると、サンドボックスがコミットされ、新しいサンドボックスが作成されます。ページは編集モードのままです。

- 「閉じる」をクリックすると、次の2つのイベントのいずれかが発生します。

- 最後の保存操作以降の変更がない場合は、サンドボックスが破棄され、コンポーザが閉じられて、ユーザーは表示モードに戻ります。

- 保存されていない変更がある場合、図28-1に示すように、クローズ確認ダイアログにページ名および保存されていないタスク・フロー名がリストされます。

図28-1 コンポーザの「クローズの確認」ダイアログ

ユーザーは、次のオプションから選択できます。

- 「保存」をクリックして、サンドボックスをコミットし、コンポーザを閉じます。

- 「保存しない」をクリックして、サンドボックスを破棄し、コンポーザを閉じます。

- 「取消」をクリックして、ダイアログを閉じ、変更を保存せずにコンポーザに戻ります。

注意:

ユーザーがページを編集中にページ外にナビゲートし、そのページに戻った場合、保存されていない変更は失われます。

並行編集時の処理

複数のユーザーが同じカスタマイズ・レイヤーを使用して同じページまたはタスク・フローを編集している場合、図28-2に示すように、別のユーザーがページまたはタスク・フローを編集しているというメッセージが、それぞれのユーザーのページに表示されます。

図28-2 ページの並行性メッセージ

複数のユーザーが同じカスタマイズ・レイヤーで同時にタスク・フローにズームインし、それを編集している場合、図28-3に示すように、並行処理メッセージが表示されます。

図28-3 タスク・フローの並行処理メッセージ

注意:

ユーザーがタスク・フローにズームインし、いくつかのカスタマイズを行い、タスク・フローからズームアウトした場合、そのユーザーがカスタマイズを保存するまで、タスク・フローの並行処理メッセージが他のユーザーに対して継続して表示されます。

最後に保存された変更は前の変更を上書きします。たとえば、ユーザーAとBがページまたはタスク・フローを同時に編集している場合、並行性の問題は次のように処理されます。

- Aが最初にページまたはタスク・フローを保存すると、Aの変更がMDSにコミットされます。その後、Bがページまたはタスク・フローを保存すると、Aの変更はBの変更で上書きされます。

- Bが表示モードでコンポーネントをパーソナライズ(たとえば移動)しようとしている間にAがその同じコンポーネントを削除すると、WebCenterのエラー・ページがBに表示されます。Bは、元のページにナビゲートして戻る必要があります。削除されたコンポーネントは表示されず、Bは他のコンポーネントで作業を継続できます。

28.2.3 アプリケーションのサンドボックスを無効にする方法

変更がすぐにバック・エンドにコミットされるようにするために、サンドボックスを無効にできます。

サンドボックスを無効にするには:

1. adf-config.xmlファイルを開きます。これは、「アプリケーション・リソース」パネルの「ディスクリプタ」の下のADF META-INFフォルダにあります。

2. <pe:page-editor-config>要素の下に<pe:disable-sandbox>属性を追加し、これをtrueに設定します。

3. adf-config.xmlを保存します。

28.2.4 失効したサンドボックスを破棄する方法

ユーザーが実行時にページを編集するとき、ブラウザが予期せずに閉じた場合またはユーザーがページ外にナビゲートした場合、そのセッションで使用されていたサンドボックスは使用可能なままです。同じページにアクセスしている他のユーザーには、同じページを別のユーザーが編集しているという並行処理メッセージが表示されたままになります。このような失効したサンドボックスを破棄して、データベース・ストアの領域を解放し、パフォーマンスを向上できます。

失効したサンドボックスが次の場合に破棄されるようにできます。

- セッションがタイムアウトした場合。
アプリケーションのweb.xmlファイルの<session-timeout>要素は、サンドボックスが破棄されるまでの期間を定義できます。これが確実に起こるようにするためには、アプリケーションのweb.xmlファイルでWebCenterComposerSessionListenerを構成する必要があります。このリスナーは、セッションがタイムアウトになるとコールされます。これは、同じユーザーがページ編集モードに入るときに新しいサンドボックスを作成します。

- ユーザーがページの編集モードに同じユーザー名で再ログインした場合。
この場合、同じユーザーが編集モードに切り替えると、新しいサンドボックスが作成されます。

WebCenterComposerSessionListenerを構成するには:

1. application_root/Portal/public_html/WEB-INF/web.xmlファイルを開きます。

2. 次の例に示すように、新しいリスナー(WebCenterComposerSessionListener)を定義します。

<listener>
<description>Composer Http Session Listener</description>
<display-name>Composer Http Session Listener</display-name>
<listener-class>
oracle.adf.view.page.editor.webapp.WebCenterComposerSessionListener
</listener-class>
</listener>

3. web.xmlファイルを保存します。

web.xmlで設定できるコンポーザ固有の構成の詳細は、「web.xml」を参照してください

28.3 カスタマイズ・レイヤーの表示モードおよび編集モードへの追加: 例

カスタマイズをクライアント定義の条件に基づいてメタデータ・オブジェクトに適用できます。たとえば、エンド・ユーザーの権限、アプリケーションのデプロイ場所(ローカライゼーションとも呼ばれる)または特定の産業分野に基づいて使用するアプリケーションおよびメタデータ・オブジェクトをカスタマイズできます。このような各カテゴリ(権限、ローカライゼーションおよび分野)は、カスタマイズ・レイヤーを指し、それぞれがCustomizationClassを使用して描写されます。CustomizationClassはインタフェースMDSで、ベース定義でオーバーレイされるカスタマイズ・レイヤーを特定するために使用されます。例については、「カスタムUserCCヒント・レイヤーの作成方法」を参照してください。

CustomizationClassを実装する場合、これをMDSで登録する必要もあります。MDSには、CustomizationClassタイプのリストを単一のMetadataObjectと関連付ける機能が用意されています。これは、ファイングレイン関連付けと呼ばれます。MDSには、CustomizationClassタイプのリストを一連のMetadataObjectsと関連付ける機能も用意されています。これは粗密な関連付けと呼ばれます。

カスタマイズ可能アプリケーションは、複数のカスタマイズ・レイヤーを持つことができます。カスタマイズを適用するレイヤーを選択できます。カスタマイズ先として選択したレイヤーは、ヒント・レイヤーと呼ばれます。コンポーザ・コンポーネントをJSFページにドロップすると、ADFは、アプリケーションにデフォルトのSiteCC (site)ヒント・レイヤーを構成します。その結果、adf-config.xmlファイルが更新され、SiteCCカスタマイズ・クラスを組み込みます。このヒント・レイヤーは、ページに対して行われたすべてのカスタマイズを格納します。

この項では、例を使用して、カスタマイズ・ヒント・レイヤーを表示実行時モードおよび編集実行時モードに追加すると、ユーザーのカスタマイズ機能がすべてのユーザーにどのように提供され、アプリケーションのカスタマイズ機能が選択したユーザーにどのように提供されるかを説明します。アプリケーションのカスタマイズを編集モードで有効にするために、siteヒント・レイヤーが追加されます。ユーザーのカスタマイズを表示モードで有効にするために、userヒント・レイヤーが追加されます。デフォルトでは、userヒント・レイヤーはsiteヒント・レイヤーの上に適用されます。userヒント・レイヤーは、表示モードで行われたすべてのユーザーのカスタマイズ内容を、カスタマイズを行ったユーザー用に作成された特定の場所に格納します。このような変更はそのユーザーにしか表示されません。siteヒント・レイヤーは、編集モードで行われたすべてのアプリケーションのカスタマイズを格納し、すべてのユーザーに対して表示されます。

実行時にヒント・レイヤーを有効にするために、コンポーザはWebCenterComposerFilterフィルタを提供し、MDS SessionOptionsオブジェクトを作成するための抽象ファクトリを定義する方法を提供しています。このオブジェクトでは、実行時に適用可能なカスタマイズ・レイヤーが提供され、ユーザーはロールに基づいてユーザーのカスタマイズ(表示モード)およびアプリケーションのカスタマイズ(編集モード)を実行できます。新しいMDSセッションを作成するとき、このオブジェクトのMDSSession.createSessionメソッドを使用して、セッションのオプションを指定します。

この項では、カスタマイズ・レイヤーを作成、実装および登録し、WebCenterComposerFilterを構成し、MDSカスタマイズ・レイヤー間で切り替える例を提供します。次のサブセクションが含まれます:

- JSFページへのコンポーザの追加方法

- カスタムSiteCCヒント・レイヤーの作成方法

- カスタムUserCCヒント・レイヤーの作成方法

- ComposerSessionOptionsFactoryクラスの実装方法

- コンポーザでの実装の登録方法

- WebCenterComposerFilterの構成方法

- サーブレットをリダイレクトしてMDSカスタマイズ・レイヤー間の切替えを有効にする方法

- 実行時の処理内容

28.3.1 JSFページへのコンポーザの追加方法

この項では、JSFページにPage Customizableコンポーネントを追加する方法を説明します。この演習の目的は、adminユーザーがサイト・レベルでカスタマイズを実行できるように、実行時に編集モードのコンポーザを提供することです。この項では、実行時に表示モードから編集モードへの切替えを可能にするために、Change Mode Linkを追加します。

JSFページにコンポーザを追加するには:

1. JSPXページを開き、「コンポーネント・パレット」から「コンポーザ」を選択します。

2. Change Mode Linkを選択し、これをページにドロップします。

3. Page Customizableを選択し、これをページにドロップします。

「ソース」ビューは次のようになります。

<af:form id="f1">
<pe:changeModeLink id="cml1"/>
<pe:pageCustomizable id="pageCustomizable1">
<cust:panelCustomizable id="panelCustomizable1" layout="scroll"/>
<f:facet name="editor">
<pe:pageEditor id="pep1"/>
</f:facet>
</pe:pageCustomizable>
</af:form>

これらのコンポーネントをページにドロップすると、デフォルトのSiteCCヒント・レイヤーがADFによって拡張されます。その結果、adf-config.xmlファイルがこのカスタマイズ・クラスで更新されます。

<cust-config>
<match>
<customization-class name="oracle.adf.share.config.SiteCC" />
</match>
</cust-config>

注意:

アプリケーションでUserCCをデフォルトのヒント・レイヤーとして使用する場合、adf-config.xmlファイルのcust-configセクションで、単純にoracle.adf.share.config.SiteCCをoracle.adf.share.config.UserCCに置き換えます。ただし、UserCCをデフォルトのヒント・レイヤーとして使用するには、アプリケーションを保護してある必要があります。アプリケーションでユーザーおよびロールをプロビジョニングしないと、UserCCヒント・レイヤーを実装できません。

28.3.2 カスタムSiteCCヒント・レイヤーの作成方法

この項では、編集モードで実行されたすべてのアプリケーション・レベルのカスタマイズ内容が格納される、カスタムSiteCCヒント・レイヤー(site)を作成する方法を説明します。このサンプル・アプリケーションでは、アプリケーション・レベルのカスタマイズ内容は、/mds/mdssys/cust/site/webcenter/pagename.jspx.xmlディレクトリに格納されます。

siteヒント・レイヤーを作成するには:

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

2. 「新規ギャラリ」ダイアログで、「一般」を開き、「Java」、「Javaクラス」の順に選択して、「OK」をクリックします。

「Javaクラスの作成」ダイアログが開きます。

3. 「名前」フィールドに、「SiteCC」と入力します。

4. 「拡張対象」フィールドにCustomizationClassと入力します。

これにより、oracle.mds.cust.CustomizationClassをインポートします。

「抽象メソッドの実装」チェック・ボックスが選択されていることを確認します。

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

SiteCC.javaファイルは「ソース」ビューにレンダリングされます。

6. 「ソース」ビューで、public class SiteCC extends CustomizationClassの後に[Enter]を押し、次の文字列を追加します。

{
private static final String DEFAULT_LAYER_NAME = "site";
private String mLayerName = DEFAULT_LAYER_NAME;
private String mLayerValue = "webcenter";

次のライブラリがインポートされます。

import oracle.mds.core.MetadataObject;
import oracle.mds.core.RestrictedSession;
import oracle.mds.cust.CacheHint;

7. ここで太字で示したようにコードを更新します。

public class SiteCC extends CustomizationClass
{
private static final String DEFAULT_LAYER_NAME = "site";
private String mLayerName = DEFAULT_LAYER_NAME;
private String mLayerValue = "webcenter";
//Note: You can provide any site name.

public CacheHint getCacheHint()
{
return CacheHint.ALL_USERS;
}

public String getName()
{
return mLayerName;
}

public String[] getValue(RestrictedSession mdsSession, MetadataObject mo)
{
return new String[] { mLayerValue };
}
}

8. SiteCC.javaファイルを保存します。

28.3.3 カスタムUserCCヒント・レイヤーの作成方法

この項では、ユーザーscott用のカスタムuserヒント・レイヤーを作成する方法を示す例を説明します。このレイヤーはsiteレイヤーの上に適用されます。表示モードでユーザーが実行するユーザーのカスタマイズは、ログイン・ユーザー専用に作成されたフォルダのこのuserヒント・レイヤーに保存されます。この例では、表示モードで実行したユーザーのカスタマイズ内容は、/mds/mdssys/cust/user/scott/pagename.jspx.xmlディレクトリに格納されます。

注意:

説明上の目的のため、この例では、UserCCヒント・レイヤーが1人のユーザー(scott)のみのために作成される単純なシナリオを説明します。実際のアプリケーションでは、UserCCレイヤーを構成して、このページをリクエストしたユーザーの名前を返すことができます。

userヒント・レイヤーを作成するには:

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

2. 「新規ギャラリ」ダイアログで、「一般」を開き、「Java」、「Javaクラス」の順に選択して、「OK」をクリックします。

「Javaクラスの作成」ダイアログが開きます。

3. 「名前」フィールドに、「UserCC」と入力します。

4. 「拡張対象」フィールドにCustomizationClassと入力します。

こうすることによってoracle.mds.cust.CustomizationClassがインポートされます。

「抽象メソッドの実装」チェック・ボックスが選択されていることを確認します。

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

「ソース」ビューにUserCC.javaファイルが表示されます。

6. 「ソース」ビューで、public class UserCC extends CustomizationClassの後に[Enter]を押し、次の文字列を追加します。

{
private static final String DEFAULT_LAYER_NAME = "user";
private String mLayerName = DEFAULT_LAYER_NAME;
private String mLayerValue = "scott"; //The name of the logged-in user
in this example. The logged-in user name can be acquired dynamically.

次のライブラリがインポートされます。

import oracle.mds.core.MetadataObject;
import oracle.mds.core.RestrictedSession;
import oracle.mds.cust.CacheHint;

7. ここで太字で示したようにコードを更新します。

public class UserCC extends CustomizationClass
{
private static final String DEFAULT_LAYER_NAME = "user";
private String mLayerName = DEFAULT_LAYER_NAME;
private String mLayerValue = "scott";

public CacheHint getCacheHint()
{
return CacheHint.USER;
}

public String getName()
{
return mLayerName;
}

public String[] getValue(RestrictedSession mdsSession, MetadataObject mo)
{
return new String[]{mLayerValue};
}
}

8. UserCC.javaファイルを保存します。

28.3.4 ComposerSessionOptionsFactoryクラスの実装方法

この項では、ADFが提供するComposerSessionOptionsFactoryクラスが実装され、MDS SessionOptionsを各HTTPリクエストに提供します。

ComposerSessionOptionsFactoryクラスを実装するには:

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

2. 「新規ギャラリ」ダイアログで、「一般」を開き、「Java」、「Javaクラス」の順に選択して、「OK」をクリックします。
「Javaクラスの作成」ダイアログが開きます。

3. 「名前」フィールドにAppsSessionOptionsFactoryImplと入力します。

4. 「OK」をクリックします。
AppsSessionOptionsFactoryImpl.javaファイルが「ソース」ビューにレンダリングされます。

5. 次のライブラリをインポートします。

import oracle.adf.view.page.editor.mds.ComposerSessionOptionsFactory;
import oracle.adf.view.page.editor.mode.ModeContext;
import oracle.mds.config.CustClassListMapping;
import oracle.mds.config.CustConfig;
import oracle.mds.core.SessionOptions;
import oracle.mds.cust.CustClassList;
import oracle.mds.cust.CustomizationClass;

6. 次のコードを追加してComposerSessionOptionsFactoryクラスを実装し、SessionOptionsを渡します。

public class AppsSessionOptionsFactoryImpl
implements ComposerSessionOptionsFactory
{

public SessionOptions createSessionOptions(SessionOptions defaultSessionOptions, String mode)
{
CustomizationClass[] custLayer;
CustConfig custConfig = null;

if (ModeContext.EDIT_MODE.equals(mode))
{
//Mode is Edit, change to SiteCC
custLayer = EDIT_LAYER;
}
else
{
//Mode is View, change to UserCC + SiteCC
custLayer = VIEW_LAYER;
}

try
{
CustClassList custClassList = new CustClassList(custLayer);
CustClassListMapping custClassListMapping =
new CustClassListMapping("/", null, null, custClassList);
custConfig = new CustConfig(new CustClassListMapping[]
{ custClassListMapping });
}
catch (Exception e)
{
e.printStackTrace();

}
if(defaultSessionOptions.getServletContextAsObject() != null){
return new SessionOptions(defaultSessionOptions.getIsolationLevel(),
defaultSessionOptions.getLocale(), custConfig,
defaultSessionOptions.getVersionContext(),
defaultSessionOptions.getVersionCreatorName(),
defaultSessionOptions.getCustomizationPolicy(),
defaultSessionOptions.getServletContextAsObject());
}
else
{
return new SessionOptions(defaultSessionOptions.getIsolationLevel(),
defaultSessionOptions.getLocale(), custConfig,
defaultSessionOptions.getVersionContext(),
defaultSessionOptions.getVersionCreatorName(),
defaultSessionOptions.getCustomizationPolicy());
}
}

//Edit mode SiteCC
private static final CustomizationClass[] EDIT_LAYER =
new CustomizationClass[]
{ new SiteCC() };

//View mode SiteCC + USerCC
private static final CustomizationClass[] VIEW_LAYER =
new CustomizationClass[]
{ new SiteCC(), new UserCC() };

}

7. AppsSessionOptionsFactoryImpl.javaファイルを保存します。

28.3.5 コンポーザでの実装の登録方法

siteカスタマイズ・レイヤーおよびuserカスタマイズ・レイヤーを機能させるには、コンポーザにComposerSessionOptionsFactoryクラスを登録する必要があります。たとえば、具体的なクラスがview.AppsSessionOptionsFactoryImplの場合、次のスニペットをアプリケーション・ディレクトリの/.adf/META-INFフォルダにあるadf-config.xmlファイルに追加する必要があります。

<pe:page-editor-config xmlns="http://xmlns.oracle.com/adf/pageeditor/config">
<pe:session-options-factory>view.AppsSessionOptionsFactoryImpl</pe:session-options-factory>
</pe:page-editor-config>

28.3.6 WebCenterComposerFilterの構成方法

アプリケーション・ディレクトリのPortal/public_html/WEB-INFフォルダにあるweb.xmlファイルのWebCenterComposerFilterフィルタを構成する必要があります。このフィルタは、すべてのHTTPリクエストについてコンポーザの具体的なSessionOptionsFactoryをADFに登録します。フィルタがADFからコールを受信すると、リクエストをアプリケーションに転送し、新しくカスタマイズされたレイヤーでSessionOptionsを取得します。SessionOptionsでSandboxまたはVersionContextを設定していない場合、コンポーザは専用のサンドボックスを設定して、それをADFに返します。サンドボックスの詳細は、「コンポーザのサンドボックスの作成を有効にする方法」を参照してください。

composerFilterとそのフィルタ・マッピングは、ADFBindingFilterより前に構成する必要があります。たとえば、次のweb.xmlファイルを参照してください。

....

<!-- WebCenterComposerFilter goes here -->
<filter>
<filter-name>composerFilter</filter-name>
<filter-class>oracle.adf.view.page.editor.webapp.WebCenterComposerFilter</filter-class>
</filter>
<filter>
<filter-name>adfBindings</filter-name>
<filter-class>oracle.adf.model.servlet.ADFBindingFilter</filter-class>
</filter>
.....
<!-- WebCenterComposerFilter mapping goes here -->
<filter-mapping>
<filter-name>composerFilter</filter-name>
<servlet-name>Faces Servlet</servlet-name>
<dispatcher>FORWARD</dispatcher>
<dispatcher>REQUEST</dispatcher>
</filter-mapping>
<filter-mapping>
<filter-name>adfBindings</filter-name>
<servlet-name>Faces Servlet</servlet-name>
<dispatcher>FORWARD</dispatcher>
<dispatcher>REQUEST</dispatcher>
</filter-mapping>
....

注意:

フィルタの定義順序が重要です。リクエストがこれらのフィルタで順番に渡されるので、適切な順序で定義されていないと、アプリケーションは設計されたように実行されません。web.xmlファイルではWebCenterComposerFilterを最初に実装してから、その後でAdfBindingFilterを実装する必要があります。

web.xmlで設定できるコンポーザ固有の構成の詳細は、「web.xml」を参照してください。

28.3.7 サーブレットをリダイレクトしてMDSカスタマイズ・レイヤー間の切替えを有効にする方法

サーブレットをリダイレクトする、つまり実行時にフル・ページをリフレッシュするには、次のものを作成する必要があります。

- AppNavigationUtils.redirectToSamePage()メソッドをコールするAppNavigationUtilsクラス

- AppNavigationUtilsクラスを使用するAppCloseHandler CloseListener

- 編集モードを表示するAppModeBean

この項では、これらのオブジェクトの作成方法を説明します。次のサブセクションが含まれます:

- AppNavigationUtilsクラスの作成方法(ここから開始)

- AppCloseHandlerの作成方法

- AppCloseHandlerの登録方法

- AppModeBeanの作成方法

28.3.7.1 AppNavigationUtilsクラスの作成方法(ここから開始)

AppNavigationUtilsクラスを作成するには:

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

2. 「新規ギャラリ」ダイアログで、「一般」を開き、「Java」、「Javaクラス」の順に選択して、「OK」をクリックします。

「Javaクラスの作成」ダイアログが開きます。

3. 「名前」フィールドに、AppNavigationUtilsと入力し、「OK」をクリックします。

AppNavigationUtils.javaファイルは「ソース」ビューにレンダリングされます。

4. 次のライブラリをインポートします。

import javax.faces.context.FacesContext;
import javax.servlet.http.HttpServletRequest;

5. 次のコードを追加します。

public class AppNavigationUtils
{

public static void redirectToSamePage()
{
HttpServletRequest request =
(HttpServletRequest)FacesContext.getCurrentInstance().getExternalContext().getRequest();
String url = request.getRequestURL().toString();
String _adfCtrlState = request.getParameter("_adf.ctrl-state");
url = url + "?_adf.ctrl-state="+ _adfCtrlState;
System.out.println(url);
try
{
FacesContext.getCurrentInstance().getExternalContext().redirect(url);
FacesContext.getCurrentInstance().responseComplete();
}
catch(Exception e)
{
e.printStackTrace();
}
}
}

6. AppNavigationUtils.javaファイルを保存します。

28.3.7.2 AppCloseHandlerの作成方法

AppCloseHandlerを作成するには:

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

2. 「新規ギャラリ」ダイアログで、「一般」を開き、「Java」、「Javaクラス」の順に選択して、「OK」をクリックします。

「Javaクラスの作成」ダイアログが開きます。

3. 「名前」フィールドに、AppCloseHandlerと入力し、「OK」をクリックします。

「ソース」ビューにAppCloseHandler.javaファイルが表示されます。

4. 次のライブラリをインポートします。

import oracle.adf.view.page.editor.event.CloseEvent;
import oracle.adf.view.page.editor.event.CloseListener;

5. 次のコードを追加します。

public class AppCloseHandler
implements CloseListener
{

public void processClose(CloseEvent closeEvent)
{
AppNavigationUtils.redirectToSamePage();
}
}

6. AppCloseHandler.javaファイルを保存します。

28.3.7.3 AppCloseHandlerの登録方法

AppCloseHandlerの作成後、これをコンポーザ拡張ファイルpe_ext.xmlに登録する必要があります。

このイベント・ハンドラを登録するには:

1. pe_ext.xmlファイルで、次のエントリを追加します。

<event-handlers>
<event-handler event="close">view.AppCloseHandler</event-handler>
</event-handlers>

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

イベント・ハンドラの詳細は、「コンポーザUIイベントのイベント・ハンドラの構成」を参照してください。

28.3.7.4 AppModeBeanの作成方法

AppModeBeanを作成するには:

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

2. 「新規ギャラリ」ダイアログで、「一般」を開き、「Java」、「Javaクラス」の順に選択して、「OK」をクリックします。

「Javaクラスの作成」ダイアログが開きます。

3. 「名前」フィールドに、AppModeBeanと入力し、「OK」をクリックします。

「ソース」ビューにAppModeBean.javaファイルが表示されます。

4. 次のライブラリをインポートします。

import javax.faces.event.ActionEvent;import oracle.adf.view.page.editor.mode.ModeContext;

5. 次のコードを追加します。

public class AppModeBean
{

public void edit(ActionEvent actionEvent)
{
ModeContext.getCurrent().setEditMode();
AppNavigationUtils.redirectToSamePage();
}
}

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

28.3.8 実行時の処理内容

siteカスタマイズ・レイヤーの機能を確認するには、まずブラウザでJSFページを実行します。次に、ページにadminとしてログインし、「編集」リンクをクリックして編集モードに切り替えます。実行時、ページをカスタマイズします。たとえば、Webページ、移動可能ボックスまたはイメージをページにドロップします。ページは図28-4のようになります。

図28-4 カスタマイズされたページ

アプリケーション・ディレクトリの/mds/mdssys/cust/site/webcenterに移動し、pagename.jspx.xmlファイルを開きます。これは、ページに対して実行したアプリケーション・レベルのカスタマイズが格納される場所です。

userカスタマイズ・レイヤーを使用するには、ページにscottとしてログインし、表示モードでページをパーソナライズします。次にアプリケーション・ディレクトリの/mds/mdssys/cust/user/scottに移動し、pagename.jspx.xmlファイルを開きます。これは、ページに対して実行したユーザーレベルのカスタマイズが格納される場所です。

28.4 コンポーザを使用したMDS関連の問題のトラブルシューティング

この項では、コンポーザの使用中に発生する可能性のあるMDS関連の問題をトラブルシューティングする際に役立つ情報を提供します。

ロギングの構成の詳細は、「コンポーザのADFロギングの構成」を参照してください。

問題

アプリケーションはMDSサンドボックスを使用するように構成されています。アプリケーションを実行すると、サンドボックスは動作せず、また例外も生成しません。

解決策

次の点を確認してください。

- データベース・リポジトリが使用されています。サンドボックスは、データベース・ベースのリポジトリでのみ動作し、ファイルベースのリポジトリでは動作しません。

- web.xmlのフィルタの順序が正確です。サンドボックスが正しく動作するためには、<filter>エントリが正しい順序である必要があります。

詳細は、「コンポーザのサンドボックスの使用」を参照してください。

29 コンポーザ・コンポーネントのデフォルトのセキュリティ動作の変更

この章では、コンポーザ・コンポーネントのデフォルトのセキュリティ動作をオーバーライドする方法について説明します。

この章のトピックは、次のとおりです:

- カスタマイズ・ポリシーの定義によるコンポーネント・レベルの制限の適用

- セキュリティ・ロールの使用によるコンポーネント・インスタンス・レベルのカスタマイズ制限の適用: 例

- customizationAllowed属性を使用したタグ・レベルのセキュリティの適用

- 属性レベルのセキュリティの適用

- Panel CustomizableおよびShow Detailコンポーネント・アクションでのアクション・レベルの制限の適用

- タスク・フローのセキュリティの実装

- コンポーザのデフォルト・セキュリティ・ポリシーの上書き

- コンポーザのコンポーネント・セキュリティでの問題のトラブルシューティング

29.1 カスタマイズ・ポリシーの定義によるコンポーネント・レベルの制限の適用

デフォルトで、MDSはページ・コンポーネントのアプリケーション・カスタマイズを制限します。つまり、ユーザーは実行時にコンポーネントまたはその属性をカスタマイズできません。アプリケーション・カスタマイズを有効にするには、コンポーネントおよびその属性のデフォルト制限を解除する必要があります。Page Customizableコンポーネントをページに追加し、それにコンテンツを移入する場合、Page Customizableおよびそのすべての子コンポーネントのデフォルトのカスタマイズ制限が解除されます。ただし、Page Customizableコンポーネントがテンプレートの一部である場合などのインスタンスによっては、コンポーネントおよびその属性のアプリケーション・カスタマイズを明示的に許可する必要がある場合があります。この項では、コンポーネントおよびその属性にMDSのタイプ・レベルの制限またはインスタンス・レベルの制限を適用する方法について説明します。

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

- タイプ・レベルのカスタマイズ・ポリシーの定義方法

- インスタンス・レベルのカスタマイズ・ポリシーの定義方法

注意:

ページ・テンプレートを使用したカスタマイズ可能ページの作成の詳細は、「カスタマイズ可能ページを作成するページ・テンプレートの作成方法」を参照してください。

29.1.1 タイプ・レベルのカスタマイズ・ポリシーの定義方法

コンポーネントにタイプ・レベルの制限を適用する場合は、そのコンポーネントのすべてのインスタンスが制限されます。これは、ユーザーの特定の集合のみに特定のコンポーネントまたはその属性の編集を許可し、他のすべてのユーザーにそれの編集を制限する場合に便利です。たとえば、ページ作成者またはアプリケーション管理者のみに実行時のページ・レイアウトの変更を許可する場合は、タイプ・レベルの制限をLayout Customizableコンポーネントに対して定義し、adminロールを有するユーザーのみにこのコンポーネントの編集を可能にできます。

スタンドアロンXMLファイルのコンポーネントおよびその属性に対してタイプ・レベルの制限を有効化し、このファイルをadf-config.xmlファイルのmds-configセクションまたはmds-config.xmlファイルに登録できます。スタンドアロンXMLファイルには、カスタマイズ制限を指定する必要があるタイプに一致する注釈が含まれています。

mds-config.xmlファイルをアプリケーションのMETA-INFディレクトリに作成し、スタンドアロン・ファイルをmds-config.xmlファイルに登録できます。

選択したコンポーネントまたは属性のアプリケーション・カスタマイズをタイプ・レベルで可能にするには:

1. standalone.xmlなど、XMLドキュメントを作成して次のコードを追加し、太字のテキストを適切な値に置き換えます。

<?xml version="1.0" encoding="UTF-8" ?>
<grammarMetadata xmlns="http://xmlns.oracle.com/bali/xml/metadata"
xmlns:mds="http://xmlns.oracle.com/mds"
namespace="tag_namespace">
<elementMetadata elementName="component_name">
<mds:customizationAllowed>true</mds:customizationAllowed>
<attributeMetadata attributeName="attribute_name">
<mds:customizationAllowedBy>security_roles</mds:customizationAllowedBy>
</attributeMetadata>
</elementMetadata>
</grammarMetadata>

<customizationAllowedBy>タグを使用できるのは一度のみです。宣言の一部に、許可されるポリシーの空白区切りのリストとして、複数の値を指定できます。特定のユーザーまたはロールに対してアプリケーション・カスタマイズを有効または無効にするには、そのユーザーまたはロールをMDSセッションのカスタマイズ・ポリシーに含める必要があります。詳細は、「カスタマイズ・ポリシーを含めるためのSessionOptionsオブジェクトのカスタマイズ方法」を参照してください。

<customizationAllowed>タグは、値にブールを使用します。このタグの値がtrueの場合は、継承されたその他のカスタマイズ・ポリシーで許可されていれば、指定されたコンポーネントを誰でもカスタマイズできることを意味します。

同じオブジェクトが<customizationAllowed>false</customizationAllowed>でタグ付けされている場合には、<customizationAllowedBy>タグは機能しません。また、カスタマイズは、オブジェクト・ツリーの最上位レベルで許可される必要があります。そうしない場合は、デフォルトの動作で、カスタマイズを下位レベルで許可しないことが指定されます。

2. 次のいずれかの方法で、このXMLファイルを登録します。

XMLファイルをadf-config.xmlファイルに登録するには、次の形式を使用してtype-config要素をmds-configセクション内に追加します。

<mds-config xmlns="http://xmlns.oracle.com/mds/config">
<type-config>
<standalone-definitions>
<classpath>File_Path/standalone.xml</classpath>
</standalone-definitions>
</type-config>
</mds-config>

mds-config.xmlファイルをアプリケーションのMETA-INFフォルダに作成し、次の形式でtype-config要素をファイルのmds-component-configセクション内に追加します。

<?xml version="1.0" encoding="UTF-8" ?>
<mds-component-config version="11.1.1.000" xmlns="http://xmlns.oracle.com/mds/config">
<type-config>
<standalone-definitions>
<classpath>File_Path/standalone.xml</classpath>
</standalone-definitions>
</type-config>
</mds-component-config>

3. スタンドアロン・ファイルおよび関連付けられたXSDを共有ライブラリJARファイルで使用可能にします。そうしないと、MDSでそれらがロードされません。

実行時に、MDSでは、META-INFディレクトリ内のすべてのmds-configインスタンスが検索され、スタンドアロン・ファイルで指定されたすべてのカスタマイズ制限がロードされます。

29.1.2 インスタンス・レベルのカスタマイズ・ポリシーの定義方法

インスタンス・レベルの制限は、コンポーネントの特定インスタンスのカスタマイズを許可または制限する場合に便利です。インスタンス・レベルのカスタマイズ・ポリシーのコードは、タイプ・レベルのポリシー定義で使用されるコードと似ています。ただし、インスタンス・レベルのポリシーは、タイプ・レベルのポリシーをオーバーライドします。つまり、インスタンス・レベルの制限では、タイプからの制限に関係なく、trueが保持されます。たとえば、ログイン・ページ、およびユーザー・プリファレンス・ページなどの他のページで、いくつかのUI要素があるフォームを使用している場合は、ユーザーに、ログイン・ページ上以外のフォームのすべてのインスタンスをカスタマイズすることを許可できます。このためには、タイプ・レベルでフォームのカスタマイズを許可して、ログイン・ページ内のインスタンスにのみカスタマイズを制限できます。

コンポーネントまたはその属性のカスタマイズをインスタンス・レベルで可能にできます。コンポーネント・レベルでカスタマイズ制限を適用するために、コンポーネントのcustomizationAllowed属性とcustomizationAllowedBy属性をJDeveloperで設定できます(「タイプ・レベルのカスタマイズ・ポリシーの定義方法」を参照)。コンポーネントの属性に制限を適用するには、この項で説明した手順を実行します。

コンポーネント属性のためのインスタンス・レベルのポリシーはRDFファイルで定義します。RDFファイルはMDSによって取得され、ポリシーが実装されます。

インスタンス・レベルのカスタマイズ・ポリシーを定義するには:

1. JSPXファイルと同じ名前で、拡張子RDFを使用して、RDFファイル(main.jspx.rdfなど)を作成します。

このファイルはapplication_home/project/public_html/mdssys/mdxフォルダに作成します。このフォルダ構造にRDFファイルを作成すると、MDSによりファイルが取得され、ここで定義したポリシーが実装されます。

2. コンポーネントの属性に制限を適用するには、次の形式でタグを含めます。

tag_id(xmlns(tag_prefix=tag_namespace))/@tag_prefix:attribute_name

次の例は、Go Image Linkコンポーネント、およびCommand Buttonコンポーネントのtext属性に制限を適用する方法を示しています。

<?xml version="1.0" encoding="UTF-8"?>
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/">
<rdf:Description rdf:about="/"/>
<!-- Opens the customization on a tag with ID 'gil1'.  -->
<rdf:Description rdf:about="gil1">
<customizationAllowed xmlns="http://xmlns.oracle.com/mds">false</customizationAllowed>
</rdf:Description>

<!-- Restricts customizations on a commandButton component's 'text' attribute. -->
<rdf:Description rdf:about="cb1/@text">
<customizationAllowed xmlns="http://xmlns.oracle.com/mds">false</customizationAllowed>
</rdf:Description>

実行時に、これらのポリシーが読み取られ、それに応じてアーチファクトのカスタマイズも可能になります。

29.2 セキュリティ・ロールの使用によるコンポーネント・インスタンス・レベルのカスタマイズ制限の適用: 例

この項では、様々なユーザー・ロールおよび責任に基づいて、特定のコンポーネント機能へのアクセスを制限するためにどのようにコンポーネント・レベルの制限を使用できるかを説明します。特に、インスタンス・レベルのカスタマイズ制限をPanel Customizableコンポーネントに適用して、adminロールを有するユーザーのみにカスタマイズ・アクセスを提供する方法を説明します。つまり、adminロールを有するユーザーが実行時にシステムにログインする場合、ユーザーはインスタンス・レベルのカスタマイズが適用されたPanel Customizableをカスタマイズできます。

コンポーザの「プロパティ・インスペクタ」では、admin権限がないユーザーにはPanel Customizableのプロパティが表示されません。制限されたコンポーネントでは、「編集」アイコンまたはメニュー・アイテムは無効です。これらのユーザーは、適用された制限のため、どのMovable BoxもPanel Customizableにドロップできません。また、このPanel Customizable内のShow Detail Frameを再配置できません。

ユーザー・ロールに基づいて機能を制限することは、カスタマイズ制限を適用するための1つの方法です。コンポーネント機能へのアクセスを有効化または制限するために、ロール・ベースの結果を提供するExpression Language式(EL)を使用することもできます。

注意:

MDSのカスタマイズ制限は、SplitterおよびshowDetailItemなどのADF Facesコンポーネントではなく、Panel Customizable、Show Detail FrameおよびLayout Customizableコンポーネントによってのみネイティブで受け入れられます。

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

- ADFセキュリティの構成方法

- jazn-data.xmlファイルでのロールの定義方法と権限の付与方法

- カスタマイズ・ポリシーを含めるためのSessionOptionsオブジェクトのカスタマイズ方法

- コンポーザでの実装の登録方法

- WebCenterComposerFilterの構成方法

- インスタンス・レベルのカスタマイズ制限の適用方法

- 実行時の処理内容

29.2.1 ADFセキュリティの構成方法

インスタンス・レベルのカスタマイズ制限を適用する前に、ADFセキュリティを使用してアプリケーションを保護する必要があります。詳細は、『Oracle Application Development FrameworkによるFusion Webアプリケーションの開発』のADFセキュリティの有効化に関する項を参照してください。

29.2.2 jazn-data.xmlファイルでのロールの定義方法と権限の付与方法

前の項では、実行時に、adminロールを有するユーザーのみがPanel Customizableのすべての機能にアクセスして、その属性をカスタマイズできるよう、Panel Customizableコンポーネントにカスタマイズ制限が適用されます。

この項では、adminおよびcustomerという2つのロールが作成され、両方のユーザーにページ権限が付与されます。adminロールを有するユーザーは、Panel Customizable (panelCustomizable1)コンポーネントをカスタマイズできます。ただし、前の項で適用したカスタマイズ制限のため、customerロールを有するユーザーはpanelCustomizable1をカスタマイズする権限がなく、これらのユーザーはpanelCustomizable1のすべての機能は使用できません。

jazn-data.xmlファイルでロールを作成するには:

1. 「アプリケーション・リソース」パネルで、jazn-data.xmlファイルを右クリックして「開く」を選択します。

2. 「アプリケーション・ロール」タブをクリックします。

3. 「アプリケーション・ロール」ページで、図29-1に示すように、「ロール」セクションの「追加」アイコンをクリックして、「新しいロールの追加」を選択します。

図29-1 jazn-data.xmlファイルのアプリケーション・ロール

4. 「名前」フィールドで、ロール名adminを指定します。

5. オプションで、「表示名」フィールドおよび「説明」フィールドで、新しいロールのための表示名および説明を指定します。

6. 手順3から6を繰り返し、別のロールcustomerを追加します。

7. 「ユーザー」タブをクリックします。

8. 「ユーザー」ページで、「新規ユーザー」アイコンをクリックし、資格証明を指定して新規ユーザーを作成します。これらのユーザーにロールを割り当てます。このためには、図29-2に示すように、「割当済ロール」セクションの「ロールの割当て」アイコンをクリックし、「アプリケーション・ロールの割当て」を選択します。

図29-2 jazn-data.xmlファイル内の「ユーザー」セクション

9. ページの左側にある「リソース権限」タブをクリックします。

10. 「リソース・タイプ」から、「Webページ」を選択します。

11. ページ定義のリストから、権限を付与するページを選択します。

12. 「付与先」列で、図29-3に示すように、「権限受領者の追加」アイコンをクリックして、リストから「アプリケーション・ロールの追加」を選択します。

図29-3 jazn-data.xmlファイルのリソース

13. 「ロールの選択」ダイアログで(図29-4)、adminロールおよびcustomerロールを選択し、「OK」をクリックします。

図29-4 「ロールの選択」ダイアログ

14. それぞれのロールを選択し、図29-5に示すように、すべての権限(カスタマイズ、付与、パーソナライズおよび表示)を付与します。

図29-5 jazn-data.xmlファイル内の権限リスト

ユーザーとロールの作成の詳細は、『Oracle Fusion Middleware Oracle Application Development FrameworkによるFusion Webアプリケーションの開発』の「Fusion WebアプリケーションでのADFセキュリティの有効化」の章を参照してください。

29.2.3 カスタマイズ・ポリシーを含めるためのSessionOptionsオブジェクトのカスタマイズ方法

adminロールを有するユーザーのみがPanel Customizableのすべての機能にアクセスできるという、Panel Customizableコンポーネントの予期された実行時動作(それをカスタマイズする機能を含む)を可能にするには、このリクエストのためのMDSセッションにおいてそのカスタマイズ・ポリシーにそのユーザー・ロールを含める必要があります。これを実現するには、次のカスタマイズ・ポリシーをSessionOptionsオブジェクトに含めます。

SecurityContext stx = ADFContext.getCurrent().getSecurityContext();
cPol = new CustomizationPolicy(stx.getUserRoles());

次に、このカスタマイズ・ポリシーを持つMDSセッションが作成されます。

ComposerSessionOptionsFactoryクラスを実装するには:

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

2. 「新規ギャラリ」ダイアログで、「一般」を開き、「Java」、「Javaクラス」の順に選択して、「OK」をクリックします。

3. 「Javaクラスの作成」ダイアログの「名前」フィールドに、AppsSessionOptionsFactoryImplと入力します。

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

AppsSessionOptionsFactoryImpl.javaファイルが「ソース」ビューにレンダリングされます。

5. 次のライブラリをインポートします。

import oracle.adf.share.ADFContext;
import oracle.adf.share.security.SecurityContext;
import oracle.adf.view.page.editor.mds.ComposerSessionOptionsFactory;
import oracle.adf.view.page.editor.mode.ModeContext;
import oracle.mds.config.CustClassListMapping;
import oracle.mds.config.CustConfig;
import oracle.mds.core.SessionOptions;
import oracle.mds.cust.CustClassList;
import oracle.mds.cust.CustomizationClass;
import oracle.mds.cust.CustomizationPolicy;

6. 次のコードを追加してComposerSessionOptionsFactoryクラスを実装し、SessionOptionsを渡します。

public class AppsSessionOptionsFactoryImpl
implements ComposerSessionOptionsFactory
{
public AppsSessionOptionsFactoryImpl()
{
}
public SessionOptions createSessionOptions(SessionOptions sessionOptions,
String mode)
{    CustomizationClass[] custLayer;
CustConfig custConfig = null;
CustomizationPolicy cPol = null;
if (ModeContext.EDIT_MODE.equals(mode))
{
//Mode is Edit, change to SiteCC
custLayer = EDIT_LAYER;
}
else
{
//Mode is View, change to UserCC + SiteCC
custLayer = VIEW_LAYER;
}
try
{
CustClassList custClassList = new CustClassList(custLayer);
CustClassListMapping custClassListMapping =
new CustClassListMapping("/", null, null, custClassList);
custConfig = new CustConfig(new CustClassListMapping[]
{ custClassListMapping });
SecurityContext stx = ADFContext.getCurrent().getSecurityContext();
cPol = new CustomizationPolicy(stx.getUserRoles());
}
catch (Exception e)
{
e.printStackTrace();
}
if(sessionOptions.getServletContextAsObject() != null)
{
return new SessionOptions(sessionOptions.getIsolationLevel(),
sessionOptions.getLocale(), custConfig,
sessionOptions.getVersionContext(),
sessionOptions.getVersionCreatorName(),
cPol == null ?
sessionOptions.getCustomizationPolicy() : cPol,
sessionOptions.getServletContextAsObject());
}
else
{
return new SessionOptions(sessionOptions.getIsolationLevel(),
sessionOptions.getLocale(), custConfig,
sessionOptions.getVersionContext(),
sessionOptions.getVersionCreatorName(),
cPol == null ?
sessionOptions.getCustomizationPolicy() : cPol);
}
}
//Edit mode SiteCC
private static final CustomizationClass[] EDIT_LAYER =
new CustomizationClass[]
{ new SiteCC() };
//View mode SiteCC + USerCC
private static final CustomizationClass[] VIEW_LAYER =
new CustomizationClass[]
{ new SiteCC(), new UserCC() };
}

29.2.4 コンポーザでの実装の登録方法

「コンポーザでの実装の登録方法」で説明した手順を実行して、MDSセッションのカスタマイズ・ポリシーにユーザー・ロールが含まれていたComposerSessionOptionsFactoryクラスの実装を登録します。

29.2.5 WebCenterComposerFilterの構成方法

WebCenterComposerFilterを構成するには、「WebCenterComposerFilterの構成方法」で説明した手順を実行します。

29.2.6 インスタンス・レベルのカスタマイズ制限の適用方法

この項では、Panel Customizableコンポーネント上の特定ロールに対してアプリケーション・カスタマイズを有効にします。実行時に、adminなど、指定したロールのみが、その属性のカスタマイズを含むPanel Customizableのすべての機能にアクセスできます。他のロールを有するユーザーも、限られたコンポーネント機能のみを使用できます。

インスタンス・レベルのカスタマイズ制限を適用するには:

1. JSPXページで、コンポーザ・タグ・ライブラリからChange Mode Linkコンポーネントを追加します。

2. Page CustomizableコンポーネントをChange Mode Linkコンポーネントの下に追加します。

3. Page Customizable内のコンポーネントPanel Customizableにインスタンス・レベルのカスタマイズ制限を適用します。

この制限は、ディレクトリpublic_html/mdssys/mdx/<pagename>.jspx.rdfに格納されます。

「ソース」ビューは次のようになります。

<pe:changeModeLink id="cml1"/>
<pe:pageCustomizable id="pageCustomizable1">
<cust:panelCustomizable id="panelCustomizable1" layout="scroll"/>
<f:facet name="editor">
<pe:pageEditorPanel id="pep1"/>
</f:facet>
</pe:pageCustomizable>

「設計」ビューは、図29-6のようになります。

図29-6 「設計」ビュー: 「許可されているカスタマイズ」

4. Panel Customizable内にShow Detail Frameコンポーネントを追加し、別のPanel CustomizableコンポーネントをShow Detail Frameコンポーネントの子として含めます。

注意:

この手順は、複数のコンポーネントを示すことによって実行時の動作をより説明しやすいよう、説明のためのみにあります。

29.2.7 実行時の処理内容

実行時の処理は、ログオンしているユーザーによって異なります。違いを確認するには、あるユーザーとしてログインしてから別のユーザーとしてログインしてください。次に例を示します。

アプリケーション・ナビゲータでJSPXページを右クリックし、「実行」を選択します。

adminロールを有するユーザーとしてページにログインし、編集モードに切り替えます。Panel Customizableコンポーネントの内と外に、「コンテンツの追加」ボタンおよび「編集」アイコンが表示されます。図29-7で示すように、adminロールを有するユーザーとして、外側にあるPanel Customizableのプロパティにアクセスできます。つまり、adminロールを有するユーザーは、このコンポーネントを編集できます。

図29-7 admin用の編集モード

customerロールを有するユーザーとしてページにログインし、編集モードに切り替えます。Panel Customizable外では、「コンテンツの追加」ボタンおよび「編集」アイコンは使用できません。つまり、このコンポーネントは、customerロールを有するユーザーには編集できません。「構造」ビューでは、「コンテンツの追加」アイコンと「編集」アイコンはコンポーネントに対してグレー表示されます。

29.3 customizationAllowed属性を使用したタグ・レベルのセキュリティの適用

デフォルトでは、Page Customizableコンポーネントは、その下にあるすべてのコンポーネントのアプリケーション・カスタマイズを有効にします。これを、いくつかのコンポーネントに対してカスタマイズを制限するように変更できます。Page Customizableコンポーネントは、ネストされたページまたはフラグメント上にあるコンポーネントに対してカスタマイズを有効にしません。このようなコンポーネントに対して手動でカスタマイズを有効にする必要があります。このような要件に対処するために、MDSは、customizationAllowed属性およびcustomizationAllowedBy属性を提供しています。これらの属性は、ページ上の特定コンポーネントに対するカスタマイズの有効化または制限に使用できます。

customizationAllowed属性は、コンポーネントを実行時にカスタマイズできるかどうかを制御します。この属性をfalseに設定する場合は、コンポーネントを実行時にカスタマイズできません。つまり、「コンポーネント・プロパティ」ダイアログでは、プロパティはグレー表示され、編集は許可されません。

customizationAllowedBy属性は、カスタマイズを可能にするロールを指定します。

この項では、コンポーネントに対してカスタマイズを有効化および制限する例を提供します。次のサブセクションが含まれます:

- イメージ・コンポーネントに対するアプリケーション・カスタマイズの有効化方法

- イメージ・コンポーネントに対するカスタマイズの制限方法

詳細は、『Oracle Fusion Middleware Oracle Application Development Framework FusionによるWebアプリケーションの開発』の拡張されたメタデータのプロパティに関する項を参照してください。

29.3.1 イメージ・コンポーネントに対するアプリケーション・カスタマイズの有効化方法

イメージ・コンポーネントに対してアプリケーション・カスタマイズを有効化するには:

1. 「コンポーザ・コンポーネントを使用した編集可能ページの設計: 例」で作成したMyPage.jspxページで、brandingImage.gifなどのADF Faces Imageコンポーネントを、panelCustomizable1というPanel Customizable内に追加します。

アプリケーション・カスタマイズは、Imageコンポーネントに対して自動的に有効になります(Page Customizableコンポーネント内にネストされているため)。

2. MyPage.jspxを実行します。

3. ページの編集モードに切り替えます。

4. 「構造」を選択して、ページの「構造」ビューに切り替えます。

5. 「構造」ビュー・パネル内のコンポーネント階層でイメージを選択し、プロパティの表示アイコンをクリックします。

「コンポーネント・プロパティ」ダイアログにイメージ・プロパティが表示されます。このダイアログで、使用可能なプロパティを編集できます。プロパティを編集して、「OK」をクリックします。プロパティの編集可能値は、アプリケーション・カスタマイズがコンポーネントに対して有効になっていることを表します。

29.3.2 イメージ・コンポーネントに対するカスタマイズの制限方法

イメージ・コンポーネントに対してcustomizationAllowed属性をfalseに設定することで、ページ上のイメージのカスタマイズを制限できます。

イメージ・コンポーネントのカスタマイズを制限するには:

1. Oracle JDeveloperで、前の項で追加したImageコンポーネントを選択し、「プロパティ・インスペクタ」で、customizationAllowedの値をfalseに設定します。

2. MyPage.jspxを実行します。

3. ページの編集モードに切り替えます。

4. 「構造」を選択して、ページの「構造」ビューに切り替えます。

5. 「構造」ビュー・パネル内のコンポーネント階層でイメージを選択し、プロパティの表示アイコンをクリックします。

「コンポーネント・プロパティ」ダイアログで、プロパティがグレー表示され、編集はできなくなります。

29.4 属性レベルのセキュリティの適用

特定のコンポーネント属性を実行時にカスタマイズできるかどうかを選択できます。また、属性に行われた変更がMDSなどの永続ストアまで持続する必要があるかどうかを指定できます。次の方法で、属性レベルのセキュリティを適用できます。

- プロパティ・フィルタを定義することによる

- コンポーネント・レベルで変更を持続させることによる

プロパティ・フィルタの適用の詳細は、「プロパティ・フィルタの定義方法」を参照してください。

この項では、コンポーネント・レベルで変更を持続させる方法を説明します。次のサブセクションが含まれます:

- コンポーネント・レベルでの変更の永続性の定義方法

- 実行時の処理内容

29.4.1 コンポーネント・レベルでの変更の永続性の定義方法

アプリケーションが、変更を持続させるためにFilteredPersistenceChangeManagerを使用して構成されている場合は、adf-config.xmlファイル内のpersist-changes属性を使用して、特定の属性への変更を持続させる必要があるかどうかを指定できます。

注意:

変更の永続性の詳細は、「永続性変更マネージャの構成」を参照してください。

adf-config.xmlで設定できるコンポーザ固有の構成の詳細は、「adf-config.xml」を参照してください。

次の例は、いくつかの属性のために定義されたpersist-changes属性を持つサンプルのadf-config.xmlファイルを示しています。

<adf-config xmlns="http://xmlns.oracle.com/adf/config">
<adf-faces-config xmlns="http://xmlns.oracle.com/adf/faces/config">
<persistent-change-manager>
<persistent-change-manager-class>
oracle.adf.view.rich.change.MDSDocumentChangeManager
</persistent-change-manager-class>
</persistent-change-manager>
<taglib-config>
<taglib uri="http://xmlns.oracle.com/adf/pageeditor">
<tag name="imageLink">
<attribute name="destination">
<persist-changes>true</persist-changes>
</attribute>
</tag>
<tag name="customAction">
<attribute name="text">
<persist-changes>true</persist-changes>
</attribute>
<attribute name="icon">
<persist-changes>true</persist-changes>
</attribute>
</tag>
</taglib>
</taglib-config>
</adf-faces-config>
</adf-config>

29.4.2 実行時の処理内容

persist-changes属性を含み、値をtrueに設定する場合、コンポーネント属性に対して行われた変更は、そのコンポーネントのいずれのインスタンスでも維持されます。

注意:

persist-changes属性は、表示モードで行われた暗黙的カスタマイズにのみ適用されます。

29.5 Panel CustomizableおよびShow Detailコンポーネント・アクションでのアクション・レベルの制限の適用

Panel CustomizableコンポーネントおよびShow Detail Frameコンポーネントに対してアクションを実行するユーザーの能力は、ページ・セキュリティから継承します。継承は、adf-config.xmlファイル内のアプリケーション規模のスイッチenableSecurityの値に基づきます。アプリケーションを作成するときに「WebCenter Portal Frameworkアプリケーション」テンプレートを選択すると、adf-config.xmlファイルは、「アプリケーション・リソース」パネルのDescriptorsの下のADF META-INFフォルダに配置されます。

この項では、Panel CustomizableおよびShow Detail Frameコンポーネント・アクションに対してアクション・レベルの制限を適用する方法を説明します。次のサブセクションが含まれます:

- adf-config.xmlへのenableSecurityセクションの追加方法

- アクション・カテゴリ・レベルでのセキュリティの定義

- アクション・レベルでのセキュリティの定義

29.5.1 adf-config.xmlへのenableSecurityセクションの追加方法

enableSecurity要素は、デフォルトではadf-config.xml内で使用できません。Panel CustomizableコンポーネントおよびShow Detail Frameコンポーネントのページ・レベルのセキュリティ継承を上書きまたは拡張するには、次の例に示すように、customizableComponentsSecurityセクションをadf-config.xmlファイルに追加して、そのセクション内のenableSecurity要素をtrueに設定します。

<cust:customizableComponentsSecurity
xmlns="http://xmlns.oracle.com/adf/faces/customizable/config">
<cust:enableSecurity value="true"/>
<cust:actionsCategory>
..........................................
</cust:customizableComponentsSecurity>

アクションに対する制限は、次のレベルで実装できます。

- ページ・レベル: Oracle WebCenter Portalのカスタマイズ可能コンポーネントがページ・レベルの権限を継承するように、これらのコンポーネントのセキュリティを定義できます。これはデフォルトの動作です。
デフォルトでは、カスタマイズ可能コンポーネントは、編集、パーソナライズまたはカスタマイズなど定義されているページ・レベル権限から、許容されるアクションを継承します。つまり、ページに対する編集、パーソナライズまたはカスタマイズの権限を有するユーザーは、そのページに対する表示モードのユーザー・カスタマイズを実行できます。enableSecurity要素によって、セキュリティ継承動作をオーバーライドできます。次の値のいずれかを取ることができます。

- true: trueに設定した場合(指定されていない場合はデフォルト)、ユーザーがコンポーネントを変更できるかどうかは、まずページ権限に基づいて決定され、次に、そのタイプの権限に対して指定されている現在のアクション・セットに応じて調整されます。たとえば、ユーザーがカスタマイズ権限を持っている場合、カスタマイズ・カテゴリを構成するアクション(移動、カスタマイズなど)はユーザーに使用できますが、adf-config.xmlファイルで定義されるアクションによってオーバーライドされます。

- false: falseに設定した場合、すべてのアクションがユーザーに選択可能になります。adf-config.xmlで構成されたアクションとユーザーのページ権限は無視されます。

- アクション・カテゴリ・レベル: Panel CustomizableコンポーネントおよびShow Detail Frameコンポーネントのすべてのアクションに対してセキュリティを定義できます。
adf-config.xmlファイル内にactionsCategory要素を追加すると、複数のアクションに対するセキュリティを同時に定義できます。有効化したactionCategory属性に基づいて、コンポーネントに適切な権限が設定されます。

- アクション・レベル: Panel CustomizableコンポーネントおよびShow Detail Frameコンポーネントの個々のアクションに対してセキュリティを定義できます。
adf-config.xmlファイル内でactions要素を使用すると、各アクションを有効化または無効化できます。有効化したactions属性に基づいて、コンポーネントに適切な権限が設定されます。

注意:

- adf-config.xmlファイルでenableSecurityをtrueに設定し、アクションまたはアクション・カテゴリに対する制限を定義する場合は、これらの制限を有効にするために、表示権限に加えて、ページに対してパーソナライズ権限またはカスタマイズ権限を付与する必要があります。
enableSecurity要素を使用しないかfalseに設定する場合、ページ・レベルの権限は受け入れられます。このような場合、ページではデフォルトですべてのカスタマイズ可能コンポーネント・アクションがレンダリングされるため、ページに対する表示権限があるだけで十分です。

- 権限は、親からのみ継承できます。階層内の他の位置にあるコンポーネントからの継承は、サポートされていません。

- アクション・カテゴリ・レベルまたはアクション・レベルで定義された制限は、アプリケーション全体にわたるPanel CustomizableコンポーネントまたはShow Detail Frameコンポーネントのすべてのインスタンスに適用できます。コンポーネントの単一インスタンスに対して制限を適用できません。

adf-config.xmlファイルでenableSecurityをtrueに設定する場合、アプリケーション・レベルでコンポーネント・アクションのセキュリティを定義できます。trueの値は、adf-config.xml内に指定されているactionsCategoryおよびactionsの値以外に権限チェックが行われることを示します。

29.5.2 アクション・カテゴリ・レベルでのセキュリティの定義

adf-config.xmlファイルのカスタマイズ可能コンポーネント・アクション・セキュリティ・セクションにactionsCategory要素を追加して、複数のPanel CustomizableおよびShow Detail Frameコンポーネント・アクションに対するセキュリティを定義できます。有効化したactionsCategory属性に基づいて、コンポーネントに適切な権限が設定されます。

adf-config.xmlファイルのactionsおよびactionsCategory要素には、特定のデフォルト・マッピングがあります。表29-1に、様々なactionsCategory属性と、デフォルトでサポートされるアクションを示します。

adf-config.xmlで設定できるコンポーザ固有の構成の詳細は、「adf-config.xml」を参照してください。

表29-1 アクション・カテゴリおよびアクション・マッピング

actionsCategory

サポートされるアクション

personalizeActionsCategory

showMoveAction

showRemoveAction

showMinimizeAction

showResizer

allowAction

customizeActionsCategory

showEditAction

showAddContentAction

showSplitAction

personalizeActionsCategory設定およびcustomizeActionsCategory設定の組合せに基づくコンポーネントの動作は、次のとおりです。

- personalizeActionsCategoryおよびcustomizeActionsCategoryの両方がfalseに設定される場合、ユーザーは、Show Detail Frameコンポーネントを移動、展開、折りたたみ、削除、サイズ変更または編集できず、Panel Customizableコンポーネントを編集または削除することや、それらにコンテンツを追加することもできません。

- personalizeActionsCategoryがtrueに設定され、customizeActionsCategoryがfalseに設定される場合、ユーザーは、Show Detail Frameコンポーネントを移動、展開、折りたたみ、削除またはサイズ変更できますが、それらを編集できません。また、Panel Customizableコンポーネントを削除して、それらの内部にコンポーネントを再配置できますが、それらを編集することやページにコンポーネントを追加できません。

注意:

他のアクション設定と同様に、allowAction設定は、ページへのコンテンツの追加およびページ上のコンテンツの移動または再配置の機能を制御します。詳細は、「アクション・レベルでのセキュリティの定義」を参照してください。

- personalizeActionsCategoryおよびcustomizeActionsCategoryの両方がtrueに設定される場合、ユーザーは、Show Detail Frameコンポーネントを移動、展開、折りたたみ、削除、サイズ変更および編集でき、Panel Customizableコンポーネントを編集および削除することや、それらにコンテンツを追加することもできます。ユーザーは、「コンテンツの追加」ボタンを使用してリソース・カタログからコンテンツを追加することや、「ボックスを追加」の各アイコンを使用してBoxコンポーネントを追加することや、ドラッグ・アンド・ドロップすることで他のPanel Customizableコンポーネントからコンポーネントを移動できます。

注意:

権限が付与からカスタマイズ、パーソナライズ、表示の順にカスケードするため、personalizeActionsCategoryをfalseに設定し、customizeActionsCategoryをtrueに設定することはお薦めできません。つまりカスタマイズを有効にする場合は、ユーザーにすでにページに対するパーソナライズ権限がある必要があります。

次の例は、adf-config.xmlファイルのカスタマイズ可能コンポーネント・アクション・セキュリティ・セクションに追加できるactionsCategoryエントリを示しています。

<cust:customizableComponentsSecurity
xmlns="http://xmlns.oracle.com/adf/faces/customizable/config">
<cust:enableSecurity value="true"/>

<cust:actionsCategory>
<cust:actionCategory name="personalizeActionsCategory" value="true"/>
<cust:actionCategory name="customizeActionsCategory" value="false"/>
</cust:actionsCategory>

<cust:actions>
..........................................
</cust:actions>

</cust:customizableComponentsSecurity>

次の例に示すように、これらの要素の値にはELも使用できます。

<cust:actionsCategory>
<cust:actionCategory name="personalizeActionsCategory" value="#{appBusinessRules.InsideCorpNetwork}"/>
</cust:actionsCategory>

29.5.3 アクション・レベルでのセキュリティの定義

adf-config.xmlファイルのカスタマイズ可能コンポーネント・アクション・セキュリティ・セクション内でactions要素を使用して、個々のShow Detail Frameアクションを表示または非表示できます。有効化したactions属性に基づいて、Show Detail Frameコンポーネントに適切な権限が設定されます。

adf-config.xmlで設定できるコンポーザ固有の構成の詳細は、「adf-config.xml」を参照してください。

他のアクション設定と同様に、allowAction設定は、ページへのコンテンツの追加およびページ・コンテンツの移動または再配置の機能を制御します。

コンポーザでは、ユーザーは次の方法でコンテンツを追加および再配置できます。

- 「ボックスの追加」アイコンを使用してBoxコンポーネントを追加します。

- 「コンテンツの追加」ボタンを使用して、リソース・カタログからBoxコンポーネント内にコンテンツを追加します。

- Show Detail Frameコンポーネントの「アクション」メニューで「上へ移動」および「下へ移動」アクションを使用することで、Panel Customizableコンポーネント内でShow Detail Frameコンポーネントを移動します。

- Panel Customizableコンポーネントと交わるようにShow Detail Frameコンポーネントをドラッグ・アンド・ドロップします。

表29-2に、allowAction設定およびshowAddContentAction設定に応じてコンテンツを追加できるかどうかを示します。

- allowActionをtrueに設定して、showAddContentActionをfalseに設定すると、ユーザーは、「ボックスを追加」の各アイコンを使用してBoxコンポーネントを追加することと、ページ上のPanel Customizableコンポーネント間でShow Detail Frameコンポーネントをドラッグ・アンド・ドロップすることはできますが、「コンテンツの追加」ボタンを使用してコンポーネントを追加することはできなくなります。

注意:

Panel Customizableコンポーネントで「コンテンツの追加」ボタンを使用できるようにするには、allowActionとshowAddContentActionの両方をtrueに設定する必要があります。

- allowActionとshowAddContentActionの両方をtrueに設定すると、ユーザーは、Panel Customizableコンポーネント内で「コンテンツの追加」ボタンを使用してリソース・カタログからコンテンツを追加することも、別のPanel Customizableコンポーネントからドラッグ・アンド・ドロップしてコンテンツを追加することもできます。さらに、「ボックスを追加」の各アイコンを使用して、Boxコンポーネントを追加することもできます。

- allowActionをfalseに設定して、showAddContentActionをtrueに設定すると、「コンテンツの追加」ボタンと「ボックスを追加」の各アイコンが使用できなくなるため、ユーザーはページにコンテンツを追加できなくなります。

表29-2 ページへのコンテンツの追加のためのアクション設定

allowAction設定

showAddContentAction設定

「コンテンツの追加」ボタンが表示されているかどうか

true

true

はい

true

false

いいえ

false

true

いいえ

false

false

いいえ

表29-3では、allowAction設定およびshowSplitAction設定に応じて「ボックスの追加」アイコンを使用してコンテンツを追加する機能を説明します。

表29-3 ページでのコンテンツの再配置のためのアクション設定

allowAction設定

showSplitAction設定

「ボックスの追加」アイコンが表示されているかどうか

true

true

はい

true

false

いいえ

false

true

いいえ

false

false

いいえ

表29-4では、allowActionおよびshowMoveAction設定によってページにコンテンツを移動する機能を説明します。

表29-4 ページでのコンテンツの移動のためのアクション設定

allowAction設定

showMoveAction設定

ページ上でコンテンツを移動したかどうか

true

true

はい

true

false

いいえ

false

true

いいえ

false

false

いいえ

注意:

- アクション・カテゴリ・レベルおよびアクション・レベルの両方でセキュリティを定義し、一部のアクションの値が矛盾する場合は、falseの値がtrueより優先されます。たとえば、personalizeActionsCategoryをtrueに設定し、allowActionをfalseに設定する場合、ユーザーは、実行時にアプリケーションのページにコンテンツを追加できません。同様に、personalizeActionsCategoryをfalseに設定するがallowActionをtrueに設定する場合も、ユーザーは、実行時にアプリケーションのページにコンテンツを追加できません。

- アクション設定を使用した制限は、ページの「コンテンツの追加」ビューまたは「デザイン」ビューでのみ適用できます。つまり、Show Detail FrameコンポーネントでshowEditAction、showRemoveActionなどのアクションをfalseに設定する場合、ユーザーはページの「コンテンツの追加」ビューまたは「デザイン」ビューでこのようなコンポーネントを編集または削除できません。ただし、ユーザーは「構造」ビューでこのようなコンポーネントを選択して、それらを編集または削除できます。

次の例は、adf-config.xmlファイルのカスタマイズ可能コンポーネント・アクション・セクションに追加できるactionsエントリを示しています。要素値にはELを使用できます。

<cust:customizableComponentsSecurity
xmlns="http://xmlns.oracle.com/adf/faces/customizable/config">
<cust:enableSecurity value="true"/>

<cust:actionsCategory>
..........................................
</cust:actionsCategory>

<cust:actions>
<cust:action name="showMinimizeAction" value="true"/>
<cust:action name="showMoveAction" value="false"/>
</cust:actions>

</cust:customizableComponentsSecurity>

29.6 タスク・フローのセキュリティの実装

タスク・フロー編集権限は、タスク・フローを編集する体験に非常に大きな影響を与えるため、タスク・フローに対する編集権限はデフォルトでは無効になっています。実際に、デフォルトでは、タスク・フローに対して権限は与えられていません。適切な権限を有するユーザーのみがタスク・フローを編集できることを確実にするには、コンポーザのコンテキストで次の2つのタスクを実行することで、タスク・フローのセキュリティを実装できます。

- タスク・フローに明示的に編集、カスタマイズまたは付与権限を与えます。

- コンポーザでタスク・フローの権限をチェックできるようにして、適切な権限を有するユーザーにのみタスク・フローの編集またはカスタマイズを許可します。

この項では、タスク・フローに対して制限を適用して権限チェックを可能にする方法を説明します。次のサブセクションが含まれます:

- タスク・フローに対する権限の付与

- タスク・フローの権限チェックの有効化

29.6.1 タスク・フローに対する権限の付与

jazn-data.xmlファイル概要エディタの「リソース権限」ページで権限付与を作成することで、タスク・フローのアクセス・ポリシーを定義できます。作成した権限は、ファイルのポリシー・ストア・セクションのメタデータとして表示されます。これらの権限またはパーミッションは、コンポーザでのタスク・フローのズーム・インおよび編集の機能を制御します。

jazn-data.xmlファイルでのタスク・フローに対する権限を付与または取り消すには:

1. 「アプリケーション」メニューから、「保護」→「リソース権限」の順に選択します。

2. jazn-data.xmlファイル内で、「リソース・タイプ」から「タスク・フロー」を選択します。

3. 「リソース」リストから、タスク・フローを選択して、「付与先」列の「権限受領者の追加」アイコンをクリックし、必要なロール・カテゴリ(「アプリケーション・ロールの追加」など)を選択します。

4. 権限を付与するロールを選択するか、「追加」アイコンをクリックして新規ロールを作成します。

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

6. 「アクション」列で1つ以上の権限を選択します(図29-8)。

図29-8 jazn-data.xmlファイル内のタスク・フロー・セキュリティ・リージョン

7. jazn-data.xmlファイルを保存します。

注意:

customize権限とview権限を付与する場合は、ファイルのソース・ビューに権限付与が次のように表示されます。

<permissions>
<permission>
<class>oracle.adf.controller.security.TaskFlowPermission</class>
<name>/WEB-INF/task-flow-definition.xml#task-flow-definition</name>
<actions>customize,view</actions>
</permission>
</permissions>

TaskFlowPermissionクラスは、タスク・フローの操作にマップされるタスク・フロー固有アクションを定義します。

タスク・フロー権限に基づくコンポーザの動作の詳細は、「ページおよびタスク・フローのセキュリティ」を参照してください。

タスク・フローに付与する権限を定義する方法の詳細は、『Oracle Fusion Middleware Oracle Application Development FrameworkによるFusion Webアプリケーションの開発』のADFバインド・タスク・フローのセキュリティ・ポリシーを定義する方法に関する項を参照してください。

29.6.2 タスク・フローの権限チェックの有効化

デフォルトでは、ユーザーがタスク・フローを編集しようとするときに、コンポーザはタスク・フローの権限をチェックしません。タスク・フローのセキュリティを強化するには、タスク・フローの権限をチェックして編集に必要な権限を有するユーザーのみを許可するように、コンポーザを構成する必要があります。それを行うには、次の例で示すように、アプリケーションのadf-config.xmlファイル内の<pe:task-flow-security>要素のcheck-permissionプロパティを設定します。

<pe:page-editor-config>
<pe:security-config>
<pe:task-flow-security check-permission="true" />
</pe:security-config>
</pe:page-editor-config>

adf-config.xmlの設定の詳細は、「adf-config.xml」を参照してください。

注意:

前のリリースでは、次のJVMパラメータを使用してサーバーを実行することで、タスク・フローに対して権限チェックを有効にできました。

-Doracle.composer.enableTaskflowPermissionCheck=true

ただし、現在この方法は非推奨です。後方互換性のために、コンポーザは、最初にenableTaskflowPermissionCheckフラグをチェックしてから、adf-config.xmlファイル内の設定をチェックします。

29.7 コンポーザのデフォルト・セキュリティ・ポリシーの上書き

コンポーザでは、カスタマイズを有効にするために次のセキュリティ・チェックが実行されます。

- ページ上のリージョンが編集権限またはカスタマイズ権限を付与されています。

- タスク・フローが編集権限またはカスタマイズ権限を付与されてます。

注意:

これは、デフォルトでは有効になっていない、オプションのセキュリティ設定です。

- コンポーネントはイテレータではネストされていません。

- MDSカスタマイズ制限がコンポーネントおよび属性に適用されています。

ユーザーは、前述の条件を満たしている場合のみ、ページおよびタスク・フローをカスタマイズできます。デフォルトでは、コンポーザは、ページ・レベルのセキュリティ・チェックを実行するためにpagePolicyを使用します。

場合によっては、様々なセキュリティ・チェックの実行が必要になることがあります(おそらく、コンポーザに備わっているチェックに、いくつかのアプリケーション・レベルのチェックを追加することになります)。これは、コンポーザのデフォルトのセキュリティ・ポリシーをカスタム・ポリシーでオーバーライドすることで実施します。この項では、その実行方法を説明します。内容は次のとおりです。

- カスタム・セキュリティ・ポリシーの作成方法

- コンポーザでのカスタム・ポリシーの登録方法

- 実行時の処理内容

29.7.1 カスタム・セキュリティ・ポリシーの作成方法

コンポーザの基本セキュリティ・クラスを拡張することで、カスタム・ポリシーを作成できます。ページまたはタスク・フローをチェックするかどうかに応じて、次の基本セキュリティ・クラスを拡張できます。

- ページ・ポリシー: oracle.adf.view.page.editor.security.BasePageSecurityPolicy

- タスク・フロー・ポリシー: oracle.adf.view.page.editor.security.TaskflowPermissionPolicy

もう一歩前進するために、カスタム・チェックが適用できない場合や適切な結果を実現しない場合には、コンポーザのデフォルト・チェックが実行されるようにポリシーを構成できます。このためには、DefaultPageSecurityPolicyクラスを拡張して、次の例に示すように、super.isCustomizable()メソッドをコールする必要があります。

public class CustomPageSecurityPolicy extends DefaultPageSecurityPolicy
{
. . .

public boolean isCustomizable()
{
// Security checks that this custom page policy must perform should go here
. . .
// If we cannot determine the security policy, chain it to Composer's default implementation
return super.isCustomizable();
}
}

29.7.2 コンポーザでのカスタム・ポリシーの登録方法

コンポーザのセキュリティ・ポリシーをオーバーライドするようにカスタム・ポリシーを構成するには、<pe:security-config>セクションをアプリケーションのadf-config.xmlファイルに含めて、カスタム・セキュリティ・ポリシーを登録する必要があります。

カスタム・セキュリティ・ポリシーを登録するには:

1. 「アプリケーション・リソース」パネルの「ディスクリプタ」の下のADF META-INFフォルダから、アプリケーションのadf-config.xmlファイルを開きます。

2. <pe:page-editor-config>セクションが存在しない場合は追加し、その中に次のコードを追加します。

<pe:security-config>
<pe:security-policies>
<pe:security-policy name="optional_unique_name" override="composer_security_policy_name">
<pe:policy-class>fully_qualified_custom_policy_class_name</pe:policy-class>
</pe:security-policy>
</pe:security-policies>
</pe:security-config>

各要素の意味は次のとおりです。

overrideは、オーバーライドされるデフォルト・ポリシーを指定します。オプションは、pagePolicyおよびtaskflowPolicyです。

タスク・フロー・ポリシーの詳細は、「タスク・フローのセキュリティの実装」を参照してください。

注意:

ここに記載していない即時利用可能なポリシーは、引き続きデフォルトでチェックされます。

<pe:policy-class>は、カスタム・ポリシー・クラスの名前を指定します。

3. adf-config.xmlファイルを保存します。

29.7.3 実行時の処理内容

コンポーザは、カスタム・ポリシーで定義されているセキュリティ・チェックを実行し、それに応じてコンポーネントに対するカスタマイズを有効にします。

29.8 コンポーザのコンポーネント・セキュリティでの問題のトラブルシューティング

この項では、コンポーザ・コンポーネントの使用中に発生する可能性のあるセキュリティ関連の問題をトラブルシューティングする際に役立つ情報を提供します。

ロギングの構成の詳細は、「コンポーザのADFロギングの構成」を参照してください。

問題

Show Detail FrameおよびPanel Customizableで「編集」アイコンが表示されないか、Panel Customizableで「コンテンツの追加」ボタンが表示されません。また、Panel Customizableコンポーネントの外部にShow Detail Frameを移動できないか、別のPanel Customizableコンポーネントにドロップできません。

解決策

MDSを使用することでPanel Customizableが制限されていることと、adf-config.xmlでエントリを使用することでコンポーネント・アクションが保護されていないことを確認します。

問題

jazn-data.xmlファイルでタスク・フローに権限を付与できません。

解決策

「タスク・フローのセキュリティの実装」で説明したように、Java起動パラメータでサーバーを実行していることを確認します。

30 コンポーザ・コンポーネントのプロパティおよびファイル

この章では、コンポーザ固有のタグと構成ファイルに関するリファレンス情報を示します。

この章のトピックは、次のとおりです:

- コンポーザ・コンポーネントのプロパティ

- コンポーザ固有のファイルと構成

30.1 コンポーザ・コンポーネントのプロパティ

この項は、コンポーザの重要なタグの一部についてのクイック・リファレンスです。コンポーザ・コンポーネントをページに追加するとき、デフォルト値が特定の属性に割り当てられます。これらのデフォルト値を変更して、JDeveloperの残りの属性の値を定義することができます。その他のコンポーザのタグについては、11g WebCenter Portalのドキュメントを参照してください。

この項では、次の項目について説明します。

- Page Customizableコンポーネント

- Change Mode LinkおよびChange Mode Button

- Layout Customizableコンポーネント

- Show Detail Frameコンポーネント

30.1.1 Page Customizableコンポーネント

Page Customizableコンポーネントを使用して、実行時にページ編集を有効化します。Page Customizableコンポーネントは、ページのカスタマイズ可能部分を示し、実行時は「編集」モードでコンポーザのツールバーを表示します。コンポーネントをPage Customizableコンポーネントで囲むと、実行時にアプリケーション・ページでコンポーザが有効化され、ユーザーはコンポーネントのカスタマイズと編集を実行できます。

大型のアプリケーションで、複数のページの実行時ページ編集を有効化する必要がある場合は、ページ・テンプレートの階層の最上部のいずれかの場所にPage Customizableコンポーネントを組み込むことができます。このようにすることで、このテンプレートを使用して作成されるすべてのページが実行時に編集可能になります。

ジオメトリ管理

表示モード: Page Customizableコンポーネントは、子をストレッチする親レイアウト・コンポーネント(Panel Stretch LayoutコンポーネントやPanel Splitterコンポーネントなど)によってストレッチできます。Page Customizableコンポーネントがストレッチされると、今度はその子コンポーネントをストレッチして、使用可能なスペースを埋めます。ただし、Page Customizableコンポーネントがストレッチされていない場合、そのサイズは子コンポーネントによって決定されます。

編集モード: Page Customizableコンポーネントは、子コンポーネントをストレッチして、使用可能なスペースを埋めます。

属性

次の表に、Page Customizableコンポーネントの属性を示します。

表30-1 Page Customizableコンポーネントの属性

属性

タイプ

ELのサポート

説明

共通属性

id

String

なし

コンポーネントの識別子。識別子はHTMLで許容されている構文のサブセットに従う必要があります。

- 長さがゼロの文字列にすることはできません。

- 最初の文字はASCII文字(A-Z a-z)またはアンダースコア(_)である必要があります。

- 後続の文字は、ASCII文字または数字(A-Z a-z 0-9)、アンダースコア(_)、ダッシュ(-)である必要があります。

rendered

Boolean

はい

コンポーネントがレンダリングされるかどうかを指定します。falseに設定した場合、このコンポーネントに対する出力はありません(コンポーネントはレンダリングされず、クライアントで表示することができません)。

デフォルト値はtrue。

外観属性

sourceViewPosition

String

はい

コンポーネントをツリー構造で表示するStructureビュー・ペインの位置。有効な値はbottom、end、startおよびtopです。デフォルト値はtopです。

詳細は、「ページ編集モードの「構造」ビューでの編集機能」を参照してください。

sourceViewSize

String

はい

「構造」ビュー・ペインのピクセル単位の高さと幅。

sourceViewPositionがtopまたはbottomに設定されている場合は、これを使用して高さを指定し、sourceViewPositionが、startまたはendに設定されている場合は幅を指定します。

sourceViewPositionのデフォルトはtopであるため、ペインにはデフォルトの高さ200ピクセルが設定されています。

また、ユーザーは「構造」ビュー・ペインのエッジにあるサイズ変更ハンドラを使用しても、実行時にペインの高さと幅を変更できます。

editModeView

not applicable

not applicable

コンポーザでページを開く際の、デフォルト・ビューを指定します。有効なオプションは、designおよびsourceです。デフォルト値はdesignです。

sourceを選択した場合、コンポーザのStructureビューでページが開きます。designViews属性の値にdesignまたはallが指定されているときに、designを選択すると、コンポーザではDesignビューでページが開きます。それ以外の場合、Add Contentビューでページが表示されます。

rendered

Boolean

はい

コンポーネントがレンダリングされるかどうかを指定します。falseに設定した場合、このコンポーネントに対する出力はありません(コンポーネントはレンダリングされず、クライアントで表示することができません)。

デフォルト値はtrue。

toolbarLayout

String

はい

コンポーザ・ツールバーに表示される要素。この属性には要素の空白区切りリストを指定できます。

コンポーネントが認識する組込み文字列は、message、stretch、statusindicator、newline、menu、addonpanels、stretch、helpおよびbuttonです。

この属性の使用の詳細は、「コンポーザのツールバーのカスタマイズ」を参照してください。

スタイル属性

styleClass

String

はい

このコンポーネントで使用するCSSスタイル・クラス。スタイル・クラスは、JSPXページやスキニングCSSファイルなどで定義できます。

inlineStyle

String

はい

このコンポーネントで使用するCSSスタイル。これは、基本的なスタイルの変更用です。inlineStyleは、コンポーネントのルートDOM要素に適用されるCSSスタイルのセットです。inlineStyleのCSSプロパティが目的のDOM要素に反映されない場合は、スキンを作成して、::labelや::icon-styleなどの特定のDOM要素を対象にしたスキニング・キーを使用する必要があります。

詳細属性

binding

oracle.adf.view.page.editor.component.PageCustomizable

ELのみをサポート

Bean上にコンポーネント・インスタンスを格納するEL参照。この参照は、Backing Beanからコンポーネントへのプログラムによるアクセスを提供するため、またはコンポーネントの作成をBacking Beanに移すために使用できます。

sourceViewNodeActions

String

はい

コンポーザの「構造」ビューでコンポーネント・ナビゲータ内のタスク・フローに対するカスタム・アクションを表示する場合にコールされるJPSXファイルの名前。

sourceViewNodeAction属性は、JSPXファイルの名前、またはJSPXファイル名として評価されるEL値を取ることができます。

この属性の使用の詳細は、「コンポーネント・ナビゲータ内のタスク・フローに表示されるカスタム・アクションの追加」を参照してください。

allowLabel

Boolean

はい

カスタマイズ・マネージャでラベル作成を有効化する必要があるかどうかを指定します。allowLabelがtrueに設定されていると、コンポーザ・ツールバーに「保存してラベル付け」ボタンが表示されます。詳細は、「アプリケーションのカスタマイズの管理」を参照してください

この属性は、アプリケーションでサンドボックスのサポートを構成した場合のみ関係します。

catalog

String

はい

アプリケーション・ページでデフォルトとして使用されるリソース・カタログ。カタログ定義ファイル名を指定します。

allowEL

Boolean

なし

ELがアプリケーション・ページで実行できるかどうかを指定します。デフォルトはtrueです。

この設定は、adf-config.xmlの <pe:allow-el>設定をオーバーライドします。

詳細は、「式言語の保護方法」を参照してください。

protectEL

Boolean

なし

フォーム要素のELが読取り専用かどうかを指定します。デフォルトはfalseです。

この設定は、adf-config.xmlの<pe:protect-el>設定をオーバーライドします。

詳細は、「式言語の保護方法」を参照してください。

designViews

String

はい

コンポーザでユーザーが利用できるビューを指定します。後方互換性のために、Add Content (「コンテンツの追加」)ビューおよびStructure (「構造」)ビューはデフォルトで利用できます。

この属性には要素の空白区切りリストを指定できます。選択可能なオプションは、design、add-content、source、select、previewおよびallです。

値をallに設定すると、Add Content (「コンテンツの追加」)以外のすべてのビューがレンダリングされ、Design (「デザイン」)ビューがコンポーザでのデフォルトのビューになります。

designViews属性を設定すると、adf-config.xmlのdesignViews設定がオーバーライドされます。ただし、この属性がNullを返すELに設定されている場合、designViewsにはadf-config.xmlの設定が使用されます。

詳細は、「「デザイン」ビューまたは「コンテンツの追加」ビューでの直接選択の有効化」を参照してください。

カスタマイズ属性

customizationAllowed

Boolean

not applicable

このコンポーネントに対するカスタマイズが可能かどうかを指定します。使用可能な値はtrueおよびfalseです。デフォルト値はtrueです。

customizationAllowedBy

String

not applicable

カスタマイズを行うことが可能なロールを指定します。

サポートされているファセット

Page Customizableコンポーネントは、editorファセットを提供し、このファセットには、Page Editor Panelコンポーネントが事前移入されています。確実にコンポーザを正しく機能させるには、editorファセットにPage Editor Panelコンポーネントが含まれている必要があります。

30.1.2 Change Mode LinkおよびChange Mode Button

Change Mode ButtonやChange Mode Linkは、実行時におけるページの編集モードへの切替えの有効化に使用します。

Change Mode LinkコンポーネントとChange Mode Buttonコンポーネントは、共通の属性セットを共有します。次の表に、Change Mode LinkコンポーネントまたはChange Mode Buttonコンポーネントの属性を示します。

表30-2 Change Mode LinkおよびChange Mode Buttonの属性

属性

タイプ

ELのサポート

説明

共通属性

id

String

はい

コンポーネントの識別子。識別子はHTMLで許容されている構文のサブセットに従う必要があります。

- 長さがゼロの文字列にすることはできません。

- 最初の文字はASCII文字(A-Z a-z)またはアンダースコア(_)である必要があります。

- 後続の文字は、ASCII文字または数字(A-Z a-z 0-9)、アンダースコア(_)、ダッシュ(-)である必要があります。

rendered

Boolean

はい

コンポーネントがレンダリングされるかどうかを指定します。falseに設定した場合、このコンポーネントに対する出力はありません(コンポーネントはレンダリングされず、クライアントで表示することができません)。

デフォルト値はtrue。

保護されたアプリケーションで、特定の基準に従って選択したユーザーのみに対して「編集」リンクまたはボタンを有効化するには、rendered属性でEL値を指定します。

注意: 保護されたアプリケーションでは、すべてのユーザーの権限を確認して、権限のあるユーザーのみに「編集」リンクまたはボタンを有効化することをお薦めします。認証されていないユーザーが偶然ページの編集モードに入った場合でも、コンポーネント・プロパティの変更が可能です。

動作属性

immediate

Boolean

はい

このコンポーネントによってイベントが生成された場合に、クライアント側またはサーバー側のデータ検証をスキップする必要があるかどうかを指定します。immediateがtrueの場合、アプリケーション起動フェーズまで待つのではなく、リクエスト処理ライフサイクルのリクエスト値適用フェーズの際にJavaServer Faces実装によって提供されるデフォルトのActionListenerをはじめ、コマンドのアクションおよびActionListenerが実行されます。検証はプロセス・バリデータで(リクエスト値適用後、アプリケーションの起動前)実行されるため、immediateをtrueに設定すると検証がスキップされます。

詳細属性

binding

oracle.adf.view.page.editor.component.ChangeModeLink

または

oracle.adf.view.page.editor.component.ChangeModeButton

ELのみをサポート

Beanにコンポーネント・インスタンスを格納するEL参照。この参照は、Backing Beanからコンポーネントへのプログラムによるアクセスを提供するため、またはコンポーネントの作成をBacking Beanに移すために使用できます。

カスタマイズ属性

customizationAllowed

Boolean

このコンポーネントに対するカスタマイズが可能かどうかを指定します。使用可能な値はtrueおよびfalseです。デフォルト値はtrue。

customizationAllowedBy

String

カスタマイズを行うことが可能なロールを指定します。

その他の属性

customizationId

この属性は非推奨になりました。id属性を使用してください。

Change Mode LinkまたはChange Mode Buttonコンポーネントを使用しない場合は、独自のボタンまたはリンクのコンポーネントを追加し、ChangeModeLinkまたはChangeModeButton APIを使用してページ・モードの切替えを可能にできます。

アプリケーション・ページでの実行時編集の無効化

ページの実行時編集を無効にするには、ユーザーの編集権限を取り消すか、ページからChange Mode LinkコンポーネントまたはChange Mode Buttonコンポーネントを削除して、ユーザーがページ内のEdit (編集)モードにナビゲートできないようにします。

30.1.3 Layout Customizableコンポーネント

Layout Customizableコンポーネントは、事前定義されたレイアウトを子コンポーネントに適用します。これは、エンド・ユーザーが事前定義されたいくつかの方法で子コンポーネントをレイアウトできるようにするためのコンテナ・コンポーネントです。Layout Customizableコンポーネントは、実行時のページ・レイアウトの変更の有効化のみに使用します。コンポーネントをレイアウトするコンテナ・コンポーネントのみが必要で、実行時のレイアウトの変更の有効化は不要な場合は、Panel Stretch LayoutおよびPanel Group LayoutなどのADF Facesレイアウト・コンポーネントの使用をお薦めします。Layout Customizableはページに対して1つだけ指定することをお薦めします。

Layout Customizableコンポーネントには、デフォルトで直接の子Panel CustomizableコンポーネントとPanel Customizableコンポーネントを備えた2つのファセットが含まれており、ユーザーは実行時にこれらの内部にコンテンツを追加できます。ただし、Layout Customizableコンポーネントとそのファセットの内部では任意のコンポーネントを追加できます。3つのPanel Customizableコンポーネントのコンテンツは、事前定義されたレイアウトを使用してそれぞれの方法で配置できます。詳細は、「事前定義されたレイアウト・タイプ」を参照してください。

次の表に、Layout Customizableコンポーネントの属性を示します。

表30-3 Layout Customizableコンポーネントの属性

属性

タイプ

ELのサポート

説明

共通属性

id

String

なし

コンポーネントの識別子。識別子はHTMLで許容されている構文のサブセットに従う必要があります。

- 長さがゼロの文字列にすることはできません。

- 最初の文字はASCII文字(A-Z a-z)またはアンダースコア(_)である必要があります。

- 後続の文字は、ASCII文字または数字(A-Z a-z 0-9)、アンダースコア(_)、ダッシュ(-)である必要があります。

rendered

Boolean

はい

コンポーネントがレンダリングされるかどうかを指定します。falseに設定した場合、このコンポーネントに対する出力はありません(コンポーネントはレンダリングされず、クライアントで表示することができません)。

デフォルト値はtrueです。

コンポーネントのレンダリングは、「コンポーネントの表示」および「コンポーネントの非表示」オプションを使用して実行時に定義することもできます。

タイプ

String

はい

ページに使用されるレイアウトを指定します。事前定義済の8つのレイアウトのリストから選択できます。詳細は、「事前定義されたレイアウト・タイプ」の表を参照してください。

デフォルト値はthreeColumnです。

Layout Customizableコンポーネントでカスタマイズ制限を定義できます。具体的に言うと、type属性に制限を課すると、レイアウト変更オプションが無効として表示され、ユーザーはこれらを使用してページ・レイアウトを変更できなくなります。詳細は、「コンポーザ・コンポーネントのデフォルトのセキュリティ動作の変更」を参照してください。

外観属性

text

String

はい

「レイアウトの変更」メニューに表示するテキストを指定します。

text属性を指定して、Layout Customizableコンポーネントに説明ラベルを設定し、実行時にコンポーネントがページに明確に表示されるようにします。

次に例を示します。

text="Change Layout"

accessKey

Char

はい

このボタンに素早くアクセスするために使用する文字。アクセシビリティ上の理由により、この機能はスクリーン・リーダー・モードではサポートされません。

出力の同一ページ上の複数の入力フィールドで同じアクセス・キーが表示される場合、ユーザー・エージェントのレンダリングは、同じキーでアクセスされる要素間で循環します。同じアクセス・キーが指定された2つのリンクの処理に関して、ユーザー・エージェントには一貫性がないため、循環動作はユーザー・エージェントの提供内容によって異なる点に注意してください。

この属性は、「ニーモニック」と呼ばれることもあります。

この属性で指定された文字は、このボタン・インスタンスのText属性に存在している必要があります。存在していない場合、ユーザーにaccessKeyの存在を示すものが何も表示されません。テキストとニーモニックの両方をまとめて指定するには、textAndAccessKeyの使用が最も簡単で便利です。

accessKeyは、ブラウザ固有およびプラットフォーム固有の修飾子キーによってトリガーされます。ブラウザ固有の意味が存在することもあります。たとえば、Internet Explorer 7.0では、[Alt]キーを押しながら<accessKey>を押すとフォーカスが設定されます。一部のオペレーティング・システムのFirefox 2.0は、[Alt]キーと[Shift]キーを押しながら<accessKey>を押すとフォーカスが設定されます。その他のオペレーティング・システムのFirefox 2.0は、[Ctrl]キーを押しながら<accessKey>を押すとフォーカスが設定されます。accessKeyの処理については使用するブラウザのドキュメントを参照してください。

showIcon

Boolean

はい

デフォルトの「レイアウトの変更」アイコンを表示するかどうかを指定します。

デフォルト値はtrue。

showLayoutChanger

Boolean

はい

デフォルトの「レイアウトの変更」アイコンまたはテキストを表示する必要があるかどうかを指定します。

デフォルト値はtrue。

trueに設定した場合、レイアウト変更の実行時動作は次のようになります。

- 表示モードで表示されます。編集モードで表示されます。
編集モードでは、showLayoutChanger属性の値がfalseの場合も常に表示されます。

- Layout CustomizableコンポーネントにセキュリティまたはMDS制限がある場合は、表示モードまたは編集モードにレイアウト変更は表示されません。

showTypes

String

はい

レイアウト変更に表示する必要がある事前定義レイアウトの名前を指定します。この属性を使用して、ユーザーに表示されるレイアウト・オプションが制御されます。レイアウト・タイプの空白区切りリストを指定できます。デフォルトでは、ユーザーが「レイアウトの変更」アイコンまたはリンクをクリックすると8つのレイアウトのすべてが表示されます。

shortDesc

String

はい

コンポーネントの短い説明。このテキストは、通常、ツールチップ・ヘルプ・テキストを表示するためにユーザー・エージェントによって使用されます。この場合、ツールチップの動作はユーザー・エージェントによって制御されます。たとえば、Firefox 2では長いツールチップは切り捨てられます。フォーム・コンポーネントの場合、shortDescはノート・ウィンドウに表示されます。

スタイル属性

styleClass

String

はい

このコンポーネントで使用するCSSスタイル・クラス。スタイル・クラスは、JSPXページやスキニングCSSファイルなどで定義できます。

inlineStyle

String

はい

このコンポーネントで使用するCSSスタイル。これは、基本的なスタイルの変更用です。inlineStyleは、コンポーネントのルートDOM要素に適用されるCSSスタイルのセットです。inlineStyleのCSSプロパティが目的のDOM要素に作用しない場合は、スキンを作成して、::labelや::icon-styleなどのように特定のDOM要素を対象にするスキニング・キーを使用する必要があります。

拡張属性

binding

oracle.adf.view.page.editor.component.LayoutCustomizable

ELのみをサポート

Beanにコンポーネント・インスタンスを格納するEL参照。この参照は、Backing Beanからコンポーネントへのプログラムによるアクセスを提供するため、またはコンポーネントの作成をBacking Beanに移すために使用できます。

次に例を示します。

binding="#{yourManagedBean.Binding}"

カスタマイズ属性

customizationAllowed

Boolean

このコンポーネントに対するカスタマイズが可能かどうかを指定します。使用可能な値はtrueおよびfalseです。デフォルト値はtrue。

customizationAllowedBy

String

カスタマイズを行うことが可能なロールを指定します。

その他の属性

customizationId

この属性は非推奨になりました。id属性を使用してください。

サポートされているファセット

次の表では、Layout Customizableコンポーネントに用意されたファセットについて説明します。

表30-4 Layout Customizableコンポーネントのファセット

名前

説明

contentA

Panel Customizableコンポーネントが事前に移入されます。このPanel Customizableには、「事前定義されたレイアウト・タイプ」の表に示したレイアウトの領域Aでレンダリングされるコンテンツが格納されます。

contentB

Panel Customizableコンポーネントが事前に移入されます。このPanel Customizableには、「事前定義されたレイアウト・タイプ」の表に示したレイアウトの領域Bでレンダリングされるコンテンツが格納されます。

facetSeparator

各ファセット間で1回レンダリングされるコンテンツ。

separator

その他の子のそれぞれの間で1回レンダリングされるコンテンツ。

事前定義されたレイアウト・タイプ

ページにLayout Customizableコンポーネントを追加すると、3つの子Panel Customizableコンポーネントがデフォルトで追加されます。1つの直接の子と、2つのファセットの2つのPanel Customizableです。ただし、子Panel Customizableコンポーネントと選択した任意のコンテナ・コンポーネントを置き換えることができます。レイアウト・タイプを選択すると、これらのPanel Customizableのコンポーネントは、選択したレイアウト・タイプに従って配置されます。

次の表は、設計時にページまたはページの領域に適用可能な8つのレイアウトを示しています。コンポーネントのレイアウト方法をわかりやすく説明するため、次のように想定します。

- contentAファセットの子Panel CustomizableをAとします。

- contentBファセットの子Panel CustomizableをBとします。

- Layout Customizableの直接の子であるプライマリのPanel CustomizableをCとします。

レイアウト・タイプ

コンテンツの配置を示すイメージ

oneColumn

注意: oneColumnレイアウトの場合、AとBは子コンポーネントが含まれる場合のみレンダリングされます。

threeColumn

threeColumnNarrow

twoColumn

twoColumnBottom

twoColumnNarrowLeft

twoColumnNarrowRight

twoColumnTop

30.1.4 Show Detail Frameコンポーネント

子コンポーネントの移動、最小化、リストア、削除などの実行時のカスタマイズを可能にするには、Panel Customizableコンポーネント内にShow Detail Frameコンポーネントを追加します。Show Detail Frameは、Panel Customizableコンポーネント内に追加された場合のみ移動できます。

ジオメトリ管理

Show Detail Frameコンポーネントは、Panel Customizableコンポーネントなど、子をストレッチする親レイアウト・コンポーネントによってストレッチできます。

Show Detail Frameコンポーネントは、子コンポーネントをストレッチして使用可能な高さと幅を埋めます。Show Detail Frameコンポーネント内に追加する子コンポーネントは1つのみにすることをお薦めします。ただし、複数の子コンポーネントが存在する場合は、最初の子コンポーネントがShow Detail Frameのコンテンツ領域の高さと幅にストレッチされ、後続の子コンポーネントは無視されます。

Show Detail Frameの右下隅にあるサイズ変更ハンドラを使用すると、コンポーネントの垂直方向のサイズを変更できます。変更すると、その親がShow Detail Frameをストレッチすることはできません。

次の表に、Show Detail Frameコンポーネントの属性を示します。

表30-5 Show Detail Frameコンポーネントの属性

属性

タイプ

ELのサポート

説明

共通属性

id

String

なし

コンポーネントの識別子。識別子はHTMLで許容されている構文のサブセットに従う必要があります。

- 長さがゼロの文字列にすることはできません。

- 最初の文字はASCII文字(A-Z a-z)またはアンダースコア(_)である必要があります。

- 後続の文字は、ASCII文字または数字(A-Z a-z 0-9)、アンダースコア(_)、ダッシュ(-)である必要があります。

rendered

Boolean

はい

コンポーネントがレンダリングされるかどうかを指定します。falseに設定した場合、このコンポーネントに対する出力はありません(コンポーネントはレンダリングされず、クライアントで表示することができません)。

デフォルト値はtrueです。

コンポーネントのレンダリングは、Show Component (コンポーネントの表示)およびHide Component (コンポーネントの非表示)オプションを使用して実行時に定義することもできます。

text

String

はい

Show Detail Frameコンポーネントのタイトル。

このテキストのスタイルは、headerStyle属性を使用して変更できます。

icon

String

はい

Show Detail Frameコンポーネントのヘッダーにアイコンを追加することにした場合は、これで使用するイメージのURIを指定します。

次に例を示します。

icon="http://source-pc/images/accessability.gif"

注意: ドキュメント・ルートに格納されているイメージには、フルパスは必要ありません。次に例を示します。

icon="detail.gif"

外観属性

text

String

はい

Show Detail Frameコンポーネントのタイトル。

このテキストのスタイルは、headerStyle属性を使用して変更できます。

shortDesc

String

はい

コンポーネントの短い説明。このテキストは、通常、ツールチップ・ヘルプ・テキストを表示するためにユーザー・エージェントによって使用されます。この場合、ツールチップの動作はユーザー・エージェントによって制御されます。たとえば、Firefox 2では長いツールチップは切り捨てられます。フォーム・コンポーネントの場合、shortDescはノート・ウィンドウに表示されます。

icon

String

はい

Show Detail Frameコンポーネントのヘッダーにアイコンを追加することにした場合は、これで使用するイメージのURIを指定します。

次に例を示します。

icon="http://source-pc/images/accessability.gif"

注意: ドキュメント・ルートに格納されているイメージには、フルパスは必要ありません。次に例を示します。

icon="detail.gif"

background

String

はい

スキンCSSとともに機能し、このShow Detail Frameインスタンスに対して別のルック・アンド・フィールを適用する手段を提供します。

使用可能な値はlight、medium、darkおよびcoreDefaultです。デフォルト値はmediumです。

coreDefault値はmediumと同様ですが、さらにコンテナの境界線を丸め、シャドウをレンダリングします。この場合の背景は、ADF Faces panelBoxコンポーネントと同様になります。

displayHeader

Boolean

はい

Show Detail Frameのヘッダーが表示されるかどうかを指定します。

デフォルト値はtrue。

displayHeaderをfalseに設定する選択をして、コンポーネントの一部のアクションを公開した場合は、マウスをコンポーネント領域に移動するとツールバーが表示されます。ツールバーには、選択可能なオプションのメニューを表示するドロップダウン・アイコンが含まれます。このツールバーは、コンポーネントで使用可能なアクションが存在する場合にEdit (編集)モードでのみ表示されます。

displayShadow

Boolean

はい

Show Detail Frameコンポーネントでシャドウをキャストするかどうかを指定します。

デフォルト値はfalseです。

expansionMode

String

はい

Show Detail Frameのデフォルトの状態。

使用可能な値は、minimizedおよびnormalです。デフォルトの表示モードはnormalです。

rendered

Boolean

はい

コンポーネントがレンダリングされるかどうかを指定します。falseに設定した場合、このコンポーネントに対する出力はありません(コンポーネントはレンダリングされず、クライアントで表示することができません)。

デフォルト値はtrue。

コンポーネントのレンダリングは、Show Component (コンポーネントの表示)およびHide Component (コンポーネントの非表示)オプションを使用して実行時に定義することもできます。

アクション属性

displayActions

String

はい

シードされた相互作用を表示する時点を指定します。

使用可能なオプションは、onHoverおよびalwaysです。デフォルトはalwaysです。

inheritGlobalActions

Boolean

はい

この属性は子カスタム・アクション・コンポーネントを追加した場合に有意で、custom actionのグローバルaction値でローカル値をオーバーライドする必要があるかどうかを指定します。

デフォルト値はfalseです。

グローバル・カスタム・アクションの詳細は、「グローバル・レベルでのカスタム・アクションの定義」を参照してください。

showMoveAction

String

はい

コンポーネントに「移動」アクションが利用可能かどうかを指定します。

選択可能な値は次のとおりです。

- menu - 「移動」アクションは「アクション」メニューに表示され、ヘッダーにドラッグ・アンド・ドロップするアクションが有効化されます。

- none - ユーザーは、ヘッダーをクリックし、ドラッグ・アンド・ドロップで、コンポーネントを移動できます。

- disabled - コンポーネントを移動できません。

デフォルト値はmenuです。

注意: disabledオプションは、ビュー・モードでのみ適用されます。

showRemoveAction

String

はい

Show Detail Frameヘッダーで「削除」アイコンをレンダリングします。このアイコンをクリックすると、ページからコンポーネントが削除されます。

使用可能な値はchromeおよびnoneです。デフォルトの値はNoneです。

注意: ページ編集モードでは、他の制限が適用されていないかぎり、この設定に関係なく「削除」アイコンが表示されます。

showResizer

String

はい

Show Detail Frameの右下隅にサイズ変更ハンドルを表示するかどうかを指定します。サイズ変更時は、Show Detail Frameの高さのみを変更できます。

使用可能な値は、neverおよびalwaysです。デフォルト値はalwaysです。

showMinimizeAction

String

はい

ヘッダーに最小化アクションを表示するかどうかを指定します。

使用可能な値はchromeおよびnoneです。デフォルトはchromeです。

showEditAction

Boolean

はい

Edit (編集)モードのAdd Content (コンテンツの追加)ビューまたはDesign (デザイン)ビューで、Show Detail Frameヘッダー上の「編集」アイコンをレンダリングして、実行時にコンポーネントのプロパティを編集できるようにします。デフォルト値はtrueです。

これは、コンポーザ対応ページにおいて(つまり、Show Detail FrameコンポーネントがPage Customizableコンポーネント内にネストされている場合)のみ関係します。

スタイル属性

contentStyle

String

はい

Show Detail Frameコンテンツ領域に適用するCSSスタイル。CSSリリース2.0以上に準拠するスタイルを手動で入力します。

この属性のCSSスタイルは、一般的にShow Detail Frameのheightおよびbackground colorの定義に使用されます。たとえば、height:200px; background-color:green;のように指定します。

注意: Show Detail Frameコンポーネントが水平のレイアウトでPanel Customizableコンポーネント内にネストされている場合は、Show Detail Frameコンポーネントの幅を指定して、確実にページ表示モードでレンダリングされるようにする必要があります。

styleClass

String

はい

このコンポーネントで使用するCSSスタイル・クラス。スタイル・クラスは、JSPXページやスキニングCSSファイルなどで定義できます。

inlineStyle

String

はい

このコンポーネントで使用するCSSスタイル。これは、基本的なスタイルの変更用です。inlineStyleは、コンポーネントのルートDOM要素に適用されるCSSスタイルのセットです。inlineStyleのCSSプロパティが目的のDOM要素に反映されない場合は、スキンを作成して、::labelや::icon-styleなどの特定のDOM要素を対象にしたスキニング・キーを使用する必要があります。

headerStyle

String

はい

ヘッダーに表示されるShow Detail Frameタイトルに適用するCSSスタイル。CSSリリース2.0以上に準拠するスタイルを手動で入力します。

この属性のCSSスタイルは、一般的にタイトル・テキストのフォント、サイズおよび色の定義に使用されます。

動作属性

partialTriggers

String

はい

部分更新をトリガーするコンポーネントのID。このコンポーネントは、トリガー・コンポーネント上でリスニングします。トリガー・コンポーネントがなんらかの更新を発生させるイベントを受信した場合、このコンポーネントも更新されることをリクエストします。識別子はソース・コンポーネント(このコンポーネント)に対して相対的であり、NamingContainerで構成されている必要があります。コンポーネントがネーミング・コンテナ内にある場合、単一のコロンを使用するとページのルートから検索を開始でき、複数のコロンを使用するとNamingContainerを上方向に移動できます。たとえば、"::"を前に置くと、コンポーネントのネーミング・コンテナ(または、コンポーネントがネーミング・コンテナである場合にはそのコンポーネント自体)から出てそこから検索を開始します。":::"を前に置くと、2つのネーミング・コンテナ(コンポーネントがネーミング・コンテナである場合にはそのコンポーネント自体も含まれる)から出てそこから検索を開始します。

disclosureListener

javax.el.MethodExpression

はい

開示リスナーへのメソッド参照。

ユーザーがShow Detail Frameコンポーネントを開いたとき、または閉じたときに開示イベントが起動されます。

stretchContent

String

はい

Show Detail Frameが子コンポーネントをストレッチするかどうかを指定します。

使用可能なオプションは、true、falseおよびautoです。デフォルト値はtrue。

stretchContent属性を使用すると、ストレッチがサポートされている子コンポーネントをストレッチできます。たとえば、Panel Form Layout、Panel CustomizableおよびShow Detail Itemなどのコンテナ・コンポーネントには、ストレッチ機能が提供されています。

trueを選択した場合、子コンポーネントがShow Detail Frameのコンテンツ領域の高さと幅までストレッチされます。

Show Detail Frameのデフォルトの高さは200pxです。Show Detail Frameの高さはContentStyle属性を使用して定義されます。

autoを選択した場合、Show Detail Frameをストレッチするコンポーネント内でこれがラップされている場合のみ、子コンポーネントがストレッチされます。これ以外の場合、stretchContentはfalseに設定されます。

詳細属性

binding

oracle.adf.view.page.editor.component.ShowDetailFrame

ELのみをサポート

Beanにコンポーネント・インスタンスを格納するEL参照。この参照は、Backing Beanからコンポーネントへのプログラムによるアクセスを提供するため、またはコンポーネントの作成をBacking Beanに移すために使用できます。

attributeChangeListener

javax.el.MethodExpression

はい

属性変更リスナーへのメソッド参照。属性変更イベントは、プログラムによるプロパティへの変更の場合は配信されません。アプリケーションの特定のリクエストなしでレンダラがプロパティを変更したときにのみ配信されます。属性変更イベントの例としては、クライアント側のサイズ変更をサポートする列の幅などがあります。

selectChild

String

はい

実行時選択とカスタマイズが子コンポーネントで有効化されるかどうかを指定します。これは、コンポーザ対応ページにおいて(つまり、Show Detail FrameコンポーネントがPage Customizableコンポーネント内にネストされている場合)のみ関係します。

デフォルト値はyesです。ただし、Show Detail Frameコンポーネントの子としてタスク・フローを追加した場合は、この属性のデフォルトがnoになります。

yesを選択すると、実行時に子コンポーネントを選択してカスタマイズできます。

カスタマイズ属性

customizationAllowed

Boolean

このコンポーネントに対するカスタマイズが可能かどうかを指定します。使用可能な値はtrueおよびfalseです。デフォルト値はtrue。

customizationAllowedBy

String

カスタマイズを行うことが可能なロールを指定します。

childCreation

String

はい

Show Detail Frameコンポーネントの子(コンテンツ)がいつ作成されるかを指定します。有効な値は次のとおりです。

- immediate (デフォルト): Show Detail Frameコンポーネントがレンダリングされると、縮小されている場合でもすべての子がただちに作成されます。

- lazy: Show Detail Frameコンポーネントが展開されそうな場合に、子が作成されます。この動作は、子の作成をShow Detail Frame親コンポーネントが展開されるまで延ばすことでパフォーマンスを最適化します。子は、後続で表示するためにキャッシュ・メモリーに残ります。

- lazyUncached: Show Detail Frame親コンポーネントが展開されそうで、子が削除されて表示されていない場合に、子が作成されます。これは子が表示されていないときにはキャッシュ・メモリーに存在せず、親コンポーネントが展開されるたびに再作成する必要があることを意味します。

その他の属性

customizationId

この属性は非推奨になりました。id属性を使用してください。

helpTopicID

String

はい

コンポーネントからカスタム・ヘルプ・トピックへのリンクに使用されるヘルプ・トピックIDを指定します。

Show Detail Frameコンポーネント・インスタンスからヘルプ・トピックをリンクするには、アプリケーション・ディレクトリに直接保存されたHTMLファイル、またはJARファイルの構成部分であるヘルプ・トピックにリンクすることができます。

how

30.1.5 Show Property

Show Propertyコンポーネントは、実行時のカスタム・プロパティ・パネルでの属性またはパラメータの表示に使用します。実行時にユーザーに表示する属性またはパラメータのそれぞれにShow Propertyコンポーネントを1つ使用します。

次の表は、Show Propertyコンポーネントの新しい属性についての説明です。

表30-6 Show Propertyコンポーネントの属性

属性

タイプ

ELのサポート

説明

共通属性:

id

String

なし

コンポーネントの識別子。識別子はHTMLで許容されている構文のサブセットに従う必要があります。

- 長さがゼロの文字列にすることはできません。

- 最初の文字はASCII文字(A-Z a-z)またはアンダースコア(_)である必要があります。

- 後続の文字は、ASCII文字または数字(A-Z a-z 0-9)、アンダースコア(_)、ダッシュ(-)である必要があります。

rendered

Boolean

はい

コンポーネントがレンダリングされるかどうかを指定します。falseに設定した場合、このコンポーネントに対する出力はありません(コンポーネントはレンダリングされず、クライアントで表示することができません)。

デフォルト値はtrue。

コンポーネントのレンダリングは、「コンポーネントの表示」および「コンポーネントの非表示」オプションを使用して実行時に定義することもできます。

attributeType

String

はい

プロパティ・タイプを指定します。サポートされる値は、text、cbox、date、lovです。

value

String

はい

プロパティの現在値を指定します。valueのELバインディングが、getterありでsetterなしのBeanプロパティを指定し、またこれが編集可能コンポーネントである場合、そのコンポーネントは読取り専用モードでレンダリングされます。

label

String

はい

コンポーネントのラベルを指定します。ラベルをコントロールの上に表示する場合は、panelFormLayoutを使用します。

データ属性:

value

String

はい

プロパティの現在値を指定します。valueのELバインディングが、getterありでsetterなしのBeanプロパティを指定し、またこれが編集可能コンポーネントである場合、そのコンポーネントは読取り専用モードでレンダリングされます。

selectItem

attributeTypeがlovに設定されている場合に表示される値のリストを指定します。この属性は値のリストを動的に返すEL値を取得します。

外観属性:

columns

Int

はい

表示される文字数によって指定されるテキスト・コントロールのサイズを指定します。列数はブラウザのデフォルトのフォント・サイズを基準にして推定されます。

rows

Int

はい

表示される文字数によって指定されるテキスト・コントロールの高さを指定します。デフォルト値は1で、1行の入力フィールドを生成します。行数は、ブラウザのデフォルトのフォント・サイズに基づいて見積られます。

label

String

はい

コンポーネントのラベルを指定します。ラベルをコントロールの上に表示する場合は、panelFormLayoutを使用します。

shortDesc

String

はい

コンポーネントの短い説明を提供します。このテキストは、通常、ツールチップ・ヘルプ・テキストを表示するためにユーザー・エージェントによって使用されます。この場合、ツールチップの動作はユーザー・エージェントによって制御されます。たとえば、Firefox 2では長いツールチップは切り捨てられます。フォーム・コンポーネントの場合、shortDescはノート・ウィンドウに表示されます。

これは、ツールバー・アイコンとしてレンダリングされるカスタム・アクションにのみ適用できます。

simple

Boolean

はい

コンポーネントがラベルのサポートを提供するかどうかを制御するブール値です。trueに設定すると、コンポーネントではラベルが表示されません(label、labelAndAccessKey、accessKey、showRequired、helpファセットが無視される場合があります)。また単純なレイアウト・プリミティブが使用されない場合もあります。ユース・ケースとしては、表やfor-eachなど、ラベルが不要な場所で、繰返し可能な要素でコンポーネントが使用される場合などが考えられます。

unselectedLabel

String

はい

null値を表すオプション、つまり何も選択されていない場合のラベルを指定します。unselectedLabelが設定されておらず、コンポーネントに選択値がない場合は、空白文字列のオプションが選択ボックスの最初のオプションとしてラベルと値としてレンダリングされます(すでに定義された空白オプションがない場合)。オプションが正常に選択され、unselectedLabelが設定されていない場合、空白オプションはレンダリングされません。

動作属性:

required

Boolean

はい

非null、非空白値を入力する必要があるかどうかを指定します。falseにすると、値がnullまたは空白の場合にバリデータは実行されません。

autoSubmit

Boolean

はい

フォーム要素でTRUEに設定すると、該当するアクション(クリック、テキスト変更など)が実行されたときにコンポーネントから自動送信を行う属性を指定します。autoSubmitは部分送信であるため、このコンポーネントをポイントするpartialTriggersが指定された他のコンポーネントも送信および再レンダリングされます。

disabled

Boolean

はい

プロパティを無効として表示するかどうかを指定します。これは、MDS制限がプロパティに適用されている場合など、プロパティを無効として表示する必要があると指定されたモデルを持つイテレータ内にShow Propertyコンポーネントが存在する場合に便利です。

validator

String

はい

バリデータ・メソッドに対するメソッド参照を指定します。

valueChangeListener

javax.faces.el.MethodBinding

ELのみ

値変更リスナーに対するメソッド参照を指定します。

詳細属性:

binding

oracle.adf.view.rich.component.fragment.UIXDeclarativeComponent

ELのみをサポート

Bean内にコンポーネント・インスタンスを格納するEL参照を指定します。この参照は、Backing Beanからコンポーネントへのプログラムによるアクセスを提供するため、またはコンポーネントの作成をBacking Beanに移すために使用できます。

clientComponent

Boolean

はい

クライアント側コンポーネントが生成されるかどうかを指定します。このフラグを設定してもしなくてもコンポーネントは生成されますが、クライアントJavascriptがコンポーネント・オブジェクトを必要とする場合、コンポーネントの存在を保証するにはtrueに設定する必要があります。現在デフォルトで生成されるクライアント・コンポーネント・オブジェクトは、将来は存在しない可能性があります。このフラグを設定することがコンポーネントの存在を保証する唯一の方法であり、クライアントは暗黙的な動作に依存できません。ただし、このフラグの設定にはパフォーマンス・コストが伴うため、絶対に必要でないかぎり、クライアントではクライアント・コンポーネントを有効にすることを避ける必要があります。

componentId

コンポーザのプロパティ・パネルでShow Propertyタグを使用する場合、componentIdは、プロパティをレンダリングする必要があるコンポーネントのIDを指定します。

showELBuilder

Boolean

はい

プロパティのELビルダーを表示するかどうかを指定します。

showResourceEditor

Boolean

はい

プロパティのリソース・文字列エディタを表示するかどうかを指定します。ただし、このオプションはアプリケーションでリソース文字列編集を構成し、プロパティの型がStringの場合のみ有効化されます。

taskFlowId

String

はい

タスク・フロー・パラメータの表示にShow Propertyが使用される場合は、taskFlowIdでタスク・フローのIDが指定されます。

taskFlowParam

String

はい

タスク・フロー・パラメータの表示にShow Propertyが使用される場合は、taskFlowParamで入力フィールドを表示する必要があるタスク・フロー・パラメータが指定されます。

customizationId

この属性は非推奨になりました。id属性を使用してください。

カスタマイズ属性

customizationAllowed

Boolean

このコンポーネントに対するカスタマイズが可能かどうかを指定します。使用可能な値はtrueおよびfalseです。デフォルト値はtrue。

customizationAllowedBy

String

カスタマイズを行うことが可能なロールを指定します。

その他の属性

text

String

はい

チェック・ボックスで使用されるテキストを指定します。typeがbooleanに設定されている場合にのみ、使用されます。

サポートされているファセット

Show Propertyコンポーネントは、customLinkファセットをサポートしています。このファセットを使用すると、Command Menu Itemを含めることができるようになります。このファセットで指定されたCommand Menu Itemは、リソース文字列エディタおよびELビルダーと一緒にプロパティ・フィールドの隣のドロップダウンリストのカスタム・リンクとして表示されます。

30.2 コンポーザ固有のファイルと構成

この項では、コンポーザ機能を拡張するために変更することができる様々なファイルについて説明します。コンポーザ拡張ファイル(pe_ext.xml)のようないくつかのファイルは、コンポーザのみに関連していますが、他のファイルは、コンポーザ固有の構成のエントリを取ることができるADFの構成ファイルです。

- pe_ext.xml

- adf-config.xml

- web.xml

30.2.1 pe_ext.xml

pe_ext.xmlファイルを作成し、このファイルに要素を追加することで、新しいコンポーザ・アドオンおよびカスタム・プロパティ・パネルの登録、パネルの選択的なレンダリング、イベント・ハンドラの登録、プロパティ・フィルタの定義を実行できます。デフォルトでは、ページにOracleコンポーネントを追加する際にこのファイルを使用できません。このファイルをPortalプロジェクトのMETA-INFディレクトリに作成することができます(たとえば、APPLICATION_HOME\Portal\src\META-INFディレクトリ)。この項では、コンポーザ拡張ファイル・スキーマの各種要素について、また、スキーマ要素の使用が可能な状況を説明します。

注意:

自身のpe_ext.xmlファイルと共有ライブラリを使用するアプリケーションでは、実行の順序を定義するためにpe-extensionタグ内でsequence要素を使用します。デフォルトの設定を定めるためにsequence="first"を使用し、最後のファイルをロードし、以前ロードしたファイルによって定義された設定をオーバーライドするためにsequence="last"を使用します。

addon-config

addon-config要素を使用して、新しいコンポーザ・アドオンおよびカスタム・プロパティ・パネルのエントリを組み込みます。たとえば、アプリケーションに関する情報を表示するパネルを起動するAboutボタンを新たにページに追加するには、まず情報を含むタスク・フローを作成して、その後このタスク・フローをpe_ext.xmlファイルに登録します。addon-config要素内で宣言されるコンポーザ・アドオンは、adf-config.xmlファイルで構成されますが、addon-config要素で宣言されるカスタム・プロパティ・パネルは拡張ファイル自体のproperty-panels要素内で構成されます。

addon-config要素は、pe-extensionタグ内に挿入します。XMLファイルに追加できるaddon-config要素は1つのみです。addon-config要素内にpanels要素を指定してアドオンを定義できます。

panels

panels要素は、コンポーザへの新しいアドオンやプロパティ・パネルの登録に使用します。panels要素はaddon-config要素内に追加します。1つの拡張ファイルで設定できるpanels要素は1 つのみで、カスタム・パネルのすべてをこの要素内で定義する必要があります。

panel

panel要素を使用して、ユーザーに表示する個別のアドオンおよびプロパティ・パネルを定義します。panels要素には、コンポーザに表示するアドオンまたはプロパティ・パネルを定義する個別のpanel要素を必要な数だけ挿入できます。表示するアドオンまたはプロパティ・パネルのすべてに1つずつpanel要素を作成する必要があります。

表30-7 panel要素の属性

属性

説明

name

adf-config.xmlで新しいアドオンを、またはproperty-panelsセクションでプロパティ・パネルを参照する際に使用される識別子。これは、アプリケーション内で一意である必要があります。

title

コンポーザでタスク・フローの起動に使用されるボタンに表示されるタイトル。このプロパティにELを使用すると、ローカライズされたタイトルを表示できます。

カスタム・プロパティ・パネルの場合は、このパネルの新しいタブに表示されるタイトルです。

icon

ボタンのタイトルの横に表示されるアイコン。これはオプションです。

taskflow-id

アドオンまたはプロパティ・パネルを定義するタスク・フローのID。

help-topic-id

アドオンまたはプロパティ・パネルからカスタム・ヘルプ・トピックにリンクするヘルプ・トピックID。これはオプションです。

panel要素をファイルから削除すると、そのアドオンまたはプロパティ・パネルはページに表示されません。

次の例は、addon-config、panelsおよびpanel要素の使用方法を示しています。

<addon-config>
<panels>
<panel name="oracle.fod.custom.panel" title="About FOD"
icon="adf/webcenter/images/about.gif"
taskflow-id="/WEB-INF/about-fod.xml#about-fod"
/>
</panels>
</addon-config>

必要に応じて個別のアドオン・パネルにイベントハンドラを登録するには、次の例に示すようにpanel要素内にevent-handlers要素を追加できます。

<event-handlers>
<event-handler event="close">
oracle.fod.custom.TaskFlowEventHandler
</event-handler>
</event-handlers>

XMLコードは、汎用イベント・ハンドラの場合と同じです。

property-panels

property-panels要素を使用して、カスタム・プロパティ・パネルを登録します。addon-config要素内にproperty-panels要素を追加します。1つの拡張ファイルで指定できるproperty-panels要素は1つのみです。

property-panel

property-panel要素は、コンポーザの特定のコンポーネントに表示されるカスタム・プロパティ・パネルの定義に使用します。property-panels要素には、「コンポーネント・プロパティ」ダイアログにタブとして表示するカスタム・プロパティ・パネルを定義する個別のproperty-panel要素を必要な数だけ挿入できます。カスタム・プロパティ・パネルを登録するコンポーネントまたはタスク・フローを指定するには、それぞれcomponent要素またはtaskflow-id要素をproperty-panel内に追加する必要があります。

表30-8 property-panel要素の属性

属性

説明

name

「コンポーネント・プロパティ」ダイアログに表示するカスタム・プロパティ・パネルの識別子。

rendered

このパネルを「コンポーネント・プロパティ」ダイアログでユーザーに表示するかどうかを示します。ここではEL値を取得できます。

component

component要素を使用して、カスタム・プロパティ・パネルを登録するコンポーネントの完全修飾クラス名を指定します。1つのproperty-panel要素で指定できるcomponent要素は1つのみです。

taskflow-id

taskflow-id要素を使用して、カスタム・プロパティ・パネルを登録するタスク・フローの名前を指定します。1つのproperty-panel要素で指定できるtaskflow-id要素は1つのみです。

panel

panel要素は、コンポーネントの「コンポーネント・プロパティ」ダイアログまたは「ページ・プロパティ」ダイアログにタブとして表示されるカスタム・プロパティ・パネルの指定に使用します。1つのproperty-panel要素で、panel要素を必要な数だけ指定できます。次の表では、panel要素の属性について説明します。

表30-9 panel要素の属性

属性

説明

name

addon-configセクションでのパネルの宣言に使用する名前。

rendered

カスタム・プロパティ・パネルがレンダリングされるかどうかを指定します。

parameter

実装タスク・フローに渡されるパラメータ。

ELのみを受け取り、Map<String, String>を返す必要があります。

panel要素がファイルから削除されると、「コンポーネント・プロパティ」ダイアログにプロパティ・パネルが表示されなくなります。

次の例は、Command Buttonコンポーネントにカスタム・プロパティ・パネルを登録する方法を示しています。

<property-panels>
<property-panel name="cmdbtn"><component>oracle.rich.CommandButton</component>
<panel name="prop.panel.cmdbtn"/>
</property-panel>
</property-panels>

次の例は、タスク・フローにカスタム・プロパティ・パネルを登録する方法を示しています。

<property-panels>
<property-panel name="dashboard"><taskflow-id>/WEB-INF/dashboard-taskflow#prop-panel</taskflow-id>
<panel name="dashboard.prop-panel" />
</property-panel>
</property-panels>

lov-config

lov-config要素は、タスク・フロー・パラメータのカスタム値リストまたはピッカーの登録に使用します。lov-config要素は、pe-extensionタグの直下に追加します。1つの拡張ファイルで指定できるlov-config要素は1つのみです。この要素内では、LOV使用を登録するタスク・フローのそれぞれにtask-flow-definition要素を追加できます。LOVを提供する各パラメータにinput-parameter-definitionを追加します。次の例に示すように、enumeration要素を使用して、パラメータのLOVオプションをリストします。

<lov-config
<task-flow-definition taskflow-id="/WEB-INF/employee-details.xml#employee-details">
<input-parameter-definition>
<name>Designation</name>
<enumeration>
<item>
<name>Accounts Manager</name>
<value>Accounts Manager</value>
<description>Accounts Manager</description>
</item>
<item>
<name>Accounts Assistant</name>
<value>Accounts Assistant</value>
<description>Accounts Assistant</description>
</item>
<item>
<name>Payroll Executive</name>
<value>Payroll Executive</value>
<description>Payroll Executive</description>
</item>
<item>
<name>Senior Manager</name>
<value>Senior Manager</value>
<description>Senior Manager</description>
</item>
</enumeration>
</input-parameter-definition>
</task-flow-definition></lov-config

event-handlers

event-handler要素を使用して、コンポーザにイベント・ハンドラを登録します。event-handlersでは、event-handler要素を必要な数だけ作成して、保存、クローズ、削除、追加および選択イベントのハンドラを登録できます。たとえば、JavaクラスSaveHandlerでprocessSaveメソッドを実装してSaveイベントが呼び出されたときに特定のアクションを実行する場合は、次のようにpe_ext.xmlファイルにevent-handlerエントリを追加することでその実装をコンポーザに登録できます。

<event-handlers>
<event-handler event="save">view.SaveHandler</event-handler>
</event-handlers>

drop-handlers

drop-handlers要素は、リソース・カタログからページへのコンポーネントの追加を処理するドロップ・ハンドラの登録に使用します。drop-handlers要素は、pe-extensionタグの直下に追加します。1つの拡張ファイルで指定できるdrop-handlers要素は1つのみです。

drop-handler

drop-handler要素を使用して、コンポーザにドロップ・ハンドラを登録します。drop-handlersでは、drop-handler要素を必要な数だけ作成して、アプリケーションで作成したドロップ・ハンドラを登録できます。たとえば、XMLコンポーネントのページへの追加を処理するドロップ・ハンドラTestDropHandlerを作成した場合、次のようにpe_ext.xmlファイルにdrop-handlerエントリを追加することで、その実装をコンポーザに登録できます。

<drop-handlers>
<drop-handler>test.TestDropHandler</drop-handler>
</drop-handlers>

filter-config

filter-config要素は、実行時に編集可能なコンポーネントのプロパティ・フィルタの定義に使用します。「コンポーネント・プロパティ」ダイアログは、選択したコンポーネントに対して編集可能なプロパティを表示します。すべてのプロパティを編集に公開するわけではない場合は、特定のプロパティをフィルタ処理してそれらを「コンポーネント・プロパティ」ダイアログに表示されないようにすることができます。グローバル・レベルのフィルタを指定して、すべてのコンポーネントで共通の属性をフィルタ処理することも、タグ・レベルのフィルタを定義して、特定のコンポーネントのみでプロパティをフィルタ処理することもできます。

filter-config要素は、pe-extensionタグの直下に追加します。1つの拡張ファイルで指定できるfilter-config要素は1つのみです。

global-attribute-filter

global-attribute-filter要素を使用して、すべてのコンポーネント間で特定のプロパティをフィルタ処理します。拡張ファイルで指定できるglobal-attribute-filter要素は1つのみです。この要素には、複数のライブラリからのコンポーネントのプロパティ・フィルタを定義するattribute要素を必要な数だけ含めることができます。

taglib-filter

taglib-filter要素を使用して、特定のライブラリ内のコンポーネントのプロパティ・フィルタを定義します。複数のtaglib-filter要素を組み込むと、複数のライブラリ内のコンポーネントのプロパティをフィルタ処理できます。この要素内ではライブラリに属するすべてのコンポーネントにtag要素を組み込むことができます。

表30-10 tag要素の属性

属性

説明

namespace

フィルタ対象のプロパティが存在するコンポーネントを含むタグ・ライブラリのネームスペース。

tag

tagは、フィルタ対象のプロパティが存在するコンポーネントの指定に使用されます。taglib-filter要素内には、複数のtag要素を組み込むことができます。この要素内では、フィルタ対象にするすべてのプロパティにattribute要素を組み込むことができます。

次の表では、tag要素が受け入れ可能な属性について説明します。

表30-11 tag要素の属性

属性

説明

name

フィルタ適用対象のプロパティが存在するコンポーネントの名前。commandButton、portletなど。

attribute

attribute要素は、すべてのコンポーネントまたは指定したコンポーネントのみでフィルタ処理するプロパティの指定に使用します。global-levelのフィルタを定義するには、global-attribute-filter内にattribute要素を組み込む必要があります。特定のコンポーネントのプロパティ・フィルタを定義するには、taglib-filter内にattribute要素を組み込む必要があります。

次の表では、attribute要素が受け入れ可能な属性について説明します。

表30-12 attribute要素の属性

属性

説明

name

フィルタ対象のプロパティの名前。

filtered

プロパティをフィルタ処理するかどうかを指定します。値としてtrueまたはfalseを取ります。特定のビューでプロパティをフィルタするには、view属性を使用します。

label

UIのプロパティのラベル。ローカライズされた文字列を取得、またはビューに応じて異なるラベルを表示するには、ELを使用します。

view

(オプション)このプロパティを表示/非表示するビュー。designまたはsourceの値を取ります。

次の例では、グローバルおよびコンポーネント・レベルのプロパティ・フィルタを定義する方法を示しています。

<filter-config>
<global-attribute-filter>
<attribute name="readOnly" filtered="false" label="Read Only"/>
<attribute name="required" filtered="false" label="Mandatory"/>
<attribute name="shortDesc" filtered="false" label="#{composerBundle.PNL_TB_SHORTDESC}"/>
</global-attribute-filter>

<taglib-filter namespace="http://xmlns.oracle.com/adf/faces/rich">
<tag name="goLink">
<attribute name="accessKey" view="design"/>
<attribute name="targetFrame" filtered="false" view="source"/>
<attribute name="destination" filtered="false" label="#{pageEditorPanelBean.layoutView ?  'Where do you want to surf?' : 'Destination'}"/>
</tag>
<tag name="inputText">
<attribute name="all" view="design"/>
<attribute name="label" label="Field Name" filtered="false" />
<attribute name="readOnly" filtered="false" />
<attribute name="required" filtered="false" />
<attribute name="rendered" filtered="false" />
<attribute name="wrap" filtered="false" />
</tag>
</taglib-filter>
</filter-config>

elbuilder-config

elbuilder-config要素は、式ビルダーのカスタム値の構成に使用します。式ビルダーは、コンポーザの「コンポーネント・プロパティ」から起動され、ユーザーによるコンポーネント・プロパティのEL値の指定を可能にします。ユーザーは、事前定義された値セットからの選択、またはテキスト・ボックスへのEL値の入力を実行できます。式ビルダーをカスタマイズすると、より多くのオプションをユーザーに提示できます。

elbuilder-config要素は、pe-extensionタグの直下に追加します。1つの拡張ファイルで指定できるelbuilder-config要素は1つのみです。

selector

次の例に示すように、selector要素を使用して、カスタム・オプションを定義して組み込みます。

<elbuilder-config>
<!-- define selector -->
<selector id="CustomELParameter">
view.CustomELParameter
</selector>
<!-- include selector -->
<selectors>
<selector id="CustomELParameter"/>
</selectors>
</elbuilder-config>

selectors要素内には、複数のselector要素を組み込むことができます。

selection-config

selection-config要素を使用すると、特定のコンポーネントの直接選択を有効または無効にしたり、関連する操作を定義できます。コンポーネントを選択可能にするためには、このタグ内で操作を定義する必要があります。

<selection-config>タグ内で、<global-filter>および<selection-taglib-filter>を使用しするネームスペースとタグによって選択をグローバルに構成することができます。

selection

selectionタグは、直接選択ビューを有効にするために使用します。

operation

利用可能な操作は、各特定コンポーネントの下の<operation>タグ内で定義されています。次の要素は、操作の定義に使用されます。

- name: 実行される操作を定義します。(標準操作またはカスタム操作を使用します。)

- label (オプション): ポップアップ・ウィンドウ内のタブ・ラベルとして操作名をオーバーライドします。

- filtered: ポップアップ・ウィンドウの操作を含むようにfalseに設定します。

<selection-config>
<global-filter>
<selection view="design" enabled="false"/>
</global-filter>

<selection-taglib-filter
namespace="http://xmlns.oracle.com/adf/faces/customizable">
<tag name="showDetailFrame">
<selection view="design" enabled="true"/>
<operation name="oracle.adf.pageeditor.pane.sdfprop"
label="SDF Change Property"
filtered="false"/>
</tag>
</selection-taglib-filter>
</selection-config>

pe_ext.xmlファイルのサンプル

次に、各種の要素を使用してコンポーザの機能を拡張するpe_ext.xmlファイルのサンプルを示します。

<pe-extension xmlns="http://xmlns.oracle.com/adf/pageeditor/extension">

<addon-config>
<!-- Composer add-on panels configuration -->
<panels>
<panel name="oracle.fod.custom.panel" title="About FOD"
icon="adf/webcenter/images/about.gif"
taskflow-id="/WEB-INF/about-fod.xml#about-fod"/>
</panels>

<!-- Composer property panels configuration -->
<property-panels>
<property-panel name="cmdbtn">
<component>oracle.rich.CommandButton</component>
<panel name="prop.panel.cmdbtn" />
</property-panel>
</property-panels>
</addon-config>

<Save event handler configuration -->
<event-handlers>
<event-handler event="save">view.SaveHandler</event-handler>
</event-handlers>

<!-- Test drop handler configuration -->
<drop-handlers>
<drop-handler>test.TestDropHandler</drop-handler>
</drop-handlers>

<!-- Property filter configuration. Properties defined here are not displayed in Composer. -->
<filter-config>
<global-attribute-filter>
<attribute name="accessKey" />
<attribute name="attributeChangeListener" />
<attribute name="autoSubmit" />
<attribute name="binding" />
</global-attribute-filter>
<taglib-filter namespace="http://xmlns.oracle.com/adf/faces/rich">
<tag name="commandButton">
<attribute name="text" />
<attribute name="icon" />
</tag>
</filter-config>
</pe-extension>

30.2.2 adf-config.xml

adf-config.xmlファイルでは、通常はデプロイ時に決定され、実行時に変更されることも多いアプリケーションレベルの設定が指定されています。このファイルは、アプリケーションの作成時に作成されて、「アプリケーション・リソース」パネルのDescriptorsの下のADF META-INFフォルダに配置されます。次の例では、Portal Frameworkアプリケーションの作成時に作成される最小限のadf-config.xmlファイルを示しています。

<?xml version="1.0" encoding="windows-1252" ?>
<adf-config xmlns="http://xmlns.oracle.com/adf/config"
xmlns:adf="http://xmlns.oracle.com/adf/config/properties">
<adf:adf-properties-child xmlns="http://xmlns.oracle.com/adf/config/properties">
<adf-property name="adfAppUID" value="Application4-2138"/>
</adf:adf-properties-child>
</adf-config>

Page Customizableコンポーネントをページに追加すると、特定の必須構成がadf-config.xmlファイルに追加されます。

新しいアドオンやカスタム・プロパティ・パネルの登録、選択的なアドオンのレンダリング、カスタマイズ・レイヤーの作成、コンポーザ・サンドボックスの有効/無効、カスタム・リソース・カタログの作成、「構造」ビューの無効化といったタスクを実行するときには、adf-config.xmlファイルを更新する必要があります。次の各項では、コンポーザ固有の構成に使用される様々なadf-config.xmlの要素について説明します。

page-editor-config

<pe:page-editor-config>要素を使用して、アドオン・パネルの登録、サンドボックスの構成、リソース文字列エディタの構成などのコンポーザ固有の構成を組み込みます。<pe:page-editor-config>要素は、次の例に示すようにadf-configタグ内に追加します。

<adf-config xmlns="http://xmlns.oracle.com/adf/config"
xmlns:adf="http://xmlns.oracle.com/adf/config/properties"
xmlns:mdsC="http://xmlns.oracle.com/adf/mds/config">
. . .
<pe:page-editor-config xmlns="http://xmlns.oracle.com/adf/pageeditor/config">
. . .
</pe:page-editor-config>
</adf-config>

addon-panels

<pe:addon-panel>要素を使用して、adf-config.xmlファイル内でアドオンを登録します。<pe:addon-panel>要素は、<pe:addon-panels>要素内にのみ配置する必要があります。カスタム・パネルを登録するための任意の数の<pe:addon-panel>要素を指定できます。次の例では、これらの要素を使用して新しいアドオンを登録する方法を示しています。

<pe:page-editor-config xmlns="http://xmlns.oracle.com/adf/pageeditor/config">
<pe:addon-panels>
<!-- Page Properties add-on -->
<pe:addon-panel name="oracle.adf.pageeditor.addonpanels.page-settings" />

<!-- Page Reset add-on -->
<pe:addon-panel name="oracle.adf.pageeditor.addonpanels.page-reset" /><pe:addon-panel name="oracle.fod.custom.panel" />

</pe:addon-panels>
. . .
</pe:page-editor-config>

<pe:addon-panel>要素は、rendered属性もサポートしています。この属性では、EL値を指定でき、パネルをコンポーザで表示する必要があるかどうかを指定します。

カスタム・アドオンの登録時には、デフォルト・アドオンのエントリも含める必要があります。デフォルト・アドオンが登録されていない場合は、カスタム・アドオンのみがコンポーザで使用可能になります。

<pe:addon-panel>要素は、次のパラメータをサポートしています。

- rendered: 該当アドオンを表示する必要があるかどうかを指定します。rendered属性には、true、falseまたはEL値を指定できます。この属性を使用して、特定の基準に基づいて条件付きでアドオンを表示します。

- parameters: パラメータをアドオン・タスク・フローに宣言的に渡すために使用します。parameters属性には、次の例に示すようにEL値を指定できます。

<pe:addon-panels>
<pe:addon-panel name="oracle.adf.pageeditor.addonpanels.customization-manager" parameters="#{AppUtilBean.customizationManagerParams}"/>
. . .
</pe:addon-panels>

ここでAppUtilBeanは、パラメータをアドオン・タスク・フローに渡すためのロジックを提供します。

sandbox-namespaces

<pe:sandbox-namespaces>要素を使用して、実行時にサンドボックスの作成を有効にする対象となるすべてのメタデータのネームスペースを登録します。サンドボックス作成の有効化の詳細は、「コンポーザのサンドボックスの作成を有効にする方法」を参照してください。

<pe:sandbox-namespaces>要素は、<pe:page-editor-config>要素内に挿入します。次の例では、sandbox-namespaces要素の使用方法を示しています。

<pe:page-editor-config xmlns="http://xmlns.oracle.com/adf/pageeditor/config">
. . .
<pe:sandbox-namespaces>
<pe:namespace path="/pages"/>
<pe:namespace path="/pageDefs"/>
</pe:sandbox-namespaces>
</pe:page-editor-config>

session-options-factory

アプリケーションでカスタマイズ・レイヤーを作成する際は、<pe:session-options-factory>要素を使用して、ComposerSessionOptionsFactoryの実装をコンポーザに登録します。このクラスには、指定された基準に基づいてカスタマイズ内容を様々なレイヤーに保存するためのロジックが含まれています。詳細は、「カスタマイズ・レイヤーの表示モードおよび編集モードへの追加: 例」を参照してください。

次の例では、AppsSessionOptionsFactoryImplという名前のクラスを登録する方法を示しています。

<pe:page-editor-config xmlns="http://xmlns.oracle.com/adf/pageeditor/config">
. . .
<pe:session-options-factory>view.AppsSessionOptionsFactoryImpl</pe:session-options-factory>
</pe:page-editor-config>

enable-design-views

コンポーザの直接選択を有効にするには、最初に「選択」ビューを有効にする必要があります。直接選択機能の詳細は、「「デザイン」ビューまたは「コンテンツの追加」ビューでの直接選択の有効化」を参照してください。<pe:page-editor-config>タグの内側に<pe:enable-design-views>タグを追加して、使用可能なビューを定義します。指定できる値は、design、add-content、select、source、previewおよびallです。値allを指定すると、design、select、sourceおよびpreviewのみが表示されます。これは、add-contentがdesignのサブセットであるためです。

allow-elおよびprotect-el

ELを無効にしたり、既存のELを上書きから保護するためにコンポーザを構成することができます。ELがアプリケーション・ページで実行できるかどうかを定義するために<pe:allow-el>を使用します。デフォルトは、trueです。フォーム要素のELを編集できるかどうかを定義するために<pe:protect-el>を使用します。デフォルトはfalseです。詳細は、「式言語の保護方法」を参照してください。

次の例では、ELを無効にします。

<pe:page-editor-config xmlns="http://xmlns.oracle.com/adf/pageeditor/config">
. . .
<pe:allow-el>false</pe:allow-el>
</pe:page-editor-config>

rcv-config

<rcv-config>要素は、コンポーザにカスタム・リソース・カタログを登録する場合や、複数のリソース・カタログを使用する際にResourceCatalogSelectorの実装を登録する場合に使用します。

デフォルトのリソース・カタログのかわりにカスタム・リソース・カタログをユーザーに表示するには、最初に必要なコンテンツが含まれたカタログ定義ファイルを作成してから、このカタログ定義をコンポーザの拡張ファイルとadf-config.xmlファイル内で登録する必要があります。そうすることで、ユーザーがページ上の「コンテンツの追加」ボタンをクリックすると、カスタム・リソース・カタログが表示されるようになります。

<rcv-config>要素は、adf-configタグ内に挿入します。次の例では、<rcv-config>要素を使用してusers-catalogという名前のカスタム・カタログを登録する方法を示しています。

<adf-config xmlns="http://xmlns.oracle.com/adf/config"
xmlns:adf="http://xmlns.oracle.com/adf/config/properties"
xmlns:mdsC="http://xmlns.oracle.com/adf/mds/config">
. . .
<rcv-config xmlns="http://xmlns.oracle.com/adf/rcs/viewer/adf-config">
<default-catalog catalog-name="users-catalog"/>
</rcv-config>
</adf-config>

コンポーザを使用して複数のリソース・カタログを構成し、指定された条件に応じてユーザーごとに異なるカタログを表示することもできます。複数のリソース・カタログを構成する際は、<rcv-config>要素と<catalog-selector>要素を使用して、リソース・カタログを選択するためのロジックが含まれているResourceCatalogSelectorの実装を登録します。

次の例では、<rcv-config>要素を使用してCatalogSelectorという名前のResourceCatalogSelectorの実装を登録する方法を示しています。

<adf-config xmlns="http://xmlns.oracle.com/adf/config"
xmlns:adf="http://xmlns.oracle.com/adf/config/properties"
xmlns:mdsC="http://xmlns.oracle.com/adf/mds/config">
. . .
<rcv-config xmlns="http://xmlns.oracle.com/adf/rcs/viewer/adf-config">
<catalog-selector class-name="webcenter.CatalogSelector"/>
<default-catalog catalog-name="default-catalog"/>
</rcv-config>
</adf-config>

customizableComponentsSecurity

<customizableComponentsSecurity>要素を使用して、Show Detail Frameアクションの制限を適用します。<customizableComponentsSecurity>要素は、adf-configタグ内に挿入します。

<customizableComponentsSecurity>要素内には、<enableSecurity>、<actionsCategory>、<actions>および<custom-actions>という要素を指定できます。

enableSecurity

<enableSecurity>要素を使用して、Show Detail Frameアクションのセキュリティ継承動作をオーバーライドします。この要素には、trueまたはfalseという値を指定できます。trueに設定した場合は、ユーザーがコンポーネントを変更できるかどうかは、まずページ権限に基づいて決定され、次に、そのタイプの権限に対して指定されている現在のアクション・セットに応じて調整されます。falseに設定した場合は、ユーザーはすべてのアクションを選択可能になります。adf-config.xmlで構成されたアクションとユーザーのページ権限は無視されます。

actionsCategory

<actionsCategory>要素を使用して、一連のShow Detail Frameアクションの制限を同時に適用します。<actionsCategory>要素内には、サポートされているカテゴリの<actionCategory>要素を指定できます。アクション・カテゴリの詳細は、「アクション・カテゴリ・レベルでのセキュリティの定義」を参照してください。

次の例は、actionsCategoryの使用方法を示しています。

<adf-config xmlns="http://xmlns.oracle.com/adf/config"
xmlns:adf="http://xmlns.oracle.com/adf/config/properties"
xmlns:mdsC="http://xmlns.oracle.com/adf/mds/config">
. . .
<cust:customizableComponentsSecurity
xmlns="http://xmlns.oracle.com/adf/faces/customizable/config">
<cust:enableSecurity value="true"/>

<cust:actionsCategory>
<cust:actionCategory name="personalizeActionsCategory" value="false"/>
<cust:actionCategory name="editActionsCategory" value="true"/>
</cust:actionsCategory>

<cust:actions>
. . .
</cust:actions>

</cust:customizableComponentsSecurity>
</adf-config>

actions

<actions>要素を使用して、個別のアクションの制限を適用します。各actions要素内には、すべてのサポートされているアクションの<action>要素を指定できます。

次の例では、<actions>の使用方法を示しています。

<adf-config xmlns="http://xmlns.oracle.com/adf/config"
xmlns:adf="http://xmlns.oracle.com/adf/config/properties"
xmlns:mdsC="http://xmlns.oracle.com/adf/mds/config">
. . .
<cust:customizableComponentsSecurity
xmlns="http://xmlns.oracle.com/adf/faces/customizable/config">
<cust:enableSecurity value="true"/>

<cust:actionsCategory>
. . .
</cust:actionsCategory>

<cust:actions>
<cust:action name="showMinimizeAction" value="true"/>
<cust:action name="showMoveAction" value="false"/>
</cust:actions>

</cust:customizableComponentsSecurity>
<adf-config>

アクション・レベルの制限の適用の詳細は、「Panel CustomizableおよびShow Detailコンポーネント・アクションでのアクション・レベルの制限の適用」を参照してください。

custom-actions

<custom-actions>要素を使用して、他のShow Detail Frameアクションとともに表示するカスタム・アクションを定義します。customizableComponentsSecurityセクション内には、1つの<custom-actions>要素のみを追加する必要があります。この要素内には、個別のカスタム・アクションを定義するための任意の数の<custom-action>要素を追加できます。

注意:

別の方法として、<customizableComponentsSecurity>セクション内ではなく<adf-config-child>要素内に<custom-actions>要素を追加することもできます。

カスタム・アクションの詳細は、「タスク・フローを囲んでいるShow Detail Frameでのカスタム・アクションの追加」を参照してください。

mds-config

コンポーネントに対するタイプ・レベルのアプリケーション・カスタマイズ制限を定義する際は、<mds-config>要素を使用して、特定のコンポーネントに適用される制限を記述している独立したXMLファイルを登録します。タイプ・レベルの制限適用の詳細は、「タイプ・レベルのカスタマイズ・ポリシーの定義方法」を参照してください。

<mds-config>要素は、<adf-config>タグ内に挿入します。<mds-config>要素は、次のように追加できます。

<mds-config xmlns="http://xmlns.oracle.com/mds/config">
<type-config>
<standalone-definitions>
<file>Directory_Name/standalone.xml</file>
</standalone-definitions>
</type-config>
</mds-config>

resource-string-editor

<pe:resource-string-editor>要素を使用して、アプリケーション内でリソース文字列の編集を可能にします。<pe:resource-string-editor>要素は、次の例に示すように、<pe:page-editor-config>セクション内に挿入します。

<pe:page-editor-config xmlns="http://xmlns.oracle.com/adf/pageeditor/config">
. . .
<pe:resource-string-editor>
<pe:enabled>true</pe:enabled>
</pe:resource-string-editor>
</pe:page-editor-config>

詳細は、「実行時リソース文字列編集の構成」を参照してください。

enable-source-view

<pe:enable-source-view>要素を使用して、コンポーザ内で「構造」ビューを有効または無効にします。<pe:enable-source-view>要素は、<pe:page-editor-config>セクション内に挿入します。「構造」ビューは、デフォルトではコンポーザ内で有効になっています。「ソース」ビューを無効にするには、次の例に示すように<pe:enable-source-view>をfalseに設定します。

<pe:page-editor-config xmlns="http://xmlns.oracle.com/adf/pageeditor/config">
. . .
<pe:enable-source-view>false</pe:enable-source-view>
</pe:page-editor-config>

詳細は、「アプリケーションの「構造」ビューの無効化」を参照してください。

enable-zoom

<pe:enable-zoom>要素を使用して、コンポーザ内でタスク・フローをズーム・インする機能を有効または無効にします。<pe:enable-zoom>要素は、<pe:page-editor-config>セクション内の<pe:source-view>タグの内側に挿入します。タスク・フローのズームは、デフォルトではコンポーザ内で有効になっています。この機能を無効にするには、次の例に示すように<pe:enable-zoom>をfalseに設定します。

<pe:page-editor-config xmlns="http://xmlns.oracle.com/adf/pageeditor/config">
. . .
<pe:source-view>
<pe:enable-zoom>false</pe:enable-zoom>
</pe:source-view>
</pe:page-editor-config>

詳細は、「タスク・フローのズーム機能の無効化」参照してください。

persistent-change-manager

この要素を使用して、コンポーザで加えた変更を永続化するために使用する変更マネージャを構成します。<persistent-change-manager>要素は、<adf-faces-config>セクション内に挿入します。アプリケーションのカスタマイズ内容をMDSに永続化するには、次のように<persistent-change-manager>をMDSDocumentChangeManagerに設定する必要があります。

<adf-faces-config xmlns="http://xmlns.oracle.com/adf/faces/config">
<persistent-change-manager>
<persistent-change-manager-class>oracle.adf.view.rich.change.MDSDocumentChangeManager</persistent-change-manager-class>
</persistent-change-manager>
. . .
</adf-faces-config>

コンポーザ内の変更の永続性の詳細は、「永続性変更マネージャの構成」を参照してください。

<persistent-change-manager要素の詳細は、『Fusion Middleware Oracle Application Development FrameworkによるFusion Webアプリケーションの開発』のユーザー・カスタマイズを有効にした場合の処理内容に関する項を参照してください。

taglib-config

<taglib-config>要素を使用して、デフォルトで永続化される必要のあるコンポーネント・タグを指定します。この要素が有効になるのは、adf-config.xmlファイルで<persistent-change-manager>を使用して変更の永続性を定義している場合のみです。

コンポーザ・コンポーネントをページに追加すると、adf-config.xmlファイルには、永続化される必要のあるタグと属性のリストが含まれた<taglib-config>要素が移入されます。このデフォルトのリストにさらに要素や属性を追加できます。

この要素の詳細は、『Fusion Middleware Oracle Application Development FrameworkによるFusion Webアプリケーションの開発』のユーザー・カスタマイズを有効にした場合の処理内容に関する項を参照してください。

<taglib-config>要素は、<adf-faces-config>セクション内に挿入します。<taglib-config>要素は、次の例のような内容になります。

<adf-faces-config xmlns="http://xmlns.oracle.com/adf/faces/config">
. . .
<taglib-config>
<taglib uri="http://xmlns.oracle.com/adf/faces/customizable">
<tag name="showDetailFrame">
<persist-operations>all</persist-operations>
<attribute name="expansionMode">
<persist-changes>true</persist-changes>
</attribute>
<attribute name="contentStyle">
<persist-changes>true</persist-changes>
</attribute>
</tag>
<tag name="panelCustomizable">
<persist-operations>all</persist-operations>
</tag>
</taglib>
</taglib-config>
</adf-faces-config>

詳細は、「永続性変更マネージャの構成」を参照してください。

security-config

この要素を使用して、コンポーザ固有のセキュリティ構成を指定変更します(特に、アプリケーション・レベルのチェックによってデフォルトのセキュリティ・ポリシーを指定変更する場合)。<pe:security-config>要素は、<pe:page-editor-config>セクション内に挿入します。security-config要素内には、<pe:security-policies>、<pe:security-policy>、<pe:policy-class>および<pe:task-flow-security>の各要素を指定できます。

security-policies

この要素を使用して、コンポーザ向けのすべてのセキュリティ・ポリシーとポリシー指定変更を含めます。<pe:security-policies>要素は、<pe:page-editor-config>セクションに1つのみ指定できます。

security-policy

この要素を使用して、既存のポリシーを指定変更します。指定変更するポリシーごとに、1つの<pe:security-policy>要素を追加します。

<pe:security-policy>要素はname属性とoverride属性をサポートしており、nameを使用して、カスタム・ポリシーの登録対象となる名前を指定して、overrideを使用して、指定変更するデフォルト・ポリシーの名前を指定します。

policy-class

この要素を使用して、カスタム・セキュリティ・ポリシーの名前を指定します。

task-flow-security

この要素をcheck-permission属性と組み合せて使用して、コンポーザがタスク・フローの権限の有無を確認できるようにします。これにより、適切な権限を持つユーザーのみがそのタスク・フローを実行時に編集またはカスタマイズすることを許可されます。

詳細は、「タスク・フローのセキュリティの実装」を参照してください。

例30-1 サンプルadf-config.xmlファイル

コンポーザ固有の構成を含むサンプルのadf-config.xmlファイルを示します。

<?xml version="1.0" encoding="windows-1252" ?>
<adf-config xmlns="http://xmlns.oracle.com/adf/config"
xmlns:adf="http://xmlns.oracle.com/adf/config/properties"
xmlns:mdsC="http://xmlns.oracle.com/adf/mds/config">
<adf:adf-properties-child xmlns="http://xmlns.oracle.com/adf/config/properties">
<adf-property name="adfAppUID" value="configfilesapp-7198"/>
</adf:adf-properties-child>

<mdsC:adf-mds-config version="11.1.1.000">
<mds-config xmlns="http://xmlns.oracle.com/mds/config">
<persistence-config>
<metadata-namespaces>
<namespace path="/oracle/adf/rc/metadata"
metadata-store-usage="WebCenterFileMetadataStore"/>
<namespace path="/persdef/"
metadata-store-usage="WebCenterFileMetadataStore"/>

<!-- Namespace definitions for Composer sandbox -->
<!-- Your jspx customizations alone go here -->
<namespace path="/pages" metadata-store-usage="WebCenterFileMetadataStore">
<namespace-restriction type="CUSTOMIZATIONS"/>
</namespace>
<!-- Your pagedef customizations alone go here -->
<namespace path="/pageDefs" metadata-store-usage="WebCenterFileMetadataStore">
<namespace-restriction type="CUSTOMIZATIONS"/>
</namespace>
</metadata-namespaces>
<metadata-store-usages>
<metadata-store-usage id="WebCenterFileMetadataStore"
default-cust-store="true">
<metadata-store class-name="oracle.mds.dt.persistence.stores.file.SrcControlFileMetadataStore">
<property name="metadata-path" value="../../mds"/>
</metadata-store>
</metadata-store-usage>
</metadata-store-usages>
</persistence-config>
<cust-config>
<match>
<customization-class name="oracle.adf.share.config.SiteCC"/>
</match>
</cust-config>
<cache-config>
<max-size-kb>100000</max-size-kb>
</cache-config>

<!-- Registration of a standalone XML file used for type-level customization policies -->
<type-config>
<standalone-definitions>
<file>Directory_Name/standalone.xml</file>
</standalone-definitions>
</type-config>
</mds-config>
</mdsC:adf-mds-config>

<pe:page-editor-config xmlns="http://xmlns.oracle.com/adf/pageeditor/config">

<!-- Composer add-on panel configuration -->
<pe:addon-panels>
<pe:addon-panel name="oracle.adf.pageeditor.addonpanels.page-settings" />
<pe:addon-panel name="oracle.adf.pageeditor.addonpanels.page-reset" />
<pe:addon-panel name="oracle.fod.custom.panel" />
</pe:addon-panels>

<!-- Composer sandbox configuration -->
<pe:sandbox-namespaces>
<pe:namespace path="/pages"/>
<pe:namespace path="/pageDefs"/>
</pe:sandbox-namespaces>

<!-- ComposerSessionOptionsFactory class registration for implementing customization layers -->
<pe:session-options-factory>view.AppsSessionOptionsFactoryImpl</pe:session-options-factory>

<!-- Resource string editor configuration -->
<pe:resource-string-editor>
<pe:enabled>true</pe:enabled>
</pe:resource-string-editor>

<!-- Switch to enable or disable Composer Source view -->
<pe:enable-source-view>false</pe:enable-source-view>

</pe:page-editor-config>

<!-- Multiple resource catalog configuration -->
<rcv-config xmlns="http://xmlns.oracle.com/adf/rcs/viewer/adf-config">
<catalog-selector class-name="webcenter.CatalogSelector"/>
<default-catalog catalog-name="users-catalog"/>
</rcv-config>

<!-- Composer and WebCenter Portal Customizable Components actions security configuration -->
<cust:customizableComponentsSecurity xmlns="http://xmlns.oracle.com/adf/faces/customizable/config">
<cust:enableSecurity value="true"/>
<cust:actionsCategory>
<cust:actionCategory name="personalizeActionsCategory" value="false"/>
<cust:actionCategory name="editActionsCategory" value="true"/>
</cust:actionsCategory>
<cust:actions>
<cust:action name="showMinimizeAction" value="true"/>
<cust:action name="showMoveAction" value="false"/>
</cust:actions>
</cust:customizableComponentsSecurity>

<adf-faces-config xmlns="http://xmlns.oracle.com/adf/faces/config">

<!-- Composer persistence change manager configuration -->
<persistent-change-manager>
<persistent-change-manager-class>oracle.adf.view.rich.change.MDSDocumentChangeManager</persistent-change-manager-class>
</persistent-change-manager>

<!-- Composer default persistence configuration -->
<taglib-config>
<taglib uri="http://xmlns.oracle.com/adf/faces/customizable">
<tag name="showDetailFrame">
<persist-operations>all</persist-operations>
<attribute name="expansionMode">
<persist-changes>true</persist-changes>
</attribute>
<attribute name="contentStyle">
<persist-changes>true</persist-changes>
</attribute>
</tag>
<tag name="panelCustomizable">
<persist-operations>all</persist-operations>
</tag>
</taglib>
</taglib-config>
</adf-faces-config>
</adf-config>

30.2.3 web.xml

web.xmlファイルは、Webアプリケーションに関する詳細情報が含まれたJava EE標準ディスクリプタです。Page Customizableコンポーネントをページに追加すると、Application_Root\Project_Name\public_html\WEB-INFディレクトリ内のweb.xmlファイルが更新されて、他の設定の間で変更永続性が有効になります。

複数のカスタマイズ・レイヤーを使用するアプリケーションを作成する際や、コンポーザのサンドボックスを有効にする際は、web.xmlをさらに更新する必要があります。以降の項では、web.xml内のコンポーザ固有の構成について説明します。

CHANGE_PERSISTENCEコンテキスト・パラメータ

アプリケーションのweb.xmlファイル内のCHANGE_PERSISTENCEコンテキスト・パラメータは、アプリケーションのカスタマイズ内容がどのように永続化されるのかを指定します。コンポーザ対応ページ内の変更内容をMDS内で永続化できるようにするには、次の例に示すようにCHANGE_PERSISTENCEコンテキスト・パラメータをComposerChangeManagerに設定する必要があります。

<context-param>
<param-name>org.apache.myfaces.trinidad.CHANGE_PERSISTENCE</param-name>
<param-value>oracle.adf.view.page.editor.change.ComposerChangeManager</param-value>
</context-param>

このコンテキスト・パラメータは、MDSへの永続化を保証するために使用されるChangeManagerクラスを登録します。Page Customizableコンポーネントを新しいPortal Frameworkアプリケーション内のページに追加すると、この構成は自動的に実行されます。ただし、既存のADFアプリケーション内では、このコンテキスト・パラメータは他の値に設定される可能性があります(sessionやoracle.adf.view.rich.change.FilteredPersistenceChangeManagerなど)。したがって、このようなアプリケーションにコンポーザ・コンポーネントを追加する際は、CHANGE_PERSISTENCEパラメータがComposerChangeManagerに設定されていることを確認する必要があります。

詳細は、「永続性変更マネージャの構成」を参照してください

WebCenterComposerFilter

web.xmlファイル内でWebCenterComposerFilterを使用して、すべてのHTTPリクエストについてコンポーザのComposerSessionOptionsFactoryをOracle ADFに登録します。そうすることで、そのリクエストはComposerSessionOptionsFactoryの実装に応じて処理されるようになります。このフィルタは、次の例に示すように定義できます。

<filter-mapping>
<filter-name>WebCenterComposerFilter</filter-name>
<url-pattern>/faces/*</url-pattern>
<dispatcher>FORWARD</dispatcher>
<dispatcher>REQUEST</dispatcher>
</filter-mapping>

次のタスクを実行する際は、WebCenterComposerFilterを使用する必要があります。

- カスタマイズ・レイヤーの作成。詳細は、「カスタマイズ・レイヤーの表示モードおよび編集モードへの追加: 例」を参照してください。

- コンポーザでのサンドボックス作成の有効化。詳細は、「コンポーザのサンドボックスの作成を有効にする方法」を参照してください。

30.3 コンポーザのデフォルト・アドオンとプロパティ・パネル

この項では、コンポーザでデフォルトで使用できるアドオンとプロパティ・パネルを紹介します。

デフォルトのアドオン

この項では、コンポーザで使用可能なアドオンを列挙して、adf-config.xmlファイル内でこれらのアドオンが登録されている対象の名前を示します。これらの名前は、アプリケーションでアドオンの表示を有効または無効にするために必要になるため、これらの名前を知っておくと役に立ちます。

- ページ・プロパティ
ページ・プロパティを編集するため、およびページ・パラメータを作成するために使用します。

このアドオンは、adf-config.xmlファイル内でoracle.adf.pageeditor.addonpanels.page-settingsという名前に登録されています。

- ページのリセット
ページのカスタマイズ内容をリセットするために使用します。

このアドオンは、adf-config.xmlファイル内でoracle.adf.pageeditor.addonpanels.page-resetという名前に登録されています。

- カスタマイズ・マネージャ
ページやタスク・フローに加えられたカスタマイズ内容を管理するために使用します。

このアドオンは、adf-config.xmlファイル内でoracle.adf.pageeditor.addonpanels.customization-managerという名前に登録されています。

「ページ・プロパティ」アドオンと「ページのリセット」アドオンは、デフォルトで表示されます。アプリケーション内でカスタム・アドオンを作成する場合は、それらのアドオンをadf-config.xmlで登録する一方で、デフォルト・アドオンのエントリも含める必要があります。これらのエントリがないと、デフォルト・アドオンはコンポーザに表示されません。

デフォルトのプロパティ・パネル

この項では、「コンポーネント・プロパティ」ダイアログと「ページ・プロパティ」ダイアログでデフォルトで使用可能なプロパティ・パネルを列挙して、pe_ext.xmlファイル内でこれらのパネルが登録されている対象の名前を示します。これらの名前が役に立つのは、デフォルト・パネルをカスタム・プロパティ・パネルに指定変更する場合や、一部またはすべてのデフォルト・パネルを非表示にする場合です。また、特定のパネルを有効にして、コンポーザの「コンテンツの追加」ビューまたは「デザイン」ビューに詳細を表示することもできます。

- 表示オプション
コンポーネントの表示関連の動作を設定するために使用します。このパネルは、すべてのプロパティの「コンポーネント・プロパティ」ダイアログに表示されます。

pe_ext.xmlファイル内では、このパネルはoracle.adf.pageeditor.pane.generic-property-inspectorという名前によって参照されます。

- 表示オプション(Show Detail Frame)
Show Detail Frameコンポーネントの表示関連の動作を設定するために使用します。このパネルは、Show Detail Frameコンポーネントのみの「コンポーネント・プロパティ」ダイアログに表示されます。

pe_ext.xmlファイル内では、このパネルはoracle.adf.pageeditor.pane.sdfpropという名前によって参照されます。

- タブ
Panel CustomizableコンポーネントやBoxコンポーネント上のタブの順序や表示プロパティを設定するために使用します。このパネルは、Panel TabbedコンポーネントまたはPanel Customizableコンポーネントの「コンポーネント・プロパティ」ダイアログに表示されます。このパネルがPanel Customizableコンポーネントについて表示されるのは、このコンポーネント上にタブがある場合のみです。

pe_ext.xmlファイル内では、このパネルはoracle.adf.pageeditor.pane.panel-tabbedという名前によって参照されます。

- スタイル
コンポーネント・インスタンスの外観を設定するために使用します。このパネルは、すべてのプロパティの「コンポーネント・プロパティ」ダイアログに表示されます。

pe_ext.xmlファイル内では、このパネルはoracle.adf.pageeditor.pane.inline-style-editorという名前によって参照されます。

- コンテンツ・スタイル
コンポーネント・インスタンス内のコンテンツの外観を設定するために使用します。このパネルは、すべてのプロパティの「コンポーネント・プロパティ」ダイアログに表示されます。

pe_ext.xmlファイル内では、このパネルはoracle.adf.pageeditor.pane.content-style-editorという名前によって参照されます。

- イベント
コンテキスト・イベントをアクション・ハンドラと関連付けて、そのイベントがプロデューサでトリガーされたときに、プロデューサ・コンポーネントからコンシューマ・コンポーネントに値を渡すことを可能にするために使用します。このパネルは、すべてのコンポーネントの「コンポーネント・プロパティ」ダイアログに表示されます。

pe_ext.xmlファイル内では、このパネルはoracle.adf.pageeditor.pane.eventsという名前によって参照されます。

- リージョン・パラメータ
タスク・フロー・リージョンのパラメータを設定するために使用します。このパネルは、タスク・フロー・リージョンのみの「コンポーネント・プロパティ」ダイアログに表示されます。

pe_ext.xmlファイル内では、このパネルはoracle.adf.pageeditor.pane.region-paramという名前によって参照されます。

- ポートレット・パラメータ
ポートレットのパラメータを設定するために使用します。このパネルは、ポートレットのみの「コンポーネント・プロパティ」ダイアログに表示されます。

pe_ext.xmlファイル内では、このパネルはoracle.adf.pageeditor.pane.portlet-paramという名前によって参照されます。

- レイアウト・カスタマイズ可能
一連の事前定義済レイアウトから選択することで、ページ・コンポーネントのレイアウトを設定するために使用します。このパネルは、Layout Customizableコンポーネントのみの「コンポーネント・プロパティ」ダイアログに表示されます。

pe_ext.xmlファイル内では、このパネルはoracle.adf.pageeditor.pane.layout-cust-propという名前によって参照されます。

- 子コンポーネント
Panel Customizableコンポーネント内の子コンポーネントを再配置したり表示または非表示にしたりするために使用します。このパネルは、Panel Customizableコンポーネントのみについて表示されます

pe_ext.xmlファイル内では、このパネルはoracle.adf.pageeditor.pane.child-navigatorという名前によって参照されます。

- ページ・パラメータ
ページ上のコンポーネントに関連付けることができるページ・パラメータを設定するために使用します。このパネルは、「ページ・プロパティ」ダイアログに表示されます。

pe_ext.xmlファイル内では、このパネルはoracle.webcenter.page.pane.page-paramという名前によって参照されます。

- ページ・セキュリティ
ページの権限を設定するために使用します。このパネルは、保護されたアプリケーション・ページの「ページ・プロパティ」ダイアログに表示されます。

pe_ext.xmlファイル内では、このパネルはoracle.webcenter.page.pane.page-secという名前によって参照されます。

付録

『Oracle Fusion Middleware Oracle JDeveloperによるWebCenter Portalアセットとカスタム・コンポーネントの開発』のこの部は、このガイドの各章の裏付け情報を提供する付録です。

- 式言語式

- WebCenter Portalのアクセシビリティ機能

- WebCenter Portal REST APIの使用

- トラブルシューティング

A 式言語式

この付録では、WebCenter Portalで構築したポータルで使用できる式言語(EL)式について説明します。

この付録の内容は次のとおりです。

式言語(EL)式の概要

WebCenter Portal情報に関連するEL

特定のページに関連するEL

特定のポータルに関連するEL

ポータル・イベント・コンテキストに関連するEL

アセットに関連するEL

セキュリティに関連するEL

一般設定に関連するEL

ポータル・リソースに関連するEL

ナビゲーションに関連するEL

ツールとサービスに関連するEL

ドキュメントに関連するEL

ピープル・コネクションに関連するEL

偽装に関連するEL

ページ・エディタに関連するEL式

デバイス設定に関連するEL式

実用的なEL式

式エディタの組込み式

ポータル問合せでの自由形式のJPQL WHERE句およびSORT句の非サポート

関連項目:

EL APIの詳細は、Oracle WebCenter Portal Java APIリファレンスを参照してください。

A.1 式言語(EL)式の概要

ページ・コンポーネントまたはアセットを構成する場合、現在のアプリケーション・コンテキストを利用する変数として値を表すことができます。たとえば、現在のユーザーの名前、ユーザーに割り当てられたロール、現在のページの状態などを、変数を使用して取得できます。このような柔軟性は、JDeveloperで式ビルダーを使用して作成したEL式を使用するか、実行時に式エディタを使用することで実現できます。

この項では、次の内容について説明します。

- 式ビルダーの概要

- WebCenter Portalの式エディタの概要

A.1.1 式ビルダーの概要

JDeveloperでEL式を使用すると、属性と実行時に決まるオブジェクト値とをバインドできます。特定のコンポーネントの値は、実行時にそのvalue属性によって決定されます。コンポーネントにはその値として静的テキストを割り当てることができますが、通常、value属性には、表示データを決定するために実行時インフラストラクチャにより評価されるEL式が含まれます。

JDeveloperの式ビルダーを使用してEL式を作成できます。ビルダーにはプロパティ・インスペクタからアクセスできます。プロパティ・インスペクタで変更する属性を特定し、「プロパティ・メニュー」アイコンをクリックして、ポップアップから「式ビルダー」を選択します(図A-1)。

図A-1 式ビルダーへのアクセス

「式ビルダー」ダイアログ(図A-2)では、「式」ボックスにEL式を直接入力できます。「変数」ドロップダウン・リストを使用して、式に含める項目を選択することもできます。演算子ボタンを使用して、式に論理演算子または算術演算子を追加します。

式ビルダーの詳細は、『Oracle Fusion Middleware Oracle ADF FacesによるWebユーザー・インタフェースの開発』のADF Facesのスタート・ガイドに関する項を参照してください。

図A-2 「式ビルダー」ダイアログ

A.1.2 WebCenter Portalの式エディタの概要

WebCenter Portalでは、式エディタと呼ばれる単純な式言語(EL)エディタを提供しています。式エディタは、動的な計算をしなければ不明なプロパティ値(たとえば、現在のユーザーや現在のページ・モードなどを指定する場合)を定式化する場合に使用します。

式エディタは、WebCenter Portalの管理および編集画面で使用できます。式エディタを開くには、フィールド、チェック・ボックスまたはドロップダウン・リストの横の「拡張編集オプション」アイコンをクリックして、「式ビルダー」をクリックします(図A-3を参照)。

図A-3 「パラメータ値」フィールドの横の「拡張編集オプション」アイコンと結果のエディタ

関連項目:

コンポーネント・プロパティへのアクセスの詳細は、『Oracle Fusion Middleware Oracle WebCenter Portalでのポータルの構築』のコンポーネントの変更に関する項を参照してください。

式エディタには、式の入力用に2つのオプションが用意されています。

- 値の選択: シード済EL式を選択します。

- 値または式の入力: 式を手動で入力します。

「値の選択」の下のオプションは、式から返される情報のタイプに基づいて分類されます。最初のメニューでカテゴリを選択し、2番目のメニューで返される値のタイプを選択します(図A-4)。

図A-4 式ビルダーの「値の選択」の下のオプション

関連項目:

シード済EL式の詳細は、「式エディタの組込み式」を参照してください。

「値または式の入力」オプションの下のテキスト・ボックスを使用して、目的の式を手動で入力できます(図A-5)。

図A-5 式エディタの「値または式の入力」の下のテキスト・ボックス

この付録にある表の式の多くは、結果として返されるオブジェクトを絞り込むための構成要素です。すなわち、必ずしも単独で使用することを意図したものではなく、ELを組み合せて必要な問合せを構築するために使用します。

たとえば、次の式は、3つのアセット関連ELを使用して、特定のポータル・テンプレートを返す問合せを1つ構築します。これは、親ポータルstoresからテンプレートstoresMasterTemplateを取得します。

#{srmContext.resourceScope['stores'].resourceType['siteTemplate'].displayName[‘storesMasterTemplate'].singleResult}

式エディタでは、次のいずれかを実行できます。

- 「値の選択」を選択して、ドロップダウン・リストから事前定義された値を選択します。

- 「値または式の入力」を入力して、値またはEL式を入力します。次の形式を使用します。

- リテラル数値: #{123}

- リテラル文字列: #{'string'}

- リテラルブール値: #{true}

- 値を戻すために呼び出されるJava Bean: #{generalSettings.preferredTimeStyle}

エディタには「テスト」ボタンがあり、ELの入力を検証できます。「テスト」ボタンは、「値または式の入力」の下のテキスト・ボックスに入力した式に対して使用できます。

検証では、EL構文がチェックされて式が評価されます。式の値は、それが実行されるコンテキストによって異なるため、エディタには実際の使用時に戻される値とは異なる結果値が表示される可能性があります。

ただし、「テスト」をクリックしたときに検証されるのはELのみで、他のタイプの値は検証されないことに注意してください。結果はポップアップに表示されます。

注意:

「コンポーネント・プロパティ」ダイアログの汎用の「表示オプション」タブでELを入力すると、入力内容が自動的に検証されます。EL構文が無効な場合、エラーが表示され、その値は適用も保存もされません。汎用の表示オプションは、『Fusion Middleware Oracle WebCenter Portalでのポータルの構築』の表示オプション・プロパティの表に記載されているオプションです。

ELの検証は、汎用ではない表示オプションに対しては実行されません。

A.2 WebCenter Portal情報に関連するEL

次の表では、WebCenter Portal情報に関連するEL式を示し、提供される機能のタイプについて説明します。

表A-1 WebCenter Portal情報に関連するEL式

式

機能

#{WCAppContext}

現在のWebリクエスト内で、すべてのWebCenter Portal関連情報へのアクセス・ポイントを提供するoracle.webcenter.webcenterapp.context.WCApplicationContextオブジェクト

#{WCAppContext.currentWebCenterURI}

現行のWebリクエストを表すURLを戻します。このURLの末尾には、リクエストのブックマーク設定可能なWebCenter Portal URLパラメータが追加されています(パラメータは順不同の場合があります)。

例:

http://www.example.com/webcenter/faces/oracle/webcenter/page/scopedMD/someguid/SomePage.jspx?wc.contextURL=/spaces/somename&wc.pageScope=1234

#{WCAppContext.application.applicationConfig}

WebCenter Portalからのメタデータのペイロードを含むoracle.webcenter.webcenterapp.beans.WebCenterType Bean。

#{WCAppContext.application.applicationConfig.title}

現在のWebCenter Portalアプリケーションの表示名(「WebCenter Portal管理」設定で構成)を返します。

デフォルトでは、WebCenter Portalを返します。

#{WCAppContext.application.applicationConfig.logo}

アプリケーション・ロゴが「WebCenter Portal管理」設定を介してアップロードされた場合、この式はアプリケーション・ロゴ・イメージへのURLを返します。

デフォルトでは、nullを戻します。

#{WCAppContext.application.applicationConfig.helpPage}

WebCenter Portalで使用するヘルプ・アプリケーションへのURL (「WebCenter Portal管理」設定で構成)を返します。

デフォルトでは、/webcenterhelp/spacesを戻します。

<<レビューアへ: /spacesではなく/portalとすべきか?>>

#{WCAppContext.application.applicationConfig.copyrightMessage.customValue}

著作権メッセージが「WebCenter Portal管理」設定によって構成されている場合は、アプリケーションの著作権メッセージを返します。

デフォルトでは、nullを戻します。

#{WCAppContext.application.applicationConfig.privacyPolicyUrl}

アプリケーションのプライバシ・ポリシーを含むドキュメントへのURL (「WebCenter Portal管理」設定で構成)を返します。

デフォルトでは、http://www.oracle.com/html/privacy.htmlを返します。

#{WCAppContext.application.applicationConfig.skin}

アプリケーションでページのレンダリングに使用するデフォルトのADF Facesスキン・ファミリの名前(「WebCenter Portal管理」設定で構成)を返します。

この式は、すべてのWebリクエストで使用できるとはかぎらないアプリケーション・レベルの設定のみを表します。たとえば、ユーザーがアプリケーションの「プリファレンス」を介してスキンをオーバーライドするように選択している場合、この式は正常に使用できません。

#{requestContext.skinFamily}

アプリケーション・レベルで構成されている要素や現在のユーザーのプリファレンス設定などに応じて、現在のWebリクエストで使用されるADF Facesスキン・ファミリの名前を返します。

#{adfFacesContext.skinFamily}と同じ値を返します。

A.3 特定のページに関連するEL

表A-2では、ポータル・ページに関連するEL式を示し、提供される機能のタイプについて説明します。

表A-2 特定のページに関連するEL式

式

機能

#{pageDocBean.title}

ページの表示名を戻します。次に例を示します。

FinanceProject

#{pageDocBean.createdBy}

ページを作成したユーザーのユーザー名を戻します。次に例を示します。

monty

#{pageDocBean.createDateString}

ページの作成日時を戻します。次に例を示します。

2008-11-19T10:18:36

#{pageDocBean.lastUpdatedBy}

ページを最後に更新したユーザーのユーザー名を戻します。次に例を示します。

monty

#{pageDocBean.lastUpdateDateString}

ページが最後に更新された日時を戻します。次に例を示します。

2008-11-19T10:18:36

#{pageDocBean.pagePath}

アプリケーションのルート・ディレクトリに対する相対パスとして、ページへのファイル・ディレクトリ・パスを戻します。次に例を示します。

/oracle/webcenter/page/scopedMD/s8bba98ff_4cbb_40b8_beee_296c916a23ed/user/Umonty/Page4.jspx

#{pageDocBean.name}

ページのファイル名を戻します。次に例を示します。

Page4.jspx

#{pageDocBean.UICSSStyle}

ページで使用されたスタイル・スキームの名前を戻します。次に例を示します。

WCSchemeEggShell

#{pageDocBean.UISchemeBGImage}

ページ・スキームの背景イメージのディレクトリ・パスとファイル名を戻します。

#{pageDocBean.UISchemeBGColorString}

ページ・スキームの背景色の16進値を戻します。次に例を示します。

#ffa500

#{pageDocBean.pagePermission}

ページに対する現行ユーザーの権限を戻します。次に例を示します。

oracle.webcenter.page.model.security.CustomPagePermission

#{pageDocBean.pageSecurityTarget}

現行のページをセキュリティ・システムに対して一意に識別する60文字程度の文字列です。次に例を示します。

oracle_webcenter_page_scopedMD_s8bba98ff_4cbb_40b8_beee_296c916a23ed_user_Umonty_Page4PageDef

#{changeModeBean.inEditMode}

現在のページがコンポーザ・モードの場合は、trueを返します。現在のページがコンポーザ・モードでない場合は、falseを返します。

#{pageDocBean.currentLayout.displayName}

.

ページで現在使用されているレイアウトの表示名を返します。

#{pageDocBean.layoutViewId}

ページで使用されているレイアウト・ビューを返します。

#{pageDocBean.layoutCssPath}

レイアウトで使用されているCSSファイルを返します。

A.4 特定のポータルに関連するEL

表A-3では、ポータルに関連するEL式を示し、提供される機能のタイプについて説明します。

注意:

ポータルの内部名は、ポータルの管理設定の「概要」ページにある「PortalのURL」で指定された名前のことです。ポータルの表示名は、「名前」で指定された名前です。表A-3に示すEL式の多くは、ポータルの内部名を呼び出します。

表A-3 特定のポータルに関連するEL式

式

機能

#{spaceContext}

現在のWebリクエスト内で、すべてのポータル関連情報へのアクセス・ポイントを提供するoracle.webcenter.spaces.context.SpacesContextオブジェクト。

この式の値は、Java API SpacesContext.getCurrentInstance()の起動時に戻される値です。

#{spaceContext.currentSpace}

現在のWebリクエストに関連付けられているポータルを表すoracle.webcenter.spaces.Spaceオブジェクト。現在のWebリクエストがホーム・ポータル・コンテキストにある場合は、null値が返されます。

この式の値は、Java API SpacesContext.getCurrentInstance().getCurrentSpace()の起動時に戻される値です。

#{spaceContext.currentSpaceName}

現行のWebリクエストに関連付けられているポータルの名前。現在のWebリクエストがホーム・ポータル・コンテキストにある場合は、null値が返されます。

この式の値は、Java API SpacesContext.getCurrentInstance().getCurrentSpace()の起動時に戻される値です。

#{spaceContext.space['portalName']}

#{spaceContext.currentSpace}

spaceNameという名前のポータルまたは現在のポータル(currentSpace)を表すoracle.webcenter.spaces.Spaceオブジェクト。たとえば、#{spaceContext.space['FinanceProject']}は、FinanceProjectという名前のポータルのポータル・オブジェクトを返します。

この式の値は、現行のADFContextのMDSSessionを渡して現行のSpacesManagerに対して.getSpace(...)を起動するときにJavaで戻される値です。

#{spaceContext.space['portalName'].metadataPath}

#{spaceContext.currentSpace.metadataPath}

指定した名前portalNameを持つポータルまたは現在のポータル(currentSpace)のポータル・メタデータ・ドキュメントのMDSパス。たとえば、#{spaceContext.space['FinanceProject'].metadataPath}は、/oracle/webcenter/space/metadata/spaces/FinanceProject/space.xmlと評価されます。

この式の値は、ポータルのポータル・オブジェクトに対して.getMetadataPath()を起動するときにJavaで返される値です。

#{spaceContext.space['portalName'].metadata}

#{spaceContext.currentSpace.metadata}

portalNameという名前のポータルまたは現在のポータル(currentSpace)に関するメタデータを含んだoracle.webcenter.spaces.beans.SpaceType Bean。

この式の値は、現在のADFContextのMDSSessionで渡されるポータルのポータル・オブジェクトに対して.getMetadata()を起動するときにJavaで返される値です。

#{spaceContext.space['portalName'].metadata.displayName}

#{spaceContext.currentSpace.metadata.displayName}

portalNameという名前のポータルまたは現在のポータル(currentSpace)の表示名。たとえば、Web20Portalという名前のポータルがweb 2.0 Portalという表示名を持つ場合、#{spaceContext.space['Web20Portal'].metadata.displayName}はweb 2.0 Portalと評価されます。

#{spaceContext.space['portalName'].GSMetadata.groupSpaceURI}

#{spaceContext.currentSpace.GSMetadata.groupSpaceURI}

portalNameという名前のポータルまたは現在のポータル(currentSpace)のURL。

#{WCPrepareImageURL[spaceContext.space['portalName'].metadata.icon]['']}

#{WCPrepareImageURL[spaceContext.currentSpace.metadata.icon]['']}

portalNameという名前のポータルまたは現在のポータル(currentSpace)に関連付けられたアイコンへのURL。

#{spaceContext.space['portalName'].metadata.description}

#{spaceContext.currentSpace.metadata.description}

portalNameという名前のポータルまたは現在のポータル(currentSpace)の説明。たとえば、#{spaceContext.space['FinanceProject'].metadata.description}はConglomeration of all teams involved in financial activities(財務アクティビティに関与する全チームの集合)と評価されます。

#{spaceContext.space['portalName'].metadata.creationDate}

#{spaceContext.currentSpace.metadata.creationDate}

指定した名前portalNameを持つポータルまたは現在のポータル(currentSpace)の作成日時を表すjava.util.Calendarオブジェクト。

#{spaceContext.space['portalName'].metadata.createdBy}

#{spaceContext.currentSpace.metadata.createdBy}

portalNameという名前のポータルまたは現在のポータル(currentSpace)の作成者のユーザー名。

#{spaceContext.space['portalName'].metadata.keywords}

#{spaceContext.currentSpace.metadata.keywords}

portalNameという名前のポータルまたは現在のポータル(currentSpace)に関連付けられた検索可能なキーワードのカンマ区切りリスト。たとえば、ポータルFinanceProjectのキーワードがfinance, project, moneyの場合、#{spaceContext.space['FinanceProject'].metadata.keywords}はfinance, project, moneyと評価されます。

#{spaceContext.space['portalName'].metadata.offline}

#{spaceContext.currentSpace.metadata.offline}

portalNameという名前のポータルまたは現在のポータル(currentSpace)がオフラインかどうかを示すブール値。

#{spaceContext.space['portalName'].metadata.closed}

#{spaceContext.currentSpace.metadata.closed}

portalNameという名前のポータルまたは現在のポータル(currentSpace)が閉じているかどうかを示すブール値。

#{spaceContext.space['portalName'].metadata.selfRegistration}

#{spaceContext.currentSpace.metadata.selfRegistration}

portalNameという名前のポータルまたは現在のポータル(currentSpace)への自己登録をユーザーが許可されているかどうかを示すブール値。

#{spaceContext.space['portalName'].metadata.discoverable}

#{spaceContext.currentSpace.metadata.discoverable}

portalNameという名前のポータルまたは現在のポータル(currentSpace)の存在を、ユーザーが検索するか「マイ・ポータル」ページのリストを確認することで検出できるかどうかを示すブール値。

#{spaceContext.space['portalName'].metadata.publishRSS}

#{spaceContext.currentSpace.metadata.publishRSS}

portalNameという名前のポータルまたは現在のポータル(currentSpace)がRSSフィードを公開するかどうかを示すブール値。

#{spaceContext.space['portalName'].distributionList}

#{spaceContext.currentSpace.distributionList}

portalNameという名前のポータルまたは現在のポータル(currentSpace)に関連付けられているメーリング・リストの電子メール・アドレス。

#{spaceContext.space['portalName'].metadata.customAttributes['attributeName']}

#{spaceContext.currentSpace.metadata.customAttributes['attributeName']}

portalNameという名前のポータルまたは現在のポータル(currentSpace)の、attributeNameという名前の特定のカスタム属性の値。たとえば、FinanceProjectポータルのstockPriceというカスタム属性の値が13.9の場合、#{spaceContext.space['FinanceProject'].metadata.customAttributes['stockPrice']}は13.9と評価されます。

注意: このELを使用してWebCenter Portal Administrationでフィールドに値を入力する場合、「テスト」ボタンをクリックすると空白値が戻される可能性があります。ただし、実行中のポータルでは値は適切に解決されます。

#{WCPrepareImageURL[spaceContext.space['portalName'].metadata.logo]['']}

#{WCPrepareImageURL[spaceContext.currentSpace.metadata.logo]['']}

portalNameという名前のポータルまたは現在のポータル(currentSpace)のロゴURLを返します。

#{spaceContext.spacesQuery.property['value']}

#{spaceContext.spacesQuery.property['value'].listSpaces}

property['value']という形式の問合せパラメータを使用してポータルを問い合せる方法。このpropertyはプロパティの名前(unionOf、shapeなど)を意味しており、valueはすべてのポータル、検出可能なポータルなどのリストをフェッチするために使用する基準を意味しています。

式にlistSpacesを追加すると、問合せはタイプがGSMetadataであるポータルのリストを返します。詳細は、Oracle WebCenter Portal Java APIリファレンスのインタフェースGSMetadataに関する項を参照してください。

たとえば、次のEL式は検出可能なすべてのポータルのリストを返します。

#{spaceContext.spacesQuery.unionOf['DISCOVERABLE'].listSpaces}

listSpacesをELに追加しない場合、ELではタイプがSpacesQueryParameterのオブジェクトと評価します。このオブジェクト・タイプはSpacesManager.getSpaces(SpacesQueryParameters)を使用して評価する必要があります。これにより、タイプがGSMetadataのポータルのリストが返されます。

たとえば、次のEL式は、すべての問合せ条件が移入された状態で、タイプがSpacesQueryParametersのインスタンスを返します。

#{spaceContext.spacesQuery.unionOf['DISCOVERABLE']}

#{spaceContext.spacesQuery.unionOf['USER_JOINED'].shape['ROOT_LEVEL'].listSpaces}

現在のユーザーがメンバーになっているすべてのポータルのリストを返します。

例は、「例: 様々なポータルに対するEL式の使用」を参照してください。

#{spaceContext.spacesQuery.unionOf['USER_JOINED'].shape['RECURSIVE_FLATTENED'].listSpaces}

現在のユーザーがメンバーになっているすべてのポータルのリストを返します。

このELは、現在のユーザーがアクセスできる各親ポータルの下にあるすべてのサブポータルも返します。

#{spaceContext.spacesQuery.unionOf['ALL_QUERIABLE'].sort['sortBy field picked from WcSpaceHeader']}

ソート基準によって指定された順序にソートされたポータルを返します。

たとえば、次の問合せは、ユーザーがアクセス可能なポータルのリストを、discoverableおよびlastUpdateDateフィールドでソートして返します。

次の例では、識別子spはポータルWcSpaceHeaderのJPAエンティティを表すことに注意してください。

#{spaceContext.spacesQuery.unionOf['ALL_QUERIABLE'].sort['sp.discoverable']['asc']['sp.lastUpdateDate']['desc'].listSpaces}

#{spaceContext.spacesQuery.unionOf['ALL_QUERIABLE'].pageNumber[page_num].listSpaces}

問合せ基準と一致する結果から選択するページ番号を指定できます(0ベース)。

たとえば、次の式は、ユーザーがアクセス可能なすべてのポータルのリストを返し、結果セットの3ページ目を返します。

#{spaceContext.spacesQuery.unionOf['ALL_QUERIABLE'].pageNumber[2].listSpaces]}

#{spaceContext.spacesQuery.unionOf['ALL_QUERIABLE'].itemsPerPage[page_num].listSpaces}

結果のポータルをページに分割するときに、各ページに含まれる結果の数を指定できます。

たとえば、次の式は、ユーザーがアクセス可能なすべてのポータルのリストを返し、各ページに10レコードずつリストします。

#{spaceContext.spacesQuery.unionOf['ALL_QUERIABLE'].pageNumber[10].listSpaces]}

#{spaceContext.spacesQuery.unionOf.ALL_QUERIABLE.where[wCond['sp.createdBy']['like']['monty%'] ['and'] [wCond['sp.selfSubEnabled']['is']['null'] ['or'] [wCond['sp.selfSubEnabled']['=']['N']] ['not'] ]].listSpaces}

指定されたユーザーが作成し、自己サブスクリプションが有効な、ユーザーがアクセス可能なすべてのポータルのリストを返します。詳細は、Oracle WebCenter Portal Java APIリファレンスのSpacesQueryParametersに関する項およびSpacesQueryFilterに関する項を参照してください。

#{spaceContext.currentSpace.metadata.portalColor}

ポータル・ブラウザのポータルで使用されている色コードを返します。

#{spaceContext.currentSpace.metadata.acronym}

ポータル・ブラウザのポータルで使用されている頭文字を返します

A.4.1 例: 様々なポータルに対するEL式の使用

この項では、様々なポータルを問い合せるためのEL式の使用例を示します。

この例では、次のELを使用して、自分がメンバーになっているすべてのポータルのリストを表示します。

"#{spaceContext.spacesQuery.unionOf['USER_JOINED'].shape['ROOT_LEVEL'].listSpaces}"

さらに次のメソッドを使用して、ポータルのロゴ、名前、説明、メンバー数も表示します。

- displayName: ポータル名を表示

- description: ポータルの説明を表示

- memberCount: ポータルのメンバー数を表示

ポータルを問い合せるには:

1. 新しいタスク・フローを作成して、使用可能のマークを付けます。詳細は、『Oracle Fusion Middleware Oracle WebCenter Portalでのポータルの構築』のタスク・フローの使用に関する項を参照してください。

2. タスク・フローのソース・コードを編集します。「アセット」タブで、タスク・フローを選択します。「アクション」メニューから、「ソースの編集」を選択します。

3. 「ソースの編集」ダイアログの「フラグメント」タブで、既存のコードを次のコードに置き換えます。

<?xml version='1.0' encoding='UTF-8'?>
<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" version="2.1" xmlns:pe="http://xmlns.oracle.com/adf/pageeditor" xmlns:cust="http://xmlns.oracle.com/adf/faces/customizable"
xmlns:f="http://java.sun.com/jsf/core" xmlns:af="http://xmlns.oracle.com/adf/faces/rich" xmlns:c="http://java.sun.com/jsp/jstl/core" xmlns:fn="http://java.sun.com/jsp/jstl/functions">
<af:panelGroupLayout id="pgl1">
<cust:panelCustomizable id="pc1">
<table border="0" width="100%">
<af:iterator id="it1" var="row" value="#{spaceContext.spacesQuery.unionOf['USER_JOINED'].shape['ROOT_LEVEL'].listSpaces}">
<c:set var="displayName" value="#{row.displayName}"/>
<c:set var="description" value="#{row.description}"/>
<c:set var="numMembers" value="#{row.memberCount}"/>
<tr class="PortletText1">
<af:image id="img1"
source="#{WCPrepareImageURL[spaceContext.space[row.name].metadata.icon]}/ICON16"/>
</td>
<td>
<af:outputText id="otCol1"
value="#{displayName}"
inlineStyle="color:#333333; font-size:12px; font-weight:bold;"/>
</td>
</tr>
<tr>
<td>
<af:outputText id="otCol3"
value="#{description}"
inlineStyle="color:#666666; font-size:12px;"/>
</td>
</tr>
<tr>
<td>
<af:outputText id="otCol4"
value="members (#{numMembers}) -"
inlineStyle="color:#666666; font-size:10px;"/>
<af:spacer id="spacer1" width="5px"/>
<af:goLink id="gl1"
destination="/spaces/#{row.name}"
targetFrame="_blank"
text="view"/>
</td>
</tr>
</af:iterator>
</table>
</cust:panelCustomizable>
</af:panelGroupLayout>
</jsp:root>

4. このタスク・フローをページに追加します。リソース・カタログでは、「UIコンポーネント」→「タスク・フロー」でカスタム・タスク・フローを使用できます。
ページには、自分がメンバーになっているすべてのポータルのリストが表示されます。

A.5 ポータル・イベント・コンテキストに関連するEL

表A-4に、ペイロードの受け渡しをトリガーできるポータル・イベントのタイプ(イベント機能に関連するイベントではない)に関連するEL式を示します。

表A-4に示すイベント・ペイロードには、発生後、その全部または一部にアクセスできます。

たとえば、ペイロード全体に対して、次のELを使用します。

#{wcEventContext.events.eventName}

たとえば、次のようにします。

#{wcEventContext.events.WebCenterUserSelected}

表A-4のELのペイロードはすべてマップです。マップ・エントリを参照解除するには、マップ用の標準のELを使用します。

#{wcEventContext.events.WebCenterUserSelected.UserName}

関連項目:

イベント・ワイヤリングの詳細は、『Oracle Fusion Middleware Oracle WebCenter Portalでのポータルの構築』のページ、タスク・フロー、ポートレット、ADFコンポーネントのワイヤリングに関する項を参照してください。

表A-4 イベント・コンテキストに関連するEL式

式

機能

イベント・コンテキスト

#{wcEventContext.events.WebCenterResourceSelected}

ドキュメント名

#{wcEventContext.events.WebCenterResourceSelected.name}

ドキュメント作成者

#{wcEventContext.events.WebCenterResourceSelected.createdBy}

ドキュメント最終変更者

#{wcEventContext.events.WebCenterResourceSelected.lastModifiedBy}

プロデューサとコンシューマ間のコンテキスト・ワイヤリングで使用します。プロデューサのメタデータの一部分をコンシューマのメタデータの一部分に(たとえば、ドキュメント作成者を作成者のプロファイルに)関連付けるマップを返します。

プロデューサのタスク・フローには次のものが含まれます。

- ドキュメント・マネージャ

- 最近のドキュメント

- ドキュメント・リスト・ビューア

コンシューマのタスク・フローには次のものが含まれます。

- リンク(選択したドキュメントにリンクするアイテムを表示)

- プロファイル(ドキュメントの作成者のプロファイルを表示)

- アクティビティ・ストリーム(このドキュメントに関連するアクティビティを表示)

- タグ(このドキュメントのタグとタグ・センターにアクセスする方法)

イベント・コンテキスト

#{wcEventContext.events.WebCenterUserSelected}

ユーザー名

#{wcEventContext.events.WebCenterUserSelected.userName}

ユーザーGUID

#{wcEventContext.events.WebCenterUserSelected.userGUID}

ポータル名

#{wcEventContext.events.WebCenterUserSelected.portalName}

ポータルGUID

#{wcEventContext.events.WebCenterUserSelected.portalGUID}

プロデューサとコンシューマ間のコンテキスト・ワイヤリングで使用します。プロデューサのメタデータの一部分をコンシューマのメタデータの一部分に(たとえば、ユーザーをユーザーのコネクションに)関連付けるマップを返します。

プロデューサのタスク・フローには次のものが含まれます。

- コネクション

- ポータル・メンバー

コンシューマのタスク・フローには次のものが含まれます。

- コネクション(選択したユーザーのコネクションを表示)

- 「ドキュメント」タスク・フロー(選択したユーザーによって作成されたドキュメントを表示)

- アクティビティ・ストリーム(このユーザーのアクティビティを表示)

- タグ(このユーザーによって作成されたタグ)

- プロファイル(このユーザーのプロファイルを表示)

イベント・コンテキスト

#{wcEventContext.events.WebCenterConnectionSelected}

プロファイルのユーザー名

#{wcEventContext.events.WebCenterConnectionSelected.profileUserName}

プロファイルのユーザーGUID

#{wcEventContext.events.WebCenterConnectionSelected.profileUserGUID}

コネクションがあるユーザー名

#{wcEventContext.events.WebCenterConnectionSelected.userName}

コネクションがあるユーザーGUID

#{wcEventContext.events.WebCenterConnectionSelected.userGUID}

--

#{wcEventContext.events.WebCenterSpaceSelected.SpaceName}

選択されたポータルの名前を返します

#{wcEventContext.events.WebCenterSpaceSelected.SpaceGUID}

選択されたポータルのGUIDを返します

A.6 アセットに関連するEL

この項の式を使用して、アセットの問合せを行います。EL式によるアセットの問合せは、APIコールによるアセットの問合せと類似しています。すなわち、問合せパラメータは['property']['like']['value'] (propertyはid、resourceScopeなどのプロパティの名前、valueは属性の検索値)という形式で設定する必要があります。

問合せを実行すると、1件または複数件の結果が返される可能性があります。問合せデザイナは、どちらの結果を望むのかを決める必要があります。問合せデザイナは式で次の値のいずれかを使用して、1件の結果を返すのか、複数件の結果を返すのかを指定します。

- singleResult: 1つのアセットを返します。一致するアセットが見つからない場合、nullを返します。

- resultList: アセットのリストを返します。一致するアセットが見つからない場合、空のリストを返します。

注意:

式で使用されているsingleResultまたはresultListは、内部的には問合せのエンド・ポイントとして使用され、検出されるとすぐに問合せが実行されます。エンド・ポイント以降に何かが設定されていた場合、予想外の動作が発生する可能性があります。

次の例は、表示名にmyPageが含まれる、最初に見つけたページ・テンプレート・アセットを返します。

#{srmContext[wCond['resourceType']['like']['siteTemplate']]['and'][wCond['displayName']['like']['myPage']].singleResult}

次の例は、ディレクトリresourceDirに存在し、説明にsampleDescが含まれるページ・テンプレート・アセットのリストを返します。

#{srmContext[wCond['resourceType']['like']['siteTemplate']]['and'][wCond['description']['like']['sampleDesc']]['and'][wCond['contentDirectory']['like']['resourceDir'].resultList}

このクラスのプロパティには、このクラスの任意の属性が含まれます。たとえば、Id、DisplayName、iconURI、contentDirectoryなどのプロパティが含まれます。

プロパティ値は、明示的な値として、またはそのタイプの値を返すEL式として、指定できます。たとえば、次の2つの問合せは同じ結果を返します。

#{srmContext[wCond['id']['like']['resourceId']].singleResult}

#{srmContext[wCond['id']['like']['spacesContext.currentSpace.uiMetadata.siteTemplateId']].singleResult}

EL式を使用する問合せでは、このクラスの任意のプロパティをproperty['value']という形式で、任意の順序で使用できます。たとえば、次の2つの問合せは同じ結果を返します。

#{srmContext[wCond['resourceScope']['like']['scopeName']]['and'][wCond['id]['like']['resourceId']].singleResult}

#{srmContext[wCond['id']['like']['resourceId']]['and'][wCond['resourceScope']['like']['scopeName']].singleResult}

表A-5 では、アセットに関連するEL式を示し、提供される機能のタイプについて説明します。

表A-5 アセットに関連するEL

EL

機能

#{srmContext[wCond['id']['like']['resourceGUID']]}

指定されたIDのアセットを返します

#{srmContext[wCond['displayName']['like']['resourceDisplayName']]}

指定された表示名を持つ任意のアセットを返します

#{srmContext[wCond['displayNameKey']['like']['displayNameKey']]}

指定された表示名キーを持つ任意のアセットを返します

#{srmContext[wCond['description']['like']['resourceDescription']].singleResult}

指定された値が説明に含まれるアセットを1つ返します

複数の結果を取得するには、singleResultのかわりにresultListを使用します。

#{srmContext[wCond['descriptionKey']['like']['descriptionKey']].singleResult}

指定された説明キーを持つアセットを1つ返します

説明キーは、アセットの説明を示す、xsrtファイル内のキーです。

複数の結果を取得するには、singleResultのかわりにresultListを使用します。

#{srmContext[wCond['createdDate']['like']['resourceCreationDate']]}

指定された作成日を持つ任意のアセットを返します

#{srmContext[wCond['modifiedBy']['like']['resourceLastModifiedBy']]

指定されたユーザー名のユーザーにより最後に変更された任意のアセットを返します

#{srmContext[wCond['modifiedDate']['like']['resourceLastModifiedDate']]}

指定された日付以前に最後に変更された任意のアセットを返します

#{srmContext[wCond['resourceScope']['like']['resourceScope']]}

指定されたスコープに該当する任意のアセットを返します

#{srmContext[wCond['category']['like']['categoryName']]}

指定されたカテゴリに該当する任意のアセットを返します

例:

#{srmContext[wCond['category']['like']['siteTemplates']]}

カテゴリ名として使用できるものには、siteTemplate、pageStyle、dataPresenter、contentPresenter、resourceCatalog、taskFlow、dataControl、taskFlowStyle、skinがあります。

#{srmContext[wCond['contentDirectory']['like']['contentDirectory']]}

指定されたディレクトリに格納されている任意のアセットを返します

#{srmContext[wCond['metadataFile']['like']['metadataFileLocation']]}

指定されたメタデータ・ファイルからアセット・メタデータを返します

たとえば、次の式はファイル/home/metadata/data.xmlからアセット・メタデータを返します。

#{srmContext[wCond['metadataFile']['like']['/home/metadat/data.xml']]}

#{srmContext[wCond['jspx']['like']['jspxFileLocation']]}

指定された場所にある任意のjspxファイルを返します

たとえば、次の式はpage.jspxファイルを返します。

#{srmContext[wCond['jspx']['like']['/home/web/page.jspx']]}

#{srmContext[wCond['pageDef']['like']['pageDefinition']]}

指定されたページ定義が含まれる任意のjspxファイルを返します

#{srmContext[wCond['iconURI']['like']['iconURI']]}

指定されたアイコンURIのアイコンを返します

#{srmContext[wCond['excludeFrom']['like']['excludeFromScopes']]}

より大きな式で使用され、除外されたスコープで使用可能なリソースを除く、指定されたすべてのリソースを返します

#{srmContext[wCond['usesCustomSecurity']['like']['usesCustomSecurity']]}

より大きな式で使用され、カスタム・セキュリティを使用する、または使用しない、任意のアセットを返します

usesCustomSecurityをTRUEまたはFALSEに設定します。たとえば、次のようにします。

#{srmContext[wCond['usesCustomSecurity']['like']['TRUE']]}

#{srmContext[wCond['seeded']['like']['seeded']]}

より大きな式で使用され、指定された値に応じてシードされる、またはシードされない、任意のアセットを返します

seededをTRUEまたはFALSEに設定します。たとえば、次のようにします。

#{srmContext[wCond['seeded']['like']['TRUE']]}

#{srmContext[wCond['visibleType']['like']['visibleType']]}

より大きな式で使用され、指定された可視性タイプの任意のアセットを返します

visibleTypeをTRUE、FALSEまたはアセットが絶対に表示されないことを示すNEVERに設定します。たとえば、次の式は表示されるアセット、すなわちShowに設定されているアセットを返します。

#{srmContext[wCond['visibleType']['like']['TRUE']]}

#{srmContext[wCond['visible']['like']['visible']]}

より大きな式で使用され、可視性がTRUEまたはFALSEのどちらかに設定されている1つまたは複数のアセットを返します。

#{srmContext[wCond['createdBy']['like']['resourceCreator']]}

より大きな式で使用され、指定されたユーザーによって作成された任意のアセットを返します

#{srmContext[wCond['resourceType']['like']['resourceType']]}

より大きな式で使用され、指定されたタイプの1つまたは複数のアセットを返します

たとえば、次の式はタイプSITE_TEMPLATEのアセットを検索します。

#{srmContext[wCond['resourceType']['like']['SITE_TEMPLATE']]}

すべてのアセット・タイプのリストは、Oracle WebCenter Portal Java APIリファレンスのGenericSiteResourceTypesクラスに関する項を参照してください。

#{srmContext[wCond['version']['like']['version']]}

より大きな式で使用され、指定されたバージョンのアプリケーションで使用可能な1つまたは複数のアセットを返します

#{srmContext[wCond['resourceScope']['like']['scopeName']]}

より大きな式で使用され、指定されたスコープで使用可能な1つまたは複数のアセットを返します

たとえば、次の式はスコープ(このインスタンスではポータル)がMyPortalのアセットを検索します。

#{srmContext[wCond['resourceScope']['like']['MyPortal']]}

デフォルト・スコープ、すなわちアプリケーション・スコープ内を検索するには、defaultScopeを使用します。

#{srmContext[wCond['searchType']['like']['searchType']]}

より大きな式で使用され、組み込まれている他の式で設定された値が含まれる、またはその値に等しい、1つまたは複数のアセットを返します

searchTypeをCONTAINSまたはEQUALSに設定します。

A.6.1 例: アセットに対するEL式の使用

この項では、ユーザーのロールに基づいてページ・テンプレートを表示するためのEL式の使用例を示します。

この例では、EL式を使用して、ポータル・マネージャに特定のページ・テンプレートが表示されるようにして、ポータル・マネージャがそのページ・テンプレートで使用できる機能やリンクにアクセスできるようにします。

ユーザー・ロールに基づいてページ・テンプレートを表示するには:

1. 目的のポータルの管理設定に移動します。

2. 「設定」ページの「アセット」で、「ページ・テンプレート」に対して「ページ・テンプレート」ドロップダウン・リストの横にある「拡張編集オプション」アイコンをクリックし、「式ビルダー」を選択してエディタを開きます。

3. 「値または式の入力」で、次の式を入力します。

#{srmContext[wCond['resourceType']['like']['siteTemplate']][wCond['displayName']['like'][WCSecurityContext.userInScopedRole['Moderator'] ? 'Fusion Side Navigation' : 'WebCenter Portal Top Navigation']].singleResult.id}

説明:

- srmContext[wCond['resourceType']['like']['siteTemplate']]
スコープ内のすべてのページ・テンプレートのリストを取得します。

- [wCond['displayName']['like'][WCSecurityContext.userInScopedRole['Moderator'] ? 'Fusion Side Navigation' : 'WebCenter Portal Top Navigation']]
現在のユーザーがポータル・マネージャかどうかによって、リストを1つまで縮小します。ユーザーがポータル・マネージャであれば、「Fusionサイド・ナビゲーション」ページ・テンプレートが適用されます。その他すべてのユーザー・ロールでは、「WebCenter Portalトップ・ナビゲーション」ページ・テンプレートを使用してポータルがレンダリングされます。

- singleResult.id
必要とされるエントリのGUIDを返します。

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

A.7 セキュリティに関連するEL

「セキュリティに関連するEL」では、アプリケーション・セキュリティに関連するEL式を示し、提供される機能のタイプについて説明します。

表A-6 セキュリティに関連するEL式

式

機能

#{security.authenticated}

ELが呼び出されているコンテキスト内で現在のユーザーが認証済の場合はtrue、それ以外の場合はfalseを返します。

#{securityContext.userName}

現在ログインしているユーザーのユーザー名を返します。現在ユーザーがログインしていない場合、値を返しません。

#{WCSecurityContext.currentUser['userName']}

指定されたユーザーが現在のユーザーである場合はtrue、それ以外の場合はfalseを返します。

#{WCSecurityContext.userInGroup['group']}

指定されたグループが現在のユーザーに割り当てられている場合はtrueを返します。例:

#{WCSecurityContext.userInGroup['Administrators']}

#{security.pageContextCommunityModerator}

現在のユーザーが現在のポータルのポータル・マネージャである場合は、値trueを返します。

#{WCSecurityContext.userInScopedRole['role']}

現在のスコープの指定されたロールが現在のユーザーに割り当てられている場合はtrueを返します。ロールはModerator (表示名はポータル・マネージャ)またはそのスコープ内で定義されたカスタム・ロールのいずれかです。

スコープは暗黙的に現在のスコープに解決されます。このELをホーム・ポータルで使用した場合、ホーム・ポータルのGUIDと、アプリケーション・レベルで定義されたロールに解決されます。このELをポータル・スコープで使用した場合、ポータルに対して定義されたロールに解決されます。

A.8 一般設定に関連するEL

「一般設定に関連するEL」では、アプリケーションの一般設定に関連するEL式を示し、提供される機能のタイプについて説明します。ここに示すELは、WebCenter Portalで構築されたポータルとJDeveloperで構築されたPortal Frameworkアプリケーションの両方に適用されます。

表A-7 一般設定に関連するEL式

式

機能

#{generalSettings.userTimeZone}

現在のユーザーがアプリケーション・プリファレンスで選択しているタイムゾーンを返します。

#{generalSettings.preferredDateStyle}

現在のユーザーがアプリケーション・プリファレンスで選択している日付書式を返します。

#{generalSettings.preferredDatePattern}

現在のユーザーの優先日付書式パターンが設定されている場合はそれを返し、それ以外の場合はnullを返します。

#{generalSettings.preferredTimeStyle}

現在のユーザーがアプリケーション・プリファレンスで選択している時間書式を返します。

#{generalSettings.preferredTimePattern}

現在のユーザーの優先時間書式パターンが設定されている場合はそれを返し、それ以外の場合はnullを返します。

#{generalSettings.preferredDateTimePattern}

現在のユーザーの日付書式と時間書式の優先パターンが設定されている場合はそれを返し、それ以外の場合はnullを返します。

#{generalSettings.preferredAccessibilityMode}

現在のユーザーの優先アクセシビリティ・モード(default、inaccessibleまたはscreenReaderのいずれか)を返します。

#{generalSettings.preferredSkinName}

現在のユーザーの優先スキン名が指定されている場合はその名前、それ以外の場合はデフォルト値。

#{generalSettings.formattedCurrentDate}

現在のユーザーが選択しているロケールの現在の日付を返します。

#{generalSettings.formattedCurrentTime}

現在のユーザーが選択しているロケールの現在の時間を返します。

#{generalSettings.formattedCurrentDateTime}

現在のユーザーが選択しているロケールの現在の日付と時間を返します。

#{requestContext.skinFamily}

アプリケーション・レベルで構成されている要素や現在のユーザーのプリファレンス設定などに応じて、現在のWebリクエストで使用されるADF Facesスキン・ファミリの名前を返します。

A.9 ポータル・リソースに関連するEL

この項の式を使用して、ポータル・リソースの問合せを行います。EL式によるポータル・リソースの問合せは、APIコールによるリソースの問合せと類似しています。すなわち、問合せパラメータは.property['value']という形式で設定する必要があり、propertyはid、resourceScopeなどのプロパティの名前、valueは属性の検索値です。

問合せを実行すると、1件または複数件の結果が返される可能性があります。問合せデザイナは、どちらの結果を望むのかを決める必要があります。問合せデザイナは式で次の値のいずれかを使用して、1件の結果を返すのか、複数件の結果を返すのかを指定します。

- singleResult: 1つのポータル・リソースを返します。一致するリソースが見つからない場合、nullを返します。

- resultList: ポータル・リソースのリストを返します。一致するポータル・リソースが見つからない場合、空のリストを返します。

注意:

式で使用されているsingleResultまたはresultListは、内部的には問合せのエンド・ポイントとして使用され、検出されるとすぐに問合せが実行されます。エンド・ポイント以降に何かが設定されていた場合、予想外の動作が発生する可能性があります。

次の例は、表示名にmyPageが含まれる、最初に見つけたページ・テンプレート・ポータル・リソースを返します。

#{srmContext.resourceType['siteTemplate'].displayName['myPage'].singleResult}

次の例は、ディレクトリresourceDirに存在し、説明にsampleDescが含まれるページ・テンプレート・ポータル・リソースのリストを返します。

#{srmContext.resourceType['siteTemplate'].description['sampleDesc'].contentDirectory['resourceDir'].resultList}

このクラスのプロパティには、このクラスの任意の属性が含まれます。たとえば、Id、DisplayName、iconURI、contentDirectoryなどのプロパティが含まれます。

プロパティ値は、明示的な値として、またはそのタイプの値を返すEL式として、指定できます。たとえば、次の2つの問合せは同じ結果を返します。

#{srmContext.id['resourceId'].singleResult}

#{srmContext.id['spacesContext.currentSpace.uiMetadata.siteTemplateId'].singleResult}

EL式を使用する問合せでは、このクラスの任意のプロパティをproperty['value']という形式で、任意の順序で使用できます。たとえば、次の2つの問合せは同じ結果を返します。

#{srmContext.resourceScope['scopeName'].id['resourceId'].singleResult}

#{srmContext.id['resourceId'].resourceScope['scopeName'].singleResult}

表A-8では、ポータル・リソースに関連するEL式を示し、提供される機能のタイプについて説明します。表A-8の多くの式は、返すポータル・リソースを絞り込むためのブロックを作成します。すなわち、必ずしも単独で使用することを意図したものではなく、ELを組み合せて必要な問合せを構築するために使用します。

たとえば、次の式は、3つのポータル・リソース関連ELを使用して、特定のポータル・テンプレートを返す問合せを1つ構築します。これは、親ポータルstoresからテンプレートstoresMasterTemplateを取得します。

#{srmContext.resourceScope['stores'].resourceType['siteTemplate'].displayName['storesMasterTemplate'].singleResult}

WebCenter Portalアセットにのみ関連するEL式の詳細は、「アセットに関連するEL」を参照してください。

表A-8 ポータル・リソースに関連するEL

EL

機能

#{srmContext.id['resourceGUID']}

指定されたIDのポータル・リソースを返します

#{srmContext.displayName['resourceDisplayName']}

指定された表示名を持つ任意のポータル・リソースを返します

#{srmContext.displayNameKey['displayNameKey']}

指定された表示名キーを持つ任意のポータル・リソースを返します

#{srmContext.description['resourceDescription'].singleResult}

指定された値が説明に含まれるポータル・リソースを1つ返します

複数の結果を取得するには、singleResultのかわりにresultListを使用します。

#{srmContext.descriptionKey[descriptionKey].singleResult}

指定された説明キーを持つポータル・リソースを1つ返します

説明キーは、ポータル・リソースの説明を示す、xsrtファイル内のキーです。

複数の結果を取得するには、singleResultのかわりにresultListを使用します。

#{srmContext.createdDate['resourceCreationDate']}

指定された作成日を持つ任意のポータル・リソースを返します

#{srmContext.modifiedBy['resourceLastModifiedBy']}

指定されたユーザー名のユーザーにより最後に変更された任意のポータル・リソースを返します

#{srmContext.modifiedDate['resourceLastModifiedDate']}

指定された日付以前に最後に変更された任意のポータル・リソースを返します

#{srmContext.resourceScope['resourceScope']}

指定されたスコープに該当する任意のポータル・リソースを返します

#{srmContext.category['categoryName']}

指定されたカテゴリに該当する任意のポータル・リソースを返します

例:

#{srmContext.category['siteTemplates']}

#{srmContext.contentDirectory['contentDirectory']}

指定されたディレクトリに格納されている任意のポータル・リソースを返します

#{srmContext.metadataFile['metadataFileLocation']}

指定されたメタデータ・ファイルからポータル・リソース・メタデータを返します

たとえば、次の式はファイル/home/metadata/data.xmlからリソース・メタデータを返します:

#{srmContext.metadataFile['/home/metadat/data.xml']}

#{srmContext.jspx['jspxFileLocation']}

指定された場所にある任意のjspxファイルを返します

たとえば、次の式はpage.jspxファイルを返します。

#{srmContext.jspx['/home/web/page.jspx']}

#{srmContext.pageDef['pageDefinition']}

指定されたページ定義が含まれる任意のjspxファイルを返します

#{srmContext.iconURI['iconURI']}

指定されたアイコンURIのアイコンを返します

#{srmContext.excludeFrom['excludeFromScopes']}

より大きな式で使用され、除外されたスコープで使用可能なポータル・リソースを除く、指定されたすべてのリソースを返します

#{srmContext.usesCustomSecurity['usesCustomSecurity']}

より大きな式で使用され、カスタム・セキュリティを使用する、または使用しない、任意のポータル・リソースを返します

usesCustomSecurityをTRUEまたはFALSEに設定します。たとえば、次のようにします。

#{srmContext.usesCustomSecurity['TRUE']}

#{srmContext.seeded['seeded']}

より大きな式で使用され、指定された値に応じてシードされる、またはシードされない、任意のポータル・リソースを返します

seededをTRUEまたはFALSEに設定します。たとえば、次のようにします。

#{srmContext.seeded['TRUE']}

#{srmContext.visibleType['visibleType']}

より大きな式で使用され、指定された可視性タイプの任意のポータル・リソースを返します

visibleTypeをTRUE、FALSEまたはポータル・リソースが絶対に表示されないことを示すNEVERに設定します。たとえば、次の式は表示されるポータル・リソース、すなわちShowに設定されているポータル・リソースを返します。

#{srmContext.visibleType['TRUE']}

#{srmContext.visible['visible']}

より大きな式で使用され、可視性がTRUEまたはFALSEのどちらかに設定されている1つまたは複数のポータル・リソースを返します。

#{srmContext.createdBy['resourceCreator']}

より大きな式で使用され、指定されたユーザーによって作成された任意のポータル・リソースを返します

#{srmContext.resourceType['resourceType']}

より大きな式で使用され、指定されたタイプの1つまたは複数のポータル・リソースを返します

たとえば、次の式はタイプSITE_TEMPLATEのポータル・リソースを検索します。

#{srmContext.resourceType['SITE_TEMPLATE']}

すべてのリソース・タイプのリストは、Oracle WebCenter Portal Java APIリファレンスのGenericSiteResourceTypesクラスに関する項を参照してください。

#{srmContext.version['version']}

より大きな式で使用され、指定されたバージョンのアプリケーションで使用可能な1つまたは複数のポータル・リソースを返します

#{srmContext.resourceScope['scopeName']}

より大きな式で使用され、指定されたスコープで使用可能な1つまたは複数のポータル・リソースを返します

たとえば、次の式はスコープ(このインスタンスではポータル)がMyPortalのポータル・リソースを検索します。

#{srmContext.resourceScope['MyPortal']}

デフォルト・スコープ、すなわちアプリケーション・スコープ内を検索するには、defaultScopeを使用します。

#{srmContext.searchType['searchType']}

より大きな式で使用され、組み込まれている他の式で設定された値が含まれる、またはその値に等しい、1つまたは複数のポータル・リソースを返します

searchTypeをCONTAINSまたはEQUALSに設定します。

A.10 ナビゲーションに関連するEL

表A-9では、アプリケーションのナビゲーションに関連するEL式を示し、提供される機能のタイプについて説明します。

表A-9 ナビゲーションに関連するEL式

式

機能

ナビゲーション・コンテキスト式

#{navigationContext.defaultNavigationModel}

デフォルト・ナビゲーション・モデルを返します。プリファレンスBeanから値を取得します。プリファレンスBeanは、adf-config.xmlのstatic valueのプリファレンス設定に基づいて値を取得します。

次の例は、指定されたデフォルト・ツリー・モデルを返します。

#{navigationContext.defaultNavigationModel.defaultTreeModel}

defaultMenuModelとdefaultListModelも使用できます(次のリストを参照)。

#{navigationContext.currentNavigationModel}

現在のビュー(すなわち現在のページ)にナビゲートするために使用したナビゲーション・モデルを返します。

現在のナビゲーション・モデルは、processActionがコールされた場合にのみ設定されます。

次の例は、現在のナビゲーション・モデルのデフォルト・ツリー・モデルを返します。

#{navigationContext.currentNavigationModel.defaultTreeModel}

defaultMenuModelとdefaultListModelも使用できます。

関連項目: 「#{navigationContext.processAction}」。

#{navigationContext.navigationModel['model_path']}

このELは非推奨になりました。かわりに、#{navigationContext.defaultNavigationModel}または#{navigationContext.currentNavigationModel}を使用してください。

#{navigationContext.processAction}

UIコンポーネントのactionListener属性にバインドするデフォルト・ナビゲーション方法を返します。これは、ナビゲート先のターゲット・リソースが、アクションUIコンポーネントのnode属性またはpath属性で渡されることを想定しています。

node属性は、通常、反復の場合に使用され、path属性は、通常、静的リンクを作成するために使用されます。両方が指定されている場合は、node属性が使用されます。path属性を使用する場合は、ナビゲーション・モード・オブジェクトを渡すためにmodel属性も指定する必要があることに注意してください。model属性が指定されていない場合は、現在のナビゲーション・モデルが使用されます。

node属性の使用例を示します。

<af:forEach var="node" varStatus="vs"
items="#{navigationContext.defaultNavigationModel.rootNode.children}">
<af:subform id="pt_sfm1">
<af:commandLink id="pt_cl1"
text="#{node.title}"
inlineStyle="font-size:small;color:White;"
actionListener="#{navigationContext.processAction}"
action="pprnav">
<f:attribute name="node" value="#{node}"/>
<af:showPopupBehavior popupId="menuPopup"
align="afterStart"
triggerType="mouseOver"/>
</af:commandLink>

path属性の使用例を示します。

<af:commandLink id="pt_cl1" text="Prescriptions"
inlineStyle="font-size:small; color:White;"
actionListener="#{navigationContext.processAction}"
action="pprnav">
<f:attribute name="path" value="/prescriptions"/>
<f:attribute name="model"   value="#{navigationContext.defaultNavigationModel}"/>
</af:commandLink>

ナビゲーション・モデル式

#{navigationContext.defaultNavigationModel.defaultTreeModel}

#{navigationContext.defaultNavigationModel.defaultMenuModel}

#{navigationContext.defaultNavigationModel.defaultListModel}

#{navigationContext.defaultNavigationModel.defaultSiteMap}

デフォルト設定に基づいて、ツリー/メニュー/リスト・モデルを返します

この設定のデフォルト値は次の行を参照してください。たとえば、depthのデフォルト値は0です。

defaultSiteMapは、デフォルト設定に基づいて、ナビゲーションのサイト・マップのXMLを返します。

この式は、次のタイプのモデルを返します。

- ChildPropertyTreeModel - <af:tree>コンポーネントで使用

- ChildPropertyMenuModel - <af:breadcrumbs>コンポーネントまたは<af:menu>コンポーネントで使用

- ListNavigationResource - <af:foreach>で使用

#{navigationContext.defaultNavigationModel.treeModel['parameters']}

#{navigationContext.defaultNavigationModel.menuModel['parameters']}

#{navigationContext.defaultNavigationModel.listModel['parameters']}

#{navigationContext.defaultNavigationModel.siteMap['parameters']}

指定されたカンマ区切りパラメータに基づいて、ツリー/メニュー/リスト・モデルを返します。使用可能なパラメータ(と例としてのデフォルト値)を次に示します。

- startNode=/ - モデルの開始ノードを指定します(ルート・ノードをリクエストする場合を除き、"/"を接頭辞として指定する必要はありません。例: home)。

- includeStartNode=true - 開始ノード(前述のルート・ノードなど)を含める場合はtrue、その子から開始する場合はfalseを指定します。

- depth=0 - フェッチの初期深さを定義します。0は、ツリー全体をフェッチすることを意味し、時間がかかることがあります。その場合は、オンデマンドでフェッチするために1を使用します(ユーザーが「展開」アイコンをクリックする場合)。

- prefetchOnly=false - デフォルトでは(true)、最初にリクエストされた深さレベルまでノードを返し、より深いレベルのノードはオンデマンドで返されます。ノードの初期セットのみを使用する場合は、falseを使用します。その場合、より深いノードがあっても、リクエストされたときに後でより深いノードを返しません。

siteMapの場合、使用可能なパラメータはstartNodeとincludeStartNodeです。

例:

#{navigationContext.defaultNavigationModel.treeModel['startNode=home,includeStartNode=false,depth=2']}

#{navigationContext.defaultNavigationModel.rootNode}

ナビゲーション・モデルのルート・ノード(タイプNavigationResource)を返します。

例:

<af:commandLink id="pt_cl1" text="Prescriptions"
inlineStyle="font-size:small; color:White;"
actionListener="#{navigationContext.processAction}"
action="pprnav">
<f:attribute name="node"
value="#{navigationContext.
defaultNavigationModel.
rootNode.children[2]"/>
</af:commandLink>

#{navigationContext.defaultNavigationModel.node['path']}

指定されたパスに基づいてノード(タイプNavigationResource)を返します(ルート・ノードをリクエストする場合を除き、"/"を接頭辞として指定する必要はありません。例: '/')。

例:

#{navigationContext.defaultNavigationModel.node['home/page1']}

#{navigationContext.defaultNavigationModel.currentSelection}

現在選択されているナビゲーション・ポータル・リソースを返します。

#{navigationContext.defaultNavigationModel.newCurrentSelection['path']}

与えられたパスによって指定されたノードに現在の選択を設定します(ルート・ノードをリクエストする場合を除き、/を接頭辞として指定する必要はありません。例: '/')。成功した場合、タイプNavigationResourceの新しく選択したノードを返します。

ユーザーは、実際にノードにナビゲートせずに、現在の選択を明示的に設定できる必要があります。

これは、ユーザーがページを直接入力し、選択が設定されていない場合に使用できます。これは、現在の選択が存在しない場合に何をデフォルトにするかをユーザーが制御するメカニズムを提供します。

例:

<c:set  value="${navigationContext.defaultNavigationModel.newCurrentSelection['home/page1']}"
var="currSel" scope="session"/>
<c:if test="${currSel!=null}">
<af:forEach items="#{currSel.children}"
var="cnode" varStatus="cnodestatus">
...</c:if>

#{navigationContext.defaultNavigationModel.attributes.Description}

#{navigationContext.defaultNavigationModel.attributes['Description']}

ナビゲーション・モデルの指定された属性の値を返します。

#{navigationContext.defaultNavigationModel.properties['propertyName']}

ナビゲーション・モデルの指定されたプロパティの値を返します(propertyNameはrootNodeまたはcurrentSelectionのいずれかです)。

ナビゲーション・ポータル・リソース式

#{node.attributes.Description}

#{node.attributes['Description']}

ナビゲーション・ポータル・リソースの指定された属性の値を返します。

#{node.parameters.StockSymbol}

#{node.parameters['StockSymbol']}

ナビゲーション・ポータル・リソースの指定されたパラメータの値を返します。

#{node.parametersRaw.StockSymbol}

#{node.parametersRaw['StockSymbol']}

ナビゲーション・ポータル・リソースの指定されたパラメータのRAW値(評価前の値)を返します。

#{node.title}

ナビゲーション・ポータル・リソースのタイトルを返します。

#{node.path}

ナビゲーション・ポータル・リソースへのパスを返します。

#{node.externalURL}

タイプExternal Linkのナビゲーション・ポータル・リソースのURLを返します。

#{node.prettyUrl}

このナビゲーション・ポータル・リソースの識別パスを返します。

#{node.prettyUrlPath}

#{node.prettyUrlPath[N]}

深さを指定して識別パスのコレクションを返し、別のナビゲーション・ビューを動作させる開始パスとして使用できるようにします。

たとえば、currentSelectionがhome/company/products/applicationsである場合、次のELはhome/company/productsを返します。

#{node.prettyUrlPath[3]}

#{node.goLinkPretty Url}

goLinkの宛先に適合するこのナビゲーション・ポータル・リソースの識別パスを返します

<af:goLink id="pt_gl2" text="#{node.title}"
destination="#{node.goLinkPrettyUrl}"
targetFrame="#{node.attributes['Target']}"
inlineStyle="font-size:small;#{node.selected ?
'font-weight:bold;' : ''}"/>

#{node.separator ? ... : ...}

このポータル・リソースがセパレータ・アイテムかどうかを返します。

#{node.navigable ? ... : ...}

このポータル・リソースにナビゲート可能かどうかを返します。

#{node.selected ? ... : ...}

このポータル・リソースが現在選択されているかどうかを返します。

#{node.currentlySelected ? ... : ...}

ポータル・リソースが現在選択されているポータル・リソースであり、モデルが現在選択されているモデルであるかどうかを返します。

#{node.onSelectedPath ? ... : ...}

このノードが選択されたパス上に存在するかどうかを返します。これは、たとえば選択されているタブを強調表示する場合に便利です。

たとえば、現在選択されているノードがhome/company/products/applicationsである場合、次のELはhomeタブを強調表示します。

<c:set  value="${navigationContext.defaultNavigationModel.node['home']}"
var="home" scope="session"/>
<af:commandImageLink id="cil1"
icon="#{(home.onSelectedPath) ?
'/images/caremark/nav/HomeSelected.png' :
'/images/caremark/nav/HomeIcon.png'}"
actionListener="#{navigationContext.processAction}"
action="pprnav">
<f:attribute name="node" value="#{home}"/></af:commandImageLink>

#{node.leaf ? ... : ...}

このリソースがリーフ・ノードかどうかを返します。

#{node.parent}

このノードの親ノード(タイプNavigationResource)を返します。ルート・ノードの場合、nullを返します。

#{node.ancestors}

このノード(タイプNavigationResource)の祖先の、ルート・ノードで始まる階層リストを返します。

たとえば、現在のノードがhome/company/products/applicationsである場合、次のELは次の値を返します。

- #{node.ancestors[1]}はhomeを表すノードを返します。

- #{node.ancestors[3]}はhome/company/productsを表すノードを返します

#{node.depth}

このノードのルート・ノードからの深さを返します。ルート・ノードの深さは0です。

#{node.siblings}

このノード(タイプNavigationResource)の兄弟のリストを返します(このノード自体を含む)。

#{node.nextSibling}

このノード(タイプNavigationResource)のリストの次の兄弟を返します。

たとえば、次のコードでは、1つの行内に2つのセパレータが連続して出力されることはありません。

<c:if test="${(node.separator) && (!node.nextSibling.separator}">
<af:separator id="s166"/>
</c:if>

#{node.previousSibling}

このノードのリスト内の前の兄弟(タイプNavigationResource)を返します。

#{node.index}

このノードの、その兄弟からの0相対インデックスを返します。

#{node.children}

#{node.children[N].title}

#{node.children[N].children[N].title}

子リソースのコレクションを返します。

#{node.childCount}

このノードの子の数を返します。

#{node.childByIndex['index']}

0相対インデックスで指定された子ノード(タイプNavigationResource)を返します。

見つからない場合、nullを返します。

#{node.childByPath['admin']}

このノードからの相対パスで指定された子ノード(タイプNavigationResource)を返します。

パスは1レベルよりも深くすることができ、'/'を接頭辞として指定することは必要ありません。見つからない場合、nullを返します。

#{node.properties['propertyName']}

ナビゲーション・ポータル・リソースの指定されたプロパティの値を返します。propertyNameは、separator、title、prettyUrl、prettyUrlPath、depth、leaf、childCount、navigable、selectedまたはcurrentlySelectedのいずれかです。

A.11 ツールとサービスに関連するEL

「ツールとサービスに関連するEL」では、ツールとサービスに関連するEL式を示し、提供される機能のタイプについて説明します。ここに示すELは、WebCenter Portalで構築されたポータルとJDeveloperで構築されたPortal Frameworkアプリケーションの両方に適用されます。

表A-10 ツールとサービスに関連するEL式

式

機能

#{webcenterService['serviceId']}

サービスID serviceIdによって表されるWebCenter Portalツールまたはサービスを表すoracle.webcenter.framework.service.Serviceオブジェクトの実装を返します。例では、クラスoracle.webcenter.doclib.internal.spaces.DoclibServiceのオブジェクトを返しています。

#{webcenterService['oracle.webcenter.doclib']}

サービスIDについては、表A-11を参照してください。

#{webcenterService['serviceId'].configured}

サービスID serviceIdによって表されるWebCenter Portalツールまたはサービスが、現在のWebCenter Portalインスタンスで使用するために構成されているかどうかを示すブール値を返します。たとえば、次のELは、アプリケーションでディスカッションを使用できる場合はtrue、それ以外の場合はfalseを返します。

#{webcenterService['oracle.webcenter.collab.forum'].configured}

サービスIDについては、表A-11を参照してください。

#{sessionContext['oracle.webcenter.collab.forum'].groupInfo['portalName'].forumId}

指定されたポータル・ディスカッション・フォーラムのフォーラムIDを返します。portalNameのかわりにポータル名を入力します。

#{sessionContext['oracle.webcenter.collab.forum'].groupInfo['portalName'].categoryId}

指定されたWebCenter Portalディスカッション・フォーラムのカテゴリIDを返します。portalNameのかわりにポータル名を入力します。

表A-11に、WebCenter Portalのツールとサービスに関連付けられているサービスIDを示します。

表A-11 サービスとツールのID

サービス/ツール

ID

お知らせ

oracle.webcenter.collab.announcement

ディスカッション

oracle.webcenter.collab.forum

ドキュメントとWiki

oracle.webcenter.doclib

イベント

oracle.webcenter.collab.calendar.community

インスタント・メッセージおよびプレゼンス(IMP)

oracle.webcenter.collab.rtc

リンク

oracle.webcenter.relationship

リスト

oracle.webcenter.list

メール

oracle.webcenter.collab.mail

通知

oracle.webcenter.notification

ページ

oracle.webcenter.page

ピープル・コネクション: アクティビティ・ストリーム

oracle.webcenter.activitystreaming

ピープル・コネクション: コネクション

oracle.webcenter.peopleconnections.connections

ピープル・コネクション: フィードバック

oracle.webcenter.peopleconnections.kudos

ピープル・コネクション: メッセージ・ボード

oracle.webcenter.peopleconnections.wall

ピープル・コネクション: プロファイル

oracle.webcenter.peopleconnections.profile

RSS

oracle.webcenter.rss

検索

oracle.webcenter.search

タグ

oracle.webcenter.tagging

ブログ

oracle.webcenter.blog

ワークリスト

oracle.webcenter.worklist

A.12 コンポーザに関連するEL

次の表に、コンポーザに関連するEL式のリストを示します。これらのEL式は、WebCenter Portalを使用して構築されたポータルとOracle JDeveloperで構築されたPortal Frameworkアプリケーションの両方で使用できます。

式

機能

#{composerContext.inEditMode}

現在のページが表示モードなのか編集モードなのかを決定します。

例:

<af:outputText id="ot1"   value="#{composerContext.inEditMode ne   true ? 'View mode' : 'Edit mode'} />

この例は、ページが表示モードのときにView modeを返し、ページが編集モードのときにEdit modeを返す、ADF FacesのoutputTextコンポーネントを示しています。

#{changeModeBean.inEditMode}

childCreation属性は、ポップアップ・ダイアログの子をコンポーザで表示できるかどうかを決定します。デフォルトでは、この属性はdeferredに設定されており、ポップアップ・ダイアログの子を表示する際に使用できます。値をimmediateに設定すると、ポップアップ・ダイアログの子を表示できます。

例:

<af:popup childCreation="#{changeModeBean.inEditMode   ? 'immediate' : 'deferred'}" />

childrenCreation属性をimmediateに設定すると、パフォーマンスに影響を与えます。ページ上でポップアップを使用する必要がない場合には、deferredのデフォルト設定を使用するとCPUのペナルティと不要なメモリーの使用を避けることができます。ポップアップは非モーダルで表示されるため、アプリケーションではエラーなしでそのファクトを処理できる必要があります。

例A-1 例: コンポーザに対するEL式の使用

この項では、表示モードと編集モードで異なるページを表示するためのEL式の使用例を示します。自分のページのうちの1つ(Page1)について、表示モードでは別のページ(Page2)を表示することを考えてみます。ただし、Page1の編集中は、Page2ではなく、www.example.comというWebサイトを表示させます。次の形式のELを使用できます。

#{ composerContext.inEditMode ? 'http://www.example.com' : 'url_of_Page2' }

このELにより、ページが編集モードのときは指定されたWebサイトが表示され、表示モードのときにはPage2が表示されます。

次の手順は、ページ・モードによって異なるページを表示する方法を示しています。

1. ページ・エディタ(コンポーザ)でPage1という名前のページを開きます。

2. デザイン・ビューで、リソース・カタログの「Web開発」をクリックします。

3. 「Webページ」の横に表示されている「追加」をクリックします。

4. 新しく追加されたWebページの「編集」アイコンをクリックします。

5. 「コンポーネント・プロパティ」ダイアログの「表示オプション」タブで、「ソース」フィールドに、次の形式で値を入力します。

#{ composerContext.inEditMode ? 'website_url' : 'url_of_Page2' }

6. 「OK」をクリックします。
コンポーザでは、指定したWebサイトがPage1に表示されます。ページを保存して閉じます。Page1にはPage2が表示されます。

A.13 ドキュメントに関連するEL

表A-12では、ドキュメントに関連するEL式を示し、提供される機能のタイプについて説明します。

表A-12 ドキュメントに関連するEL式

式

機能

#{documentsService.defaultConnectionName}

デフォルトのコンテンツ・リポジトリ接続名を取得します。接続名が定義されていない場合、nullを返します。

#{documentsService.configured}

ドキュメント機能が構成されているかどうかを確認します。ドキュメント機能が構成されている場合はtrue、それ以外の場合はfalseを返します。

A.14 ピープル・コネクションに関連するEL

表A-13では、ピープル・コネクションのプロファイル機能に関連するEL式を示し、提供される機能のタイプについて説明します。

注意:

エントリsecurityContext.userNameは、すべてのプロファイル式に含まれ、現在のユーザーの名前を返します。情報はユーザーのプロファイルに存在する場合にのみ返されることにも注意してください。情報がプロファイルに含まれない場合、null値が返されます。また、現在のユーザーが表示できる場合のみ、情報が返されます。

表A-13 ピープル・コネクション(プロファイル)に関連するEL式

式

機能

#{webCenterProfile[userName].managerDisplayName}

#{webCenterProfile[securityContext.userName].managerDisplayName}

ユーザーのマネージャの表示名。

#{webCenterProfile[userName].employeeNumber}

#{webCenterProfile[securityContext.userName].employeeNumber}

ユーザーの従業員番号。

#{webCenterProfile[userName].businessPOBox}

#{webCenterProfile[securityContext.userName].businessPOBox}

ユーザーに関連付けられた私書箱番号。

#{webCenterProfile[userName].timeZone}

#{webCenterProfile[securityContext.userName].timeZone}

ユーザーの勤務先がある場所のタイムゾーン。

#{webCenterProfile[userName].description}

#{webCenterProfile[securityContext.userName].description}

ユーザーの(プロファイル「自己紹介」からの)説明。

#{webCenterProfile[userName].department}

#{webCenterProfile[securityContext.userName].department}

ユーザーが属している部門。

#{webCenterProfile[userName].businessPager}

#{webCenterProfile[securityContext.userName].businessPager}

ユーザーの勤務先ページャ番号。

#{webCenterProfile[userName].businessCity}

#{webCenterProfile[securityContext.userName].businessCity}

ユーザーがいる市区。

#{webCenterProfile[userName].maidenName}

#{webCenterProfile[securityContext.userName].maidenName}

ユーザーの旧姓。

#{webCenterProfile[userName].businessFax}

#{webCenterProfile[securityContext.userName].businessFax}

ユーザーの勤務先FAX番号。

#{webCenterProfile[userName].dateofHire}

#{webCenterProfile[securityContext.userName].dateofHire}

ユーザーの入社日。

#{webCenterProfile[userName].nameSuffix}

#{webCenterProfile[securityContext.userName].nameSuffix}

ユーザーの名前に付加される追加情報(Esq.、Jr.など)。

#{webCenterProfile[userName].middleName}

#{webCenterProfile[securityContext.userName].middleName}

ユーザーのミドル・ネーム。

#{webCenterProfile[userName].homePhone}

#{webCenterProfile[securityContext.userName].homePhone}

ユーザーの自宅の電話番号。

#{webCenterProfile[userName].employeeType}

#{webCenterProfile[securityContext.userName].employeeType}

ユーザーの従業員タイプの分類(IC4など)。

#{webCenterProfile[userName].lastName}

#{webCenterProfile[securityContext.userName].lastName}

ユーザーの姓。

#{webCenterProfile[userName].dateofBirth}

#{webCenterProfile[securityContext.userName].dateofBirth}

ユーザーの生年月日。

#{webCenterProfile[userName].businessState}

#{webCenterProfile[securityContext.userName].businessState}

ユーザーの勤務先がある都道府県。

#{webCenterProfile[userName].homeAddress}

#{webCenterProfile[securityContext.userName].homeAddress}

ユーザーの自宅住所。

#{webCenterProfile[userName].businessStreet}

#{webCenterProfile[securityContext.userName].businessStreet}

ユーザーの勤務先がある番地。

#{webCenterProfile[userName].businessPostalCode}

#{webCenterProfile[securityContext.userName].businessPostalCode}

ユーザーの郵便番号。

#{webCenterProfile[userName].initials}

#{webCenterProfile[securityContext.userName].initials}

ユーザーのイニシャル。

#{webCenterProfile[userName].firstName}

#{webCenterProfile[securityContext.userName].firstName}

ユーザーのファースト・ネーム。

#{webCenterProfile[userName].organizationalUnit}

#{webCenterProfile[securityContext.userName].organizationalUnit}

ユーザーが属している組織単位(D10など)。

#{webCenterProfile[userName].wirelessAcctNumber}

#{webCenterProfile[securityContext.userName].wirelessAcctNumber}

ユーザーのワイヤレス・アカウント番号。

#{webCenterProfile[userName].businessPhone}

#{webCenterProfile[securityContext.userName].businessPhone}

ユーザーの勤務先電話番号。

#{webCenterProfile[userName].businessCountry}

#{webCenterProfile[securityContext.userName].businessCountry}

ユーザーが割り当てられている国。

#{webCenterProfile[userName].preferredLanguage}

#{webCenterProfile[securityContext.userName].preferredLanguage}

ユーザーの優先言語。

#{webCenterProfile[userName].displayName}

#{webCenterProfile[securityContext.userName].displayName}

ユーザーの表示名。

#{webCenterProfile[userName].userName}

#{webCenterProfile[securityContext.userName].userName}

ユーザーの本名。

#{webCenterProfile[userName].title}

#{webCenterProfile[securityContext.userName].title}

ユーザーの役職名

#{webCenterProfile[userName].businessEmail}

#{webCenterProfile[securityContext.userName].businessEmail}

ユーザーの勤務先電子メール・アドレス。

#{webCenterProfile[userName].organization}

#{webCenterProfile[securityContext.userName].organization}

ユーザーが属している組織(Salesなど)。

#{webCenterProfile[userName].businessMobile}

#{webCenterProfile[securityContext.userName].businessMobile}

ユーザーの携帯電話番号。

#{webCenterProfile[userName].expertise}

#{webCenterProfile[securityContext.userName].expertise}

ユーザーの専門業務。

A.15 偽装に関連するEL

表A-14では、WebCenter Portal偽装に関連するEL式を示し、提供される機能のタイプについて説明します。ここに示すELは、WebCenter Portalで構築されたポータルとJDeveloperで構築されたPortal Frameworkアプリケーションの両方に適用されます。

これらのELの使用方法の詳細は、「WebCenter Portal偽装セキュリティのカスタマイズ」を参照してください。

表A-14 偽装に関連するEL式

式

機能

#{WCSecurityContext.impersonationConfigured}

現在のドメインで偽装が有効化されているかどうかを返します。

このELは、偽装セッションの終了が早すぎることが原因でエラーが発生したのかどうかを判別したり、セッションが終了したことを示す追加のインジケータを提供する場合に便利です。

#{WCSecurityContext.userInImpersonationSession}

現在のユーザーが偽装セッションにあるのかどうかを返します。

このELを使用して、コンテンツを保護し、偽装セッション中はアクセスできないようにレンダリングできます。たとえば、ページ上の管理タスク・フローのレンダリングされた属性をこのELにマップして、ユーザーが偽装セッションでタスク・フローを表示しない場合、タスク・フローのレンダリングのみを行うことができます。

#{WCSecurityContext.currentImpersonator}

このELを使用すると、ページ・テンプレートを変更して偽装者を表示したり、特定の偽装者のみにアクセスできるようにコンテンツをレンダリングできます。

A.16 ページ・エディタに関連するEL式

表A-15に、WebCenter Portalページ・エディタに関連するEL式を示します。これらのEL式は、WebCenter Portalを使用して構築されたポータルとOracle JDeveloperを使用して構築されたアセット・アプリケーションの両方で使用できます。

表A-15 ページ・エディタに関連するEL式

式

機能

#{composerContext.inEditMode}

現在のページが表示モードなのか編集モードなのかを決定します。

例:

<af:outputText id="ot1"
value="#{composerContext.inEditMode ne
true ? 'View mode' : 'Edit mode'} />

この例は、ページが表示モードの場合、ADF FacesのoutputTextコンポーネントがView modeを返し、ページが編集モードの場合はEdit modeを返すことを示しています。

#{changeModeBean.inEditMode}

childCreation属性は、ポップアップ・ダイアログの子をコンポーザで表示できるかどうかを決定します。デフォルトでは、この属性はdeferredに設定されており、ポップアップ・ダイアログの子を表示する際に使用できます。値をimmediateに設定すると、ポップアップ・ダイアログの子を表示できます。

例:

<af:popup childCreation="#{changeModeBean.inEditMode
? 'immediate' : 'deferred'}" />

childrenCreation属性をimmediateに設定すると、パフォーマンスに影響を与えます。ページ上でポップアップを使用する必要がない場合には、deferredのデフォルト設定を使用するとCPUのペナルティと不要なメモリーの使用を避けることができます。ポップアップは非モーダルで表示されるため、アプリケーションではエラーなしでそのファクトを処理できる必要があります。

A.16.1 例: ページ・エディタに対するEL式の使用

この項では、表示モードと編集モードで異なるページを表示するためのEL式の使用例を示します。自分のページのうちの1つ(Page1)について、表示モードでは別のページ(Page2)を表示することを考えてみます。ただし、Page1の編集中は、Page2ではなく、www.example.comというWebサイトを表示させます。次の形式のELを使用できます。

#{ composerContext.inEditMode ? 'http://www.example.com' : 'url_of_Page2' }

このELにより、ページが編集モードのときは指定されたWebサイトが表示され、表示モードのときにはPage2が表示されます。

次の手順は、ページ・モードによって異なるページを表示する方法を示しています。

1. ページ・エディタでPage1という名前のページを開きます。

2. デザイン・ビューで、リソース・カタログの「Web開発」をクリックします。

3. 「Webページ」の横に表示されている「追加」をクリックします。

4. 新しく追加されたWebページの「編集」アイコンをクリックします。

5. 「コンポーネント・プロパティ」ダイアログの「表示オプション」タブで、「ソース」フィールドに、次の形式で値を入力します。

#{ composerContext.inEditMode ? 'website_url' : 'url_of_Page2' }

6. 「OK」をクリックします。
コンポーザでは、指定したWebサイトがPage1に表示されます。ページを保存して閉じます。Page1にはPage2が表示されます。

A.17 デバイス設定に関連するEL式

この項では、デバイス設定に関する情報を取得するELについて説明します。デバイス設定の詳細は、『Oracle Fusion Middleware Oracle WebCenter Portalの管理』のデバイス設定の管理に関する項を参照してください。

EL式を使用して、特定のデバイスをターゲットとするアセット(スキンおよびページ・テンプレート)を設定できます。デバイス設定が指定されたEL式の使用の詳細は、『Oracle Fusion Middleware Oracle WebCenter Portalの管理』のデバイス設定の管理に関する項を参照してください。

- 表A-16に、デバイス・グループ・マッピングに関する情報を取得するためのEL式を示します。

- 表A-17に、デバイスに関する情報を取得するためのELを示します。

- 表A-18に、デバイス・グループに関連付けられているスキンおよびページ・テンプレートに関する情報を取得するためのELを示します。

- 「デバイス属性を検出するタスク・フローのサンプル・コード」では、ポータルへのアクセスに使用するデバイスの属性を検出するためのタスク・フローで使用できるサンプル・コードを示します。

たとえば、ページ・デザイナは、デバイスの属性を使用してページのコンテンツ領域の幅を制御するために、次のELを使用できます。

#{DeviceAgent.device.attributes['display_resolution_width']

表A-16 デバイス・エージェントに関連するEL式

式

関連するJava API

説明

#{DeviceAgent}

DeviceAgent.getInstance()

すべてのデバイス設定ELに対するルート・エントリ・ポイント。

#{DeviceAgent.device}

DeviceAgent.getInstance().getDevice()

現在のリクエストのマップ先のデバイス。

#{DeviceAgent.deviceGroups}

DeviceAgent.getInstance().getDeviceGroups()

現在のデバイスのマップ先のデバイス・グループのリスト。この操作では、enabledとマークされているかどうかに関係なく、すべてのデバイス・グループが返されます。

#{DeviceAgent.currentScopeDeviceGroup}

DeviceAgent.getInstance().getCurrentScopeDeviceGroup()

特定のポータルについて着信リクエストがマップされたデバイス・グループを取得します。このELによって、特定のデバイスについてページ・バリアントが表示されない理由に関する問題を、管理者が診断しやすくなります。

表A-17 デバイスに関連するEL式

式

関連するJava API

説明

#{DeviceAgent.device}

DeviceAgent.getInstance().getDevice()

現在のリクエストのマップ先のデバイス。

#{DeviceAgent.device.name}

DeviceAgent.getInstance().getDevice().getName()

デバイスの名前。システム・フレンドリな識別子で、内部リンクに使用できます。

#{DeviceAgent.device.displayName}

DeviceAgent.getInstance().getDevice().getDisplayName()

デバイスの表示名。

#{DeviceAgent.device.attributes}

DeviceAgent.getInstance().getDevice().getAttributes()

デバイスに関連付けられている属性のマップ。画面サイズ、OSバージョンなど。

たとえば、次のELは、デバイスの作成時に設定された表示解像度の幅を返します。

#{DeviceAgent.device.attributes['display_resolution_width']}

表A-18 デバイス・グループに関連するEL式

式

関連するJava API

説明

#{DeviceAgent.currentScopeDeviceGroup}

DeviceAgent.getInstance().getCurrentScopeDeviceGroup()

現在のリクエストのマップ先のデバイス・グループ。適切なデバイス・グループを識別するための一般的なフローは次のとおりです。

1. 現在のリクエストが属しているデバイスを識別します。

2. 現在のポータルに対して有効になっているすべてのデバイス・グループを取得します。

3. デバイスが属している最初のデバイス・グループ(前述のリスト)を識別します。

#{DeviceAgent.currentScopeDeviceGroup.name}

DeviceAgent.getInstance().getCurrentScopeDeviceGroup().getName()

デバイス・グループの名前。次に例を示します。

#{DeviceAgent.currentScopeDeviceGroup.name =='androidTablets'}

#{DeviceAgent.currentScopeDeviceGroup.portalPageTemplate}

DeviceAgent.getInstance().getCurrentScopeDeviceGroup().getPortalPageTemplate()

このデバイス・グループ・オブジェクトに関連付けられているポータル・ページ・テンプレートのGUIDを返します。メソッドからNULLが返された場合、ポータルのデフォルト・ページ・テンプレート設定が有効になっています。

注意: 取得したGUIDでの操作に使用するリソースELの詳細は、「ポータル・リソースに関連するEL」を参照してください。

#{DeviceAgent.currentScopeDeviceGroup.portalSkin}

DeviceAgent.getInstance().getCurrentScopeDeviceGroup().getPortalSkin()

このデバイス・グループに関連付けられているポータル・スキンのGUIDを返します。メソッドからNULLが返された場合、ポータルのデフォルト・スキン設定が有効になっています。

注意: 取得したGUIDでの操作に使用するリソースELの詳細は、「ポータル・リソースに関連するEL」を参照してください。

#{DeviceAgent.currentScopeDeviceGroup.default}

DeviceAgent.getInstance().getCurrentScopeDeviceGroup().isDefault()

デバイス・グループが現在のデバイスのデフォルトである場合は、trueを返します。デバイス・グループがデバイスのデフォルトでない場合は、falseを返します。たとえば、デフォルトのデバイス・グループがデスクトップ・ブラウザになっているときに、iPad上でポータルにアクセスした場合、デバイス・グループはiPadになりますが、これはデフォルトのデバイス・グループではありません。この場合、メソッドはfalseを返します。

#{DeviceAgent.currentScopeDeviceGroup.enabled}

DeviceAgent.getInstance().getCurrentScopeDeviceGroup().isEnabled()

このデバイス・グループが現在のポータルに対して有効とマークされているかどうかを識別します。

注意: この呼出しでは、デバイス・グループは常にtrueの状態です。このELは、すべてのデバイス・グループがEL #{DeviceAgent.deviceGroups}によって取得された場合に便利です。

A.17.1 デバイス属性を検出するタスク・フローのサンプル・コード

次の例では、デバイス属性を検出するタスク・フローの作成に使用できるJSFページ・フラグメントを示します。ELによって属性が返されます。このタスク・フローは、デバイス上でポータルが正しくレンダリングされないような状況のトラブルシューティングなどに役立ちます。デバイス属性を検出することで、レンダリング問題の修正処理を行えます。図A-6は、このサンプル・コードによって作成されたタスク・フローからの出力を示しています。

例: デバイス属性を検出するタスク・フロー・コード

<?xml version='1.0' encoding='UTF-8'?>
<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" version="2.1" xmlns:pe="http://xmlns.oracle.com/adf/pageeditor" xmlns:cust="http://xmlns.oracle.com/adf/faces/customizable" xmlns:f="http://java.sun.com/jsf/core" xmlns:af="http://xmlns.oracle.com/adf/faces/rich">
<af:panelGroupLayout layout="scroll" id="pgl1">
<cust:panelCustomizable id="pc1"/>
<f:facet name="separator">
<af:separator id="s1"/>
</f:facet>
<af:panelFormLayout id="pfl1">
<af:group id="g1">
<af:panelLabelAndMessage id="it0" label="Current Device" labelStyle="color:#0000ff;font-weight:bold;"/>
<af:panelLabelAndMessage id="it1plm" label="Internal Name">
<af:outputText id="it1" value="#{DeviceAgent.device.name}"/>
</af:panelLabelAndMessage>
<af:panelLabelAndMessage id="it2plm" label="Display Name">
<af:outputText id="it2" value="#{DeviceAgent.device.displayName}"/>
</af:panelLabelAndMessage>
</af:group>
<af:group>
<af:panelLabelAndMessage id="it01" label="Current Device Group" labelStyle="color:#0000ff;font-weight:bold;"/>
<af:panelLabelAndMessage id="it3plm" label="Internal Name">
<af:outputText id="it3" value="#{DeviceAgent.currentScopeDeviceGroup.name}"/>
</af:panelLabelAndMessage>
<af:panelLabelAndMessage id="it4plm" label="Display Name">
<af:outputText id="it4" value="#{DeviceAgent.currentScopeDeviceGroup.displayName}"/>
</af:panelLabelAndMessage>
<af:panelLabelAndMessage id="it5plm" label="PageTemplate">
<af:outputText id="it5" value="#{srmContext.id[DeviceAgent.currentScopeDeviceGroup.portalPageTemplate].singleResult.displayName}"/>
</af:panelLabelAndMessage>
<af:panelLabelAndMessage id="it6plm" label="Skin">
<af:outputText id="it6" value="#{srmContext.id[DeviceAgent.currentScopeDeviceGroup.portalSkin].singleResult.displayName}"/>
</af:panelLabelAndMessage>
<af:panelLabelAndMessage id="it7plm" label="Is Default">
<af:outputText id="it7" value="#{DeviceAgent.currentScopeDeviceGroup.default}"/>
</af:panelLabelAndMessage>
<af:panelLabelAndMessage id="it8plm" label="Is Enabled">
<af:outputText id="it8" value="#{DeviceAgent.currentScopeDeviceGroup.enabled}"/>
</af:panelLabelAndMessage>
</af:group>
<af:group>
<af:panelLabelAndMessage id="it9plm" label="Current Browser User Agent" labelStyle="color:#0000ff;font-weight:bold;">
<af:outputText id="it9" value="#{DeviceAgent.userAgent}"/>
</af:panelLabelAndMessage>
</af:group>
<af:group>
<af:panelLabelAndMessage id="pt0" label="Page Template Info" labelStyle="color:#0000ff;font-weight:bold;"/>
<af:panelLabelAndMessage id="it010plm" label="Expected PageTemplate:GUID">
<af:outputText id="it010" value="#{DeviceAgent.currentScopeDeviceGroup.portalPageTemplate}"/>
</af:panelLabelAndMessage>
<af:panelLabelAndMessage id="it0010plm" label="Expected PageTemplate:Name">
<af:outputText id="it0010" value="#{srmContext.id[DeviceAgent.currentScopeDeviceGroup.portalPageTemplate].singleResult.displayName}"/>
</af:panelLabelAndMessage>
<af:panelLabelAndMessage id="it10plm" label="Current PageTemplate:GUID">
<af:outputText id="it10" value="#{WCAppContext.application.siteTemplatesManager.currentSiteTemplateId}"/>
</af:panelLabelAndMessage>
<af:panelLabelAndMessage id="it10aplm" label="Current PageTemplate:Name">
<af:outputText id="it10a" value="#{srmContext.id[WCAppContext.application.siteTemplatesManager.currentSiteTemplateId].singleResult.displayName}"/>
</af:panelLabelAndMessage>
</af:group>
<af:group>
<af:panelLabelAndMessage id="sk0" label="Skin Info" labelStyle="color:#0000ff;font-weight:bold;"/>
<af:panelLabelAndMessage id="it0111plm" label="Expected Skin:GUID">
<af:outputText id="it0111" value="#{DeviceAgent.currentScopeDeviceGroup.portalSkin}"/>
</af:panelLabelAndMessage>
<af:panelLabelAndMessage id="it0112plm" label="Expected Skin:Name">
<af:outputText id="it0112" value="#{srmContext.id[DeviceAgent.currentScopeDeviceGroup.portalSkin].singleResult.displayName}"/>
</af:panelLabelAndMessage>
<af:panelLabelAndMessage id="it111plm" label="Current Skin:GUID">
<af:outputText id="it111" value=""/>
</af:panelLabelAndMessage>
<af:panelLabelAndMessage id="it112plm" label="Current Skin:Name">
<af:outputText id="it112" value="#{requestScope['oracle.webcenter.webcenterapp.view.shell.WebCenterShellManager.SHELLHANDLER'].adfFacesSkin}"/>
</af:panelLabelAndMessage>
</af:group>
<af:group>
<af:panelLabelAndMessage id="pg0" label="Page Info" labelStyle="color:#0000ff;font-weight:bold;"/>
<af:panelLabelAndMessage id="pg10" label="Page Path">
<af:outputText id="pg1" value="#{pageDocBean.pagePath}"/>
</af:panelLabelAndMessage>
<af:panelLabelAndMessage id="pg20" label="Page Style">
<af:outputText id="pg2" value=""/>
</af:panelLabelAndMessage>
</af:group>
<af:group>
<af:panelLabelAndMessage id="ap90" label="Optional Attributes" labelStyle="color:#0000ff;font-weight:bold;"/>
<af:panelLabelAndMessage id="ap1opta" label="brand-name">
<af:outputText id="ap1" value="#{DeviceAgent.device.attributes['brand-name']}"/>
</af:panelLabelAndMessage>
<af:panelLabelAndMessage id="ap2opta" label="device-os">
<af:outputText id="ap2" value="#{DeviceAgent.device.attributes['device-os']}"/>
</af:panelLabelAndMessage>
<af:panelLabelAndMessage id="ap3opta" label="device-type">
<af:outputText id="ap3" value="#{DeviceAgent.device.attributes['device-type']}"/>
</af:panelLabelAndMessage>
<af:panelLabelAndMessage id="ap4opta" label="device_default_aspect_ratio">
<af:outputText id="ap4" value="#{DeviceAgent.device.attributes['device_default_aspect_ratio']}"/>
</af:panelLabelAndMessage>
<af:panelLabelAndMessage id="ap5opta" label="device_os-version">
<af:outputText id="ap5" value="#{DeviceAgent.device.attributes['device_os-version']}"/>
</af:panelLabelAndMessage>
<af:panelLabelAndMessage id="ap6opta" label="device_preview_css">
<af:outputText id="ap6" value="#{DeviceAgent.device.attributes['device_preview_css']}"/>
</af:panelLabelAndMessage>
<af:panelLabelAndMessage id="ap7opta" label="device_preview_horizontal_css">
<af:outputText id="ap7" value="#{DeviceAgent.device.attributes['device_preview_horizontal_css']}"/>
</af:panelLabelAndMessage>
<af:panelLabelAndMessage id="ap8opta" label="device_preview_viewport_css">
<af:outputText id="ap8" value="#{DeviceAgent.device.attributes['device_preview_viewport_css']}"/>
</af:panelLabelAndMessage>
<af:panelLabelAndMessage id="ap9opta" label="device_preview_viewport_horizontal_css">
<af:outputText id="ap9" value="#{DeviceAgent.device.attributes['device_preview_viewport_horizontal_css']}"/>
</af:panelLabelAndMessage>
<af:panelLabelAndMessage id="ap10opta" label="device_streaming_flv">
<af:outputText id="ap10" value="#{DeviceAgent.device.attributes['device_streaming_flv']}"/>
</af:panelLabelAndMessage>
<af:panelLabelAndMessage id="ap11opta" label="device_streaming_preferred_http_protocol">
<af:outputText id="ap11" value="#{DeviceAgent.device.attributes['device_streaming_preferred_http_protocol']}"/>
</af:panelLabelAndMessage>
<af:panelLabelAndMessage id="ap12opta" label="device_streaming_preferred_protocol">
<af:outputText id="ap12" value="#{DeviceAgent.device.attributes['device_streaming_preferred_protocol']}"/>
</af:panelLabelAndMessage>
<af:panelLabelAndMessage id="ap13opta" label="device_video_streaming">
<af:outputText id="ap13" value="#{DeviceAgent.device.attributes['device_video_streaming']}"/>
</af:panelLabelAndMessage>
<af:panelLabelAndMessage id="ap14opta" label="display_orientation_support">
<af:outputText id="ap14" value="#{DeviceAgent.device.attributes['display_orientation_support']}"/>
</af:panelLabelAndMessage>
<af:panelLabelAndMessage id="ap15opta" label="display_resolution_height">
<af:outputText id="ap15" value="#{DeviceAgent.device.attributes['display_resolution_height']}"/>
</af:panelLabelAndMessage>
<af:panelLabelAndMessage id="ap16opta" label="display_resolution_width">
<af:outputText id="ap16" value="#{DeviceAgent.device.attributes['display_resolution_width']}"/>
</af:panelLabelAndMessage>
<af:panelLabelAndMessage id="ap17opta" label="is-wireless_device">
<af:outputText id="ap17" value="#{DeviceAgent.device.attributes['is-wireless_device']}"/>
</af:panelLabelAndMessage>
<af:panelLabelAndMessage id="ap18opta" label="marketing-name">
<af:outputText id="ap18" value="#{DeviceAgent.device.attributes['marketing-name']}"/>
</af:panelLabelAndMessage>
<af:panelLabelAndMessage id="ap19opta" label="model-name">
<af:outputText id="ap19" value="#{DeviceAgent.device.attributes['model-name']}"/>
</af:panelLabelAndMessage>
<af:panelLabelAndMessage id="ap20opta" label="model-version">
<af:outputText id="ap20" value="#{DeviceAgent.device.attributes['model-version']}"/>
</af:panelLabelAndMessage>
<af:panelLabelAndMessage id="ap21opta" label="icon">
<af:outputText id="ap21" value="#{DeviceAgent.device.attributes['icon']}"/>
</af:panelLabelAndMessage>
</af:group>
</af:panelFormLayout>
</af:panelGroupLayout>
</jsp:root>

図A-6 サンプル・タスク・フローからの出力

A.18 実用的なEL式

表A-19では、実用的なEL式を示し、提供される機能のタイプについて説明します。

表A-19 実用的なEL式

式

機能

#{userPreferences.currentDate}

現在の日付を現在のユーザーのプリファレンスで指定されている形式で戻します。

#{WCTruncator['text']['numberOfChars']}

textとして指定された文字列をnumberOfCharsとして指定された文字数まで切り捨て、後に省略記号を付けたものを戻します。たとえば、#{WCTruncator['abracadabra']['5']}はabrac...と評価されます。

#{facesContext.viewRoot.locale}

#{facesContext.externalContext.requestLocale}

どちらの式も、リクエストのロケール(ブラウザのロケール設定)を返します。

#{adfFacesContext.skinFamily}

現行のアプリケーション・スキン・ファミリを戻します。戻り値は#{requestContext.skinFamily}と同じです。

A.19 式エディタの組込み式

式エディタで、「値の選択」オプションを選択すると、ダイアログ内のテキスト・ボックスに組込みEL式を移入できます。まず式のカテゴリを選択し、次に式から返される情報のタイプを選択します。選択内容に関連するELが、ダイアログ下部のテキスト・ボックスに表示されます(図A-7)。

図A-7 式エディタの「値の選択」の下のオプション

この項は、カテゴリごとの項に分類されます。各項では、そのカテゴリに関連付けられるELをリストし、説明しています。

この項では、次の内容について説明します。

- アプリケーション情報の組込みEL

- アセット情報の組込みEL

- ページ情報の組込みEL

- ページ・パラメータの組込みEL

- ポータル情報の組込みEL

- ポータル・ページ情報の組込みパス

- システムの組込みEL

- ユーザー情報の組込みEL

- WebCenterイベントの組込みEL

A.19.1 アプリケーション情報の組込みEL

アプリケーション情報の組込みEL式は、Oracle WebCenter Portalに関連する値を返します。たとえば、#{WCAppContext.application.applicationConfig.title}という式は、WebCenter Portal管理の「一般」ページで指定されるアプリケーション名を返します。

関連項目:

アプリケーションに関連するその他のEL式は、「WebCenter Portal情報に関連するEL」を参照してください。

表A-20に、「アプリケーション情報」カテゴリで使用できる組込みEL式と、返される値のタイプの例を示します。

表A-20 「アプリケーション情報」の組込みEL式

オプション

式

戻り値の例

現在のスコープ

#{serviceCtx.scope}

Scope[name=standards, guid=sa78185d3_9d65_49ab_ac1d_4809380d0b30]

現在のページ・テンプレート・スコープ

#{WCAppContext.currentScope}

Scope[name=standards, guid=sa78185d3_9d65_49ab_ac1d_4809380d0b30]

以前に設定されたページ・テンプレート

#{WCAppContext.previouslySetPageTemplate}

Fusion Side Navigation

アプリケーション

#{WCAppContext.application}

oracle.webcenter.webcenterapp.internal.view.shell.WCApplication

アプリケーションURL

#{WCAppContext.applicationURL}

http://host:port/webcenter

現在のWebCenter Portal URI

#{WCAppContext.currentWebCenterURI}

/oracle/webcenter/page/scopedMD/GUID/businessRolePages/Page3.jspx?wc.contextURL=%2Fspaces

アプリケーション構成

#{WCAppContext.application.applicationConfig}

oracle.webcenter.webcenterapp.beans.WebCenterMetadataImpl@123db9d

アプリケーション構成タイトル

#{WCAppContext.application.applicationConfig.title}

WebCenter

アプリケーション構成ロゴ

#{WCAppContext.application.applicationConfig.logo}

/oracle/webcenter/webcenterapp/metadata/images/logo.gif

アプリケーション構成ヘルプ・ページ

#{WCAppContext.application.applicationConfig.helpPage}

/webcenterhelp/spaces?topic=welcome_main

アプリケーション構成著作権メッセージ・カスタム値

#{WCAppContext.application.applicationConfig.copyrightMessage.customValue}

http://www.example.com/html/copyright.html

アプリケーション構成プライバシ・ポリシーURL

#{WCAppContext.application.applicationConfig.privacyPolicyUrl}

http://www.example.com/html/privacy.html

アプリケーション構成スキン

#{WCAppContext.application.applicationConfig.skin}

webcenterfx

たとえば、現在のページのURLをコピーおよび共有できるようにするリンクをポータルのすべてのページに表示する場合を考えてみます。HTMLマークアップ・アイテムをページ・テンプレートに追加して、ページURLを返すELを追加できます。

次の手順は、ELを使用してページURLを取得する方法を示しています。

1. カスタム・ページ・テンプレートを編集モードで開きます。

2. デザイン・ビューで、リソース・カタログの「Web開発」をクリックします。

3. 「HTMLマークアップ」の横の「追加」をクリックします。

4. 新しく追加されたHTMLマークアップの「編集」アイコンをクリックします。

5. 「コンポーネント・プロパティ」ダイアログの「表示オプション」タブで、「値」フィールドに、次のELを入力します。

<a href="javascript:{
var returnvalue =prompt( '#{pageDocBean.title}
URL','#{WCAppContext.applicationURL}/faces#{WCAppContext.currentWebCenterURI}');
}">Share Link</a>

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

7. ページ・テンプレートをポータルに適用します。

A.19.2 アセット情報の組込みEL

アセット情報の組込みEL式は、WebCenter Portalリソース(テンプレート、スタイル、リソース・カタログなど)に関連する値を返します。たとえば、#{srmContext.id['ResourceID'].singleResult}という式は、指定されたGUIDのアセットを返します。

関連項目:

アセットに関連するその他のEL式は、「アセットに関連するEL」を参照してください。

表A-21に、「アセット情報」カテゴリで使用できる組込みEL式と、返される値のタイプの例を示します。

表A-21 「アセット情報」の組込みEL式

オプション

式

戻り値の例

アセットID

#{srmContext[wCond['id']['like']['ResourceID']].singleResult}

id:gsr3396194a_3a72_44d6_90b4_57fd6efe4ff7 resourceScope:Scope[name=defaultScope, guid=s8bba98ff_4cbb_40b8_beee_296c916a23ed] resourceType:siteTemplate serviceId:oracle.webcenter.siteresources.sitetemplate category: displayName:Fusion Side Navigation displayNameKey:SITE_TEMPLATE_FUS_SIDE_STRETCH_NAV_DN description:Stretching Page Layout with Side Navigation. Use Fusion FX Skin. descriptionKey:SITE_TEMPLATE_FUS_SIDE_STRETCH_NAV_DESC contentDirectory:/oracle/webcenter/siteresources/shared metadataFile: jspx:/oracle/webcenter/webcenterapp/view/templates/WCSiteTemplateSideNavStretch.jspx pageDef:/oracle/webcenter/webcenterapp/bindings/pageDefs/oracle_webcenter_webcenterapp_view_templates_WCSiteTemplateSideNavStretchPageDef.xml iconURI: excludeFrom: usesCustomSecurity:false visible:TRUE seeded:true createdBy:system createdDate:Fri Jul 02 05:44:19 PDT 2010 modifiedBy:system resourceBundle:oracle.webcenter.sitetemplate.view.resource.SiteTemplateBundle modifiedDate:Fri Jul 02 05:44:19 PDT 2010 logoUrl:/adf/webcenter/srm_dflt_logo_qualifier.png attributes:[]

表示名

#{srmContext[wCond['displayName']['like']['DisplayName']].singleResult}

戻り値の例は、「アセットID」を参照してください。

説明

#{srmContext[wCond['description']['like']['Description']].singleResult}

戻り値の例は、「アセットID」を参照してください。

作成日

#{srmContext[wCond['createdDate']['like']['CreationDate']].singleResult}

戻り値の例は、「アセットID」を参照してください。

変更者

#{srmContext[wCond['modifiedBy']['like']['UserName']].singleResult}

戻り値の例は、「アセットID」を参照してください。

更新日

#{srmContext[wCond['modifiedDate']['like']['ModifiedDate']].singleResult}

戻り値の例は、「アセットID」を参照してください。

アセット・スコープ

#{srmContext[wCond['resourceScope']['like']['ResourceScope']].singleResult}

戻り値の例は、「アセットID」を参照してください。

A.19.3 ページ情報の組込みEL

ページ情報の組込みEL式は、WebCenter Portalページに関連する値を返します。たとえば、#{pageDocBean.createdBy}という式は、現在のページの作成者のユーザー名を返します。

表A-22に、「ページ情報」カテゴリで使用できる組込みEL式と、返される値のタイプの例を示します。

表A-22 「ページ情報」の組込みEL式

オプション

式

戻り値の例

タイトル

#{pageDocBean.title}

Welcome Page (BRP)

作成者

#{pageDocBean.createdBy}

j.doe

作成日文字列

#{pageDocBean.createDateString}

2010-11-17T13:27:52

最終更新者

#{pageDocBean.lastUpdatedBy}

j.smith

最終更新日文字列

#{pageDocBean.lastUpdateDateString}

2010-11-17T13:27:52

ページ・パス

#{pageDocBean.pagePath}

/oracle/webcenter/page/scopedMD/GUID/businessRolePages/Page3.jspx

名前

#{pageDocBean.name}

Page3.jspx

UI CSSスタイル

#{pageDocBean.UICSSStyle}

WCSchemeCustom

UIスキームの背景イメージ

#{pageDocBean.UISchemeBGImage}

#{facesContext.externalContext.requestContextPath}/adf/oracle/webcenter/page/images/clouds.png

UIスキームの背景色文字列

#{pageDocBean.UISchemeBGColorString}

null

ページ権限

#{pageDocBean.pagePermission}

oracle.webcenter.page.model.security.CustomPagePermission

ページ・セキュリティ・ターゲット

#{pageDocBean.pageSecurityTarget}

oracle_webcenter_page_scopedMD_sa78185d3_9d65_49ab_ac1d_4809380d0b30_COIHomePageDef

A.19.4 ページ・パラメータの組込みEL

ページ・パラメータの組込みEL式は、WebCenter Portalページ・パラメータに関連する値を返します。エディタには、現在のページで定義されているすべてのパラメータが表示されます。パラメータが定義されていない場合、「ページ・パラメータ」カテゴリは使用できません。

たとえば、組込みページ・スタイル「ブログ」には、5つの組込みページ・パラメータがあります(表A-23を参照)。widthパラメータは、各列に割り当てられる、幅全体の割合(パーセント)を表します。showパラメータは、ページのヘッダーとフッターがレンダリングされるかどうかを指定します。どのページも独自のカスタム・ページ・パラメータを持つことができます。

組込みでもカスタムでも、使用可能なページ・パラメータは、「ページ・パラメータ」カテゴリの式エディタに表示されます。

関連項目:

ページ・パラメータの作成および使用方法の詳細は、『Oracle Fusion Middleware Oracle WebCenter Portalでのポータルの構築』のページ・パラメータの追加または変更に関する項を参照してください。

表A-23に、「ブログ」ページ・スタイルに基づくページについて、「ページ・パラメータ」カテゴリで使用できるEL式を示します。各パラメータから返される値のタイプの例も示します。

表A-23 「ページ・パラメータ」の組込みEL式

オプション

式

戻り値の例

leftWidth

#{bindings.leftWidth}

25%

centerWidth

#{bindings.centerWidth}

50%

rightWidth

#{bindings.rightWidth}

25%

showHeader

#{bindings.showHeader}

false

showFooter

#{bindings.showFooter}

false

A.19.5 ポータル情報の組込みEL

ポータル情報の組込みEL式は、(ホーム・ポータル以外の)ポータルに関連する値を返します。たとえば、#{spaceContext.space}という式は、現在のポータルの名前を返します。

関連項目:

ポータルに関連するその他のEL式は、「特定のポータルに関連するEL」を参照してください。

表A-24に、「ポータル情報」カテゴリで使用できる組込みEL式と、返される値のタイプの例を示します。

注意:

表A-24に示されているEL式は、ホーム・ポータル以外のポータルのコンテキストでのみ使用してください。

表A-24 「ポータル情報」の組込みEL式

オプション

式

戻り値の例

NamedPortal

#{spaceContext.space['portalName']}

oracle.webcenter.spaces.internal.model.SpaceImpl@15fc839

CurrentPortal

#{spaceContext.currentSpace}

oracle.webcenter.spaces.internal.model.SpaceImpl@d5e197

CurrentPortal名

#{spaceContext.currentSpaceName}

standards

NamedPortalメタデータ・パス

#{spaceContext.space['portalName'].metadataPath}

/oracle/webcenter/space/metadata/spaces/portalName/space.xml

CurrentPortalメタデータ・パス

#{spaceContext.currentSpace.metadataPath}

/oracle/webcenter/space/metadata/spaces/standards/space.xml

NamedPortalメタデータ

#{spaceContext.space['portalName'].metadata}

oracle.webcenter.spaces.beans.SpaceMetadataImpl@1d7320a

CurrentPortalメタデータ

#{spaceContext.currentSpace.metadata}

oracle.webcenter.spaces.beans.SpaceMetadataImpl@1096c64

NamedPortalメタデータ表示名

#{spaceContext.space['portalName'].metadata.displayName}

Standards

CurrentPortalメタデータ表示名

#{spaceContext.currentSpace.GSMetadata.displayName}

Sales

NamedPortalメタデータ・アイコン

#{WCPrepareImageURL[spaceContext.space['portalName'].metadata.icon]['']}

/webcenter-spaces-resources/oracle/webcenter/space/metadata/spacetemplate/PortalSite/images/portal_icon.png

CurrentPortalメタデータ・アイコン

#{WCPrepareImageURL[spaceContext.currentSpace.metadata.icon]['']}

/webcenter-spaces-resources/oracle/webcenter/space/metadata/spaces/Test_Space/images/wc_prj_icon.png

NamedPortalメタデータ説明

#{spaceContext.space['portalName'].metadata.description}

Central point for all standards, templates, and stylesheets for company collateral

CurrentPortalメタデータ説明

#{spaceContext.currentSpace.GSMetadata.description}

Sales Force Team Site

NamedPortalメタデータ作成日

#{spaceContext.space['portalName'].metadata.creationDate}

java.util.GregorianCalendar[time=1290103432242,areFieldsSet=true,areAllFieldsSet=false,lenient=false,zone=java.util.SimpleTimeZone[id=,offset=-28800000,dstSavings=3600000,useDaylight=false,startYear=0,
startMode=0,startMonth=0,startDay=0,startDayOfWeek=0,startTime=0,startTimeMode=0,endMode=0,endMonth=0,endDay=0,endDayOfWeek=0,endTime=0,endTimeMode=0],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,
YEAR=2010,MONTH=10,WEEK_OF_YEAR=?,WEEK_OF_MONTH=?,DAY_OF_MONTH=18,DAY_OF_YEAR=?,DAY_OF_WEEK=?,DAY_OF_WEEK_IN_MONTH=?,AM_PM=0,HOUR=10,HOUR_OF_DAY=10,MINUTE=3,SECOND=52,MILLISECOND=242,ZONE_OFFSET=?,DST_OFFSET=?]

CurrentPortalメタデータ作成日

#{spaceContext.currentSpace.metadata.creationDate}

java.util.GregorianCalendar[time=1290103432242,areFieldsSet=true,areAllFieldsSet=false,lenient=false,zone=java.util.SimpleTimeZone[id=,offset=-28800000,dstSavings=3600000,useDaylight=false,startYear=0,
startMode=0,startMonth=0,startDay=0,startDayOfWeek=0,startTime=0,startTimeMode=0,endMode=0,endMonth=0,endDay=0,endDayOfWeek=0,endTime=0,endTimeMode=0],firstDayOfWeek=1,minimalDaysInFirstWeek=1,ERA=1,YEAR=2010,MONTH=10,
WEEK_OF_YEAR=?,WEEK_OF_MONTH=?,DAY_OF_MONTH=18,DAY_OF_YEAR=?,DAY_OF_WEEK=?,DAY_OF_WEEK_IN_MONTH=?,AM_PM=0,HOUR=10,HOUR_OF_DAY=10,MINUTE=3,SECOND=52,MILLISECOND=242,ZONE_OFFSET=?,DST_OFFSET=?]

NamedPortalメタデータ作成者

#{spaceContext.space['portalName'].metadata.createdBy}

j.doe

NamedPortalメタデータ・キーワード

#{spaceContext.space['portalName'].metadata.keywords}

standards templates style sheets collateral

CurrentPortalメタデータ・キーワード

#{spaceContext.currentSpace.metadata.keywords}

sales salesReports salesNews salesTeam

NamedPortalメタデータ・オフライン

#{spaceContext.space['portalName'].metadata.offline}

指定されたポータルがオフラインかどうかによって、falseまたはtrue

CurrentPortalメタデータ・オフライン

#{spaceContext.currentSpace.metadata.offline}

現在のポータルがオフラインかどうかによって、falseまたはtrue

NamedPortalメタデータ・クローズ

#{spaceContext.space['portalName'].metadata.offline}

指定されたポータルが閉じているかどうかによって、falseまたはtrue

CurrentPortalメタデータ・クローズ

#{spaceContext.currentSpace.metadata.closed}

現在のポータルが閉じているかどうかによって、falseまたはtrue

NamedPortalメタデータ自己登録

#{spaceContext.space['portalName'].metadata.selfRegistration}

指定されたポータルで自己登録が有効かどうかによって、falseまたはtrue

CurrentPortalメタデータ自己登録

#{spaceContext.currentSpace.metadata.selfRegistration}

現在のポータルで自己登録が有効かどうかによって、falseまたはtrue

NamedPortalメタデータ検出可能

#{spaceContext.space['portalName'].metadata.discoverable}

指定されたポータルが検出可能かどうかによって、falseまたはtrue

CurrentPortalメタデータ検出可能

#{spaceContext.currentSpace.metadata.discoverable}

現在のポータルが検出可能かどうかによって、falseまたはtrue

NamedPortalメタデータ公開RSS

#{spaceContext.space['portalName'].metadata.publishRSS}

指定されたポータルがRSSリーダーで公開可能どうかによって、falseまたはtrue

CurrentPortalメタデータ公開RSS

#{spaceContext.currentSpace.metadata.publishRSS}

現在のポータルがRSSリーダーで公開可能どうかによって、falseまたはtrue

NamedPortal配信リスト

#{spaceContext.space['portalName'].distributionList}

standardsGroup@myCompany.com

CurrentPortal配信リスト

#{spaceContext.currentSpace.distributionList}

salesTeam@myCompany.com

NamedPortalメタデータ・カスタム属性

#{spaceContext.space['portalName'].metadata.customAttributes['attributeName']}

名前付きカスタム属性に入力される値が返されます

注意: このELを使用してWebCenter Portal Administrationでフィールドに値を入力する場合、「テスト」ボタンをクリックすると空白値が戻される可能性があります。ただし、実行中のポータルでは値は適切に解決されます。

CurrentPortalメタデータ・カスタム属性

#{spaceContext.currentSpace.metadata.customAttributes['attributeName']}

名前付きカスタム属性に入力される値が返されます

注意: このELを使用してWebCenter Portal Administrationでフィールドに値を入力する場合、「テスト」ボタンをクリックすると空白値が戻される可能性があります。ただし、実行中のポータルでは値は適切に解決されます。

CurrentPortalメタデータ・ロゴ

#{WCPrepareImageURL[spaceContext.currentSpace.metadata.logo]['']}

/webcenter-spaces-resources/oracle/webcenter/space/metadata/spacetemplate/PortalSite/images/portal_logo.png

CurrentPortalロール - ポータル・マネージャ

#{WCSecurityContext.userInScopedRole['Moderator']}

現在のスコープ内のいずれかのユーザーにPortal Managerロールが割り当てられているかどうかによって、falseまたはtrue

CurrentPortalロール - 参加者

#{WCSecurityContext.userInScopedRole['Participant']}

現在のスコープ内のいずれかのユーザーにParticipantロールが割り当てられているかどうかによって、falseまたはtrue

CurrentPortalロール - 閲覧者

#{WCSecurityContext.userInScopedRole['Viewer']}

現在のスコープ内のいずれかのユーザーにViewerロールが割り当てられているかどうかによって、falseまたはtrue

CurrentPortalロール - カスタム

#{WCSecurityContext.userInScopedRole['CustomRole']}

現在のスコープ内のいずれかのユーザーに名前付きカスタム・ロールが割り当てられているかどうかによって、falseまたはtrue

NamedPortal子

#{spaceContext.space['portalName'].children}

[oracle.webcenter.spaces.internal.model.SpaceImpl@5705f4, oracle.webcenter.spaces.internal.model.SpaceImpl@147d658]

注意: 角カッコ([])はセットを示します。

CurrentPortal子

#{spaceContext.currentSpace.children}

[oracle.webcenter.spaces.internal.model.SpaceImpl@5705f4, oracle.webcenter.spaces.internal.model.SpaceImpl@147d658]

注意: 角カッコ([])はセットを示します。

NamedPortal親

#{spaceContext.space['portalName'].parent}

oracle.webcenter.spaces.internal.model.SpaceImpl@15fc839

CurrentPortal親

#{spaceContext.currentSpace.parent}

oracle.webcenter.spaces.internal.model.SpaceImpl@15fc839

NamedPortalセキュリティ親

#{spaceContext.space['portalName'].securityParent}

oracle.webcenter.spaces.internal.model.SpaceImpl@1392793

CurrentPortalセキュリティ親

#{spaceContext.currentSpace.securityParent}

oracle.webcenter.spaces.internal.model.SpaceImpl@1392793

すべての表示可能なルート・レベル・スペース

#{spaceContext.spacesQuery.unionOf['ALL_QUERIABLE,DISCOVERABLE,PUBLIC_ACCESSIBLE,ALLUSER_ACCESSIBLE,USER_JOINED,USER_MODERATED'].shape['ROOT_LEVEL']}

oracle.webcenter.spaces.query.SpacesQueryParameters@ae34c8

指定された親ポータルGUIDのすべての子孫ポータル

#{spaceContext.spacesQuery.parentSpaceGuid['portalGuid'].shape['RECURSIVE_FLATTENED']}

oracle.webcenter.spaces.query.SpacesQueryParameters@4da22f

指定された親ポータル名の直近のサブ・ポータル

#{spaceContext.spacesQuery.parentSpaceName['portalGuid'].shape['ROOT_LEVEL']}

oracle.webcenter.spaces.query.SpacesQueryParameters@1089971

指定されたポータル名に一致するポータルのリスト

#{spaceContext.spacesQuery.containingNames['portal1, portal2,portal3']}

oracle.webcenter.spaces.query.SpacesQueryParameters@68e467

指定されたポータルGUIDに一致するポータルのリスト

#{spaceContext.spacesQuery.containingGuids['portalGuid1, portalGuid2']}

oracle.webcenter.spaces.query.SpacesQueryParameters@1c56009

基準に基づいてソートされたポータルのリスト

#{spaceContext.spacesQuery.unionOf.ALL_QUERIABLE.sort['sp.lastUpdateDate']['desc']}

oracle.webcenter.spaces.query.SpacesQueryParameters@6c3def

検索パターンに基づいたポータルのリスト

#{spaceContext.spacesQuery.unionOf.ALL_QUERIABLE.search['searchKeyword']}

oracle.webcenter.spaces.query.SpacesQueryParameters@19b2cf3

ページ・サイズが制限されたポータルのリスト

#{spaceContext.spacesQuery.unionOf.USER_JOINED.itemsPerPage[n].pageNumber[n]}

oracle.webcenter.spaces.query.SpacesQueryParameters@4f8818

WHERE句に一致するポータルのリスト

#{spaceContext.spacesQuery.unionOf.USER_JOINED.where[wCond['sp.createdBy']['=']['userName']]}

oracle.webcenter.spaces.query.SpacesQueryParameters@1ba816d

A.19.6 ポータル・ページ情報の組込みパス

「ポータル・ページ情報」での選択内容は、EL式ではなく、様々なアプリケーション・ページへのディレクトリ・パスです。たとえば、これらを使用して、指定されたページへのナビゲーション情報を設定したりします。

表A-25に、「ポータル・ページ情報」カテゴリで使用できる組込みディレクトリ・パスと、返される値のタイプの例を示します。ドロップダウン・リスト内の値の数は、ユーザーが使用するテンプレートや作成するページによって異なります。

表A-25 「ポータル・ページ情報」の組込みパス

オプション

パス

宛先

PortalSiteHome.jspx

/faces/oracle/webcenter/page/scopedMD/se2dff4fb_202a_4f4c_b56d_c7cf59ad1c04/PortalSiteHome.jspx

現在のポータルのホーム・ページへのパス

GroupSpaceDocLibMainView.jspx

/faces/oracle/webcenter/page/scopedMD/s8bba98ff_4cbb_40b8_beee_296c916a23ed/businessRolePages/GroupSpaceDocLibMainView.jspx

現在のポータルの「ドキュメント」ページへのパス

ForumMainView.jspx

/faces/oracle/webcenter/page/scopedMD/s8bba98ff_4cbb_40b8_beee_296c916a23ed/businessRolePages/ForumMainView.jspx

現在のポータルの「ディスカッション」ページへのパス

AnnouncementsMainView.jspx

/faces/oracle/webcenter/page/scopedMD/s8bba98ff_4cbb_40b8_beee_296c916a23ed/businessRolePages/AnnouncementsMainView.jspx

現在のポータルの「お知らせ」ページへのパス

ListsMainView.jspx

/faces/oracle/webcenter/page/scopedMD/s8bba98ff_4cbb_40b8_beee_296c916a23ed/businessRolePages/ListsMainView.jspx

現在のポータルの「リスト」ページへのパス

EventsMainView.jspx

/faces/oracle/webcenter/page/scopedMD/s8bba98ff_4cbb_40b8_beee_296c916a23ed/businessRolePages/EventsMainView.jspx

現在のポータルの「イベント」ページへのパス

GroupSpaceActivityStreamMainView.jspx

/faces/oracle/webcenter/page/scopedMD/s8bba98ff_4cbb_40b8_beee_296c916a23ed/businessRolePages/GroupSpaceActivityStreamMainView.jspx

現在のポータルの「アクティビティ・ストリーム」ページへのパス

A.19.7 システムの組込みEL

システムの組込みEL式は、現在のユーザーのユーザー名や現在のユーザーの指定されたロケールなど、システム設定に関連する値を返します。たとえば、#{securityContext.userName}という式は、現在ログインしているユーザーの名前を返します。たとえば、ユーザーj.doeがこの式の使用されているページを表示すると、j.doeのビューでの戻り値はj.doeになります。ユーザーj.smithが同じページを表示すると、j.smithのビューでの戻り値はj.smithになります。

関連項目:

その他の実用的なEL式の詳細は、「実用的なEL式」を参照してください。

表A-26に、「システム」カテゴリで使用できる組込みEL式と、返される値のタイプの例を示します。

表A-26 「システム」の組込みEL式

オプション

式

戻り値の例

ユーザー

#{securityContext.userName}

現在のユーザーのユーザー名

ロケール

#{facesContext.externalContext.requestLocale}

現在のユーザーの指定されたロケール

これは、アプリケーション、ポータルレベルの設定、ユーザー・プリファレンスのいずれか優先度の高いものから取得されます。

例:

en_US

A.19.8 ユーザー情報の組込みEL

ユーザー情報の組込みEL式は、特定のユーザーのプロファイルに関連する値を返します。たとえば、#{webCenterProfile[securityContext.userName].description}という式は、現在のユーザーのプロファイルの「自己紹介」属性のコンテンツを返します。

関連項目:

ユーザーに関連するその他の式は、「ピープル・コネクションに関連するEL」を参照してください。

表A-27に、「ユーザー情報」カテゴリで使用できる組込みEL式と、返される値のタイプの例を示します。

表A-27 「ユーザー情報」の組込みEL式

オプション

式

戻り値の例

自己紹介

#{webCenterProfile[securityContext.userName].description}

現在のユーザーのプロファイルの「自己紹介」属性のコンテンツを返します

ユーザー名

#{webCenterProfile[securityContext.userName].userName}

現在のユーザーのプロファイルで指定されたユーザー名

名

#{webCenterProfile[securityContext.userName].firstName}

現在のユーザーの名。

ミドル・ネーム

#{webCenterProfile[securityContext.userName].middleName}

現在のユーザーのミドルネーム。

姓

#{webCenterProfile[securityContext.userName].lastName}

現在のユーザーの姓

使用されるイニシャル

#{webCenterProfile[securityContext.userName].initials}

現在のユーザーのイニシャル。

表示名

#{webCenterProfile[securityContext.userName].displayName}

現在のユーザーの表示名。

電子メール

#{webCenterProfile[securityContext.userName].businessEmail}

現在のユーザーの業務用電子メール・アドレス。

部門

#{webCenterProfile[securityContext.userName].department}

現在のユーザーの部門

役職/職種

#{webCenterProfile[securityContext.userName].title}

現在のユーザーの役職または職種

マネージャ

#{webCenterProfile[securityContext.userName].managerDisplayName}

現在のユーザーのマネージャの表示名

タイムゾーン

#{webCenterProfile[securityContext.userName].timeZone}

現在のユーザーに関連付けられたタイムゾーン

従業員タイプ

#{webCenterProfile[securityContext.userName].employeeType}

現在のユーザーの従業員タイプ

従業員番号

#{webCenterProfile[securityContext.userName].employeeNumber}

現在のユーザーの社員番号。

優先言語コード

#{webCenterProfile[securityContext.userName].preferredLanguage}

現在のユーザーの優先言語。

組織

#{webCenterProfile[securityContext.userName].organization}

現在のユーザーが所属する会社組織

組織単位

#{webCenterProfile[securityContext.userName].organizationalUnit}

現在のユーザーが所属する会社組織の単位

専門

#{webCenterProfile[securityContext.userName].expertise}

現在のユーザーの専門(例: Application、system、database administration)

勤務先FAX

#{webCenterProfile[securityContext.userName].businessFax}

現在のユーザーの業務用FAX番号。

勤務先携帯電話番号

#{webCenterProfile[securityContext.userName].businessMobile}

現在のユーザーの勤務先の携帯電話番号

勤務先電話番号

#{webCenterProfile[securityContext.userName].businessPhone}

現在のユーザーの勤務先電話番号

勤務先ページャ番号

#{webCenterProfile[securityContext.userName].businessPager}

現在のユーザーの業務用ページャの番号。

勤務先番地

#{webCenterProfile[securityContext.userName].businessStreet}

現在のユーザーの勤務先の住所

勤務先市区町村

#{webCenterProfile[securityContext.userName].businessCity}

現在のユーザーの勤務先がある市区町村

勤務先都道府県

#{webCenterProfile[securityContext.userName].businessState}

現在のユーザーの勤務先がある都道府県

勤務先私書箱

#{webCenterProfile[securityContext.userName].businessPOBox}

現在のユーザーの勤務先の私書箱番号

勤務先郵便番号

#{webCenterProfile[securityContext.userName].businessPostalCode}

現在のユーザーの勤務先の郵便番号

勤務先国

#{webCenterProfile[securityContext.userName].businessCountry}

現在のユーザーの勤務先がある国

自宅の住所

#{webCenterProfile[securityContext.userName].homeAddress}

現在のユーザーの自宅住所

自宅電話番号

#{webCenterProfile[securityContext.userName].homePhone}

現在のユーザーの自宅の電話番号。

生年月日

#{webCenterProfile[securityContext.userName].dateofBirth}

現在のユーザーの生年月日

旧姓

#{webCenterProfile[securityContext.userName].maidenName}

現在のユーザーの旧姓

入社日

#{webCenterProfile[securityContext.userName].dateofHire}

現在のユーザーの入社日

名前接尾辞

#{webCenterProfile[securityContext.userName].nameSuffix}

現在のユーザーの名前に追加される役職や資格(例: MD、Esqなど)

ワイヤレス・アカウント番号

#{webCenterProfile[securityContext.userName].wirelessAcctNumber}

現在のユーザーのワイヤレス・インターネット・アカウントのアカウント番号

A.19.9 WebCenterイベントの組込みEL

WebCenterイベントの組込みEL式は、ドキュメント関連のイベントに関する値を返します(選択されているドキュメント、ドキュメントの作成者、ドキュメントが最後に変更された日付など)。たとえば、#{wcEventContext.events.WebCenterResourceSelected.name}という式は、現在選択されているドキュメントの名前を返します。

表A-28に、「WebCenterイベント」カテゴリで使用できる組込みEL式と、返される値のタイプの例を示します。

表A-28 「WebCenterイベント」の組込みEL式

オプション

式

戻り値の例

選択したユーザー名

#{wcEventContext.events.WebCenterUserSelected.UserName}

現在選択されているユーザーのユーザー名

選択したドキュメント名

#{wcEventContext.events.WebCenterResourceSelected.name}

現在選択されているドキュメントの名前

選択したドキュメント作成者

#{wcEventContext.events.WebCenterResourceSelected.createdBy}

現在選択されているドキュメントの作成者の名前

選択したドキュメント最終変更者

#{wcEventContext.events.WebCenterResourceSelected.lastModifiedBy}

選択されているドキュメントが最後に変更された日付

A.20 ポータル問合せでの自由形式のJPQL WHERE句およびSORT句の非サポート

JPQL WHERE句に基づいてポータルを問い合せるためにEL式を使用していた場合、WebCenter Portalでは、自由形式のJPQL WHERE句がサポートされないことを認識する必要があります。かわりに、構造化されたWHERE句を使用します。自由形式のSORT句もサポートされません。かわりに、構造化された方法でポータル問合せのソート基準を指定します。

たとえば、ポータル問合せに対してWHERE句を形成するために、次の構文を使用していたとします。

#{spaceContext.spacesQuery.unionOf['ALL_QUERIABLE'].whereClause['sp.keywords like \'forquery%\' and not
(sp.discoverable is null or sp.discoverable =\'N\')'].listSpaces}

これからは、WHERE句を形成するには、次の構文を使用する必要があります。

#{spaceContext.spacesQuery.unionOf['ALL_QUERIABLE'].where[wCond['sp.keywords']['like']['forquery']['and'][wCond['sp.discoverable']
['is']['null']['or'][wCond['sp.discoverable']['=']['N']]['not']]].listSpaces}

説明:

- wCondはアトミック条件で、wCond[p][op][v]と表すことができます。
説明:

- pはポータル属性です(WcSpaceHeaderのフィールド。下記の箇条書きリストを参照)。

- opは、JPQL比較演算子の制限されたセット('=', 'like', '!=', '<', '>', '<=', '>=', 'is')のいずれかです。

- vは、演算子opによって解釈が決まる文字列です。
この演算子がisの場合、vには文字列'null'または'not null'を設定でき、JPQLでそれぞれnullまたは非nullであることをチェックされる属性として、条件が認識されます。この演算子がそれ以外である場合、vはリテラルとして解釈され、条件はリテラル値と比較される属性として認識されます。

WHERE句では、次のようなWcSpaceHeaderで定義されるフィールドのいずれかを使用できます。

- closed

- createDate

- createdBy

- description

- discoverable

- displayName

- keywords

- icon

- logo

- lastUpdateDate

- selfSubEnabled

- rssEnabled

- spaceGuid

- spaceId

- spaceOffline

- spacePublic

- spacesType

- spacesUser

- updatedBy

- version

- parentGuid

- securityParentGuid

- ancestorPath

- seeded

- groupSpaceMemCount

- spは、ポータルWcSpaceHeaderのJPAエンティティを表しています。
たとえば、ユーザー名がmontyで始まり、自己サブスクリプションが有効になっているユーザーによって作成されたすべてのポータルに対するフィルタを作成するには、次の条件を使用できます。

sp.createdBy like 'monty%' and not (sp.selfSubEnabled is null or sp.selfSubEnabled ='N')

- and、or、not (wCondとともに使用)は、条件のタイプです。
説明:

- andは、2つの条件の論理積を表します。論理積の条件は、cond1['and'][cond2]と表すことができます。ここで、cond1とcond2は、結合する2つの条件を表す式です。

- orは、分離条件を表します。分離条件は、cond1['or'][cond2]と表すことができます。ここで、cond1とcond2は、分離する2つの条件を表す式です。

- notは、否定条件を表します。否定条件は、cond['not']と表すことができます。ここで、condは、結合する条件を表す式です。

たとえば、次のELは、ユーザー名がmontyで始まり、自己サブスクリプションが有効になっているユーザーによって作成されたすべてのポータル(現在のユーザーがアクセス可能なポータル)のリストを返します。

#{spaceContext.spacesQuery.unionOf.ALL_QUERIABLE.where[wCond['sp.createdBy']
['like']['monty%'] ['and'] [wCond['sp.selfSubEnabled']['is']['null'] ['or'] [wCond['sp.selfSubEnabled']['=']['N']] ['not'] ]].listSpaces}

次に、ポータル問合せに対してSORT条件を指定するために、次の構文を使用していたとします。

#{spaceContext.spacesQuery.unionOf['ALL_QUERIABLE'].sortCriteria
['sp.discoverabledesc, sp.keywords'].listSpaces}

これからは、ポータル問合せに対してSORT条件を指定するには、次の構文を使用する必要があります。

#{spaceContext.spacesQuery.unionOf['ALL_QUERIABLE'].sort['sp.discoverable']
['desc'].sort['sp.keywords']['asc'].listSpaces}

説明:

- spは、ポータルWcSpaceHeaderのJPAエンティティを表しています(WcSpaceHeaderで定義されるフィールドは、前述の箇条書きリストを参照)。

- descとascは、それぞれ降順と昇順のソート順序を定義します。

たとえば、次の問合せは、ユーザーがアクセス可能なポータルのリストを返し、フィールドdiscoverableおよびlastUpdateDateを基準に結果セットをソートします。

#{spaceContext.spacesQuery.unionOf['ALL_QUERIABLE'].sort['sp.discoverable']
['asc'].sort['sp.lastUpdateDate']['desc'].listSpaces}

Oracleでは、既存の自由形式のJPQL WHERE句とSORT句をすべて新しい構文に変換することを強くお薦めします。

なんらかの理由で既存の構文を維持する必要がある場合は、WebCenter Portal管理者が、webcenter-config.xml.xmlファイル内で次のグローバル・フラグを設定することで、自由形式のJPQLに対するサポートを明示的に有効にする必要があります。

oracle.webcenter.spaces.query.DIRECT_JPQL_CLAUSE_SUPPORTED

注意:

webcenter-config.xml.xmlファイルは、webcenter-config.xmlのカスタマイズ・ドキュメントです。

従来の自由形式のWHERE句とSORT句のサポートを継続するには、このフラグをtrueに設定します。このオプションをtrueに設定すると、WebCenter Portalログ・ファイルには警告が格納されます。

webcenter-config.xml.xmlでこのフラグを設定するには:

1. MDSから最新のwebcenter-config.xml.xmlをエクスポートします。
例:

exportMetadata(application='webcenter', server='WC_Portal', toLocation='/tmp/mydata',docs='/oracle/webcenter/webcenterapp/metadata/mdssys/cust/site/webcenter/webcenter-config.xml.xml')

2. テキスト・エディタでファイルを開き、必要に応じて設定を変更します。
次に例を示します。

<mds:insert parent="webcenter(xmlns(webcenter=http://
xmlns.oracle.com/webcenter/webcenterapp))/webcenter:custom-attributes"
position="last">      <attribute name=
"oracle.webcenter.spaces.query.DIRECT_JPQL_CLAUSE_SUPPORTED"
xmlns="http://xmlns.oracle.com/webcenter/webcenterapp">
<description/>
<type>java.lang.String</type>
<value>true</value>
<visible/>
</attribute>
</mds:insert>

3. webcenter-config.xml.xmlを保存して閉じます。

4. 更新後のwebcenter-config.xml.xmlファイルをWebCenter Portalにインポートします。
次に例を示します。

importMetadata(application='webcenter', server='WC_Portal', fromLocation='/tmp/mydata', docs='/oracle/webcenter/webcenterapp/metadata/mdssys/cust/site/webcenter/webcenter-config.xml.xml')

B WebCenter Portalのアクセシビリティ機能

この付録では、WebCenter Portalのアクセシビリティ機能について説明します。

アクセシビリティとは、視覚や聴覚など、身体的に制限のあるユーザーがアプリケーションを使用できるようにすることです。わかりやすく表現すると、マウスなしで(キーボードのみで)使用できるアプリケーション、視覚障害者に向けたスクリーン・リーダーを使用できるアプリケーション、さらに音声、色彩、またはアニメーションやタイミングに頼らないアプリケーションを作成するということです。

Oracleソフトウェアは、http://www.oracle.com/accessibility/standards.htmlの標準の解釈を使用して、Section 508およびWCAG 1.0 AAの標準を実装しています。

この項では、WebCenter Portalに固有のアクセシビリティ機能について説明します。アクセス可能なADF Facesページの作成の一般的な情報は、『Oracle Fusion Middleware Oracle ADF FacesによるWebユーザー・インタフェースの開発』のアクセス可能なADF Facesコンポーネントおよびページの開発に関する項を参照してください。JDeveloperのアクセシビリティ機能の詳細は、オンライン・ヘルプの目次から「JDeveloperの基本」のJDeveloperのアクセシビリティ・ノードに関する項を選択します。

この付録の内容は次のとおりです。

- アクセス可能なHTMLの生成

- 実行時のアクセシビリティ機能

- ポートレットのアクセシビリティの考慮事項

B.1 アクセス可能なHTMLの生成

WebCenter Portalには、アプリケーション・ページに追加することで、実行時にページを編集できるようにする、いくつかのコンポーザ・コンポーネントが用意されています。これらのコンポーネントには、アクセス可能なHTMLを生成するために使用する属性があります。作成するページをアクセス可能にするには、表B-1に示す属性を設定する必要があります。

表B-1 WebCenter Portalのコンポーザ・コンポーネントのアクセシビリティ属性

コンポーネント

アクセシビリティ属性

pe:changeModeButton

アクセシビリティ属性はありません。

pe:changeModeLink

アクセシビリティ属性はありません。

pe:imageLink

shortDesc - 必須。この属性は、HTMLのalt属性に変換されます。

accessKey - オプション。この属性は、コンポーネントに簡単にアクセスするために使用するニーモニック文字を設定します。

pe:pageCustomizable

アクセシビリティ属性はありません。

pe:layoutCustomizable

shortDesc - 必須。この属性は、HTMLのalt属性に変換されます。

accessKey - オプション。この属性は、コンポーネントに簡単にアクセスするために使用するニーモニック文字を設定します。

cust:panelCustomizable

アクセシビリティ属性はありません。

cust:showDetailFrame

shortDesc - 必須。この属性は、HTMLのalt属性に変換されます。

B.2 実行時のアクセシビリティ機能

ユーザーが実行時にページをカスタマイズできるようにする場合、すべてのユーザーがどのカスタマイズにもアクセスできるようにする必要があります。ユーザーが実行時に作成できるすべてのコンポーネントでは、アクセシビリティ関連のすべての属性がプロパティ・インスペクタに表示され、ここでユーザーは属性を適宜設定できます。

WebCenter Portalコンポーネントに対するアクセシビリティ関連の属性のリストは、表B-1を参照してください。その他のコンポーネントのアクセシビリティ関連の属性のリストは、『Oracle Fusion Middleware Oracle ADF FacesによるWebユーザー・インタフェースの開発』のアクセス可能なADF Facesコンポーネントおよびページの開発に関する項を参照してください。

B.3 ポートレットのアクセシビリティの考慮事項

IFrameは、現在のスクリーン・リーダーでは十分に対応していないため、一部のアクセシビリティ標準では許可されていません。

注意:

Oracle JSF Portlet Bridgeを使用して作成されたポートレットは、JavaScriptの問題により、Oracle ADFページに直接レンダリングするには複雑すぎるため、requireIFrameコンテナ・ランタイム・オプションはtrueに設定されます。

WebCenter Portalでは、renderPortletInIFrameという名前のadf:portletタグで、オプションの属性を提供しています。この属性をfalseに設定すると、IFrameが使用できなくなります。

window.name='GUID-1A218CB7-743A-4E74-A4E9-921F4DD09F3C' function footdisplay(footnum,footnote) { var msg = window.open('', 'NewWindow' + footnum, 'directories=no,height=120,location=no,menubar=no,resizable=yes,' + 'scrollbars=yes,status=no,toolbar=no,width=598'); msg.document.open('text/html'); }
C WebCenter Portal REST APIの使用

この章のトピックは、次のとおりです:

- RESTの概要

- ユーザー名ベースのセキュリティ・トークンの暗号化の理解

- RESTを使用するメリット

- WebCenter Portal REST APIの概要

- リンク・モデルの理解

- itemsハイパーメディアの理解

- HTTPを使用したハイパーメディアのナビゲーション

- WebCenter Portal REST APIのセキュリティに関する考慮事項

- CMIS REST APIのセキュリティに関する考慮事項

- 共通タイプの理解

- キャッシュの管理

- プロキシ・サーバーの構成

- WebCenter Portal REST APIの例

- ピープル・コネクションREST APIの使用

- コンテンツ管理REST API

- イベントREST APIの使用

- タグREST APIの使用

- ディスカッションREST APIの使用

- リストREST APIの使用

- アクティビティ・グラフREST APIの使用

- 検索REST APIの使用

C.1 RESTの概要

REST (REpresentational State Transfer)は、分散されたリソースを共通のインタフェースを介して利用できるようにするためのアーキテクチャ・スタイルです。この共通のインタフェースには、Uniform Resource Identifier (URI)、明確に定義された操作、ハイパーメディア・リンクおよび一連の制約付きメディア・タイプなどがあります。通常、これらの操作には読取り、書込み、編集および削除が含まれ、メディア・タイプにはJSONおよびXML/ATOMが含まれます。

RESTコマンドでは、リクエストとして標準HTTPメソッドを使用して、使用するリソースを指定します。すべてのリクエストは、操作のステータスを含むレスポンスを返します。リクエストによりオブジェクトが取得、作成または更新されると、レスポンスにはそのオブジェクトの標準表現が格納されます。

RESTは、クライアント・マシンからもその他のサーバーからも複数のクライアントをサポートし、どのクライアントまたは開発テクノロジ(Java、JavaScript、Ruby on Rails、PHP、.Netなど)からも使用できます。

ヒント:

RESTの概要を理解するには、WikipediaのRepresentational State Transferに関する記事(http://en.wikipedia.org/wiki/Representational_State_Transfer)を参照してください。

RESTは、通常、クライアント側でスクリプトされ、サーバー側アプリケーションからのデータをやり取りする機能が必要なリッチ・インターネット・アプリケーション(RIA)で使用されます。たとえば、WebCenter iPhone AppではWebCenter Portal REST APIを使用して、WebCenter Portalアプリケーションとやり取りします。ネイティブのiPhoneクライアントはObjective-Cで作成されており、REST APIにより、クライアントはアプリケーション・データを送信および取得できます。

C.2 ユーザー名ベースのセキュリティ・トークンの暗号化の理解

セキュリティを向上するために、すべてのURIには、hrefとtemplateのどちらの属性でも、認証ユーザー名に基づくセキュリティ・トークン・パラメータ(utoken)が含まれています。

セキュリティ生成アルゴリズムは、ユーザー名とともにランダムに生成されたsaltを使用します。saltにより、暗号化で使用したパラメータのセキュリティが侵害されても、既存のトークンを無効化し、新しいトークンを生成できます。最も重要なことは、ユーザー・トークンの生成アルゴリズムの一部としてユーザー名が使用されているため、セキュリティ侵害の発生時に、saltにより、すべてのユーザー名を変更しなくて済むことです。

saltは、マップo.webcenter.jf.csf.map内の資格証明ストア・フレームワーク(CSF)にキーuser.token.saltに対して格納されます。このキー(およびトークンの暗号化で使用した他のキー)の値は、Oracle Enterprise ManagerでCSFにアクセスすることによって変更できます。

注意:

暗号化キーの値を変更すると、ユーザー名ベースの既存のすべてのセキュリティ・トークンがただちに無効になります。アルゴリズムのパラメータがセキュリティ侵害された場合など、特別な事情がある場合のみ、これらの値を変更します。

C.3 RESTを使用するメリット

RESTおよびRESTfulスタイルのソフトウェア・アーキテクチャのメリットについて、多くの優れた記事が公開されています。このようなメリットの一部を、次に示します。

- Hypermedia As The Engine Of Application State (HATEOAS)リンクを使用したREST APIへのアクセスは、APIの堅牢性の向上に役立ちます。クライアントはサーバーから返されるURIのみを使用するため、サーバーがURIの形式を変更しても、クライアントは引き続き正しく動作します。「リンク・モデルの理解」も参照してください。

- 標準のHTTPプロトコルの使用により、ネットワーク・インフラストラクチャは必要に応じてRESTリクエストをキャッシュでき、クライアントとサーバーの両方の負荷が低減されます。「キャッシュの管理」も参照してください。

- ステートレスなRESTリクエストにより、各リクエストは任意の数の異なるサーバーによって処理され、スケーラビリティに役立ちます。

- 標準のHTTPプロトコルの使用により、多様なクライアントが、特殊なライブラリを必要とすることなく、REST APIを操作できます。

C.4 WebCenter Portal REST APIの概要

モバイル・アクセスの有効化に加え、WebCenter Portal REST APIを使用すると、Ajax、JavaScript、JSONなどのWeb 2.0テクノロジを使用して、操作性が高いブラウザベースの対話型ユーザー・インタフェースを作成したり、WebCenter Portalのデータにアクセスおよび変更できます。一般に、WebCenter RESTコマンドは、より自然で使いやすい、SOAPスタイルWebサービス・アプローチの代替を提供します。詳細は、Oracle WebCenter Portal用のREST APIを参照してください。

表C-1に、WebCenter Portal: Servicesの機能に対して提供されているOracle WebCenter Portal REST APIを示します。

表C-1 REST APIでサポートされるWebCenterツールとサービス機能の一覧

REST API

説明

参照先

ディスカッション

クライアントが、ディスカッション・フォーラム、トピックおよびメッセージを投稿、読取り、更新および削除できます。

「ディスカッションREST APIの使用」

リスト

クライアントが、指定されたポータルに関連付けられたすべてのリストの参照、検索条件によるリスト列の検索、新規リストの作成、リスト行の追加、更新および削除、および同様のリスト関連タスクを実行できます

「リストREST APIの使用」

ピープル・コネクション

クライアントが、プロファイル・データの表示、コネクション・リスト、フィードバックおよびメッセージの管理、ユーザー、リストおよびポータルでの新規アクティビティの作成とアクティビティの表示を実行できます。

ピープル・コネクションREST APIの使用

WebCenter Portal

クライアントが、ポータル・メタデータの取得、およびポータル・リストとリスト・アイテムの表示、作成、更新および削除を実行できます。開発者はポータル・メンバーシップ情報も取得できます。

「WebCenter Portal REST APIの概要」

コンテンツ管理

Content Management Interoperability Services (CMIS) RESTfulサーバー・バインディングを使用して、Content Management Virtual Content Repository (CM VCR)へのアクセスを提供します。

「コンテンツ管理REST API」

アクティビティ・グラフ

基になるアクティビティ・グラフ・エンジンを使用して、接続、ポータルおよびアイテムに関する推奨事項を取得できます。

「アクティビティ・グラフREST APIの使用」

イベント

指定されたポータルに関連付けられたカレンダ・イベントにアクセスできます。

「イベントREST APIの使用」

フィードバック

クライアントが、ソーシャル・ネットワーク・アプリケーションでフィードバックを作成、読取りおよび削除できます。

「リストREST APIの使用」を参照

検索

検索を投稿、確認、更新および削除します。検索のキーワードと範囲を指定できます。たとえば、iPhoneではすべてのポータル、ドキュメントおよびWikiページ内の「smith」を検索できます。

「検索REST APIの使用」

タグ

クライアントが、タグおよびタグ付けしたアイテムをポスト、読取り、更新および削除できます。

「タグREST APIの使用」

ナビゲーション

ナビゲーションREST APIを使用して、ナビゲーションを表示する独自のインタフェースを作成します。

注意: ナビゲーションREST APIは、この章に記載されているリソース索引を共有しません。

「タグREST APIの使用」

注意:

次のURNに対するXSDファイルを示します。

urn:oracle:webcenter:activities:stream -> activitystream.xsd
urn:oracle:webcenter:messageBoard -> wall.xsd
urn:oracle:webcenter:people -> people.xsd
urn:oracle:webcenter:people:invitations -> people.xsd
urn:oracle:webcenter:people:person -> people.xsd
urn:oracle:webcenter:search:results -> search.xsd
urn:oracle:webcenter:spaces -> spaces.xsd

<WCP_ORACLE_HOME>/webcenter/schemas/ディレクトリにあります。

C.5 リンク・モデルの理解

ハイパーメディアは、2つの最も成功したWebベースの形式、HTMLとATOMのコアです。HTMLとATOMを使用して、消費者は、たとえば、ニュース記事へのリンクをクリックするなどして、リンクを介して他のハイパーメディア・ドキュメントへ移動できます。

ハイパーメディアは、RESTfulアプリケーションの状態を扱います(HATEOAS: Hypermedia As The Engine Of Application Stateと呼ばれています)。

注意:

アプリケーションの状態を定義するHATEOASの例え:

お気に入りのブラウザで確定申告しているものとします。ブラウザが機能停止したときには、W-2データの入力を終え、控除へ移動したところでした。失われた状態(控除の画面にいたがまだデータを入力する必要があったという事実)は、入力したw-2データではなく、アプリケーションの状態です(つまり、現在の状態から変更された状態)。

HATEOASによって、この状態(アプリケーションの状態)が完全にハイパーメディアに取得されます。アプリケーションの状態とはアプリケーション内での場所であり、アプリケーションに入力したデータではありません。この方法のメリットの1つは、クライアントとサーバーが自分の状態を意識する必要がないため、単純化されることです。リクエストを処理するために必要なすべての状態情報がリンクに含まれるため、ブラウザが再起動してリンクに戻ったときに、ユーザーは税金プロセスの同じ場所にいます。

RESTfulサービスへの一連の最上位レベルURIエントリ・ポイントがある場合、これらのエントリ・ポイントを超えたすべてのやり取りは、レスポンス形式で返されるハイパーメディア・リンクで行われます。このリンク中心の方法により、クライアントとサーバーURLとの結付きがあまり密接にならずにすみます。クライアントはサーバーから与えられたURLを使用しているため、サーバーURLが形式を変更しても、クライアント・コードが中断することはありません。

このリンク・モデルを理解することで、サービスから返されるデータを使用したREST APIのナビゲーション方法を理解できます。

この項では、WebCenterのRESTfulサービスが使用するハイパーメディア・リンク・モデルについて説明します。次のトピックが含まれています:

- リソース索引の使用

- リンクの構造

C.5.1 リソース索引の使用

WebCenterでは、リソース索引が、すべての認証アクセスの出発点です。リソース索引によって、一連の最上位レベルURIエントリ・ポイントへのアクセスが提供されます。これによって、使用可能なすべてのWebCenter RESTfulサービスへとつながります。リソース索引URIは、理解する必要がある唯一のURIです。

ヒント:

RESTクライアントは、カスタムRESTリクエストの生成に役立ちます。たとえば、Firefox RESTClientアドオンは次の場所で入手できます。

http://restclient.net/

他の類似のRESTクライアントも容易に取得できます。

WebCenterリソース索引URIは、次のとおりです。

http://host:port/rest/api/resourceIndex

注意:

リソース索引へのアクセスには、常に認証が必要です。ただし、次のURIを使用して、(必要に応じて)CMISリソース・エントリ・ポイントに匿名でアクセスできます。

http://host:port/rest/api/cmis/repository

「CMIS REST APIのセキュリティに関する考慮事項」および「WebCenter Portal REST APIのセキュリティに関する考慮事項」も参照してください。

WebCenter Portal REST APIを使用する場合は、まず最初に、GETリクエストをリソース索引に送信します。レスポンスは、使用可能なサービスとリクエストのメディア・タイプによってそれぞれ異なります。次の例は、JavaScript(および場合によってはDojoなどのクライアント側スクリプト・ライブラリ)を使用してリソース索引のJSONデータを取得するAjaxリクエストを作成した場合のレスポンスを示しています。これは簡略化したサンプル・レスポンスであり、実際のレスポンスに実在するすべてのリンクが含まれているわけではありません。

例: リソース索引へのGETに対するレスポンス

{
"resourceType": "urn:oracle:webcenter:resourceindex",
"links": [
{
"template": "opaque-template-uri",
"resourceType": "urn:oracle:webcenter:messageBoard",
"href": "opaque-uri",
"capabilities": "urn:oracle:webcenter:read"
},
{
"resourceType": "urn:oracle:webCenter:cmis",
"href": "opaque-uri",
"capabilities": "urn:oracle:webcenter:read"
},
{
"template": "opaque-template-uri",
"resourceType": "urn:oracle:webcenter:discussions:forums",
"href": "opaque-uri",
"capabilities": "urn:oracle:webcenter:read"
},
{
"resourceType": "urn:oracle:webcenter:resourceindex",
"rel": "self",
"href": "http://host:port/rest/api/resourceIndex",
"capabilities": "urn:oracle:webcenter:read"
},
{
"template": "opaque-template-uri",
"resourceType": "urn:oracle:webcenter:activities:stream",
"href": "opaque-uri",
"capabilities": "urn:oracle:webcenter:read"
},
{
"template": "opaque-template-uri",
"resourceType": "urn:oracle:webcenter:people:person",
"capabilities": "urn:oracle:webcenter:read"
},
{
"template": "opaque-template-uri",
"resourceType": "urn:oracle:webcenter:feedback",
"href": "opaque-uri",
"capabilities": "urn:oracle:webcenter:read"
},
{
"template": "opaque-template-uri",
"resourceType": "urn:oracle:webcenter:spaces",
"href": "opaque-uri",
"capabilities": "urn:oracle:webcenter:read"
},
{
"template": "opaque-template-uri",
"resourceType": "urn:oracle:webcenter:people",
"href": "opaque-uri",
"capabilities": "urn:oracle:webcenter:read"
}
]
}

リソース索引データで返されるリンクを調べることによって、使用するリソース・タイプのURIを見つけて、個々のサービスのURIエントリ・ポイントを取得できます。目的の操作を実行できるようになるまで、ハイパーメディア内を移動し続けることが可能です。次の例は、リソース索引のJSONデータに指定されたURIを見つける方法を示しています。

例: リソース索引内の特定のサービスに対するURIの検出

/* Parse the resourceIndex to find the specified URL and
* return it.
*
* @Param jsonData the JSON data retrieved from calling
*        the /rest/api/resourceIndex URL.
* @Param strResourceType the resource type of the URL
*        you want to retrieve from the resourceIndex data.
*        E.g., 'urn:oracle:webcenter:activities:stream'
*/
function getResourceURL(jsonData, strResourceType)
{
// Using the HATEOAS model, we browse the returned links
// looking for the one with the correct resource type.
for (var i = 0; i < data.links.length; i++) {
if (data.links[i].resourceType == strResourceType) {
return data.links[i].href;
}
}
}

C.5.2 リンクの構造

ハイパーメディア・リンクのresourceType、relおよびcapabilities属性は、クライアントがURIを直接解析する必要なく、使用するURI (hrefまたはtemplate)を決定できるようにするメタデータを提供します。URIは不透明で、メタデータによって特定の環境でどのリンクが役立つかが決まります。

次の例は、それぞれXMLドキュメント・フラグメントとしてのハイパーメディア・リンクの構造とJSONドキュメント・フラグメント内のハイパーメディア・リンクの構造を示しています。

例: XMLドキュメント・フラグメント内のリンク

<links>
<link href="opaque-URI"
template="opaque-template-URI (optional)"
rel="rel-name"
title="human-readable-title (optional)"
type="media-type (optional)"
resourceType="resource-type"
capabilities="operation"/>
...repeat as needed...
</links>

例: JSONドキュメント・フラグメント内のリンク

"links": [
{
"href":"opaque-URI",
"template":"opaque-template-URI (optional)",
"rel":"rel-name",
"title":"human-readable-title (optional)",
"type":"media-type (optional)",
"resourceType":"resource-type",
"capabilities":"operation"
},
...repeat as needed...
]

複合語のフィールド名、要素名および属性名は、サービス作成者の直接管理下にない仕様に準拠する場合を除いて、キャメル・ケースで書式設定されます。頭字語は、次の各例に示すように、大文字と小文字が必要に応じて調整されて通常の単語として扱われます(fooXmlまたはxmlFooなど)。

例: XMLのネーミング規則

<myElement>text</myElement>

例: JSONのネーミング規則

{"myElement": "text"}

この項では、ハイパーメディア・リンクの様々な属性について説明します。この項の内容は、次のとおりです。

- リソース・タイプ

- リレーションシップ

- 機能

- メディア・タイプ

- テンプレート

C.5.2.1 リソース・タイプ

resourceTypeリンク属性は、リンクが指すリソースのタイプを指定します。クライアントは、resourceTypeを使用して、GETとPOSTの予期されるレスポンス本文およびPOSTとPUTの受入可能なリクエスト本文を決定する必要があります。

詳細は、「HTTPを使用したハイパーメディアのナビゲーション」を参照してください。

C.5.2.2 リレーションシップ

relリンク属性は、リンク・オブジェクトと現在のオブジェクト(リンクのリストが含まれるオブジェクト)の関係を指定します。この属性の値は、現在サポートされている次の値が空白で区切られたリストです。

- self: リンク・オブジェクトは現在のオブジェクトです

- related: リンク・オブジェクトは現在のオブジェクトに関係します

- via: リンク・オブジェクトは現在のオブジェクトの情報ソースです

- alternate: リンク・オブジェクトは現在のオブジェクトの代替です(通常、現在のオブジェクトを表示するHTMLページなど、別の形式の同じオブジェクト)

- urn:oracle:webcenter:parent: リンク・オブジェクトは現在のオブジェクトの親です。つまり、リンク・オブジェクトが現在のオブジェクトを所有します

注意:

一部のWebCenter機能のREST APIによっては、relリンク属性が追加で含まれる場合があります。詳細は、特定の各機能のREST APIに関する説明を参照してください。

C.5.2.3 機能

capabilitiesリンク属性は、リンク・リソースでサポートされるメソッドを指定します。

クライアントがそのリソースにアクセスできる場合のみ、リンクが返されます。レスポンス形式で返されるリンクでクライアントが実行できる機能は、ユーザー認証の影響を受ける可能性があります。通常、現在の認証ユーザーが実行権限を持ち、リソースがサポートしている機能のみが返されます。

リンクがない場合、クライアントはリソースにアクセスできません。リンクに機能がない場合は、クライアントに返らないため、クライアントにはそのリンクで何かを(読取りさえ)実行する権限がありません。

ハイパーメディア・リンクの機能ベース表現は、クライアントが実行できると予想される操作の範囲を明確に示します。これによって、クライアントは、関連するUIを動的に構成して、最適な全体のユーザーの操作性を提供できます。

この属性の値は、次の値が空白で区切られたリストです。

- urn:oracle:webcenter:create: HTTP動詞のPOSTにマップします

- urn:oracle:webcenter:read: HTTP動詞のGETにマップします

- urn:oracle:webcenter:update: HTTP動詞のPUTにマップします

- urn:oracle:webcenter:delete: HTTP動詞のDELETEにマップします

注意:

最上位レベルのresourceIndexリンクは、ユーザーが別の機能で認証されている場合でも、read機能のみを返します。

注意:

OPTIONSを使用して許可されたHTTP動詞のリソースを問合せると、一般にリソースがサポート可能な動詞が返され、ユーザーのアクセス権は考慮されません。リンクの機能属性は、現在のユーザーが現在のリソースに対して実行できることを正確に示します。OPTIONSは、現在のユーザーに許可されているより多くのHTTP動詞を返すことがあります。

C.5.2.4 メディア・タイプ

typeリンク属性は、リンク・オブジェクトがサポートするメディア・タイプを指定します。

CMISを除くすべてのRESTサービスは、XML (application/xml)とJSON (application/json)の両メディア・タイプをサポートします。CMISが現在サポートしているのは、ATOMのみです。CMIS REST APIの詳細は、「コンテンツ管理REST API」を参照してください。

C.5.2.5 テンプレート

templateリンク属性は、クライアントがhref URIではなくURIテンプレートを使用して、リンク・オブジェクトのパラメータ化した値を提供できることを指定します。リンクは、少なくともhrefまたはtemplate URIを含む必要がありますが、両方を含むこともできます。

一部のハイパーメディア・リンクではリクエスト問合せパラメータがサポートされており、これを使用して、クライアントは異なる方法でリンクを構成できます。クライアントがURI形式を理解し、手動でURIを作成する必要はなく、URIテンプレートが使用されます。これらのテンプレートにより、クライアント・コードでは、URIの動作を正確に理解しなくても、URIにデータを簡単に挿入できます。これによってハイパーメディアURIの不透明性が維持され、URI形式の変更からクライアントが保護されます。

次の例は、様々なリクエスト問合せパラメータを含むURIテンプレートを示しています。

例: URIテンプレート

http://host:port/.../lists?startIndex={startIndex}&itemsPerPage={itemsPerPage}&q={searchTerms}&projection={projection]

WebCenter Portal REST APIでは、多くの業界URIテンプレート・スキームに従う、単純なスロット置換構文を使用します。

たとえば、前述のテンプレートを使用して1ページ目に10リスト・アイテム(デフォルト)を表示するために、次に示すように、クライアントはstartIndexパラメータに値1を、itemsPerPageパラメータに値10を指定します。

例: パラメータ値を含むURIテンプレート

http://host:port.../lists?startIndex=1&itemsPerPage=10

注意:

テンプレートを使用可能にするには、事前に未使用のパラメータをすべて削除する必要があります。クライアントは未処理のテンプレートを、それを生成したサービスへ送信できない場合があります。送信すると、未定義の動作が生じ、一般にステータス・コード500が返されます。

クライアントは、サーバーに送信する前に、テンプレートを処理して有効なURI形式にする必要があります。クライアントは、スロット・トークンに置き換わる値を正しくURIエンコードして、スロットを適切な値に置換する必要があります。クライアントが、テンプレート内の1つ以上のスロットに対して適切な値を持たない場合は、スロット・トークンを空の文字列で置換する必要があります。

パラメータ値内の特殊文字または予約文字は、URLエンコードする必要があります。たとえば、Günterという名前の人をリストで検索するには、次に示すように、üをURLエンコードする必要があります。

例: URIテンプレート内の特殊文字のエンコード

http://host:port.../lists?q=G%FCnter

C.5.2.5.1 共通のリクエスト問合せパラメータ

多くのリソースは、共通のリクエスト問合せパラメータ・セットをサポートしています。たとえば、エンティティのコレクションを取得する場合は、結果の数量または詳細を制限することによって、結果セットの内容を変更することが一般的です。RESTフレームワークでは、次のリクエスト・パラメータを使用して結果の範囲を指定し、セキュリティを提供します。

- startIndex: 結果セットに含める、最初に一致する結果のインデックスを指定します(0-n ... 0から始まる)。これはページ区切りに使用されます。

- itemsPerPage: レスポンスで返す結果の最大数を指定します(1-n)。これはページ区切りに使用されます。

- q: 実装固有の検索を指定します。検索は次の形式で指定できます(角カッコ[]はオプション値を表します)。

[[field1:[operand]][:]value1[;field2:operand:value2]]

例:

&q=login:equals:monty
&q=title:contains:issues
&q=creator:equals:monty;description:contains:Urgent

各リソースが使用するqパラメータの形式は同じですが、検索の実装方法は、検索対象のリソースによってそれぞれ異なります。各リソースにおける検索の実装方法の詳細は、それぞれのサービスに関する項を参照してください。

- projection: 変数の再帰深度、フィールドまたは属性のフィルタリングなど、モデル表示の実装固有のプロジェクション用に予約されています。有効な値はsummaryまたはdetailsです。
たとえば、リストのコレクションに対してsummaryのプロジェクションをリクエストすると、タイトル、説明およびハイパーメディアのリンクのみが返されます。detailsのプロジェクションをリクエストすると、サーバーは、各リストの列メタデータがすべて含まれるリストのコレクションを返します。この場合、処理時間が余分にかかったり、サーバー上でデータベース問合せが必要になることがあります。

次のリクエストの例では、深いオブジェクト・グラフが含まれるレスポンス・エンティティが返されます。

http://host:port/...lists&projection=details

- data: このパラメータでは、カンマ区切りのデータ・セットおよびアイテムのリストを使用できます。このパラメータを使用して、クライアントは受け取るデータを指定できます。たとえば、モバイル・デバイス・アプリケーションは、このパラメータを使用して、返されるXMLデータの量を制限できます。projectionとdataの両方の問合せ文字列パラメータが存在する場合は、dataパラメータを使用して返すデータを決定します。データ・パラメータとして定数dataを指定すると、リソースに対してすべての標準情報が返されます。

特定のリソースでのこれらのパラメータのサポート方法の詳細は、該当サービスに関する項を参照してください。

C.6 itemsハイパーメディアの理解

レスポンスの実際のコンテンツは、itemsのコレクションで構成されています。これは、前述のlinksセクションと同じレベルです。(各レスポンス内の最上位レベル・タグを含めて)各アイテムには、リソース固有のコンテンツと形式に加えて、1つの共通属性(resourceType)があります。resourceTypeの詳細は、特定のサービスに関する項を参照してください。

C.7 HTTPを使用したハイパーメディアのナビゲーション

HTMLまたはATOMフィードで参照およびやり取りする場合と同様の方法で、RESTサービス・ハイパーメディアを移動できます。やり取りは、HTTPメソッドを使用して、リンクで識別されるリソースで行われます。RESTサービスは、レスポンス・コードおよびレスポンス本文をクライアントに返し、クライアントはレスポンス内のハイパーメディアを使用してその後のやり取りを行います。

表C-2に、不透明なリソースURIの作成時に従う一般的なパターンを示します。resourceTypeは、HTTPメソッドがリソースのコレクションで動作するのか個々のリソースで動作するのかによって異なります。

表C-2 HTTPメソッド

HTTPメソッド

リソースのコレクションの場合のレスポンス

個々のリソースの場合のレスポンス

GET

リソース・コレクションのコンテナを返します(200 HTTPレスポンス・コード)

リソースを返します(200 HTTPレスポンス・コード)

PUT

リソースのコレクションを更新できません(405 HTTPレスポンス・コード)

リソースを更新して返します(200 HTTPレスポンス・コード)

POST

コレクション内に新規リソースを作成して返します

注意: 201または204 HTTPレスポンス・コードを返します。返されるコードは、新規作成されたオブジェクトが、直接アドレス可能であるかどうかによって異なります。たとえば、アクティビティは個別にアドレスを指定できないため、204のコンテンツなしというレスポンス・コードが返されます。

個々のリソース内にリソースを作成できません(405 HTTPレスポンス・コード)

DELETE

リソースのコレクションを削除できません(405 HTTPレスポンス・コード)

リソースを削除します(204 HTTPレスポンス・コード)

コレクション・リソースでは、通常、コレクションの読取り(GET)およびそのコレクションの従属要素の作成(POST)がサポートされます。個々のリソースでは、通常、リソースの読取り(GET)、更新(PUT)および削除(DELETE)がサポートされます。

C.7.1 HTTPレスポンス・ステータス・コード

表C-3に、返される可能性があるレスポンス・ステータス・コードを示します。

表C-3 HTTPレスポンス・ステータス・コード

HTTPレスポンス・ステータス・コード

説明

200

OK。GETまたはPUTが正常終了しました。リソース表現がレスポンス本文として伴います。

201

作成されました。POSTが正常終了しました。新しく作成されたリソースのロケーション・ヘッダーを伴います。

204

コンテンツなしまたはコンテンツを返さないリクエスト。たとえば、リンクできないオブジェクトを作成する場合です。DELETEが正常終了しました。

400

不正なリクエスト。URIが不正な形式だったか、処理できませんでした。たとえば、IDが正しく形式化されていなかったか、IDがPOSTのURIに提供されていませんでした。

401

認可されていません。クライアントは、資格証明を送信して再試行できます。問題の診断に役立つフォルト・レスポンス本文を伴う場合があります。

403

禁止されています。クライアントには、リソースの作成や削除など、特定のアクションを実行できる権限がありません。同じユーザーとしての再認証は役立ちません。問題の診断に役立つフォルト・レスポンス本文を伴う場合があります。

404

見つかりません。IDで特定のリソースを参照しましたが、リソースはありません。

405

使用できないメソッドです。リクエストされたリソースで有効なメソッドのリストが含まれます。

406

受入れできません。クライアントが送信した受入れヘッダー・メディア・タイプは要求された操作でサポートされていません。問題の診断に役立つフォルト・レスポンス本文を伴う場合があります。

409

競合。おそらくリソースIDが使用中であるか、またはエンティティが更新時に別のプロセスによって変更されました。問題の診断に役立つフォルト・レスポンス本文を伴う場合があります。

422

不正なエンティティ本体。本体内のデータが構文的に正しい場合でも、有効でなかったり、処理できませんでした。たとえば、行を更新する際にデータが無効な場合です。

500

内部サーバー・エラー。サーバーで予期しない状態が発生し、リクエストを処理できませんでした。

501

実装されていません。サーバーでは、リクエストを実行するために必要な機能がサポートされていません。これは、サーバーがリクエスト・メソッドを認識せず、リソースに対してこれをサポートできない場合のレスポンスです。

C.8 WebCenter Portal REST APIのセキュリティに関する考慮事項

すべてのWebCenter REST URIは、(保護されているWebページと同様に)保護されているリソースを参照し、アクセスするには認証が必要です。

注意:

認証アクセス・ルールの1つの例外は、CMISリソースへのアクセスです。CMISリソースは、次のCMIS URIエントリ・ポイントを介して匿名でアクセスできます。

http://host/port/rest/api/cmis/repository

「CMIS REST APIのセキュリティに関する考慮事項」も参照してください。

Basic認証を使用したリクエストによりこの認証に合格するか、またはクライアントとWebCenter RESTサービスがシングル・サインオンを使用するように構成できます。シングル・サインオンの詳細は、『Oracle Fusion Middleware Oracle WebCenter Portalの管理』のSSLの構成に関する項を参照してください。

Basic認証では、ユーザーのパスワードはプレーン・テキストで送信されます。このタイプの認証を使用する場合は、SSLを使用した接続の保護を考慮する必要があります。詳細は、『Oracle Fusion Middleware Oracle WebCenter Portalの管理』のSSLの構成に関する項を参照してください。

セキュリティを向上するために、すべてのURIには、hrefとtemplateのどちらの属性でも、セキュリティ・トークン・パラメータが含まれています。セキュリティ・トークンはユーザー・スコープです。つまり、認証ユーザーに基づいており、有効範囲は認証ユーザーで、そのユーザーのセッションでブックマークに指定したり、キャッシュしたりできます。このようなセキュリティ・トークンは、クロスサイト・リクエスト・フォージェリ(CSRF)攻撃の回避に役立ちます。

例:

<link
template="opaque-template-uri/@me?startIndex={startIndex}&itemsPerPage={itemsPerPage}
&token=generated-token" resourceType="urn:oracle:webcenter:messageBoard"
href="opaque-uri/@me?token=generated-token" capabilities="urn:oracle:webcenter:read"
/>

注意:

セキュリティ・トークンは認証にもアイデンティティ伝播にも使用されません。

WebCenter Portal REST APIは、認証ユーザーのアイデンティティに基づいて動作します。たとえば、ポータルのREST APIは、ポータルに関する情報のみを返し、ユーザーがアクセスできるポータルのみを変更できます。

C.9 CMIS REST APIのセキュリティに関する考慮事項

CMIS REST APIが使用する認証スキームは、他のWebCenter Portal REST APIが使用するものとは異なります。他のWebCenter Portal REST APIでは、認証されていないアクセスは許可されず、アクセスを許可する前にユーザーに認証を要求しますが、CMIS REST APIでは、認証されていないアクセスでも許可されます。

ドキュメントが認証情報を要求して、その情報を受信しなかった場合(認証されていないユーザーがアクセスしていたため)、404エラーが返されます。これは必ずしもドキュメントが見つからないことを意味するのではなく、(認証されていない)ユーザーがそのドキュメントにアクセスするための適切な権限を持たないことを意味します。リクエストが成功するためには、現在のユーザーを識別するBasic認証ヘッダーが含まれている必要があります。

CMISはContent Management Interoperability Serviceの略であり、エンタープライズ・コンテンツ管理システムの標準のRESTインタフェースです。詳細は、「コンテンツ管理REST API」を参照してください。

C.10 共通タイプの理解

この項では、複数のWebCenter Portal REST APIで共有される共通タイプについて説明します。

- 共通タイプ

- ポータブル連絡先タイプ

C.10.1 共通タイプ

共通タイプは、WebCenter Portal REST APIで使用されるオブジェクトを、一貫性のある方法で参照します。

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

- personReference

- groupSpaceReference

C.10.1.1 personReference

これは、システム内のユーザーを表す汎用データ・タイプです。様々なAPIで使用されて、たとえば、メッセージ・ボードやフィードバック・メッセージの作成者またはユーザーの上司や直属の部下を識別します。これは、次の要素で構成されています。

- guid: ユーザーのGUID

- id: ユーザーのログインID

- displayName: ユーザーの表示名

personReferenceには、ユーザーのプロファイル・アイコンへのリンクも含まれています。値(small、mediumまたはlarge)を指定することによって、アイコンのサイズを制御できます。

personReferenceタイプが含まれる場所によっては、生成するレスポンスの関連するREST APIへのリンクを返すこともできます。たとえば、personReferenceタイプが、メッセージ・ボード・レスポンス内の作成者として含まれている場合は、メッセージ・ボード・サービスへのリンクを含みます。

C.10.1.2 groupSpaceReference

これは、ポータルを表す汎用データ・タイプです。様々なAPIで使用されて、たとえばアクティビティ・ストリーム内では、特定のアクティビティが発生したポータルを識別します。次の要素で構成されています。

- guid: ポータルのGUID

- name: ポータルの名前

- displayName: ポータルの表示名

groupSpaceReferenceには、htmlリンク、restリンクおよびアイコン・リンクも含まれています。

C.10.2 ポータブル連絡先タイプ

ポータブル連絡先タイプによって、Web上でアドレス帳および友人リストにアクセスする標準の手段が提供されます。ポータブル連絡先タイプは、ピープル・コネクション・サービスのプロファイル・コンポーネントが使用します。

注意:

これらのタイプは、WebCenterのポータル連絡先タイプに基づいています。追加データを含む可能性があります。

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

- nameポータブル連絡先タイプ

- addressポータブル連絡先タイプ

- organizationポータブル連絡先タイプ

- valueポータブル連絡先タイプ

C.10.2.1 nameポータブル連絡先タイプ

これは、ユーザーの名前に関する情報を提供するポータブル連絡先タイプです。これは、次の要素で構成されています。

- formatted: ユーザーの書式設定されたフル・ネーム、たとえばMichael David Jones Ph.D.

- familyName: ユーザーの姓、たとえばJones

- givenName: ユーザーの名、たとえばMichael

- honorificSuffix: ユーザーの敬称、たとえばEsq.やPh.D.

- initials: ユーザーの先頭の頭文字、たとえばM. D.

- maidenName: ユーザーの旧姓

ユーザー・リポジトリ構成およびデータによっては、要素の一部が表示されないことがあります。

C.10.2.2 addressポータブル連絡先タイプ

これは、ユーザーの住所に関する情報を提供するポータブル連絡先タイプです。これは、次の要素で構成されています。

- formatted: 書式設定された完全な住所

- type: 住所のタイプ(例: 自宅、会社)

- streetAddress: 番地

- poBox: 私書箱番号

- locality: 市町村

- region: 都道府県

- postalCode: 郵便番号

- country: 国

ユーザー・リポジトリ構成およびデータによっては、要素の一部が表示されないことがあります。

C.10.2.3 organizationポータブル連絡先タイプ

これは、ユーザーの組織的な所属に関する情報を提供するポータブル連絡先タイプです。次の要素で構成されています。

- name: 組織の名前

- employeeNumber: ユーザーの従業員番号

- employeeType: ユーザーの従業員タイプ。

- department: ユーザーが所属する組織内の部門

- defaultGroup: ユーザーが所属するデフォルト・グループ

- title: 組織内でのユーザーの役職

- description: 組織内でのユーザーの役割の説明

- expertise: 組織内でのユーザーの専門

- startDate: ユーザーが組織に加わった日付

ユーザー・リポジトリ構成およびデータによっては、要素の一部が表示されないことがあります。

C.10.2.4 valueポータブル連絡先タイプ

これは、多様な連絡先情報のデータが格納される汎用オブジェクトです。これは、次の要素で構成されています。

- primary: これが、この人に関するこのタイプの情報の主要部分であるかどうかを識別するブール値。主要要素は存在しない場合があり、同じタイプのデータに対して複数の値がある場合のみ関係します。

- value: このタイプの値

- type: 情報のタイプ。有効なタイプは次のとおりです。

- standard: 有効な値はwork、home、other

- phoneNumber: 有効な値はwork、home、fax、pager、mobile

- photos: 有効な値はthumbnail

C.11 キャッシュの管理

クライアント側の開発者は、リクエストとレスポンスでHTTPキャッシュ・ヘッダーを処理する方法を理解している必要があります。最終変更日を持つ個々のリソースは、エンティティ・タグも返します。エンティティ・タグを使用すると、特定のエンティティを効率的に取得できます。キャッシュにおけるエンティティ・タグの使用の詳細は、Hypertext Transfer Protocol仕様を参照してください。

http://www.w3.org/Protocols/

C.12 プロキシ・サーバーの構成

この項では、Apacheサーバー上に単純な応答再書込みを行うリバースHTTPプロキシを設定する方法を説明します。プロキシ・サーバーは、通常、ブラウザ・クライアントからのXMLHttpRequest (XHR)コールに関連する、クロスドメイン・リクエストの問題を回避するために使用されます。これらのコールは、通常、多機能な対話型のクライアント側インタフェースを作成する、Ajax開発技術に関係します。REST APIは、通常、このようなクライアント側開発のシナリオで使用されます。

注意:

この項では、Apacheにプロキシ・サーバーを設定する単純な例を説明します。詳細は、http://httpd.apache.org/docsで入手できるApache Serverドキュメントを参照してください。プロキシ・サーバーに、Oracle HTTP Server (OHS)も使用できます。

Apacheでプロキシ・サーバーを設定する基本的な手順は次のとおりです。

1. Apacheサーバーへのアクセスを取得します。Apache 2.2.7以降のバージョンをお薦めします。

2. そのサーバーに、mod_substituteモジュールおよびmod_proxyモジュールがインストールされていることを確認します。Apacheのバージョン2.2.7以降にはmod_substituteがデフォルトで組み込まれていることに注意してください。mod_sedまたはmod_line_editも使用できますが、これらの構成はOracleではサポートされていません。

3. httpd.confまたは仮想ホスト構成ファイルを開き、次の行を追加し、適切な箇所を使用しているサーバー名またはサーバー情報で置き換えます。

ProxyRequests           Off
LoadModule              substitute_module       modules/mod_substitute.so
SetOutputFilter         SUBSTITUTE

ProxyPass               /rest/api/              http://myhost:8888/rest/api/
ProxyPassReverse        /rest/api/              http://myhost:8888/rest/api/
Substitute              s|myhost|yourhost|n

ProxyPass               /pathname/rest/api/        http://myhost:8888/rest/api/
ProxyPassReverse        /pathname/rest/api/        http://myhost:8888/rest/api/
Substitute              s|myhost:8888/rest/api|yourhost/pathname/rest/api|n

注意:

このシナリオ例では、2つのサーバーがプロキシ設定されます。次の2つのコールは、実際にはこれら2つの異なるサーバーと通信していますが、クライアントからは同じサーバー・ホストと通信しているように見えます。

http://myhost/rest/api/resourceIndex

http://myhost/pathname/rest/api/resourceIndex

4. Apacheサーバーを再起動します。たとえば、Linuxでは次の操作を実行します。

sudo /etc/init.d/httpd restart

一部のLinuxの構成では、この方式によるApacheとのプロキシ設定には、httpdからのアウトバウンド接続を許可するためにSELinuxが必要であることに注意してください。SELinuxのGUI内またはコマンド・ラインを介してhttpd_can_network_connect flagを有効化すると設定できます。

開発者のヒント

httpd.confでUserDir権限を設定して、ユーザーが各自のpublic_htmlディレクトリにこれらのファイルをドロップできるようにします。たとえば、http://host/~yourname/sample.htmlをヒットしてサンプル・アプリケーションにアクセスし、サンプル・アプリケーションでhttp://host/rest/api/resourceIndexをXHRコールします。

C.13 WebCenter Portal REST APIの例

この項では、WebCenter Portal REST APIの使用方法のサンプルを示します。次のトピックが含まれています:

- メッセージ・ボード・ハイパーメディアのナビゲーション

- アクティビティ・ストリーム・データの表示

- ユーザー・ステータスの更新

C.13.1 メッセージ・ボード・ハイパーメディアのナビゲーション

この項では、RESTサービス・ハイパーメディアのナビゲーション方法のサンプルを示します。サンプルは、メッセージ・ボード上のメッセージの読取り、別のユーザーのメッセージ・ボードへのメッセージの投稿、不要なメッセージの削除およびメッセージ・ボードのメッセージをフィルタ処理する方法を示しています。

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

- リソース索引へのアクセス

- メッセージの読取り

- 新規メッセージの作成

- メッセージの更新

- メッセージの削除

- メッセージのフィルタ処理

C.13.1.1 リソース索引へのアクセス

次の例に示すように、最初は必ずリソース索引にアクセスします。

例: リソース索引へのアクセス

GET /resourceIndex

このリクエストは、メッセージ・ボードのエントリ・ポイントを含めて、RESTfulサービスへの最上位レベルURIエントリ・ポイントのリストを返します。

例: リソース索引へのアクセスに対するレスポンス

200 OK
Accept: application/json;charset=UTF-8

{
"resourceType": "urn:oracle:webcenter:resourceindex",
"links": [
{
"resourceType": "urn:oracle:webcenter:resourceindex",
"capabilities": "urn:oracle:webcenter:read",
"rel": "self",
"href": "http://host:port/rest/api/resourceIndex"
},
{
"resourceType": "urn:oracle:webcenter:messageBoard",
"capabilities": "urn:oracle:webcenter:read",
"href": "opaque-messageBoard-URI"
},
...repeating for other services...
}

このリストを調べて、メッセージ・ボードへのアクセスに必要なURIを見つけることができます。resourceTypeがurn:oracle:webcenter:messageBoardであるリンクを探します。このリンクのhrefが、メッセージ・ボードへのアクセスに必要なものです。

他のリソースのrel、typeおよびtemplateも、正しいリンクを見つける上で役立ちます。

C.13.1.2 メッセージの読取り

メッセージ・ボードの正しいURIがわかると、そのURIにGETリクエストを送信してメッセージを読み取ることができます。

メッセージ・ボード上のメッセージを読み取るには、ログインする必要があります。

例: メッセージ・ボードからのメッセージの取得(GET)

GET /opaque-messageBoard-URI

レスポンスは、メッセージ・ボード上のすべてのメッセージに関する情報を提供します。

例: メッセージ・ボードからのメッセージの取得に対するレスポンス

200 OK
Accept: application/json;charset=UTF-8

{
"resourceType": "urn:oracle:webcenter:messageBoard",
"links": [
{
"resourceType": "urn:oracle:webcenter:messageBoard",
"capabilities": "urn:oracle:webcenter:read urn:oracle:webcenter:create",
"rel": "self",
"href": "opaque-messageBoard-URI"
}
]
"items": [
{
"resourceType": "urn:oracle:webcenter:messageBoard:message",
"links": [
{
"resourceType": "urn:oracle:webcenter:messageBoard:message",
"capabilities": "urn:oracle:webcenter:read urn:oracle:webcenter:delete",
"rel": "self",
"href": "opaque-message-URI"
}
]
"id": "89add57c-7a35-4d35-b24f-ea9259612eb8",
"body": "What's up?  It's been a while.  Some of us are going to Conner O'Neal's after work.  Want to go?",
"created": "2009-09-10T11:18:46.696-0700",
"author": {
"id": "carl",
"displayName": "carl",
"guid": "649A27F09D5C11DEBFAA799CBD41D9B8",
"links": [
{
"resourceType": "urn:oracle:webcenter:people:person",
"capabilities": "urn:oracle:webcenter:read",
"rel": "via",
"href": "opaque-person-URI"
},
{
"resourceType": "urn:oracle:webcenter:messageBoard",
"capabilities": "urn:oracle:webcenter:read urn:oracle:webcenter:create",
"href": "opaque-messageBoard-URI-for-Carl"
},
{
"type": "text/html",
"resourceType": "urn:oracle:webcenter:spaces:profile",
"capabilities": "urn:oracle:webcenter:read",
"rel": "alternate",
"href": "opaque-profile-URI"
}
]
},
}
],
"startIndex": 0,
"itemsPerPage": 1,
}

レスポンスから、メッセージ・ボードに対してreadおよびcreateの機能を持つことがわかります。したがって、コンテンツの読取りおよび新しいメッセージの投稿が行えます。

さらに、レスポンスにはアイテムのコレクションも含まれます(この例では、コレクションは1つのアイテムのみで構成されています)。これらのアイテムは、resourceTypeがurn:oracle:webcenter:messageBoard:messageである、メッセージ・ボード上のメッセージです。メッセージのcapabilities属性は、この特定のメッセージについて、メッセージ・ボードからの読取りおよび削除が行えることを示しています。

各メッセージについて、レスポンスは次の情報を提供します。

- id: メッセージの識別子

- body: メッセージのテキスト

- author: メッセージの作成者。author要素も、別の複数の要素で構成されます。

- id: メッセージの作成者の識別子またはユーザー名

- displayName: 表示用に書式設定された作成者の名前

- guid: 作成者のグローバル一意識別子

author要素の中には、3つのリンクのコレクションもあります。これらのリンクのresourceTypeは、次のとおりです。

- urn:oracle:webcenter:people:person: メッセージの作成者に関する情報を表示できます

- urn:oracle:webcenter:messageBoard: 作成者のメッセージ・ボードでメッセージの読取りまたは作成を行えます

- urn:oracle:webcenter:spaces:profile: 作成者のプロファイルのtext/htmlドキュメントを読み取れます

C.13.1.3 新しいメッセージの作成

自分のメッセージ・ボード上のメッセージを読み、Carlのメッセージ・ボードに返信するとします。このためには、Carlのメッセージ・ボードのURIにPOSTリクエストを送信する必要があります。

正しいURIを見つけるには、resourceTypeがurn:oracle:webcenter:messageBoardである、authorリンクのhrefを使用します。

POSTリクエストにより、投稿先のリソースの従属リソースが作成されます。この例ではmessageBoardに投稿しているため、その従属リソースであるmessageを投稿する必要があります。

例: 別のユーザーのメッセージ・ボードへのメッセージの作成(POST)

POST opaque-messageBoard-URI-for-Carl
Accept: application/json;charset=UTF-8
Content-Type: application/json;charset=UTF-8

{
"body": "sure; see you guys at 6."
}

レスポンスは、Carlのメッセージ・ボードにメッセージが正常に作成されたことを示しています。

例: 別のユーザーのメッセージ・ボードへのメッセージの作成に対するレスポンス

201 Created
Content-Type: application/json;charset=UTF-8

{
"id": "36b8464f-afda-44b5-90ad-8ecedcb040a3",
"body": "sure; see you guys at 6.",
"created": "2009-09-10T12:21:09.785-0700",
"resourceType": "urn:oracle:webcenter:messageBoard:message",
"links": [
{
"resourceType": "urn:oracle:webcenter:messageBoard:message",
"capabilities": "urn:oracle:webcenter:read urn:oracle:webcenter:update urn:oracle:webcenter:delete",
"rel": "self",
"href": "opaque-message-URI"
},
"author": {
"id": "mike",
"displayName": "mike",
"guid": "649657609D5C11DEBFAA799CBD41D9B8",
"links": [
{
"resourceType": "urn:oracle:webcenter:people:person",
"capabilities": "urn:oracle:webcenter:read",
"rel": "self",
"href": "opaque-person-URI"
},
{
"resourceType": "urn:oracle:webcenter:messageBoard",
"capabilities": "urn:oracle:webcenter:read urn:oracle:webcenter:create",
"href": "opaque-messageBoard-URI"
},
{
"type": "text/html",
"resourceType": "urn:oracle:webcenter:spaces:profile",
"capabilities": "urn:oracle:webcenter:read",
"rel": "alternate",
"href": "opaque:profile:URI"
}
]
}
]
}

C.13.1.4 メッセージの更新

PUTリクエストはPOSTリクエストによく似ていますが、親リソースではなく、編集されているリソースで実行される点が異なります。

Carlのメッセージ・ボードにメッセージを作成した場合、先のPOSTリクエストに対するレスポンスから、メッセージに関してread、updateおよびdeleteの機能を持つことがわかります。また、hrefでメッセージのURIもわかります。たとえば、急な仕事が入り、もう少し残ることが必要になったとします。メッセージのURIを使用すると、PUTリクエストを送信してメッセージを更新し、遅れることをCarlに伝えることができます。

例: メッセージの更新(PUT)

PUT opaque:message:URI
Accept: application/json;charset=UTF-8
Content-Type: application/json;charset=UTF-8

{
"body": "working late; see you guys at 7."
}

レスポンスはPOSTのレスポンスとほぼ同じですが、bodyに更新されたメッセージがある点が異なります。

例: メッセージの更新

200 OK
Content-Type: application/json;charset=UTF-8

{
"id": "36b8464f-afda-44b5-90ad-8ecedcb040a3",
"body": "working late; see you guys at 7.",

...deleted for brevity...

}

C.13.1.5 メッセージの削除

リソースのdelete機能を持っている場合、リソースに対してDELETEリクエストを実行すると、そのリソースは削除されます。Carlのメッセージ・ボード上のメッセージへのリンクは、deleteをサポートしています。

Carlのメッセージ・ボードに残したメッセージを削除することにします。

例: メッセージの削除(DELETE)

DELETE opaque:message:URI

レスポンスは、ステータス・コード204のみです。

例: メッセージの削除に対するレスポンス

204 NO CONTENT

注意:

DELETEはべき等です。つまり、複数回送信しても同じ結果が得られます。そのため、同じオブジェクトを2回削除しようとすると、以前に削除していても引き続き同じ204レスポンスを受信します。

C.13.1.6 メッセージのフィルタ処理

メッセージは、可視性条件に基づき、(GET、POSTおよびPUTのHTTP動詞を使用して)フィルタ処理できます。メッセージ・ボードに投稿されたメッセージは次の可視性カテゴリに分けられます。

- パブリック

- プライベート

- 非表示

- パブリックかつ非表示

- プライベートかつ非表示

C.13.1.6.1 パブリック・メッセージとプライベート・メッセージ

メッセージ・ボードの所有者は、任意のメッセージをプライベートとしてマークできます。メッセージがプライベートとしてマークされると、そのメッセージは、メッセージの所有者以外には表示されません。デフォルトで、すべてのメッセージはパブリックです。

メッセージをプライベート・メッセージとして送信することもできます。たとえば、MikeがCarlのメッセージ・ボードを表示している場合、ユーザーであるMikeにはパブリック・メッセージのみ(プライベートとして送受信されたパブリック・メッセージも含む)が表示されます。

C.13.1.6.2 非表示メッセージと表示メッセージ

メッセージ・ボードの所有者は、任意のメッセージを非表示としてマークできます。メッセージが非表示としてマークされると、そのメッセージはメッセージ・ボードの所有者には表示されませんが、メッセージ・ボードを表示する他のユーザーには表示されたままになります。

次に、取得方法の例を示します。

例: フィルタ処理されたメッセージの取得(GET)

- me

all
rest/api/messageBoards/person/@me
private
rest/api/messageBoards/person/@me/private
public
rest/api/messageBoards/person/@me/public
hidden and public
rest/api/messageBoards/person/@me/hidden
private and hidden
rest/api/messageBoards/person/@me/private_hidden

- person

rest/api/messageBoards/person/<GUID>

メッセージを取得するログイン・ユーザーのGUIDが必要であることに注意してください。

- space-guid

rest/api/messageBoards/space/<GUID>

space-guidでは可視性に基づくフィルタ処理が使用できないことに注意してください。

例: 新しいメッセージに対するフィルタ処理の使用(POST)

- me

all
rest/api/messageBoards/person/@me
private
{"body" : "<BODY_CONTENT>","visibilityType" : "private"}
public
{"body" : "<BODY_CONTENT>","visibilityType" : "public"}
hidden and public
{"body" : "<BODY_CONTENT>","visibilityType" : "hidden"}
private and hidden
{"body" : "<BODY_CONTENT>","visibilityType" : "private_hidden"}

- person

rest/api/messageBoards/person/<GUID>

「me」以外のGUIDの場合:

public
{"body" : "<BODY_CONTENT>","visibilityType" : "public"}
private
{"body" : "<BODY_CONTENT>","visibilityType" : "private"}

- space-guid

rest/api/messageBoards/space/<GUID>

space-guidでは可視性に基づくフィルタ処理が使用できないことに注意してください。

例: 変更されたメッセージに対するフィルタ処理の使用(PUT)

- me

all
rest/api/messageBoards/person/@me/messages/<msg guid>
private
{"body" : "<BODY_CONTENT>","visibilityType" : "private"}
public
{"body" : "<BODY_CONTENT>","visibilityType" : "public"}
hidden and public
{"body" : "<BODY_CONTENT>","visibilityType" : "hidden"}
private and hidden
{"body" : "<BODY_CONTENT>","visibilityType" : "private_hidden"}

- person

rest/api/messageBoards/person/<GUID>/messages/<msg guid>

「me」以外のGUIDの場合:

public
{"body" : "<BODY_CONTENT>","visibilityType" : "public"}
private
{"body" : "<BODY_CONTENT>","visibilityType" : "private"}

- space-guid

rest/api/messageBoards/space/<GUID>/messages/<msg guid>

space-guidでは可視性に基づくフィルタ処理が使用できないことに注意してください。

C.13.2 アクティビティ・ストリーム・データの表示

アクティビティ・ストリーム・データを正しく表示するには、次の操作を行う必要があります。

- アクティビティ・ストリームURIエントリ・ポイントの取得

- アクティビティ・ストリーム・データの取得

- アクティビティ・ストリーム・データを表示するための処理

このサンプルは、Oracle Technology Network (OTN)のOracle WebCenter Portalのデモとサンプルのページでご利用いただけます。

http://www.oracle.com/technetwork/middleware/webcenter/ps3-samples-176806.html

次の例では、

- getResourceURLメソッドは、メイン・リソース索引(/rest/api/resourceIndex)のJSONデータを取得し、そのデータ内でアクティビティ・ストリーム・リソースのURIを見つけることによって、アクティビティ・ストリーム・サービスのURIエントリ・ポイントを取得する方法を示しています。

- formatMessageメソッドは、アクティビティ・ストリーム・データを処理して表示可能な形式にします。これには、個々のメッセージの検索と、メッセージ内のテンプレート・パラメータをそのパラメータに対応するオブジェクトまたはユーザーの名前に置換する処理が含まれます。パラメータには、オブジェクトまたはユーザーを表示するためのリンクも含まれます。そのオブジェクトまたはユーザー用のRESTサービスへのリンクがある場合は、それが含まれることもあります。

注意:

リソース索引およびアクティビティ・ストリームJSONデータを取得するには、Javascript(および場合によってはDojoなどのクライアント側スクリプト・ライブラリ)を使用してAjaxリクエストを作成し、結果のデータを適切なメソッドに渡します。

例: アクティビティ・ストリーム・データの表示

/* Parse the resourceIndex to find the specified URL and
* return it.
*
* @Param jsonData the JSON data retrieved from calling
*        the /rest/api/resourceIndex URL.
* @Param strResourceType the resource type of the URL
*        you want to retrieve from the resourceIndex data.
*        E.g., 'urn:oracle:webcenter:activities:stream'
*/
function getResourceURL(jsonData, strResourceType)
{
// Using the HATEOAS model, we browse the returned links
// looking for the one with the correct resource type.

for (var i = 0; i < data.links.length; i++) {
if (data.links[i].resourceType == strResourceType) {
return data.links[i].href;
}
}
}

/* Parse the resourceIndex to find the activity stream URL and
* then load it.
*
* @Param jsonData the JSON data retrieved from calling
*        the /rest/api/resourceIndex URL.
*/
function getActivitiesURL(jsonData)
{
// Parse the JSON data to get the activities URI entry point.

var strHref = getResourceURL(jsonData,
'urn:oracle:webcenter:activities:stream');

// INSERT CODE HERE: Implement getting the JSON data from the
// strHref URL with the Accept header set to "application/json",
// and use the formatMessage(index, jsonData) function to get
// the displayable activity message for each activity.

}

/* Replace activity message parameters.
*
* @Param index the index of the activity to process
* @Param jsonData the JSON data retrieved from calling
*        the /rest/api/resourceIndex URL.
*/
function formatMessage(index, jsonData)
{
var activity = jsonData.items[index];
var strMessage = activity.message;

// Look for activity parameters and replace them in the message.

if (activity.templateParams && activity.templateParams.items) {
for (var i = 0; i < activity.templateParams.items.length; i++) {
var param = activity.templateParams.items[i];

// Each parameter also has a set of links which at least
// includes an HTML link and possibly a REST API link.

strMessage = strMessage.replace(param.key, param.displayName);
}
}
if (activity.detail) {
strMessage = strMessage + "<br><font size='1'>" +
activity.detail + "</font>";
}
return strMessage;
}

C.13.3 ユーザー・ステータスの更新

次の例は、REST APIを使用してユーザーのWebCenter Portalプロファイル・ステータスを更新する方法を示しています。

注意:

サンプルは、Webサーバー(Apache、Oracle HTTP Serverなど)またはアプリケーション・サーバーでホストする必要があります。クロスサイト・スクリプティング・エラーを防ぐには、プロキシURLを使用してRESTサービスにアクセスする必要があります。ApacheまたはOHSでは、confコマンドは次のようになります(必要に応じてmyspaceshostおよびportを変更します)。

ProxyPass /webcenter/ http://myspaceshost:port/webcenter/
ProxyPassReverse /webcenter/ http://myspaceshost:port/webcenter/
ProxyPass /rest/ http://myspaceshost:port/rest/
ProxyPassReverse /rest/ http://myspaceshost:port/rest/
ProxyPreserveHost on

このサンプルは、Oracle Technology Network (OTN)のOracle WebCenter Portalのデモとサンプルのページでご利用いただけます。

http://www.oracle.com/technetwork/middleware/webcenter/ps3-samples-176806.html

ユーザー・ステータスの更新では、ステータス・オブジェクトのURLを取得するための、一連の非同期AJAXコールが行われます。

urn:oracle:webcenter:resourceindex
urn:oracle:webcenter:people
urn:oracle:webcenter:people:person:status

ユーザー・ステータスを更新するHTMLページには、ユーザーが新しいステータス・メッセージ(statusMessage)を入力できる入力フィールドがあります。「Update Status」ボタンをクリックすると(または[Enter]キーを押すと)updateStatusメソッドがコールされて、リソース索引への初期コールが行われます。

例: HTML本体

<body>
<div>New status message:&nbsp;<input id="statusMessage" type="text"
onkeyup="{if (event.keyCode==13) updateStatus();}" maxlength="250"
size="60" /></div>
<div>
<button id="button1" onclick="updateStatus();">Update Status</button>
</div>
<div id="statusResults"></div>
</body>

次の例にHTMLページを示します。

図C-1 新しいステータス・メッセージのHTMLページ

次の例のコードは、リソース索引(/rest/api/resourceIndexに設定されているresourceIndexURL変数)を取得します。リソース索引は、AJAXリクエスト・オブジェクト(resourceIndexRequest)として返されます。

例: リソース索引の取得

function updateStatus() {
// Set the UI to busy state. This is cleared in the success and error callbacks
setUIBusy("Updating status...");
//get the Resource Index
resourceIndexRequest.get(
resourceIndexURL,
resourceIndexCallback,
clearUIBusy);
}

次の例に示すgetResourceURLメソッドは、RESTコールによって返されるデータ内のリンクをトラバースして、要求されたリソース・タイプを識別する指定の文字列(URN)を見つけます。

例: リンクのトラバース

function getResourceURL(data, strResourceType) {
for (var i = 0; i < data.links.length; i++) {
if (data.links[i].resourceType == strResourceType) {
return data.links[i].href;
}
}
return null;
}

次の例では、getResourceURLを使用してリソース索引を解析して、ユーザー・プロファイルURLを見つけます。データは、AJAXリクエスト・オブジェクト(profileRequest)として返されます。

例: ユーザー・プロファイルの取得

function resourceIndexCallback(data) {
//get my user profile
profileRequest.get(
getResourceURL(data, 'urn:oracle:webcenter:people'),
profileCallback,
clearUIBusy);
}

次の例は、HTMLページでユーザーが指定した新しいステータス・メッセージを受け取り(statusMessage)、request.putを使用して、(getResourceURLを再度コールして取得した)ステータス・オブジェクトを更新します。

例: ステータス・オブジェクトの取得

function profileCallback(data) {
profile = data;
// get the URL for the status object
var url = getResourceURL(data, 'urn:oracle:webcenter:people:person:status');
// get the new status and escape double quotes
var newStatus = document.getElementById
('statusMessage').value.replace(/\"/g. "\\\"");
//send a JSON string representing the new status object
var statusMessage = '{"note": "' + newStatus + '"}';
statusRequest.put(
getResourceURL(data, 'urn:oracle:webcenter:people:person:status'),
statusMessage, renderStatusPutResults, clearUIBusy);
}

次の例に示すrenderStatusPutResultsメソッドは、新しいステータス・オブジェクトをレンダリングします。

例: 新しいステータス・オブジェクトのレンダリング

function renderStatusPutResults(data) {
var name = profile.displayName;
// get the URL for my profile HTML page in WebCenter Portal
var profileURL = getResourceURL(profile,
'urn:oracle:webcenter:spaces:profile');
var html = 'Status for <a href="' + profileURL + '" target="_blank">'
+ name + '</a> is: ' + data.note;
// clear the UI busy state and print the new status message
clearUIBusy(html);
}

次の例は、UIを無効にして再度有効にするコードを示しています。

例: UIの無効化

function setUIBusy(message) {
document.getElementById('statusResults').innerHTML = message;
document.getElementById('button1').disabled = true;
document.getElementById('statusMessage').disabled = true;
}

function clearUIBusy(message) {
document.getElementById('statusResults').innerHTML = message;
document.getElementById('button1').disabled = false;
document.getElementById('statusMessage').disabled = false;
}

次の例は、AJAXコールに役立つライブラリを示しています。その大部分はWebCenter固有のものではなく、JSONを返すサービスに対する任意のXHRリクエストで使用できます。

ライブラリには再利用可能なXHRオブジェクトが含まれています。このオブジェクトは、HTTP GET、POST、PUTおよびDELETEをサポートします。すべての関数は非同期であり、URLと2つのコールバック関数(成功した場合と失敗した場合)を使用します。成功コールは、戻りデータが含まれるJavaScriptオブジェクトを使用して行われます。失敗コールは、エラー文字列を使用して行われます。POSTおよびPUTも、JSON文字列のデータ引数を使用します。

例: AJAXライブラリ

function AjaxRequest() {
// constructor to create an object oriented AJAX request
var xhr = null;

// get XHR object. Should work for IE 6+, Safari, and Mozilla based browsers
if (window.XMLHttpRequest) {
xhr = new window.XMLHTTPRequest;
} else {
try {
xhr = new ActiveXObject('MSXML2.XMLHTTP.3.0');
} catch (ex) {
xhr = null;
}
}
if (xhr == null) {
alert("Your browser does not support AJAX");
}

this.get = function(url, callback, errorCallback) {
xhr.open('GET', url, true);
// the REST APIs return XML by default. Please return JSON
xhr.setRequestHeader('Accept', 'application/json; charset=utf-8');
sendRequest(null, callback, errorCallback);
};

this.post = function(url, data, callback, errorCallback) {
xhr.open('POST', url, true);
// set headers to send and receive JSON
xhr.setRequestHeader('Accept', 'application/json; charset=utf-8');
xhr.setRequestHeader('Content-Type', 'application/json; charset=utf-8');
sendRequest(data, callback, errorCallback);
};

this.put = function(url, data, callback, errorCallback) {
xhr.open('PUT', url, true);
// set headesr to send and receive JSON
xhr.setRequestHeader('Accept', 'application/json; charset=utf-8');
xhr.setRequestHeader('Content-Type', 'application/json; charset=utf-8');
sendRequest(data, callback, errorCallback);
};

this.deleteResource = function(url, callback, errorCallback) {
xhr.open('DELETE', url, true);
sendRequest(null, callback, errorCallback);
};

// set the callbacks and send the request with data, if any
function sendRequest(data, callback, errorCallback) {
xhr.onreadystatechange = function () {
processResponse(xhr, callback, errorCallback);
};
xhr.send(data);
}

function processResponse(xhr, callback, errorCallback) {
var data = null;
// can get called here many times. 4 means really done
if (xhr.readyState == 4) {
// let's call any HTTP codes in the 200s success
if (xhr.status >= 200 && xhr.status <300) {
// convert response text into a JSON object. This is insecure.
// data should not be blindly evaluated from the server return.
// consider using json2.js http://www.JSON.org/js.html
data = eval('(' + xhr.responseText + ')');
callback(data);
} else {
// we got an error. Format an error string
data = 'Error: ' + xhr.status + ' ' + xhr.statusText + '<br />'
+ xhr.responseText;
errorCallback(data);
}
}
}
}

C.14 ピープル・コネクションREST APIの使用

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

- アクティビティ・ストリームREST API

- コネクションおよびプロファイルREST API

- フィードバックREST API

- メッセージ・ボードREST API

- 招待の作成

C.14.1 アクティビティ・ストリームREST API

アクティビティ・ストリームREST APIを使用して、アクティビティ・ストリームにおけるユーザーのアプリケーション・アクティビティを参照します。この項では、このアクションを実行するために使用できるREST APIメソッドの情報を提供します。

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

- アクティビティ・ストリームのエントリ・ポイント

- アクティビティ・ストリームのリソース・タイプの分類

- アクティビティ・ストリームのセキュリティに関する考慮事項

- アクティビティ・ストリームのリソース・タイプ

C.14.1.1 アクティビティ・ストリームのエントリ・ポイント

各RESTサービスは、そのサービスのエントリ・ポイントを提供するリソース索引内にリンク要素を持っています。ピープル・コネクションでは、各機能に独自のリンク要素があります。たとえば、ピープル・コネクションのアクティビティ・ストリーム機能のエントリ・ポイントを見つけるには、次のresourceTypeを持つリンク要素を見つけます。

urn:oracle:webcenter:activities:stream

対応するhrefまたはtemplate要素によって、URIエントリ・ポイントが提供され、それによってアクティビティ・ストリームから現在のユーザーのアプリケーション・アクティビティが取得されます。クライアントは、このエントリ・ポイントにHTTPリクエストを送信し、ピープル・コネクションのアクティビティ・ストリーム機能を使用します。

関連項目:

リソース索引の詳細は、「リソース索引の使用」を参照してください。

リソース・タイプの詳細は、「リソース・タイプ」を参照してください。

C.14.1.2 アクティビティ・ストリームのリソース・タイプの分類

クライアントがエントリ・ポイントを識別すると、リソース・タイプの分類によりナビゲートして、必要な操作を実行できます。個々のリソース・タイプの詳細は、「アクティビティ・ストリームのリソース・タイプ」の該当の項を参照してください。

ピープル・コネクションのアクティビティ・ストリーム機能のリソース・タイプの分類は、次のとおりです。

urn:oracle:webcenter:activities:stream
urn:oracle:webcenter:activities:activity

C.14.1.3 アクティビティ・ストリームのセキュリティに関する考慮事項

ピープル・コネクションREST APIのいずれかにアクセスするには、RESTサービスにログインする必要があります。その後、基礎となるサービスにより、権限の確認などが処理されます。

関連項目:

一般的なセキュリティに関する考慮事項については、「WebCenter Portal REST APIのセキュリティに関する考慮事項」を参照してください。

C.14.1.4 アクティビティ・ストリームのリソース・タイプ

この項では、各リソース・タイプについて知っておく必要があるすべての情報を提供します。次のトピックが含まれています:

- urn:oracle:webcenter:activities:stream

- streamへのナビゲーション・パス

C.14.1.4.1 urn:oracle:webcenter:activities:stream

streamレスポンスには、アクティビティ・ストリームからのアクティビティの取得に使用するURIが含まれます。

ユーザーのストリームからアクティビティを取得するか、ユーザーのコネクションのストリームからアクティビティを取得できます。どのアクティビティを取得するのかをより細かく制御するには、アクティビティ・ストリーム問合せフィルタを使用します。問合せフィルタを使用すると、次のことを実行できます。

- 問合せ対象のユーザーを指定します

- ユーザーのコネクションのアクティビティを結果に含めます

- 結果に、ホーム・ポータルなどポータルからのアクティビティを含めます

- 結果を、特定のサービスからのアクティビティに限定します

使用できるオプションは、streamリソースにアクセスするためにたどるパスと、使用するリンクのrelに応じて異なります。たとえば、アクティビティ・ストリーム問合せフィルタは、urn:oracle:webcenter:activities:streamのrel属性を持つリンクからのみ使用できます。personリソースからアクティビティ・ストリーム問合せフィルタにアクセスする場合は、personGuidパラメータが事前に設定されます。

表C-4に、リンクのrel要素に応じて返されるアクティビティを示します。

表C-4 streamによって返されるアクティビティ

rel

戻り値

urn:oracle:webcenter:activities:stream:person

ユーザーのストリームからのアクティビティ(GUID/@self)脚注 1

urn:oracle:webcenter:activities:stream:connections

ユーザーのコネクションのストリームからのアクティビティ(GUID/@connections)

urn:oracle:webcenter:activities:stream

アクティビティ・ストリーム問合せフィルタによって決定されるアクティビティ

urn:oracle:webcenter:activities:stream:space

ポータル・アクティビティ・ストリームからのアクティビティ

urn:oracle:webcenter:activities:stream:list

ポータル・アクティビティ・リストからのアクティビティ

脚注1

GUIDは、任意の有効なユーザーGUIDまたは@meのいずれかです。

C.14.1.4.2 streamへのナビゲーション・パス

この項では、クライアントがハイパーメディアを経由してこのリソースにアクセスする方法を示します:

resourceIndex
stream (rel="urn:oracle:webcenter:activities:stream:person" or
"urn:oracle:webcenter:activities:stream")

resourceIndex
person
stream (rel="urn:oracle:webcenter:activities:stream:person" or
"urn:oracle:webcenter:activities:stream:connections" or
"urn:oracle:webcenter:activities:stream")

resourceIndex
person
list
stream

resourceIndex
space
stream

stream
activity
param
stream (rel="urn:oracle:webcenter:activities:stream:space")

personReference
stream

C.14.1.4.3 streamでサポートされるメソッド

次のメソッドは、streamでサポートされています。

- GET

- リクエスト-パラメータ:

- startIndex、itemsPerPage

関連項目:

startIndexやitemsPerPageなどのREST APIパラメータの詳細は、「共通のリクエスト問合せパラメータ」を参照してください。

問合せフィルタURIに使用できる追加のパラメータは次のとおりです。

- fromDate - アクティビティ開始日(yyyy-mm-dd)を指定します。

- toDate - アクティビティ終了日(yyyy-mm-dd)を指定します。

- data - 指定したデータのみを返します(詳細は、「共通のリクエスト問合せパラメータ」を参照してください)。streamリソースの場合、定数'data'をdataパラメータとして指定すると、そのリソースに関する基本情報が、コメントおよびお気に入り登録のサマリーを除いてすべて返されます。コメントまたはお気に入り登録を返す場合は、dataパラメータ値'commentsSummary'または'likesSummary'を指定します。

注意:

複数のデータ値を、カンマ区切りリストとして指定できます。たとえば、data=data, commentsSummaryと指定します。

- personGuid: (必須)指定されたユーザーのストリームからアクティビティを取得します。有効な値: 任意の有効なユーザーGUIDまたは@me。

- serviceIds: 指定されたサービスに対するアクティビティのみを返します。有効な値: アスタリスク(*)では、すべてのサービスが返されます。NULLまたは空にすると、(最上部バーの設定リンクから)サービス・フィルタのユーザー・プリファレンス設定が使用されます。

- personal: 指定されたユーザーのアクティビティをホーム・ポータルに含めます。有効な値: trueまたはfalse。デフォルト値: false。

- connections: 指定されたユーザーのコネクションのストリームからのアクティビティを含めます。有効な値: trueまたはfalse。デフォルト値: false。

- groupSpaces: 指定したユーザーがメンバーとなっているすべてのポータルからのアクティビティを含めます。有効な値: trueまたはfalse。デフォルト値: false。

- connectionListIds: アクティビティを表示するために使用されるコネクション・リストを指定するコネクション・リスト名のカンマ区切りリスト。

- groupSpaceGuids: アクティビティを表示するために使用されるポータルGUIDのカンマ区切りリスト。

- userGroupSpaceActivities: ユーザーのアクティビティをそれぞれのポータルに表示するかどうかを指定します。有効な値: trueまたはfalse。デフォルト値: false。

- followedObjects: 現在のユーザーと指定されたユーザーの両方に追跡されるオブジェクトのすべてのアクティビティを表示するかどうかを指定します。有効な値: trueまたはfalse。デフォルト値: false。

- followedObjectsUserActivities: 現在のユーザーと指定されたユーザーの両方が追跡するオブジェクトの指定されたユーザーのアクティビティを表示するかどうか指定します。有効な値: trueまたはfalse。デフォルト値: false。

- advancedQuery: ストリーム・アクティビティに対するフィルタを指定します。ユーザー名、サービスIDおよびドキュメントの表示名などのオブジェクトの詳細のフィルタを作成します。

注意:

advancedQueryパラメータに実際の値をプラグする必要があります。EL式を直接パラメータに渡すことはできません。通常、REST APIクライアントはEL変換を手動で処理し、実際のオブジェクト・データ値をREST URLに挿入します。次の例を参照してください。

たとえば、次のURIでは、現在のユーザーのアクティビティ・ストリームから、そのユーザーがサービス・フィルタに対する個人プリファレンス設定で構成したサービスすべてに対して、アクティビティが返されます。これによって、ユーザーのホーム・ポータルから、およびユーザーのコネクションのストリームからアクティビティが返されます。

http://host:port/rest/api/activities?personal=true&connections=true&personGuid=@me&token=utoken

次のURIでは、ユーザーの個人プロファイルおよびコネクションのアクティビティのみが返されます。

http://host:port/rest/api/activities?serviceIds=oracle.webcenter.peopleconn
ections.profile,oracle.webcenter.peopleconnections.connections&personal=
true&personGuid=@me&token=utoken

この次の例では、advancedQueryパラメータの使用方法を示します。前述のとおり、EL式をadvancedQueryに渡すことはできません。REST APIクライアントは、最初に実際のデータ・オブジェクト値を取得する必要があり、そして、その値をadvancedQueryに渡すことができます。たとえば、特定のポータルのアクティビティをフィルタ処理するには、そのポータルの範囲のGUIDをadvancedQueryに渡します。

http://host:port/rest/api/activities?personGuid=@me&advancedQuery=AE.SCOPE_ID%20%3D%20\%27s8bba98ff_4cbb_40b8_beee_296c916a23ed\%27&ttoken=token

ここでs8bba98ff_4cbb_40b8_beee_296c916a23edはそのポータルのGUIDです。問合せ文字列は、適切なエスケープ・コードでエンコードする必要があります。

- レスポンス-本体: 0個以上のアクティビティ

注意:

streamリソースにはアクティビティ・アイテムが含まれているため、そのレスポンスでは、そのアクティビティで参照されているオブジェクトのリソース・リンクも返されることがあります。

C.14.1.4.4 streamからリンクされるリソース・タイプ

表C-5に、クライアントがstreamリソースからリンクできるリソース・タイプを示します。

表C-5 streamに関連するリソース・タイプ

rel

リソース・タイプ

self urn:oracle:webcenter:activities:stream:person

urn:oracle:webcenter:activities:stream

urn:oracle:webcenter:activities:activity

C.14.1.4.5 urn:oracle:webcenter:activities:activity

activityレスポンスには、アクティビティに関するデータと、アクティビティ・ストリームに含まれているアクティビティから必要とするデータをすべて取得する際に使用するURIが含まれます。

C.14.1.4.6 activityへのナビゲーション・パス

この項では、クライアントがハイパーメディアを経由してactivityリソースにアクセスする方法を示します。

resourceIndex
stream
activity

resourceIndex
person
stream
activity

resourceIndex
space
stream
activity

C.14.1.4.7 activityでサポートされるメソッド

activityでサポートされているメソッドはありません。アクティビティは、現在、streamリソース・タイプからのみ使用できます。

C.14.1.4.8 activityからリンクされるリソース・タイプ

表C-6に、クライアントがこのリソースからリンクできるリソース・タイプを示します。

表C-6 urn:oracle:webcenter:activities:activityに関連するリソース・タイプ

rel

リソース・タイプ

self

urn:oracle:webcenter:activities:activity

icon

urn:oracle:webcenter:activities:activity:icon

C.14.1.4.9 activityの読取り専用要素

表C-7に、activityリソースの読取り専用要素を示します。

注意:

アイコンが使用可能である場合は、activityによって、レスポンスのリンク・セクションのアクティビティ・アイコンへのリンクが返されます。「urn:oracle:webcenter:activities:activity:icon」を参照してください。

表C-7 activityの読取り専用要素

要素

タイプ

説明

activityType

String

アクティビティ・タイプ

サービス内で一意です。たとえば、ディスカッションはactivityType createForumを返すことができます。

commentsCount

String

dataパラメータにcommentsSummaryを指定した場合、commentsCountパラメータが返されます。

createdDate

Date (String)脚注2

アクティビティが作成された日付。

description

String

アクティビティの説明。

detail

String

アクティビティの詳細情報(使用可能な場合)。

たとえば、これによって、メッセージのコンテンツ、ドキュメントのファイル名、お気に入り登録が返されます。

detailURLに似ています。両方またはいずれかを使用することも、どちらも使用しないことも可能です。detailURLは、ポータルでWikiおよびブログを作成する際に使用可能です。

detailURL

String

detailURLは、ポータルでWikiおよびブログを作成する際に使用可能です。WebベースのWebCenter Portalでは、このURLをクリックし、ポータルでWikiまたはブログのページを開くことができます。

detailに似ています。両方またはいずれかを使用することも、どちらも使用しないことも可能です。

displayDescription

String

事前に書式設定された国際化された説明。

displayMessage

String

事前に書式設定された国際化されたメッセージ(テンプレート情報は含まれません)。

groupSpace

groupSpaceReference

アクティビティが実行されたポータルに関する情報

注意: この参照は、ポータル内で発生しなかったアクティビティ(たとえば、ホーム・ポータルで発生したアクティビティ)では存在しません。また、ポータルの作成はホーム・ポータルで発生するため、そのアクティビティにもこの要素はありません。

id

String

メッセージの一意のID

isSummary

trueまたはfalse

このアクティビティが他のアクティビティのサマリーであるのかどうかを示します。

likesCount

String

dataパラメータにlikesSummaryを指定した場合、likesCountパラメータが返されます。

message

String

このアクティビティのローカライズ済文字列

これは、中カッコ({})内に置換文字列が含まれている場合があります。

permission

PRIVATE

SHARED

PUBLIC

このアクティビティの権限レベル

scope

String

アクティビティの範囲

これは、ホーム・ポータルなどのポータルを返すことがあります。

たとえば、ポータルの場合は、次のような文字列が返されます。

s8bba98ff_4cbb_40b8_beee_296c916a23ed

serviceId

String

アクティビティを作成したサービスの一意のID

sharedLink_url

String

次の例で示すように、RESTクライアントによるナビゲーション・リンクをレンダリングするために使用できます。

<param resourceType="urn:oracle:webcenter:activities:parameter">
<links>
<link href="http://www.google.com" />
</links>
<displayName>http://www.google.com</displayName>
<key>_sharedLink_url</key>
<type>custom</type>
</param> "

このパラメータはメッセージ・テンプレートで使用できないことに注意してください(例: {actor[0]}によってポータル{object[0]}はすでに作成されています)。

templateParams

urn:oracle:webcenter:activities:parameter

アクティビティに関連するデータを取得するparam要素のリスト。各templateParam <param>要素で提供されるキーによって、1つ以上のデータ・アイテムをパラメータ化したアクティビティ・メッセージにプラグインできます。「templateParams要素の理解」を参照してください。

custom

Param

カスタム・パラメータには、displayName、keyおよびtypeがあり、URLを持つ場合と持たない場合があります。

脚注2

DATEやBOOLEANなどのデータ型は、STRINGとしてAPIに格納されます。DATEデータ型は、Java標準の日付書式、たとえば、2009-08-21T14:43:11.0013-0700を返します。ここで、0700はタイム・ゾーンを表します。

C.14.1.4.10 templateParams要素の理解

Carlという名前のユーザーの最新のメッセージを表示するとします。「CarlはポータルCustomer Feedbackを作成した」のような情報を表示したいと考えています。templateParams要素が、この問題の解決に役立ちます。

templateParams要素は、タイプoracle:webcenter:activities:activityのオブジェクトで返されます。この要素は、アクティビティに関連する大量のデータを取得します。たとえば、ユーザーが新しいポータルを作成する場合、そのアクティビティのtemplateParams要素が、ユーザーに関する情報およびポータルに関する情報を取得します。そのアクティビティに関連するパラメータ化されたメッセージ文字列内での文字列の置換の実行を可能にするキーが提供されています。

たとえば、ユーザーがポータルを作成する場合、返されるアクティビティ・オブジェクトには、次のようにパラメータ化されている<message>アイテムが含まれています。

<message>{actor[0]} has created the portal {object[0]}</message>

そのアクティビティのtemplateParams要素を解析することで、文字列の置換の実行を可能にする使用可能なキーおよび、ユーザー名やアクティビティなど、表示に適したデータを見つけることができます。

templateParams要素は、comments、likes、commentsSummaryおよびlikesSummaryオブジェクトへのリンクも提供します(それらがdataパラメータを使用してリクエストされている場合)。これらのリンクによって、オブジェクトに関するすべてのコメントまたはお気に入り登録などを問い合せたり、新しいコメントまたはお気に入り登録を投稿できます。サマリー・リンクによって、コメントまたはお気に入り登録カウントおよびいくつかの最近のコメントまたはお気に入り登録が返されます。「コメントとお気に入り登録の理解」も参照してください。

templateParams要素で返されるリンクは、ユーザー、ドキュメント、ポータル、カスタム・オブジェクトなど、どのような種類のオブジェクトが返されるのかによって異なります。詳細は、「urn:oracle:webcenter:activities:parameter」を参照してください。

注意:

templateParams要素には、場合によっては、メッセージ内で直接参照されない要素が含まれることがあります。

relリンクがviaとマークされている場合、それは基盤となるRESTオブジェクト(たとえば、パラメータではなくドキュメント)へのリンクです。relリンクがalternateおよびタイプtext/htmlとマークされている場合、それはそのオブジェクトのHTMLページへのリンクです。ポータル・オブジェクトには、ポータルのためのアクティビティ・ストリーム・リンクが含まれています。ユーザーには、アイコンおよびアクティビティ・ストリーム・リンクがあります。他のオブジェクトには、タグ付けしたアイテムおよび関連するタグ付けしたアイテムのリストへのaltリンクを含めることができます(そのオブジェクトに対してタグ付けが有効化されている場合)。標準オブジェクトで、コメントまたはお気に入り登録がサポートされている場合、前述のとおり、それには、comments/commentsSummaryおよびlikes/likesSummaryを含めることができます。

C.14.1.4.11 コメントとお気に入り登録の理解

comments、commentsSummary、likesおよびlikesSummaryへのハイパーリンクがデフォルトで含まれます(data=data,commentsSummary,likesSummaryを指定してcommentsSummaryおよびlikesSummaryを開くことができます)。コメントおよびお気に入り登録は、アクティビティによって参照されるオブジェクトまたはアクティビティ自体と関連付けることができます。たとえば、ドキュメントを編集する場合、そのコメントはそのドキュメントと関連付けられます。アクティビティ・ストリーム・ページのドキュメント編集アクティビティにコメントを追加する場合、そのコメントは、そのドキュメント編集アクティビティと関連付けられます。

コメントおよびお気に入り登録と関連付けられているリンクは、次のとおりです。

- comments: commentsリンクにより、1つのオブジェクトに対するすべてのコメントを問い合せることができます。このリンクで新しいコメントをPOSTすることもできます。comments POSTの場合、textフィールドが必要です。たとえば、本体データには次のように使用します。
JSON:

{
"text" : "REST Comment"
}

XML:

<text>REST Comment</text>

- commentsSummary: commentsSummaryリンクによって、コメント・カウントおよびいくつかの最近のコメントが返されます。

- likes - likesリンクによって、1つのオブジェクトのすべてのお気に入り登録を問い合せることができます。このリンクで新しいお気に入り登録をPOSTすることもできます。likes POSTに必要なフィールドはありません。

- likesSummary: likesSummaryリンクによって、お気に入り登録カウントおよび現在のユーザーのお気に入り(使用可能な場合)が返されます。

注意:

Likeオブジェクト自体では、DELETEのみがサポートされ、GETはサポートされません。likesCountおよびcommentsCountアイテムによって、現在のオブジェクトのお気に入り登録またはコメントの数が返されます。

次のURLは、ドキュメント・オブジェクトのcomments、commentSummary、likesおよびlikesSummaryに対するGETリクエストの例を示しています。

"http://example.com:8892/rest/api/activities/services/oracle.webcenter.doclib/objectTypes/document/objects/(<document_object_id>)/comments?startIndex=0&amp;itemsPerPage=10&amp;utoken=FCvY3qQSBh0eAByLdxugV-lUgFO3_w**"

"http://example.com:8892/rest/api/activities/services/oracle.webcenter.doclib/objectTypes/document/objects/(<document_object_id>)/commentsSummary?utoken=FCvY3qQSBh0eAByLdxugV-lUgFO3_w**"

"http://example.com:8892/rest/api/activities/services/oracle.webcenter.doclib/objectTypes/document/objects/(<document_object_id>)/likes?startIndex=0&amp;itemsPerPage=10&amp;utoken=FCvY3qQSBh0eAByLdxugV-lUgFO3_w**"

"http://example.com:8892/rest/api/activities/services/oracle.webcenter.doclib/objectTypes/document/objects/(<document_object_id>)/likesSummary?utoken=FCvY3qQSBh0eAByLdxugV-lUgFO3_w**"

ここで<document_object_id>はドキュメント・オブジェクトIDです。

次のURLは、ドキュメント作成アクティビティのcomments、commentSummary、likesおよびlikesSummaryに対するGETリクエストの例を示しています。

"http://example.com:8892/rest/api/activities/ffa9a9f0-d02f-4e30-8c58-8a41b7a6e8a3/comments?startIndex=0&amp;itemsPerPage=10&amp;utoken=FCvY3qQSBh0eAByLdxugV-lUgFO3_w**"

"http://example.com:8892/rest/api/activities/ffa9a9f0-d02f-4e30-8c58-8a41b7a6e8a3/commentsSummary?utoken=FCvY3qQSBh0eAByLdxugV-lUgFO3_w**"

"http://example.com:8892/rest/api/activities/ffa9a9f0-d02f-4e30-8c58-8a41b7a6e8a3/likes?startIndex=0&amp;itemsPerPage=10&amp;utoken=FCvY3qQSBh0eAByLdxugV-lUgFO3_w**"
"http://example.com:8892/rest/api/activities/ffa9a9f0-d02f-4e30-8c58-8a41b7a6e8a3/likesSummary?utoken=FCvY3qQSBh0eAByLdxugV-lUgFO3_w**"

C.14.1.4.12 urn:oracle:webcenter:activities:parameter

templateParams要素によって、一連のparam要素が返されます。param要素によって、返されるアクティビティ・オブジェクトのタイプに固有のデータが返されます。param要素の使用可能なタイプには、次のものがあります。

- user: displayName、guid、id、key、primaryIdおよびtypeを返します。

- document: displayName、iconUrl、id、key、primaryIdおよびtypeを返します。

- custom: displayName、keyおよびtypeを返し、URLを持つ場合と持たない場合があります。

paramは、変数の参照または一般的な形式{prefix[index].variable}のキーである場合もあります。

C.14.1.4.13 urn:oracle:webcenter:activities:activity:icon

このリソース・タイプを使用して、アクティビティのアイコンを取得します(使用可能な場合) (GET)。

C.14.1.4.14 activities:activity:iconへのナビゲーション・パス

この項では、クライアントがハイパーメディアを経由してこのリソースにアクセスする方法を示します:

resourceindex
activities
activity
icon

C.14.1.4.15 iconでサポートされるメソッド

次のメソッドは、このリソースによりサポートされています:

- GET: 指定したアクティビティに使用されるアイコンを返します。

C.14.1.4.16 iconからリンクされるリソース・タイプ

表C-8に、クライアントがこのリソースからリンクできるリソース・タイプを示します。

表C-8 urn:oracle:webcenter:activities:activity:iconに関連するリソース・タイプ

rel

リソース・タイプ

self

urn:oracle:webcenter:parent

urn:oracle:webcenter:activities:activity

C.14.2 コネクションおよびプロファイルREST API

コネクションおよびプロファイルREST APIを使用して、プロファイルまたはコネクション・リストの参照、コネクション・リストの管理、コネクションの追加または削除、コネクションの招待の送信およびプロファイル・ステータス・メッセージの更新を行います。この項では、これらのアクションを実行するために使用するREST APIメソッドの情報を提供します。

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

- コネクションおよびプロファイルのエントリ・ポイント

- コネクションおよびプロファイルのリソース・タイプの分類

- コネクションおよびプロファイルのセキュリティに関する考慮事項

- コネクションおよびプロファイルのリソース・タイプ

C.14.2.1 コネクションおよびプロファイルのエントリ・ポイント

各RESTサービスは、そのサービスのエントリ・ポイントを提供するリソース索引内にリンク要素を持っています。ピープル・コネクションでは、各機能に独自のリンク要素があります。たとえば、ピープル・コネクションのコネクションとプロファイル機能のエントリ・ポイントを見つけるには、次のresourceTypeを持つリンク要素を見つけます。

urn:oracle:webcenter:people (現在のユーザーのプロファイルを返します)

urn:oracle:webcenter:people:person (ユーザーに対する問合せを可能にします)

urn:oracle:webcenter:people:invitations (現在のユーザーによって送信または受信された招待を返します)

注意:

people:personおよびpeople:invitationsリソース・タイプには、templateはありますが、hrefはありません。

対応するhrefまたはtemplate要素によって、URIエントリ・ポイントが提供され、それによって人々のリスト(people)または個々のユーザー(people:person)が返されます。クライアントは、このエントリ・ポイントにHTTPリクエストを送信し、ピープル・コネクションのコネクションとプロファイル機能を使用します。

C.14.2.2 コネクションおよびプロファイルのリソース・タイプの分類

クライアントがエントリ・ポイントを識別すると、リソース・タイプの分類によりナビゲートして、必要な操作を実行できます。個々のリソース・タイプの詳細は、「コネクションおよびプロファイルのリソース・タイプ」の該当の項を参照してください。

ピープル・コネクションのコネクションおよびプロファイル機能のリソース・タイプの分類は、次のとおりです。

urn:oracle:webcenter:people
urn:oracle:webcenter:people:person
urn:oracle:webcenter:people:icon
urn:oracle:webcenter:people:person:list
urn:oracle:webcenter:people:person:listNames
urn:oracle:webcenter:people:person:listName
urn:oracle:webcenter:people:person:list:member
urn:oracle:webcenter:people:person:status
urn:oracle:webcenter:people:invitations
urn:oracle:webcenter:people:invitation

C.14.2.3 コネクションおよびプロファイルのセキュリティに関する考慮事項

ピープル・コネクションREST APIのいずれかにアクセスするには、RESTサービスにログインする必要があります。その後、基礎となるサービスにより、権限の確認などが処理されます。

C.14.2.4 コネクションおよびプロファイルのリソース・タイプ

この項では、各リソース・タイプについて知っておく必要があるすべての情報を提供します。次のトピックが含まれています:

- urn:oracle:webcenter:people

- peopleへのナビゲーション・パス

- peopleでサポートされるメソッド

- linksパラメータの事前定義済セット

- peopleからリンクされるリソース・タイプ

- urn:oracle:webcenter:people:icon

- iconでサポートされるメソッド

- iconからリンクされるリソース・タイプ

- urn:oracle:webcenter:people:person

- personでサポートされるメソッド

- personの読取り専用要素

C.14.2.4.1 urn:oracle:webcenter:people

peopleレスポンスには、1人以上のユーザーのプロファイルの取得に使用するURIが含まれます。

C.14.2.4.2 peopleへのナビゲーション・パス

この項では、クライアントがハイパーメディアを経由してpeopleリソースにアクセスする方法を示します。

resourceIndex
people

C.14.2.4.3 peopleでサポートされるメソッド

次のメソッドは、peopleでサポートされています。

- GET

- リクエスト-パラメータ:

- startIndex - 「共通のリクエスト問合せパラメータ」を参照してください。

- itemsPerPage - 「共通のリクエスト問合せパラメータ」を参照してください。

- projection - 「共通のリクエスト問合せパラメータ」を参照してください。

- data: dataパラメータは、レスポンスで返されるデータを制御するカンマ区切りのリストです。事前定義済セットのbasicは、data=guid,id,displayNameと同等です。事前定義済セットのdataは、ユーザーのすべてのデータを返す標準セットですが、status、manager、reporteesまたはphotosは含まれていません。設定可能な値のフル・リストには、事前定義済セットのbasicとdata、さらに個々のデータ値としてguid、id、displayName、birthday、language、timeZone、name、addresses、organizations、workEmail、phoneNumbers、manager、reportees、photosおよびstatusが含まれます。
dataパラメータとして定数'data'を指定すると、リソースに対してすべての基本情報が返されます。projectionとdataの両方の問合せ文字列パラメータが存在する場合は、dataパラメータを使用して返すデータを決定します。

dataパラメータは、次の値のカンマ区切りリスト値を取って、対応するデータを返すこともできます。guid、id、displayName、birthday、language、timeZone、name、addresses、organizations、workEmail、phoneNumbers、manager、reportees、photosまたはstatus、あるいはその任意の組合せ。

注意:

dataパラメータは、事前定義済セット、値のコレクションまたはセットと値の組合せを受け入れることができます。たとえば、基本データおよびユーザーの生年月日を入手するには、data=basic,birthdayと指定します。

- links: linksパラメータは、レスポンスでどのリンクが返されるのかを制御するカンマ区切りリストです。このパラメータは、事前定義済セット、個々のデータ値または事前定義済セットと個々のデータ値の組合せを受け入れることができます。事前定義済セットは、basic、data、activitiesSet、connectionsSetおよびfeedbackSetです。これらの事前定義済セットについては、「linksパラメータの事前定義済セット」を参照してください。
linksパラメータの個々の値は、person、profile、icon、status、messageBoard、activities、personActivities、connectionActivities、connections、listNames、invitation、givenFeedback、receivedFeedback、userGivenFeedback、manager、reportees、memberです。

projectionとlinksの両方の問合せ文字列パラメータが存在する場合は、linksパラメータを使用して返すリンクを決定します。

- レスポンス-本体: 0個以上の個人オブジェクト。

C.14.2.4.4 linksパラメータの事前定義済セット

次のアイテムは、linksパラメータで返すことができる事前定義済セットです。たとえば、links=basicを指定する場合、それはdata=person,profile,iconを指定することと同等です。必要に応じて、追加のパラメータを指定することもできます。たとえば、data=basic,birthdayと指定できます。

注意:

現在使用できないリンクは、それらがlinksパラメータで指定されている場合でも返されません。

- basic: プロファイルの基本情報を返し、person、profileおよびiconを含む標準セット。

- data: レスポンスに対してすべての基本リンクと、コネクション・リスト、ステータスおよびアクティビティ・ストリーム・テンプレートを返す標準セット。

- activitiesSet: activities、personActivitiesおよびconnectionActivitiesが含まれます。

- connectionsSet: connections、listNamesおよびinvitationが含まれます。

- feedbackSet: givenFeedback、receivedFeedbackおよびuserGivenFeedbackが含まれます。

C.14.2.4.5 peopleからリンクされるリソース・タイプ

表C-9に、クライアントがpeopleリソースからリンクできるリソース・タイプを示します。

表C-9 peopleに関連するリソース・タイプ

rel

リソース・タイプ

urn:oracle:webcenter:people:icon

urn:oracle:webcenter:people:person

urn:oracle:webcenter:people:person:list:connections

urn:oracle:webcenter:people:person:list

urn:oracle:webcenter:activities:stream:person

urn:oracle:webcenter:activities:stream

urn:oracle:webcenter:activities:stream:connections

urn:oracle:webcenter:activities:stream

urn:oracle:webcenter:activities:stream

urn:oracle:webcenter:activities:stream

urn:oracle:webcenter:feedback:all-received

urn:oracle:webcenter:feedback

urn:oracle:webcenter:feedback:all-given

urn:oracle:webcenter:feedback

self

urn:oracle:webcenter:people:person:status

urn:oracle:webcenter:people:person:list:list

urn:oracle:webcenter:people:person:list

self

urn:oracle:webcenter:people:person:listName

urn:oracle:webcenter:activities:stream:list

urn:oracle:webcenter:activities:stream

C.14.2.4.6 urn:oracle:webcenter:people:icon

このリソース・タイプを使用して、指定したプロファイルで使用されるアイコンを取得します(GET)。

people:iconへのナビゲーション・パス

この項では、クライアントがハイパーメディアを経由してこのリソースにアクセスする方法を示します:

resourceindex
people
icon

C.14.2.4.7 iconでサポートされるメソッド

次のメソッドは、このリソースによりサポートされています:

- GET: 指定したプロファイルに使用されるアイコンを返します。

注意:

このリソースには、使用するプロファイル・アイコンのサイズを選択できるテンプレートが含まれています。sizeテンプレート・パラメータは、small、mediumまたはlargeに設定できます。

C.14.2.4.8 iconからリンクされるリソース・タイプ

表C-10に、クライアントがこのリソースからリンクできるリソース・タイプを示します。

表C-10 urn:oracle:webcenter:people:iconに関連するリソース・タイプ

rel

リソース・タイプ

self

urn:oracle:webcenter:people:icon

urn:oracle:webcenter:parent

urn:oracle:webcenter:people

C.14.2.4.9 urn:oracle:webcenter:people:person

personレスポンスには、プロファイル・データおよびユーザー・プロファイルの取得に使用するURIが含まれます。

C.14.2.4.10 personへのナビゲーション・パス

この項では、クライアントがハイパーメディアを経由してpersonリソースにアクセスする方法を示します。

resourceIndex
people

resourceIndex
people
person

resourceIndex
person

author
person

resourceIndex
activities:stream
person

C.14.2.4.11 personでサポートされるメソッド

次のメソッドは、personでサポートされています。

- GET

- リクエスト-パラメータ: q
指定した人を取得するためのqの形式は次のとおりです。

q=[loginid:equals:username]
Or
q=[guid:equals:guid]
Or
q=[email:equals:email]

注意:

パラメータqは、personのresourceIndexテンプレート上のみです。

- レスポンス-本体: message

関連項目:

レスポンスmessageの詳細は、「personの読取り専用要素」を参照してください。

C.14.2.4.12 personの読取り専用要素

表C-11に、personリソースの読取り専用要素を示します。

注意:

personレスポンス内に存在する要素は、ユーザー・リポジトリの構成方法およびそれによってサポートされている要素に応じて異なります。さらに、address、emails、photos、phoneNumbers、organizationなど、表C-11に示すデータのいくつかは複数のインスタンスを持つことができます。

関連項目:

表C-11に示す要素のいくつかは、「linksパラメータの事前定義済セット」で説明している事前定義済セットで返すことができます。

表C-11 personの読取り専用要素

要素

タイプ

説明

guid

String

人の一意のGUID

id

String

人の一意のログインID(つまり、ユーザー名。たとえば、pat_coi)

displayName

String

人の表示名(ユーザーの名前、たとえば、Pat Coi)。これは、リポジトリ構成に応じて、idと同じ値になる場合があります。

birthday

Date (String)脚注3

人の生年月日

connected

Boolean (String)1

この人が現在のユーザーにコネクションを持っているかどうか

language

String

人の優先言語

timeZone

String

人のタイムゾーン

name

name

人の名前情報

nameは、ポータブル連絡先タイプです。詳細は、「nameポータブル連絡先タイプ」を参照してください。

address

address

人の住所情報

addressは、ポータブル連絡先タイプです。詳細は、「addressポータブル連絡先タイプ」を参照してください。

emails

value

人の電子メール

emailsは、valueポータブル連絡先タイプから導出されます。詳細は、「valueポータブル連絡先タイプ」を参照してください。

photos

value

人のプロファイル写真

photosは、valueポータブル連絡先タイプから導出されます。詳細は、「valueポータブル連絡先タイプ」を参照してください。

phoneNumbers

value

人の電話番号

phoneNumberは、valueポータブル連絡先タイプから導出されます。詳細は、「valueポータブル連絡先タイプ」を参照してください。

organizations

organization

人の組織情報

organizationは、ポータブル連絡先タイプです。詳細は、「organizationポータブル連絡先タイプ」を参照してください

manager

personReference

この人の上司

reportees

personReference

この人の直属の部下

status

urn:oracle:webcenter:people:person:status

人のプロファイル・ステータス・メッセージ

脚注3

DATEやBOOLEANなどのデータ型は、STRINGとしてAPIに格納されます。

C.14.2.4.13 personからリンクされるリソース・タイプ

表C-12に、クライアントがpersonリソースからリンクできるリソース・タイプを示します。

表C-12 personに関連するリソース・タイプ

rel

リソース・タイプ

self

urn:oracle:webcenter:people:person

alternate

urn:oracle:webcenter:spaces:profile (HTML)

urn:oracle:webcenter:people:person:list:connections

urn:oracle:webcenter:people:person:list

urn:oracle:webcenter:people:person:listNames

urn:oracle:webcenter:people:person:status

urn:oracle:webcenter:activities:stream:person

urn:oracle:webcenter:activities:stream

urn:oracle:webcenter:activities:stream:connections

urn:oracle:webcenter:activities:stream

urn:oracle:webcenter:activities:stream

urn:oracle:webcenter:activities:stream

urn:oracle:webcenter:messageBoard

urn:oracle:webcenter:feedback:all-given

urn:oracle:webcenter:feedback

urn:oracle:webcenter:feedback:all-received

urn:oracle:webcenter:feedback

C.14.2.4.14 urn:oracle:webcenter:people:person:list

listレスポンスには、コネクション・リスト上のすべてのプロファイルの取得(GET)、ユーザーへのコネクションの招待の送信またはコネクション・リストへのコネクションの追加(POST)、およびコネクション・リストの削除(DELETE)に使用するURIが含まれます。

C.14.2.4.15 listへのナビゲーション・パス

この項では、クライアントがハイパーメディアを経由してlistリソースにアクセスする方法を示します。

resourceIndex
person
listNames
list

resourceIndex
person
list (rel="urn:oracle:webcenter:people:person:list:connections")

C.14.2.4.16 listでサポートされるメソッド

次のメソッドは、listリソースでサポートされています。

- GET

- リクエスト-パラメータ: startIndex、itemsPerPage、projection

関連項目:

startIndexやitemsPerPageなどのREST APIパラメータの詳細は、「共通のリクエスト問合せパラメータ」を参照してください。

- レスポンス-本体: 0個以上のpersonアイテム

- POST

- リクエスト-本体: member

- レスポンス-本体: member

関連項目:

リクエスト要素およびレスポンス要素におけるmemberの詳細は、「urn:oracle:webcenter:people:person:list:member」を参照してください。

- DELETE

- リクエスト

C.14.2.4.17 listからリンクされるリソース・タイプ

表C-13に、クライアントがlistリソースからリンクできるリソース・タイプを示します。

表C-13 listに関連するリソース・タイプ

rel

リソース・タイプ

self urn:oracle:webcenter:people:person:list脚注 4

urn:oracle:webcenter:people:person:list

urn:oracle:webcenter:activities:stream

urn:oracle:webcenter:activities:stream

脚注4

self relには現在、urn:oracle:webcenter:people:person:list (正)ではなく、urn:oracle:webcenter:people:person:list:listが含まれます。@connectionsデフォルト・リストの場合、これには現在、urn:oracle:webcenter:people:person:list:connectionsが含まれます。

C.14.2.4.18 urn:oracle:webcenter:people:person:listNames

listNamesレスポンスには、既存のコネクション・リストの名前と、リストの取得(GET)およびコネクション・リストの作成(POST)に使用するURIが含まれます。

C.14.2.4.19 listNamesへのナビゲーション・パス

この項では、クライアントがハイパーメディアを経由してlistNamesリソースにアクセスする方法を示します。

resourceIndex
person
listNames

C.14.2.4.20 listNamesでサポートされるメソッド

次のメソッドは、listNamesリソースでサポートされています。

- GET

- リクエスト

- レスポンス: 本体: 0個以上のlistNameアイテム

- POST

- リクエスト-本体: listName

- レスポンス-本体: listName

関連項目:

listNameの詳細は、「urn:oracle:webcenter:people:person:listName」を参照してください。

C.14.2.4.21 listNamesからリンクされるリソース・タイプ

表C-14に、クライアントがlistNamesリソースからリンクできるリソース・タイプを示します。

表C-14 listNamesに関連するリソース・タイプ

rel

リソース・タイプ

self

urn:oracle:webcenter:people:person:listNames

C.14.2.4.22 urn:oracle:webcenter:people:person:listName

listNameレスポンスには、コネクション・リストの名前およびコネクション・リストへのアクセスに使用するURIが含まれます。「urn:oracle:webcenter:people:person:listName」も参照してください。

C.14.2.4.23 listNameへのナビゲーション・パス

この項では、クライアントがハイパーメディアを経由してlistNameリソースにアクセスする方法を示します。

resourceIndex
person
listNames
listName

C.14.2.4.24 listNameでサポートされるメソッド

次のメソッドは、listNameリソースでサポートされています。

- DELETE

- リクエスト

C.14.2.4.25 listNameの書込み可能要素

表C-15に、listNameリソースの書込み可能要素を示します。

表C-15 listNameの書込み可能要素

要素

タイプ

必須

制約

説明

name

String

はい

1文字以上の文字

単一のリスト名

C.14.2.4.26 listNameからリンクされるリソース・タイプ

表C-16に、クライアントがlistNameリソースからリンクできるリソース・タイプを示します。

表C-16 listNameに関連するリソース・タイプ

rel

リソース・タイプ

self urn:oracle:webcenter:people:person:list

urn:oracle:webcenter:people:person:list

urn:oracle:webcenter:activities:stream:list

urn:oracle:webcenter:activities:stream

C.14.2.4.27 urn:oracle:webcenter:people:person:list:member

memberレスポンスには、コネクション・リストからのコネクションの削除に使用するURIが含まれます。

C.14.2.4.28 memberへのナビゲーション・パス

この項では、クライアントがハイパーメディアを経由してmemberリソースにアクセスする方法を示します。

resourceIndex
person
list
member

C.14.2.4.29 memberでサポートされるメソッド

次のメソッドは、memberでサポートされています。

- DELETE

- リクエスト

C.14.2.4.30 memberの書込み可能要素

表C-17に、memberリソースの書込み可能要素を示します。memberの書込み可能要素は、コネクションをリストに追加したり、ユーザーにコネクションの招待を送信する場合に使用されます。memberリソース自体は、コネクションを削除するためのものであり、書込み可能要素を使用しません。

表C-17 memberの書込み可能要素

要素

タイプ

必須

制約

説明

guid

String

はい

1文字以上の文字

ユーザーのGUID

message

String

いいえ

0文字以上の文字

招待メッセージ

これは、ユーザーにコネクションの招待を送信する場合(つまり、ユーザー作成のコネクション・リストではなく、@connectionsリストにPOSTする場合)にのみ使用します。

C.14.2.4.31 urn:oracle:webcenter:people:person:status

statusレスポンスには、指定したユーザーのプロファイル・ステータス・メッセージの取得(GET)および更新(PUT)に使用するURIが含まれます。

C.14.2.4.32 statusへのナビゲーション・パス

この項では、クライアントがハイパーメディアを経由してstatusリソースにアクセスする方法を示します。

resourceIndex
people
person
status

C.14.2.4.33 statusでサポートされるメソッド

次のメソッドは、statusリソースでサポートされています。

- GET

- リクエスト

- レスポンス-本体: status

- PUT

- リクエスト-本体: status

- レスポンス-本体: status

C.14.2.4.34 statusの書込み可能要素

表C-18に、statusリソースの書込み可能要素を示します。

表C-18 statusの書込み可能要素

要素

タイプ

必須

制約

説明

note

String

はい

1文字以上の文字

ステータス・メッセージの内容

C.14.2.4.35 statusからリンクされるリソース・タイプ

表C-19に、クライアントがstatusリソースからリンクできるリソース・タイプを示します。

表C-19 statusに関連するリソース・タイプ

rel

リソース・タイプ

self

urn:oracle:webcenter:people:person:status

C.14.2.4.36 urn:oracle:webcenter:people:invitations

invitationsレスポンスには、招待の取得に使用するURIが含まれます(GET)。別のユーザーに招待を送信(POST)することもできます。

C.14.2.4.37 invitationsへのナビゲーション・パス

この項では、クライアントがハイパーメディアを経由してinvitationsリソースにアクセスする方法を示します。

resourceIndex
invitations

ユーザーに対してコネクションをまだ持っていない場合、彼らにコネクションの招待を送信するために、そのユーザーのプロファイルからinvitationsリソースにナビゲートすることもできます。このパスは、POSTに対してのみ使用されます。

resourceIndex
person
invitations

C.14.2.4.38 invitationsでサポートされるメソッド

次のメソッドは、invitationsリソースでサポートされています。

- GET

- リクエスト-パラメータ: q
現在のユーザーに送信された招待を取得するためのqの形式は次のとおりです。

q=[invitee:equals:@me]

現在のユーザーから送信された招待を取得するためのqの形式は次のとおりです。

q=[invitor:equals:@me]

- レスポンス-本体: 0個以上の招待

- POST

- リクエスト-本体: invitation

- レスポンス-本体: invitation

C.14.2.4.39 invitationsの書込み可能要素

表C-20に、invitationsリソースの書込み可能要素を示します。

表C-20 invitationsの書込み可能要素

要素

タイプ

必須

制約

説明

message

String

いいえ

1文字以上の文字

招待に添付されるメッセージ

C.14.2.4.40 invitationsからリンクされるリソース・タイプ

表C-21に、クライアントがinvitationsリソースからリンクできるリソース・タイプを示します。

表C-21 invitationsに関連するリソース・タイプ

rel

リソース・タイプ

self

urn:oracle:webcenter:people:invitation

C.14.2.4.41 urn:oracle:webcenter:people:invitation

invitationレスポンスには、送信した招待の削除(DELETE)、または受信した招待の削除(DELETE)または更新(PUT)に使用するURIが含まれます。

C.14.2.4.42 invitationへのナビゲーション・パス

この項では、クライアントがハイパーメディアを経由してinvitationリソースにアクセスする方法を示します。

resourceIndex
invitations
invitation

C.14.2.4.43 invitationでサポートされるメソッド

次のメソッドは、invitationリソースでサポートされています。

- PUT

- リクエスト-本体: invitation

- レスポンス-本体: invitation

- DELETE

- リクエスト

C.14.2.4.44 invitationの書込み可能要素

表C-22に、invitationリソースの書込み可能要素を示します。

表C-22 invitationの書込み可能要素

要素

タイプ

必須

制約

説明

status

String

はい(PUT)

ACCEPTED

IGNORED

招待のステータス。

注意: 招待を受け入れるか無視するときに、それが自身の招待のリストから削除されます。

C.14.2.4.45 invitationの読取り専用要素

表C-23に、invitationリソースの読取り専用要素を示します。

表C-23 invitationの読取り専用要素

要素

タイプ

説明

id

String

招待の一意のID

invitee

personReference

招待の送信先のユーザー

invitor

personReference

招待の送信元のユーザー

sentDate

Date (String)脚注5

招待が送信された日付

脚注5

DATEやBOOLEANなどのデータ型は、STRINGとしてAPIに格納されます。

C.14.2.4.46 invitationからリンクされるリソース・タイプ

表C-24に、クライアントがinvitationリソースからリンクできるリソース・タイプを示します。

表C-24 invitationsに関連するリソース・タイプ

rel

リソース・タイプ

self

urn:oracle:webcenter:people:invitation

C.14.3 フィードバックREST API

フィードバックREST APIを使用して、フィードバックを読み取り、削除します。この項では、これらのアクションを実行するために使用するREST APIメソッドの情報を提供します。

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

- フィードバックのエントリ・ポイント

- フィードバックのリソース・タイプの分類

- フィードバックのセキュリティに関する考慮事項

- フィードバックのリソース・タイプ

C.14.3.1 フィードバックのエントリ・ポイント

各RESTサービスは、そのサービスのエントリ・ポイントを提供するリソース索引内にリンク要素を持っています。ピープル・コネクションでは、各機能に独自のlink要素があります。ピープル・コネクションのフィードバック機能のエントリ・ポイントを見つけるには、次のresourceTypeを持つlink要素を見つけます。

urn:oracle:webcenter:feedback

対応するhrefまたはtemplate要素によって、URIエントリ・ポイントが提供され、それによって現在のユーザーの受信したフィードバックがすべて返されます。クライアントは、このエントリ・ポイントにHTTPリクエストを送信し、ピープル・コネクションのフィードバック機能を使用します。

関連項目:

リソース索引の詳細は、「リソース索引の使用」を参照してください。

リソース・タイプの詳細は、「リソース・タイプ」を参照してください。

C.14.3.2 フィードバックのリソース・タイプの分類

クライアントがエントリ・ポイントを識別すると、リソース・タイプの分類によりナビゲートして、必要な操作を実行できます。個々のリソース・タイプの詳細は、「フィードバックのリソース・タイプ」の該当の項を参照してください。

ピープル・コネクションのフィードバック機能のリソース・タイプの分類は、次のとおりです。

urn:oracle:webcenter:feedback
urn:oracle:webcenter:feedback:message

C.14.3.3 フィードバックのセキュリティに関する考慮事項

ピープル・コネクションREST APIのいずれかにアクセスするには、RESTサービスにログインする必要があります。その後、基礎となるサービスにより、権限の確認などが処理されます。

関連項目:

一般的なセキュリティに関する考慮事項については、「WebCenter Portal REST APIのセキュリティに関する考慮事項」を参照してください。

C.14.3.4 フィードバックのリソース・タイプ

この項では、各リソース・タイプについて知っておく必要があるすべての情報を提供します。次のトピックが含まれています:

- urn:oracle:webcenter:feedback

- feedbackへのナビゲーション・パス

- feedbackでサポートされるメソッド

- feedbackからリンクされるリソース・タイプ

- urn:oracle:webcenter:feedback:message

- messageへのナビゲーション・パス

- messageでサポートされるメソッド

- messageの読取り専用要素

- feedbackからリンクされるリソース・タイプ

C.14.3.4.1 urn:oracle:webcenter:feedback

feedbackレスポンスには、フィードバック・メッセージの読取りに使用するURIが含まれます。

C.14.3.4.2 feedbackへのナビゲーション・パス

この項では、クライアントがハイパーメディアを経由してfeedbackリソースにアクセスする方法を示します。

resourceIndex
feedback

resourceIndex
person
feedback

C.14.3.4.3 feedbackでサポートされるメソッド

次のメソッドは、feedbackリソースでサポートされています。

- GET

- リクエスト-パラメータ: startIndex、itemsPerPage

関連項目:

startIndexやitemsPerPageなどのREST APIパラメータの詳細は、「共通のリクエスト問合せパラメータ」を参照してください。

- レスポンス-本体: message

関連項目:

messageの詳細は、「urn:oracle:webcenter:feedback:message」を参照してください。

- POST: 許可されている場合は、ターゲット・ユーザーに対するフィードバックを追加できます。このメソッドは、現在のユーザーがターゲット・ユーザーへのコネクションを持っており、そのユーザーに対するフィードバックを追加する権限を持っている場合にのみ使用可能です。

- リクエスト - 本体: feedback

<message resourceType="urn:oracle:webcenter:feedback:message">
<body>test from REST API</body>
<receivedUser>
<guid>4F16DD80393611DFBF895F177662C511</guid>
</receivedUser>
</message>

C.14.3.4.4 feedbackからリンクされるリソース・タイプ

表C-25に、クライアントがfeedbackリソースからリンクできるリソース・タイプを示します。

表C-25 feedbackに関連するリソース・タイプ

rel

リソース・タイプ

self urn:oracle:webcenter:feedback:all-received

urn:oracle:webcenter:feedback

self urn:oracle:webcenter:feedback:all-given

urn:oracle:webcenter:feedback

NA

urn:oracle:webcenter:feedback:message

C.14.3.4.5 urn:oracle:webcenter:feedback:message

messageレスポンスには、フィードバック・メッセージ・データおよびフィードバック・メッセージの削除に使用するURIが含まれます。

C.14.3.4.6 messageへのナビゲーション・パス

この項では、クライアントがハイパーメディアを経由してmessageリソースにアクセスする方法を示します。

resourceIndex
feedback
message

resourceIndex
person
feedback
message

C.14.3.4.7 messageでサポートされるメソッド

次のメソッドは、messageでサポートされています。

- DELETE

- リクエスト

C.14.3.4.8 messageの読取り専用要素

表C-26に、messageリソースの読取り専用要素を示します。

表C-26 messageの読取り専用要素

要素

タイプ

説明

body

String

メッセージ・コンテンツ

id

String

メッセージの一意のID

author

personReference

メッセージを作成したユーザー

created

Date (String)脚注6

リストが作成された日付

receivedUser

personReference

フィードバックを受信したユーザーへの人の参照

脚注6

DATEやBOOLEANなどのデータ型は、STRINGとしてAPIに格納されます。

C.14.3.4.9 feedbackからリンクされるリソース・タイプ

表C-27に、クライアントがfeedbackリソースからリンクできるリソース・タイプを示します。

表C-27 messageに関連するリソース・タイプ

rel

リソース・タイプ

self

urn:oracle:webcenter:feedback:message

C.14.4 メッセージ・ボードREST API

メッセージ・ボードREST APIを使用して、ユーザーのメッセージ・ボードまたはポータル・メッセージ・ボードへのメッセージの投稿、読取りおよび削除を行います。この項では、これらのアクションを実行するために使用するREST APIメソッドの情報を提供します。

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

- メッセージ・ボードのエントリ・ポイント

- メッセージ・ボードのリソース・タイプの分類

- メッセージ・ボードのセキュリティに関する考慮事項

- メッセージ・ボードのリソース・タイプ

- 可視性に基づくメッセージのフィルタ処理

C.14.4.1 メッセージ・ボードのエントリ・ポイント

各RESTサービスには、そのサービスのエントリ・ポイントを提供するリソース索引内にlink要素があります。ピープル・コネクションでは、各機能に独自のlink要素があります。ピープル・コネクションのメッセージ・ボード機能のエントリ・ポイントを見つけるには、次のresourceTypeを持つlink要素を見つけます。

urn:oracle:webcenter:messageBoard

注意:

リソース索引からのエントリ・ポイントに加えて、個々のユーザーのメッセージ・ボードにナビゲートするために、メッセージ・ボード機能には、ポータル・メッセージ・ボードのポータル・レスポンスからのエントリ・ポイントもあります。

対応するhrefまたはtemplate要素によって、URIエントリ・ポイントが提供され、それによって現在のユーザーのメッセージ・ボードが返されます。クライアントは、このエントリ・ポイントにHTTPリクエストを送信し、ピープル・コネクションのメッセージ・ボード機能を使用します。

関連項目:

リソース索引の詳細は、「リソース索引の使用」を参照してください。

リソース・タイプの詳細は、「リソース・タイプ」を参照してください。

C.14.4.2 メッセージ・ボードのリソース・タイプの分類

クライアントがエントリ・ポイントを識別すると、リソース・タイプの分類によりナビゲートして、必要な操作を実行できます。個々のリソース・タイプの詳細は、「メッセージ・ボードのリソース・タイプ」の該当の項を参照してください。

ピープル・コネクションのメッセージ・ボード機能のリソース・タイプの分類は、次のとおりです。

urn:oracle:webcenter:messageBoard
urn:oracle:webcenter:messageBoard:message

C.14.4.3 メッセージ・ボードのセキュリティに関する考慮事項

ピープル・コネクションREST APIのいずれかにアクセスするには、RESTサービスにログインする必要があります。その後、基礎となるサービスにより、権限の確認などが処理されます。

関連項目:

一般的なセキュリティに関する考慮事項については、「WebCenter Portal REST APIのセキュリティに関する考慮事項」を参照してください

C.14.4.4 メッセージ・ボードのリソース・タイプ

この項では、各リソース・タイプについて知っておく必要があるすべての情報を提供します。次のトピックが含まれています:

- urn:oracle:webcenter:messageBoard

- messageBoardへのナビゲーション・パス

- messageBoardでサポートされるメソッド

- messageBoardの読取り専用要素

- messageBoardからリンクされるリソース・タイプ

- urn:oracle:webcenter:messageBoard:message

- messageへのナビゲーション・パス

- messageでサポートされるメソッド

- messageの書込み可能要素

- messageの読取り専用要素

- messageからリンクされるリソース・タイプ

C.14.4.4.1 urn:oracle:webcenter:messageBoard

messageBoardレスポンスには、ポータルおよび個々のユーザーのメッセージ・ボード・メッセージの読取り(GET)および投稿(POST)に使用するURIが含まれます。

C.14.4.4.2 messageBoardへのナビゲーション・パス

この項では、クライアントがハイパーメディアを経由してmessageBoardリソースにアクセスする方法を示します。

resourceIndex
messageBoard

resourceIndex
person
messageBoard

resourceIndex
spaces
space
messageBoard

C.14.4.4.3 messageBoardでサポートされるメソッド

次のメソッドは、messageBoardリソースでサポートされています。

- GET

- リクエスト-パラメータ: startIndex、itemsPerPage

関連項目:

startIndexやitemsPerPageなどのREST APIパラメータの詳細は、「共通のリクエスト問合せパラメータ」を参照してください。

- レスポンス-本体: message

注意:

メッセージを読み取る(取得する)ためのREST GETコマンドは、デフォルトで表示されているメッセージをすべて取得します。「可視性に基づくメッセージのフィルタ処理」で説明されるように、アプリケーション・ユーザー・インタフェースを介してプライベートまたは非表示のメッセージも取得できます。メッセージの非表示および表示の詳細は、『Oracle Fusion Middleware Oracle WebCenter Portalでのポータルの構築』のポータルへのメッセージおよびフィードバックの追加に関する項を参照してください。

- POST

- リクエスト-本体: message
メッセージのPOSTでは、メッセージへのリンクURLの組込みがサポートされています。

関連項目:

messageの詳細は、「urn:oracle:webcenter:messageBoard:message」を参照してください。

C.14.4.4.4 messageBoardの読取り専用要素

表C-28に、messageBoardリソースの読取り専用要素を示します。

表C-28 messageの読取り専用要素

要素

タイプ

説明

messageType

String

メッセージにリンクがある場合、linkを返します。それ以外の場合は、nullを返します。

link

String

リンクとともにメッセージの次のリンク・データを含みます。name、url、icon、description、mimeType、objectId、objectType、serviceId。

C.14.4.4.5 messageBoardからリンクされるリソース・タイプ

表C-29に、クライアントがmessageBoardリソースからリンクできるリソース・タイプを示します。

表C-29 messageBoardに関連するリソース・タイプ

rel

リソース・タイプ

self

urn:oracle:webcenter:messageBoard

NA

urn:oracle:webcenter:messageBoard:message

C.14.4.4.6 urn:oracle:webcenter:messageBoard:message

messageレスポンスには、メッセージ・ボード・メッセージ・データと、ポータルまたは個々のユーザーのメッセージ・ボード・メッセージの読取り(GET)、改訂(PUT)および削除(DELETE)に使用するURIが含まれます。

C.14.4.4.7 messageへのナビゲーション・パス

この項では、クライアントがハイパーメディアを経由してmessageリソースにアクセスする方法を示します。

resourceIndex
messageBoard
message

resourceIndex
person
messageBoard
message

resourceIndex
spaces
space
messageBoard
message

C.14.4.4.8 messageでサポートされるメソッド

次のメソッドは、messageリソースでサポートされています。

- GET

- リクエスト

- レスポンス-本体: message

- PUT

- リクエスト-本体: message

- レスポンス-本体: message

- DELETE

- リクエスト

C.14.4.4.9 messageの書込み可能要素

表C-30に、messageリソースの書込み可能要素を示します。

表C-30 messageの書込み可能要素

要素

タイプ

必須

制約

説明

body

String

はい

1文字以上の文字

メッセージ・コンテンツ

C.14.4.4.10 messageの読取り専用要素

表C-31に、messageリソースの読取り専用要素を示します。

表C-31 messageの読取り専用要素

要素

タイプ

説明

id

String

メッセージの一意のID

author

personReference

メッセージを作成したユーザー

created

Date (String)脚注7

リストが作成された日付

脚注7

DATEやBOOLEANなどのデータ型は、STRINGとしてAPIに格納されます。

C.14.4.4.11 messageからリンクされるリソース・タイプ

表C-32に、クライアントがmessageリソースからリンクできるリソース・タイプを示します。

表C-32 messageに関連するリソース・タイプ

rel

リソース・タイプ

self

urn:oracle:webcenter:messageBoard:message

C.14.4.5 可視性に基づくメッセージのフィルタ処理

メッセージを取得するREST GETコマンドでデフォルトにより、表示されるすべてのメッセージを取得しても、一連の可視性フィルタを使用するアプリケーション・ユーザー・インタフェースを介して、プライベートまたは非表示のメッセージも取得できます。

メッセージ・ボードに投稿されたメッセージは次の可視性条件を持つことができます。

- パブリック

- プライベート

- 非表示

- パブリックかつ非表示

- プライベートかつ非表示

デフォルトでは、メッセージはパブリックです。

C.14.4.5.1 プライベート・メッセージ

メッセージ・ボードの所有者は、任意のメッセージをプライベートとしてマークできます。メッセージがプライベートとしてマークされると、そのメッセージは、メッセージの所有者がプライベート・メッセージを選択して他の人に送信しないかぎり、所有者以外には表示されません。そうでない場合、他のユーザーがプライベート・メッセージを含むメッセージ・ボードを表示しても、パブリック・メッセージのみが表示されます。

C.14.4.5.2 非表示メッセージ

メッセージ・ボードの所有者は、任意のメッセージを非表示としてマークできます。メッセージが非表示としてマークされると、そのメッセージはメッセージ・ボードの所有者には表示されませんが、メッセージ・ボードを表示する他のユーザーには表示されたままになります。

C.14.4.5.3 メッセージ・ボードのREST URL

メッセージ・ボードURLフィルタのコンテキストは次のとおりです。

rest/api/messageBoards/<BOARD-TYPE>/<GUID>/<FILTER-TYPE>

説明:

- <BOARD-TYPE>はpersonまたはspaceのいずれか

- <GUID >は@me、person <GUID> (<BOARD-TYPE>がpersonの場合)またはspace <GUID> (<BOARD-TYPE>がportalの場合)のいずれか

- <FILTER-TYPE>はperson <BOARD-TYPE>の場合にのみ適用され、次のうちのいずれかです。

- null: (デフォルト)すべてのメッセージを表示

- private: プライベート・メッセージを表示

- public: パブリック・メッセージを表示

- hidden: 非表示かつパブリックのメッセージを表示

- private_hidden: プライベートかつ非表示のメッセージを表示

適用されるHTMLメソッドのコンテキストで、使用可能なフィルタを次に示します。

GET

- @me

- すべて rest/api/messageBoards/person/@me

- プライベート rest/api/messageBoards/person/@me/private

- パブリック rest/api/messageBoards/person/@me/public

- 非表示かつパブリック rest/api/messageBoards/person/@me/hidden

- プライベートかつ非表示 rest/api/messageBoards/person/@me/private_hidden

- person
rest/api/messageBoards/person/<GUID>

GUIDがログイン・ユーザーのGUIDと一致する場合は、@meと同じフィルタ操作が適用されます。GUIDが異なる場合は、使用可能なフィルタ操作はありません。

- space
rest/api/messageBoards/space/<GUID>

可視性に基づくフィルタ操作は使用できません。

POST

- @me

- すべて rest/api/messageBoards/person/@me

- プライベート

{"body" : "<BODY_CONTENT>",
"visibilityType" : "private"}

- パブリック

{"body" : "<BODY_CONTENT>",
"visibilityType" : "public"}

- 非表示かつパブリック

{"body" : "<BODY_CONTENT>",
"visibilityType" : "hidden"}

- プライベートかつ非表示

{"body" : "<BODY_CONTENT>",
"visibilityType" : "private_hidden"}

- person rest/api/messageBoards/person/<GUID> GUIDがログイン・ユーザーのGUIDと同じ場合は、GETのフィルタが適用されます。ユーザーが異なる場合は、次のフィルタが適用されます。

- パブリック

{"body" : "<BODY_CONTENT>",
"visibilityType" : "public"}

- プライベート

{"body" : "<BODY_CONTENT>",
"visibilityType" : "private"}

- space
rest/api/messageBoards/space/<GUID>

可視性に基づくフィルタ操作は使用できません。

PUT

- @me

- すべて est/api/messageBoards/person/@me/messages/<msg guid>

- プライベート

{"body" : "<BODY_CONTENT>",
"visibilityType" : "private"}

- パブリック

{"body" : "<BODY_CONTENT>",
"visibilityType" : "public"}

- 非表示かつパブリック

{"body" : "<BODY_CONTENT>",
"visibilityType" : "hidden"}

- プライベートかつ非表示

{"body" : "<BODY_CONTENT>",
"visibilityType" : "private_hidden"}

- person rest/api/messageBoards/person/<GUID>/messages/<msg guid> GUIDがログイン・ユーザーのGUIDと同じ場合は、GETのフィルタが適用されます。ユーザーが異なる場合は、次のフィルタが適用されます。

- パブリック

{"body" : "<BODY_CONTENT>",
"visibilityType" : "public"}

- プライベート

{"body" : "<BODY_CONTENT>",
"visibilityType" : "private"}

- space
rest/api/messageBoards/space/<GUID>/messages/<msg guid>

可視性に基づくフィルタ操作は使用できません。

C.14.5 招待の作成

この項では、ピープル・コネクション・サービスREST APIを使用して別のユーザーを招待してコネクション・リストに追加する方法を示します。招待が作成された後、招待を受けた人は、受け入れるか拒否するかを選択できます。この例では、招待の削除方法も示します。

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

- 招待の作成

- 招待の受入れ

- 招待の削除

C.14.5.1 招待の作成

1. 最初の手順は、REST APIメソッドでの通常の場合と同様に、リソース索引を取得することです。

GET http://<host:port>/rest/api/resourceIndex

2. 次に、コネクションを持ちたい人を見つけます。これを行うには、次の手順を実行します。

a. リソース索引リストで、次のリソース・タイプを持つリンクについてスキャンします。

urn:oracle:webcenter:people:person

b. 招待したいユーザーの検索を実行します。この例では、ユーザーの名前はMontyです。

GET http://<host:port>/rest/api/people?q=loginid:equals:monty&utoken=ASDF

c. 図C-2に示すように、レスポンスでMontyのGUIDを探します。

図C-2 ユーザーのGUIDを含むレスポンス

d. GUIDを保存し、それを使用してそのユーザーとコネクションを持てるようにします。

3. 招待を受ける人のGUIDを把握したら、その人を追加するリソースを見つける必要があります。この場合は、自身のconnectionsにその人を追加します。
自分のconnectionsリストを見つけるには、まず、ピープル・コネクションに関する項で"connections"を調べます。表C-12で、personリソースからconnectionsにリンクしていることがわかります。便宜上、この表を図C-3に示します。

図C-3 connectionsリンクの検出

connectionsがpersonリソースからリンクしていることがわかったので、personリソースを見つける必要があります。URNが示すように、次の手順に従ってpeopleリソースからpersonリソースにナビゲートします。

4. 次のように、リソース索引に戻ります(または、前回表示したresourceIndexのキャッシュされたバージョンを使用します)。

GET http://<host:port>/rest/api/resourceIndex

5. peopleリソースについてスキャンして、次のものを見つけます。

urn:oracle:webcenter:people

6. peopleリソースのリンクを使用して自身のリストにアクセスします。

GET http://<host:port>/rest/api/people/@me/lists/@self?utoken=ASDF

7. 表C-12に示されているresourceTypeおよびrelについて、返されたリンクを調べます。

resourceType="urn:oracle:webcenter:people:person:list
rel="urn:oracle:webcenter:people:person:list:connections

8. 自身のconnectionsリストのURIを使用して招待を作成し、次のようにPOSTを実行します。

POST http://<host:port>/rest/api/people/@me/lists/@connections?utoken=ASDF

Headers --  Accept:application/json, Content-Type:application/json
Body -- {"message":"Monty, do you want to join my connections list?","guid":"1AE5AF102E2611E09F062B573E287934"}

9. これで、Montyのアカウントにログインしたときに、招待が追加されていることを確認できます(図C-4を参照)。

図C-4 招待が表示されているアクティビティ・ストリーム

C.14.5.2 招待の受入れ

招待が送信された後、次のステップでは、招待を受けた人(Monty)が招待を受け入れます。

1. 2番目のRESTクライアントを使用して、次のようにリソース索引を取得します。

GET http://<host:port>/rest/api/resourceIndex

2. Montyとしてログインします。

3. 次のリクエストを実行して、Montyに送信されたすべての招待をリストします。

GET http://<host:port>/rest/api/people/invitations?q=invitee:equals:@me&utoken=ASDF

レスポンスにリストされている各招待要素には、UPDATE操作をサポートするリンクが含まれており、それは次のようなものになります。

<links>
<link capabilities="urn:oracle:webcenter:delete urn:oracle:webcenter:update"
href="http://<host:port>/rest/api/people/invitations/<invitationid>?utoken=ASDF"
rel="self" resourceType="urn:oracle:webcenter:people:invitation"/>
</links>
<id><invitationid></id>

4. 招待を受け入れるには、次のリクエストを実行します。

PUT http://<host:port>/rest/api/people/invitations/<invitationid>?utoken=ASDF

Headers
Accept -> application/xml
Content-Type -> application/xml

Body
<invitation>
<id><invitationid></id>
<status>accepted</status>
</invitation>

C.14.5.3 招待の削除

招待を開始した後、invitor:equals:@meを指定することで、自身のアカウントからその招待を表示できます。次に例を示します。

GET http://<host:port>/rest/api/people/invitations?q=invitor:equals:@me&utoken=ASDF

レスポンスにリストされている各招待要素には、DELETE操作をサポートするリンクが含まれており、それは次のようなものになります。

<links>
<link resourceType="urn:oracle:webcenter:people:invitation"
rel="self"
href="http://host_name:port_name/rest/api/people/invitations/
e9073cdb-56ab-423d-8b1f-1220c802bdd4?
utoken="FN0SEFwX42OCntwtx9a1dSbhqocO_w**"
capabilities="urn:oracle:webcenter:delete"/>
</links>

招待を受けた人は、自身のアカウントから招待を削除することもできます。招待を受けた人は、次のように指定することで自身の招待のリストを取得できます。

GET http://<host:port>/rest/api/people/invitations?q=invitee:equals:@me&utoken=ASDF

DELETEからのレスポンスは、単に204のステータス・コードです。

C.15 コンテンツ管理REST API

この項は、OASIS CMIS仕様を補完するものであり、コンテンツ管理REST APIの具体的な実装について詳しく説明します。

OASIS CMIS (Content Management Interoperability Service)技術委員会は、Enterprise Content Management (ECM)システムの相互運用性の向上を可能にするWebサービス・インタフェース仕様の標準化を目指して活動しています。詳細は、OASIS CMISサイトを参照してください。

http://www.oasis-open.org/committees/cmis/

まず最初に、すべてのユーザーはOASIS CMIS仕様を確認する必要があります。この項では、Content Management Interoperability Services (CMIS)バージョン1.0を参照しますが、これは次のURLから表示できます。

http://docs.oasis-open.org/cmis/CMIS/v1.0/cmis-spec-v1.0.html

コンテンツ管理REST APIは、CMIS RESTful AtomPubサーバー・バインディングを使用して、アプリケーション内に構成されたOracle Content Serverのリポジトリにアクセスするサーバーを提供します。

この仕様には、ドメイン・モデルと2つのサーバー・バインディングが含まれています。前述のように、コンテンツ管理REST APIによって現在実装されているのは、RESTful AtomPubバインディングのみです。AtomおよびAtomPubはレスポンスのデフォルト・フォーマットであるため、ご使用に際してはこれらを十分理解していることが必要です。

注意:

CMISは、広範にわたる様々なコンテンツ・システムのための最低限の共通の基準であり、Oracle WebCenter Contentの機能と直接連携していません。利用可能な機能の詳細は、コンテンツ管理REST APIのサービス・ドキュメントを参照してください。

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

- CMISドメイン・モデル

- CMIS第II部: RESTful AtomPubバインディング

- コンテンツ管理REST APIのベスト・プラクティスおよび例

C.15.1 CMISドメイン・モデル

CMIS仕様の2項: 「Domain Model」では、1つ以上のコンテンツ管理リポジトリとともに動作するアプリケーションで使用可能なドメイン・モデルを定義しています。

- データ・モデル

- サービス

C.15.1.1 データ・モデル

コンテンツ管理REST APIのサービス・ドキュメントは、AtomPubワークスペースで構成されています。ワークスペースはそれぞれ、コンテンツ接続にマップされます(コンテンツ管理REST APIでサポートされているのは、Oracle WebCenter Contentリポジトリのみです)。サービス・ドキュメントの詳細は、次項「CMIS第II部: RESTful AtomPubバインディング」を参照してください。

C.15.1.1.1 リポジトリ

このリリースでは、2.1.1項にリストされているオプション機能の一部は実装されていません。今後のリリースで、バージョニング、ACL、ポリシー、リレーションシップ、変更ログ、フォルダの下位要素/ツリーおよびレンディションの実装が検討される予定です。

コンテンツ管理REST API実装には、具体的に次のオプション機能があります。

capabilityGetDescendants = true
capabilityGetFolderTree = false
capabilityContentStreamUpdatability = anytime
capabilityChanges = none
capabilityRenditions = none
capabilityMultifiling = false
capabilityUnfiling = false
capabilityVersionSpecificFiling = false
capabilityPWCUpdateable = false
capabilityPWCSearchable = false
capabilityAllVersionsSearchable = false
capabilityJoin = none
capabilityACL = none
capabilityQuery = none, metadataonly, or both combined

C.15.1.1.2 オブジェクト

コンテンツ管理REST APIでは、ドキュメント・オブジェクトおよびフォルダ・オブジェクトがサポートされています。CMISでは、ノードのcmis:baseTypeIdはcmis:folderまたはcmis:documentとなります。また、タイプのcmis:baseIdはcmis:folderまたはcmis:documentとなります。

C.15.1.1.3 オブジェクト型

CMISオブジェクト型には、Oracle WebCenter Content: Content Serverメタデータ・フィールド定義およびOracle WebCenter ContentのSite Studioリージョン定義からマップされたフィールドが含まれています。

Oracle WebCenter Contentメタデータ・フィールドからCMISプロパティ定義へのマッピングは、次のとおりです。

表C-33 Content Serverメタデータのマッピング

Oracle WebCenter Contentメタデータ

CMISプロパティ定義

選択リストを検証して構成されたオプション・リスト、およびYesNoViewビューやTrueFalseViewビューを持つTEXTメタデータ・フィールド

cmis:propertyBoolean

他のすべてのTEXTメタデータ・フィールド

cmis:propertyString

LONG TEXTメタデータ・フィールド

cmis:propertyString

MEMOメタデータ・フィールド

cmis:propertyString

INTEGERメタデータ・フィールド

cmis:propertyInteger

DATEメタデータ・フィールド

cmis:propertyDateTime

DECIMALメタデータ・フィールド

cmis:propertyDecimal

Site Studioリージョン定義フィールドからCMISプロパティ定義へのマッピングは、次のとおりです。

表C-34 Site Studioリージョン定義のマッピング

Site Studioリージョン定義

CMISプロパティ定義

イメージ要素定義フィールド

cmis:propertyString

WYSIWYG要素定義フィールド

cmis:propertyString

プレーン・テキスト要素定義フィールド

cmis:propertyString

静的リスト要素定義フィールド

cmis:propertyString

C.15.1.1.4 ドキュメント・オブジェクト

ドキュメント・オブジェクトは、リポジトリによって管理される基本的な情報エンティティです。CMIS仕様で定義されているように、ドキュメント・オブジェクトは、バージョニング可能、ファイリング可能、問合せ可能、制御可能およびACLControl可能にすることができます。前述のように、このリリースのコンテンツ管理REST APIでは、バージョニング、マルチファイリング、ポリシーまたはACLをサポートしていません。

あるNodeが FolderではなくDocumentであると判定された場合、その子ノードはCMISを介しては公開されません。CMISでは、各ドキュメント・オブジェクトは1つのコンテンツ・ストリームに関連付けられており、WebCenter CMIS RESTの場合、このストリームは、そのドキュメントに関連付けられたOracle WebCenter Content: Content Serverバイナリです。

C.15.1.1.5 フォルダ・オブジェクト

CMIS仕様では、フォルダ・オブジェクトはコンテンツ・ストリームを持たず、バージョニング可能ではありません。ノードがフォルダであると判断された場合、コンテンツ管理REST APIではそのノードをこの方法で公開します。(Oracle WebCenter Contentでは、フォルダはコンテンツ・ストリームを持たず、バージョニング可能ではありません)。

C.15.1.1.6 リレーションシップ・オブジェクト

CMIS仕様の第2.1.6項「Relationship Object」は適用できません。このリリースのコンテンツ管理REST APIでは、リレーションシップをサポートしていません。

C.15.1.1.7 ポリシー・オブジェクト

CMIS仕様の第2.1.7項「Policy Object」は適用できません。このリリースのコンテンツ管理REST APIでは、ポリシーをサポートしていません。

C.15.1.1.8 アクセス制御

CMIS仕様の第2.1.8項「Access Control」のほとんどは適用できません。このリリースのコンテンツ管理REST APIでは、ACLをサポートしていません。許容されるアクションの詳細は、次の項を参照してください。

C.15.1.1.8.1 AllowableActionsマッピング

この項では、オブジェクトに対して定義される許容可能なアクションを一覧表示します。このリリースの実装内容により、すべてのオブジェクトに対してハードコードされているアクションも一部あります。その他の許容可能なアクションは、リポジトリ構成に基づいて設定されます。

- canGetObjectRelationships = false

- canCreateRelationship = false

- canGetDescendants = false

- canGetFolderTree = false

- canCheckOut = false (バージョニング)

- canCancelCheckOut = false (バージョニング)

- canCheckIn = false (バージョニング)

- canAddObjectToFolder = false (マルチファイリング)

- canRemoveObjectFromFolder = false(アンファイリング/マルチファイリング)

- canApplyPolicy = false

- canGetAppliedPolicies = false

- canRemovePolicy = false

- canCreatePolicy = false

- canApplyACL = false

- canGetACL = false

- canGetRenditions = false

- canDeleteTree = true

- canGetAllVersions = false (バージョニング)

C.15.1.1.9 バージョニング

CMIS仕様の第2.1.9項「Versioning」は適用できません。このリリースのコンテンツ管理REST APIでは、バージョニングをサポートしていません。

C.15.1.1.10 問合せ

CMIS問合せは結果セットを返します。結果セットの各エントリ・オブジェクトには、問合せで指定されたプロパティのみが含められます。コンテンツ管理REST APIでは問合せ内でのJOINをサポートしていないため、各結果エントリは単一ノードからのプロパティを表します。共通の検索では、"SELECT * FROM …"などの問合せが使用されます。

- FROM句は検索対象のコンテンツ・タイプを指定します。

- FROM cmis:document ==> 任意のOracle WebCenter Contentドキュメント(例: IDC:GlobalProfile)

- FROM cmis:folder ==> 任意のOracle WebCenter Contentフォルダ(例: IDC:Folder)

- FROM typeQueryName ==> タイプが問合せ可能であるかぎり、そのタイプのcmis queryName(例: ora:t:IDC!;GlobalProfile)

- cmis:document and cmis:folderタイプは常に問合せ可能です。その他のタイプは、リポジトリ内で検索可能であれば問合せ可能です。

- IN_FOLDER述語は、指定されたフォルダID(結果の親)として実装されます。

- IN_TREE述語は、指定されたフォルダID(結果のフォルダ構造内の親)として実装されます。

- CONTAINS() 述語は、フルテキスト問合せ表現の演算子です。

- cmis:documentおよびcmis:folderのプロパティは、それに対応するOracle WebCenter Contentシステム・プロパティが検索可能かつソート可能であれば、問合せ可能および順序付け可能となります。システム・プロパティは次のようにマッピングされます。

- cmis:createdBy ==> dDocAuthor

- cmis:lastModifiedBy ==> dDocCreator

- cmis:creationDate ==> dCreateDate

- cmis:lastModificationDate ==> dLastModifiedDate (10gでは、フォルダはdLastModifiedDateにマップされ、ドキュメントはdCreateDateにマップされます)

- cmis:name ==> dOriginalName(ドキュメント用)またはdCollectionName(フォルダ用)

- cmis:contentStreamFileName ==> dOriginalName

- cmis:contentStreamLength ==> VaultFileSize

- cmis:contentStreamMimeType ==> dFormat

- cmis:objectId ==> dDocName

- cmis:objectTypeId ==> Oracle WebCenter Contentプロファイル名またはSiteStudioリージョン定義名

注意:

cmis:objectTypeIdが順序付け可能となることはありません。

- cmis:path ==> IN_FOLDERまたはIN_TREE述語を使用してください。

注意:

CMIS問合せ内で表示できない機能が含まれるリポジトリもあれば、問合せ内で使用可能なCMIS問合せ述語(または述語の組合せ)が制限されるような制約を持つリポジトリもあります。前述のマッピングを使用して、リポジトリの機能と制約によるCMIS問合せでの考慮事項を確認してください。

- ネストされたプロパティは、問合せ可能でも順序付け可能でもありません。

- コンテンツ管理REST APIの実装では、Oracle WebCenter Contentでソート可能と指定されるプロパティが順序付け可能と出力されます。このリストには、実際にはOracle WebCenter Contentでソートできないプロパティが含まれていることがあります。Oracle WebCenter Contentでソート・エラーと出力されるフィールドに対して順序付けを可能にするには、次の手順に従って、指定したOracle WebCenter Contentフィールドをソート可能にします。

1. 「管理」に移動して、「管理アプレット」を開きます。

2. Configuration Managerアプレットを開いて、「拡張検索のデザイン」をクリックします。

3. 順序付け可能にするフィールドを編集し、「ソート可能」を選択します。

4. 変更内容を保存して「管理」を修了します。

表C-35に、具体的な検索に関する考慮事項と推奨事項を示します。問合せの例は、「コンテンツ管理REST APIのベスト・プラクティスおよび例」を参照してください。

表C-35 検索に関する考慮事項と推奨事項

考慮事項

推奨事項

Oracle WebCenter Contentでは、null値または非null値での問合せに対するサポートが限定的です。

検索動作での相違に注意して、サポート対象外の基準に左右される検索表現式を記述しないでください。

フォルダの再帰的検索は、Oracle WebCenter Contentではサポートされていませんが、Oracle WebCenter Contentサーバーで右記のように構成されている場合、ドキュメント用にサポートされます。

検索範囲には、ドキュメントのみを含めるようにしてください(select * from cmis:documentのようなselect句を追加してください)。

検索オブジェクト上に検索パスを設定します(where IN_TREE('/StellentRepository/IDC:Folder/2のようなwhere句を追加してください)。

folders_g CollectiveSearchRecursiveContentおよび関連する設定(Oracle WebCenter Content config.cfgファイルのCollectionMaxBranchなど)を構成します。

多値プロパティの演算子はサブストリング・マッチを実行します。これは、ANY <multiValuedQueryName> IN (<literal>, ...)または<literal> = ANY < multiValuedQueryName>に適用されます。Oracle WebCenter Contentでは、オプション・リスト付きのフィールドに値をカンマ区切り形式で格納します。たとえば、A、BおよびCという値がある場合には、「A, B, C」と表現されます。「A, B」に対してANY検索またはANY IN検索を使用すると、このアイテムが見つかります。

検索動作での相違に注意して、必要以上のマッチ数を検出しないようにするために、Configuration Managerアプレット内のOracle WebCenter Contentオプション・リスト・デリミタ文字を変更することを考慮してください。

フォルダ(FROM cmis:folder)の検索時には、各基準に対して最大1つの値を指定できます。より選択的な問合せを実行するために、各基準は他の基準と論理的にANDでつながれたものとみなされます。フォルダの検索時には、ORまたはNOT演算子のサポートはありません。

Oracle WebCenter Contentフォルダ検索では、ORおよびNOTを使用しないでください。

すべてのプロパティが検索可能というわけではなく、検索で検索可能でないプロパティに遭遇した場合はParseExceptionが返されます(400エラー)。

Oracle WebCenter Content Configuration Manager情報フィールドのセクションを調べるか、ContentType定義を確認することで、指定のコンテンツ・タイプに対してどのプロパティが検索可能か理解してください。isSearchableフィールド設定のURLを調べます。

URLの例:

http://myContentServer/idc/idcplg?IdcService=VCR_GET_CONTENT_TYPE&vcrContentType=IDC:Folder&IsSoap=1

または、CMISを介して固有のタイプを調べます。

すべてのContentTypeが検索可能というわけではありません。検索できないContentTypesに対して検索を試みると、例外がスローされます。たとえば、IDC:FileReferenceは検索できません。

すべてのContentTypeが検索可能というわけではないことに注意してください。

String多値プロパティのみ検索可能です。

String以外の多値プロパティ・タイプの検索を指定しないでください。

LONGプロパティにはNOT演算子を使用できません。

サポートされている構文を使用して問合せを再構成してください。

ソート基準は1つしかサポートされていません。

2つ以上のソート基準を使用する検索表現式を記述しないでください。

ソートまたは索引の付いていないフィールドは、結果的に例外となります。

索引の付いていないフィールドで検索を実行すると、「DRG-10837: セクションdStatusは存在しません」などの埋込み例外コードで、例外がスローされます。

ソート基準としてそれらを使用する前に、どのフィールドに索引が付けられているのか把握してください。isSortableフィールド設定のURLを調べます。

URLの例: http://myContentServer/idc/idcplg?IdcService=GET_ADVANCED_SEARCH_OPTIONS&IsSoap=1または、CMISでタイプを調べて、プロパティ定義が問合せ可能かどうかを確認します。

検索問合せでは空の値は許可されていません。

cmis:name != ''.のような基準を使用しないでください。

Notequals演算子は非文字列のプロパティではサポートされません。

検索動作での相違に注意して、サポート対象外の基準に左右される検索表現式を記述しないでください。

同じOracle WebCenter Contentリポジトリでの複数の検索パスはサポートされません。

検索動作での相違に注意して、サポート対象外の基準に左右される検索表現式を記述しないでください。

ドキュメントの検索時には、Oracle WebCenter Contentが適切に構成されていれば再帰的検索(フォルダ・ツリー検索)がサポートされます。

検索パスが設定されていない場合には、リポジトリ内のすべてのドキュメント(ファイル済と未ファイル分の両方)が検索されます。

コンテンツ・サーバーのfolders_g CollectionSearchRecursiveContentおよび関連する設定(Oracle WebCenter Content config.cfgファイルのCollectionMaxBranchなど)を構成します。これらの設定は、Oracle WebCenter Contentのドキュメントに記載されています。フォルダ・ツリーの範囲に絞ってドキュメント検索を実行するには、IN_TREE述語を使用します。

ドキュメントの検索でLIKE演算子を使用する場合、末尾のパス要素でワイルドカード(%)のみサポートされています。

検索動作での相違に注意して、サポート対象外の基準に左右される検索表現式を記述しないでください。

ドキュメント(select * from cmis:document)を検索する場合、複数のコンテンツ・タイプに検索を限定することはできません。たとえば、select * from IDC:MyProfile, IDC:AnotherProfileはサポートされません。これは、コンテンツ・タイプが明らかに複数でありJOINSがサポートされていないためです。

検索を複数のコンテンツ・タイプに限定する必要がある場合は、複数の問合せを出して同じ動作を実現します。すべてのタイプを横断的に検索する場合は、select文内でcmis:documentを使用します。

cmis:objectTypeIdが問合せで指定されている場合、Oracle WebCenter Content検索ではORはサポートされません。他のパラメータはこの基準とANDでつなぐことができますが、ORはサポートされません。

この機能が必要がある場合は、複数の問合せを発行して同じ動作を実現します。

cmis:objectTypeId基準は、 ==、!=、およびlikeのみサポートしています。!=の使用はフォルダを除外するケースに限られています(select * from cmis:documentの追加と同じ動作になります)。

cmis:objectTypeId基準を使用するときは、有効な演算子に注意します。

問合せは、Oracle WebCenter Content検索エンジンの選択に応じて大文字と小文字を区別する場合があります。

Oracle WebCenter Content検索エンジンの選択は、大文字と小文字を区別するかどうかに影響することがあるので注意してください。メタデータがOracleTextSearchを使用して検索すると、検索エンジンは一般に大文字と小文字を区別しません。メタデータがDATABASE.FULLTEXTを使用して検索すると、検索エンジンは一般に大文字と小文字を区別します。メタデータ・フィールドにより正確な動作が異なることがあります。

C.15.1.2 サービス

CMIS仕様の第2.2項「Services」で説明されているメソッドは、コンテンツ管理REST APIによって実装されています。具体的な実装の詳細は、「CMIS第II部: RESTful AtomPubバインディング」で説明します。

C.15.2 CMIS第II部: RESTful AtomPubバインディング

CMIS仕様の3項: 「RESTful AtomPub Binding」では、1つ以上のコンテンツ管理リポジトリとともに動作するアプリケーションで使用可能なAtomPubに基づいた仕様を定義しています。RESTサービスはポータル・インスタンスを通して使用できます。

C.15.2.1 サービス・ドキュメント

リポジトリのナビゲーションはすべて、AtomPubサービス・ドキュメントから開始されます。リポジトリ内のすべてのアクセス可能コンテンツの検出は、このドキュメントからコレクション、リンクおよびテンプレートを介して行うことができます。CMIS Webアプリケーションのコンテキスト・ルートからのサービス・ドキュメントのURIは、/rest/cmis/repositoryです。

したがって、前述の例のようにアプリケーションがlibrary-context-root-overrideとともにデプロイされている場合、サービス・ドキュメントにはhttp://hostname:port/rest/cmis/repositoryというURLを介してアクセスします。

デフォルトでは、このドキュメントにはOracle WebCenter Contentの構成済リポジトリごとにワークスペースが含まれています(Oracle WebCenter PortalのCMIS RESTでは、Oracle WebCenter Contentリポジトリのみがサポートされています)。単一リポジトリのサービス・ドキュメントを取得するには、CMIS AtomPubバインディング仕様の3.6.2.1項で説明されているように、repositoryId問合せパラメータを使用します。

前項で説明したように、サービス・ドキュメントはAtomPubワークスペースから構成されます。各ワークスペースはOracle WebCenter Portalコンテンツ・サーバー接続にマップされます。

ユーザーはサービス・ドキュメントから開始して、予測されたパスを使用してコレクションやリンクにナビゲートすることが想定されるためです。コレクションのリンクとタイトルおよびタイプとの関係はすべてCMIS仕様で定義されているため、一般的にはクライアント実装によるナビゲートが可能です。また、パスによるオブジェクトへのアクセス、IDによるオブジェクトへのアクセス、IDによるタイプへのアクセス、および問合せへのアクセスを簡単に行うためにリポジトリごとに定義されたテンプレートもあります。パスおよびIDのテンプレートでの変数の書式を確認するには、フォルダおよびドキュメントのエントリを参照してください。

C.15.2.2 レスポンス・フォーマット

CMIS仕様の3.1.3項: 「Response Formats」では、Acceptヘッダー内に表示されているサポート対象のメディア・タイプでオーバーライドされないかぎり、デフォルトでAtom/AtomPubスタイル・フォーマットが返されることが示されています。

一般的なAtomPubフィード・リーダーを使用すると、CMIS RESTサーバーにより返されたフィードをウォークスルーできます。すべてのCMIS詳細が表示されるわけではありませんが、リンクをナビゲートすることはできます。一般に、フィード・リーダーを設定するためには、特定のフィードのURIがわかっている必要があります。このURIは、サービス・ドキュメント(たとえば、typesdescendantsのワークスペース・リンク)をナビゲートすることにより確認できます。

問合せ構文の詳細は、CMIS仕様を参照してください。コンテンツ管理REST APIのベスト・プラクティスおよび例は、「コンテンツ管理REST APIのベスト・プラクティスおよび例」を参照してください。

C.15.2.3 その他の機能

コンテンツ管理REST APIには、CMIS仕様に加えて、次の機能が用意されています。

- フォルダの子コレクション

- ドキュメント・エントリ

- コンテンツ・ストリーム

C.15.2.3.1 フォルダの子コレクション

この仕様は、次のCMISサービスを定義します。

- GET: getChildren

- POST: createDocumentまたはcreateFolderまたはcreatePolicyまたはmoveObject or addObjectToFolder

コンテンツ管理REST APIには、さらに次のサービスが用意されています。

- POST: createこのサービスには、uid、fileName、contentId、commentsおよびsimpleResponseという5種類の問合せパラメータと、1つのヘッダー・パラメータSlugが用意されています。これは、簡単なバイナリ・リクエストのアップロードとして使用されることを意図したサービスです。このサービスでは新規ドキュメントが作成されます。SlugおよびfileNameを使用して、リクエストに添付されるバイナリの名前を付けます(両方のパラメータの使用はオプションで、1つのみを定義する必要があります。fileNameが最初にチェックされます)。commentsパラメータはオプションであり、Oracle WebCenter ContentがdDocNameを自動生成するように設定されている場合、contentIdはオプションです。

- POST: create Content-Type: multipart/form-dataこのサービスには、1つの問合せパラメータuid(ドキュメントが作成されるフォルダのuid)が用意されています。ブール型の問合せパラメータsimpleResponseがfalseに設定されている場合、メディア・タイプapplication/atom+xml;type=entryをレスポンスとして返します。trueに設定されている場合、新しく作成されたドキュメントを指すURIとともに、メディア・タイプtext/htmlがレスポンスとして返されます。commentsパラメータとsimpleResponseパラメータはいずれもオプションであり、Oracle WebCenter ContentがdDocNameを自動生成するように設定されている場合、contentIdはオプションです。また、名前"fileUpload"が必要です。

<html>
<head>
<title>simple post</title>
</head>
<body>
<form action="http://<host>:<port>/rest/api/cmis/children/StellentRepository?uid=IDC:Folder/2"
method="POST"
enctype="multipart/form-data">
Select a document to upload: <input type="file" name="fileUpload"/><br>
<input type="hidden" name="comments" value="this is just a comment"/>
<input type="hidden" name="contentId" value="uniqueID1"/>
<input type="hidden" name="simpleResponse" value="true"/>
<input type="submit" value="Submit"/>
</form>
</body>
</html>

C.15.2.3.2 ドキュメント・エントリ

この仕様は、次のCMISサービスを定義します。

- GET: getObject、getObjectOfLatestVersion (getObject)

- PUT: updateProperties

- DELETE: deleteObject

コンテンツ管理REST APIには、さらに次のサービスが用意されています。

- POST: postToDeleteこの新しいサービスには、uidおよび_methodという2つの問合せパラメータが用意されています。ドキュメントはPOSTを介して削除できます。

http://<host>:<port>/rest/api/cmis/document/repoName?uid=ABC&_method="delete"

C.15.2.3.3 コンテンツ・ストリーム

この仕様は、次のCMISサービスを定義します。

- GET: getContentStream

- PUT: setContentStream

- DELETE: deleteContentStream

コンテンツ管理REST APIには、さらに次のサービスが用意されています。

- POST: postTunnelContentStreamこのサービスには、uid、overwriteFlag、fileName、commentsおよび_methodという5種類の問合せパラメータと、1つのヘッダー・パラメータSlugが用意されています。これは、簡単なバイナリ・リクエストのアップロードまたはPOSTを介した削除として使用されることを意図したサービスです。このサービスには、ドキュメントがすでに存在している必要があります。SlugおよびfileNameを使用して、リクエストに添付されるバイナリの名前を付けます(両方のパラメータの使用はオプションで、1つのみを定義する必要があります。fileNameが最初にチェックされます)。overwriteFlagパラメータは、デフォルトでtrueに設定されています。commentsパラメータはオプションで、_methodの有効な値は"delete"または"put"です(大文字と小文字を区別しません)。

http://<host>:<port>/rest/api/cmis/stream/repoName?uid=ABC&_method="delete"

- POST: postTunnelContentStream Content-Type: multipart/form-dataこのサービスには、1つの問合せパラメータuidが用意されています。これは、簡単なhtmlのmultipart/form-dataのアップロードまたはPOSTを介した削除として使用することを意図したサービスです。このサービスには、ドキュメントがすでに存在している必要があります。属性名"fileUpload"は必須です。"comments"はオプションで、"_method"の有効な値は"delete"または"put"です(大文字と小文字を区別しません)。

<form action="http://<host>:<port>/rest/api/cmis/stream/repoName?uid=WDOC019113"
method="POST"
enctype="multipart/form-data">
Select a document to upload: <input type="file" name="fileUpload"/><br>
<input type="hidden" name="comments" value="this is just a comment"/>
<input type="hidden" name="_method" value="PUT"/>
<input type="submit" value="Submit"/>
</form>

C.15.3 コンテンツ管理REST APIのベスト・プラクティスおよび例

この項では、コンテンツ管理REST APIの使用に関するベスト・プラクティスおよび例を示します。問合せ構文の詳細は、CMIS仕様を参照してください。

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

- ベスト・プラクティス

- コンテンツ管理REST APIの例

C.15.3.1 ベスト・プラクティス

コンテンツ管理REST APIを使用するリポジトリに対して推奨されるベスト・プラクティスを次に示します。

- 問合せの"FROM"部分に使用できるタイプを決めるには、AtomPubサービス・ドキュメントからタイプ・コレクションに関する項目を参照してください。タイプは必ず問合せ可能とし、必ずそのタイプの問合せ名を使用するようにする必要があります。
たとえば、IDC:GlobalProfileは次の例に似たタイプ情報を保持できます。

<cmis:localName>IDC:GlobalProfile</cmis:localName>
<cmis:displayName>IDC:GlobalProfile</cmis:displayName>
<cmis:queryName>ora:t:IDC!;GlobalProfile</cmis:queryName>
<cmis:queryable>true</cmis:queryable>

前述のタイプ情報に関する問合せの例は、"SELECT * FROM ora:t:IDC!;GlobalProfile"とすることができます。

- 問合せの"SELECT"および"WHERE"部分に使用できるプロパティを決めるには、関連するタイプのエントリを参照してください。そのタイプのプロパティ定義がそれぞれリストされ、問合せ可能および順序付け可能に対応する設定が用意されます。cmis:querynameがこの問合せで使用できる値です。
たとえば、IDC:GlobalProfileは次の例に似たプロパティ定義を保持できます。

<cmis:propertyStringDefinition>
<cmis:id>/stanl18-ucm11g/IDC:GlobalProfile.ora:p:dDocName</cmis:id>
<cmis:localName>dDocName</cmis:localName>
<cmis:displayName>dDocName</cmis:displayName>
<cmis:queryName>ora:p:dDocName</cmis:queryName>
<cmis:description>Content ID</cmis:description>
<cmis:propertyType>string</cmis:propertyType>
<cmis:cardinality>single</cmis:cardinality>
<cmis:updatability>readwrite</cmis:updatability>
<cmis:inherited>false</cmis:inherited>
<cmis:required>false</cmis:required>
<cmis:queryable>true</cmis:queryable>
<cmis:orderable>true</cmis:orderable>
</cmis:propertyStringDefinition>

前述のプロパティ定義に関する問合せの例は、"SELECT ora:p:dDocName FROM ora:t:IDC!;GlobalProfile"とすることができます。

- 問合せの可読性を高めるために、ContentTypeおよびPropertyDefinitionの名前には英数字以外の文字を使用しないでください。

C.15.3.2 コンテンツ管理REST APIの例

この項では、問合せの例をいくつか示します。問合せ構文の詳細は、CMIS仕様を参照してください。(問合せのURI全部を取得するには、サービス・ドキュメント内の問合せURIテンプレートを参照してください。)

- SELECT * from cmis:folder

- SELECT cmis:name, cmis:contentStreamFileName, cmis:contentStreamMimeType, cmis:contentStreamLength FROM cmis:document WHERE cmis:contentStreamFileName = 'BinaryName' AND cmis:contentStreamMimeType = 'text/html' AND cmis:contentStreamLength > 1

- SELECT cmis:name, cmis:creationDate, cmis:lastModificationDate FROM cmis:folder WHERE cmis:name = 'Trash' AND cmis:lastModificationDate > TIMESTAMP '2008-05-18T10:32:44.703-06:00'

- SELECT * FROM cmis:document WHERE cmis:name LIKE 'baker%'

- SELECT * FROM cmis:document WHERE cmis:name NOT IN ('nodeBoolean', 'nodeLong')

- SELECT cmis:name from cmis:document where IN_TREE('/StellentRepository')

- SELECT * FROM ora:t:IDC:GlobalProfile WHERE ora:p:xBooleanTestField = FALSE ORDER BY ora:p:dDocTitle ASC

- SELECT ora:p:xMultiValuedDelimiterTest FROM ora:t:IDC:GlobalProfile WHERE ANY ora:p:xMultiValuedDelimiterTest NOT IN ('four')

- SELECT cmis:name FROM ora:t:IDC:GlobalProfile WHERE CONTAINS('test') ORDER BY ora:p:dInDate DESC

- SELECT * FROM cmis:document where IN_TREE('/StellentRepository/IDC:Folder/2')

C.16 イベントREST APIの使用

WebCenter Portalには、イベントをサポートするREST APIがあります。REST APIを使用して、ポータル・イベントへのアクセスを提供する独自のインタフェースを作成します。

注意:

イベントREST APIは、ポータル・イベントでのみ使用できます。REST APIを使用して個人イベントを操作できません。

この項では、イベントに関連するREST APIメソッドについて説明します。次のトピックが含まれています:

- イベントのエントリ・ポイント

- イベントのリソース・タイプの分類

- セキュリティに関する考慮事項

- イベントのリソース・タイプ

C.16.1 イベントのエントリ・ポイント

イベントのエントリ・ポイントには、ポータルを介してのみアクセスできます。まず、適切なポータルに移動して、次のresourceTypeのリンク要素を見つける必要があります。

urn:oracle:webcenter:events:gsEvents

対応するhrefまたはtemplate要素によって、URIエントリ・ポイントが提供されます。クライアントはこのエントリ・ポイントにHTTPリクエストを送信して、イベントを操作します。

リソース索引の詳細は、「リソース索引の使用」を参照してください。

リソース・タイプの詳細は、「リソース・タイプ」を参照してください。

C.16.2 イベントのリソース・タイプの分類

クライアントがエントリ・ポイントを識別すると、リソース・タイプの分類によりナビゲートして、必要な操作を実行できます。個々のリソース・タイプの詳細は、「イベントのリソース・タイプ」の該当の項を参照してください。

イベントの分類は、次のとおりです。

urn:oracle:webcenter:events:gsEvents
urn:oracle:webcenter:events:gsEvent
urn:oracle:webcenter:events:gsCategories

C.16.3 セキュリティに関する考慮事項

イベントでは、セキュリティに関する特定の考慮事項はありません。一般的なセキュリティに関する考慮事項については、「WebCenter Portal REST APIのセキュリティに関する考慮事項」を参照してください。

C.16.4 イベントのリソース・タイプ

この項では、各リソース・タイプについて知っておく必要があるすべての情報を提供します。次のトピックが含まれています:

- urn:oracle:webcenter:events:gsEvents

- urn:oracle:webcenter:events:gsEvent

- urn:oracle:webcenter:events:gsCategories

C.16.4.1 urn:oracle:webcenter:events:gsEvents

このリソースを使用して、ポータル・イベントの取得(GET)および作成(POST)に使用するURIを識別します。GET操作からのレスポンスには、このイベント・コレクション内の各ポータル・イベントが含まれており、各イベントには、そのイベントの操作で使用するリンクが含まれています。POST操作からのレスポンスには、このイベント・コレクションに作成されたイベントと、そのイベントを操作するリンクが含まれています。

C.16.4.1.1 gsEventsへのナビゲーション・パス

この項では、クライアントがハイパーメディアを経由してこのリソースにアクセスする方法を示します:

resourceIndex
spaces
gsEvents

C.16.4.1.2 gsEventsでサポートされるメソッド

次のメソッドは、このリソースによりサポートされています:

- GET

- リクエスト - 本体: <gsCategory>、パラメータ: startIndex、itemsPerPage、utoken
これらの共通パラメータの詳細は、「共通のリクエスト問合せパラメータ」を参照してください。

次の追加パラメータを使用できます。

- startDate: ポータル・イベントのリストを開始する日付

- endDate: ポータル・イベントのリストを終了する日付

開始日と終了日については、YYYY-MM-DD形式(例: 2011-09-01)を使用します。時間(例: 2011-09-01T09:00:00)とタイムゾーン記号(例: UTCの場合は2011-09-01T09:00:00Z)も指定できます。

- レスポンス - 本体: 0個以上のイベント

- POST

- リクエスト - 本体: イベント

- レスポンス - 本体: イベント

C.16.4.1.3 gsEventsからリンクされるリソース・タイプ

表C-36に、クライアントがこのリソースからリンクできるリソース・タイプを示します。

表C-36 gsEventsに関連するリソース・タイプ

rel

リソース・タイプ

self

urn:oracle:webcenter:events:gsEvents

C.16.4.2 urn:oracle:webcenter:events:gsEvent

このリソース・タイプを使用して、特定のポータル・イベントの読取り(GET)、更新(PUT)または削除(DELETE)に使用するURIを識別します。GET操作からのレスポンスには、URIで識別される特定のイベントが含まれています。PUT操作からのレスポンスには、URIで識別されるイベントの変更されたバージョンが含まれています。DELETE操作からのレスポンスは、204です。

C.16.4.2.1 gsEventへのナビゲーション・パス

resourceIndex
spaces
gsEvents
gsEvent

C.16.4.2.2 gsEventでサポートされるメソッド

次のメソッドは、このリソースによりサポートされています:

- GET

- リクエスト - 本体: なし

- レスポンス - 本体: イベント

- PUT

- リクエスト - 本体: イベント

- レスポンス - 本体: イベント

- DELETE

- リクエスト - 本体: なし

- レスポンス - 本体: なし

C.16.4.2.3 gsEventの書込み可能要素

表C-37に、このリソースの書込み可能要素を示します。

表C-37 gsEventの書込み可能要素

要素

タイプ

必須

制約

説明

category

String

いいえ

ポータルに対して定義されるイベント・カテゴリの名前

イベントが属するカテゴリ。

注意: カテゴリが存在しない場合は、イベントが作成中であればデフォルトのカテゴリが使用されます。ただし、イベントが変更中の場合はエラーが発生します。

details

String

いいえ

1文字以上の文字

イベントに関する詳細

endTime

Date

はい

YYYY-MM-DDTHH:MM:SS

endTimeはstartTime以上である必要があります

イベントが終了する日時

location

String

いいえ

1文字以上の文字

イベントが発生する場所

priority

String?

いいえ

1 - 最高

2 - 高

3 - 普通

4 - 低

5 - 最低

イベントがクラッシュしたときに表示される場所を決定する、イベントの優先度

startTime

Date

はい

YYYY-MM-DDTHH:MM:SS

イベントが開始する日時

summary

String

はい

1文字以上の文字

イベントのタイトルとしての役割を果たす、イベントの簡単な説明

C.16.4.2.4 gsEventの読取り専用要素

表C-38に、このリソースの読取り専用要素を示します。

表C-38 gsEventの読取り専用要素

要素

タイプ

説明

author

personReference

イベントを作成したユーザー

created

Date

イベントが作成された日付

duration

String

イベントの長さ(分単位)

groupSpace

groupSpaceReference

イベントが属するポータル

id

String

イベントの一意のID

isAllDayEvent

Boolean

イベントが一日中行われるかどうか

modified

Date

イベントが最後に更新された日付

modifiedByUser

personReference

イベントを最後に更新したユーザー

C.16.4.2.5 gsEventからリンクされるリソース・タイプ

表C-39に、クライアントがこのリソースからリンクできるリソース・タイプを示します。

表C-39 gsEventに関連するリソース・タイプ

rel

リソース・タイプ

self

urn:oracle:webcenter:events:gsEvent

C.16.4.3 urn:oracle:webcenter:events:gsCategories

このリソースを使用して、ポータル・イベント・カテゴリの取得(GET)および作成(POST)に使用するURIを識別します。GET操作からのレスポンスには、このカテゴリ・コレクション内の各カテゴリが含まれており、各カテゴリには、そのカテゴリの操作で使用するリンクが含まれています。POST操作からのレスポンスには、このカテゴリ・コレクションに作成されたカテゴリと、そのカテゴリを操作するリンクが含まれています。

C.16.4.3.1 gsCategoriesへのナビゲーション・パス

この項では、クライアントがハイパーメディアを経由してこのリソースにアクセスする方法を示します:

resourceIndex
spaces
gsCategories

C.16.4.3.2 gsCategoriesでサポートされるメソッド

次のメソッドは、このリソースによりサポートされています:

- GET

- リクエスト - 本体: カテゴリ

- レスポンス - 本体: 0個以上のカテゴリ

- POST

- リクエスト - 本体: カテゴリ

- レスポンス - 本体: カテゴリ

C.16.4.3.3 gsCategoriesからリンクされるリソース・タイプ

表C-40に、クライアントがこのリソースからリンクできるリソース・タイプを示します。

表C-40 gsCategoriesに関連するリソース・タイプ

rel

リソース・タイプ

self

urn:oracle:webcenter:events:gsCategories

C.17 タグREST APIの使用

WebCenter Portalは、タグをサポートするためのREST APIを提供しています。タグREST APIを使用して、次のことを実行できます。

- すべてのタグを検索するか、基準によって一部のタグを検索する

- 特定のタグを取得する

- タグを削除する

- タグをアップデートまたは名前変更する

- タグ付けされたアイテムを取得する

- アイテムからタグを解除する

- 新しいタグ付けしたアイテムを追加する

- タグ付けしたアイテムのタグを変更する

- タグ付けしたすべてのアイテムを検索するか、タグ付けしたアイテムを日付やタグ・ワードなどのフィルタによって検索する

- タグによって関連ユーザーを取得する

この項では、タグに関連したREST APIについて説明します。次のトピックが含まれています:

- タグのエントリ・ポイント

- タグのリソース・タイプの分類

- セキュリティに関する考慮事項

- タグのリソース・タイプ

REST APIの概要は、「WebCenter Portal REST APIの概要」を参照してください。

C.17.1 タグのエントリ・ポイント

各RESTサービスは、そのサービスのエントリ・ポイントを提供するリソース索引内にリンク要素を持っています。タグのエントリ・ポイントを見つけるには、次のいずれかのresourceTypeを持つリンク要素を見つけます。

- urn:oracle:webcenter:tagging:tags

- urn:oracle:webcenter:tagging:taggeditems

- urn:oracle:webcenter:tagging:users

対応するhrefまたはtemplate要素によって、URIエントリ・ポイントが提供されます。クライアントはこのエントリ・ポイントにHTTPリクエストを送信して、タグを操作します。

リソース索引の詳細は、「リソース索引の使用」を参照してください。

リソース・タイプの詳細は、「リソース・タイプ」を参照してください。

C.17.2 タグのリソース・タイプの分類

クライアントがエントリ・ポイントを識別すると、リソース・タイプの分類によりナビゲートして、必要な操作を実行できます。個々のリソース・タイプの詳細は、「リソース・タイプ」の該当の項を参照してください。

タグの分類は、次のとおりです。

urn:oracle:webcenter:tagging:tags
urn:oracle:webcenter:tagging:tag
urn:oracle:webcenter:tagging:taggedItems
urn:oracle:webcenter:tagging:taggedItem
urn:oracle:webcenter:tagging:users

usersの下に、peopleprofileなどのそのオブジェクトのリソース・タイプを追加できます。

サービス・エントリ・ポイントの他、URLテンプレートにより、クライアントは、問合せパラメータを渡してリクエストをカスタマイズしたり戻されたデータのフォームを制御できます。

タグ・リソース内のコレクション・リソースは、ページ区切り(タグとユーザーにはitemsPerPageおよびstartIndex、タグ付けしたアイテムにはitemsPerPage)をサポートします。その他の問合せパラメータ(searchおよびprojection)はサポートされていません。

C.17.3 セキュリティに関する考慮事項

認証は、REST APIのメソッドを使用する前に必要です。

一般的なセキュリティに関する考慮事項については、「WebCenter Portal REST APIのセキュリティに関する考慮事項」を参照してください。

C.17.4 タグのリソース・タイプ

この項では、各リソース・タイプについて説明します。次のトピックが含まれています:

- urn:oracle:webcenter:tagging:tags

- urn:oracle:webcenter:tagging:tag

- urn:oracle:webcenter:tagging:taggedItems

- urn:oracle:webcenter:tagging:taggedItem

- urn:oracle:webcenter:tagging:users

C.17.4.1 urn:oracle:webcenter:tagging:tags

このリソース・タイプを使用して、URIを識別し、タグの参照(GET)に使用します。GET操作からのレスポンスには、すべてのタグ、特定のタグ、タグのサブセット、あるいは特定のタグまたはユーザーのリストに関連するタグが含まれています。

C.17.4.1.1 tagsへのナビゲーション・パス

この項では、クライアントがハイパーメディアを経由してこのリソースにアクセスする方法を示します:

resourceindex
tags

resourceindex
spaces
spaces:resourceindex
spaces:tags

C.17.4.1.2 tagsでサポートされるメソッド

次のメソッドは、このリソースによりサポートされています:

- GET

- リクエスト - 本体: なし、パラメータ: startIndex、itemsPerPage、keyword、serviceId、relatedTag、userId、scopeGuid、shared、tags、users

- レスポンス - 本体: tag

説明:

- startIndex - 結果セットに含める、最初に一致する結果のインデックスを指定します(0-n ... 0から始まる)。これはページ区切りに使用されます。

- itemsPerPage - レスポンスで返す結果の最大数を指定します(1-n)。これはページ区切りに使用されます。

- keyword - サブストリング・マッチ用のキーワードを指定します。

- serviceId - タグを検索するためのサービスIDを指定します(すべての場合は、null)。

- relatedTag - タグのリストに関連するタグを指定します。たとえば、アイテム1に「webcenter help」として、アイテム2に「webcenter document」としてタグ付けし、relatedTag=webcenterを設定した場合は、両方(helpとdocument)のタグが返されます。

- userId - タグを検索する単一のユーザーIDを指定します(すべての場合は、null)。nullで共有タグが見つからない場合は、ログイン済ユーザーを使用します。

- scopeGuid - ポータルのGUIDを指定します。ホーム・ポータルに設定すると、すべての(フィルタされていない)タグが表示されます。

- shared - 個人用リソース(同じユーザーによってのみプライベートにタグ付けされたリソース)のみを返すにはtrueを指定し、システム・リソース(1つ以上のパブリック・タブを持つリソース)を返すにはfalseを指定します。

- tags - URLエンコードのスペース(+)で区切られたこのタグ・リストでフィルタするように指定します。たとえば、「webcenter」と「help」がタグ付けされたアイテムは、tags=webcenter+helpで検索できます。

- users - URLエンコードのスペース(+)で区切られたこのユーザー・リストでフィルタするように指定します。たとえば、users=monty+vicki+pat。

注意:

パラメータは一定の組合せのみで使用できます。

表C-41に、各操作で使用可能なパラメータの組合せを示します。たとえば、tagsパラメータはserviceIdパラメータと一緒には指定できません。

表C-41 タグの取得で使用可能なパラメータの組合せ

APIメソッド

keyword

serviceId

relatedTag

userId

scopeGuid

shared

tags

users

findRelatedSystemTags

-

-

X

-

X

-

X

X

findPopularTagsCommon

X

X

-

X

-

X

-

-

findPopularTags (GUIDを使用)

X

-

-

X

X

X

-

-

findPopularTags

X

-

-

X

-

X

-

-

C.17.4.1.3 tagsからリンクされるリソース・タイプ

resourceTypeリンク属性は、リンクが指すリソースのタイプを示しています。クライアントはresourceTypeを使用して、GETおよびPOSTの予測されるレスポンス本文とPOSTおよびPUTの許容されるリクエスト本文を判断します。

表C-42に、クライアントがこのリソースからリンクできるリソース・タイプを示します。タグには、それ自身と、結果の次のページまたは前のページへのリファレンス・リンクがあります。

表C-42 tagsに関連するリソース・タイプ

rel

リソース・タイプ

self

urn:oracle:webcenter:tagging:tags

前/次

urn:oracle:webcenter:tagging:tags

C.17.4.2 urn:oracle:webcenter:tagging:tag

このリソース・タイプを使用して、URIを識別し、タグの参照(GET)、名前変更(PUT)および削除(DELETE)に使用します。GET操作からのレスポンスには、すべてのタグ、特定のタグ、タグのサブセット、あるいは特定のタグまたはユーザーのリストに関連するタグが含まれています。

C.17.4.2.1 tagへのナビゲーション・パス

この項では、クライアントがハイパーメディアを経由してこのリソースにアクセスする方法を示します:

resourceindex
tags
tag

resourceindex
spaces
spaces:resourceindex
spaces:tags
spaces:tag

C.17.4.2.2 tagでサポートされるメソッド

次のメソッドは、このリソースによりサポートされています:

- GET

- リクエスト - 本体: なし、パラメータ: なし

- レスポンス - 本体: tag

- PUT

- リクエスト - 本体: tag

- レスポンス - 本体: tag

- DELETE

- リクエスト - 本体: なし

- レスポンス - 本体: なし

例: タグ名を変更するためのPUTコマンドの本文

<tag>
<name>newId</name>
</tag>

C.17.4.2.3 tagからリンクされるリソース・タイプ

resourceTypeリンク属性は、リンクが指すリソースのタイプを示しています。クライアントはresourceTypeを使用して、GETおよびPOSTの予測されるレスポンス本文とPOSTおよびPUTの許容されるリクエスト本文を判断します。

表C-43に、クライアントがこのリソースからリンクできるリソース・タイプを示します。タグには、それ自身、関連するtaggedItem、関連するユーザーおよび関連するタグへのリファレンス・リンクがあります。

表C-43 tagに関連するリソース・タイプ

rel

リソース・タイプ

self

urn:oracle:webcenter:tagging:tag

urn:oracle:webcenter:tagging:taggedItems

urn:oracle:webcenter:tagging:users

urn:oracle:webcenter:tagging:tags

C.17.4.3 urn:oracle:webcenter:tagging:taggedItems

このリソース・タイプを使用して、タグ付けされたアイテムと関連するリソースを参照するため(GET)またはタグ付けされたアイテムを追加するため(POST)に使用するURIを識別します。

GET操作のレスポンスには、1つのタグ付きアイテムまたは日付、タグ・ワードなどでフィルタできるすべてのタグ付きアイテムが含まれています。各タグには、そのタグでの操作に使用されるリンクがあります。POST操作のレスポンスには、このタグのコレクション内で作成されたタグ付きアイテムとそれらのタグでの操作に使用されるリンクが含まれています。

C.17.4.3.1 taggedItemsへのナビゲーション・パス

この項では、クライアントがハイパーメディアを経由してこのリソースにアクセスする方法を示します:

resourceindex
taggedItems

resourceindex
spaces
spaces:resourceindex
spaces:taggedItems

C.17.4.3.2 taggedItemsでサポートされるメソッド

次のメソッドは、このリソースによりサポートされています:

- POST

- リクエスト - 本体: taggedItem

- レスポンス - 本体: taggedItem

<taggeditem>
<serviceId>oracle.webcenter.page</serviceId>

<resourceId>/oracle/webcenter/page/somepath/someotherpath/a.jspx</resourceId>
<tagWords>foo bar boo far</tagWords>
<resourceTitle>This is renamed by me to be foofoo</resourceTitle>
<scopeGuid>(optional) scope for the item</scopeGuid>
<shared>(optional) make the item private </shared>
</taggeditem>

- GET

- リクエスト - 本体: なし、パラメータ: serviceId、keyword、relatedRID、tags、users、dt、scopeGuid、shared、itemsPerPage

- レスポンス - 本体: タグ付けしたアイテム

説明:

- serviceId - アイテムのサービスIDを指定します。

- keyword - リソースのタイトルのキーワードを指定します。

- relatedRID - 関連するタグを指定します。たとえば、アイテム1に「webcenter help」として、アイテム2に「fusionapps documents」として、アイテム3に「webcenter documents」としてタグ付けし、relatedRID=item3を設定すると、アイテム3と共通のタグを共有しているため、アイテム1とアイテム2が返されます。

- tags - URLエンコードのスペース(+)で区切られたこのタグ・リストでフィルタするように指定します。たとえば、「webcenter」と「help」がタグ付けされたアイテムは、tags=webcenter+helpで検索できます。

- users - URLエンコードのスペース(+)で区切られたこれらのユーザーでフィルタするように指定します。たとえば、{USER}+{USER}+...+{USER}。

- dt - この日付、デフォルトではブックマークが保存された最近の日付{DD-MM-CCYY}でブックマークをフィルタするように指定します。

- scopeGuid - ポータルのGUIDを指定します。ホーム・ポータルに設定すると、すべての(フィルタされていない)タグが表示されます。

- shared - 個人用リソース(同じユーザーによってのみプライベートにタグ付けされたリソース)のみを返すにはtrueを指定し、システム・リソース(1つ以上のパブリック・タブを持つリソース)を返すにはfalseを指定します。

- itemsPerPage - レスポンスで返す結果の最大数を指定します(1-n)。これはページ区切りに使用されます。

注意:

パラメータは一定の組合せのみで使用できます。

表C-44に、各操作で使用可能なパラメータの組合せを示します。たとえば、tagsパラメータはserviceIdパラメータと一緒には指定できません。

表C-44 タグ付きアイテムの取得で使用可能なパラメータの組合せ

APIメソッド

serviceId

keyword

relatedRID

tags

users

dt

scopeGuid

shared

findRelatedSystemResources

X

-

X

-

-

-

-

-

findUpdatedResources

-

-

-

-

-

X

X

-

findSystemResources

-

-

X

X

-

X

X

findFilterPersonalResources

X

X

-

-

-

-

X

-

findPersonalResources

-

-

-

X

X

-

X

X

findFilteredPersonalResources (キーワードなし)

X

-

-

-

-

-

X

-

C.17.4.3.3 taggedItemsからリンクされるリソース・タイプ

resourceTypeリンク属性は、リンクが指すリソースのタイプを示しています。クライアントはresourceTypeを使用して、GETおよびPOSTの予測されるレスポンス本文とPOSTおよびPUTの許容されるリクエスト本文を判断します。

表C-45に、クライアントがこのリソースからリンクできるリソース・タイプを示します。タグ付きアイテムには、それ自身と、結果の次のページまたは前のページへのリファレンス・リンクがあります。

表C-45 taggedItemsに関連するリソース・タイプ

rel

リソース・タイプ

self

urn:oracle:webcenter:tagging:taggedItems

前/次

urn:oracle:webcenter:tagging:taggedItems

C.17.4.4 urn:oracle:webcenter:tagging:taggedItem

このリソース・タイプを使用して、タグ付けされたアイテムと関連するリソースを参照するため(GET)、タグ付けされたアイテムを追加するため(POST)、タグ付けされたアイテムのタグを更新するため(PUT)およびアイテムからすべてのタグを削除するため(DELETE)に使用するURIを識別します。

GET操作のレスポンスには、1つのタグ付きアイテムまたは日付、タグ・ワードなどでフィルタできるすべてのタグ付きアイテムが含まれています。各タグには、そのタグでの操作に使用されるリンクがあります。POST操作のレスポンスには、このタグのコレクション内で作成されたタグ付きアイテムとそのタグ付きアイテムで操作するためのリンクが含まれています。

taggedItemへのナビゲーション・パス

この項では、クライアントがハイパーメディアを経由してこのリソースにアクセスする方法を示します:

resourceindex
taggedItems
taggedItem

resourceindex
spaces
spaces:resourceindex
spaces:taggedItems
spaces:taggedItem

C.17.4.4.1 taggedItemでサポートされるメソッド

次のメソッドは、このリソースによりサポートされています:

- GET

- リクエスト - 本体: なし、パラメータ: serviceId、keyword、tags、users、dt、shared、itemsPerPage

- レスポンス - 本体: タグ付けしたアイテム

説明:

- serviceId - アイテムのサービスIDを指定します。

- keyword - リソースのタイトルのキーワードを指定します。

- tags - URLエンコードのスペース(+)で区切られたこのタグ・リストでフィルタするように指定します。たとえば、「webcenter」と「help」がタグ付けされたアイテムは、tags=webcenter+helpで検索できます。

- users - URLエンコードのスペース(+)で区切られたこのユーザー・リストでフィルタするように指定します。たとえば、users=monty+vicki+pat。

- dt - この日付、デフォルトではブックマークが保存された最近の日付{DD-MM-CCYY}でブックマークをフィルタするように指定します。

- shared - 個人用リソース(同じユーザーによってのみプライベートにタグ付けされたリソース)のみを返すにはtrueを指定し、システム・リソース(1つ以上のパブリック・タブを持つリソース)を返すにはfalseを指定します。

- itemsPerPage - レスポンスで返す結果の最大数を指定します(1-n)。これはページ区切りに使用されます。

- PUT

- リクエスト - 本体: taggedItem

- レスポンス - 本体: taggedItem

<taggeditem>
<tagWords>foo bar boo far</tagWords>
</taggeditem>

- DELETE

- リクエスト - 本体: なし

- レスポンス - 本体: なし

C.17.4.4.2 taggedItemからリンクされるリソース・タイプ

resourceTypeリンク属性は、リンクが指すリソースのタイプを示しています。クライアントはresourceTypeを使用して、GETおよびPOSTの予測されるレスポンス本文とPOSTおよびPUTの許容されるリクエスト本文を判断します。

表C-46に、クライアントがこのリソースからリンクできるリソース・タイプを示します。タグ付きアイテムには、それ自身および関連するタグ付きアイテムへのリファレンス・リンクと外部リンクがあります。

表C-46 taggedItemに関連するリソース・タイプ

rel

リソース・タイプ

self

urn:oracle:webcenter:tagging:taggedItem

urn:oracle:webcenter:tagging:taggedItems

alternate

リソースのタイプは、タグが付けられたリソースのタイプによって異なります。たとえば、ページはurn:oracle:webcenter:page:pageのようになります

C.17.4.5 urn:oracle:webcenter:tagging:users

このリソース・タイプを使用して、特定のタグのリストに関係するピープルのリストを取得します。

C.17.4.5.1 usersへのナビゲーション・パス

この項では、クライアントがハイパーメディアを経由してこのリソースにアクセスする方法を示します:

resourceindex
taggingusers

resourceindex
spaces
spaces:resourceindex
spaces:taggingusers

C.17.4.5.2 usersでサポートされるメソッド

次のメソッドは、このリソースによりサポートされています:

- GET

- リクエスト - 本体: なし、パラメータ: startIndex、itemsPerPage、tags、users

- レスポンス - 本体: peopleプロファイル

説明:

- startIndex - 結果セットに含める、最初に一致する結果のインデックスを指定します(0-n ... 0から始まる)。これはページ区切りに使用されます。

- itemsPerPage - レスポンスで返す結果の最大数を指定します(1-n)。これはページ区切りに使用されます。

- tags - URLエンコードのスペース(+)で区切られたこのタグ・リストでフィルタするように指定します。たとえば、「webcenter」と「help」がタグ付けされたアイテムは、tags=webcenter+helpで検索できます。

- users - URLエンコードのスペース(+)で区切られたこのユーザー・リストでフィルタするように指定します。たとえば、users=monty+vicki+pat。

C.17.4.5.3 usersからリンクされるリソース・タイプ

resourceTypeリンク属性は、リンクが指すリソースのタイプを示しています。クライアントはresourceTypeを使用して、GETおよびPOSTの予測されるレスポンス本文とPOSTおよびPUTの許容されるリクエスト本文を判断します。

表C-47に、個々のユーザーがこのリソースからリンクできるリソース・タイプを示します。ユーザーには、それ自身と、結果の次のページまたは前のページへのリファレンス・リンクがあります。

表C-47 usersに関連するリソース・タイプ

rel

リソース・タイプ

self

urn:oracle:webcenter:tagging:users

前/次

urn:oracle:webcenter:tagging:users

C.18 ディスカッションREST APIの使用

WebCenter Portalは、ディスカッションをサポートするためのREST APIを提供しています。ディスカッションのREST APIを使用すると、ディスカッション・フォーラム、トピックおよびメッセージを投稿、参照、更新および削除できます。

この項では、ディスカッションに関連するREST APIメソッドについて説明します。次のトピックが含まれています:

- ディスカッションのエントリ・ポイント

- ディスカッションのリソース・タイプの分類

- セキュリティに関する考慮事項

- ディスカッションのリソース・タイプ

C.18.1 ディスカッションのエントリ・ポイント

各RESTサービスは、そのサービスのエントリ・ポイントを提供するリソース索引内にリンク要素を持っています。ディスカッションのエントリ・ポイントを見つけるには、次のresourceTypeを持つリンク要素を見つけます。

urn:oracle:webcenter:discussions:forums

対応するhrefまたはtemplate要素によって、URIエントリ・ポイントが提供されます。クライアントはこのエントリ・ポイントにHTTPリクエストを送信して、ディスカッションを操作します。

リソース索引の詳細は、「リソース索引の使用」を参照してください。

リソース・タイプの詳細は、「リソース・タイプ」を参照してください。

C.18.2 ディスカッションのリソース・タイプの分類

クライアントがエントリ・ポイントを識別すると、リソース・タイプの分類によりナビゲートして、必要な操作を実行できます。個々のリソース・タイプの詳細は、「リソース・タイプ」の該当の項を参照してください。

ディスカッションの分類は、次のとおりです。

urn:oracle:webcenter:discussions:forums
urn:oracle:webcenter:discussions:forum
urn:oracle:webcenter:discussions:forum:topics
urn:oracle:webcenter:discussions:forum:topic
urn:oracle:webcenter:discussions:forum:topic:messages
urn:oracle:webcenter:discussions:forum:topic:message

サービス・エントリ・ポイントの他、URLテンプレートにより、クライアントは、問合せパラメータを渡してリクエストをカスタマイズしたり戻されたデータのフォームを制御できます。

ディスカッション・リソース内のコレクション・リソースは、ページ区切り(startIndexおよびitemsPerPage)をサポートします。その他の問合せパラメータ(searchとprojection)はサポートされていません。

C.18.3 セキュリティに関する考慮事項

ディスカッションでは、セキュリティに関する特定の考慮事項はありません。一般的なセキュリティに関する考慮事項については、「WebCenter Portal REST APIの概要」を参照してください。

C.18.4 ディスカッションのリソース・タイプ

この項では、各リソース・タイプについて説明します。次のトピックが含まれています:

- urn:oracle:webcenter:discussions:forums

- urn:oracle:webcenter:discussions:forum

- urn:oracle:webcenter:discussions:forum:topics

- urn:oracle:webcenter:discussions:forum:topic

- urn:oracle:webcenter:discussions:forum:topic:messages

- urn:oracle:webcenter:discussions:forum:topic:message

C.18.4.1 urn:oracle:webcenter:discussions:forums

ディスカッション・フォーラムの参照(GET)および書込み(POST)に使用するURIを識別するには、このリソース・タイプを使用します。GET操作からのレスポンスには、このフォーラム・コレクション内の各フォーラムが含まれており、各フォーラムには、そのフォーラムの操作で使用するリンクが含まれています。POST操作からのレスポンスには、このフォーラム・コレクションに作成されたフォーラムと、そのフォーラムを操作するリンクが含まれています。

C.18.4.1.1 forumsへのナビゲーション・パス

この項では、クライアントがハイパーメディアを経由してこのリソースにアクセスする方法を示します:

resourceindex
forums

resourceindex
spaces
spaces:resourceindex
spaces:forums

C.18.4.1.2 forumsでサポートされるメソッド

次のメソッドは、このリソースによりサポートされています:

- GET

- リクエスト - 本体: なし、パラメータ: startIndex、itemsPerPage (ページ区切り)

- レスポンス - 本体: forums

- POST

- リクエスト - 本体: forum

- レスポンス - 本体: forum

1ページに表示されるフォーラムの数のデフォルトは10です。詳細は、「テンプレート」を参照してください。

C.18.4.1.3 forumsからリンクされるリソース・タイプ

表C-48に、クライアントがこのリソースからリンクできるリソース・タイプを示します。

表C-48 forumsに関連するリソース・タイプ

rel

リソース・タイプ

self

urn:oracle:webcenter:discussions:forums

urn:oracle:webcenter:discussions:forum

C.18.4.2 urn:oracle:webcenter:discussions:forum

特定のディスカッション・フォーラムの参照(GET)、更新(PUT)および削除(DELETE)で使用するURIを識別するには、このリソース・タイプを使用します。GET操作からのレスポンスには、URIで識別された特定のフォーラムが含まれています。PUT操作からのレスポンスには、URIで識別されるフォーラムの変更されたバージョンが含まれています。DELETE操作からのレスポンスは、204です。

C.18.4.2.1 forumへのナビゲーション・パス

この項では、クライアントがハイパーメディアを経由してこのリソースにアクセスする方法を示します:

resourceindex
forums
forum

resourceindex
spaces
spaces:resourceindex
spaces:forums
forum

resourceindex
activities
forum

C.18.4.2.2 forumでサポートされるメソッド

次のメソッドは、このリソースによりサポートされています:

- GET

- リクエスト - 本体: なし

- レスポンス - 本体: forum

- PUT

- リクエスト - 本体: forum

- レスポンス - 本体: forum

- DELETE

- リクエスト - 本体: なし

- レスポンス - 本体: なし

C.18.4.2.3 forumの書込み可能要素

表C-49に、このリソースの書込み可能要素を示します。

表C-49 forumの書込み可能要素

要素

タイプ

必須

制約

説明

name

String

はい

1文字以上の文字

フォーラムの名前

displayName

String

いいえ

1文字以上の文字

表示に使用される名前

description

String

いいえ

1文字以上の文字

フォーラムの説明

C.18.4.2.4 forumの読取り専用要素

表C-50に、このリソースの読取り専用要素を示します。

表C-50 forumの読取り専用要素

要素

タイプ

説明

id

Integer

フォーラムのID

parentId

Integer

親カテゴリのID

createdBy

String

フォーラムを作成したユーザーのID

author

personReference

フォーラムを作成したユーザーに関するユーザー情報。GUID、ID、表示名およびプロファイル・アイコンへのリンクで構成されます(createdByと同じユーザー)。

createdOn

Date

フォーラムが作成された日付

updatedBy

String

最後に変更を行ったユーザーのID

modifiedBy

personReference

最後に変更を行ったユーザーに関するユーザー情報。GUID、ID、表示名およびプロファイル・アイコンへのリンクで構成されます(updatedByと同じユーザー)。

updatedOn

Date

フォーラムが最後に変更された日付

webUrl

String

ディスカッション・サーバーへのダイレクト・アクセスURL

topicCount

Integer

トピック数

messageCount

Integer

メッセージ数

locked

Boolean

フォーラムがロックされている場合はTrue

favorite

Boolean

このフォーラムがお気に入りとしてマークされている場合はTrue

C.18.4.2.5 forumからリンクされるリソース・タイプ

表C-51に、クライアントがこのリソースからリンクできるリソース・タイプを示します。

表C-51 forumに関連するリソース・タイプ

rel

リソース・タイプ

self

urn:oracle:webcenter:discussions:forum

urn:oracle:webcenter:discussions:forum:topics

C.18.4.3 urn:oracle:webcenter:discussions:forum:topics

ディスカッション・トピックの参照(GET)および書込み(POST)に使用するURIを識別するには、このリソース・タイプを使用します。GET操作からのレスポンスには、このトピック・コレクション内の各トピックが含まれており、各トピックには、そのトピックの操作で使用するリンクが含まれています。POST操作からのレスポンスには、このトピック・コレクションに作成されたトピックと、そのトピックを操作するリンクが含まれています。

C.18.4.3.1 topicsへのナビゲーション・パス

この項では、クライアントがハイパーメディアを経由してこのリソースにアクセスする方法を示します:

resourceindex
forums
topics

resourceindex
spaces
spaces:resourceindex
spaces:forums
topics

C.18.4.3.2 topicsでサポートされるメソッド

次のメソッドは、このリソースによりサポートされています:

- GET

- リクエスト - 本体: なし、パラメータ: startIndex、itemsPerPage (ページ区切り)

- レスポンス - 本体: topics

- POST

- リクエスト - 本体: topic

- レスポンス - 本体: topic

詳細は、「テンプレート」を参照してください。

C.18.4.3.3 topicsからリンクされるリソース・タイプ

表C-52に、クライアントがこのリソースからリンクできるリソース・タイプを示します。

表C-52 topicsに関連するリソース・タイプ

rel

リソース・タイプ

self

urn:oracle:webcenter:discussions:forum:topics

urn:oracle:webcenter:discussions:forum:topic

C.18.4.4 urn:oracle:webcenter:discussions:forum:topic

特定のディスカッション・トピックの参照(GET)、更新(PUT)および削除(DELETE)で使用するURIを識別するには、このリソース・タイプを使用します。GET操作からのレスポンスには、URIで識別される特定のトピックが含まれています。PUT操作からのレスポンスには、URIで識別されたトピックの変更されたバージョンが含まれています。DELETE操作からのレスポンスは、204です。

C.18.4.4.1 topicへのナビゲーション・パス

この項では、クライアントがハイパーメディアを経由してこのリソースにアクセスする方法を示します:

resourceindex
forums
topics
topic

resourceindex
spaces
spaces:resourceindex
spaces:forums
topics
topic

resourceindex
activities
topicT

C.18.4.4.2 topicでサポートされるメソッド

次のメソッドは、このリソース・タイプでサポートされています。

- GET

- リクエスト-本体: なし

- レスポンス-本体: topic

- PUT

- リクエスト-本体: topic

- レスポンス-本体: topic

- DELETE

- リクエスト-本体: なし

- レスポンス-本体: なし

C.18.4.4.3 topicの書込み可能要素

表C-53に、このリソース・タイプの書込み可能要素を示します。

表C-53 topicの書込み可能要素

要素

タイプ

必須

制約

説明

subject

String

はい

1文字以上の文字

トピックの件名

body

String

いいえ

0文字以上の文字

トピックの内容

C.18.4.4.4 topicの読取り専用要素

表C-54に、このリソース・タイプの読取り専用要素を示します。

表C-54 topicの読取り専用要素

要素

タイプ

説明

id

Integer

トピックの識別子

parentId

Integer

親メッセージの識別子

forumId

Integer

このトピックの投稿先フォーラムの識別子

topicId

Integer

このトピックの投稿先トピックの識別子

createdBy

String

トピックを作成したユーザーのID

author

personReference

トピックを作成したユーザーに関するユーザー情報。GUID、ID、表示名およびプロファイル・アイコンへのリンクで構成されます(createdByと同じユーザー)。

createdOn

Date

トピックが作成された日付

updatedBy

String

トピックを最後に更新したユーザー

updatedOn

Date

トピックが最後に更新された日付

webUrl

String

ディスカッション・サーバーへのダイレクト・アクセスURL

depth

Integer

メッセージの階層の深度

messageCount

Integer

このトピックの下の子メッセージ数

numberOfReplies

Integer

このトピックに対する返信数

favorite

Boolean

そのユーザーでは、このトピックがお気に入りとしてのマークされているかどうか

locked

Boolean

トピックがロックされているかどうか

hidden

Boolean

トピックが非表示かどうか

hasAttachment

Boolean

トピックの添付ファイルの有無

C.18.4.4.5 topicからリンクされるリソース・タイプ

表C-55に、クライアントがこのリソースからリンクできるリソース・タイプを示します。

表C-55 topicに関連するリソース・タイプ

rel

リソース・タイプ

self

urn:oracle:webcenter:discussions:forum:topic

urn:oracle:webcenter:discussions:forum:topic:messages

C.18.4.5 urn:oracle:webcenter:discussions:forum:topic:messages

ディスカッション・トピック・メッセージの参照(GET)および書込み(POST)に使用するURIを識別するには、このリソース・タイプを使用します。GET操作からのレスポンスには、このメッセージ・コレクション内の各メッセージが含まれており、各メッセージには、そのメッセージの操作で使用するリンクが含まれています。POST操作からのレスポンスには、このメッセージ・コレクションに作成されたメッセージと、そのメッセージを操作するリンクが含まれています。

C.18.4.5.1 messagesへのナビゲーション・パス

この項では、クライアントがハイパーメディアを経由してこのリソースにアクセスする方法を示します:

resourceindex
forums
topics
messages

resourceindex
spaces
spaces:resourceindex
spaces:forums
topics
messages

C.18.4.5.2 messagesでサポートされるメソッド

次のメソッドは、このリソースによりサポートされています:

- GET

- リクエスト - 本体: なし、パラメータ: startIndex、itemsPerPage (ページ区切り)

- レスポンス - 本体: messages

- POST

- リクエスト - 本体: message

- レスポンス - 本体: message

詳細は、「テンプレート」を参照してください。

C.18.4.5.3 messagesからリンクされるリソース・タイプ

表C-56に、クライアントがこのリソースからリンクできるリソース・タイプを示します。

表C-56 messagesに関連するリソース・タイプ

rel

リソース・タイプ

self

urn:oracle:webcenter:discussions:forum:topic:messages

urn:oracle:webcenter:discussions:forum:topic:message

C.18.4.6 urn:oracle:webcenter:discussions:forum:topic:message

特定のディスカッション・トピック・メッセージの参照(GET)、更新(PUT)および削除(DELETE)で使用するURIを識別するには、このリソース・タイプを使用します。GET操作からのレスポンスには、URIで識別される特定のメッセージが含まれています。PUT操作からのレスポンスには、URIで識別されるメッセージの変更されたバージョンが含まれています。DELETE操作からのレスポンスは、204です。

C.18.4.6.1 messageへのナビゲーション・パス

この項では、クライアントがハイパーメディアを経由してこのリソースにアクセスする方法を示します:

resourceindex
forums
topics
messages
message

resourceindex
spaces
spaces:resourceindex
spaces:forums
topics
messages
message

C.18.4.6.2 messageでサポートされるメソッド

次のメソッドは、このリソースによりサポートされています:

- GET

- リクエスト - 本体: なし

- レスポンス - 本体: message

- PUT

- リクエスト - 本体: message

- レスポンス - 本体: message

- DELETE

- リクエスト - 本体: なし

- レスポンス - 本体: なし

C.18.4.6.3 messageの書込み可能要素

表C-57に、このリソースの書込み可能要素を示します。

表C-57 messageの書込み可能要素

要素

タイプ

必須

制約

説明

subject

String

はい

1文字以上の文字

このメッセージの件名

body

String

いいえ

0文字以上の文字

このメッセージの内容

C.18.4.6.4 messageの読取り専用要素

表C-58に、このリソースの読取り専用要素を示します。

表C-58 messageの読取り専用要素

要素

タイプ

説明

id

Integer

メッセージのID

parentId

Integer

親メッセージのID

forumId

Integer

メッセージの投稿先フォーラムのID

topicId

Integer

メッセージの投稿先トピックのID

createdBy

String

メッセージを作成したユーザーのID

author

personReference

メッセージを作成したユーザーに関するユーザー情報。GUID、ID、表示名およびプロファイル・アイコンへのリンクで構成されます(createdByと同じユーザー)。

createdOn

Date

メッセージが作成された日付

updatedBy

String

最後に変更を行ったユーザー

updatedOn

Date

メッセージが最後に変更された日付

webUrl

String

ディスカッション・サーバーへのダイレクト・アクセスURL

depth

Integer

メッセージの階層の深度

messageCount

Integer

メッセージ数

numberOfReplies

Integer

このメッセージに対する返信数

hidden

Boolean

このメッセージが非表示の場合はTrue

hasAttachment

Boolean

メッセージに添付ファイルがある場合はTrue

C.18.4.6.5 messageからリンクされるリソース・タイプ

表C-59に、クライアントがこのリソースからリンクできるリソース・タイプを示します。

表C-59 messageに関連するリソース・タイプ

rel

リソース・タイプ

self

urn:oracle:webcenter:discussions:forum:topic:message

urn:oracle:webcenter:discussions:forum:topic:messages

C.19 リストREST APIの使用

Oracle WebCenter Portalには、用意されたタスク・フローではなく、インタフェースを介してリスト機能にアクセスできるREST APIがあります。リストREST APIを使用すると、次のアクションを実行できます。

- ポータル内でのリストの使用。リスト群からのリストの取得、新しいリストの追加などがあります

- 1つのリストの使用。リスト・メタデータの取得または更新、リストの削除などがあります

- リスト内の行の使用

- リスト行の使用。行の取得、更新、削除などがあります

- 列の使用。列の追加などがあります

- リスト列の使用。列の取得、更新、削除などがあります

この項では、リストに関連付けられたREST APIメソッドについて説明します。次のトピックが含まれています:

- リストのエントリ・ポイント

- リストのリソース・タイプの分類

- リストのセキュリティに関する考慮事項

- リストのリソース・タイプ

関連項目:

REST APIの概要は、「WebCenter Portal REST APIの概要」を参照してください。

C.19.1 リストのエントリ・ポイント

WebCenter PortalのポータルでリストのRESTエントリ・ポイントを取得するには、特定のポータルを検索してリソース索引を取得します。対応するhrefまたはtemplate要素によって、ポータル内のリストを取得するURIエントリ・ポイントが提供されます。

1. リストを取得するポータルに移動します。

2. 次のリソース索引を取得します。

urn:oracle:webcenter:resourceindex

3. 返されたhrefに移動します。

4. リソース・タイプを検索します。たとえば、ポータルのすべてのリストを取得するには、次のように検索します。

urn:oracle:webcenter:space:lists

関連項目:

リソース索引の詳細は、「リソース索引の使用」を参照してください。

リソース・タイプの詳細は、「リソース・タイプ」を参照してください。

C.19.2 リストのリソース・タイプの分類

クライアントがエントリ・ポイントを識別すると、リソース・タイプの分類によりナビゲートして、必要な操作を実行できます。リスト・リソース・タイプの分類は、次のとおりです。

urn:oracle:webcenter:space:lists
urn:oracle:webcenter:space:list
urn:oracle:webcenter:space:list:rows
urn:oracle:webcenter:space:list:row
urn:oracle:webcenter:space:list:columns
urn:oracle:webcenter:space:list:column

C.19.3 リストのセキュリティに関する考慮事項

どのリストREST APIメソッドにアクセスする場合でも、RESTサービスにログインする必要があります。その後、基礎となるサービスによって権限が確認されます。

関連項目:

一般的なセキュリティに関する考慮事項については、「WebCenter Portal REST APIのセキュリティに関する考慮事項」を参照してください。

C.19.4 リストのリソース・タイプ

この項では、各リソース・タイプについて知っておく必要があるすべての情報を提供します。次のトピックが含まれています:

- urn:oracle:webcenter:space:lists

- urn:oracle:webcenter:space:list

- urn:oracle:webcenter:space:list:rows

- urn:oracle:webcenter:space:list:row

- urn:oracle:webcenter:space:list:columns

- urn:oracle:webcenter:space:list:column

C.19.4.1 urn:oracle:webcenter:space:lists

listsレスポンスでは、特定のポータル内のリストを取得する方法(GET)およびリストをポータルに追加する方法(POST)が提供されます。この項には次のトピックが含まれます:

- listsへのナビゲーション・パス

- listsでサポートされるメソッド

- メソッド(lists): GET

- メソッド(lists): POST

- listsからリンクされるリソース・タイプ

C.19.4.1.1 listsへのナビゲーション・パス

この項では、クライアントがハイパーメディアを経由してlistsリソースにアクセスする方法を示します。

urn:oracle:webcenter:resourceindex
urn:oracle:webcenter:spaces
urn:oracle:webcenter:space:resourceindex
urn:oracle:webcenter:space:lists

C.19.4.1.2 listsでサポートされるメソッド

listsリソース・タイプでは、次のメソッドがサポートされます。

- メソッド(lists): GET

- メソッド(lists): POST

C.19.4.1.2.1 メソッド(lists): GET

このメソッドは、ポータル内のリストを取得します。

- リソースURI。例:

http://host:port/rest/api/spaces/vs1/lists?q=name:equals:ProjectIssues&utoken=FKld8lalI3QRdi8TgQkOCGEzxL5x_w**

- リクエスト本体: なし

- リクエスト・ヘッダー: [Accept = application/xml | application/json]

- リクエスト・パラメータ - startIndex、itemsPerPage、q、projection

- 問合せ用のqパラメータの形式は'q=attribute:operator:value'です。例:

'q=name:equals:ProjectIssues'

- Stringsでサポートされる演算子: equals、not.equals、contains、starts.with

- Datesでサポートされる演算子: equals、not.equals、greater.than、greater.than.or.equals、less.than、less.than.or.equals

- 複数の条件をセミコロン(;)で区切って指定できます。

- 検索可能な属性(表C-60)

表C-60 listsのGETメソッドで検索可能な属性

要素

タイプ

説明

name

string

リストの名前

description

string

リストの説明

creator

string

リストを作成したユーザー

created

date

リストが作成された日付

modifier

string

リストを変更したユーザー

modified

date

最後にリストが変更された日付

- レスポンス・ステータス: 200 [OK]

- レスポンス本文: <lists>

- 例:

<lists resourceType="urn:oracle:webcenter:space:lists">
<links>
<link resourceType="urn:oracle:webcenter:list:lists"
rel="self" href="opaque"/>
<link template="opaque?startIndex={startIndex}&
itemsPerPage={itemsPerPage}&q={searchTerms}&
projection={projection}
&stoken=FDgsOu7a2NTTM1cLJvnpkDXfihtHx5Q*"          resourceType="urn:oracle:webcenter:list:lists"/>
</links>
<items>
<list resourceType="urn:oracle:webcenter:space:list">
<links>
<link resourceType="urn:oracle:webcenter:list" rel="self"
href="opaque"
capabilities="urn:oracle:webcenter:update
urn:oracle:webcenter:delete"/>
<link resourceType="urn:oracle:webcenter:list:rows"
href="opaque"
capabilities="urn:oracle:webcenter:create"/>
<link template="opaque?
startIndex={startIndex}&
itemsPerPage={itemsPerPage}&q={searchTerms}&
stoken=FDgsOu7a2NTTM1cLJvnpkDXfihtHx5Q*"
resourceType="urn:oracle:webcenter:list:rows"/>
<link resourceType="urn:oracle:webcenter:list:columns"
href="opaque"
capabilities="urn:oracle:webcenter:create"/>
</links>
<id>/oracle/webcenter/list/scopedMD/
se0dea180_e2c1_45ac_b08b_
ba2c0b26aa72/lists/ProjectIssues.xml</id>
<name>Project Issues</name>
<description/>
</list>
</items>
</lists>

C.19.4.1.2.2 メソッド(lists): POST

このメソッドは、ポータル内にリストを作成します。

- リソースURI。例:

http://host:port/rest/api/spaces/vs1/lists?utoken=FKld8lalI3QRdi8TgQkOCGEzxL5x_w**

- リクエスト本文: <list>

- 書込み可能要素(表C-61)

表C-61 リスト作成の書込み可能要素

要素

タイプ

制約

説明

name脚注8

string

—

リストの名前

description

string

—

リストの説明

columns脚注9

urn:oracle:webcenter:space:list:columns

1から30

リストの列

脚注8

必須要素です

脚注9

必須要素です。

- 例:

<list>
<name>RestExample</name>
<description>Created using rest api</description>
<columns>
<items>
<metaColumn>
<name>No.</name>
<dataType>number</dataType>
</metaColumn>
<metaColumn>
<name>Description</name>
<dataType>string</dataType>
</metaColumn>
</items>
</columns>
</list>

- リクエスト・ヘッダー: Content-Type = application/xml | application/json, [Accept = application/xml | application/json]

- レスポンス・ステータス: 201 [Created]

- レスポンス本文: <list>

- 取得される要素(表C-62)

表C-62 listsから取得される要素

要素

タイプ

説明

id

string

リストのID

name

string

リストの名前

description

string

リストの説明

scope.guid

string

リストが属するポータルのGUID

scope.name

string

リストが属するポータルの名前

creator

string

リストを作成したユーザーの名前

created

date

リストが作成された日付

modifier

string

最後にリストを変更したユーザーの名前

modified

date

最後にリストが変更された日付

columns

urn:oracle:webcenter:space:list:columns

リストの列

- 例:

<list resourceType="urn:oracle:webcenter:space:list">
<links>
<link resourceType="urn:oracle:webcenter:space:list" rel="self"
href="http://host:port/rest/api/spaces/vs1/
lists/(/oracle/webcenter/list/scopedMD/s355923f0_2f04_4fd0_
83ad_f7dac2a7ceed/lists/ls_c9cecbc7_756b_417b_a35f_
fb03874979c0.xml)?utoken=FKld8lalI3QRdi8TgQkOCGEzxL5x_w**"
capabilities="urn:oracle:webcenter:read
urn:oracle:webcenter:update urn:oracle:webcenter:delete"/>
<link template="http://host:port
/rest/api/spaces/vs1/lists/(/oracle/webcenter/list/scopedMD/
s355923f0_2f04_4fd0_83ad_f7dac2a7ceed/lists/ls_c9cecbc7_756b_
417b_a35f_fb03874979c0.xml)/rows?
utoken=FKld8lalI3QRdi8TgQkOCGEzxL5x_
w**&startIndex={startIndex}&itemsPerPage={itemsPerPage}
&q={searchTerms}&utoken=FKld8lalI3QRdi8TgQkOCGEzxL5x_w**"
resourceType="urn:oracle:webcenter:space:list:rows"
href="http://host:port/rest/api/spaces/
vs1/lists/(/oracle/webcenter/list/scopedMD/s355923f0_2f04_4fd0_
83ad_f7dac2a7ceed/lists/ls_c9cecbc7_756b_417b_a35f_
fb03874979c0.xml)/rows?utoken=FKld8lalI3QRdi8TgQkOCGEzxL5x_w**"
capabilities="urn:oracle:webcenter:read
urn:oracle:webcenter:create"/>
<link resourceType="urn:oracle:webcenter:space:list:columns"
href="http://host:port/rest/api/spaces/
vs1/lists/(/oracle/webcenter/list/scopedMD/s355923f0_2f04_4fd0_
83ad_f7dac2a7ceed/lists/ls_c9cecbc7_756b_417b_a35f_
fb03874979c0.xml)/columns?utoken=FKld8lalI3QRdi8TgQkOCGEzxL5x_
w**" capabilities="urn:oracle:webcenter:read
urn:oracle:webcenter:create"/>
</links>
<id>/oracle/webcenter/list/scopedMD/s355923f0_2f04_4fd0_83ad_
f7dac2a7ceed/lists/ls_c9cecbc7_756b_417b_a35f_fb03874979c0.xml</id>
<name>RestExample</name>
<description>Created using rest api</description>
<scope>
<guid>s355923f0_2f04_4fd0_83ad_f7dac2a7ceed</guid>
<name>vs1</name>
</scope>
<creator>weblogic</creator>
<author>
<links>
<link resourceType="urn:oracle:webcenter:people:person"
rel="via" href="http://host:port/
rest/api/people/E9A35E80F0BC11DFBFBE0FE339E55B21/lists/
@self?utoken=FKld8lalI3QRdi8TgQkOCGEzxL5x_w**"
capabilities="urn:oracle:webcenter:read"/>
<link type="image/png"
template="http://host:port/
webcenter/profilephoto/45394133354538304630424
33131444642464245304645333339453535423231/{size}?
_xResourceMethod=wsrp"
resourceType="urn:oracle:webcenter:people:person"
rel="urn:oracle:webcenter:people:icon"
href="http://host:port/webcenter/
profilephoto/4539413335453830463042433131444642464245304645
333339453535423231/SMALL?_xResourceMethod=wsrp"
capabilities="urn:oracle:webcenter:read"/>
<link type="text/html"
resourceType="urn:oracle:webcenter:spaces:profile"
rel="alternate" href="http://host:port/
webcenter/faces/oracle/webcenter/webcenterapp/view/pages/
peopleconn/UserProfileGallery.jspx?wc.username=weblogic"
capabilities="urn:oracle:webcenter:read"/>
</links>
<displayName>weblogic</displayName>
<guid>E9A35E80F0BC11DFBFBE0FE339E55B21</guid>
<id>weblogic</id>
</author>
<created>2010-11-18T06:10:32.250-08:00</created>
<modifier>weblogic</modifier>
<modifiedByUser>
<displayName>weblogic</displayName>
<guid>E9A35E80F0BC11DFBFBE0FE339E55B21</guid>
<id>weblogic</id>
</modifiedByUser>
<modified>2010-11-18T06:10:32.250-08:00</modified>
<columns resourceType="urn:oracle:webcenter:space:list:columns">
<links>
<link resourceType="urn:oracle:webcenter:space:list:columns"
rel="self"
href="http://host:port/rest/api/spaces
/vs1/lists/(/oracle/webcenter/list/scopedMD/
s355923f0_2f04_4fd0_83ad_
f7dac2a7ceed/lists/ls_c9cecbc7_756b_417b_a35f_
fb03874979c0.xml)/columns?utoken=
FKld8lalI3QRdi8TgQkOCGEzxL5x_w**"
capabilities="urn:oracle:webcenter:read
urn:oracle:webcenter:create"/>
<link resourceType="urn:oracle:webcenter:space:list"
rel="urn:oracle:webcenter:parent"
href="http://host:port/
rest/api/spaces/vs1/lists/(/oracle/webcenter/list/scopedMD/
s355923f0_2f04_4fd0_83ad_f7dac2a7ceed/lists/
ls_c9cecbc7_756b_417b_a35f_fb03874979c0.xml)?
utoken=FKld8lalI3QRdi8TgQkOCGEzxL5x_w**"/>
</links>
<items>
<metaColumn resourceType=
"urn:oracle:webcenter:space:list:column">
<links>
<link resourceType="urn:oracle:webcenter:space:
list:column" rel="self
"href="http://host:port/
rest/api/spaces/vs1/lists/
(/oracle/webcenter/list/scopedMD/
s355923f0_2f04_4fd0_83ad_f7dac2a7ceed/
lists/ls_c9cecbc7_756b_417b_a35f_
fb03874979c0.xml)/columns/
(lco_9bdd1418_6004_40ba_a052_04e8335b7ee8)?
utoken=FKld8lalI3QRdi8TgQkOCGEzxL5x_w**"
capabilities="urn:oracle:webcenter:read
urn:oracle:webcenter:update
urn:oracle:webcenter:delete"/>
</links>
<id>lco_9bdd1418_6004_40ba_a052_04e8335b7ee8</id>
<name>No.</name>
<dataType>number</dataType>
<required>false</required>
<displayLength>10</displayLength>
<format>number</format>
<allowLinks>false</allowLinks>
</metaColumn>
<metaColumn resourceType=
"urn:oracle:webcenter:space:list:column">
<links>
<link resourceType=
"urn:oracle:webcenter:space:list:column"
rel="self"
href="http://host:port/
rest/api/spaces/vs1/lists/(/oracle/
webcenter/list/scopedMD/
s355923f0_2f04_4fd0_83ad_
f7dac2a7ceed/lists/ls_c9cecbc7_756b_
417b_a35f_fb03874979c0.xml)/columns/
(lco_3a31fd20_24f1_4422_99fd_c00d7bed4b24)?
utoken=FKld8lalI3QRdi8TgQkOCGEzxL5x_w**"
capabilities="urn:oracle:webcenter:read
urn:oracle:webcenter:update
urn:oracle:webcenter:delete"/>
</links>
<id>lco_3a31fd20_24f1_4422_99fd_c00d7bed4b24</id>
<name>Description</name>
<dataType>string</dataType>
<required>false</required>
<maxLength>500</maxLength>
<displayLength>20</displayLength>
<allowLinks>false</allowLinks>
<editLines>1</editLines>
</metaColumn>
</items>
</columns>
</list>

C.19.4.1.3 listsからリンクされるリソース・タイプ

表C-63に、クライアントがlistsリソースからリンクできるリソース・タイプを示します。

表C-63 listsからリンクされるリソース・タイプ

rel

リソース・タイプ

self

urn:oracle:webcenter:space:lists

urn:oracle:webcenter:space:list

C.19.4.2 urn:oracle:webcenter:space:list

listレスポンスでは、個々のリストを取得、更新および削除する方法が提供されます。この項には次のトピックが含まれます:

- listへのナビゲーション・パス

- listでサポートされるメソッド

- メソッド(list): GET

- メソッド(list): PUT

- メソッド(list): DELETE

- listからリンクされるリソース・タイプ

C.19.4.2.1 listへのナビゲーション・パス

この項では、クライアントがハイパーメディアを経由してlistリソースにアクセスする方法を示します。

urn:oracle:webcenter:resourceindex
urn:oracle:webcenter:spaces
urn:oracle:webcenter:space:resourceindex
urn:oracle:webcenter:space:lists
urn:oracle:webcenter:space:list

C.19.4.2.2 listでサポートされるメソッド

listリソース・タイプでは、次のメソッドがサポートされます。

- メソッド(list): GET

- メソッド(list): PUT

- メソッド(list): DELETE

C.19.4.2.3 メソッド(list): GET

リストを取得するには、このメソッドを使用します。

- リソースURI。例:

http://host:port/rest/api/spaces/vs1/lists/(/oracle/webcenter/list/scopedMD/
s355923f0_2f04_4fd0_83ad_f7dac2a7ceed/lists/ls_bb806754_0652_4d49_9354_
5fb62dc3514d.xml)?utoken=FKld8lalI3QRdi8TgQkOCGEzxL5x_w**

- リクエスト本体: なし

- リクエスト・ヘッダー: [Accept = application/xml | application/json]

- レスポンス・ステータス: 200 [OK]

- レスポンス本文: <list>

- 取得される要素(表C-64)

表C-64 listで取得される要素

要素

タイプ

説明

id

string

リストのID

name

string

リストの名前

description

string

リストの説明

scope.guid

string

リストが属するポータルのGUID

scope.name

string

リストが属するポータルの名前

creator

string

リストを作成したユーザー

created

Date

リストが作成された日付

modifier

string

最後にリストを変更したユーザー

modified

Date

リストが最後に変更された日付

columns

urn:oracle:webcenter:space:list:columns

リストを構成する列

- 例:

<list resourceType="urn:oracle:webcenter:space:list">
<links>
<link resourceType="urn:oracle:webcenter:space:list" rel="self"
href="http://host:port/rest/api/spaces/vs1/
lists/(/oracle/webcenter/list/scopedMD/s355923f0_2f04_4fd0_83ad_
f7dac2a7ceed/lists/ls_c9cecbc7_756b_417b_a35f_
fb03874979c0.xml)?utoken=FKld8lalI3QRdi8TgQkOCGEzxL5x_w**"
capabilities="urn:oracle:webcenter:read
urn:oracle:webcenter:update
urn:oracle:webcenter:delete"/>
<link template="http://host:port
/rest/api/spaces/vs1/lists/(/oracle/webcenter/list/scopedMD/
s355923f0_2f04_4fd0_83ad_f7dac2a7ceed/lists/ls_c9cecbc7_756b_
417b_a35f_fb03874979c0.xml)/rows?
utoken=FKld8lalI3QRdi8TgQkOCGEzxL5x_w**&
startIndex={startIndex}&itemsPerPage={itemsPerPage}&q=
{searchTerms}&utoken=FKld8lalI3QRdi8TgQkOCGEzxL5x_w**"
resourceType="urn:oracle:webcenter:space:list:rows"
href="http://host:port/rest/api/
spaces/vs1/lists/(/oracle/webcenter/list/scopedMD/s355923f0_
2f04_4fd0_83ad_f7dac2a7ceed/lists/ls_c9cecbc7_756b_417b_a35f_
fb03874979c0.xml)/rows?utoken=FKld8lalI3QRdi8TgQkOCGEzxL5x_w**"
capabilities="urn:oracle:webcenter:read
urn:oracle:webcenter:create"/>
<link resourceType="urn:oracle:webcenter:space:list:columns"
href="http://host:port/rest/api/spaces/
vs1/lists/(/oracle/webcenter/list/scopedMD/s355923f0_2f04_4fd0_
83ad_f7dac2a7ceed/lists/ls_c9cecbc7_756b_417b_a35f_
fb03874979c0.xml)/columns?utoken=FKld8lalI3QRdi8TgQkOCGEzxL5x_
w**" capabilities="urn:oracle:webcenter:read
urn:oracle:webcenter:create"/>
</links>
<id>/oracle/webcenter/list/scopedMD/s355923f0_2f04_4fd0_83ad_
f7dac2a7ceed/lists/ls_c9cecbc7_756b_417b_a35f_fb03874979c0.xml</id>
<name>RestExample</name>
<description>Created using rest api</description>
<scope>
<guid>s355923f0_2f04_4fd0_83ad_f7dac2a7ceed</guid>
<name>vs1</name>
</scope>
<creator>weblogic</creator>
<author>
<links>
<link resourceType="urn:oracle:webcenter:people:person"
rel="via" href="http://host:port/
rest/api/people/E9A35E80F0BC11DFBFBE0FE339E55B21/lists/
@self?utoken=FKld8lalI3QRdi8TgQkOCGEzxL5x_w**"
capabilities="urn:oracle:webcenter:read"/>
<link type="image/png"
template="http://host:port/
webcenter/profilephoto/4539413335453830463042433131444
642464245304645333339453535423231/{size}?
_xResourceMethod=wsrp"
resourceType="urn:oracle:webcenter:people:person"
rel="urn:oracle:webcenter:people:icon"
href="http://host:port/
webcenter/profilephoto/4539413335453830463042433131444
642464245304645333339453535423231/SMALL?
_xResourceMethod=wsrp"
capabilities="urn:oracle:webcenter:read"/>
<link type="text/html"
resourceType="urn:oracle:webcenter:spaces:profile"
rel="alternate" href="http://host:port/
webcenter/faces/oracle/webcenter/webcenterapp/view/pages/
peopleconn/UserProfileGallery.jspx?wc.username=weblogic"
capabilities="urn:oracle:webcenter:read"/>
</links>
<displayName>weblogic</displayName>
<guid>E9A35E80F0BC11DFBFBE0FE339E55B21</guid>
<id>weblogic</id>
</author>
<created>2010-11-18T06:10:32.250-08:00</created>
<modifier>weblogic</modifier>
<modifiedByUser>
<displayName>weblogic</displayName>
<guid>E9A35E80F0BC11DFBFBE0FE339E55B21</guid>
<id>weblogic</id>
</modifiedByUser>
<modified>2010-11-18T06:10:32.250-08:00</modified>
<columns resourceType="urn:oracle:webcenter:space:list:columns">
<links>
<link resourceType="urn:oracle:webcenter:space:list:columns"
rel="self" href="http://host:port/
rest/api/spaces/vs1/lists/(/oracle/webcenter/list/scopedMD/
s355923f0_2f04_4fd0_83ad_f7dac2a7ceed/lists/ls_c9cecbc7_
756b_417b_a35f_fb03874979c0.xml)/
columns?utoken=FKld8lalI3QRdi8TgQkOCGEzxL5x_w**"
capabilities="urn:oracle:webcenter:read
urn:oracle:webcenter:create"/>
<link resourceType="urn:oracle:webcenter:space:list"
rel="urn:oracle:webcenter:parent"
href="http://host:port/rest/api/spaces/
vs1/lists/(/oracle/webcenter/list/scopedMD/s355923f0_2f04_
4fd0_83ad_f7dac2a7ceed/lists/ls_c9cecbc7_756b_417b_a35f_
fb03874979c0.xml)?utoken=
FKld8lalI3QRdi8TgQkOCGEzxL5x_w**"/>
</links>
<items>
<metaColumn resourceType=
"urn:oracle:webcenter:space:list:column">
<links>
<link resourceType=
"urn:oracle:webcenter:space:list:column"
rel="self"
href="http://host:port/
rest/api/spaces/vs1/lists/(/oracle/webcenter/
list/scopedMD/s355923f0_2f04_4fd0_83ad_
f7dac2a7ceed/lists/ls_c9cecbc7_
756b_417b_a35f_fb03874979c0.xml)/columns/(lco_
9bdd1418_6004_40ba_a052_04e8335b7ee8)?
utoken=FKld8lalI3QRdi8TgQkOCGEzxL5x_w**"
capabilities="urn:oracle:webcenter:read
urn:oracle:webcenter:update
urn:oracle:webcenter:delete"/>
</links>
<id>lco_9bdd1418_6004_40ba_a052_04e8335b7ee8</id>
<name>No.</name>
<dataType>number</dataType>
<required>false</required>
<displayLength>10</displayLength>
<format>number</format>
<allowLinks>false</allowLinks>
</metaColumn>
<metaColumn resourceType=
"urn:oracle:webcenter:space:list:column">
<links>
<link resourceType=
"urn:oracle:webcenter:space:list:column"
rel="self"
href="http://host:port
/rest/api/spaces/vs1/lists/(/oracle/webcenter/
list/scopedMD/s355923f0_2f04_4fd0_83ad_
f7dac2a7ceed/lists/ls_c9cecbc7_756b_417b_a35f_
fb03874979c0.xml)/columns/(lco_3a31fd20_24f1_
4422_99fd_c00d7bed4b24)?
utoken=FKld8lalI3QRdi8TgQkOCGEzxL5x_w**"
capabilities="urn:oracle:webcenter:read
urn:oracle:webcenter:update                   urn:oracle:webcenter:delete"/>
</links>
<id>lco_3a31fd20_24f1_4422_99fd_c00d7bed4b24</id>
<name>Description</name>
<dataType>string</dataType>
<required>false</required>
<maxLength>500</maxLength>
<displayLength>20</displayLength>
<allowLinks>false</allowLinks>
<editLines>1</editLines>
</metaColumn>
</items>
</columns>
</list>

C.19.4.2.4 メソッド(list): PUT

リストの名前または説明を更新するには、このメソッドを使用します。

- リソースURI。例:

http://host:port/rest/api/spaces/vs1/lists/(/oracle/webcenter/list/scopedMD/
s355923f0_2f04_4fd0_83ad_f7dac2a7ceed/lists/ls_bb806754_0652_4d49_9354_
5fb62dc3514d.xml)?utoken=FKld8lalI3QRdi8TgQkOCGEzxL5x_w**

- リクエスト本文: <list>

- listの書込み可能要素(表C-65)

表C-65 listの書込み可能要素

要素

タイプ

必須

制約

説明

name脚注10

string

はい

1文字以上の文字

このリストの名前

description

string

いいえ

なし

このリストの説明

脚注10

必須要素です。

- 例:

<list>
<name>RestExampleUpdate</name>
<description>Updated using rest api</description>
</list>

- リクエスト・ヘッダー: Content-Type = application/xml | application/json, [Accept = application/xml | application/json]

- レスポンス・ステータス: 200 [OK]

- レスポンス本文: <list>

C.19.4.2.5 メソッド(list): DELETE

リストを削除するには、このメソッドを使用します。

- リソースURI。例:

http://host:port/rest/api/spaces/vs1/lists/(/oracle/webcenter/list/scopedMD/
s355923f0_2f04_4fd0_83ad_f7dac2a7ceed/lists/ls_bb806754_0652_4d49_9354_
5fb62dc3514d.xml)?utoken=FKld8lalI3QRdi8TgQkOCGEzxL5x_w**

- リクエスト本体: なし

- レスポンス・ステータス: 204 [No Content]

- レスポンス本体: なし

C.19.4.2.6 listからリンクされるリソース・タイプ

表C-66に、クライアントがlistリソースからリンクできるリソース・タイプを示します。

表C-66 listからリンクされるリソース・タイプ

rel

リソース・タイプ

self

urn:oracle:webcenter:space:list

urn:oracle:webcenter:space:list:rows

urn:oracle:webcenter:space:list:columns

C.19.4.3 urn:oracle:webcenter:space:list:rows

rowsレスポンスでは、列をリストから取得またはリストに追加する方法が提供されます。この項には次のトピックが含まれます:

- rowsへのナビゲーション・パス

- rowsでサポートされるメソッド

- rowsからリンクされるリソース・タイプ

C.19.4.3.1 rowsへのナビゲーション・パス

この項では、クライアントがハイパーメディアを経由してrowsリソースにアクセスする方法を示します。

urn:oracle:webcenter:resourceindex
urn:oracle:webcenter:spaces
urn:oracle:webcenter:space:resourceindex
urn:oracle:webcenter:space:lists
urn:oracle:webcenter:space:list
urn:oracle:webcenter:space:list:rows

C.19.4.3.2 rowsでサポートされるメソッド

rowsリソース・タイプでは、次のメソッドがサポートされます。

- メソッド(rows): GET

- メソッド(rows): POST

メソッド(rows): GET

リスト行を取得するには、このメソッドを使用します。

- リソースURI。例:

http://host:port/rest/api/spaces/vs1/lists/(/oracle/webcenter/list/scopedMD/
s355923f0_2f04_4fd0_83ad_f7dac2a7ceed/lists/ls_bb806754_0652_4d49_9354_
5fb62dc3514d.xml)/rows?q=lco_9bdd1418_6004_40ba_a052_
04e8335b7ee8:equals:2&utoken=FKld8lalI3QRdi8TgQkOCGEzxL5x_w**

- リクエスト本体: なし

- リクエスト・ヘッダー: [Accept = application/xml | application/json]

- リクエスト・パラメータ - startIndex、itemsPerPage、q、projection

- 問合せ用のqパラメータの形式は'q=columnId:operator:value'です。例:

'q=lco_9bdd1418_6004_40ba_a052_04e8335b7ee8:equals:2'

- Stringsでサポートされる演算子: equals、not.equals、contains、starts.with

- NumbersとDatesでサポートされる演算子: equals、not.equals、greater.than、greater.than.or.equals、less.than、less.than.or.equals

- 複数の条件をセミコロン(;)で区切って指定できます。

- rowsで検索可能な属性: 行は列の値で検索可能です。

- レスポンス・ステータス: 200 [OK]

- レスポンス本文: <rows>

- 例:

<rows resourceType="urn:oracle:webcenter:space:list:rows">
<links>
<link template="http://host:port/
rest/api/spaces/vs1/lists/(/oracle/webcenter/list/
scopedMD/s355923f0_2f04_4fd0_83ad_f7dac2a7ceed/lists/ls_
c9cecbc7_756b_417b_a35f_fb03874979c0.xml)/rows?
utoken=FKld8lalI3QRdi8TgQkOCGEzxL5x_w**&
startIndex={startIndex}&itemsPerPage={itemsPerPage}&
q={searchTerms}&utoken=FKld8lalI3QRdi8TgQkOCGEzxL5x_w**"
resourceType="urn:oracle:webcenter:space:list:rows" rel="self"
href="http://host:port/rest/api/spaces/
vs1/lists/(/oracle/webcenter/list/scopedMD/s355923f0_2f04_4fd0_
83ad_f7dac2a7ceed/lists/ls_c9cecbc7_756b_417b_a35f_
fb03874979c0.xml)/rows?utoken=FKld8lalI3QRdi8TgQkOCGEzxL5x_w**"
capabilities="urn:oracle:webcenter:read
urn:oracle:webcenter:create"/>
<link resourceType="urn:oracle:webcenter:space:list"
rel="urn:oracle:webcenter:parent"
href="http://host:port/rest/api/spaces/
vs1/lists/(/oracle/webcenter/list/scopedMD/s355923f0_2f04_4fd0_
83ad_f7dac2a7ceed/lists/ls_c9cecbc7_756b_417b_a35f_
fb03874979c0.xml)?utoken=FKld8lalI3QRdi8TgQkOCGEzxL5x_w**"/>
</links>
<itemsPerPage>1</itemsPerPage>
<startIndex>0</startIndex>
<items>
<row resourceType="urn:oracle:webcenter:space:list:row">
<links>
<link resourceType="urn:oracle:webcenter:space:list:row"
rel="self" href="http://host:port/
rest/api/spaces/vs1/lists/(/oracle/webcenter/list/
scopedMD/s355923f0_2f04_4fd0_83ad_
f7dac2a7ceed/lists/ls_c9cecbc7_756b_417b_a35f_
fb03874979c0.xml)/rows/(lr_a14d427f_8515_4c82_956f_
a60e6e08668c)?utoken=FKld8lalI3QRdi8TgQkOCGEzxL5x_w**"
capabilities="urn:oracle:webcenter:read
urn:oracle:webcenter:update
urn:oracle:webcenter:delete"/>
</links>
<id>lr_a14d427f_8515_4c82_956f_a60e6e08668c</id>
<listId>/oracle/webcenter/list/scopedMD/s355923f0_2f04_4fd0_
83ad_f7dac2a7ceed/lists/ls_c9cecbc7_756b_417b_a35f_
fb03874979c0.xml</listId>
<scope>s355923f0_2f04_4fd0_83ad_f7dac2a7ceed</scope>
<creator>weblogic</creator>
<author>
<links>
<link resourceType=
"urn:oracle:webcenter:people:person"
rel="via"
href="http://host:port/
rest/api/people/E9A35E80F0BC11DFBFBE0FE339E55B21/
lists/@self?utoken=FKld8lalI3QRdi8TgQkOCGEzxL5x_
w**" capabilities="urn:oracle:webcenter:read"/>
<link type="image/png"
template="http://host:port/
webcenter/profilephoto/45394133354538304630424
33131444642464245304645333339453535423231/
{size}?_xResourceMethod=wsrp"
resourceType="urn:oracle:webcenter:people:person"
rel="urn:oracle:webcenter:people:icon"
href="http://host:port/
webcenter/profilephoto/45394133354538304630424
33131444642464245304645333339453535423231/SMALL?
_xResourceMethod=wsrp"
capabilities="urn:oracle:webcenter:read"/>
<link type="text/html"
resourceType="urn:oracle:webcenter:spaces:
profile" rel="alternate"
href="http://host:port/
webcenter/faces/oracle/webcenter/webcenterapp/
view/pages/peopleconn/UserProfileGallery.jspx?
wc.username=weblogic"
capabilities="urn:oracle:webcenter:read"/>
</links>
<displayName>weblogic</displayName>
<guid>E9A35E80F0BC11DFBFBE0FE339E55B21</guid>
<id>weblogic</id>
</author>
<created>2010-11-18T07:12:06.599-08:00</created>
<modifier>weblogic</modifier>
<modifiedByUser>
<links>
<link resourceType=
"urn:oracle:webcenter:people:person" rel="via"
href="http://host:port/rest/
api/people/E9A35E80F0BC11DFBFBE0FE339E55B21/lists
/@self?utoken=FKld8lalI3QRdi8TgQkOCGEzxL5x_w**"
capabilities="urn:oracle:webcenter:read"/>
<link type="image/png"
template="http://host:port/
webcenter/profilephoto/45394133354538304630424
33131444642464245304645333339453535423231/
{size}?_xResourceMethod=wsrp"
resourceType="urn:oracle:webcenter:people:person"
rel="urn:oracle:webcenter:people:icon"
href="http://host:port/
webcenter/profilephoto/45394133354538304630424
33131444642464245304645333339453535423231/SMALL?
_xResourceMethod=wsrp"
capabilities="urn:oracle:webcenter:read"/>
<link type="text/html"
resourceType="urn:oracle:webcenter:spaces:
profile" rel="alternate"
href="http://host:port/
webcenter/faces/oracle/webcenter/webcenterapp/
view/pages/peopleconn/UserProfileGallery.jspx?
wc.username=weblogic"
capabilities="urn:oracle:webcenter:read"/>
</links>
<displayName>weblogic</displayName>
<guid>E9A35E80F0BC11DFBFBE0FE339E55B21</guid>
<id>weblogic</id>
</modifiedByUser>
<modified>2010-11-18T07:12:06.599-08:00</modified>
<columns>
<column>
<id>lco_9bdd1418_6004_40ba_a052_04e8335b7ee8</id>
<name>No.</name>
<value>1.0</value>
</column>
<column>
<id>lco_3a31fd20_24f1_4422_99fd_c00d7bed4b24</id>
<name>Description</name>
<value>test</value>
</column>
</columns>
</row>
</items>
</rows>

メソッド(rows): POST

リスト内に行を作成するには、このメソッドを使用します。

- リソースURI。例:

http://host:port/rest/api/spaces/vs1/lists/(/oracle/webcenter/list/scopedMD/
s355923f0_2f04_4fd0_83ad_f7dac2a7ceed/lists/ls_bb806754_0652_4d49_9354_
5fb62dc3514d.xml)/rows?utoken=FKld8lalI3QRdi8TgQkOCGEzxL5x_w**

- リクエスト本文: <row>

- 書込み可能要素(表C-67)

表C-67 rowsの書込み可能要素

要素

タイプ

制約

説明

columns.column.id脚注11

string

—

列のID

columns.column.value脚注12

string

列のデータ型として有効な値

列の値

脚注11

必須要素です。

脚注12

必須要素です。

- 例:

<row>
<columns>
<column>
<id>lco_9bdd1418_6004_40ba_a052_04e8335b7ee8</id>
<value>1</value>
</column>
<column>
<id>lco_3a31fd20_24f1_4422_99fd_c00d7bed4b24</id>
<value>test</value>
</column>
</columns>
</row>

- リクエスト・ヘッダー: Content-Type = application/xml | application/json, [Accept = application/xml | application/json]

- レスポンス・ステータス: 201 [Created]

- レスポンス本文: <row>

- 取得される要素(表C-68)

表C-68 rowsで取得される要素

要素

タイプ

説明

id

string

行のID

list id

string

リストのID

scope

string

リストが属するポータルのGUID

creator

string

リストを作成したユーザー

created

date

リストが作成された日付

modifier

string

最後にリストを変更したユーザー

modified

date

最後にリストが変更された日付

columns

—

列の値

- 例:

<row resourceType="urn:oracle:webcenter:space:list:row">
<links>
<link resourceType="urn:oracle:webcenter:space:list:row" rel="self"
href="http://host:port/rest/api/spaces/vs1/
lists/(/oracle/webcenter/list/scopedMD/s355923f0_2f04_4fd0_83ad_
f7dac2a7ceed/lists/ls_bb806754_0652_4d49_9354_
5fb62dc3514d.xml)/rows/(lr_4cc07327_49cb_4cd5_a270_
182ddcc8db4a)?utoken=FKld8lalI3QRdi8TgQkOCGEzxL5x_w**"
capabilities="urn:oracle:webcenter:read
urn:oracle:webcenter:update urn:oracle:webcenter:delete"/>
</links>
<id>lr_4cc07327_49cb_4cd5_a270_182ddcc8db4a</id>
<listId>/oracle/webcenter/list/scopedMD/s355923f0_2f04_4fd0_83ad_
f7dac2a7ceed/lists/ls_bb806754_0652_4d49_9354_
5fb62dc3514d.xml</listId>
<scope>s355923f0_2f04_4fd0_83ad_f7dac2a7ceed</scope>
<creator>weblogic</creator>
<author>
<links>
<link resourceType="urn:oracle:webcenter:people:person"
rel="via" href="http://host:port
/rest/api/people/E9A35E80F0BC11DFBFBE0FE339E55B21/lists/
@self?utoken=FKld8lalI3QRdi8TgQkOCGEzxL5x_w**"
capabilities="urn:oracle:webcenter:read"/>
<link type="image/png"
template="http://host:port/
webcenter/profilephoto/4539413335453830463042433131
444642464245304645333339453535423231/{size}?
_xResourceMethod=wsrp"
resourceType="urn:oracle:webcenter:people:person"
rel="urn:oracle:webcenter:people:icon"
href="http://host:port/webcenter/
profilephoto/453941333545383046304243313144464246424530
4645333339453535423231/SMALL?_xResourceMethod=wsrp"
capabilities="urn:oracle:webcenter:read"/>
<link type="text/html"
resourceType="urn:oracle:webcenter:spaces:profile"
rel="alternate" href="http://host:port/
webcenter/faces/oracle/webcenter/webcenterapp/view/pages/
peopleconn/UserProfileGallery.jspx?wc.username=weblogic"
capabilities="urn:oracle:webcenter:read"/>
</links>
<displayName>weblogic</displayName>
<guid>E9A35E80F0BC11DFBFBE0FE339E55B21</guid>
<id>weblogic</id>
</author>
<created>2010-11-17T06:34:25.042-08:00</created>
<modifier>weblogic</modifier>
<modifiedByUser>
<links>
<link resourceType="urn:oracle:webcenter:people:person"
rel="via" href="http://host:port/
rest/api/people/E9A35E80F0BC11DFBFBE0FE339E55B21/lists/
@self?utoken=FKld8lalI3QRdi8TgQkOCGEzxL5x_w**"
capabilities="urn:oracle:webcenter:read"/>
<link type="image/png"
template="http://host:port/
webcenter/profilephoto/4539413335453830463042433131
444642464245304645333339453535423231/{size}?
_xResourceMethod=wsrp"
resourceType="urn:oracle:webcenter:people:person"
rel="urn:oracle:webcenter:people:icon"
href="http://host:port/webcenter/
profilephoto/453941333545383046304243313144464246424530
4645333339453535423231/SMALL?_xResourceMethod=wsrp"
capabilities="urn:oracle:webcenter:read"/>
<link type="text/html"
resourceType="urn:oracle:webcenter:spaces:profile"
rel="alternate" href="http://host:port/
webcenter/faces/oracle/webcenter/webcenterapp/view/pages/
peopleconn/UserProfileGallery.jspx?wc.username=weblogic"
capabilities="urn:oracle:webcenter:read"/>
</links>
<displayName>weblogic</displayName>
<guid>E9A35E80F0BC11DFBFBE0FE339E55B21</guid>
<id>weblogic</id>
</modifiedByUser>
<modified>2010-11-17T06:34:25.042-08:00</modified>
<columns>
<column>
<id>lco_9bdd1418_6004_40ba_a052_04e8335b7ee8</id>
<name>No.</name>
<value>1.0</value>
</column>
<column>
<id>lco_3a31fd20_24f1_4422_99fd_c00d7bed4b24</id>
<name>Description</name>
<value>test</value>
</column>
</columns>
</row>

C.19.4.3.3 rowsからリンクされるリソース・タイプ

表C-69に、クライアントがrowsリソースからリンクできるリソース・タイプを示します。

表C-69 rowsからリンクされるリソース・タイプ

rel

リソース・タイプ

self

urn:oracle:webcenter:space:list.rows

parent

urn:oracle:webcenter:space:list

urn:oracle:webcenter:space:list:row

C.19.4.4 urn:oracle:webcenter:space:list:row

rowレスポンスでは、個々のリスト行を取得、追加および削除する方法が提供されます。この項には次のトピックが含まれます:

- rowへのナビゲーション・パス

- rowでサポートされるメソッド

- メソッド(row): GET

- メソッド(row): PUT

- メソッド(row): DELETE

- rowからリンクされるリソース・タイプ

C.19.4.4.1 rowへのナビゲーション・パス

この項では、クライアントがハイパーメディアを経由してrowリソースにアクセスする方法を示します。

urn:oracle:webcenter:resourceindex
urn:oracle:webcenter:spaces
urn:oracle:webcenter:space:resourceindex
urn:oracle:webcenter:space:lists
urn:oracle:webcenter:space:list
urn:oracle:webcenter:space:list:rows
urn:oracle:webcenter:space:list:row

C.19.4.4.2 rowでサポートされるメソッド

rowリソース・タイプでは、次のメソッドがサポートされます。

- メソッド(row): GET

- メソッド(row): PUT

- メソッド(row): DELETE

C.19.4.4.3 メソッド(row): GET

リスト行からデータを取得するには、このメソッドを使用します。

- リソースURI。例:

http://host:port/rest/api/spaces/vs1/lists/(/oracle/webcenter/list/scopedMD/
s355923f0_2f04_4fd0_83ad_f7dac2a7ceed/lists/ls_c9cecbc7_756b_417b_a35f_
fb03874979c0.xml)/rows/(lr_a14d427f_8515_4c82_956f_
a60e6e08668c)?utoken=FKld8lalI3QRdi8TgQkOCGEzxL5x_w**

- リクエスト本体: なし

- リクエスト・ヘッダー: [Accept = application/xml | application/json]

- レスポンス・ステータス: 200 [OK]

- レスポンス本文: <row>

- 取得される要素(表C-70)

表C-70 rowで取得される要素

要素

タイプ

説明

id

string

行のID

listId

string

親リストのID

scope

string

リストが属するポータルのGUID

creator

string

行を作成したユーザー

created

Date

行が作成された日付

modifier

string

最後に行を変更したユーザー

modified

Date

最後に行が変更された日付

columns

urn:oracle:webcenter:space:list:columns

列の値

- 例:

<row resourceType="urn:oracle:webcenter:space:list:row">
<links>
<link resourceType="urn:oracle:webcenter:space:list:row"
rel="self" href="http://host:port/
rest/api/spaces/vs1/lists/(/oracle/webcenter/list/scopedMD
/s355923f0_2f04_4fd0_83ad_f7dac2a7ceed/lists/ls_bb806754_0652_
4d49_9354_5fb62dc3514d.xml)/rows/(lr_4cc07327_49cb_4cd5_a270_
182ddcc8db4a)?utoken=FKld8lalI3QRdi8TgQkOCGEzxL5x_w**"
capabilities="urn:oracle:webcenter:read
urn:oracle:webcenter:update urn:oracle:webcenter:delete"/>
</links>
<id>lr_4cc07327_49cb_4cd5_a270_182ddcc8db4a</id>
<listId>/oracle/webcenter/list/scopedMD/s355923f0_2f04_4fd0_83ad_
f7dac2a7ceed/lists/ls_bb806754_0652_4d49_9354_
5fb62dc3514d.xml</listId>
<scope>s355923f0_2f04_4fd0_83ad_f7dac2a7ceed</scope>
<creator>weblogic</creator>
<author>
<links>
<link resourceType="urn:oracle:webcenter:people:person"
rel="via" href="http://host:port/
rest/api/people/E9A35E80F0BC11DFBFBE0FE339E55B21/lists/
@self?utoken=FKld8lalI3QRdi8TgQkOCGEzxL5x_w**"
capabilities="urn:oracle:webcenter:read"/>
<link type="image/png"
template="http://host:port/webcenter/
profilephoto/453941333545383046304243313144464246424530
4645333339453535423231/{size}?_xResourceMethod=wsrp"
resourceType="urn:oracle:webcenter:people:person"
rel="urn:oracle:webcenter:people:icon"
href="http://host:port/webcenter/
profilephoto/453941333545383046304243313144464246424530
4645333339453535423231/SMALL?_xResourceMethod=wsrp"
capabilities="urn:oracle:webcenter:read"/>
<link type="text/html"
resourceType="urn:oracle:webcenter:spaces:profile"
rel="alternate" href="http://host:port/
webcenter/faces/oracle/webcenter/webcenterapp/view/pages/
peopleconn/UserProfileGallery.jspx?wc.username=weblogic"
capabilities="urn:oracle:webcenter:read"/>
</links>
<displayName>weblogic</displayName>
<guid>E9A35E80F0BC11DFBFBE0FE339E55B21</guid>
<id>weblogic</id>
</author>
<created>2010-11-17T06:34:25.042-08:00</created>
<modifier>weblogic</modifier>
<modifiedByUser>
<links>
<link resourceType="urn:oracle:webcenter:people:person"
rel="via" href="http://host:port/
rest/api/people/E9A35E80F0BC11DFBFBE0FE339E55B21/lists/
@self?utoken=FKld8lalI3QRdi8TgQkOCGEzxL5x_w**"
capabilities="urn:oracle:webcenter:read"/>
<link type="image/png"
template="http://host:port/webcenter/
profilephoto/453941333545383046304243313144464246424530
4645333339453535423231/{size}?_xResourceMethod=wsrp"
resourceType="urn:oracle:webcenter:people:person"
rel="urn:oracle:webcenter:people:icon"
href="http://host:port/webcenter/
profilephoto/453941333545383046304243313144464246424530
4645333339453535423231/SMALL?_xResourceMethod=wsrp"
capabilities="urn:oracle:webcenter:read"/>
<link type="text/html"
resourceType="urn:oracle:webcenter:spaces:profile"
rel="alternate" href="http://host:port/
webcenter/faces/oracle/webcenter/webcenterapp/view/pages/
peopleconn/UserProfileGallery.jspx?wc.username=weblogic"
capabilities="urn:oracle:webcenter:read"/>
</links>
<displayName>weblogic</displayName>
<guid>E9A35E80F0BC11DFBFBE0FE339E55B21</guid>
<id>weblogic</id>
</modifiedByUser>
<modified>2010-11-17T06:34:25.042-08:00</modified>
<columns>
<column>
<id>lco_9bdd1418_6004_40ba_a052_04e8335b7ee8</id>
<name>No.</name>
<value>1.0</value>
</column>
<column>
<id>lco_3a31fd20_24f1_4422_99fd_c00d7bed4b24</id>
<name>Description</name>
<value>test</value>
</column>
</columns>
</row>

C.19.4.4.4 メソッド(row): PUT

行のデータを更新するには、このメソッドを使用します。

- リソースURI。例:

http://host:port/rest/api/spaces/vs1/lists/(/oracle/webcenter/list/scopedMD/
s355923f0_2f04_4fd0_83ad_f7dac2a7ceed/lists/ls_c9cecbc7_756b_417b_a35f_
fb03874979c0.xml)/rows/(lr_a14d427f_8515_4c82_956f_
a60e6e08668c)?utoken=FKld8lalI3QRdi8TgQkOCGEzxL5x_w**

- リクエスト本文: <row>

- 書込み可能要素(表C-71)

表C-71 rowの書込み可能要素

要素

タイプ

制約

説明

columns.column.id脚注13

string

—

列のID

columns.column.value脚注14

string

列のデータ型として有効な値

列の値

脚注13

必須要素です。

脚注14

必須要素です。

- 例:

<row>
<columns>
<column>
<id>lco_9bdd1418_6004_40ba_a052_04e8335b7ee8</id>
<value>1</value>
</column>
<column>
<id>lco_3a31fd20_24f1_4422_99fd_c00d7bed4b24</id>
<value>test</value>
</column>
</columns>
</row>

- リクエスト・ヘッダー: Content-Type = application/xml | application/json, [Accept = application/xml | application/json]

- レスポンス・ステータス: 200 [OK]

- レスポンス本文: <row>

C.19.4.4.5 メソッド(row): DELETE

リスト行を削除するには、このメソッドを使用します。

- リソースURI。例:

http://host:port/rest/api/spaces/vs1/lists/(/oracle/webcenter/list/scopedMD/
s355923f0_2f04_4fd0_83ad_f7dac2a7ceed/lists/ls_c9cecbc7_756b_417b_a35f_
fb03874979c0.xml)/rows/(lr_a14d427f_8515_4c82_956f_
a60e6e08668c)?utoken=FKld8lalI3QRdi8TgQkOCGEzxL5x_w**

- リクエスト本体: なし

- レスポンス・ステータス: 204 [No Content]

- レスポンス本体: なし

C.19.4.4.6 rowからリンクされるリソース・タイプ

表C-72に、クライアントがrowリソースからリンクできるリソース・タイプを示します。

表C-72 rowからリンクされるリソース・タイプ

rel

リソース・タイプ

self

urn:oracle:webcenter:space:list:row

C.19.4.5 urn:oracle:webcenter:space:list:columns

columnsレスポンスでは、リスト列を取得または追加する方法が提供されます。この項には次のトピックが含まれます:

- columnsへのナビゲーション・パス

- columnsでサポートされるメソッド

- メソッド(columns): GET

- メソッド(columns): POST

- columnsからリンクされるリソース・タイプ

C.19.4.5.1 columnsへのナビゲーション・パス

この項では、クライアントがハイパーメディアを経由してcolumnsリソースにアクセスする方法を示します。

urn:oracle:webcenter:resourceindex
urn:oracle:webcenter:spaces
urn:oracle:webcenter:space:resourceindex
urn:oracle:webcenter:space:lists
urn:oracle:webcenter:space:list
urn:oracle:webcenter:space:list:columns

C.19.4.5.2 columnsでサポートされるメソッド

columnsリソース・タイプでは、次のメソッドがサポートされます。

- メソッド(columns): GET

- メソッド(columns): POST

C.19.4.5.3 メソッド(columns): GET

リスト内の列を取得するには、このメソッドを使用します。

- リソースURI。例:

http://host:port/rest/api/spaces/vs1/lists/(/oracle/webcenter/list/scopedMD/
s355923f0_2f04_4fd0_83ad_f7dac2a7ceed/lists/ls_c9cecbc7_756b_417b_a35f_
fb03874979c0.xml)/columns?utoken=FKld8lalI3QRdi8TgQkOCGEzxL5x_w**

- リクエスト本体: なし

- リクエスト・ヘッダー: [Accept = application/xml | application/json]

- リクエスト・パラメータ: なし

- レスポンス・ステータス: 200 [OK]

- レスポンス本文: <metaColumns>

- 例:

<metaColumns resourceType="urn:oracle:webcenter:space:list:columns">
<links>
<link resourceType="urn:oracle:webcenter:space:list:columns"
rel="self" href="http://host:port/
rest/api/spaces/vs1/lists/(/oracle/webcenter/list/scopedMD/
s355923f0_2f04_4fd0_83ad_f7dac2a7ceed/lists/ls_c9cecbc7_756b_
417b_a35f_fb03874979c0.xml)/columns?
utoken=FKld8lalI3QRdi8TgQkOCGEzxL5x_w**"
capabilities="urn:oracle:webcenter:read
urn:oracle:webcenter:create"/>
<link resourceType="urn:oracle:webcenter:space:list"
rel="urn:oracle:webcenter:parent"
href="http://host:port/rest/api/spaces/vs1/
lists/(/oracle/webcenter/list/scopedMD/s355923f0_2f04_4fd0_83ad_
f7dac2a7ceed/lists/ls_c9cecbc7_756b_417b_a35f_
fb03874979c0.xml)?utoken=FKld8lalI3QRdi8TgQkOCGEzxL5x_w**"/>
</links>
<items>
<metaColumn resourceType="urn:oracle:webcenter:space:list:column">
<links>
<link resourceType="urn:oracle:webcenter:space:list:column"
rel="self" href="http://host:port/
rest/api/spaces/vs1/lists/(/oracle/webcenter/list/
scopedMD/s355923f0_2f04_4fd0_83ad_
f7dac2a7ceed/lists/ls_c9cecbc7_756b_417b_a35f_
fb03874979c0.xml)/columns/(lco_9bdd1418_6004_40ba_
a052_04e8335b7ee8)?
utoken=FKld8lalI3QRdi8TgQkOCGEzxL5x_w**"
capabilities="urn:oracle:webcenter:read
urn:oracle:webcenter:update
urn:oracle:webcenter:delete"/>
</links>
<id>lco_9bdd1418_6004_40ba_a052_04e8335b7ee8</id>
<name>No.</name>
<dataType>number</dataType>
<required>false</required>
<displayLength>10</displayLength>
<format>number</format>
<allowLinks>false</allowLinks>
</metaColumn>
<metaColumn resourceType="urn:oracle:webcenter:space:list:column">
<links>
<link resourceType="urn:oracle:webcenter:space:list:column"
rel="self" href="http://host:port/
rest/api/spaces/vs1/lists/(/oracle/webcenter/list/
scopedMD/s355923f0_2f04_4fd0_83ad_
f7dac2a7ceed/lists/ls_c9cecbc7_756b_417b_a35f_
fb03874979c0.xml)/columns/(lco_3a31fd20_24f1_4422_
99fd_c00d7bed4b24)?
utoken=FKld8lalI3QRdi8TgQkOCGEzxL5x_w**"
capabilities="urn:oracle:webcenter:read
urn:oracle:webcenter:update
urn:oracle:webcenter:delete"/>
</links>
<id>lco_3a31fd20_24f1_4422_99fd_c00d7bed4b24</id>
<name>Description</name>
<dataType>string</dataType>
<required>false</required>
<maxLength>500</maxLength>
<displayLength>20</displayLength>
<allowLinks>false</allowLinks>
<editLines>1</editLines>
</metaColumn>
</items>
</metaColumns>

C.19.4.5.4 メソッド(columns): POST

リスト内に列を作成するには、このメソッドを使用します。

- リソースURI。例:

http://host:port/rest/api/spaces/vs1/lists/(/oracle/webcenter/list/scopedMD/
s355923f0_2f04_4fd0_83ad_f7dac2a7ceed/lists/ls_c9cecbc7_756b_417b_a35f_
fb03874979c0.xml)/columns?utoken=FKld8lalI3QRdi8TgQkOCGEzxL5x_w**

- リクエスト本文: <metaColumn>

- 書込み可能要素(表C-73)

表C-73 columnsの書込み可能要素

要素

タイプ

制約

説明

name脚注15

string

—

列の名前。

dataType脚注16

string

- string

- number

- datetime

- boolean

- person

- image

- richtext

列のデータ型

required

boolean

- true

- false

列の値が必須かどうか

defaultValue

列のデータ型

オブジェクトがデータ型と一致する必要がある

列のデフォルト値

maxLength

int

stringデータ型でのみ有効

文字列値の最大長

rangeLow

int

numberデータ型でのみ有効

numberデータ型の範囲の最小値

rangeHigh

int

numberデータ型でのみ有効

numberデータ型の範囲の最大値

format

string

次のnumberデータ型:

- number

- currency

- percent

次のdatetimeデータ型:

- date

- time

- both

列の形式

allowLinks

boolean

- true

- false

stringデータ型でのみ有効

ハイパーリンクを列の値に指定できるかどうか

linkTarget

string

- _blank

- _self

allowLinks=trueの場合のみ有効

_blankはリンクを新しいウィンドウに開き、_selfはリンクを同じウィンドウ内に開きます

editLines

int

stringデータ型でのみ有効

列値を編集する際の行数(デフォルトは1)

peopleScope

string

- GLOBAL

- SUB_SCOPE

personデータ型でのみ有効

ディレクトリ内のすべてのユーザーを有効とするか、あるいはリストを含むポータルのメンバーを有効とするか

displayWidth

int

—

列のピクセル単位での表示幅

hint

string

—

列値を入力する際にユーザーに表示されるヒント

脚注15

必須要素です。

脚注16

必須要素です。

- 例:

<metaColumn>
<name>Notes</name>
<dataType>richtext</dataType>
</metaColumn

- リクエスト・ヘッダー: Content-Type = application/xml | application/json, [Accept = application/xml | application/json]

- レスポンス・ステータス: 201 [Created]

- レスポンス本文: <metaColumn>

- 取得される要素(表C-74)

表C-74 columnsから取得される要素

要素

タイプ

説明

id

string

列のID

name

string

列の名前。

dataType

string

列のデータ型

required

boolean

列の値が必須かどうか

defaultValue

列のデータ型

列のデフォルト値

maxLength

int

文字列値の最大長

rangeLow

int

numberデータ型の範囲の最小値

rangeHigh

int

numberデータ型の範囲の最大値

format

string

列の形式

allowLinks

boolean

ハイパーリンクを列の値に指定できるかどうか

linkTarget

string

_blankはリンクを新しいウィンドウに開き、_selfはリンクを同じウィンドウ内に開きます

editLines

int

列値を編集する際の行数(デフォルトは1)

peopleScope

string

ディレクトリ内のすべてのユーザーを有効とするか、あるいはリストを含むポータルのメンバーを有効とするか

displayWidth

int

列のピクセル単位での表示幅

hint

string

列値を入力する際にユーザーに表示されるヒント

- 例:

<metaColumn resourceType="urn:oracle:webcenter:space:list:column">
<links>
<link resourceType="urn:oracle:webcenter:space:list:column"
rel="self" href="http://host:port/
rest/api/spaces/vs1/lists/(/oracle/webcenter/list/scopedMD/
s355923f0_2f04_4fd0_83ad_f7dac2a7ceed/lists/
ls_c9cecbc7_756b_417b_a35f_fb03874979c0.xml)/columns/
(lco_fe2b9856_32f3_449a_a277_18dc7f6a779e)?
utoken=FKld8lalI3QRdi8TgQkOCGEzxL5x_w**"
capabilities="urn:oracle:webcenter:read
urn:oracle:webcenter:update urn:oracle:webcenter:delete"/>
</links>
<id>lco_fe2b9856_32f3_449a_a277_18dc7f6a779e</id>
<name>Notes</name>
<dataType>richtext</dataType>
<required>false</required>
<displayLength>20</displayLength>
<allowLinks>false</allowLinks>
</metaColumn>

C.19.4.5.5 columnsからリンクされるリソース・タイプ

表C-75に、クライアントがcolumnsリソースからリンクできるリソース・タイプを示します。

表C-75 columnsからリンクされるリソース・タイプ

rel

リソース・タイプ

self

urn:oracle:webcenter:space:list.columns

parent

urn:oracle:webcenter:space:list

urn:oracle:webcenter:space:list:column

C.19.4.6 urn:oracle:webcenter:space:list:column

columnレスポンスでは、個々のリスト列を取得、追加および削除する方法が提供されます。この項には次のトピックが含まれます:

- columnへのナビゲーション・パス

- columnでサポートされるメソッド

- columnからリンクされるリソース・タイプ

C.19.4.6.1 columnへのナビゲーション・パス

この項では、クライアントがハイパーメディアを経由してcolumnリソースにアクセスする方法を示します。

urn:oracle:webcenter:resourceindex
urn:oracle:webcenter:spaces
urn:oracle:webcenter:space:resourceindex
urn:oracle:webcenter:space:lists
urn:oracle:webcenter:space:list
urn:oracle:webcenter:space:list:columns
urn:oracle:webcenter:space:list:column

C.19.4.6.2 columnでサポートされるメソッド

columnリソース・タイプでは、次のメソッドがサポートされます。

- メソッド(column): GET

- メソッド(column): PUT

- メソッド(column): DELETE

メソッド(column): GET

リスト列を取得するには、このメソッドを使用します。

- リソースURI。例:

http://host:port/rest/api/spaces/vs1/lists/(/oracle/webcenter/list/scopedMD/
s355923f0_2f04_4fd0_83ad_f7dac2a7ceed/lists/ls_c9cecbc7_756b_417b_a35f_
fb03874979c0.xml)/columns/(lco_fe2b9856_32f3_449a_a277_
18dc7f6a779e)?utoken=FKld8lalI3QRdi8TgQkOCGEzxL5x_w**

- リクエスト本体: なし

- リクエスト・ヘッダー: [Accept = application/xml | application/json]

- レスポンス・ステータス: 200 [OK]

- レスポンス本文: <metaColumn>

- 取得される要素(表C-76)

表C-76 columnで取得される要素

要素

タイプ

説明

id

string

列のID

name

string

列の名前。

dataType

string

列のデータ型

required

boolean

列の値が必須かどうか

defaultValue

列のデータ型

列のデフォルト値

maxLength

int

文字列値の最大長

rangeLow

int

numberデータ型の範囲の最小値

rangeHigh

int

numberデータ型の範囲の最大値

format

string

列の形式

allowLinks

boolean

ハイパーリンクを列の値に指定できるかどうか

linkTarget

string

_blankはリンクを新しいウィンドウに開き、_selfはリンクを同じウィンドウ内に開きます

editLines

int

列値を編集する際の行数(デフォルトは1)

peopleScope

string

ディレクトリ内のすべてのユーザーを有効とするか、あるいはリストを含むポータルのメンバーを有効とするか

displayWidth

int

列のピクセル単位での表示幅

hint

string

列値を入力する際にユーザーに表示されるヒント

- 例:

<metaColumn resourceType="urn:oracle:webcenter:space:list:column">
<links>
<link resourceType="urn:oracle:webcenter:space:list:column"
rel="self" href="http://host:port/
rest/api/spaces/vs1/lists/(/oracle/webcenter/list/scopedMD/
s355923f0_2f04_4fd0_83ad_f7dac2a7ceed/lists/
ls_c9cecbc7_756b_417b_a35f_fb03874979c0.xml)/
columns/(lco_fe2b9856_32f3_449a_a277_18dc7f6a779e)?
utoken=FKld8lalI3QRdi8TgQkOCGEzxL5x_w**"
capabilities="urn:oracle:webcenter:read
urn:oracle:webcenter:update urn:oracle:webcenter:delete"/>
</links>
<id>lco_fe2b9856_32f3_449a_a277_18dc7f6a779e</id>
<name>Notes</name>
<dataType>richtext</dataType>
<required>false</required>
<displayLength>20</displayLength>
<allowLinks>false</allowLinks>
</metaColumn>

メソッド(column): PUT

列のデータを更新するには、このメソッドを使用します。

- リソースURI。例:

http://host:port/rest/api/spaces/vs1/lists/(/oracle/webcenter/list/scopedMD/
s355923f0_2f04_4fd0_83ad_f7dac2a7ceed/lists/ls_c9cecbc7_756b_417b_a35f_
fb03874979c0.xml)/columns/(lco_fe2b9856_32f3_449a_a277_
18dc7f6a779e)?utoken=FKld8lalI3QRdi8TgQkOCGEzxL5x_w**

- リクエスト本文: <metacolumn>

- 書込み可能要素(表C-77)

表C-77 columnの書込み可能要素

要素

タイプ

制約

説明

name脚注17

string

—

列の名前。

dataType脚注18

string

- string

- number

- datetime

- boolean

- person

- image

- richtext

列のデータ型

required

boolean

- true

- false

列の値が必須かどうか

defaultValue

列のデータ型

オブジェクトがデータ型と一致する必要がある

列のデフォルト値

maxLength

int

stringデータ型でのみ有効

文字列値の最大長

rangeLow

int

numberデータ型でのみ有効

numberデータ型の範囲の最小値

rangeHigh

int

numberデータ型でのみ有効

numberデータ型の範囲の最大値

format

string

次のnumberデータ型:

- number

- currency

- percent

次のdatetimeデータ型:

- date

- time

- both

列の形式

allowLinks

boolean

- true

- false

stringデータ型でのみ有効

ハイパーリンクを列の値に指定できるかどうか

linkTarget

string

- _blank

- _self

allowLinks=trueの場合のみ有効

_blankはリンクを新しいウィンドウに開き、_selfはリンクを同じウィンドウ内に開きます

editLines

int

stringデータ型でのみ有効

列値を編集する際の行数(デフォルトは1)

peopleScope

string

- GLOBAL

- SUB_SCOPE

personデータ型でのみ有効

ディレクトリ内のすべてのユーザーを有効とするか、あるいはリストを含むポータルのメンバーを有効とするか

displayWidth

int

—

列のピクセル単位での表示幅

hint

string

—

列値を入力する際にユーザーに表示されるヒント

脚注17

必須要素です。

脚注18

必須要素です。

- 例:

<metaColumn>
<name>Comments</name>
<dataType>richtext</dataType>
</metaColumn>

- リクエスト・ヘッダー: Content-Type = application/xml | application/json, [Accept = application/xml | application/json]

- レスポンス・ステータス: 200 [OK]

- レスポンス本文: <metaColumn>

メソッド(column): DELETE

リスト列を削除するには、このメソッドを使用します。

- リソースURI。例:

http://host:port/rest/api/spaces/vs1/lists/(/oracle/webcenter/list/scopedMD/
s355923f0_2f04_4fd0_83ad_f7dac2a7ceed/lists/ls_c9cecbc7_756b_417b_a35f_
fb03874979c0.xml)/columns/(lco_fe2b9856_32f3_449a_a277_
18dc7f6a779e)?utoken=FKld8lalI3QRdi8TgQkOCGEzxL5x_w**

- リクエスト本体: なし

- レスポンス・ステータス: 204 [No Content]

- レスポンス本体: なし

C.19.4.6.3 columnからリンクされるリソース・タイプ

表C-78に、クライアントがcolumnリソースからリンクできるリソース・タイプを示します。

表C-78 columnからリンクされるリソース・タイプ

rel

リソース・タイプ

self

urn:oracle:webcenter:space:list:column

C.20 アクティビティ・グラフREST APIの使用

WebCenter Portalには、アクティビティ・グラフをサポートするREST APIが用意されています。アクティビティ・グラフREST APIを使用して、コネクション、ポータルおよびアイテムの推奨を提供するための独自のインタフェースを作成します。

この項では、アクティビティ・グラフに関連付けられているREST APIについて説明します。次のトピックが含まれています:

- アクティビティ・グラフのエントリ・ポイント

- アクティビティ・グラフのリソース・タイプの分類

- セキュリティに関する考慮事項

- アクティビティ・グラフのリソース・タイプ

REST APIの概要は、「WebCenter Portal REST APIの概要」を参照してください。

C.20.1 アクティビティ・グラフのエントリ・ポイント

各RESTサービスは、そのサービスのエントリ・ポイントを提供するリソース索引内にリンク要素を持っています。アクティビティ・グラフには、推奨用とアイテム用の2つのエントリ・ポイントがあります。アクティビティ・グラフ・のエントリ・ポイントを検索するには、次のいずれかのresourceTypeを使用したリンク要素を検索します。

urn:oracle:webcenter:activitygraph:recommendations
urn:oracle:webcenter:activitygraph:items

対応するhrefまたはtemplate要素によって、URIエントリ・ポイントが提供されます。クライアントは、このエントリ・ポイントにHTTPリクエストを送信し、アクティビティ・グラフを使用します。

リソース索引の詳細は、「リソース索引の使用」を参照してください。

リソース・タイプの詳細は、「リソース・タイプ」を参照してください。

C.20.2 アクティビティ・グラフのリソース・タイプの分類

クライアントでは、使用するエントリ・ポイントが識別されると、リソース・タイプの分類が精査されて必要な操作が実行されます。

アクティビティ・グラフの分類は、次のとおりです。

urn:oracle:webcenter:activitygraph:recommendations
urn:oracle:webcenter:activitygraph:recommendations:recommendation
urn:oracle:webcenter:activitygraph:items
urn:oracle:webcenter:activitygraph:items:item

C.20.3 セキュリティに関する考慮事項

一般的なセキュリティに関する考慮事項については、「WebCenter Portal REST APIのセキュリティに関する考慮事項」を参照してください。

C.20.4 アクティビティ・グラフのリソース・タイプ

この項では、各リソース・タイプについて知っておく必要があるすべての情報を提供します。次のトピックが含まれています:

- urn:oracle:webcenter:activitygraph:recommendations

- urn:oracle:webcenter:activitygraph:recommendations:recommendation

- urn:oracle:webcenter:activitygraph:items

- urn:oracle:webcenter:activitygraph:items:item

C.20.4.1 urn:oracle:webcenter:activitygraph:recommendations

このリソースを使用して、指定したオブジェクトに対する類似度に基づいて推奨されたコネクション、ポータル、アイテムの取得(GET)に使用するURIを識別します。GET操作のレスポンスには、要求されているリストの各オブジェクトが含まれ、各オブジェクトには、そのオブジェクトの操作に使用した各リンクが含まれます。

アクティビティ・グラフに存在する各ノードは、ノード・クラスURNとオブジェクトURNの組合せによって識別されます。

たとえば、montyというユーザーを識別するには、次のように指定できます。

- classURN=WC.user

- objectURN=monty

デフォルトで提供されるノードは、すべてWebCenter Portalリソース(ユーザー、ドキュメント、ポータルなど)であるため、WebCenter PortalサービスとリソースIDを備えています。アクティビティ・グラフREST APIは、serviceIdとobjectURN(リソースIDを含む)を使用してこれらのデフォルト・ノードを識別するための別の方法を提供します。

たとえば、montyというユーザーを識別するには、次のように指定できます。

- serviceId=oracle.webcenter.people

- objectURN=monty

サービスのオブジェクトが、ドキュメント・ツールなどのリソース・タイプでさらに分類されている場合、そのリソース・タイプも指定する必要があります。

たとえば、特定のドキュメントを識別するには、次のように指定できます。

- serviceId=oracle.webcenter.doclib

- resourceType=document

- objectURN=document1

作成された新しいノード・クラス(つまり、非ネイティブのWebCenter Portalオブジェクト)はいずれも、ノード・クラスとオブジェクトURNを使用して識別する必要があります。

C.20.4.1.1 recommendationsへのナビゲーション・パス

この項では、クライアントがハイパーメディアを経由してこのリソースにアクセスする方法を示します:

resourceIndex
recommendations

C.20.4.1.2 recommendationsでサポートされるメソッド

次のメソッドは、このリソースによりサポートされています:

- GET

- リクエスト - パラメータ: startIndex、itemsPerPage、utoken。
これらの共通パラメータの詳細は、「共通のリクエスト問合せパラメータ」を参照してください。

次の追加パラメータを使用できます。

- classURN - 推奨を要求するオブジェクトのタイプを識別するノード・クラスURN。たとえば、WC.user、WC.group-documentです。

- objectURN - 推奨を要求するオブジェクトに一意の識別子を提供するオブジェクトURN。たとえば、monty、1000です。

- recipe - 推奨オブジェクトを決定するために使用される類似度URNとオプションで関連付けられた重み(コロンで示される)のセミコロン区切りのリスト。たとえば、gs-edit:10;gs-all:1です。

- classURNRestrictions - 推奨から除外される、ノード・クラスURNによって識別されるオブジェクト・タイプのカンマ区切りリスト

- excludeObjectActions - 現在のユーザーがオブジェクトにアクションを実行した場合に推奨からオブジェクトを除外するために使用され、アクションURNによって識別されるアクションのカンマ区切りリスト。たとえば、クライアントが推奨ポータルを取得する場合は、(ユーザーがそれらのポータルを認識した以降に)クライアント・ユーザーが編集したポータルを除外するためにgs-editアクションを指定できます。

- serviceId - 推奨をリクエストしているオブジェクトのタイプを識別するWebCenter PortalサービスID (デフォルト・オブジェクトのclassURNのかわりにこれを使用できます)。

- resourceType - 推奨をリクエストしているオブジェクトのWebCenter Portalリソース・タイプ。必要に応じて、serviceIdと組み合せて使用します。

- userCredentialClassURN - ユーザー演習用REST APIのノード・クラスURN。デフォルト値はWC.userです。アクティビティ・グラフ・エンジンを別のアプリケーションに統合する場合、別のノード・クラスへの変更が必要な場合があります。

- レスポンス - 本体: 0以上の推奨

詳細は、「テンプレート」を参照してください。

C.20.4.1.3 recommendationsからリンクされるリソース・タイプ

表C-79に、クライアントがこのリソースからリンクできるリソース・タイプを示します。

表C-79 recommendationsに関連するリソース・タイプ

rel

リソース・タイプ

self

urn:oracle:webcenter:activitygraph:recommendations

C.20.4.2 urn:oracle:webcenter:activitygraph:recommendations:recommendation

推奨レスポンスには、推奨オブジェクトと、そのオブジェクトへのアクセスに使用するURIが含まれています。

C.20.4.2.1 recommendationへのナビゲーション・パス

この項では、クライアントがハイパーメディアを経由してrecommendationリソースにアクセスする方法を示します。

resourceIndex
recommendations
recommendation

C.20.4.2.2 recommendationの読取り専用要素

表C-80に、recommendationsリソースの読取り専用要素を示します。

表C-80 recommendationの読取り専用要素

要素

タイプ

説明

score

Float

リスト内の他の推奨と比較して計算された、この推奨の総合スコア。レシピを構成する個々の類似URNに関連付けられたコンポーネント・スコアの重み付けされた合計で、0から1の浮動小数点数からなります。

item

urn:oracle:webcenter:activitygraph:items:item

推奨されているユーザー、アイテムまたはポータル。

componentScores

componentScore要素のリスト

推奨用のレシピ内の各類似URNに関連付けられたコンポーネント・スコアのリスト。コンポーネント・スコアは、理由およびユーザーと推奨オブジェクトがやり取りする共通のアイテムを取得するために使用できるリンクを備えている場合があります。

C.20.4.3 urn:oracle:webcenter:activitygraph:items

このリソースを使用して、ソース・オブジェクトと推奨オブジェクトの両方に共通するオブジェクトの取得(GET)に使用するURIを識別します。これにより、特定のオブジェクトがなぜ推奨されたのか、その理由を調べることができます。GET操作のレスポンスには、このアイテム・コレクションの各アイテムが含まれ、各アイテムには、そのアイテムの操作に使用した各リンクが含まれます。

C.20.4.3.1 itemsへのナビゲーション・パス

この項では、クライアントがハイパーメディアを経由してこのリソースにアクセスする方法を示します:

resourceIndex
items

C.20.4.3.2 itemsでサポートされるメソッド

次のメソッドは、このリソースによりサポートされています:

- GET

- リクエスト - パラメータ: startIndex、itemsPerPage、utoken。
これらの共通パラメータの詳細は、「共通のリクエスト問合せパラメータ」を参照してください。

次の追加パラメータを使用できます。

- similarityURN - オブジェクトが推奨オブジェクトと類似であるか判断するために使用される類似度計算のURN。たとえば、item-tag、gs-edit、user-connectです。

- srcClassURN - 推奨を要求するために使用されたオブジェクトのタイプを識別するノード・クラスURN。たとえば、WC.user、WC.group-documentです。

- srcObjectURN - 推奨を要求するために使用されたオブジェクトのURN。たとえば、monty、1000です。

- trgClassURN - 推奨オブジェクトのタイプを識別するノード・クラスURN。

- trgObjectURN - 推奨オブジェクトの一意の識別子を提供するオブジェクトURN。

- userCredentialClassURN - ユーザー演習用REST APIのノード・クラスURN。デフォルト値はWC.userです。アクティビティ・グラフ・エンジンを別のアプリケーションに統合する場合、別のノード・クラスへの変更が必要な場合があります。

- レスポンス - 本体: 1つ以上のアイテム

詳細は、「テンプレート」を参照してください。

C.20.4.3.3 itemsからリンクされるリソース・タイプ

表C-81に、クライアントがこのリソースからリンクできるリソース・タイプを示します。

表C-81 itemsに関連するリソース・タイプ

rel

リソース・タイプ

self

urn:oracle:webcenter:activitygraph:items

C.20.4.4 urn:oracle:webcenter:activitygraph:items:item

このリソース・タイプを使用して、推奨の更新(PUT)に使用するURIを識別します(推奨オブジェクトにユーザーが興味を持ったことを示すためです)。

C.20.4.4.1 itemへのナビゲーション・パス

この項では、クライアントがハイパーメディアを経由してitemリソースにアクセスする方法を示します。

resourceIndex
recommendations
recommendation
item
resourceIndex
items
item

C.20.4.4.2 itemでサポートされるメソッド

このリソース・タイプによってサポートされるメソッドは次のとおりです。

- PUT

- リクエスト-本体: item

- レスポンス-本体: item

C.20.4.4.3 itemの書込み可能要素

表C-82に、このリソース・タイプの書込み可能要素を示します。

表C-82 itemの書込み可能要素

要素

タイプ

必須

制約

説明

status

String

はい

興味がある

興味がない

ユーザーがオブジェクトに対して興味があるかどうか

C.20.4.4.4 itemの読取り専用要素

表C-83に、このリソース・タイプの読取り専用要素を示します。これらの要素の中にはオブジェクトで使用できないものもあります。

表C-83 itemの読取り専用要素

要素

タイプ

説明

classURN

String

オブジェクトのノード・クラス

objectURN

String

オブジェクトの識別子

name

String

オブジェクト名

description

String

オブジェクトの説明。

modified

Date

オブジェクトの最終更新日

modifiedByUser

PersonReference

オブジェクトを最後に更新したユーザーに関するユーザー情報。GUID、ID、表示名およびプロファイル・アイコンへのリンクが含まれます

author

PersonReference

オブジェクトを作成したユーザーに関するユーザー情報。GUID、ID、表示名およびプロファイル・アイコンへのリンクが含まれます

C.20.4.4.5 itemからリンクされるリソース・タイプ

表C-84に、クライアントがこのリソースからリンクできるリソース・タイプを示します。

表C-84 itemに関連するリソース・タイプ

rel

リソース・タイプ

self

urn:oracle:webcenter:activitygraph:items:item

via

基礎となるオブジェクトのresourceType

C.21 検索REST APIの使用

WebCenter Portalは、カスタマイズされた検索ユーザー・インタフェースを作成できるようにするREST APIを提供しています。Oracle SES 11.2.2.2では、検索REST APIを使用して検索およびファセットを読取り(GET)できます。ファセットは検索結果とともに返され、結果のフィルタ処理に使用できます。検索のキーワードと範囲を指定できます。たとえば、文字列「webcenter」の検索で何千もの結果が生成されたとします。URLでファセット(作成者または最終変更日付など)を使用し、author=Karenおよびlast-modified-date=this weekのように、特定のファセット値に対する結果を取得できます。

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

- 検索のエントリ・ポイント

- 検索のリソース・タイプの分類

- セキュリティに関する考慮事項

- 検索のリソース・タイプ

REST APIの概要は、「WebCenter Portal REST APIの概要」を参照してください。

C.21.1 検索のエントリ・ポイント

各RESTサービスは、そのサービスのエントリ・ポイントを提供するリソース索引内にリンク要素を持っています。検索のエントリ・ポイントを検索するには、次のresourceTypeを持つリンク要素を検索します。

urn:oracle:webcenter:searchcollection

対応するhrefまたはtemplate要素によって、URIエントリ・ポイントが提供されます。クライアントはこのエントリ・ポイントにHTTPリクエストを送信して、検索を操作します。

関連項目:

リソース索引には次の2つの検索のエントリがあります。

- urn:oracle:webcenter:searchcollection (これには、Oracle SES 11.2.2.2で構成されたWebCenter Portalが必要です。)

- urn:oracle:webcenter:searchresults (これには、サポートされている任意のバージョンのOracle SESで構成されたWebCenter Portalが必要です。)

この項では、urn:oracle:webcenter:searchcollectionについてのみ説明します。urn:oracle:webcenter:searchresultsの詳細は、次を参照してください。

http://docs.oracle.com/cd/E28280_01/webcenter.1111/e10148/jpsdg_search.htm。

リソース索引の詳細は、「リソース索引の使用」を参照してください。

リソース・タイプの詳細は、「リソース・タイプ」を参照してください。

C.21.2 検索のリソース・タイプの分類

クライアントがエントリ・ポイントを識別すると、リソース・タイプの分類によりナビゲートして、必要な操作を実行できます。個々のリソース・タイプの詳細は、「リソース・タイプ」の該当の項を参照してください。

検索の分類は次のとおりです。

urn:oracle:webcenter:searchcollection
urn:oracle:webcenter:searchcollection:results

サービス・エントリ・ポイントの他、URLテンプレートにより、クライアントは、問合せパラメータを渡してリクエストをカスタマイズしたり戻されたデータのフォームを制御できます。

検索リソース内のコレクション・リソースは、ページ区切り(startIndexおよびitemsPerPage)をサポートします。エントリ・ポイントはsearchcollection要素にすべての結果を返します。dataType引数の適切な値を指定して、様々なコンポーネントを問い合せます。

searchTerms、dataおよびdataTypeでサポートされ、ここでdataTypeには、次の値のうち1つ以上が設定されます。

- resultCount: 問合せを満たす結果の数

- results: 実際の結果

- facetCount: 問合せ結果に対するファセットの数

- facets: 現在の結果に対するファセット

カンマで値を区切り、複数のdataTypeを指定します。次に例を示します。

http://host:port//rest/api/searchcollection?&dataType=results,facets
&facetParams=author:weblogic&utoken=FDX7xKPzzrnsbWRHNP-b-iUoWiJ4_w\*\\\\\\\\*

C.21.2.1 resultsへのナビゲーション・パス

この項では、クライアントがハイパーメディアを経由してこのリソースにアクセスする方法を示します:

resourceindex
searchcollection

resourceindex
spaces
spaces:resourceindex
spaces:searchcollection

C.21.2.2 resultsでサポートされるメソッド

次のメソッドは、このリソースによりサポートされています:

- GET

- リクエスト - 本体: なし、パラメータ: q、dataType、startIndex (ページ区切り)、itemsPerPage (ページ区切り)、data、facetParams

- レスポンス - 本体: 検索結果およびオプションでファセット

説明:

- q={queryString}
検索は、次の形式を使用して指定できます。

[[field1:[operand]][:]value1[;field2:operand:value2]]

ここでは、複数の句が暗黙のANDによって結合され、セミコロン(;)によって構文的に区切られます。大かっこ[]は、オプションの値を示します。どの句もコロン(:)のセパレータを使用しない単純な文字列のキーワードにできます。

問合せ文字列は問合せキーワード以外はサポートしません。

- dataTypeは結果のタイプです
たとえば、結果のみが必要な場合はdataType=results (または空のまま)とします。結果にファセットを含めるには、dataType=results,facetsとします。

- dataはカスタム属性のパラメータです
例:

data=numberofreplies,wc_tagsWords

- facetParamsはファセット絞込みのパラメータです
デフォルト・セットは、「サービスID」、スコープGUID、「タグ」、「作成者」、「最終更新日」、「MIMEタイプ」です。

たとえば、人で絞り込むには、oracle.webcenter.peopleにのみファセット「サービスID」を次のように設定します。

facetParams=Service%20ID:oracle.webcenter.people

注意:

facetParamsパラメータを使用する場合は、dataTypeパラメータにfacetsを含める必要があります。

例: 検索RESTコマンド

http://examplehost:8888/rest/api/searchcollection?q=document&utoken={utoken}

http://examplehost:8888/rest/api/searchcollection?q={keyword}
&data=dDocName,dOriginalName&dataType=results,facets
&facetParams=Service%20ID:oracle.webcenter.people

詳細は、「テンプレート」を参照してください。

表C-85 resultsの書込み可能要素

要素

タイプ

説明

author

String

resultに書き込んだ任意のユーザー

resourceId

String

一意の識別子

serviceId

String

resultのサービスID、oracle.webcenter.doclibなど

title

String

resultのタイトル

description

String

resultの説明

modified

Date

最終更新日

size

Number

resultのサイズ

docid

String

ドキュメント識別子

created

Date

resultの最初の作成者

icon

String

resultタイプのアイコン

url

String

resultのURL

mimetype

String

resultのMIMEタイプ

guid

String

resultのGUID値

scope

String

ポータルのGUID値

scopename

String

ポータル名

resourceType

String

resultのタイプ

language

String

resultの言語

snippet

String

resultのスニペット

modifier

String

resultの更新者

customattributes

任意

データで指定される任意のカスタム属性のリスト

C.21.2.3 resultsからリンクされるリソース・タイプ

表C-86に、クライアントがこのリソースからリンクできるリソース・タイプを示します。

表C-86 searchに関連するリソース・タイプ

rel

リソース・タイプ

self

C.21.3 セキュリティに関する考慮事項

認証は、検索REST APIのメソッドを使用する前に必要です。

一般的なセキュリティに関する考慮事項については、「WebCenter Portal REST APIのセキュリティに関する考慮事項」を参照してください。

C.21.4 検索のリソース・タイプ

この項では、各リソース・タイプについて説明します。次のトピックが含まれています:

- urn:oracle:webcenter:searchcollection:links

- urn:oracle:webcenter:searchcollection:results

- urn:oracle:webcenter:searchcollection:facets

C.21.4.1 urn:oracle:webcenter:searchcollection:links

テンプレート・リンクおよびページ区切りリンクにはこのリソース・タイプを使用します。

C.21.4.2 urn:oracle:webcenter:searchcollection:results

このリソース・タイプを使用して、キーワードとファセットを含む問合せの読取り(GET)に使用するURIを識別します。

リクエストはURLによって表され、レスポンスは検索結果のリストで、それぞれエンド・ユーザーがドリル・ダウンするアイテムを選択し、使用可能な場合は独自のRESTサービスへのリンクをクロスするうえで役立つメタデータを備えています。独自のRESTサービスが使用できない場合は、HREFリンクが提供されます。

レスポンスXMLでは、標準のURLパラメータと、前および次のリンクを使用してページを区切ることができます。(問合せが移入された)一般的なテンプレートに付属しているこれらのリンクにより、使用アプリケーションは固有のカスタム・ページ区切りを実行できます。

C.21.4.3 urn:oracle:webcenter:searchcollection:facets

このリソース・タイプを使用して、ファセットを含む問合せの読取り(GET)に使用するURIを識別します。ファセットは問合せ結果とともに返され、結果のフィルタに使用できます。これらのファセットをURLで使用し、author=weblogicおよびlast-modified-date=this weekのように特定のファセット値の結果を取得できます。

リクエストはURLによって表され、レスポンスはファセットのリストで、それぞれエンド・ユーザーがドリル・ダウンするアイテムを選択し、使用可能な場合は独自のRESTサービスへのリンクをクロスするうえで役立つメタデータを備えています。独自のRESTサービスが使用できない場合は、HREFリンクが提供されます。

レスポンスXMLでは、標準のURLパラメータと、前および次のリンクを使用してページを区切ることができます。(問合せが移入された)一般的なテンプレートに付属しているこれらのリンクにより、使用アプリケーションは固有のカスタム・ページ区切りを実行できます。

D トラブルシューティング

この付録では、WebCenter Portalアセットに関するトラブルシューティング情報を示します。

この付録の内容は次のとおりです。

- WebCenter Portal共有ライブラリのデプロイメントのトラブルシューティング

- ポートレット作成のトラブルシューティング

- ページレットのトラブルシューティング

- OmniPortletのトラブルシューティング

D.1 WebCenter Portal共有ライブラリのデプロイメントのトラブルシューティング

- デプロイメントが正常に行われたにもかかわらず、デプロイメント後に変更が反映されない。
WebCenter Portalは、常に最新バージョンの共有ライブラリを使用します。MANIFEST.MF内の実装バージョンが、WebLogic Server管理コンソールに表示される実装バージョンに一致することを確認します。

たとえば、PortalSharedLibrary/Application Sources/META-INF/MANIFEST.MFの値が、管理コンソールの「デプロイメント」→「extend.spaces.webapp」→「概要」に表示される値と同じであることを確認します。

- 「DeployerException: Task 9 failed」が表示されます。

weblogic.Deployer$DeployerException: weblogic.deploy.api.tools.deployer.DeployerException: Task 9 failed:
[Deployer:149117]deploy library com.mycompanyname.shared.lib [LibSpecVersion=11.1.1.2,LibImplVersion=11.1.1.2.5] on AdminServer,WC_Portal.

このエラーは、新しいデプロイメントと既存のデプロイメントの実装バージョンが同一の場合に発生します。管理コンソールを使用して現在の実装バージョンを確認し、必要に応じてバージョンを変更して共有ライブラリを再デプロイします。

- 「java.lang.IllegalArgumentException」が表示される。
WebCenter Portalがデプロイされている管理対象サーバーを再起動します。

D.2 ポートレット作成のトラブルシューティング

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

- ポートレットの作成ウィザードにアクセスできない

- ポートレットに必要なポートレット機能が追加できない

D.2.1 ポートレットの作成ウィザードにアクセスできない

「新規ギャラリ」に、「規格に基づいたJavaポートレット(JSR 286)」オプションがありません。

問題

「新規ギャラリ」に、「規格に基づいたJavaポートレット(JSR 286)」オプションがありません。

原因

原因

ポートレットを作成しようとしているアプリケーションが、WebCenter Portalの「ポータル・フレームワーク」テンプレートを使用して作成されているため、ポートレット作成用にスコープ設定されていません。

解決策

次の手順を実行します。

1. ポートレット・プロデューサ・アプリケーションまたはポートレット作成用にスコープ設定されているアプリケーション(WebCenter Portalの「ポータル・フレームワーク」テンプレートを使用して構築されているアプリケーション以外のアプリケーション)でポートレットを作成します。

2. 「新規ギャラリ」で、「すべてのテクノロジ」タブをクリックすると、アプリケーションのテクノロジ・スコープに関係なく、使用できるすべてのオプションがリストされます。

D.2.2 ポートレットに必要なポートレット機能が追加できない

JSR 286 Javaポートレットの作成ウィザードで、特定の機能(たとえば、ポートレット・イベントやパブリック・レンダラ・パラメータなど)をポータルに追加するオプションがありません。

問題

JSR 286 Javaポートレットの作成ウィザードで、特定の機能(たとえば、ポートレット・イベントやパブリック・レンダラ・パラメータなど)をポータルに追加するオプションがありません。

原因

このウィザードには、特定の機能をポートレットに追加するオプションはありません。

解決策

JSR 286 Javaポートレットの作成ウィザードを使用してポートレットを作成した後で、概要エディタを使用してportlet.xmlファイルを編集することで、高度な機能を追加してください。詳細は、「JSR 286 Javaポートレットの開発」を参照してください。

D.3 ページレットのトラブルシューティング

リソースとページレットをトラブルシューティングする際には、次の一般的な構成エラーに注意してください。ページレット・プロデューサ設定の構成の詳細は、第23.2項「ページレット・プロデューサ設定の構成」を参照してください。

- SSLを使用する場合、ページレット・プロデューサ設定の「変換」ページで、HTTP (セキュアでない)およびHTTPS (セキュア)ポートが適切に構成されていることを確認してください。

- HTTPプロキシを必要とするネットワーク上の外部サイトをプロキシする場合、ページレット・プロデューサ設定の「プロキシ」ページで、プロキシURLを構成する必要があります。

- デフォルトで作成されるlogin_resourceおよびpagelet_apiリソースが存在し、適切に構成されていることを確認してください。

- KDブラウザや他のCSPページレットをプロキシする場合、ページレット・プロデューサ設定の「CSP」ページで、イメージ・サービスのURLが絶対URLであることと、CSP SOAP APIのURLが正しく設定されていることを確認してください。

- Sun Java仮想マシン(JVM)の制限により、ページレットでは、基になる証明書によってMD2署名アルゴリズムが使用される場合、HTTPSコンテンツを使用できません。

その他のトラブルシューティング情報を確認するには、ロギングを使用します。ページレット・プロデューサは、標準のOracle Diagnostic Loggingファシリティにメッセージのログを記録します。Oracle WebLogic Serverの場合、その場所はuser-projects/domains/<domain>/servers/ <server>/logs/<server>-diagnostic.logです。ロギングの構成の詳細は、第14.2.2項「ロギング設定の構成方法」を参照してください。ページレットのデバッグの詳細は、『Oracle Fusion Middleware Oracle JDeveloperによるWebCenter Portalアセットとカスタム・コンポーネントの開発』の「Oracle WebCenter Portalのページレット・プロデューサを使用したページレットの作成」の章を参照してください。

D.4 OmniPortletのトラブルシューティング

この項では、OmniPortletの使用中に発生する可能性がある問題のトラブルシューティングに役立つ情報を提供します。

注意:

OmniPortletプロデューサはWebCenter Portalと異なる層に存在し、実行されるため、セッション情報にはアクセスできないので、OmniPortletがアクセスできるように、XMLファイルをPUBLICとして公開する必要があります。

「定義」リンクを使用してOmniPortletを定義できない

実行時にOmniPortletを定義することはできません。

問題

OmniPortletは、trueのRenderPortletInIFrame値のみをサポートします。これはOmniPortletをIFRAME内でレンダリングする必要があることを意味します。したがって、OmniPortletプロパティRenderPortletInIFrameをtrueに設定する必要があります。「プロパティ・インスペクタ」で、RenderPortletInIFrameプロパティは、「表示オプション」の下にあります。

現時点では、RenderPortletInIFrameプロパティの値はfalseです。そのため、実行時に「定義」リンクをクリックしても、「タイプ」タブは表示されず、OmniPortletの定義を進めることができません。

解決策

OmniPortletを定義するために、「アクション」リストから「カスタマイズ」を選択するか、Oracle JDeveloperの「構造」ウィンドウで「OmniPortlet」を選択して、プロパティ・インスペクタでRenderPortletInIFrameをtrueに設定します。