Oracle® Fusion Middleware

Oracle Portal開発者ガイド

11g リリース1 (11.1.1)

B61384-04(原本部品番号:E10238-05)

2013年3月

Oracle Fusion Middleware Oracle Portal開発者ガイド, 11g リリース1 (11.1.1)

B61384-04

Copyright © 2004, 2013, Oracle and/or its affiliates. All rights reserved.

原本著者: Swati Thacker

原本協力著者: Showvik Roy Chowdhuri、Frank Rovitto、Lalithashree Rajesh、Promila Chitkara、Susan Highmoor、Vanessa Wang、Kumar Dhanagopal

協力者: Gareth Bryan、Joan Carter、Candace Fender、Tugdual Grall、Helen Grembowicz、Christian Hauser、Peter Henty、Karthik Lakshmanan、Bill Lankenau、Pankaj Mittal、Peter Moskovits、Lei Oh、Jitinder Sethi、Ingrid Snedecor、Julie Tower、Sue Vickers、Alistair Wilson

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

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

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

U.S. GOVERNMENT RIGHTS Programs, software, databases, and related documentation and technical data delivered to U.S. Government customers are "commercial computer software" or "commercial technical data" pursuant to the applicable Federal Acquisition Regulation and agency-specific supplemental regulations. As such, the use, duplication, disclosure, modification, and adaptation shall be subject to the restrictions and license terms set forth in the applicable Government contract, and, to the extent applicable by the terms of the Government contract, the additional rights set forth in FAR 52.227-19, Commercial Computer Software License (December 2007). Oracle America, Inc., 500 Oracle Parkway, Redwood City, CA 94065.

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

OracleはOracle Corporationおよびその関連企業の登録商標です。その他の名称は、他社の商標の可能性があります。

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

目次

例一覧

図一覧

表一覧

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

はじめに

- 対象読者

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

- 関連ドキュメント

- 表記規則

第I部 ポートレットの概要

1 ポートレットの理解

- 1.1 ポータル開発の概要

- 1.2 ポートレットの理解

- 1.3 ポートレットの構造

- 1.4 ポートレット・リソース

- 1.4.1 複雑な設定が不要なポートレット

- 1.4.2 事前に構築されたポートレットのその他のソース

- 1.4.3 Webクリッピング

- 1.4.4 OmniPortlet

- 1.4.5 ポートレット・ビルダー

- 1.4.6 JSFポートレット

- 1.4.7 プログラム的なポートレット

- 1.4.8 使用するツールの決定

2 ポートレット・テクノロジのマトリックス

- 2.1 ポートレット・テクノロジのマトリックス

- 2.2 一般的な適性

- 2.2.1 Webクリッピング

- 2.2.2 OmniPortlet

- 2.2.3 Javaポートレット

- 2.2.4 ポートレット・ビルダー

- 2.2.5 PL/SQLポートレット

- 2.3 必要な専門知識

- 2.3.1 Webクリッピング

- 2.3.2 OmniPortlet

- 2.3.3 Javaポートレット

- 2.3.4 ポートレット・ビルダー

- 2.3.5 PL/SQLポートレット

- 2.4 デプロイ・タイプ

- 2.4.1 Webプロバイダ

- 2.4.2 WSRPプロデューサ

- 2.4.3 データベース・プロバイダ

- 2.4.4 プロバイダ・アーキテクチャ

- 2.4.5 プロバイダ登録

- 2.5 キャッシュ・スタイル

- 2.5.1 Webクリッピング、OmniPortletおよびポートレット・ビルダー

- 2.5.2 Javaポートレット

- 2.5.3 PL/SQLポートレット

- 2.6 開発ツール

- 2.6.1 Webクリッピング、OmniPortletおよびポートレット・ビルダー

- 2.6.2 Javaポートレット

- 2.6.3 PL/SQLポートレット

- 2.7 ポートレット作成スタイル

- 2.7.1 OmniPortletおよびWebクリッピング

- 2.7.2 Javaポートレット

- 2.7.3 ポートレット・ビルダー

- 2.7.4 PL/SQLポートレット

- 2.8 ユーザー・インタフェースの柔軟性

- 2.8.1 Webクリッピング

- 2.8.2 OmniPortlet

- 2.8.3 JavaポートレットおよびPL/SQLポートレット

- 2.8.4 ポートレット・ビルダー

- 2.9 Webサイトからコンテンツを取得する機能

- 2.9.1 Webクリッピング

- 2.9.2 OmniPortlet

- 2.9.3 Javaポートレット

- 2.9.4 PL/SQLポートレット

- 2.10 コンテンツをインラインでレンダリングする機能

- 2.10.1 Webクリッピング

- 2.10.2 OmniPortlet

- 2.10.3 Javaポートレット

- 2.10.4 ポートレット・ビルダー

- 2.10.5 PL/SQLポートレット

- 2.11 チャート作成機能

- 2.11.1 Webクリッピング

- 2.11.2 OmniPortlet

- 2.11.3 Javaポートレット

- 2.11.4 ポートレット・ビルダー

- 2.11.5 PL/SQLポートレット

- 2.12 パブリック・ポートレット・パラメータのサポート

- 2.13 プライベート・ポートレット・パラメータのサポート

- 2.13.1 OmniPortlet、Webクリッピングおよびポートレット・ビルダー

- 2.13.2 JavaポートレットおよびPL/SQLポートレット

- 2.14 イベントのサポート

- 2.14.1 Webクリッピング、OmniPortletおよびJavaポートレット

- 2.14.2 ポートレット・ビルダーおよびPL/SQLポートレット

- 2.15 ユーザー権限に基づいてポートレットの表示/非表示を切り替える機能

- 2.15.1 WebクリッピングおよびOmniPortlet

- 2.15.2 Javaポートレット

- 2.15.3 ポートレット・ビルダー

- 2.15.4 PL/SQLポートレット

- 2.16 多言語サポート

- 2.16.1 Webクリッピング、OmniPortlet、JavaポートレットおよびPL/SQLポートレット

- 2.16.2 ポートレット・ビルダー

- 2.17 ページ区切りサポート

- 2.17.1 Webクリッピング

- 2.17.2 OmniPortlet

- 2.17.3 JavaポートレットおよびPL/SQLポートレット

- 2.17.4 ポートレット・ビルダー

- 2.18 シングル・サインオンおよび外部アプリケーション統合

- 2.18.1 Webクリッピング

- 2.18.2 OmniPortlet

- 2.18.3 Javaポートレット

- 2.18.4 PL/SQLポートレット

第II部 ポートレットの作成

3 OmniPortletを使用したポートレットの作成

- 3.1 OmniPortletの概要

- 3.2 OmniPortletウィザード

- 3.2.1 タイプ

- 3.2.2 ソース

- 3.2.2.1 プロキシ認証

- 3.2.2.2 接続情報

- 3.2.2.3 スプレッドシート

- 3.2.2.4 SQL

- 3.2.2.5 XML

- 3.2.2.6 Webサービス

- 3.2.2.7 Webページ

- 3.2.3 フィルタ

- 3.2.4 表示

- 3.2.5 レイアウト

- 3.2.5.1 表レイアウト

- 3.2.5.2 チャート・レイアウト

- 3.2.5.3 ニュース・レイアウト

- 3.2.5.4 箇条書きレイアウト

- 3.2.5.5 フォーム・レイアウト

- 3.2.5.6 HTMLレイアウト

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

- 3.2.7 イベント

- 3.3 ポートレット・パラメータとイベント

- 3.3.1 ポートレット・パラメータとイベント

- 3.3.2 ページ・パラメータとイベント

4 OmniPortletを使用したポートレットの構築例

- 4.1 ポータル・ページへのOmniPortletインスタンスの追加

- 4.2 Webサービスに基づくOmniPortletの構築

- 4.3 スプレッドシート(CSV)に基づくOmniPortletの構築

- 4.4 XMLデータ・ソースに基づくOmniPortletの構築

- 4.5 Webページ・データ・ソースに基づくOmniPortletの構築

- 4.6 ポートレット・パラメータとイベントの設定

- 4.6.1 パラメータを受け入れるためのポートレットの構成

- 4.6.2 ポートレット・パラメータへのページ・パラメータのマップ

- 4.6.3 イベントを使用するためのチャート・ポートレットの構成

- 4.6.4 ページへのチャート・イベントのマップ

- 4.7 HTMLレイアウトを使用したOmniPortletの構築

5 Webクリッピングを使用したコンテンツ・ベースのポートレットの作成

- 5.1 Webクリッピングの概要

- 5.2 ポータル・ページへのWebページ・コンテンツの追加

- 5.2.1 ページへのWebクリッピング・ポートレットの追加

- 5.2.2 Webクリッピング・ポートレットに表示するWebページのセクションの選択

- 5.2.3 Webクリッピング・ポートレットのプロパティの設定

- 5.3 シングル・サインオンを使用した認証されているWebコンテンツの統合

- 5.4 ユーザーがパーソナライズできるWebクリッピングの追加

- 5.4.1 個人用ページへのWebクリッピング・ポートレットの追加

- 5.4.2 OTNでのクリッピングの選択

- 5.4.3 Webクリッピング・ポートレットのパーソナライズ

- 5.5 WebクリッピングOpen Transport APIの使用

- 5.6 URLベースのポートレットからの移行

- 5.6.1 移行の準備

- 5.6.2 移行の実行

- 5.6.3 移行後の構成

- 5.6.4 移行されたポートレットの管理

- 5.6.5 URLベースのポートレットからの移行における制限事項

- 5.7 Webクリッピングに関する現在の制限

6 Javaポートレットの作成

- 6.1 Javaポートレット作成のガイドライン

- 6.1.1 表示モードに関するガイドライン

- 6.1.1.1 共有画面モード(JPSの場合は表示モード)

- 6.1.1.2 編集モード(JPSおよびPdk-Java)

- 6.1.1.3 デフォルト編集モード(JPSおよびPDK-Java)

- 6.1.1.4 プレビュー・モード(JPSおよびPDK-Java)

- 6.1.1.5 全画面モード(PDK-Java)

- 6.1.1.6 ヘルプ・モード(JPSおよびOracle Portal)

- 6.1.1.7 情報モード(JPSおよびPDK-Java)

- 6.1.1.8 リンク・モード(PDK-Java)

- 6.1.2 ポートレット内のナビゲーションのガイドライン

- 6.1.2.1 ポートレット用のリンクのタイプ

- 6.1.3 JavaScriptに関するガイドライン

- 6.1.4 モバイル・ポートレットのガイドライン

- 6.1.4.1 機能の宣言

- 6.1.4.2 短いタイトルの宣言

- 6.1.4.3 短いタイトルのパーソナライズの実装

- 6.1.4.4 リンク・モードの実装

- 6.1.4.5 デバイス情報への留意

- 6.1.4.6 パーソナライズ・ページの調整

- 6.2 Javaポートレット仕様(JPS)およびWSRPの概要

- 6.3 Oracle JDeveloperを使用したJPS準拠のポートレットの構築

- 6.3.1 JSR 168ポートレットの作成

- 6.3.2 JSR 168ポートレットへのポートレット・ロジックの追加

- 6.3.3 Oracle WebLogic ServerへのJSR 168ポートレットのデプロイ

- 6.3.4 JSR 168ポートレットの登録と表示

- 6.3.5 エンタープライズ構成でのWSRPプロデューサの登録

- 6.4 Oracle PDK-Javaの概要

- 6.5 Oracle JDeveloperを使用したOracle PDK-Javaポートレットの構築

- 6.5.1 Oracle PDK-Javaポートレットとプロバイダの作成

- 6.5.2 Oracle PDK-Javaポートレットへのポートレット・ロジックの追加

- 6.5.3 Oracle PDK-Javaポートレットとプロバイダの検証

- 6.5.4 アプリケーション・サーバーへのOracle PDK-Javaポートレットのデプロイ

- 6.5.5 Oracle PDK-Javaポートレットの登録と表示

- 6.6 Oracle PortalでのWSRPおよびJPDKアプリケーションの設定

- 6.6.1 WSRPの構成およびデプロイ

- 6.6.2 JPDKの構成およびデプロイ

7 Javaポートレットの拡張

- 7.1 JPSポートレットの拡張

- 7.1.1 パーソナライズの追加

- 7.1.1.1 前提

- 7.1.1.2 パーソナライズの実装

- 7.2 PDK-Javaポートレットの拡張

- 7.2.1 表示モードの追加

- 7.2.1.1 前提

- 7.2.1.2 追加の表示モードの実装

- 7.2.1.3 XMLプロバイダ定義の更新

- 7.2.1.4 ポートレットの表示

- 7.2.2 パーソナライズの追加

- 7.2.2.1 前提

- 7.2.2.2 「編集」ページおよび「デフォルトの編集」ページでのパーソナライズの実装

- 7.2.2.3 「表示」ページでのパーソナライズの実装

- 7.2.2.4 XMLプロバイダ定義内の設定情報

- 7.2.2.5 ポートレットの表示

- 7.2.3 パラメータの引渡しとイベントの送信

- 7.2.3.1 前提

- 7.2.3.2 パブリック・パラメータの追加

- 7.2.3.3 プライベート・ポートレット・パラメータの引渡し

- 7.2.3.4 イベントの送信

- 7.2.4 JNDI変数の使用

- 7.2.4.1 JNDI変数の宣言

- 7.2.4.2 JNDI変数値の設定

- 7.2.4.3 JNDI変数の取得

- 7.2.5 プライベート・イベントの作成

- 7.2.6 セッション情報へのアクセス

- 7.2.6.1 前提

- 7.2.6.2 セッション記憶域の実装

- 7.2.6.3 ポートレットの表示

- 7.2.7 ポートレットのセキュリティの実装

- 7.2.7.1 前提

- 7.2.7.2 ポートレットのセキュリティ機能の概要

- 7.2.7.3 シングル・サインオン

- 7.2.7.4 Oracle Portalアクセス制御リスト(ACL)

- 7.2.7.5 ポートレットのセキュリティ・マネージャ

- 7.2.7.6 Oracle Portalのサーバー・セキュリティ

- 7.2.7.7 メッセージ認証

- 7.2.7.8 HTTPS通信

- 7.2.7.9 LDAP (Oracle Internet Directory)セキュリティ

- 7.2.7.10 ユーザー入力のエスケープ

- 7.2.8 ポートレットのパーソナライズのエクスポート/インポートの制御

- 7.2.8.1 エクスポート/インポートのプログラミング・インタフェース

- 7.2.8.2 パーソナライズのエクスポートの例

- 7.2.8.3 エクスポート/インポートのセキュリティの実装

- 7.2.9 キャッシュを使用したポートレットのパフォーマンスの向上

- 7.2.9.1 前提

- 7.2.9.2 キャッシュのアクティブ化

- 7.2.9.3 有効期限ベースのキャッシュの追加

- 7.2.9.4 無効化ベースのキャッシュの追加

- 7.2.9.5 有効化ベースのキャッシュの追加

- 7.2.10 ポートレットのモバイル機器用拡張

- 7.2.10.1 構成、ユーザーおよびデバイス情報へのアクセス

- 7.2.10.2 モバイル・ポートレットのナビゲーションの変更

- 7.2.11 多言語ポートレットの作成

- 7.2.11.1 前提

- 7.2.11.2 ポートレットの国際化

- 7.2.11.3 ポートレットの表示

- 7.3 Oracle JDeveloperを使用したStrutsポートレットの作成

- 7.3.1 Oracle PortalおよびApache Strutsのフレームワーク

- 7.3.1.1 Model-View-Controllerの概要

- 7.3.1.2 Apache Strutsの概要

- 7.3.1.3 Oracle PortalとStrutsの統合

- 7.3.1.4 サマリー

- 7.3.2 Strutsポートレットの作成

- 7.3.2.1 Strutsポートレットの作成

- 7.3.2.2 プロバイダの登録

- 7.3.2.3 サマリー

- 7.3.3 Oracle Application Development Framework (ADF)ポートレットの作成

8 PL/SQLポートレットの作成

- 8.1 PL/SQLポートレットの作成のガイドライン

- 8.1.1 ポートレットの表示モード

- 8.1.2 推奨されるポートレットのプロシージャおよびファンクション

- 8.1.3 モバイル・ポートレットのガイドライン

- 8.2 PL/SQLジェネレータを使用したPL/SQLポートレットの構築

- 8.2.1 入力XMLファイルの作成

- 8.2.2 PL/SQLジェネレータの実行

- 8.2.3 生成されたPL/SQLポートレットの公開

- 8.2.3.1 データベースへのパッケージのインストール

- 8.2.3.2 データベース・プロバイダの登録

- 8.2.3.3 ページへのポートレットの追加

- 8.3 手動によるPL/SQLポートレットの構築

- 8.3.1 ポートレット・パッケージの実装

- 8.3.2 プロバイダ・パッケージの実装

- 8.3.3 ページへのポートレットの追加

- 8.4 情報ストレージの実装

- 8.4.1 プリファレンス・ストアの実装

- 8.4.1.1 プリファレンス・ストアの使用

- 8.4.1.2 プリファレンス・ストアの作成およびアクセス

- 8.4.2 セッション・ストアの実装

- 8.5 パラメータの使用

- 8.5.1 プライベート・パラメータの引渡し

- 8.5.2 ページ・パラメータの引渡しとパブリック・ポートレット・パラメータのマッピング

- 8.5.3 パラメータ値の取得

- 8.6 コンテキスト情報へのアクセス

- 8.6.1 コンテキスト情報の使用

- 8.6.2 コンテキスト情報を取得するためのwwctx_apiの使用

- 8.7 ポートレットのセキュリティの実装

- 8.7.1 セキュリティの使用

- 8.7.2 セキュリティのコーディング

- 8.8 キャッシュを使用したポートレットのパフォーマンスの向上

- 8.8.1 キャッシュの使用

- 8.8.1.1 有効化ベースのキャッシュ

- 8.8.1.2 有効期限ベースのキャッシュ

- 8.8.1.3 無効化ベースのキャッシュ

- 8.8.2 キャッシュの構成と監視

- 8.8.3 有効化ベースのキャッシュの実装

- 8.8.4 有効期限ベースのキャッシュの実装

- 8.8.5 無効化ベースのキャッシュの実装

- 8.9 エラー処理の実装

- 8.9.1 エラー処理の使用

- 8.9.2 エラー処理の追加

- 8.10 イベント・ロギングの実装

- 8.10.1 イベント・ロギングの使用

- 8.10.2 イベント・ロギングの追加

- 8.11 多言語ポートレットの作成

- 8.11.1 多言語サポートの使用

- 8.11.2 多言語サポートの追加

- 8.11.2.1 言語文字列のロード

- 8.11.2.2 言語文字列の取得

- 8.12 ポートレットのモバイル機器用拡張

- 8.13 プログラムを使用したプロバイダの登録

- 8.13.1 登録の前提条件

- 8.13.2 プロバイダ・レコードの入力

- 8.13.3 登録の例

第III部 コンテンツ管理API

9 コンテンツ管理APIの概要

- 9.1 概要

- 9.2 コンテンツ管理API

- 9.2.1 セキュアなコンテンツ・リポジトリ・ビュー

- 9.2.2 用語

- 9.3 APIおよびセキュア・ビューへのアクセスの提供

- 9.4 APIの使用のガイドライン

- 9.4.1 異なるスキーマの使用

- 9.4.2 定数の使用

- 9.4.3 キャッシュの無効化

- 9.4.4 コミットの発行

- 9.4.5 CMEFグローバル変数のリセット

- 9.4.6 事前定義済の例外の使用

- 9.4.7 オブジェクトの命名

- 9.5 セキュア・ビューの使用のガイドライン

- 9.5.1 主キーの識別

- 9.5.2 翻訳可能オブジェクトの問合せ

- 9.5.3 現行ユーザーのデータの選択

- 9.6 コード・サンプル

10 コンテンツ管理APIのスタート・ガイド

- 10.1 セッション・コンテキストの設定

- 10.2 APIパラメータ

- 10.3 オブジェクトIDの検索

- 10.3.1 ページ・グループIDの検索

- 10.3.2 ページIDの検索

- 10.3.3 リージョンIDの検索

- 10.3.4 アイテムIDの検索

11 単純なコンテンツ管理タスクの実行

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

- 11.2 コンテンツの編集

- 11.2.1 アイテム属性の設定

- 11.2.2 アイテムの編集

- 11.2.3 アイテムのチェックアウトおよびチェックイン

- 11.2.4 バージョン・コントロールの使用

- 11.3 コンテンツの再編集

- 11.3.1 別のページへのアイテムの移動

- 11.3.2 ページの移動

- 11.3.3 カテゴリおよびパースペクティブの移動

- 11.4 コンテンツのコピー

- 11.4.1 アイテムのコピー

- 11.4.2 ページのコピー

- 11.5 コンテンツの削除

- 11.5.1 アイテムの削除

- 11.5.2 ページの削除

12 ポータルの拡張

- 12.1 ページ・グループの作成

- 12.2 ページの作成

- 12.3 カテゴリおよびパースペクティブの作成

- 12.4 アイテムの作成

- 12.5 ページおよびアイテムのパースペクティブ属性の設定

- 12.6 アイテムの承認および却下

13 Portalコンテンツの検索

- 13.1 すべてのページ・グループからのアイテムの検索

- 13.2 特定のページ・グループからのページの検索

- 13.3 属性によるアイテムの検索

- 13.4 検索結果のXMLへの変換

- 13.4.1 XMLファイル用ディレクトリの作成

- 13.4.2 CLOBからのXMLファイルの作成

- 13.4.3 検索結果のXMLでの生成

- 13.4.4 get_item_xmlへの回避策

- 13.5 検索結果の表示

- 13.5.1 OmniPortletでのXML検索結果の表示

- 13.5.2 動的ページへの検索結果の表示

14 多言語コンテンツの作成

- 14.1 多言語サポートの概要

- 14.2 デフォルト言語の問合せ

- 14.3 セッション言語の設定

- 14.4 既存の翻訳の変更

- 14.5 アイテムの翻訳の作成

- 14.6 翻訳およびアイテムのバージョニング

15 コンテンツのセキュリティの実装

- 15.1 オブジェクト権限の取得

- 15.2 ページ・レベルの権限の設定

- 15.2.1 ページ・レベルの権限の付与

- 15.2.2 ページ・レベルの権限の削除

- 15.3 アイテム・レベルの権限の設定

- 15.3.1 アイテム・レベルの権限の付与

- 15.3.2 アイテム・レベルの権限の削除

- 15.3.3 ページからのアイテム・レベルの権限の継承

16 コンテンツ管理イベント・フレームワークの使用

- 16.1 コンテンツ管理イベント・フレームワークの概要

- 16.2 コンテンツ管理イベント・フレームワークの動作

- 16.2.1 メッセージのエンキュー

- 16.2.2 サブスクライバおよびメッセージのデキュー

- 16.2.2.1 WWSBR_EVENT_Qキューへのサブスクライバの追加

- 16.2.2.2 サブスクライバのキューの管理

- 16.2.2.3 メッセージのデキュー

- 16.2.3 例外処理

- 16.2.4 メッセージのリスニング

- 16.3 コンテンツ管理イベント・フレームワークの使用

- 16.3.1 サブスクライバ・コードの作成

- 16.3.2 WWSBR_EVENT_Qへのサブスクライバの追加

- 16.3.3 ページ・グループ・レベルでのCMEFイベントの有効化

- 16.3.4 CMEFイベントの調査

- 16.3.5 CMEFサブスクライバの実行

- 16.3.6 CMEFメッセージのペイロード

- 16.3.7 Oracle PortalアクションおよびCMEFイベント

- 16.3.7.1 ページおよびページ・グループのアクション

- 16.3.7.2 アイテムの操作

- 16.4 例のインストール

- 16.5 例: Portalオブジェクトのイベント・ロギング

- 16.6 例: アイテム通知

- 16.7 例: アイテム検証

- 16.8 例: 外部ワークフローの統合

- 16.8.1 ワークフローとOracle Portalの統合

- 16.8.2 例の概要

- 16.8.3 詳細な例の説明

- 16.8.3.1 Oracle Portalでの承認と通知の有効化

- 16.8.3.2 ユーザーへの「承認付きアイテムの管理」権限の付与

- 16.8.3.3 スクリプト(CMEFによるWorkflowの統合の例用)の実行

- 16.8.3.4 サブスクライバおよびチェック・プロシージャの作成

- 16.8.3.5 Oracle WorkflowへのWF_CHECKURLプロセスの登録

- 16.8.3.6 WWSBR_EVENT_QキューへのCMEF_WORKFLOWサブスクライバの追加

第IV部 付録

A ポートレット・ビルダーを使用したポートレットの作成

B ポートレットおよびプロバイダのトラブルシューティング

- B.1 一般的なポートレットの問題

- B.1.1 ポートレットのリフレッシュ障害

- B.1.2 ポートレットにHTMLタグが表示される

- B.2 Javaポートレットの問題

- B.2.1 ポートレットのロギング

- B.2.2 インストールとデプロイの問題

- B.2.2.1 Javaクラス・オブジェクトが見つからない

- B.2.2.2 template.earファイルをデプロイできない

- B.2.2.3 プロバイダ登録時のエラー

- B.2.2.4 ポートレットをプロバイダに追加するときのエラー

- B.2.2.5 ポートレットが存在しない

- B.2.2.6 ファイルが見つからない

- B.2.2.7 XMLパーサー・エラー

- B.2.2.8 ポートレットを追加するときのエラー

- B.2.2.9 コンテンツ・リクエストのタイムアウト

- B.2.2.10 メッセージ500が返される

- B.2.2.11 getメソッドを使用するJPSポートレットが動作しない

- B.2.2.12 再デプロイ後に、ポートレットでセッションの期限切れメッセージが表示される

- B.2.3 ポートレット・コードをコンパイルできない

- B.2.4 アプリケーション・サーバーの接続テストに失敗する

- B.2.5 プロバイダ・テスト・ページにエラーが表示される

- B.2.6 Webプロバイダがポートレット・リポジトリに表示されない

- B.2.7 ポートレットがページに表示されない

- B.2.8 最初は表示されたポートレットがその後ページに表示されない

- B.3 OmniPortletの問題

- B.3.1 OmniPortletから指定されたURLにアクセスできない

- B.3.2 ポートレット・コンテンツがリフレッシュされない

- B.3.3 「デフォルトの編集」への変更がパーソナライズしたポートレットに反映されない

- B.4 Webクリッピングの問題

- B.4.1 ロギング・レベルの設定

- B.4.2 エラー・メッセージの確認

- B.4.3 テスト・ページを使用したプロバイダの状態の確認

- B.4.4 クリッピング用Webサイトへの接続の問題

- B.4.5 ファイアウォール外でクリップしたときのHTTPエラー・コード407

- B.4.6 ページをクリップできない

- B.4.7 クリッピング内のイメージが取得されない

- B.4.8 URLベースのポートレットの移行に伴う問題を解決する

- B.4.8.1 移行ツールを実行したときのファイルが見つからない例外

- B.4.8.2 移行ツールを実行したときのNULLポインタの例外

- B.4.8.3 ターゲットのprovider.xmlがすでに移行されているエラー

- B.4.8.4 クラスを使用してprovider.xmlを移行できないエラー

- B.5 関連情報

C プロファイル・アイテムと属性のマッピング

- C.1 userProfileItemsと属性のマッピング

D 手動によるPDK-Javaプロバイダのパッケージ化およびデプロイ

- D.1 概要

- D.1.1 WARファイルとEARファイル

- D.1.2 サービス識別子

- D.2 プロバイダのパッケージ化およびデプロイ

- D.2.1 プロバイダのパッケージ化

- D.2.1.1 ディレクトリの準備

- D.2.1.2 デフォルト・サービスの指定

- D.2.1.3 WARファイルの作成

- D.2.1.4 EARファイルの作成

- D.2.2 Fusion Middlewareコントロールを使用したEARファイルのデプロイ

- D.2.3 デプロイのテスト

- D.2.4 デプロイ・プロパティの設定

- D.2.5 プロバイダの保護

- D.2.6 プロバイダの登録

E Oracle Portalプロバイダ・テスト・スイート

- E.1 プロバイダ・テスト・ページ

- E.2 テスト・ハーネス

- E.2.1 テスト定義ファイル

- E.2.2 runTestコマンド

- E.2.3 テスト・ハーネスを使用したテストの実行

F コンテンツ管理のAPIおよびビュー

- F.1 サポートされているAPI

- F.1.1 WWSBR_APIパッケージ

- F.1.2 WWSRC_APIパッケージ

- F.1.3 WWSEC_APIパッケージ

- F.1.4 WWCTX_APIパッケージ

- F.1.5 WWPRO_API_INVALIDATIONパッケージ

- F.2 セキュア・ビュー

- F.2.1 WWSBR_ALL_CATEGORIES

- F.2.2 WWSBR_ALL_CONTENT_AREAS

- F.2.3 WWSBR_ALL_FOLDER_REGIONS

- F.2.4 WWSBR_ALL_FOLDERS

- F.2.5 WWSBR_ALL_ITEMS

- F.2.6 WWSBR_ALL_NAVIGATION_BARS

- F.2.7 WWSBR_ALL_PERSPECTIVES

- F.2.8 WWSBR_ALL_STYLES

- F.2.9 WWSBR_APPROVER

- F.2.10 WWSBR_ATTRIBUTES

- F.2.11 WWSBR_CONTENT_AREA_APPROVAL

- F.2.12 WWSBR_CONTENT_AREA_ITEM_TYPES

- F.2.13 WWSBR_FOLDER_ATTRIBUTES

- F.2.14 WWSBR_FOLDER_PERSPECTIVES

- F.2.15 WWSBR_FOLDER_TYPE_ATTRIBUTES

- F.2.16 WWSBR_FOLDER_TYPES

- F.2.17 WWSBR_ITEM_APPROVAL

- F.2.18 WWSBR_ITEM_ATTRIBUTES

- F.2.19 WWSBR_ITEM_PERSPECTIVES

- F.2.20 WWSBR_ITEM_TYPE_ATTRIBUTES

- F.2.21 WWSBR_ITEM_TYPES

- F.2.22 WWSBR_SUBSCRIPTION

- F.2.23 WWSBR_USER_FOLDERS

- F.2.24 WWSBR_USER_PAGES

G コンテンツ管理イベント・フレームワークのイベント

- G.1 アイテムのアクションおよびイベント

- G.2 ページのアクションおよびイベント

- G.3 タブのアクションおよびイベント

- G.4 ページ・グループのアクションおよびイベント

- G.5 属性のアクションおよびイベント

- G.6 アイテム・タイプのアクションおよびイベント

- G.7 ページ・タイプのアクションおよびイベント

- G.8 カテゴリのアクションおよびイベント

- G.9 パースペクティブのアクションおよびイベント

- G.10 テンプレートのアクションおよびイベント

用語集

索引

例一覧

- 6-1 WSRPプロデューサWSDLページ

- 9-1 clear_cmef_context APIのコール

- 9-2 事前定義済の例外の使用

- 9-3 ページへのアイテムの結合

- 9-4 翻訳されたページ表示名の選択

- 9-5 現行ユーザーによって作成されたアイテムの選択

- 10-1 セッション・コンテキストの設定(set_context API)

- 10-2 ページ・グループIDの検索

- 10-3 ページ・グループIDを検索するためのファンクション

- 10-4 既知のページ・グループ内でのページIDの検索

- 10-5 ページおよびページ・グループ名がわかっている場合のページとページ・グループのIDの検索

- 10-6 特定のページに挿入可能なリージョンのIDおよびタイプの検索

- 10-7 マスター・アイテムIDを指定したアイテムの現行バージョンIDの検索

- 10-8 アイテムIDの検索

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

- 11-2 アイテムの表示名の設定(set_attribute API)

- 11-3 アイテムの編集(modify_item API)

- 11-4 アイテムのチェックアウトおよびチェックイン(check_out_itemおよびcheck_in_item)

- 11-5 アイテムの新規バージョンの作成(modify_item API)

- 11-6 別のページ・グループへのアイテムの移動(move_item API)

- 11-7 ページの移動(move_folder API)

- 11-8 カテゴリの移動(move_category API)

- 11-9 パースペクティブの移動(move_perspective API)

- 11-10 別のページ・グループへのアイテムのコピーの作成(copy_item API)

- 11-11 ページのコピーの作成(copy_folder API)

- 11-12 アイテムの削除(delete_item API)

- 11-13 前の削除アイテムのリストア(undelete_item API)

- 11-14 ページの削除(delete_folder API)

- 12-1 ページ・グループの作成(add_content_area API)

- 12-2 ページの作成(add_folder API)

- 12-3 カテゴリの作成(add_category API)

- 12-4 パースペクティブの作成(add_perspective API)

- 12-5 テキスト・アイテムの作成(add_item API)

- 12-6 ファイル・アイテムの作成(add_item API)

- 12-7 コンテンツ・リポジトリへのファイルのアップロード、およびアップロード済ファイルを使用したファイル・アイテムの作成(upload_blob APIおよびadd_item_post_upload API)

- 12-8 ページの作成時におけるパースペクティブの指定

- 12-9 アイテムの作成時におけるパースペクティブの指定

- 12-10 アイテムの承認

- 12-11 アイテムの却下

- 13-1 すべてのページ・グループからの検索(item _search API)

- 13-2 特定のページ・グループからの検索(page_search API)

- 13-3 特定の属性の検索(specify_attributes API)

- 13-4 特定のファイル・システムに対するXMLファイルの書込み

- 13-5 XMLでの検索結果の生成(get_all_items_xml API)

- 13-6 get_item_xmlを使用したファイルへの検索結果の書込み

- 13-7 検索を実行するプロシージャ

- 13-8 動的ページの結果表示用コード

- 14-1 セッション言語の設定(set_nls_language API)

- 14-2 翻訳の変更

- 14-3 翻訳の作成

- 15-1 ページの権限リストの取得(grantee_list API)

- 15-2 アイテムの権限リストの取得

- 15-3 グループに対するページ権限の付与(set_group_acl API)

- 15-4 ユーザーに対するページ権限の付与(set_user_acl API)

- 15-5 グループのページ権限の削除(remove_group_acl API)

- 15-6 ユーザーのページ権限の削除(remove_user_acl API)

- 15-7 ページのアイテム・レベル・セキュリティの有効化

- 15-8 アイテムのアイテム・レベル・セキュリティの有効化(enable_ils_for_item API)

- 15-9 ユーザーへのアイテム・レベルの権限の付与(add_item_ils_privileges API)

- 15-10 アイテム・レベルの権限の削除(delete_ils_privilege API)

- 15-11 親ページからのアイテム権限の継承(inherit_folder_privileges API)

- 16-1 WWSBR_EVENT_Qへのサブスクライバの追加

- 16-2 メッセージのデキュー

- 16-3 複数のキューにおけるメッセージのリスニング

- 16-4 リスニングおよびメッセージのデキュー

- 16-5 サブスクライバの例

- 16-6 WWSBR_EVENT_Qへのサブスクライバの追加

- 16-7 サブスクライバの実行

- 16-8 CMEF_LOG_TABLE

- 16-9 LOG_PORTAL_EVENTサブスクライバ

- 16-10 WWSBR_EVENT_QへのLOG_PORTAL_EVENTサブスクライバの追加

- 16-11 LOG_PORTAL_EVENT CMEFサブスクライバの実行

- 16-12 CMEF_ITEM_NOTIFYサブスクライバ

- 16-13 DMBS_JOBの使用

- 16-14 CSBR_UTILパッケージ

- 16-15 HTML電子メール・プロシージャ

- 16-16 ITEM_VALIDATION CMEFサブスクライバ

- 16-17 WORKFLOW_APPROVALサブスクライバ

- 16-18 CHECK_URLプロシージャ

- 16-19 WWSBR_EVENT_QキューへのCMEF_WORKFLOWサブスクライバの追加

図一覧

- 1-1 My Oracleホーム・ページのポートレット

- 1-2 My Oracleホーム・ページのOracleニュース・ポートレット

- 1-3 ポートレット・リンクからのコンテンツ・ターゲット

- 1-4 ポートレットの構造

- 1-5 ポートレット・リポジトリ

- 1-6 Webクリッピング・スタジオを使用したWebコンテンツの選択

- 1-7 ポータルでポートレットとしてレンダリングされたクリップしたコンテンツ

- 1-8 表形式を使用したOmniPortlet

- 1-9 ポートレット・ビルダーのサンプルのフォーム、レポートおよびチャート

- 1-10 ページ設計者から経験豊かな開発者までを対象としたポートレット・リソース

- 2-1 ポートレット・プロバイダの概要

- 2-2 Webプロバイダ

- 2-3 データベース・プロバイダ

- 2-4 プロバイダ・アーキテクチャ

- 2-5 ポートレット作成スタイル

- 3-1 OmniPortletウィザードの「タイプ」タブ

- 3-2 「ソース」タブ: 「接続」セクションと「ポートレット・パラメータ」セクション

- 3-3 「接続の編集」ページ

- 3-4 「ソース」タブ: スプレッドシート

- 3-5 「ソース」タブ: SQL

- 3-6 「SQLソース」タブの接続情報

- 3-7 DataDirectドライバを使用した場合の「接続の編集」ページ

- 3-8 「ソース」タブ: XML

- 3-9 「ソース」タブ: Webサービス

- 3-10 「ソース」タブ: Webページ

- 3-11 「フィルタ」タブ

- 3-12 「表示」タブ

- 3-13 「レイアウト」タブ: 表スタイル

- 3-14 表のレイアウトを使用したOmniPortletの例

- 3-15 「レイアウト」タブ: チャート

- 3-16 円グラフ・レイアウト用の「レイアウト」タブの例

- 3-17 円グラフ・レイアウトを使用したOmniPortletの例

- 3-18 「レイアウト」タブ: ニュース

- 3-19 ニュース・レイアウトを使用したOmniPortletの例

- 3-20 「レイアウト」タブ: 箇条書き

- 3-21 箇条書きレイアウトを使用したOmniPortletの例

- 3-22 「レイアウト」タブ: フォーム

- 3-23 「新規ウィンドウに開く」チェック・ボックス

- 3-24 フォーム・レイアウトを使用したOmniPortletの例

- 3-25 「レイアウト」タブ: HTML

- 3-26 HTMLレイアウトを使用したOmniPortletの例

- 3-27 OmniPortletウィザードの「イベント」タブ

- 3-28 「ソース」タブ: 「ポートレット・パラメータ」セクション

- 3-29 「イベント」タブ

- 4-1 OmniPortletの例が4つあるポータル・ページ

- 4-2 ポータル・ページのOmniPortletインスタンス

- 4-3 OmniPortlet: 「Webサービス: テスト結果」ページ

- 4-4 OmniPortlet: Webサービスの「ソース」タブ

- 4-5 OmniPortlet: Webサービスの「表示」タブ

- 4-6 OmniPortlet: Webサービスのポートレット

- 4-7 OmniPortlet: 文字で区切られた値(CSV)の「レイアウト」タブ

- 4-8 OmniPortlet: ポータル・ページ上のCSV OmniPortlet

- 4-9 OmniPortlet: XMLの「レイアウト」タブ - 「ニュース・スタイル」

- 4-10 OmniPortlet: ニュース・スタイルの「列のレイアウト」

- 4-11 「レイアウト」タブの「列のレイアウト」セクション

- 4-12 OmniPortlet: ポータル・ページ上のXML形式のスクロール・ニュースのOmniPortlet

- 4-13 「URLロケーション」フィールド

- 4-14 www.wunderground.comのホーム・ページが表示されたWebクリッピング・スタジオ

- 4-15 天気フィールドへの郵便番号94065の入力

- 4-16 カリフォルニア州レッドウッド・シティの天気情報

- 4-17 「セクション」ボタン

- 4-18 Webページの各セクションを表示したWebクリッピング・スタジオ

- 4-19 「選択」アイコンが表示されたサンフランシスコ湾沿岸部の天気情報

- 4-20 Webクリッピング・スタジオ内でのサンマテオ郡の天気情報セクション

- 4-21 「スクレイプ」ボタン

- 4-22 スクレイプ・チェック・ボックス

- 4-23 サンマテオ郡のタイトルのチェック・ボックス

- 4-24 「データ」セクションのサンマテオ郡のラベル

- 4-25 選択した天気情報

- 4-26 「続行」ボタン

- 4-27 Webクリッピング・スタジオの「クリッピング属性」セクション

- 4-28 Webクリッピング・スタジオの「クリッピング・パラメータ」セクション

- 4-29 Webページの「ソース」タブ

- 4-30 クリッピング・パラメータとポートレット・パラメータのマッピング

- 4-31 「ポートレット・パラメータ」セクション

- 4-32 オプションが選択された「表示」タブ

- 4-33 「レイアウト」タブ

- 4-34 ポータル・ページの天気情報ポートレット

- 4-35 4つのOmniPortletの例が表示されたポータル・ページ

- 4-36 Webサービス・ポートレットの「デフォルトの編集」アイコン

- 4-37 ##Param1##に設定されたparam0

- 4-38 Webサービスの「ソース」タブの「ポートレット・パラメータ」セクション

- 4-39 Webページ・ポートレットの「デフォルトの編集」アイコン

- 4-40 Webページの「ソース」タブの「ポートレット・パラメータ」セクション

- 4-41 「ページ: プロパティ」リンク

- 4-42 「新規ページ・パラメータ」

- 4-43 zipページ・パラメータのデフォルト値

- 4-44 「ポートレット・パラメータ値」セクション

- 4-45 「ページ・パラメータ」タブの「ポートレット・パラメータ」セクション

- 4-46 チャート・ポートレットの「デフォルトの編集」アイコン

- 4-47 チャート・ポートレットの「イベント」タブ

- 4-48 ページの「イベント」タブの「ポートレット・イベント」セクション

- 4-49 「イベント」タブの「ページ入力」

- 4-50 ニューヨークの天気予報の(Webサービス)ポートレット

- 4-51 ニューヨークの天気情報の(Webページ)ポートレット

- 4-52 HTMLレイアウトを使用したOmniPortlet

- 4-53 HTMLレイアウトを使用したOmniPortletの初期表示

- 4-54 HTMLレイアウトを使用したOmniPortletの最終表示

- 5-1 ページの選択

- 5-2 ページへのポートレットの追加

- 5-3 ページに追加されたWebクリッピング・ポートレット

- 5-4 デフォルト設定の編集

- 5-5 URLの指定

- 5-6 Webクリッピング用のコンテンツを含むページのブラウズ

- 5-7 ターゲットのWebページのセクション化

- 5-8 セクション化されたターゲットのWebページ

- 5-9 ポータル・ページのWebクリッピング・ポートレットに追加されたクリップされたコンテンツ

- 5-10 「Webクリッピングの検索」ページの「プロパティ」セクション

- 5-11 外部アプリケーションの作成

- 5-12 リダイレクションの指定

- 5-13 Webクリッピング・プロバイダに対する外部アプリケーションの指定

- 5-14 Webクリッピング・スタジオでの外部アプリケーション

- 5-15 外部アプリケーションのプロパティ

- 5-16 ポートレットに表示される外部アプリケーション

- 5-17 「ページ・グループ・マップ」のノードの展開

- 5-18 OTNでの情報の検索

- 5-19 ターゲットのWebページのセクション化

- 5-20 Webクリッピング・ポートレットに表示された選択されたWebクリッピング

- 5-21 Webクリッピング・ポートレットの「デフォルトの編集」のクリック

- 5-22 Webクリッピング用のプロパティの設定

- 5-23 ユーザー入力に対するパラメータの指定

- 5-24 Webクリッピング・ポートレットのヘッダーにある「パーソナライズ」のクリック

- 5-25 パラメータに対する入力の指定

- 5-26 ユーザーが入力したパラメータに基づく新しいWebクリッピングの結果

- 6-1 Oracle Portalリンク・タイプ

- 6-2 モバイル対応アイコン

- 6-3 WSRP仕様のアーキテクチャ

- 6-4 Oracle PortalのWSRPアーキテクチャ

- 6-5 規格に基づいたJavaポートレットが選択された「新規ギャラリ」ダイアログ・ボックス

- 6-8 「一般ポートレット情報」ページ

- 6-7 「追加ポートレット情報」ページ

- 6-8 「コンテンツ・タイプとポートレット・モード」ページ

- 6-9 「コンテンツ・タイプ」ダイアログ・ボックス

- 6-10 「ポートレット・モード」ダイアログ・ボックス

- 6-11 「カスタマイズ・プリファレンス」ページ

- 6-12 「新規プリファレンスの追加」ダイアログ・ボックス

- 6-13 「セキュリティ・ロール」ページ

- 6-14 「セキュリティ・ロールの新規作成」ダイアログ・ボックス

- 6-15 「キャッシュ・オプション」ページ

- 6-16 「初期化パラメータ」ページ

- 6-17 アプリケーション・ナビゲータ

- 6-18 「プロバイダの登録」ページ

- 6-19 「接続の定義」ページ

- 6-20 「登録プロパティ値を入力」ページ

- 6-21 「登録確認」ページ

- 6-22 Oracle PDK-Javaポートレットが選択された「新規ギャラリ」ダイアログ・ボックス

- 6-23 「プロバイダの詳細」ページ

- 6-24 「一般ポートレット情報」ページ

- 6-25 「ビュー・モード」ページ

- 6-26 「カスタマイズ・モード」ページ

- 6-27 「追加モード」ページ

- 6-28 「パブリック・ポートレット・パラメータ」ページ

- 6-29 「パブリック・ポートレット・イベント」ページ

- 6-30 アプリケーション・ナビゲータ

- 6-31 「ポートレット・アプリケーション・テスト・ページ」

- 6-32 プロバイダ・テスト・ページ

- 6-33 PDK-Javaポートレットのテスト・ページ

- 6-34 「接続の定義」ページ

- 7-1 設計ビューでのedit.jsp

- 7-2 設計ビューでの変更されたedit.jsp

- 7-3 「ポートレットの追加」ページ

- 7-4 「プレビュー」ウィンドウ

- 7-5 パラメータ・ポートレット

- 7-6 ポートレット・ウィザードの「Public Portlet Events」ページ

- 7-7 「ページの編集」のポートレット・イベント

- 7-8 パラメータ変更前のMy Eventポートレット

- 7-9 パラメータ変更後のMy Eventポートレット

- 7-10 開発者用のページとポートレット

- 7-11 開発者/管理者用のページとポートレット

- 7-12 英語のポートレット

- 7-13 フランス語のポートレット

- 7-14 MVCパターン

- 7-15 StrutsアプリケーションとOracle Portalの統合

- 7-16 Blogの送信

- 7-17 Blogエントリの保存

- 8-1 PL/SQLジェネレータ・ページ

- 9-1 MDS Repository

- 13-1 バインド変数のデフォルト値の指定

- 13-2 動的ページ・ポートレットに表示されるデフォルトの検索結果

- 13-3 検索基準のパーソナライズ

- 13-4 動的ページ・ポートレットに表示されるパーソナライズ済の検索結果

- 16-1 デキュー・プロセス

- 16-2 「編集」モードのツールバーにある「ページ・グループ: プロパティ」リンク

- 16-3 ページ・グループのCMEFのステータス

- 16-4 ページ・グループのCMEFの有効化または無効化

- 16-5 CMEFのイベントのページ

- 16-6 CMEFメッセージのペイロード値を示すHTML表

- 16-7 WorkflowとOracle Portalの統合のプロセス・フロー

- 16-8 ページ・グループの承認と通知のステータス

- 16-9 ページ・グループの承認と通知の有効化または無効化

- 16-10 すべてのユーザーがアイテムの承認を要求する指定

- 16-11 CHECK_FILE Oracle Workflowプロセス

表一覧

- 2-1 ポートレット構築テクノロジの比較マトリックス

- 2-2 OmniPortletのデータ・ソース

- 3-1 OmniPortletウィザードとデフォルトの編集

- 3-2 サポートされるデータ・ソース・タイプ

- 4-1 天気予報ポートレットの列のプロパティ

- 7-1 イベント

- 7-2 PDK-JavaのJNDI変数

- 7-3 デバイスのクラス

- 7-4 同等のHTMLおよびSimpleResultユーティリティ

- 8-1 wwpro_api_providerの表示モードの定数

- 8-2 PL/SQLポートレット用の推奨ファンクションおよびプロシージャ

- 8-3 PL/SQLジェネレータの入力用XMLタグ

- 8-4 starter_provider2.pkbに対する変更

- 8-5 コンテキスト情報のファンクション・コール

- 8-6 ポートレット・レコード属性

- 8-7 DeviceClassヘッダーの値

- 8-8 provider_recordの必須フィールド

- 9-1 リリース1の用語と現在の用語の対応

- 11-1 編集可能なページ・レコード・プロパティ

- 11-2 基本属性の属性値

- 13-1 検索結果とセキュアなビューの対応

- 16-1 CMEFによって設定されるAQメッセージ・プロパティ

- 16-2 CMEFメッセージのペイロード・プロパティ

- C-1 userProfileItemsのマッピング

- D-1 application.xmlの要素

- D-2 プロバイダのデプロイ用JNDI変数

- E-1 runTestのオプション

- F-1 セキュアなコンテンツ・リポジトリ・ビュー

- F-2 WWSBR_ALL_CATEGORIES

- F-3 WWSBR_ALL_CONTENT_AREAS

- F-4 WWSBR_ALL_FOLDER_REGIONS

- F-5 WWSBR_ALL_FOLDERS

- F-6 WWSBR_ALL_ITEMS

- F-7 WWSBR_ALL_NAVIGATION_BARS

- F-8 WWSBR_ALL_PERSPECTIVES

- F-9 WWSBR_ALL_STYLES

- F-10 WWSBR_APPROVER

- F-11 WWSBR_ATTRIBUTES

- F-12 WWSBR_CONTENT_AREA_APPROVAL

- F-13 WWSBR_CONTENT_AREA_ITEM_TYPES

- F-14 WWSBR_FOLDER_ATTRIBUTES

- F-15 WWSBR_FOLDER_PERSPECTIVES

- F-16 WWSBR_FOLDER_TYPE_ATTRIBUTES

- F-17 WWSBR_FOLDER_TYPES

- F-18 WWSBR_ITEM_APPROVAL

- F-19 WWSBR_ITEM_ATTRIBUTES

- F-20 WWSBR_ITEM_PERSPECTIVES

- F-21 WWSBR_ITEM_TYPE_ATTRIBUTES

- F-22 WWSBR_ITEM_TYPES

- F-23 WWSBR_SUBSCRIPTION

- F-24 WWSBR_USER_FOLDERS

- F-25 WWSBR_USER_PAGES

- G-1 アイテムの追加および編集

- G-2 アイテムのコピーおよび移動

- G-3 アイテムの削除およびリストア

- G-4 アイテムの権限の定義

- G-5 アイテムのバージョニング

- G-6 アイテムの承認

- G-7 ページの追加および編集

- G-8 ページの削除

- G-9 ページの権限の定義

- G-10 タブの追加および編集

- G-11 ページ・グループの追加および編集

- G-12 ページ・グループの削除およびパージ

- G-13 ページ・グループの権限の定義

- G-14 ページ・グループの翻訳

- G-15 属性

- G-16 アイテム・タイプ

- G-17 ページ・タイプ

- G-18 カテゴリ

- G-19 パースペクティブ

- G-20 テンプレート

はじめに

このマニュアルでは、多様なツールとテクノロジを使用してOracle Portal (Oracle Portal)のポートレットを構築する方法について説明します。また、選択可能な各種テクノロジの概要を理解する、ユーザーの要件に最適なテクノロジを選択する、ポートレットの構築とデプロイに適切なツールを使用する際に手助けとなる情報も含まれています。

対象読者

このマニュアルは、主にポータル開発者を対象としていますが、ページ設計者にも有用です。最初にポートレット・テクノロジを理解したうえで選択し、次にそのテクノロジを使用してポートレットを構築するための各手順が説明されています。

ポータル開発者 ポータル開発者は、ポータルを組織固有の要件を満たすものにするためのコードを記述するユーザーです。たとえば、ポータル開発者は、ポートレットを構築し、ページ設計者や他のユーザーがそのポートレットを各自のページに組み込めるようにします。このようなポータル開発者は、ポートレット開発者とも呼ばれます。ポータル開発者は、OracleAS Portalのユーザー・インタフェースではなく、OracleAS Portalに用意されているパブリックAPIを使用して、プログラム的に特定のポータル・タスクを実行することもできます。ほとんどの場合、ポータル開発者は少なくともある程度のプログラミング知識を持っている人です。ポータル開発者に割り当てられる権限は、開発者が実行するタスクの種類によって決まります。

ポートレット開発者 ポートレット開発者は、すべてのPortal DBプロバイダを作成し、すべての共有コンポーネントを管理できるグローバル権限を付与されたユーザーです。OracleAS Portalには、ポートレットを構築するための多様なツールとテクノロジが用意されているため、ポートレット開発者は、プログラミングに関する十分な知識がなくてもかまいません。

注意:

ポートレット・ビルダーの使用の詳細は、Oracle Technology Network (OTN)(http://www.oracle.com/technology/documentation/appserver.html)にあるOracle Application Server 10g リリース2 (10.1.2.0.2)ライブラリのOracle Fusion Middleware Oracle Portal開発者ガイド 10gリリース2 (10.1.4)の付録A「ポートレット・ビルダーを使用したポートレットの作成」を参照してください。

ページ設計者 ページ設計者(ページ管理者とも呼ばれます)は、ページの管理権限を持つユーザーです。この権限を持つユーザーは、ページに対するすべての処理を実行し、そのページの下にサブページを作成できます。ページ設計者は、ページ・レイアウト(リージョンの構成)の設計、および他のユーザーへのページ権限の割当て(どのユーザーがページにコンテンツを追加できるかの決定など)を行うことがあります。

ページがテンプレートに基づいている場合は、そのページに対してページ設計者が制御できる範囲が制限されることがあります。

Oracle Portalの異なる権限とそれらが実行可能なタスクに与える影響の詳細は、『Oracle Portal ユーザーズ・ガイド』を参照してください。

注意:

このマニュアルのPortable Document Format (PDF)版でURLが2行にわかれている場合は、このURLをクリックしてもブラウザに完全なURLデータは送信されません。PDFに含まれているURLにアクセスするには、URLをコピーし、ブラウザのアドレス・フィールドに貼り付けます。このマニュアルのHTML版では、リンクをクリックすればブラウザに直接リンク先が表示されます。

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

オラクル社のアクセシビリティについての詳細情報は、Oracle Accessibility ProgramのWebサイトhttp://www.oracle.com/us/corporate/accessibility/index.htmlを参照してください。

Oracleサポートへのアクセス

Oracleのお客様は、My Oracle Supportにアクセスして電子サポートを受けることができます。詳細は、http://www.oracle.com/support/contact.htmlまたはhttp://www.oracle.com/accessibility/support.html(聴覚障害者向け)を参照してください。

関連ドキュメント

詳細は、Oracle Portalドキュメント・セットの次のマニュアルを参照してください。

- Oracle Fusion Middlewareのリリース・ノート

- Oracle Fusion Middleware Oracle Portalユーザーズ・ガイド

- Oracle Fusion Middleware Oracle Portal管理者ガイド

注意:

Oracle Portalに関連するすべてのドキュメントは、Oracle Fusion Middleware Documentation Libraryにあります。

Oracle Application Serverドキュメント・セットの次のマニュアルも役立ちます。

- Oracle Fusion Middlewareのコンセプト・ガイド

- Oracle Fusion Middleware Oracle HTTP Server管理者ガイド

- Oracle Fusion Middleware Oracle Web Cache管理者ガイド

- Oracle Fusion Middleware PL/SQL Web Toolkitリファレンス

注意:

Oracle Application Server関連のすべてのドキュメントは、OTN(http://www.oracle.com/technology/documentation/index.html)で入手できます。

表記規則

このドキュメントでは次の表記規則を使用します。

規則

意味

太字

太字は、操作に関連するGraphical User Interface要素、または本文中で定義されている用語および用語集に記載されている用語を示します。

イタリック体

イタリックは、ユーザーが特定の値を指定するプレースホルダ変数を示します。

固定幅フォント

固定幅フォントは、段落内のコマンド、URL、サンプル内のコード、画面に表示されるテキスト、または入力するテキストを示します。

< >

山カッコは、ユーザーが入力する名前を示します。

[ ]

大カッコは、カッコ内の項目を任意に選択することを表します。

...

例の中に省略記号がある場合は、例に直接関連しない情報が省略されていることを示します。

MW_HOME

Middlewareホームのフルパスを表します。

ORACLE_HOME

Oracleホームのフルパスを表します。

ORACLE_INSTANCE

ORACLE_HOMEと関連するインスタンス・ホームのフルパスを表します。

INFRA_ORACLE_HOME

Oracle Application Server InfrastructureのOracleホームのフルパスを表し、中間層、Oracle Application Server Infrastructure、またはOracle Metadata Repositoryを区別する必要がある場合に使用されます。

METADATA_REP_ORACLE_HOME

Oracle Metadata Repositoryを含むOracleAS Infrastructureのホームのフルパスを表し、中間層、Oracle Application Server Infrastructure、またはOracle Metadata Repositoryを区別する必要がある場合に使用されます。

第I部

ポートレットの概要

第I部の内容は次のとおりです。

- 第1章「ポートレットの理解」

- 第2章「ポートレット・テクノロジのマトリックス」

1 ポートレットの理解

この章では、ポートレットの概要を示し、例を使ってポートレットの使用方法を説明します。また、ポートレットの構造およびポートレットを作成するためのリソースについて説明します。この章の内容は、次のとおりです。

- 1.1項「ポータル開発の概要」

- 1.2項「ポートレットの理解」

- 1.3項「ポートレットの構造」

- 1.4項「ポートレット・リソース」

1.1 ポータル開発の概要

Oracle Portalを使用すると、複数の関連性のないデータ・ソースからの情報を1つの編成されたビューに表示できます。このビューがポータル・ページで、1つ以上のポートレットと呼ばれるコンポーネントからなり、各コンポーネントは、それぞれのコンテンツを異なるデータ・ソースから取得できます。

Oracle Portalには、ポートレットを開発してポータル・ページに追加するために必要なツールがすべて用意されています。Oracle Portalのツールは、ビジネス開発の初心者から経験豊かなITプログラマに至る広範な開発技能をサポートします。ポートレットは、Oracle Portalユーザー・インタフェースを介して宣言型としてでも、Oracle Portal Developer Kit (PDK)と呼ばれるOracle PortalのApplication Program Interface (API)のコレクションを介してプログラムとしてでも開発できます。さらに、Oracle Portalに対しては外部の他の開発ツールを使用してポートレットを開発し、PDKおよびプロバイダと呼ばれるOracle Portalエンティティによって統合できます。プロバイダの詳細は、第2章「ポートレット・テクノロジのマトリックス」を参照してください。

この章では、ポートレットを定義し、事前に構築されたポートレットのソースとポートレット構築用のリソースをリストして説明します。また、そのジョブに対する最適なリソースを示します。

1.2 ポートレットの理解

ポートレットは再利用可能なWebコンポーネントで、多数の異なるソースからコンテンツを描画できます。一般的なポートレットは、図1-1に示すように、Webコンテンツのサマリーを表示するポートレットです。

図1-1 My Oracleホーム・ページのポートレット

たとえば、ポータルには、リンクされたニュース記事の見出しを表示するニュース・フィード・ポートレットを設定できます。これらの見出しには、記事の内容を説明するセンテンスがそれぞれ含まれています(図1-2)。

図1-2 My Oracleホーム・ページのOracleニュース・ポートレット

ユーザーは、リンクされた見出しをクリックして、外部のニュース・サービスでホスティングされている記事のフル・テキストを取得します(図1-3)。このポートレットには、ソースでのニュース記事の追加と削除にあわせて、見出しを自動的に変更するという動的な性質があります。

図1-3 ポートレット・リンクからのコンテンツ・ターゲット

ポートレットは、複数のソースからのデータを意味のある関連付けられた形式で表示する手段を提供します。ポートレットでは、他のWebサイトからの抜粋の表示、主要情報のサマリーの生成、検索の実行および多様なデータ・ソースからの情報を収集したコレクションへのアクセスなどを実行できます。共通のページに様々なポートレットを配置できるため、ユーザーは単一のソースとして利用できます。実際には、コンテンツは複数のソースから導出される場合があります。

1.3 ポートレットの構造

ページ上のOracle Portalポートレットは、HTML表のセルでレンダリングされます。ポートレットには、HTML、書式設定したテキスト、イメージ、HTMLフォームの要素など、様々な種類のコンテンツを表示できます。

図1-4は、標準的なポートレットの構造です。ポートレットのタイトルを含むヘッダーがあります。ポートレット・タイトルにはハイパーリンクを作成できます。このリンクによって、ユーザーがタイトルをクリックすると、ポートレットがフル・ブラウザ・ページに表示されます。ポートレットには、レイアウトをページ上の他のポートレットと区別できるように、境界線を含めることもできます。

ポートレット開発者は、「パーソナライズ」や「ヘルプ」、「情報」といったリンクをページ設計者に公開し、ページ設計者はこれらのリンクをオンまたはオフにできます。「パーソナライズ」リンクをクリックすると、多数のオプションが表示されます。このオプションで、エンド・ユーザーはポートレットの各種の属性をパーソナライズできます。「ヘルプ」リンクをクリックすると、ヘルプ・テキストを含むウィンドウが表示されます。このウィンドウは、ポートレットでのエンド・ユーザーの操作を補助するために作成できます。「情報」リンクをクリックすると、ウィンドウが表示されます。このウィンドウは、ポートレットの内容を説明するために作成できます。

各ポートレットには、「リフレッシュ」アイコンおよび標準の「閉じる」アイコンも表示されます。このアイコンをクリックすると、ページ上のポートレットを閉じたり開いたりできます。

図1-4 ポートレットの構造

1.4 ポートレット・リソース

ポートレット・リソースには、事前に構築されたポートレットが多数含まれています。これらのポートレットは、複雑な設定なしに、Oracle Portal、Oracle E-Business Suiteおよびサード・パーティのソースなどの多くのソースから使用できます。ポートレット・リソースには、ポートレット構築ツールも含まれています。これらのツールは、Oracle Portalのユーザー・インタフェースを介して利用することも、PDKや他のOracle Toolsから利用することもできます。これらのツールには、異なる開発者のロールをターゲットにした異なる製品機能がそれぞれ用意されています。

この項では、様々なポートレット・リソースについて説明し、リソースの使用に必要な専門知識のレベルと最適な使用例を示します。内容は次のとおりです。

- 1.4.1項「複雑な設定が不要なポートレット」

- 1.4.2項「事前に構築されたポートレットのその他のソース」

- 1.4.3項「Webクリッピング」

- 1.4.4項「OmniPortlet」

- 1.4.5項「ポートレット・ビルダー」

- 1.4.7項「プログラム的なポートレット」

この項では、様々なポートレット・リソースの概要を説明します。各ツールとその利点の詳細は、第2章「ポートレット・テクノロジのマトリックス」を参照してください。

1.4.1 複雑な設定が不要なポートレット

概要

複雑な設定が不要なポートレットとは、事前に構築されて完全に開発された登録済のポートレットのことで、Oracle Portalをインストールすると、ポートレット・リポジトリからすぐに使用できます(図1-5)。このポートレットには、「検索」、「保存された検索」、「お気に入り」、「通知」などが含まれます。

図1-5 ポートレット・リポジトリ

Oracle Portalの事前に構築されたポートレットについては、『Oracle Fusion Middleware Oracle Portalユーザーズ・ガイド』を参照してください。

対象ユーザー

複雑な設定が不要なポートレットは、エンド・ユーザーおよびページ設計者に最適なポートレットですが、あらゆる専門知識レベルのユーザーが使用できます。

使用する場合

複雑な設定が不要なポートレットは、そのポートレットが提供する機能がニーズを満たしている場合や、すぐに利用できるパーソナライズのレベルで目的のタスクを十分に完了できる場合に使用します。

異なるユーザー・インタフェースが必要な場合や希望する機能のために複雑な設定が必要な場合など、ポートレットの拡張やパーソナライズが必要なときには、別の方法を検討してください。

各技術を使用する必要がある場合の詳細は、第2章「ポートレット・テクノロジのマトリックス」を参照してください。

1.4.2 事前に構築されたポートレットのその他のソース

概要

事前に構築されたポートレットのその他のソースには、パートナ・ポートレットと統合化ソリューションが含まれます。

パートナ・ポートレットは、オラクル社と、主要なシステム・インテグレータ、ソフトウェア・ベンダーおよびコンテンツ・プロバイダとの提携によって提供されます。キーワードportalまたはportletを使用してOracle PartnerNetwork Solutions Catalogを検索することで、これらのポートレットにアクセスできます。

http://solutions.oracle.com

たとえば、事前に構築されたポートレットには、次の目的に使用されるものがあります。

- Point-to-Point運転方向の生成

- 広範囲なソースからのIT情報へのアクセス

- ニュース、株式および天気に関するサマリー情報の表示

Portal Integration (POINT) Solutionsは、Microsoft Exchange、Lotus Notes、SAP、IMAP、SMTPなどの一般的なアプリケーションの基本機能が必要な顧客にソリューションを提供します。これらのポートレットは、OTNの「Oracle Portal Integration Solutions」ページから入手できます。

http://www.oracle.com/technology/products/ias/portal/point.html

対象ユーザー

完全に開発されたダウンロード可能なポートレットは、Oracle PortalでのWebプロバイダとデータベース・プロバイダのダウンロード、インストールおよび登録方法を理解しているエンド・ユーザーやページ設計者に最適なポートレットです。これらのポートレットは、すべての経験レベルで使用可能です。

使用する場合

複雑な設定が不要なポートレットと同様に、他のソースによって事前に構築されたポートレットは、そのポートレットが提供する機能がニーズを満たしている場合や、すぐに利用できるパーソナライズのレベルで目的のタスクを十分に完了できる場合に使用します。

異なるユーザー・インタフェースが必要な場合や希望する機能のために複雑な設定が必要な場合など、ポートレットの拡張やパーソナライズが必要なときには、別の方法を検討してください。

1.4.3 Webクリッピング

概要

Webクリッピングは、ブラウザ・ベースの宣言型ツールで、これを使用すると、WebアプリケーションとOracle Portalを統合できます。これは、Webアプリケーションの既存のユーザー・インタフェースを利用して迅速に統合できるように設計されています。Webクリッピングは、Oracle PortalのコンポーネントであるPDK-Javaを使用してWebプロバイダとして実装されています。

Webクリッピング・ポートレットを作成する場合、ポータル・ページの設計者は、Webブラウザを使用して必要なコンテンツを含むWebページにナビゲートします。ページ設計者は、Webクリッピング・スタジオを使用して、ターゲット・ページのビジュアル・レンダリングをドリルダウンし、必要なコンテンツを選択できます(図1-6および図1-7)。

図1-6 Webクリッピング・スタジオを使用したWebコンテンツの選択

図1-7 ポータルでポートレットとしてレンダリングされたクリップしたコンテンツ

Webクリッピングは次の機能をサポートします。

- 様々なスタイルのログイン・メカニズムを介したナビゲーション。これには、フォーム・ベースとJavaScriptベースの送信、およびCookieベースのセッション管理を使用したHTTPのBasic認証とDigest認証が含まれます。

- クリッピングのファジー・マッチング。ソース・ページ内部でWebクリッピングの順序が変更されたり、文字のフォント、サイズまたはスタイルが変更された場合でも、Webクリッピング・エンジンでは正確に識別され、ポートレット・コンテンツとして配信されます。

- 広範囲なWebコンテンツの再利用。これには、HTTPのGETとPOST(フォーム送信)を使用して取得された、HTML 4.0.1、JavaScript、アプレットおよびプラグイン対応コンテンツで作成されたページの基本サポートが含まれます。

- パーソナライズ。ページ設計者は、ページの閲覧者がポートレットのパーソナライズ時に変更できる入力パラメータを公開できます。これらのパラメータは、ページ設計者がOracle Portalのページ・パラメータとしてマップできるパブリック・パラメータとして公開できます。この機能により、エンド・ユーザーはパーソナライズされたクリッピングを取得できます。

- シングル・サインオンを使用した認証されているWebコンテンツの統合。これには、外部アプリケーションとの統合が含まれます。この統合によって、Oracle Application Server Single Sign-Onの利用や、認証されている外部Webサイトのコンテンツのクリップが可能になります。

- インライン・レンダリング。このレンダリングによって、Webクリッピング・ポートレットは、ポートレットのコンテキスト内にリンクを表示するように設定できます。その結果、ユーザーがWebクリッピング・ポートレット内でリンクをクリックすると、同じポートレット内に結果が表示されます。この機能は、内部および外部のWebサイトで使用できます。

- プロキシ認証。これには、グローバルなプロキシ認証やユーザーごとの認証のサポートも含まれます。プロキシ・サーバーのレルムを指定し、すべてのユーザーが指定されたユーザー名とパスワードで自動的にログインするか、各ユーザーが個別のユーザー名とパスワードでログインするか、またはすべてのユーザーが指定されたユーザー名とパスワードでログインするかを指定できます。

- イメージのリソース・トンネリング。

- Open Transport API。クリップされたサイトに対する認証メカニズムをカスタマイズするためのAPI。

- セキュリティ拡張。これにより、管理者はWebクリッピング・ポートレットによってクリッピングできるコンテンツへのアクセスを制御できます。

- URLベースのポートレットからの移行。URLベースのポートレットからWebクリッピングへの移行を可能にします。

対象ユーザー

Webクリッピングは、既存のWebページを利用してポートレットを迅速に開発するページ設計者およびポートレット開発者に最適です。Webクリッピング・ポートレットは、Oracle Portalのポートレット・リポジトリで複雑な設定をしなくてもアクセスし、使用できます。適切な権限を持つユーザーであれば誰でも、このポートレットをページに追加できます。

使用時期

Webクリッピングは、既存のWebページのライブ・コンテンツおよび機能の目的を変更し、ポータルでポートレットとして公開する場合に使用します。クリップしたポートレット内で情報の表示方法を変更する場合は、別の方法を検討してください。つまり、ユーザー・インタフェースやアプリケーション・フローを制御する必要なしに、Webベースのアプリケーションにアクセスします。より高いレベルの制御が必要な場合は、WebクリッピングのかわりにOmniPortletのWebページ・データ・ソースを使用してください。

Webクリッピング・ポートレットの使用は、次の例のような場合に検討します。

- 株式チャート・ポートレット。株式市場の日次実績チャートを、自社の財務顧問のWebサイトから表示するポートレットを作成する場合。この情報は、自社でプロキシを使用している場合でも、外部Webサイトからクリップできます。

- パーソナライズされた天気ポートレット。天気情報を主要なインターネット天気サイトから表示するポートレットを作成し、必要な郵便番号を指定して、ユーザーがそのポートレットをパーソナライズできるようにする場合。

- Webメール・ポートレット。ユーザーがそれぞれの機密Webメール・アカウントにポートレット経由でアクセスし、そのポートレット内に表示する受信ボックスにアクセスする場合。

Webクリッピングの使用方法は、第5章「Webクリッピングを使用したコンテンツ・ベースのポートレットの作成」を参照してください。

注意:

Webクリッピング・ポートレットまたはOmniPortletまたはWindows (2000 SP4、2003 (32ビット)SP2/R2またはそれ以降、XP SP2/R2またはそれ以降、Vista、Server 2008)搭載のシンプル・パラメータ・フォームを使用するには、Firefox 3.0またはそれ以降か、Microsoft Internet Explorer 7あるいはそれ以降を使用する必要があります。

1.4.4 OmniPortlet

概要

OmniPortletは宣言型のポートレット構築ツールで、これを使用すると、XMLファイル、複数値を特定文字で区切ったファイル(CSV、たとえばスプレッドシートなど)、Webサービス、データベース、WebページおよびSAPデータ・ソースを含めた多様なデータ・ソースに対してポートレットを構築できます。OmniPortletユーザーは、データに対して事前に作成されたレイアウトを選択することもできます。事前に作成されたレイアウトには、表、ニュース、箇条書き、フォーム、チャートまたはHTMLが含まれます。HTMLレイアウトを使用すると、OmniPortletユーザーは独自のHTMLを作成し、データをそのHTMLに挿入できます。図1-8は、表形式を使用したOmniPortletを示します。

図1-8 表形式を使用したOmniPortlet

注意:

Oracle PortalにはSAPデータ・ソースは含まれていません。SAPデータ・ソースの使用方法は、OTNの「Oracle Portal Integration Solutions」ページを参照してください。

http://www.oracle.com/technology/products/ias/portal/point.html

Webクリッピングと同様に、OmniPortletでは、グローバルなプロキシ認証やユーザーごとの認証などのプロキシ認証をサポートします。すべてのユーザーが指定されたユーザー名とパスワードで自動的にログインするか、各ユーザーが個別のユーザー名とパスワードでログインするか、またはすべてのユーザーが指定されたユーザー名とパスワードでログインするかを指定できます。

OmniPortletの詳細は、Portal Centerを参照してください。次のURLにアクセスし、「Portlet Development」をクリックします。

http://portalcenter.oracle.com

対象ユーザー

OmniPortletは、対象データへのURLについて最小限のことしかわからないビジネス・ユーザーに最適です。

使用時期

OmniPortletは、多様なレイアウトを使用した多様なデータ・ソースに対してポートレットを迅速に構築する場合に使用します。ポートレットの設計や機能を完全に制御する場合は、別の方法を検討してください。

OmniPortletの使用は、次の例のような場合に検討します。

- RSSニュース・フィード・ポートレット。ユーザーに対してライブのニュース情報をスクロール表示するポートレットを作成する場合。データの発信元は、Oracle Technology Network HeadlinesなどのReally Simple Syndication (RSS)ニュース・フィードです。ニュース・ソースへのハイパーリンクを含むポートレットも必要です。

- 販売チャート・ポートレット。自社の販売結果に関する最新情報を表す場合。円グラフでもデータを表示し、自社の販売情報はリモートのリレーショナル・データベースに保存されます。

- SAPポートレット。会社のSAPシステムの情報を表示する場合。会社のSAP Business Suiteへの負荷を最小化するために、システムから取得した情報は1日分ごとに各ユーザーに対してキャッシュする必要があります。

OmniPortletの詳細は、第3章「OmniPortletを使用したポートレットの作成」および第4章「OmniPortletを使用したポートレットの構築例」を参照してください。

1.4.5 ポートレット・ビルダー

概要

Oracle Portalには、複数のポートレット構築ウィザードが含まれています。これらのウィザードには、Portalナビゲータの「プロバイダ」タブを使用してアクセスできます。これらのウィザードは、図1-9に示すような、チャート、レポート、フォーム、カレンダおよび値リストの構築に使用できます。

図1-9 ポートレット・ビルダーのサンプルのフォーム、レポートおよびチャート

使用時期

可能なかぎり、ポートレット・ビルダーのかわりにOmniPortletを使用することをお薦めします。OmniPortletにはより柔軟性があり、データとレイアウトを切り離すことができるため、ポートレット全体を再作成せずに、レポートをチャートに変更できます(ポートレット・ビルダーの場合は再作成が必要です)。また、OmniPortletには、多数の異なるポータルを同時にデプロイするためのオプションがより多く用意されています。Oracle Portalでは、今後もポートレット・ビルダーをポートレット構築オプションとしてサポートします。ただし、新機能と拡張機能はOmniPortletツールが対象となります。

OmniPortletの詳細は、1.4.4項「OmniPortlet」を参照してください。ポートレット・ビルダーの詳細は、付録A「ポートレット・ビルダーを使用したポートレットの作成」を参照してください。

1.4.6 JSFポートレット

概要

JSFポートレットは、JSFポートレット・ブリッジを使用して作成します。JSFポートレット・ブリッジを使用すると、アプリケーション開発者は、既存のJSFアプリケーションおよびタスク・フローをJSR 168ポートレットとして公開できます。ポートレット・ブリッジは、JSFアプリケーションとOracle PortalなどのWSRPポートレット・コンシューマとの統合を容易にします。

JSFポートレットでは、JSFアプリケーションとは別のソース・コードは必要ありません。これらのポートレットはポートレット・ブリッジを使用して作成されるので、アプリケーションとポートレットの両方で1つのソースを維持するだけで済みます。同様に、JSFアプリケーションをデプロイすると、JSFポートレットも一緒にデプロイされます。したがって、ブリッジを使用すると、アプリケーションとは別にポートレットを保存、管理、デプロイする必要がなくなります。

注意:

JSFポートレット・ブリッジは、Oracle WebCenter ServicesをOracle Portalに統合しています。ライセンスを受けたOracle WebCentreを使用している場合にのみ、利用可能です。

対象ユーザー

FacesとWSRPの知識があるアプリケーション開発者。

使用する場合

JSFポートレットは、アプリケーション開発者が、アプリケーション全体をホストしないで、または別にポートレットを作成しないで、JSFアプリケーションからのコンテンツをポートレットとして表示する場合に最適です。ポートレット化すると、ポートレットの使用は、プロバイダURLを使用してWSRPプロバイダを登録するのと同じです。

詳細は、『Oracle Fusion Middleware Developer's Guide for Oracle WebCenter Suite』を参照してください。

1.4.7 プログラム的なポートレット

概要

プログラム的なポートレットは、JavaまたはPL/SQLを使用して作成するポートレットです。Oracle PDKには、プログラム的なポートレットの構築に使用できる一連のポートレット構築APIが含まれています。

これらのAPIの詳細は、Portal Centerを参照してください。

http://portalcenter.oracle.com

注意:

PDK-PL/SQLについては、このマニュアルでは詳しく説明していません。PDK-PL/SQL固有の情報は、Portal Centerの「Developer Services」エリアを参照してください。

http://portalcenter.oracle.com

対象ユーザー

このツールは経験と知識の豊富なIT開発者に最適なツールです。

使用する場合

プログラム的なポートレットは、非常に特化したビジネス・ルールやロジックがある、またはパーソナライズした認証、動的結果の精度の高い処理およびユーザー・インタフェースの完全な制御が必要な場合に使用します。さらに、次のいずれかの条件を満たす必要がある場合にプログラム的なポートレットを使用します。

- 最初からポートレットを構築していて、そのポートレットの全機能を完全に制御する必要がある場合。

- JavaまたはPL/SQLの知識がある場合。

- PDKとOracle Portalプロバイダの構成をよく理解している場合。

複雑な設定が不要な宣言型ツールがニーズに対応していない場合は、このツールの使用を検討してください。

Oracle Portal Developer Kitで作成したJavaポートレットの使用は、次の例のような場合に検討します。

- ディスカッション・フォーラム・ポートレット。自社のJSPベースのディスカッション・フォーラム・アプリケーションをOracle Portalに統合するポートレットを作成する場合。ディスカッション・フォーラム・ポストはリレーショナル・データベースに格納されます。このポートレットは、自社のインターネットWebサイトのルック・アンド・フィールに厳密に従う必要があります。

- 電子メール・ポートレット。ユーザーが電子メールを自社のイントラネット・ポータルから送信できるポートレットを作成する場合。ユーザーがLDAPサーバー上のアドレス帳を使用できるように、電子メール・ポートレットを会社のLDAPサーバーに統合する必要があります。

PDK-Javaの使用方法の詳細は、第6章「Javaポートレットの作成」および第7章「Javaポートレットの拡張」を参照してください。PDK-PL/SQLの使用方法の詳細は、第8章「PL/SQLポートレットの作成」を参照してください。

1.4.8 使用するツールの決定

図1-10に、前項で説明したポートレット・リソースの範囲を示します。範囲の片方はページ設計者が必要とする宣言的環境を対象とし、もう片方は手動でのコーディングおよびポートレット開発者を対象にしていることに注意してください。自分のスキルに対して最も快適で適切な環境タイプに従ってツールを選択できます。

使用するツールの決定方法は、第2章「ポートレット・テクノロジのマトリックス」を参照してください。

図1-10 ページ設計者から経験豊かな開発者までを対象としたポートレット・リソース

2 ポートレット・テクノロジのマトリックス

この章では、ポートレットの機能、特性、テクノロジおよびツールについて説明し、ニーズに最も適したポートレット構築テクノロジを決定できるようにします。内容は、次のとおりです。

- 2.1項「ポートレット・テクノロジのマトリックス」

- 2.2項「一般的な適性」

- 2.3項「必要な専門知識」

- 2.4項「デプロイ・タイプ」

- 2.5項「キャッシュ・スタイル」

- 2.6項「開発ツール」

- 2.7項「ポートレット作成スタイル」

- 2.8項「ユーザー・インタフェースの柔軟性」

- 2.9項「Webサイトからコンテンツを取得する機能」

- 2.10項「コンテンツをインラインでレンダリングする機能」

- 2.11項「チャート作成機能」

- 2.12項「パブリック・ポートレット・パラメータのサポート」

- 2.13項「プライベート・ポートレット・パラメータのサポート」

- 2.14項「イベントのサポート」

- 2.15項「ユーザー権限に基づいてポートレットの表示/非表示を切り替える機能」

- 2.16項「多言語サポート」

- 2.17項「ページ区切りサポート」

- 2.18項「シングル・サインオンおよび外部アプリケーション統合」

2.1 ポートレット・テクノロジのマトリックス

表2-1 「ポートレット構築テクノロジの比較マトリックス」では、横軸上にOracle Portalで使用できるテクノロジとツールを示し、縦軸上でそれぞれの機能と特性を要約しています。このマトリックスには、このガイドで詳細に説明するOmniPortlet、Webクリッピング、Javaポートレット(PDK-Java)および標準などのツールやテクノロジが掲載されています。ポートレット・ビルダーについては付録で説明し、PL/SQLポートレット(PDK-PL/SQL)については、このマトリックスでのみ説明します。

注意:

これらはポートレットを構築するための主なツールですが、その他のツールやテクノロジもあります。たとえば、Oracle ReportsやOracle Business Intelligence Discovererなどです。これらのツールについては、このガイドでは説明しません。

この章の他の項では、表2-1にリストした特性の詳細を説明します。この表で機能と特性すべてに簡単に目を通した後、後続の項で詳細情報を参照してください。

表2-1 ポートレット構築テクノロジの比較マトリックス

Webクリッピング

OmniPortlet

PDK-Java

標準

ポートレット・ビルダー

PDK-PL/SQL

一般的な適性

単純なウィザード・ベースのツール。他のWebサイトのWebコンテンツをポータル内に取得して表示する際に役立ちます。

ブラウザからアクセス可能なウィザード・ベースのツール。広範囲なデータ・ソースからデータを取得して表示できます。

Oracle Portal専用に構築されたポートレットのAPI。

他のベンダーのポータルで動作するポートレット。Oracleでは、WSRPとJSR-168の両方がサポートされています。

ブラウザからアクセス可能なウィザード・ベースのツール。データベース中心の単純なアプリケーションまたはポートレットに最適です。

Oracle Portal専用に構築されたポートレットのAPI。

必要な専門知識

専門知識は不要。

サポートされる1つ以上のデータ・ソース、およびポートレット、ページ・パラメータ、イベントの概念に関する基本的な理解。

Java、サーブレット、JSPの知識。

Java、サーブレット、JSPの知識。

リレーショナル・データベース概念の基本的な理解。必要に応じてSQL、PL/SQL。

SQL、PL/SQL、PL/SQL Webツールキット。

サポートされるデータ・ソース(詳細は、2.3項「必要な専門知識」を参照)

ネットワーク上でHTTPまたはHTTPSを介してアクセス可能なすべてのWebサイト。

CSV、XML、Webサービス、SAP、SQL、Webサイト、JCA。

制限なし。

制限なし。

SQL(ローカルDBまたはDBリンクを介したリモートDB)。

SQL(ローカルDBまたはDBリンクを介したリモートDB)。

デプロイ・タイプ

Webプロバイダ

Webプロバイダ

Webプロバイダ

WSRP

データベース・プロバイダ

データベース・プロバイダ

キャッシュ・スタイル

有効期限ベースのキャッシュ、無効化ベースのキャッシュ(パーソナライズ時に自動的に無効化)。

有効期限ベースのキャッシュ、無効化ベースのキャッシュ(パーソナライズ時に自動的に無効化)。

有効期限ベースのキャッシュ、有効化ベースのキャッシュ、無効化ベースのキャッシュ、ESI。

有効化ベースのキャッシュ、有効期限ベースのキャッシュ。

有効期限ベースのキャッシュ。

有効期限ベースのキャッシュ、有効化ベースのキャッシュ、無効化ベースのキャッシュ。

開発ツール

ブラウザ - ウィザード。

ブラウザ - ウィザード。

Oracle JDeveloper - Javaポートレット・ウィザード(または、ウィザードを使用しない他のJava開発環境)。

Oracle JDeveloper - Javaポートレット・ウィザード(または、ウィザードを使用しない他のJava開発環境)。

ブラウザ - 必要に応じてPL/SQL開発環境。

PL/SQL開発環境。

ポートレット作成スタイル

その場で開発。

その場で開発。

ポートレットはその場で構築しません。ポートレットのページへの追加、デフォルトの編集およびパーソナライズを行います。

ポートレットはその場で構築しません。ポートレットのページへの追加、デフォルトの編集およびパーソナライズを行います。

開発後に追加、およびその場で開発。

ポートレットはその場で構築しません。ポートレットのページへの追加、デフォルトの編集およびパーソナライズを行います。

ユーザー・インタフェースの柔軟性

適用外。

柔軟性が高い。HTMLレイアウトを使用します。

柔軟性が高い。

柔軟性が高い。

制限あり。

柔軟性が高い。

Webサイトからコンテンツを取得する機能

あり。これが本来の機能です。

あり。Webデータ・ソースを使用します。

あり。java.netパッケージを使用します。

あり。java.netパッケージを使用します。

いいえ

あり。UTIL_HTTPパッケージを使用します。

コンテンツをインラインでレンダリングする機能

あり。(Webクリッピング9.0.4.0.2以上でサポート。)

URLリライティングはサポートされませんが、パブリック・ポートレット・パラメータとイベントを使用することで実現できます。

プライベート・ポートレット・パラメータを使用します。

サーブレットおよびJSPを組み込みます(PortletContext.getRequestDispatcher()メソッドを使用)。

レポートおよびチャートのページ区切りがインラインでレンダリングされます。

プライベート・ポートレット・パラメータを使用します。

チャート作成機能

適用外。

あり。2Dチャートと3Dチャート。

BI Beanを使用します。

BI Beanを使用します。

HTMLチャート。

プログラムによるHTMLチャート。

パブリック・ポートレット・パラメータのサポート

あり。(Webクリッピング9.0.4.0.2以上でサポート。)

はい。

はい。

いいえ

はい。

はい。

プライベート・ポートレット・パラメータのサポート

適用外。

適用外。

はい。

はい。

いいえ

はい。

イベントのサポート

はい。

はい。

はい。

ポートレットのプライベート・イベント(アクション)。

いいえ

いいえ

ユーザー権限に基づいてポートレットの表示/非表示を切り替える機能

なし。ただし、UIを介して公開されないセキュリティ・マネージャの適用が可能です。

なし。ただし、UIを介して公開されないセキュリティ・マネージャの適用が可能です。

あり。セキュリティ・マネージャを使用します。

あり。サーブレット・セキュリティ・モデルは、PortletRequest.isUserInRole()やPortletRequest.getUserPrincipal()などのメソッドを使用してサポートされます。

はい。

あり。セキュリティAPIを使用します。

多言語サポート

適用外。

はい。

はい。

はい。

いいえ

はい。

ページ区切りサポート

適用外。

いいえ

プログラムによるサポート。

プログラムによるサポート。

はい。

プログラムによるサポート。

シングル・サインオンおよび外部アプリケーション統合

Webクリッピング9.0.4.0.2以上では、外部アプリケーションの統合がサポートされます。

Basic認証は、データ・ソースに認証が必要な場合にサポートされます。

外部アプリケーション統合がサポートされます。LDAP統合は、ポートレットがLDAPサーバーと同じファイアウォールの内側で実行される場合にサポートされます。

なし。(カスタム・ユーザー属性を介して実行可能です。)LDAP統合がサポートされます。

なし。(Oracle Portalリポジトリ内で実行されるため、SSO統合は必要ありません。)

SSOは、mod_osoを使用することで有効になります。

2.2 一般的な適性

この項では、各ポートレット構築テクノロジをその用途の特性(ウィザード・ベースまたはプログラムなど)の観点から説明します。

2.2.1 Webクリッピング

Webクリッピングは、単純なウィザード・ベースのツールで、他のWebサイトのWebコンテンツをポータル内に取得して表示する際に役立ちます。Webクリッピングでは、専門知識は不要です。

Webクリッピングを使用して構築できるポートレットの例

Webクリッピングを使用して、次のポートレットを構築できます。

- 株式チャート・ポートレット

- パーソナライズされた天気ポートレット

- Webメール・ポートレット

2.2.2 OmniPortlet

OmniPortletは、様々な形式の広範囲なデータ・ソースから情報を取得して表示するために、簡単に使用できるウィザード・ベースのツールです。OmniPortletは、ブラウザで完全に稼働します。OmniPortletをポータル・ページにドロップし、「定義」リンクをクリックして、データ・ソースと表示形式を選択します。次を含む様々なデータ・ソースから選択できます。

- スプレッドシート

- SQL

- XML

- Webサービス

- Webページ

OmniPortletは、追加の開発ツールを使用したり高度な専門知識がなくても使用できます。そのようなユーザーでも、再利用可能で高性能なポートレットを構築できます。

OmniPortletで作成できるポートレットの例

OmniPortletを使用して、次のポートレットを作成できます。

- RSSニュース・フィード・ポートレット

- 販売チャート・ポートレット

- SAP Business Suiteポートレット

2.2.3 Javaポートレット

ウィザード・ベースのポートレット構築ツールではニーズを満たさない場合は、Javaを使用してプログラムでポートレットを構築できます。2003年に、JavaポートレットAPIがJava Community Processによって標準化されました。Java Specification Request (JSR) 168標準に準拠して構築されたポートレットは、異なるポータル・プラットフォーム間で相互運用できます。Oracle JDeveloperプラグインの1つであるJavaポートレット・ウィザードは、Javaポートレットを開始する際に役立ちます。

注意:

Javaでポートレットを構築する場合は、ポートレットの機能を完全に制御できます。たとえば、外観や動作方法を制御できます。

Javaを使用して構築できるポートレットの例

Javaで次のポートレットを構築できます。

- ディスカッション・フォーラム・ポートレット

- 電子メール・ポートレット

2.2.4 ポートレット・ビルダー

ポートレット・ビルダーは、データ駆動ポートレットを作成するためのウィザード・ベースのツールで、データはOracleデータベースに存在します。インタラクティブなフォームを構築して、データベース・レコードを挿入、更新および削除できます。柔軟性のあるレポートおよびHTML棒グラフを作成して、データベースの情報を表示できます。また、ポートレット・ビルダーでは、動的リンクを使用して、データ駆動ポートレット間でパラメータを渡したり、ナビゲートすることもできます。

ポートレット・ビルダーを使用して構築できるポートレットの例

ポートレット・ビルダーを使用して、次のポートレットを構築できます。

- データ入力ポートレット

- パートナの動的リスト・ポートレット

- 販売結果ポートレット

2.2.5 PL/SQLポートレット

Javaポートレットと同様に、PL/SQLポートレットは、組込みのポートレットではニーズを満たすことができないWebアプリケーションを構築するために、柔軟なアプローチを提供します。たとえば、アプリケーションで特別なビジネス・ルールやロジックを実装する必要がある場合、またはカスタム設計された認証要件を満たす場合などです。PL/SQLポートレットは、通常、SQLおよびPL/SQLを使用してデータ集約型の操作を実行する必要がある場合に使用されます。Oracle Portalには、プログラムによるプロバイダ登録、オブジェクト・レベルの権限管理、ユーザー・インタフェース制御、多言語サポートなど、豊富なPL/SQL APIが用意されています。

たとえば、情報プロバイダはカスタム・ポートレットを作成し、Oracle Portalを介してアプリケーションをユーザーに表示できます。開発者は、Oracle Portal Developer Kit (PDK)の仕様に従って独自のポートレットを構築し、プロバイダをOracle Portalに登録します。Oracle PDKを使用すると、ニーズに適したポートレットを開発できます。

PL/SQLを使用して構築できるポートレットの例

PL/SQLを使用して、次のポートレットを構築できます。

- コンテンツ・アップロード・ポートレット

- サイト・マップ・ポートレット

- 高度なデータ入力およびレポート・ポートレット

2.3 必要な専門知識

ポートレット構築ツールでは、ポートレットの開発技能を必要としない場合も、高度な専門知識があることを前提としている場合もあります。この項では、ポートレット構築ツールを、それぞれのツールを効果的に使用するために必要な知識レベルの観点から説明します。

2.3.1 Webクリッピング

Webクリッピングは、専門知識を必要としないツールです。ただし、クリップしたWebページのコンテンツをパラメータ化する場合は、パブリック・ポートレット・パラメータおよびページ・パラメータを理解している必要があります。

2.3.2 OmniPortlet

OmniPortletでは、ポートレット内で利用するデータ・ソースに関する基本的な知識が必要です。表2-2は、OmniPortletで使用できるデータ・ソースの種類と、それぞれを使用するために必要な情報の説明です。

表2-2 OmniPortletのデータ・ソース

データ・ソース

必要な情報

スプレッドシート

ポートレットに表示するデータが含まれたスプレッドシートを指すURL。

SQL

データ・ソースへの接続情報およびデータベースからデータを取得するSQL問合せ。

XML

XMLソースの位置、必要に応じてXSLフィルタおよびXMLスキーマのアドレス。

Webサービス

Web Services Description Language (WSDL) URL、Webサービスのメソッド、必要に応じてXSLフィルタのURLとXMLスキーマのURL。

Webページ

Webページ・データ・ソースは、Webクリッピングと同じ環境で使用されます。したがって、専門知識は不要です。

J2EE Connector Architecture

OmniPortletウィザードの「タイプ」ページには表示されませんが、J2EE Connector Architecture (JCA) 1.0アダプタも使用できます。JCAでは、ERPシステム(Oracle Financials、SAP、PeopleSoftなど)に保持されている企業データを格納および取得するためのメカニズムが提供されます。

2.3.3 Javaポートレット

Javaポートレットを構築するには、少なくともJ2EEのサブセットに関する知識が必要です。HTML、JavaサーブレットおよびXMLに関する知識が必須ですが、JSPの経験も役立ちます。実行するタスクによって、Javaに関するその他の知識が必要になる場合もあります。Javaポートレットを使用すると、(Java言語でサポートされている)すべてのデータ・ソースにアクセスできます。

2.3.4 ポートレット・ビルダー

ポートレット・ビルダーを使用する場合は、リレーショナル・データベースの概念をよく理解している必要があります。実現する内容によって、SQLおよびPL/SQLの知識が必要になる場合もあります。ポートレット・ビルダーを使用すると、データベース・リンクを使用して、ローカルの(Oracle Application Serverインフラストラクチャ)データベースまたはリモート・データベースからデータを消費できます。

2.3.5 PL/SQLポートレット

PL/SQLポートレットを構築するには、SQL文を作成し、SQL*PlusまたはOracleデータベースに接続できる同様の開発ツールを使用してPL/SQLプログラム・ユニットをコーディングおよびデバッグする方法を理解している必要があります。また、ポートレット・コンテンツを生成するために、HTMLおよびPL/SQL Webツールキットに関する知識も必要です。PL/SQL Server Pages (PSP)のコーディングの経験が必要な場合もあります。

2.4 デプロイ・タイプ

アプリケーションでポートレットを使用するには、先に、ポートレットをデプロイし、ポートレットをデプロイしたプロバイダを登録する必要があります。図2-1に示すとおり、ポートレットは、次の3つのプロバイダ・タイプでOracle Portalにデプロイできます。

- Webプロバイダ

- WSRPプロデューサ

- データベース・プロバイダ

Webプロバイダは、J2EEアプリケーション・サーバーにデプロイされます。このサーバーは多くの場合リモートで、HTTPを介したSimple Object Access Protocol(SOAP)を使用してOracle Portalと通信します。Oracle Portalの開発者プレビューでは、OASIS標準の1つであるWeb Services for Remote Portlets(WSRP)がサポートされます。データベース・プロバイダは、PL/SQLで実装され、Oracle PortalがインストールされているOracleデータベースにデプロイされます。

図2-1 ポートレット・プロバイダの概要

2.4.1 Webプロバイダ

Webプロバイダは、最も一般的に使用され、柔軟なタイプのプロバイダです。それらは、Oracle Portalと同じアプリケーション・サーバー、リモート・アプリケーション・サーバーまたはネットワーク上の任意の場所に存在できます(図2-2)。Webプロバイダは、事実上、どのWebテクノロジを使用しても実装できます。ただし、Oracle Portal Developer Kitでは、Webプロバイダの構築タスクを簡略化するJavaフレームワークが提供されます。

Webプロバイダは、デプロイ、定義およびOracle Portalとの通信に関し、XML、SOAP、HTTPまたはJ2EEなどのオープン標準を使用します。また、Webプロバイダは、J2EEコンテナへのデプロイが可能なため、Oracle Portalリポジトリ・データベースに余分な負荷がかかりません。

図2-2 Webプロバイダ

ポートレットを開発しWebプロバイダとして公開すると、様々な利点があります。次のタスクを実行できます。

- ポートレットをリモートでデプロイします。

- 既存のWebアプリケーション・コードを利用してポートレットを作成します。

- 宣言によってプロバイダを指定できます。

- 各データベース・プロバイダから提供されているのより多くの機能を利用できます。

- 標準のJavaテクノロジ(サーブレットやJSPなど)を使用してWebプロバイダのポートレットを開発できます。

Webプロバイダを使用してポートレットを公開するには、ポートレットを管理し、SOAPを使用してOracle Portalと通信できるプロバイダを作成する必要があります。Webプロバイダを使用してポートレットを公開する方法の詳細は、6.3項「Oracle JDeveloperを使用したJPS準拠のポートレットの構築」を参照してください。

2.4.2 WSRPプロデューサ

Web Services for Remote Portlets (WSRP)はWebサービスの標準です。この標準によって、ポータルまたは他の中間Webアプリケーションを使用する、ユーザー対象で視覚的なWebサービスのプラグ・アンド・プレイが可能になります。その標準性により、特定の言語(JSR 168、.NET、Perlなど)をベースとする標準対応のコンテナと任意のWSRPポータル間の相互運用が可能です。このため、WSRP対応のコンテナにデプロイされたポートレットは、その言語に関係なく、この標準をサポートするあらゆるポータル上にレンダリングできます。アーキテクチャの視点からみると、WSRPプロデューサは、Webプロバイダによく似ています。WSRPポータル・アーキテクチャの詳細は、「WSRPとJPSの関連」を参照してください。

ポートレットをWSRPプロデューサとして公開するには、ポートレットを管理するプロデューサを作成する必要があります。WSRPの詳細は、Oracle Technology NetworkでWSRPおよびJSR 168標準についてのページを参照してください。WSRPプロデューサとしてポートレットを公開する方法の詳細は、6.3.3項「Oracle WebLogic ServerへのJSR 168ポートレットのデプロイ」を参照してください。

デフォルトでは、Portalセッション・ストアはOracle Internet Directoryから入手したユーザーのプロファイル情報を、Portalセッションの期間中保持します。

ただし、場合によってはWSRPプロデューサが、プロデューサに送られてきたWSRP UserContext情報への更新を必要とすることがあります。この情報はセッション中に変わります。この場合、ターゲット・ページの生成時にキャッシュされたユーザー情報を消去して新しい情報をOracle Internet Directoryから入手するために、アプリケーションまたはポートレット・プロデューサはブラウザを次のURLにリダイレクトします。

http(s)://server.domain.com:port/portal/pls/portal/portal.wwsec_app_user_info.flush_cache?p_requested_url=<url-encoded-target-page>

2.4.3 データベース・プロバイダ

1つ以上のPL/SQLポートレットを所有するデータベース・プロバイダを作成することもできます。データベース・プロバイダとそのPL/SQLポートレットは、Oracle Metadata Repositoryデータベースに存在し、PL/SQLパッケージとして実装されます。リモート・サーバー上のデータベース・プロバイダにアクセスする場合は、連携されたPortalアダプタを使用できます(図2-3)。連携されたPortalアダプタの詳細は、『Oracle Fusion Middleware Oracle Portal管理者ガイド』を参照してください。

図2-3 データベース・プロバイダ

データベース・プロバイダは、PL/SQLを使用してデータ集約型の操作を実行する必要がある場合は理想的です。Oracle Portalのユーザー・インタフェース、またはPDKで提供されるPL/SQL APIを使用してフォームまたはチャートを構築している場合がその例です。

データベース・プロバイダを使用してポートレットを公開する方法の詳細は、8.13項「プログラムを使用したプロバイダの登録」を参照してください。

2.4.4 プロバイダ・アーキテクチャ

図2-4は、ポートレット・プロバイダの基本的なアーキテクチャを示しています。

図2-4 プロバイダ・アーキテクチャ

ユーザーがWebブラウザでポータル・ページを表示するとき、リクエストの流れは次のようになります。

1. ユーザーは、Webブラウザのアドレス・フィールドにURLを入力することで、Webブラウザからポータル・ページをリクエストします。

2. Parallel Page Engine (PPE)は、Oracle Application Serverの中間層に存在し、Oracle Portal RepositoryからPortalページ・レイアウト、ポートレットおよび(ページ・メタデータとも呼ばれる)プロバイダ情報を取得します。

注意:

PPEは、リクエストされたポータル・ページをページ・メタデータに基づいて構築する役割を果します。

3. PPEは、ポートレット・コンテンツのすべてのプロバイダを問い合せます。

4. プロバイダは、ポートレットがHTMLコードまたはXMLコード形式のポートレット・コンテンツを生成するように、それぞれのポートレットに対して必要なコールを実行します。

5. プロバイダは、ポートレット・コンテンツをPPEに戻します。

6. PPEはポータル・ページを組み立て、Oracle Application ServerはこのページをWebブラウザに戻します。

ポートレットおよびプロバイダのアーキテクチャについては、Portal Centerにある「Portlet Development」のページを参照してください。

http://portalcenter.oracle.com

Webクリッピング、OmniPortletおよびJavaポートレットは、Webプロバイダを介してOracle Portalと通信します。Oracle Portalをインストールした後は、WebクリッピングとOmniPortletを使用できます。それぞれのプロバイダは、最初からOracle Portalに登録済みです。Javaポートレットのプロバイダは、明示的に登録する必要があります。

注意:

WebクリッピングおよびOmniPortletの開発は、急速に進んでいます。これらのポートレットの最新バージョンは、OTNからダウンロードできます。これらのツールをダウンロードして使用する場合は、Oracle WebLogic Serverにデプロイし、WebプロバイダとしてOracle Portalに登録する必要があります。詳細は、『Oracle Fusion Middleware Oracle Portal管理者ガイド』を参照してください。

ポートレット・ビルダーで構築されたデータ駆動ポートレットは、データベース・プロバイダを介してOracle Portalと通信します。ポートレット・ビルダーのプロバイダは自動的に登録されるため、Oracle Portalに明示的に登録する必要はありません。

PL/SQLポートレットは、データベース・プロバイダを介してOracle Portalと通信します。データベース・プロバイダを明示的に登録する必要があります。

2.4.5 プロバイダ登録

Oracle Portalには、プロバイダ登録ウィザードが用意されています。このウィザードには、ナビゲータの「プロバイダ」タブからアクセスできます。登録画面には次のセクションがあります。

- プロバイダ情報: プロバイダ名、タイムアウトの詳細、実装スタイルが含まれています。

- ユーザー/セッション情報: プロバイダにセッション情報を転送する方法が含まれています。

- データベース・プロバイダ: 実装の所有者や名前などデータベース・プロバイダ固有の情報が含まれています。

- Webプロバイダ: プロバイダのURL、プロバイダに転送されたユーザーIDおよびプロキシ情報などWebプロバイダ固有の情報が含まれています。

- WSRPプロデューサ: WSDL URL、プロデューサにより提供されるセッション処理情報など、WSRPプロデューサ固有の情報が含まれています。

セッション処理に影響を与えるセクションは、「ユーザー/セッション情報」セクションとウィザードのWebプロバイダ登録ページの「Cookieドメイン」チェック・ボックスです。同じCookieドメインを使用することの詳細は、Portal Center(http://www.oracle.com/technology/products/ias/portal/portlet_development_10gr2.html)の「Portlet Development」ページにある記事、「Sharing Session Cookies Not Allowed in PDK-Java Release 2」を参照してください。

ユーザー/セッション情報

「ユーザー/セッション情報」セクションでは、開発者がプロバイダにOracle Portalから受信させるセッション関連情報に応じて、2つのオプションのうちいずれかを選択できます。2つのオプションは次のとおりです。

- パブリック: このオプションを選択すると、ユーザーの名前が「パブリック」に設定されます。プロバイダは、セッションIDやユーザーのログイン時刻などのセッション関連情報を受信しなくなります。このオプションは、プロバイダ登録API(8.13項「プログラムを使用したプロバイダの登録」を参照)のLOGIN_FREQUENCY_PUBLICと等価です。

- ユーザー: このオプションを選択すると、Oracle Portalユーザーの名前がプロバイダに送信されます。このセクションには次の2つのオプションがあります。

- ログイン頻度: ここでは、プロバイダにセッション情報を送る頻度、つまりユーザーがログインする必要のある頻度を決定する3つのオプション(常時、ユーザー・セッションごとに1回、なし)から、いずれかを選択できます。

- Portalユーザー固有のセッション情報が必要です。: プロバイダ・コールでセッション情報を送信するかどうかを指定できます。

2.5 キャッシュ・スタイル

キャッシュは、ポータルのパフォーマンスを向上させるための重要な役割を果します。Oracle Portalでは、ページ、ポートレット、スタイル、ページ・メタデータのキャッシュなど、様々なレベルのキャッシュがサポートされています。ポートレットのキャッシュは、正確な情報をタイムリな方法でユーザーに配信するために重要です。Oracle Portalで使用できるすべてのポートレット構築テクノロジで、キャッシュはサポートされています。

Oracle Portalでは、ユーザーによるページおよびポートレットのパーソナライズがサポートされているため、ページの表示はユーザーによって異なることがあります。Oracle Portalのキャッシュは、ユーザーごとに異なるコンテンツを使用できるように設計されています。したがって、ポートレットなどのポータル・オブジェクトは、ユーザー・レベルとシステム・レベルの2つのレベルでキャッシュできます。この2つのレベルのキャッシュについて説明します。

- ユーザー・レベルのキャッシュは、特定のユーザーを対象とします。格納されたキャッシュ・エントリは、そのユーザー固有のものであり、他のユーザーはアクセスできません。ユーザー・レベルのキャッシュに適したものとして、電子メールまたは株式チッカー・ポートレットなど、パーソナライズがサポートされたポートレットがあります。

- システム・レベルのキャッシュでは、複数のユーザーが1つのキャッシュ・エントリを共有できます。したがって、すべてのユーザーのオブジェクトのコピーをキャッシュする必要はありません。システム・レベルのキャッシュに適したコンテンツの例として、パーソナライズが不可能な新規ポートレットまたはカスタム構築されたナビゲーション・ポートレットがあります。

キャッシュを使用せずに、Webクリッピング、OmniPortletおよびポートレット・ビルダーで様々なデータ・ソースにアクセスすると、時間がかかる場合があります。キャッシュを有効にする場合は、Oracle PortalまたはOracle Web Cacheに対して、ポートレット・コンテンツのコピーを保持するように指示します。ポートレットがリクエストされ、そのコンテンツが以前にキャッシュされている場合、ポートレットは、データ・ソースへの問合せとそのコンテンツの再生成に時間を費やす必要がありません。以前にキャッシュされたポートレット・コンテンツが単に戻されます。キャッシュには次のタイプがあります。

- 有効期限ベースのキャッシュ: ポートレット・コンテンツが静的である場合、またはコンテンツの表示が最新であることが重要でない場合は、有効期限ベースのキャッシュを検討します。有効期限ベースのキャッシュを使用する場合は、キャッシュ期間を指定する必要があります。

- 有効化ベースのキャッシュ: 頻繁な変更または予測不可能な変更がある動的コンテンツを含むポートレットの場合、有効化ベースのキャッシュの使用を検討します。ポートレットは、コンテンツをキャッシュ・キーに関連付け、そのキーの値をコンテンツとともに戻します。ポートレット・コンテンツがリクエストされると、ポートレットは、キャッシュ・キーに基づいて、現在のコンテンツが有効かどうかを判断します。ポートレット・コンテンツが有効な場合は、キャッシュされたコンテンツを使用できる(つまり、コンテンツが有効である)ことを示すレスポンスを戻します。有効でない場合は、新しいポートレット・コンテンツを生成し、そのコンテンツの新しいキャッシュ・キーとともに戻します。

- 無効化ベースのキャッシュ: 無効化ベースのキャッシュは、最も複雑ですが、最も柔軟性のあるキャッシュ形式です。有効期限ベースのキャッシュの効率性と、キャッシュ・コンテンツを任意の時点で無効化する機能が必要な場合は、無効化ベースのキャッシュの使用を検討します。Oracle Web Cache内のオブジェクトは、明示的に無効化されるまで有効とみなされます。

2.5.1 Webクリッピング、OmniPortletおよびポートレット・ビルダー

Webクリッピング、OmniPortletおよびポートレット・ビルダーで構築されたポートレットには、ポートレットがキャッシュされる期間を指定できます(有効期限ベースのキャッシュ)。さらに、WebクリッピングおよびOmniPortletで構築されたポートレットは、エンド・ユーザーがポートレットをパーソナライズすると、自動的にリフレッシュされます。

2.5.2 Javaポートレット

Javaポートレットでは、有効期限ベース、有効化ベース、無効化ベースの3種類のキャッシュがサポートされています。Javaポートレットでは、無効化ベースのキャッシュを、有効期限ベースまたは有効化ベースのキャッシュのいずれかと組み合せることができます。

また、ポートレットのすべてのコンテンツをキャッシュすることに加えて、Edge Side Include (ESI)を使用してポートレットのフラグメントをキャッシュできます。

2.5.3 PL/SQLポートレット

Javaポートレットと同様に、PL/SQLポートレットでも、有効期限ベース、有効化ベース、無効化ベースの3種類のキャッシュがサポートされています。

2.6 開発ツール

ここでは、様々なタイプのポートレットの構築に使用できる開発ツールについて説明します。

2.6.1 Webクリッピング、OmniPortletおよびポートレット・ビルダー

OmniPortlet、Webクリッピングおよびポートレット・ビルダーでは、ブラウザ・ベースのウィザードを開発ツールとして使用します。

2.6.2 Javaポートレット

任意のJava開発環境を使用してJavaポートレットを作成できますが、プロフェッショナルな統合開発環境(IDE)であるOracle JDeveloperを使用することをお薦めします。他のIDEも検討できますが、PDKには、Javaポートレット・ウィザードを組み込むOracle JDeveloperプラグインが含まれているため、Javaポートレットの開発作業を最小限にできます。

Javaポートレット・ウィザードでは、JSR168とPDK-Javaの両方のポートレットに対する開始用のスケルトンおよびファイル構造が生成されます。スケルトンに追加する必要があるのは、独自のビジネス・ロジックのみです。また、Oracle JDeveloperを使用してアプリケーションをパッケージ化し、Oracle WebLogic ServerなどのJ2EEコンテナにデプロイできます。ポートレット・プロバイダのテストにも使用できます。デプロイする予定のプラットフォームのバージョンと一致する場合は、開発用Javaポートレット・ランタイム環境としてOracle JDeveloperに付属している、事前構成されたOracle WebLogic Serverを使用することをお薦めします。

2.6.3 PL/SQLポートレット

PL/SQLポートレットの開発時に、Oracle PortalのPL/SQL APIをコールすることで、Oracle PortalにアクセスするPL/SQLプログラム・ユニットを作成できます。このアクセスを可能にするには、Oracle Portalがインストールされているデータベースと同じデータベースにプロバイダのスキーマを作成して、プロバイダおよびポートレットPL/SQLパッケージを格納します。このプロバイダのスキーマには、Oracle PortalのPL/SQL APIに対する実行権限が付与されている必要があります。

データベース・プロバイダおよびPL/SQLポートレットの開発を容易にするために、PL/SQLジェネレータを使用できます。PL/SQLジェネレータは、データベース・プロバイダとそのPL/SQLポートレットに関するインストール可能なPL/SQLコードを作成する、ホスティング対象のユーティリティです。PL/SQLジェネレータは、プロバイダおよびポートレットの定義をXMLファイル形式で受信するWebアプリケーションです。プロバイダおよびポートレットで使用するXMLタグの構文は、PDK-JavaでWebプロバイダを定義するために使用するXMLタグのサブセットです。PL/SQLジェネレータは、SQL*Plusから実行できるSQLスクリプトを出力します。このスクリプトには、プロバイダおよびポートレットのパッケージをインストールするためのSQLコマンドが含まれています。

ホスティングされるPL/SQLジェネレータは、OTNの「Oracle Portal Developer Kit」ページで入手できます。

http://www.oracle.com/technology/products/ias/portal/pdk.html

2.7 ポートレット作成スタイル

Oracle Portalでは、図2-5に示すとおり、2種類のポートレット作成スタイルがサポートされています。

- その場で開発する

- 開発後に追加する

この図では、「開発後に追加する」ポートレットの作成は、通常、ポートレット開発者のタスクで、「その場で開発する」ポートレットの作成は、ページ設計者の責任であることを示しています。

図2-5 ポートレット作成スタイル

2.7.1 OmniPortletおよびWebクリッピング

OmniPortletとWebクリッピングはどちらも、その場で開発するポートレット作成スタイルを提供します。最初に、ポータル・ページにポートレットを追加し、次に、そのページのポートレットをその場で定義します。

2.7.2 Javaポートレット

通常、Javaポートレットは開発後に追加するポートレット作成スタイルを提供します。Oracle JDeveloperでは、Oracle PDK-JavaおよびJSR 168ポートレットの作成に役立つ2つのウィザードを使用できます。ウィザードは、ポートレットの作成に必要な基本ファイルを生成します。開発者は、ポートレットのロジックは手動でコーディングします。Javaポートレットの開発の流れは、ポートレットを作成し、プロバイダにポートレットをデプロイし、プロバイダをOracle Portalに登録して、ポートレットをページに追加するというものです。

注意:

広範囲のコーディングによって、その場で開発するJavaポートレットを作成できます。たとえば、WebクリッピングおよびOmniPortletは、ともにJavaポートレットです。

2.7.3 ポートレット・ビルダー

ポートレット・ビルダーでは、最初にポートレットを定義します。以前に定義されたポートレットをポートレット・リポジトリで使用できるため、それらのポートレットをページに追加できます。ただし、単純なポートレットの場合は、OmniPortletおよびWebクリッピングと同様に、ポートレット・ビルダーでもその場での開発が提供されます。

注意:

ポートレット・ビルダーのその場での開発テクノロジで構築されたポートレットは、ナビゲータを使用して構築されたポートレットに比べいくつか制限があります。

2.7.4 PL/SQLポートレット

Javaポートレットと同様に、PL/SQLポートレットでは通常、「開発後に追加する」作成方法に従います。PL/SQLポートレットをその場で開発するには、広範囲のコーディングが必要です。たとえば、ポートレット・ビルダーで提供されているその場で開発する単純なポートレットは、PL/SQLで作成されています。

2.8 ユーザー・インタフェースの柔軟性

この項では、ポートレット構築ツールをユーザー・インタフェースの制御の観点から説明します。

2.8.1 Webクリッピング

Webクリッピングでは、その本来の機能により、常にリモートWebサイトのコンテンツが表示されます。したがって、UIの柔軟性はこのポートレットの要件ではありません。

2.8.2 OmniPortlet

OmniPortletでは、スクロール・ニュース、表、チャートなど、いくつかの異なるビルトイン・レイアウトを使用できます。また、このビルトインのHTMLレイアウトを使用して、HTMLおよびJavaScriptを使用するポートレットのルック・アンド・フィールをパーソナライズすることもできます。

2.8.3 JavaポートレットおよびPL/SQLポートレット

JavaポートレットおよびPL/SQLポートレットでは、ポートレットのユーザー・インタフェースを完全に制御できます。ポートレットでは、Oracle Portalページのレンダリング・ルールに準拠しているHTMLコンテンツを自由に生成できます。

2.8.4 ポートレット・ビルダー

ポートレット・ビルダーによるポートレット構築は、生産性が非常に高い一方、ユーザー・インタフェースに関してはいくつかの制限があります。

2.9 Webサイトからコンテンツを取得する機能

この項では、ポートレット構築ツールを、他のソースからコンテンツを組み込む機能の観点から説明します。

2.9.1 Webクリッピング

リモートWebサイトのコンテンツをソースの位置で表示されているとおりに表示するポートレットの場合、使用する最適なツールはWebクリッピングです。Webクリッピングでは、ソースHTMLページの変更をある程度許容できます。クリップされた表がソース・ページ内のある場所から別の場所に移動した場合、Webクリッピング・エンジンは、内部の「ファジー・マッチ」アルゴリズムを使用してその表を再度検出できます。Webクリッピングで構築されたポートレットでは、リモートWebサイトへのセッションも管理できます。また、Webクリッピングでは、エンド・ユーザーによるHTMLフォーム値のパーソナライズがサポートされています。

2.9.2 OmniPortlet

リモートWebサイトのデータのみを使用してレイアウトを使用しないポートレットの場合、最善の選択はOmniPortletです。データを取得して処理し(書式設定、フィルタ処理など)、表、チャートまたはニュース形式でポートレットに表示するには、OmniPortletを使用します。OmniPortletは、WebページのデータをそのWebページのデータ・ソースを使用して抽出する強力なツールです。

2.9.3 Javaポートレット

Javaポートレットは、下位レベルのJavaネットワークAPIを利用して、リモートWebサイトからコンテンツを取得し、処理できます。不必要な開発作業を避けるために、WebクリッピングまたはOmniPortletが実用的な選択肢でないことを必ず確認してから、Javaを選択してください。

2.9.4 PL/SQLポートレット

PL/SQLポートレットでは、UTL_HTTPパッケージのプロシージャとファンクションを使用して、インターネット上のデータにアクセスするためにWebサービスと通信できます。このパッケージは、SQLおよびPL/SQLからHTTPコールアウトを実行します。また、このパッケージは、HTTPSとも呼ばれるSecure Sockets Layerプロトコル(SSL)上のHTTPを、直接またはHTTPプロキシを介してサポートします。他のインターネット関連のデータ・アクセス・プロトコル(ファイル転送プロトコル(FTP)やGopherなど)も、これらのプロトコルをサポートしているHTTPプロキシ・サーバーを使用することでサポートされます。

2.10 コンテンツをインラインでレンダリングする機能

ユーザーは、リンクまたはフォームのボタンなど、ポートレット内のアクティブ要素を使用してリモートURLにナビゲートできます。たとえば、ニュース・ポートレットでは、ハイパーリンクをクリックして、関心のあるニュースの詳細情報が表示されているニュース・サイトにナビゲートできます。たとえば、ユーザーがニュース・ポートレットのニュース・サマリー・リンクをクリックすると、そのページを離れて、ニュース・サイトに移動します。

リクエストされたコンテンツを同じポートレット・コンテナ内にレンダリングすることで、ユーザーをポータル・ページのコンテキスト内に留まらせることが必要な場合があります。たとえば、ユーザーがニュース・ポートレットのニュース・サマリー・リンクをクリックすると、ポートレットが詳細なニュース記事でリフレッシュされます。

2.10.1 Webクリッピング

Webクリッピング・ポートレットは、インライン・コンテンツ・レンダリングを実行するためのURLリライティングをサポートします。ソースWebサイトを起点とするリンクを処理し、それをリライトすることで目的に機能を実伝できます。

次の3つのオプションから選択できます。

- ポートレット内のURLをリライトしないように選択できます。この場合、リンクをクリックすると、ユーザーはPortalを離れ、クリッピングを提供しているWebサイトに移動します。リンク先が認証を必要とする場所の場合は常に、ユーザーがログイン情報を入力しないと、リンク先は表示されません。

- 「外部アプリケーション」にWebクリッピング・プロバイダを登録してクリッピングで認証を必須にする場合には、ポートレット内のすべてのURLをリライトして「サーバーにログイン」を指すようにWebクリッピングに指示できます。この場合、ナビゲーションを行うと、ユーザーがOracle Portalを離れる一方で、「サーバーにログイン」が使用されてブラウザに「外部アプリケーション」へのログイン画面が表示されます。

- インライン・レンダリングを選択すると、ポートレット内のすべてのURLがポータル・ページを指すようにリライトされ、Webクリッピング・ポートレット内でのブラウズはすべてOracle Portal内に留まります。「外部アプリケーション」にWebクリッピング・プロバイダを登録すると、Webクリッピング・プロバイダはその外部アプリケーションにログインさせられます。この場合、Webクリッピング・プロバイダを介したPortal内のナビゲーションが、この外部アプリケーションによって認証されます。

2.10.2 OmniPortlet

OmniPortletでは、URLリライティングは直接提供されませんが、パブリック・ポートレット・パラメータとイベントを使用することで、インライン・レンダリング機能を実現できます。イベントは、OmniPortletが存在しているポータル・ページにマップする必要があります。

2.10.3 Javaポートレット

Javaポートレット内のリンクとボタンは完全に制御できるため、インライン・レンダリング機能を簡単に実装できます。インライン・レンダリングを実現するには、ページのURLにプライベート・ポートレット・パラメータを追加する必要があります。

ポートレット内でStrutsを使用する場合、コンテンツは、PDK-Struts統合フレームワークによって常に同じポートレット・コンテナにレンダリングされます。

ポートレットが複数のJSPで構成される場合(サーベイ内またはウィザード内の複数のステップなど)、ポートレットでは特別なパラメータを使用して、コンテンツのレンダリングに使用するJSPを実行時に指定できます。

2.10.4 ポートレット・ビルダー

ポートレット・ビルダーで構築されたポートレットでは、固有のインライン・レンダリングはサポートされていません。ただし、SQLベースのレポートおよびチャート内にリンクを構築し、リンクが特定のポータル・ページを指すようにできます。必要に応じて、パラメータをポータル・ページに渡し、ポートレット・パラメータにマップすることもできます。

2.10.5 PL/SQLポートレット

Javaポートレットと同様に、PL/SQLポートレット内のアクティブ要素は完全に制御できます。したがって、プライベート・ポートレット・パラメータを実装することで、インライン・レンダリング機能をプログラムで実現できます。

2.11 チャート作成機能

この項では、ポートレット構築ツールをチャート作成機能の観点から説明します。

2.11.1 Webクリッピング

Webクリッピングは、既存のコンテンツをクリップします。したがって、チャートは作成しませんが、チャートを含むHTMLコンテンツを取得して表示できます。

2.11.2 OmniPortlet

OmniPortletは、棒、折れ線および円の各チャートをサポートします。OmniPortletのチャートは、動的に生成されるイメージで、ハイパーリンクを含むことができます。

2.11.3 Javaポートレット

Javaポートレットでは、Oracle Business Intelligence (BI) Beanを使用して、高度なチャート・ポートレットをプログラムで作成できます。

注意:

Oracle ReportsおよびOracle BI Discovererのポートレットでは、専門的なグラフを作成するためにBI Beanが使用されます。

2.11.4 ポートレット・ビルダー

ポートレット・ビルダーでは、HTMLベースの棒グラフ・ポートレットを構築できます。多数の機能の中で、バーの色と方向を指定できます。

2.11.5 PL/SQLポートレット

PL/SQLポートレットでは、広範囲のコーディングによってHTMLベースのチャート作成機能を実現できます。

2.12 パブリック・ポートレット・パラメータのサポート

Oracle Portalには、ページ・パラメータ、パブリック・ポートレット・パラメータおよびプライベート・ポートレット・パラメータの3種類があります。これらのパラメータは次のように説明できます。

- ページ・パラメータ: ページ・パラメータは、ページに値を渡すために使用します。ページ・パラメータを使用すると、ページがコールされた場所およびページを表示しているユーザーに応じて、ページに表示される情報を変更できます。また、ページ設計者は、ページ・パラメータを使用して複数のポートレットに同じ値を渡すことでページ上のポートレットを同期化できます。このように、ポートレットとページ・パラメータを組み合せることで、ページ上のポートレットを再利用および調整できる機能が提供されます。この機能がないと、異なるパラメータ値を使用するために、ポートレットを個別にコーディングすることが必要になります。

- パブリック・ポートレット・パラメータ: パブリック・ポートレット・パラメータは、ポートレットに値を渡すのに使用します。ポートレット・パラメータを使用すると、ポートレットに表示される情報を、特定のページまたは特定のユーザーに対して固有にできます。ポートレット・パラメータは、ポートレット開発者によって作成され、ユーザー・インタフェースを介してページ設計者に公開されます。ページ設計者は、ポートレットをページに追加した後、パブリック・ポートレット・パラメータに値を割り当てることで、ポートレットに表示される情報をそのページ固有にできます。
ページ設計者は、特定の値(定数)、システム変数(ポータル・ユーザー名など)またはページ・パラメータを指定することで、パブリック・ポートレット・パラメータに値を割り当てることができます。ポートレットは実行時に、指定されたソースから値を受信します。このように、ページ設計者は、パラメータのソースを完全に制御し、開発者は、ポートレットに送信したデータの使用方法を完全に制御できます。

- プライベート・ポートレット・パラメータ: プライベート・ポートレット・パラメータを使用すると、ポートレットに内部ナビゲーションを実装できます。ページがリクエストされるたびに、ポートレットにパラメータを渡すことができます。プライベート・ポートレット・パラメータは、同じポートレット・インスタンス内で排他的に渡すことができます。
プライベート・ポートレット・パラメータを使用するために、フル・ページをリフレッシュする必要はありません。ポータル・ページ全体をリフレッシュせずにポートレットのみをリフレッシュするリンクを、ポートレット内に作成できます。これにより、影響を受けるポートレットのコンテンツのみが更新され、ページ内のそれ以外の部分は更新されません。これをプログラム的に設定する方法の詳細は、第7章「Javaポートレットの拡張」の「ページの部分的なリフレッシュ」を参照してください。

パブリック・ポートレット・パラメータがサポートされているポートレットを使用すると、ページ設計者は、ポートレット・インスタンスごとにポートレットのデータ入力を調整できます。この場合、ポートレット開発者は、ポートレット・ロジックに集中でき、ページ設計者は、ポートレットを簡単に再利用してページとポートレット間の相互作用を処理できます。

この章で説明した5つのポートレット構築テクノロジ(OmniPortlet、Webクリッピング、Javaポートレット、ポートレット・ビルダーおよびPL/SQLポートレット)のすべてが、パブリック・ポートレット・パラメータをサポートしています。OmniPortlet、Webクリッピングおよびポートレット・ビルダーでは、ウィザード・インタフェースを介して完全なサポートが提供されます。Javaポートレットに対しては、プログラムまたはJavaポートレット・ウィザードを使用してパブリック・ポートレット・パラメータのサポートを追加できます。PL/SQLポートレットでは、プログラムでのみパブリック・パラメータがサポートされます。

注意:

JSR 168標準では、パブリック・ポートレット・パラメータの概念は提供されません。Javaポートレットでパブリック・ポートレット・パラメータを利用する場合は、PDK-Javaを使用する必要があります。

2.13 プライベート・ポートレット・パラメータのサポート

この項では、ポートレット構築ツールをプライベート・パラメータのサポートの観点から説明します。

2.13.1 OmniPortlet、Webクリッピングおよびポートレット・ビルダー

OmniPortlet、Webクリッピングおよびポートレット・ビルダーでは、ポートレット開発者に対しプライベート・ポートレット・パラメータへのアクセスが提供されません。

2.13.2 JavaポートレットおよびPL/SQLポートレット

JavaポートレットおよびPL/SQLポートレットでは、プライベート・ポートレット・パラメータを使用して内部ナビゲーションを実装できます。

注意:

PL/SQLポートレットでは、プライベート・パラメータとパブリック・パラメータを同時にサポートできません。PL/SQLポートレットのコーディング前に、どちらのパラメータ・タイプをサポートするかを決定する必要があります。

2.14 イベントのサポート

イベントとは、ポータル・ページを表示するように定義したユーザー・アクションです。ユーザー・アクションには、ポートレット内のリンクまたはボタンに対するクリックが含まれます。ページ設計者は、ページ上のポートレットでイベントが発生したときに実行する内容を指定します。イベントの発生時、ページ設計者は、現在のページを再表示したり、必要に応じてそのページのパラメータに値を渡して、ユーザーを別のポータル・ページにナビゲートすることもできます。

2.14.1 Webクリッピング、OmniPortletおよびJavaポートレット

Webクリッピング、OmniPortletおよびJavaポートレットでは、イベントがサポートされています。

2.14.2 ポートレット・ビルダーおよびPL/SQLポートレット

ポートレット・ビルダーおよびPL/SQLポートレットでは、イベントはサポートされていません。

2.15 ユーザー権限に基づいてポートレットの表示/非表示を切り替える機能

この項では、ポートレット構築ツールを認証機能のサポートの観点から説明します。

2.15.1 WebクリッピングおよびOmniPortlet

WebクリッピングおよびOmniPortletを使用してポータル・ページ上に構築されたポートレットは、セキュリティ・マネージャを使用して表示/非表示を動的に切り替えることができます。WebクリッピングおよびOmniPortletでは、セキュリティ・マネージャはユーザー・インタフェースを介して公開されませんが、XMLプロバイダの定義ファイルを編集することで適用できます。

2.15.2 Javaポートレット

PDKでは、Javaポートレットに対するセキュリティ・マネージャがいくつか提供されています。次に例を2つ示します。

- グループ・セキュリティ・マネージャ: グループ・セキュリティ・マネージャを使用すると、特定のグループのメンバーであるユーザーにポートレットは表示されますが、メンバーでないユーザーには表示されません。

- 認証レベル・セキュリティ・マネージャ: 認証レベル・セキュリティ・マネージャを使用すると、ユーザーの認証レベルに基づいてポートレットへのアクセスを制御できます。たとえば、ポートレットを、パブリック・ユーザーに対して非表示にし、認証されたユーザーに対して表示します。

JSR 168ポートレットでは、標準のサーブレット・メカニズムがサポートされています。

2.15.3 ポートレット・ビルダー

ポートレット・ビルダーでは、ポートレットへのアクセスを制御する宣言型ユーザー・インタフェースが提供されます。

2.15.4 PL/SQLポートレット

PDKには、PL/SQLポートレット内のコンテンツの表示/非表示を切り替える機能を実装するセキュリティAPIが用意されています。

2.16 多言語サポート

この項では、ポートレット構築ツールを他の言語に対するサポートの観点から説明します。

2.16.1 Webクリッピング、OmniPortlet、JavaポートレットおよびPL/SQLポートレット

Webクリッピング、OmniPortlet、JavaポートレットおよびPL/SQLポートレットでは、ポータル・ユーザーが選択した言語でテキスト情報が表示されます。

2.16.2 ポートレット・ビルダー

ポートレット・ビルダーで構築されたポートレットでは、英語のみがサポートされています。

2.17 ページ区切りサポート

比較的大きい規模のレコード・セットをポートレットに表示する必要がある場合は、ページ区切りサポートを使用すると便利です。

2.17.1 Webクリッピング

ページ区切りサポートは、Webクリッピングには適用されません。

2.17.2 OmniPortlet

OmniPortletでは、ページ区切りはサポートされていません。

2.17.3 JavaポートレットおよびPL/SQLポートレット

JavaポートレットおよびPL/SQLポートレットでは、ページ区切りをプログラムで実装できます。

2.17.4 ポートレット・ビルダー

ポートレット・ビルダーには、ページ区切りの組込みサポートがあります。

2.18 シングル・サインオンおよび外部アプリケーション統合

この項では、ポートレット構築ツールを外部アプリケーションに対する認証の観点から説明します。

2.18.1 Webクリッピング

Webクリッピングの外部アプリケーション・フレームワークとの統合では、外部Webサイトへのパスワードの保存を完全に自動化するメカニズムが提供されます。実行する必要があるのは、プロバイダ登録時に外部アプリケーションIDをWebクリッピング・プロバイダに関連付ける操作のみです。

2.18.2 OmniPortlet

OmniPortletでは、データ・ソースがパスワードで保護されている場合、接続情報を保存できます。データ・ソースへのアクセスに対する接続情報は、すべてのユーザーで共有するか、またはユーザーごとに保存できます。OmniPortletでは、データベース接続情報に加え、HTTP Basic認証に使用するユーザー名とパスワードのペアも格納できます。接続情報は、OracleデータベースにあるOmniPortletの保護データ・リポジトリに格納されます。

2.18.3 Javaポートレット

Javaポートレットは、Oracle Internet DirectoryなどのLDAPサーバーに加え、外部アプリケーション・フレームワークともプログラムで統合できます。

2.18.4 PL/SQLポートレット

Oracle HTTP Server上の認証モジュールであるmod_ossoを使用して、シングル・サインオンを可能にするPL/SQLポートレットを構築できます。mod_ossoは、パートナ・アプリケーションを統合するために初期のリリースで使用されていたSingle Sign-On SDKの単純な代替モジュールです。mod_ossoを使用すると、Single Sign-On Serverへの単一のパートナ・アプリケーションとして機能することで、認証処理が簡素化されます。

PL/SQLポートレットは、外部アプリケーション・フレームワークとプログラムで統合できます。

第II部

ポートレットの作成

第II部の内容は次のとおりです。

- 第3章「OmniPortletを使用したポートレットの作成」

- 第4章「OmniPortletを使用したポートレットの構築例」

- 第5章「Webクリッピングを使用したコンテンツ・ベースのポートレットの作成」

- 第6章「Javaポートレットの作成」

- 第7章「Javaポートレットの拡張」

- 第8章「PL/SQLポートレットの作成」

3 OmniPortletを使用したポートレットの作成

この章では、OmniPortletの概要、およびOmniPortletに関連付けられたユーザー・インタフェース要素について説明します。この章の内容は、次のとおりです。

- 3.1項「OmniPortletの概要」

- 3.2項「OmniPortletウィザード」

- 3.3項「パラメータとイベント」

OmniPortletを使用したポートレットの構築例の詳細は、第4章「OmniPortletを使用したポートレットの構築例」を参照してください。OmniPortletに関するトラブルシューティング情報は、B.3項「OmniPortletの問題」を参照してください。Oracle PortalでのOmniPortletの登録および構成の詳細は、『Oracle Fusion Middleware Oracle Portal管理者ガイド』を参照してください。

3.1 OmniPortletの概要

OmniPortletは、Oracle Portalのサブコンポーネントです。これにより、ページ設計者や開発者は、コードを作成しなくても、様々なレイアウトを使用して異なるデータ・ソースのデータを簡単に公開できます。OmniPortletでは、スプレッドシート(値間を特定文字で区切ったもの)やXML、さらに既存のWebページのアプリケーション・データなど、あらゆる種類のデータ・ソースを使用できます。

注意:

様々な種類のポートレットを開発する方法は、第1章「ポートレットの理解」を参照してください。プロバイダと他のポートレット・テクノロジの詳細は、第2章「ポートレット・テクノロジのマトリックス」を参照してください。

OmniPortletを使用すると、ページ設計者やコンテンツ作成者は次の操作を実行できます。

- 複数ソース(CSV、XML、SQLなど)のデータの表示

- 表示するデータのソート

- 多様なレイアウト(箇条書きリスト、チャート、HTMLなど)を使用したデータの書式設定

- ポートレット・パラメータの使用

- ポートレット・イベントの起動

- ページ・ビューアへのパーソナライズ可能な設定の公開

パーソナライズされたデータを表示する場合は、データ・ソースから戻された結果をフィルタリングして、取得したデータを絞り込み、保護されたデータのアクセスに使用する資格証明情報をパラメータ化できます。複雑な設定が不要なOmniPortletには、表、チャート、HTML、ニュース、箇条書きリストおよびフォームなど、最も一般的なポートレット用のレイアウトが用意されています。

注意:

Windows 2000でOmniPortlet、シンプル・パラメータ・フォーム、Webクリッピング・ポートレットを使用するには、Netscape 7.0以上またはMicrosoft Internet Explorer 5.5以上を使用する必要があります。

他のポートレットを追加するのと同じように、OmniPortletをポータル・ページに追加できます。OmniPortletは、ポートレット・リポジトリのポートレット・ビルダーの下にあります。たとえば、OmniPortletをOracle Portal Developer Kitの一部としてダウンロードしてあり、それ以降のリリースにアップグレードする場合、使用する前に登録する必要があります。

ポータル・ページの作成とポートレットの追加の詳細は、『Oracle Fusion Middleware Oracle Portalユーザーズ・ガイド』を参照してください。

OmniPortletプロバイダのインストール、構成および登録に関する指示は、PDK-JavaおよびPortalツールが格納されているpdksoftware.zipファイルに用意されています。OmniPortletの構成の詳細は、『Oracle Fusion Middleware Oracle Portal管理者ガイド』を参照してください。

3.2 OmniPortletウィザード

OmniPortletウィザードには、最初に5つのステップが表示されます。OmniPortletを初めて定義するときは、データ・ソース・タイプ、データ・ソース・オプション、フィルタ・オプション、表示オプションおよびレイアウトを設定します。ウィザードのこれらの設定ステップを終えた後にウィザードを再開する場合は、ポートレットの「デフォルトの編集」をクリックします。ウィザードの再開時には、「ソース」、「フィルタ」、「表示」および「レイアウト」の各タブで定義を変更でき、「イベント」タブでイベント・パラメータを設定できます。

注意:

IBM Linux on POWERプラットフォームでは、OmniPortletの定義の際、アクション・ボタン(「次へ」、「前へ」、「終了」および「取消」)が点の状態に最小化されている場合、スタック・サイズ・シェル制限を無制限にし、WLS_PORTALインスタンスを再開してください。次のコマンドを実行して、スタック・サイズ・シェル制限を無制限に設定します。

prompt> ulimit -s unlimited

この項では、6つのタブの概要(表3-1を参照)を示します。各タブのオプションの詳細はオンライン・ヘルプでも参照できます。オンライン・ヘルプは、製品内の「ヘルプ」リンクをクリックするとアクセスできます。

表3-1 OmniPortletウィザードとデフォルトの編集

ステップ/タブ

説明

タイプ

データ・ソース・オプションを提供します。ポートレットの初期定義でのみ表示されます。ポートレットのデフォルトの編集時には表示されません。

ソース

使用するWebサービスのURLなど、選択したデータ・ソースのオプションを提供します。これらのオプションは、ポートレットのデフォルトの編集時にも変更できます。

フィルタ

結果の絞り込みを可能にするOracle Portalレベルのソート・オプションを提供します。これらのオプションは、ポートレットのデフォルトの編集時にも変更できます。

表示

ポートレットのヘッダーとフッターのテキスト、レイアウト・スタイルおよびキャッシュを表示するオプションを提供します。これらのオプションは、ポートレットのデフォルトの編集時にも変更できます。

レイアウト

レイアウトをカスタマイズするための詳細オプションを提供します。これらのオプションは、ポートレットのデフォルトの編集時にも変更できます。

イベント

ポートレットの初期定義では表示されません。イベントをポートレットに追加するためのオプションを提供します。表示されるのは、ポートレットがウィザードのデフォルト編集モードで定義された場合のみです。

3.2.1 タイプ

OmniPortletを初めて起動すると「タイプ」ステップが表示され、そのステップでデータ・ソースを選択できます(図3-1)。複雑な設定が不要なOmniPortletは、表3-2に示すデータ・ソースをサポートしています。

図3-1 OmniPortletウィザードの「タイプ」タブ

注意:

追加のデータ・ソースをダウンロードしてインストールすると、そのデータ・ソースが「タイプ」タブに表示されます。

表3-2 サポートされるデータ・ソース・タイプ

データ・ソース・タイプ

説明

スプレッドシート

特定文字で区切られた複数値(CSV)を含むテキスト・ファイルのデータを表示します。

SQL

SQLを使用したデータベースのデータを表示します。

XML

XMLファイルのデータを表示します。

Webサービス

標準のプロトコルを使用してインターネット上でアクセスできる個々のビジネス・サービスのデータを表示します。

Webページ

既存のWebコンテンツに基づくデータを表示します。

J2EE Connector Architecture*

(サンプル・プロバイダがOracle Portalに登録されている場合にのみ表示されます。)J2EE Connector Architecture (JCA) 1.0アダプタも使用できます。JCAでは、ERPシステム(Oracle Financials、SAP、PeopleSoftなど)に保持されている企業データを格納および取得するためのメカニズムが提供されます。

OmniPortletウィザードを実行してポートレットのデフォルトを編集すると、データ・ソース・タイプが変更できなくなります。

3.2.2 ソース

データ・ソース・タイプを選択すると、OmniPortletウィザードの「ソース」ステップが表示されます。このステップは、選択したデータ・ソースに対応しているため、そのデータ・ソースが提供するオプションを指定できます。「ソース」タブ内には、「プロキシ認証」セクション(認証を必要とするプロキシ・サーバーを使用するようにOmniPortletプロバイダが構成されている場合)と「接続」セクションが表示されます。「接続」セクションでは、データ・ソースへの接続に必要な情報を入力できます。

この項では、「ソース」タブにある次の2つの一般的な領域について説明します。

- 3.2.2.1項「プロキシ認証」

- 3.2.2.2項「接続情報」

また、「ソース」タブ内のデータ・ソース固有部分についても、この項の後半で説明します。使用可能なデータ・ソースは次のとおりです。

- 3.2.2.3項「スプレッドシート」

- 3.2.2.4項「SQL」

- 3.2.2.5項「XML」

- 3.2.2.6項「Webサービス」

- 3.2.2.7項「Webページ」

注意:

「ソース」タブのオプションの詳細は、ページの右上隅にある「ヘルプ」をクリックしてください。

3.2.2.1 プロキシ認証

OmniPortletは、グローバルなプロキシ認証やユーザーごとの認証などのプロキシ認証をサポートします。すべてのユーザーが指定されたユーザー名とパスワードで自動的にログインするか、各ユーザーが個別のユーザー名とパスワードでログインするか、またはすべてのユーザーが指定されたユーザー名とパスワードでログインするかを指定できます。ログインを必要とするプロキシ認証を使用するようにOmniPortletプロバイダが設定されている場合は、「ソース」タブに「プロキシ認証」セクションが表示され、プロキシ認証情報を入力できます。

「プロキシ認証」セクションは、アクセスにプロキシ・サーバーを使用する必要があるデータ・ソース、すなわちCSV(複数値を特定文字で区切ったもの)、XML、WebサービスおよびWebページについてのみ表示されます。プロキシ認証を使用するためのOmniPortletプロバイダの構成方法は、「プロバイダの編集: OmniPortletプロバイダ」ページの「ヘルプ」をクリックすると表示されるオンライン・ヘルプ・トピックを参照してください。OmniPortletプロバイダが「すべてのユーザーにログインを要求」に構成されている場合は、ユーザーはそれぞれ独自のログイン情報を設定する必要があります。ページ設計者の場合は、この設定を「デフォルトの編集: ソース」タブで行います。ページ閲覧者の場合は、この設定を「パーソナライズ」スクリーンで行います。

OmniPortletの構成の詳細は、『Oracle Fusion Middleware Oracle Portal管理者ガイド』も参照してください。

注意:

Webページ・データ・ソースを使用している場合、「ソース」タブで「Webページの選択」ボタンをクリックすると、Webクリッピング・スタジオに「プロキシ認証」セクションが表示されます。

3.2.2.2 接続情報

Webページ・データ・ソース以外のデータ・ソースごとに、「ソース」ステップでは「接続」セクションが表示され、ここで保護データにアクセスするための接続情報を定義できます。「ソース」ステップでは、すべてのデータ・ソースに対して「ポートレット・パラメータ」セクションが表示され、ここでポートレットのパラメータを定義できます(図3-2)。ポートレット・パラメータはページ・レベルのパラメータにマップできます。

注意:

「ユーザー名」、「パスワード」または「接続文字列」でパラメータを使用すると、パラメータ値が置き換えられた際に接続情報が正しい場合でも、「テスト」ボタンによってエラーが返されます。

図3-2 「ソース」タブ: 「接続」セクションと「ポートレット・パラメータ」セクション

接続情報を編集するには、「接続の編集」ボタンをクリックし、図3-3に示すページに情報を入力します。このページでは、接続情報の名前のみでなく、ユーザー名やパスワードも入力できます。SQLデータ・ソースの場合、データ・ソースへの接続に使用するドライバを指定するための詳細情報を入力できます。詳細は、3.2.2.4項「SQL」を参照してください。

図3-3 「接続の編集」ページ

注意:

「接続」セクションおよび「接続の編集」ボタンの詳細は、OmniPortletウィザードの「ソース」タブの「ヘルプ」をクリックしてください。

3.2.2.3 スプレッドシート

スプレッドシートは、小規模なデータセットを格納するための一般的な方法です。OmniPortletでは、特定文字で区切られた複数値(CSV)をデータ・ソースとしてサポートすることで複数のスプレッドシートの共有を可能にします。「ソース」タブでは、CSVファイルの位置を指定します(図3-4)。保護されたサーバー上にそのファイルがある場合は、図3-2の「接続」セクションで接続情報を指定できます。Oracle Portalによるファイルの読取り時に使用する文字セットのみでなく、デリミタやテキスト修飾子も選択できます。

OmniPortletプロバイダはOracle Portalアプリケーションとは異なる層に存在し、実行されるので、Oracle Portalのセッション情報にアクセスできません。そのため、OmniPortletでセッション情報にアクセスするためには、Oracle PortalにアップロードされるCSVファイルをPUBLICとして公開する必要があります。

注意:

CSVデータ・ソースの使用方法は、4.3項「スプレッドシート(CSV)に基づくOmniPortletの構築」を参照してください。

図3-4 「ソース」タブ: スプレッドシート

3.2.2.4 SQL

データを格納する最も一般的な場所は、リレーショナル・データベースです。OmniPortletでは、標準のJDBCドライバを使用できるため、複雑な設定なしでOracleデータベースや任意のJDBCデータベースにアクセスできます。ドライバのタイプは、接続情報の構成時に指定できます。図3-5にSQLデータ・ソースの「ソース」タブを示します。

図3-5 「ソース」タブ: SQL

3.2.2.4.1 SQL接続情報

DataDirect JDBCドライバを使用して他のリレーショナル・データベースにアクセスできます。これらのドライバを使用するようにOmniPortletを構成する方法は、『Oracle Fusion Middleware Oracle Portal管理者ガイド』を参照してください。

ドライバをインストールすると、図3-6に示すように、「ソース」タブの「接続」ダイアログ・ボックスの「ドライバ名」リストに、インストールしたドライバがリストされます。

図3-6 「SQLソース」タブの接続情報

注意:

DataDirectドライバの詳細は、『Oracle Fusion MiddlewareとDataDirect JDBCの動作保証マトリックス』(http://www.oracle.com/technology/products/index.html)を参照してください。

DataDirectドライバのいずれかを使用するときは、hostname:portという一意の接続文字列フォーマットを使用する必要があります。ここで、hostnameはデータベースが実行されているサーバーの名前で、portはデータベースのリスニング・ポートです。例を図3-7に示します。

図3-7 DataDirectドライバを使用した場合の「接続の編集」ページ

3.2.2.4.2 ストアド・プロシージャの使用

SQL文のかわりにストアド・プロシージャをコールすることによっても、データにビジネス・ロジックを追加できます。また、データベース内にパッケージとストアド・プロシージャを作成でき、そのストアド・プロシージャをOmniPortletから参照できます。

たとえば、SCOTTサンプル・スキーマを使用して次のように実行できます。

1. パッケージを作成し、ref cursorを宣言します。

create or replace package emp_pack istype empcurr is ref cursor;end;

2. ストアド・プロシージャを定義します。たとえば、次のプロシージャはパラメータとしてJOBを受け入れ、ref cursorを返します。ここで、JOBはscott.Emp表の列で、その値にはCLERK、MANAGERなどがあります。

create or replace procedure emp_proc(eset OUT emp_pack.empcurr,
jname IN VARCHAR2)
is
sql_statement varchar2(200);
begin
sql_statement := 'select empno,ename,hiredate
from emp
where job = '''||jname||'''
order by EMPNO,hiredate';
open eset for sql_statement;
end;

3. ステップ1と2のPL/SQL文をSQLファイル(たとえば、proc.sql)に追加し、それをディレクトリに保存します。

4. 次のコマンドを使用して、データベースに接続します。

sqlplus userid/password@Connection_String

userid、password、Connection_Stringを、データベースへの接続情報と置き換えます。接続文字列については、ORACLE_INSTANCE\configディレクトリ内のtnsnames.oraファイルを参照してください。

5. プロシージャを実行します。

@proc

6. 最後に、SQLデータ・ソースに基づいてOmniPortletを作成し、適切なデータベース接続情報を入力します。「SQL文」ボックスで、次のコードを入力します。

call emp_proc('CLERK')

3.2.2.5 XML

XMLデータ・ソースには、イントラネットまたはインターネット経由でアクセスできます。「ソース」タブでは、使用するデータを格納するXMLファイルのURLを図3-8に示すように指定できます。

注意:

XMLデータ・ソースの使用方法は、4.4項「XMLデータ・ソースに基づくOmniPortletの構築」を参照してください。

図3-8 「ソース」タブ: XML

「XML URL」および「XSLフィルタのURL」フィールドの横にあるのが「テスト」ボタンです。XMLデータ・ソースおよびXSLフィルタを検証するのに使用できます。

指定したXMLファイルは表(ROWSET/ROW)構造でかまいません。あるいはXMLスタイル・シート(XSL)を用意してデータをROWSET/ROW構造に変換できます。次の図は、XMLデータ・ソースのROWSET/ROW構造の例を示しています。

<TEAM>
<EMPLOYEE>
<DEPTNO>10</DEPTNO>
<ENAME>KING</ENAME>
<JOB>PRESIDENT</JOB>
<SAL>5000</SAL>
</EMPLOYEE>
<DEPTNO>20</DEPTNO>
<ENAME>SCOTT</ENAME>
<JOB>ANALYST</JOB>
<SAL>3000</SAL>
<EMPLOYEE>
</TEAM>

この例では、<TEAM>タグが行セットを表し、<EMPLOYEE>タグが行を表しています。

OmniPortletは、XMLファイルの形式に関係なく、自動的にXMLを確認して列名を決定します。この列名は後でレイアウトの定義に使用されます。この情報を自分で指定する場合は、データを記述するXMLスキーマへのURLを指定できます。

XMLファイルがHTTP Basic認証で保護されている保護サーバー上にある場合は、他のデータ・ソースと同様に、このデータ・ソースの接続情報も指定できます。

注意:

OmniPortletプロバイダはOracle Portalとは異なる層に存在し、実行されるのでOracle Portalのセッション情報にアクセスできません。そのため、OmniPortletでセッション情報にアクセスするためには、Oracle PortalにアップロードされるXMLファイルをPUBLICとして公開する必要があります。

3.2.2.6 Webサービス

Webサービスは、SOAPやHTTPなどの標準プロトコルを使用してインターネット上でプログラムを使用してアクセスできる個別のビジネス・サービスです。Webサービスはプラットフォームや言語にとらわれないサービスで、通常、Webサービス・ブローカに登録されています。使用するWebサービスを検索するには、Webサービスを記述し、コール可能なメソッド、必要なパラメータおよび戻されたデータの記述などを指定するWebサービス記述言語(WSDL)ファイルへのURLを取得する必要があります。

OmniPortletは、ドキュメントとRPC(リモート・プロシージャ・コール)の2つのタイプのWebサービスをサポートしています。指定したWSDLドキュメント/ファイルは解析され、コールできる使用可能なメソッドが「ソース」タブに表示されます。

XMLデータ・ソースと同様に、OmniPortletではROWSET/ROW形式のWebサービス・データが必要です。ただし、データは、XSLファイルを使用して変換することもできます。OmniPortletは、WSDLドキュメント/ファイルを確認して列名を決定します。ただし、XMLスキーマを指定して、戻されたデータ・セットを記述することもできます。

図3-9にWebサービスの「ソース」タブを示します。

注意:

Webサービス・データ・ソースの使用方法は、4.2項「Webサービスに基づくOmniPortletの構築」を参照してください。

図3-9 「ソース」タブ: Webサービス

3.2.2.7 Webページ

OmniPortletでは、既存のWebコンテンツをデータのソースとして使用し、情報をポータルに公開できます。クリップされたWebコンテンツはデータ・ソースとして提供され、レンダリングされます。

Webページ・データ・ソースでは、スクレイプ機能を組み込むために、Webクリッピング・ポートレットが提供する範囲が拡張されます。次の機能もサポートしています。

- 様々なログイン・メカニズムを介したナビゲーション。これには、フォーム・ベースとJavaScriptベースの送信、およびCookieベースのセッション管理を使用したHTTPのBasic認証とDigest認証が含まれます。

- クリッピングのファジー・マッチング。ソース・ページ内部でWebクリッピングの順序が変更されたり、文字のフォント、サイズまたはスタイルが変更された場合でも、Webページ・データ・ソースでは正確に識別され、ポートレット・コンテンツとして配信されます。

- 広範囲なWebコンテンツの再利用。これには、HTTPのGETとPOST(フォーム送信)を使用して取得された、HTML 4.0.1やJavaScriptで作成されたページの基本サポートが含まれます。

すべてのWebクリッピング定義は、Oracle Fusion Middlewareインフラストラクチャ・データベースまたは別のOracleデータベースに永続的に格納されます。パスワードなどの保護情報は、Oracle Databaseの暗号化テクノロジを使用し、Data Encryption Standard (DES)に基づいて暗号化されたフォームで格納されます。

OmniPortletウィザードの「ソース」タブ(図3-10)では、「Webページの選択」ボタンをクリックしてWebクリッピング・スタジオを起動できます。Webクリッピング・スタジオが起動すると、Oracle Fusion Middleware Web Clippingのオンライン・ヘルプを参照できます。

注意:

Webページ・データ・ソースの使用方法は、4.5項「Webページ・データ・ソースに基づくOmniPortletの構築」を参照してください。

図3-10 「ソース」タブ: Webページ

3.2.3 フィルタ

データ・ソースを選択し、データ・ソース・オプションを指定した後は、OmniPortletのフィルタリング・オプションを使用してデータをさらに絞り込むことができます。フィルタリングを効率的に使用するには、「ソース」タブのデータ・ソース・レベルで可能なかぎりデータを絞り込んでから、「フィルタ」タブのオプションを使用してデータを簡素化することをお薦めします。たとえば、SQLデータ・ソースを使用している場合は、WHERE句を使用して指定の列から特定のデータのみを戻すことができます。この場合は、「フィルタ」タブをスキップして、ウィザードの「表示」ページに進むことができます。ただし、データ・ソース・レベルにフィルタリング・オプションがない場合は、「フィルタ」タブのオプションを使用してデータをソートできます(図3-11)。

図3-11 「フィルタ」タブ

3.2.4 表示

データの指定とソートが完了すると、OmniPortletに対して表示オプションとレイアウトを選択できます。「表示」タブ(図3-12)ではヘッダーとフッターのテキストを追加し、「レイアウト」タブで後で調整できるレイアウト・スタイルを選択し、キャッシュを有効にできます。次のレイアウトから選択できます。

- 表

- チャート

- ニュース

- 箇条書き

- フォーム

- HTML

図3-12 「表示」タブ

注意:

OmniPortletで使用できる様々なレイアウト・スタイルの詳細は、次の項を参照するかまたはOmniPortletウィザードのページの右上隅にある「ヘルプ」をクリックしてください。

3.2.5 レイアウト

「レイアウト」タブは、「表示」タブで選択したレイアウト・スタイルによって変わります。このタブでは、ポートレットの外観をさらにパーソナライズできます。たとえば、OmniPortletはチャート・レイアウトのドリルダウン・ハイパーリンクをサポートしています。つまり、ユーザーがチャートの特定部分をクリックすると操作(別のURLへのジャンプなど)が実行されるように、チャートを設定できます。

他のレイアウト・スタイルの場合は、それぞれの列が特定の形式(プレーン・テキスト、HTML、イメージ、ボタンまたはフィールドなど)で表示されるように定義できます。たとえば、イメージへのURLを含むデータ・ソースを選択したとします。このイメージを表示するには、この列の表示に対して「イメージ」を選択できます。それぞれの列も、チャートのハイパーリンクの動作と同じように、操作にマップできます。

OmniPortletで使用できるレイアウト・スタイルは、次のとおりです。

- 3.2.5.1項「表レイアウト」

- 3.2.5.2項「チャート・レイアウト」

- 3.2.5.3項「ニュース・レイアウト」

- 3.2.5.4項「箇条書きレイアウト」

- 3.2.5.5項「フォーム・レイアウト」

- 3.2.5.6項「HTMLレイアウト」

3.2.5.1 表レイアウト

「表示」タブで選択した表スタイルは、「レイアウト」タブで調整できます(図3-13)。通常、データの1つ以上の列を表に表示する場合は、表レイアウトを使用します。「プレーン」を選択すると、表のすべての行が背景色なしで表示されます。「代替」を選択すると、表の行の1行おきに背景色が表示されます。

図3-13 「レイアウト」タブ: 表スタイル

注意:

ポータル・ページ・スタイルによりポートレットの背景色を制御できます。ポータル・ページ・スタイルの使用方法の詳細は、『Oracle Fusion Middleware Oracle Portalユーザーズ・ガイド』を参照してください。

「列のレイアウト」セクションでは、ポートレットに表示するデータの列を選択し、次にそのデータの表示形式を選択できます。このセクションでは、ハイパーリンクを表示する列を設定できます。これによって、ユーザーが表内でその列をクリックすると、2番目のWebページが表示されます。2番目のWebページを新しいウィンドウに表示するかどうかを指定することもできます。図3-14は、表形式を使用したOmniPortletの例を示しています。

図3-14 表レイアウトを使用したOmniPortletの例

注意:

OmniPortletウィザードの使用方法は、「レイアウト」タブの右上隅にある「ヘルプ」リンクをクリックしてください。

3.2.5.2 チャート・レイアウト

チャート・レイアウトを使用すると、データを棒、円または折れ線のグラフで表示できます。「レイアウト」タブ(図3-15)で、チャート・スタイルと列のレイアウトを選択します。列のレイアウトを選択した場合は、ラベルの基となるグループまたは列を選択できます。カテゴリはチャートの凡例の作成に使用する値を定義し、値はチャート内の棒、線またはスライスの相対サイズを決定します。チャートの各セクションがハイパーリンクを指すかどうか、およびターゲットの情報を新しいウィンドウに表示するかどうかも選択できます。図3-16は、円グラフ・レイアウト用の「レイアウト」タブの例を示しています。

図3-15 「レイアウト」タブ: チャート

注意:

チャート内の情報をグループ化するには、データ・レベル(SQL問合せ文など)で情報をグループ化する必要があります。また、データ・ソースの数値に、書式設定された文字列、カンマまたは通貨が含まれている場合(たとえば$32,789.00)、その内容はテキストとみなされ、チャートの生成時に無視されます。数値として正しく読み取られるようにするには、これらの書式設定文字を削除する必要があります。

図3-16 円グラフ・レイアウト用の「レイアウト」タブの例

棒、スライスまたは線のそれぞれが別のWebページにリンクするように、チャートのハイパーリンクを定義することもできます。たとえば、ポータル・ページにチャート・ポートレットとレポート・ポートレットを表示し、次に、チャートのハイパーリンクを設定して、選択したデータに関する詳細な情報を表示するレポートの行を表示できます。

図3-17は、円グラフの例です。グラフの下に、凡例で使用されているカテゴリ「部門名」が表示されています。

図3-17 円グラフ・レイアウトを使用したOmniPortletの例

3.2.5.3 ニュース・レイアウト

ニュース・レイアウトを使用すると、各記事へのリンクを、簡単な説明付きで表示できます。このレイアウトを使用して、ポータル・ページにRDF (Resource Description Framework)やRSS (RDF Site Summary)などの標準XML形式で情報を公開できます。「列のレイアウト」セクション(図3-18)では、ポートレットの最上部に表示する見出しを追加できます。ロゴも追加できます。また、スクロール・レイアウトを使用すると、ユーザーは垂直に移動するポートレットにすべての情報を表示できます。ユーザーがポートレットの特定のデータをクリックすると別のWebページが表示されるように、URLも入力できます。2番目のWebページを新しいウィンドウに表示するかどうかを指定することもできます。

図3-18 「レイアウト」タブ: ニュース

図3-19は、ニュース・レイアウトを使用したOmniPortletの例を示しています。

注意:

OmniPortletのニュース・レイアウトのスクロール・タイプは、Microsoft Internet ExplorerとNetscape 7.0でサポートされています。

図3-19 ニュース・レイアウトを使用したOmniPortletの例

注意:

OmniPortletウィザードの使用方法は、「レイアウト」タブの右上隅にある「ヘルプ」リンクをクリックしてください。

3.2.5.4 箇条書きレイアウト

箇条書きレイアウトを使用すると、箇条書きリストのデータを表示できます。「レイアウト」タブ(図3-20)には様々な箇条書きスタイルと番号付き箇条書きスタイルが用意されています。「列のレイアウト」セクションでは、ポートレットでの列の表示方法とユーザーが列をクリックしたときに2番目のWebページを表示するかどうかも選択できます。2番目のWebページを新しいウィンドウに表示するかどうかを指定することもできます。

図3-20 「レイアウト」タブ: 箇条書き

図3-21は、箇条書きレイアウトを使用したOmniPortletの例を示しています。

図3-21 箇条書きレイアウトを使用したOmniPortletの例

注意:

OmniPortletウィザードの使用方法は、「レイアウト」タブの右上隅にある「ヘルプ」リンクをクリックしてください。

3.2.5.5 フォーム・レイアウト

フォーム・レイアウト(図3-22)は、Name: <name>のように、フォーム内にラベルまたはデフォルト値として表示するデータがある場合に使用できます。この場合は、ポートレット・パラメータとイベントを使用して、選択した行にデータを渡すことができます。

図3-22 「レイアウト」タブ: フォーム

ターゲットのURLを新しいウィンドウに表示するかどうかを指定することもできます(図3-23)。図3-24は、フォーム・レイアウトを使用したOmniPortletの例を示しています。

図3-23 「新規ウィンドウに開く」チェック・ボックス

図3-24 フォーム・レイアウトを使用したOmniPortletの例

注意:

OmniPortletウィザードの使用方法は、「レイアウト」タブの右上隅にある「ヘルプ」リンクをクリックしてください。

3.2.5.6 HTMLレイアウト

HTMLレイアウトを使用して、カスタマイズされたルック・アンド・フィールをポートレットに作成できます。これには、組込みHTMLレイアウトを選択してそのコードを変更するか、または新規レイアウトをスクラッチから作成するかのいずれかを選択します。選択されたデータ・ソースを基にOmniPortletが取得したデータ列に基づいて、独自のHTMLまたはJavaScriptをハンドコードできます(図3-25)。独自のHTMLおよびJavaScriptをコーディングすることで、ポートレットについて外観の詳細の変更やリッチ・インタフェースの開発を行うことができます。HTMLレイアウトでJavaScriptを使用する例の場合、このタブにある「クイック・スタート」リストから「ソート可能表」レイアウトを選択します。

図3-25 「レイアウト」タブ: HTML

図3-26は、HTMLレイアウトを使用したOmniPortletの例を示しています。

図3-26 HTMLレイアウトを使用したOmniPortletの例

3.2.6 デフォルト編集モード

OmniPortletを作成してポータル・ページに戻った後でポートレットのオプションを変更する必要が生じた場合は、「デフォルトの編集」アイコンをクリックします。デフォルト編集モードでは、OmniPortletウィザードの様々なステップ(「タイプ」ステップを除く)に対応したタブが表示されるので、このタブから直接様々なオプションにアクセスできます。また、この他のタブとして「イベント」があります。このタブについては次の項で説明します。

OmniPortletをデフォルト編集モードで編集する際には、次の事項に注意してください。

- 新しいモード「none」は、ロケール・パーソナライズ・レベルのOmniPortletおよびシンプル・パラメータ・フォームに対するデフォルト設定です。このモードは、デフォルト編集モードでポートレットのデフォルトを編集すると、現行のOracle Portalセッションの言語およびブラウザのロケールに関係なく、変更内容がすべてのユーザーに適用されることを意味します。これらの設定の詳細は、『Oracle Fusion Middleware Oracle Portal管理者ガイド』を参照してください。

- ポートレットは、ポートレット上の「パーソナライズ」リンクをクリックして実行時にパーソナライズできます。ポートレットをパーソナライズすると、パーソナライズされたオブジェクトの完全なコピーが作成されます。すべてのプロパティが複製されるため、その後の「デフォルトの編集」を使用したポートレットの変更は、パーソナライズされたポートレットには反映されません。最新の変更内容がポートレットに反映されるようにするには、「デフォルトの編集」ウィザードを使用して変更した後に「パーソナライズ」を再度クリックし、「デフォルトに戻す」オプションを選択する必要があります。

- デフォルトでは、OmniPortletプロバイダはパーソナライズされたオブジェクトを格納するのにファイルベースのプリファレンス・ストアを使用します。このストアは、中間層のファイル・システム内にオブジェクトを格納します。OmniPortletを複数の中間層の環境にデプロイする場合は、データベース・プリファレンス・ストア(DBPreferenceStore)のような共有プリファレンス・ストアを使用する必要があります。これを行うには、次のどちらかを選択します。

- とりあえずファイルベースのプリファレンス・ストアを使用しておき、後でPDKプリファレンス・ストア移行ユーティリティを使用してデータベース・プリファレンス・ストアに移行します。

- OmniPortletをDBPreferenceStoreを使用するように構成し、『Oracle Fusion Middleware Oracle Portal管理者ガイド』のPortalツールとWebプロバイダを構成する手順に従います。

3.2.7 イベント

OmniPortletウィザードのデフォルト編集モードの「イベント」タブ(図3-27)では、「ソース」タブで選択したポートレット・パラメータに基づいてイベント・パラメータを指定できます。

図3-27 OmniPortletウィザードの「イベント」タブ

3.3 ポートレット・パラメータとイベント

デフォルト設定では、OmniPortletは最大5つのパラメータを受信し、最大3つのイベントを起動できます。各イベントは1つ以上のパラメータを送信できます。たとえば、1つの部門の複数の従業員を表示するチャートを設定できます。ユーザーがチャートの一部(部門名など)をクリックすると、イベントが起動し、ページにパラメータが送信されます。次に、ページから、そのページ上の従業員に関する情報を表示するすべてのポートレットにパラメータが渡されます。その結果、ページ上のすべてのポートレットに、選択した部門の従業員に関する情報が表示されます。

注意:

OmniPortletでパラメータとイベントを使用する方法は、第4章「OmniPortletを使用したポートレットの構築例」の手順に従ってください。provider.xmlファイルに慣れている場合は、このファイルを編集してパラメータとイベントを追加できます。

パラメータとイベントを設定するには、最初に、それらを受け入れるページ・グループを有効にしておく必要があります。Oracle Portalでは、パラメータとイベントはデフォルトで有効になっています。したがって、各ポートレットを設定して、必要なパラメータを受け入れ、必要なイベントを起動します。ポートレット・パラメータを設定した後は、ページ・レベルのパラメータとイベントを設定して、複数のポートレットをまとめてリンクできます。

3.3.1 ポートレット・パラメータとイベント

デフォルト設定では、1つのOmniPortletに対して最大5つのポートレット・パラメータを定義できます。次の場所でパラメータを定義できます。

- OmniPortletを定義するときに、ウィザードの「ソース」タブで指定

- OmniPortletに対する「デフォルトの編集」を選択するときに、「ソース」タブで指定

図3-28は、「ソース」タブの「ポートレット・パラメータ」セクションを示しています。

図3-28 「ソース」タブ: 「ポートレット・パラメータ」セクション

パラメータ値によってポートレットに表示されるデータが決定されます。また、パラメータを使用してURLに値を渡したり、ポートレット・テキストに値を埋め込むことができます。

注意:

ポートレット・パラメータの詳細は、オンライン・ヘルプを参照してください。オンライン・ヘルプにアクセスするには、OmniPortletウィザードの「ソース」タブにある「ヘルプ」リンクをクリックします。このオンライン・ヘルプでは、ポートレット・パラメータの詳細とOmniPortletへの設定方法を説明しています。『Oracle Fusion Middleware Oracle Portalユーザーズ・ガイド』も参照してください。

各OmniPortletは、最大3つのイベントを起動するように設定できます。各イベントは最大3つのパラメータを渡すことができます。それぞれのパラメータは、Param1などのポートレット・パラメータやDepartment_Noなどのデータ・ソース列の場合があります。イベントは、OmniPortletのデフォルト編集モードのときに「イベント」タブで設定します(図3-29)。

図3-29 「イベント」タブ

3.3.2 ページ・パラメータとイベント

ポータル・ページで各OmniPortletに対してパラメータとイベントを設定した後は、そのポートレット・パラメータとイベントを同じページの他のポートレットにマップできます。ページ・パラメータとイベントの使用方法の詳細は、Oracle Portalのオンライン・ヘルプおよび『Oracle Fusion Middleware Oracle Portalユーザーズ・ガイド』を参照してください。

4 OmniPortletを使用したポートレットの構築例

この章では、OmniPortletを使用して、Webサービス、スプレッドシート(CSV)、XMLおよび既存のWebページという4つの異なるデータ・ソースに基づいて4つのポートレットを作成する方法について説明します。これらのポートレットを様々な組込みレイアウトを使用して構築し、HTMLレイアウトを使用して別のポートレットを作成します。これらのポートレットの作成方法と変更方法に加えて、ページ・パラメータとイベントを使用して、ポータル・ページに対話機能を追加する方法も説明します。

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

- 4.1項「ポータル・ページへのOmniPortletインスタンスの追加」

- 4.2項「Webサービスに基づくOmniPortletの構築」

- 4.3項「スプレッドシート(CSV)に基づくOmniPortletの構築」

- 4.4項「XMLデータ・ソースに基づくOmniPortletの構築」

- 4.5項「Webページ・データ・ソースに基づくOmniPortletの構築」

- 4.6項「ポートレット・パラメータとイベントの設定」

- 4.7項「HTMLレイアウトを使用したOmniPortletの構築」

注意:

OmniPortletの特定のページやタブの詳細は、ウィザードの右上隅の「ヘルプ」リンクをクリックしてください。このオンライン・ヘルプでは、選択したページやタブの内容を説明しています。OmniPortletの使用の詳細は、第3章「OmniPortletを使用したポートレットの作成」、Oracle PortalでのOmniPortletの登録および構成の詳細は、『Oracle Fusion Middleware Oracle Portal管理者ガイド』を参照してください。

この章の最後では、図4-1に示すように、4つのポートレットが含まれるページを作成します。

図4-1 OmniPortletの例が4つあるポータル・ページ

これら4つのすべてのポートレット例では、インターネットに接続できることが前提です。インターネットに接続するのにプロキシ・サーバーを使用する必要がある場合、プロキシ認証を使用するためOmniPortletのプロバイダ・テスト・ページでHTTPプロキシ設定を構成する必要があります。ログインを必要とするプロキシ認証を使用するようにOmniPortletプロバイダが設定されている場合は、OmniPortletウィザードの「ソース」タブの「プロキシ認証」セクションにユーザー情報を入力できます。プロキシ認証の詳細は、3.2.2項「ソース」を参照してください。プロバイダのプロキシ設定の構成の詳細は、『Oracle Fusion Middleware Oracle Portal管理者ガイド』を参照してください。

注意:

この章の手順では、Oracle Portalに同梱されているOmniPortletプロバイダを使用することを前提としています。Oracle Portal Developer Kitを単独でインストールした場合は、OmniPortletインスタンスを当該のページに追加するときの方法を若干変更する必要があります。OmniPortletのOracle Portalへの登録と構成の詳細は、『Oracle Fusion Middleware Oracle Portal管理者ガイド』を参照してください。

4.1 ポータル・ページへのOmniPortletインスタンスの追加

この項では、OmniPortletインスタンスをポータル・ページに追加する方法を説明します。

OmniPortletインスタンスをページに追加する手順は、次のとおりです。

1. OmniPortletを追加するページの編集モードで、「ポートレットの追加」アイコンをクリックします。

2. 「ポートレットの追加」ページの「使用可能なポートレット」リストで、「ポートレット・ビルダー」リンクをクリックします。

3. 「OmniPortlet」リンクをクリックします。

4. 「OK」をクリックします。図4-2に示すように、OmniPortletの新規インスタンスがポータル・ページに表示されます。

図4-2 ポータル・ページのOmniPortletインスタンス

注意:

IBM Linux on POWERプラットフォームでは、OmniPortletの定義の際、アクション・ボタン(「次へ」、「前へ」、「終了」および「取消」)が点の状態に最小化されている場合、スタック・サイズ・シェル制限を無制限にし、WLS_PORTALインスタンスを再開してください。次のコマンドを実行して、スタック・サイズ・シェル制限を無制限に設定します。

prompt> ulimit -s unlimited

4.2 Webサービスに基づくOmniPortletの構築

この項の手順では、特定の郵便番号に対する天気予報情報が表示されるポートレットを作成する方法を示します。このポートレットは、Oracle Technology Networkで使用可能なWebサービスをベースにして作成します。この項の手順を実行するには、インターネットへのアクセスが必要です。

Webサービスに基づいてOmniPortletを作成する手順は、次のとおりです。

1. ポータル・ページの新しいOmniPortletインスタンスで「デフォルトの編集」リンクをクリックし、OmniPortletウィザードを起動します。

2. 「タイプ」ページで、「Webサービス」ラジオ・ボタンを選択してから、「次へ」をクリックします。

3. 「ソース」ページの「WSDL URL」フィールドで、次のURLを入力します。
http://webservices.oracle.com/WeatherWS/WeatherWS?WSDL

注意:

このWebサービスは、1つのメソッド(WeatherWS.giveMeSomeWeatherInfo)を持ち、1つのパラメータ(param0)を受け入れます。パラメータを含むメソッドを使用する場合は、そのパラメータがタブのこのセクションに表示されます。パラメータにサンプルの値を入力できます。次に、「テスト」をクリックしてサンプルのXMLデータ、SOAPレスポンスおよびSOAPリクエストを表示します。

4. 「メソッドの表示」をクリックします。

5. 「Webサービス・メソッド」セクションのparam0パラメータ・フィールドにサンプルの郵便番号(94065など)を入力し、「テスト」をクリックします。図4-3に示すように、「Webサービス: テスト結果」ウィンドウが表示され、Webサービスによって戻されたXMLデータを確認できます。

図4-3 OmniPortlet: 「Webサービス: テスト結果」ページ

6. ウィンドウを閉じます。
「ソース」ページは、図4-4のイメージのように表示されます。

図4-4 OmniPortlet: Webサービスの「ソース」タブ

注意:

インターネットにアクセスできない場合、別のWebサービスを使用できますが、結果はこの章の例とは異なってきます。

7. 「次へ」をクリックします。

8. 「フィルタ」ページで、「次へ」をクリックします。

9. 「表示」ページの「タイトル」フィールドに、Weather Forecastと入力します。

10. 「ヘッダー・テキスト」フィールドに、Forecast per Zip Codeと入力します。

11. 図4-5に示すように、「ヘッダー・テキストの表示」チェック・ボックスが選択されていることを確認し、「フッター・テキストの表示」チェック・ボックスの選択を解除します。

図4-5 OmniPortlet: Webサービスの「表示」タブ

12. 「表」ラジオ・ボタンを必ず選択して、「次へ」をクリックします。

13. 「レイアウト」ページで、「プレーン」ラジオ・ボタンを選択します。

14. データの「列ラベル」、「列」および「表示内容」プロパティを表4-1のとおりに指定します。

表4-1 天気予報ポートレットの列のプロパティ

列ラベル

列

表示内容

曜日

dayOfWeek

テキスト

高

hiTemp

テキスト

低

lowTemp

テキスト

降水量

precip

テキスト

(空白)

img

イメージ

15. これで、ポートレットの定義が完了しました。「終了」をクリックします。ポートレットは、図4-6のように表示されます。

図4-6 OmniPortlet: Webサービスのポートレット

4.3 スプレッドシート(CSV)に基づくOmniPortletの構築

この項の手順では、OmniPortletを使用して、スプレッドシート(CSV)データ・ソースに基づいて地域情報を表示するポートレットを定義する方法を示します。このポートレットでは、米国の主要都市部の人口を円グラフで表示します。

スプレッドシートに基づいてOmniPortletを作成する手順は、次のとおりです。

1. ポータル・ページで既存のリージョンの下にリージョンを作成します。

2. この新しいリージョンにOmniPortletを追加します。

3. 「デフォルトの編集」リンクをクリックしてOmniPortletウィザードを起動します。

4. 「タイプ」ページで、「スプレッドシート」ラジオ・ボタンを選択してから、「次へ」をクリックします。

5. 「ソース」ページの「CSV URL」フィールドで、既存のテキストを次のCSVに置き換えます。
http://webservices.oracle.com/WeatherWS/city_population.csv

注意:

インターネットにアクセスできない場合、デフォルトのURLを使用できますが、結果はこの章の例とは異なってきます。

6. 「スプレッドシートの最初の行を列名に指定します。」チェック・ボックスが選択されているか確認します。

7. 「次へ」をクリックします。

8. 「フィルタ」ページで、「次へ」をクリックします。

9. 「表示」ページの「タイトル」フィールドに、Major U.S. Urban Areas - Populationと入力します。

10. 「ヘッダー・テキストの表示」チェック・ボックスの選択を解除します。

11. 「フッター・テキスト」フィールドにClick a pie section to view the population of the specified urban areaと入力します。

注意:

「フッター・テキスト」フィールドに入力したテキストは、エンド・ユーザーに、選択した人口に関する詳細を表示するには円グラフ・セクションをクリックするよう指示するものです。この機能を有効にするには、4.6項「ポートレット・パラメータとイベントの設定」の手順を実行する必要があります。

12. 「フッター・テキストの表示」チェック・ボックスが選択されていることを確認します。

13. 「レイアウト・スタイル」で、「チャート」ラジオ・ボタンを選択してから、「次へ」をクリックします。

14. 「レイアウト」ページで、「円グラフ」ラジオ・ボタンを選択します。

15. 「幅」フィールドに、300と入力します。

16. 「高さ」フィールドに、300と入力します。

17. 「凡例」リストから、「一番上」を選択します。

18. 「3D効果」チェック・ボックスを選択します。

19. 「列のレイアウト」で、「グループ」リストから「<なし>」を選択します。

20. 「カテゴリ」リストから、「市」を選択します。

21. 「値」リストから、人口を選択します。これで、「レイアウト」タブは、図4-7のイメージのように表示されます。

図4-7 OmniPortlet: 文字で区切られた値(CSV)の「レイアウト」タブ

22. 「終了」をクリックします。
これで、ポートレットは、ポータル・ページで天気予報ポートレットの下に表示され、図4-8のように表示されます。

図4-8 OmniPortlet: ポータル・ページ上のCSV OmniPortlet

4.4 XMLデータ・ソースに基づくOmniPortletの構築

この項の手順では、OmniPortletを使用して、XMLデータ・ソースに基づいてニュース情報をスクロール・レイアウトで表示するポートレットを定義する方法を示します。

XMLデータ・ソースに基づいてOmniPortletを作成する手順は、次のとおりです。

1. ポータル・ページでWebサービス・ポートレット(天気予報)の横にリージョンを作成します。

2. この新しいリージョンにOmniPortletを追加します。

3. 「デフォルトの編集」リンクをクリックしてOmniPortletウィザードを起動します。

4. 「タイプ」ページで、「XML」ラジオ・ボタンを選択してから、「次へ」をクリックします。

5. 「ソース」ページの「XML URL」フィールドで、次のURLを入力します。
http://www.nytimes.com/services/xml/rss/nyt/Travel.xml

注意:

インターネットにアクセスできない場合、別のRSSフィードを使用できますが、結果はこの例のイメージとは異なってきます。

6. 「XSLフィルタのURL」フィールドに、次のXSLファイルのURLを入力します。
http://www.oracle.com/technology/products/ias/portal/viewlets/omniportletnews.xsl

注意:

このXSLフィルタは、OmniPortletが消費可能なROWSET/ROW構造にRSSニュース・フィードを変換します。

7. 「次へ」をクリックします。

8. 「フィルタ」ページで、「次へ」をクリックします。

9. 「表示」ページの「タイトル」フィールドに、Travel Newsと入力します。

10. 「ヘッダー・テキストの表示」チェック・ボックスの選択を解除します。

11. 「フッター・テキスト」フィールドに、Source: The New York Timesと入力します。

12. 「フッター・テキストの表示」チェック・ボックスが選択されていることを確認します。

13. 「レイアウト・スタイル」で「ニュース」ラジオ・ボタンを選択してから、「次へ」をクリックします。

14. 「レイアウト」ページの「ニュース・スタイル」で、「スクロール」ラジオ・ボタンを選択します。

15. 「幅」フィールドに、475と入力します。

16. 「高さ」フィールドに、50と入力します。
これにより、「レイアウト」タブの「ニュース・スタイル」セクションは、図4-9のイメージのように表示されます。

図4-9 OmniPortlet: XMLの「レイアウト」タブ - 「ニュース・スタイル」

17. 図4-10に示すように、「列のレイアウト」内の「Field 1」の右側で「列」リストから「title」、「操作」リストから「ハイパーリンク」を選択し、「URL」フィールドに##link##と入力します。

図4-10 OmniPortlet: ニュース・スタイルの「列のレイアウト」

18. 「Field2」の右側で、「列」リストから「説明」を選択し、その他の設定はデフォルト値のままにします。「レイアウト」タブのこのセクションが図4-11のように表示されていることを確認します。

図4-11 「レイアウト」タブの「列のレイアウト」セクション

19. 「終了」をクリックします。
これで、図4-12に示すように、ポートレットがポータル・ページに表示されます。

図4-12 OmniPortlet: ポータル・ページ上のXML形式のスクロール・ニュースのOmniPortlet

4.5 Webページ・データ・ソースに基づくOmniPortletの構築

この項の手順では、OmniPortletを使用して、既存のWebページに基づいて天気情報をテキスト形式で表示するポートレットを作成する方法を示します。この項では、OmniPortletを使用して、Webサイトのコンテンツをクリップおよびスクレイプします。

Webページ・データ・ソースに基づいてOmniPortletを作成する手順は、次のとおりです。

1. ポータル・ページでXMLポートレット(旅行ニュース)の下にリージョンを作成します。

2. この新しいリージョンにOmniPortletを追加します。

3. 「デフォルトの編集」リンクをクリックしてOmniPortletウィザードを起動します。

4. OmniPortletウィザードの「タイプ」タブで、「Webページ」ラジオ・ボタンを選択してから、「次へ」をクリックします。

5. 「ソース」タブで、「Webページの選択」をクリックします。

6. 表示された「Webクリッピング・スタジオ」ページの「URLロケーション」フィールド(図4-13)に、クリップするページのURLを入力します。
http://www.wunderground.com

注意:

別のWebページを使用することもできますが、結果はこの章の例とは異なってきます。

図4-13 「URLロケーション」フィールド

注意:

この例では、サード・パーティのWeather Underground社が所有するWebサイトを使用しています。このWebサイトは最新の天気予報に基づいて絶えず更新されるため、この項に含まれるイメージと手順は、この例を作成するときに表示される内容とは厳密には一致しません。このサード・パーティのWebサイトのテクノロジは所有者によって変更される可能性があるため、この例の手順を進む過程で一部の手順が機能しない場合があります。

7. Webクリッピング・スタジオを表示するには、「開始」をクリックします。図4-14に示すように、Webクリッピング・スタジオにWebページが表示されます。

図4-14 www.wunderground.comのホーム・ページが表示されたWebクリッピング・スタジオ

8. このホーム・ページで、図4-15に示すように、天気フィールドに郵便番号(94065など)を入力し、このフィールドの右にある虫眼鏡のアイコンをクリックします。

図4-15 天気フィールドへの郵便番号94065の入力

9. カリフォルニア州レッドウッド・シティの天気情報がWebクリッピング・スタジオに表示されます。このページのセグメントを図4-16に示します。

図4-16 カリフォルニア州レッドウッド・シティの天気情報

10. 図4-17に示すように、Webクリッピング・スタジオの右上にある「セクション」ボタンをクリックします。

図4-17 「セクション」ボタン

11. 「セクション」ボタンをクリックすると、Webページの要素が分割され、各セクションの上部に「選択」という名前の新しいアイコンが表示されます。図4-18に、この状態のWebクリッピング・スタジオのスナップショットを示します。

図4-18 Webページの各セクションを表示したWebクリッピング・スタジオ

12. 図4-19に示されたセクションを見つけます。このセクションには、選択した市(この例ではサンフランシスコ湾沿岸部)の天気情報が表示されています。

図4-19 「選択」アイコンが表示されたサンフランシスコ湾沿岸部の天気情報

13. 図4-19に示すように、「Forecast for San Francisco Bay Shoreline」タイトル・バーの真上にあるこのセクションの「選択」アイコンをクリックします。このセクションが、図4-20に示すようにWebクリッピング・スタジオに表示されます。

図4-20 Webクリッピング・スタジオ内でのサンマテオ郡の天気情報セクション

14. クリッピングを選択した後は、データをスクレイプ、つまり、ポートレットに表示する特定のセルを選択することによって、データをさらに絞り込むことができます。「スクレイプ」ボタン(図4-21)をクリックします。

図4-21 「スクレイプ」ボタン

15. スクレイプ・モードでは、各アイテムの横にあるチェック・ボックスを選択すると、Webクリッピングのテキスト部分を識別できます。これらのアイテムは列レベル、行レベルまたは表レベルで繰り返すことができます。
この例では、検索結果の各記事のタイトルと説明を表示します。タイトルと説明を行レベルで繰り返すことができます。したがって、検索で戻された各結果では、すべての結果のタイトルと説明のみが表示されます。通常は、行ごとに繰り返す部分をすべて含むテキスト・アイテムを最初の行で選択します。

「スクレイプ」ボタンをクリックすると、図4-22に示すように、Webページの各アイテムの横にチェック・ボックスが表示されます。

図4-22 スクレイプ・チェック・ボックス

16. アイテムの横にあるチェック・ボックスを選択して出力を選択します。図4-23は、チェック・ボックスの例を示します。

図4-23 サンマテオ郡のタイトルのチェック・ボックス

注意:

選択するセクションの色によっては、チェック・ボックスが目立つように表示されない場合があります。

17. 「Forecast for San Mateo County」のチェック・ボックスを選択すると、図4-24に示すように、画面下部のWebクリッピング・スタジオの「データ」セクションに、対応するラベルが表示されます。

図4-24 「データ」セクションのサンマテオ郡のラベル

18. 「名前」フィールドに、SanMateoCountyForecastのようによりわかりやすい名前を入力します。名前には空白を含めないでください。

19. 表示するフィールドを選択し、選択の際に対応するラベルを追加します。次に、この例で選択したサンプル情報のリストを示しますが、最新の天気による例を選択してください。図4-25に示すように、選択した次の天気情報が表示されます。

- タイトル「サンマテオ郡の予報」

- 今日

- 今日の天気

- 木曜

- 木曜の天気

図4-25 選択した天気情報

注意:

このWebページ・データ・ソースでは、Webクリッピングの一部としてURLを選択できます。Oracle Portal 10.1.2以上では、アプリケーションのコンテキストが保持されます。そのため、たとえば、ハイパーリンクされたページに表示されるイメージは保持されます。

20. これで、表示するデータは選択し終わったので、図4-26に示すように、「続行」ボタンをクリックします。

図4-26 「続行」ボタン

21. 表示されたページで、図4-27に示すように、「クリッピング属性」セクションの情報に「Weather Underground: Redwood City, California Forecast」というタイトルが含まれることを確認します。

図4-27 Webクリッピング・スタジオの「クリッピング属性」セクション

22. 図4-28に示すように、「クリッピング・パラメータ」セクションの情報にパラメータが含まれることを確認します。

図4-28 Webクリッピング・スタジオの「クリッピング・パラメータ」セクション

23. queryという名前の2つ目のパラメータに対して、「クリッピング・パラメータにしますか。」チェック・ボックスを選択します。

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

25. OmniPortletウィザードの「ソース」タブに、新規タイトルと説明が表示されます。Webクリッピング・スタジオでWebクリッピングを編集する場合は、図4-29に示すように、「Webページの選択」ボタンを再度クリックします。

図4-29 Webページの「ソース」タブ

26. 図4-30に示すように、「クリッピング・パラメータ」見出しに、前のページで設定したクリッピング・パラメータが表示されます。

図4-30 クリッピング・パラメータとポートレット・パラメータのマッピング

27. 図4-31に示すように、「ポートレット・パラメータ」見出しで、Param1の右にある「デフォルト値」を郵便番号94065に設定します。

図4-31 「ポートレット・パラメータ」セクション

28. 「次へ」をクリックします。

29. 「フィルタ」タブで、「次へ」をクリックします。

30. 「表示」タブの「タイトル」フィールドに、Weather Informationと入力します。

31. 「フッター・テキスト」フィールドにSource: Weather Undergroundと入力し、「フッター・テキストの表示」チェック・ボックスが選択されていることを確認します。

32. 「レイアウト・スタイル」で「ニュース」ラジオ・ボタンを選択します。「表示」タブは、図4-32のように表示されます。

図4-32 オプションが選択された「表示」タブ

33. 「次へ」をクリックします。

34. 「レイアウト」タブが図4-33のように表示されていることを確認します。

図4-33 「レイアウト」タブ

35. 「終了」をクリックします。

36. 新規Webページ・ポートレットがポータル・ページに、図4-34のように表示されます。

図4-34 ポータル・ページの天気情報ポートレット

これで、OmniPortletの4つすべての例の構築が完了し、ページは図4-35のように表示されます。

図4-35 4つのOmniPortletの例が表示されたポータル・ページ

4.6 ポートレット・パラメータとイベントの設定

この項の手順では、作成したポートレットとページを設定してパラメータを使用する方法を示します。これにより、地域(ニューヨークなど)に該当する円グラフの一部をユーザーがクリック(ポートレット・イベントを生成)したときに、(Webサービスに基づく)郵便番号別天気予報ポートレットと(Webページに基づく)天気情報ポートレットに、その地域(ニューヨーク)の天気情報が表示されます。

ポートレット・パラメータとイベントを設定するには、次を実行する必要があります。

- 4.6.1項「パラメータを受け入れるためのポートレットの構成」

- 4.6.2項「ポートレット・パラメータへのページ・パラメータのマップ」

- 4.6.3項「イベントを使用するためのチャート・ポートレットの構成」

- 4.6.4項「ページへのチャート・イベントのマップ」

4.6.1 パラメータを受け入れるためのポートレットの構成

この項の手順では、パラメータを受け入れるページ上の2つのポートレット(郵便番号別天気予報情報を表示するWebサービス・ポートレットと天気情報を表示するWebページ・ポートレット)を構成する方法を示します。

パラメータを受け入れるように2つのポートレットを構成する手順は、次のとおりです。

1. 図4-36に示すように、ページの編集モードで、Webサービス・ポートレットの左上にある「デフォルトの編集」アイコンをクリックします。

図4-36 Webサービス・ポートレットの「デフォルトの編集」アイコン

2. 図4-37に示すように、「ソース」タブで、param0の値(94065)を##Param1##に置き換えます。

図4-37 ##Param1##に設定されたparam0

3. 「ポートレット・パラメータ」で、Param1のデフォルト値を94065に設定します。

4. 「ページ・ラベルのパーソナライズ」フィールドに、Zipと入力します。

5. 図4-38に示すように、「ページ説明のパーソナライズ」フィールドに、Enter zip codeと入力します。

図4-38 Webサービスの「ソース」タブの「ポートレット・パラメータ」セクション

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

7. 図4-39に示すように、ポータル・ページの編集モードで、Webページ・ポートレットの「デフォルトの編集」アイコンをクリックします。

図4-39 Webページ・ポートレットの「デフォルトの編集」アイコン

8. すでにポートレット・パラメータをクリッピング・パラメータにマップしてあるため、「ソース」タブでは、図4-40に示すように、ラベルと説明をポートレット・パラメータのParam1に追加するのみで済みます。

図4-40 Webページの「ソース」タブの「ポートレット・パラメータ」セクション

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

これで、ページ・パラメータを受け入れるための、WebサービスおよびWebページ・ポートレットのポートレット・パラメータを2つ作成しました。次に、ページ・パラメータをこれら2つのポートレット・パラメータにマップします。

4.6.2 ポートレット・パラメータへのページ・パラメータのマップ

この項の手順では、前の項で構成した2つのポートレットにページ・パラメータをマップする方法を示します。

ページ・パラメータをポートレット・パラメータにマップする手順は、次のとおりです。

1. 図4-41に示すように、ページの編集モードで、画面上部にある「ページ: プロパティ」リンクをクリックします。

図4-41 「ページ: プロパティ」リンク

2. 「パラメータ」タブをクリックします。

3. 図4-42に示すように、「新規ページ・パラメータ」の「パラメータ名」フィールドにzipと入力し、「追加」をクリックします。

図4-42 「新規ページ・パラメータ」

4. 「ページ・パラメータのプロパティ」に新規ページ・パラメータが表示されます。図4-43に示すように、「デフォルト値」フィールドに94065と入力します。

図4-43 zipページ・パラメータのデフォルト値

5. 「ポートレット・パラメータ値」に、ポートレットのリストが表示されます。この章のすべての手順が完了している場合は、OmniPortletの4つのインスタンスが表示されます。リストの先頭はWebサービス・ポートレットで、リストの4つ目(最終行)のOmniPortletインスタンスはWebページ・データ・ソースです。

6. 図4-44に示すように、先頭のOmniPortletインスタンスの左にある矢印をクリックし、「ポートレット・パラメータ」リストを開きます。

図4-44 「ポートレット・パラメータ値」セクション

7. Param1の右にあるリストから「ページ・パラメータ」を選択します。

8. 表示されているリストから、必ずzipを選択します。

9. リストの4つ目のOmniPortletについて、図4-45に示すように、同じ手順を実行してParam1を「Zip」の「ページ・パラメータ」に設定します。

10. 図4-45 「ページ・パラメータ」タブの「ポートレット・パラメータ」セクション

これで、ページ・パラメータzipはWebサービスおよびWebページ・ポートレットのポートレット・パラメータにマップされました。次に、円グラフの一部をクリックしたときに、選択した郵便番号がページに送信されるように、チャート・ポートレットを設定します。

4.6.3 イベントを使用するためのチャート・ポートレットの構成

この項の手順では、イベントを使用するためにチャート・ポートレットを構成する方法を示します。つまり、ポートレット内のイベント(円グラフの一部のクリックなど)に基づいてイベントが発生するようにします。この場合、エンド・ユーザーによって円グラフの一部がクリックされたときにこの円グラフの一部に対応した郵便番号がページに送信されるように、ポートレットを構成します。これにより、4.6.1項「パラメータを受け入れるためのポートレットの構成」で構成した2つのポートレットのデータが、選択した郵便番号に応じてリフレッシュされます。

チャート・ポートレットを構成する手順は、次のとおりです。

1. 図4-46に示すように、ページの編集モードで、チャート・ポートレットの「デフォルトの編集」アイコンをクリックします。

図4-46 チャート・ポートレットの「デフォルトの編集」アイコン

2. 「レイアウト」タブをクリックします。

3. 「チャート・ドリルダウン」で、「操作」リストから「イベント1」を選択します。

4. 「デフォルト編集モード」の場合、「イベント」という名前のタブがウィザードに表示されます。「イベント」タブをクリックします。

5. このタブで、郵便番号がチャートからページにイベント出力として渡されるように、(「レイアウト」タブで設定した)イベント1を構成します。
図4-47に示すように、Event1Param1を「郵便番号」に設定し、「OK」をクリックします。

6. 図4-47 チャート・ポートレットの「イベント」タブ

これで、ユーザーが円グラフの一部をクリックできるようにチャート・ポートレットが構成され、円グラフで選択した郵便番号がページに送信されるようにイベントが設定されました。次に、このイベント・パラメータが受け入れられるようにページを設定します。

4.6.4 ページへのチャート・イベントのマップ

この項の手順では、前の項で作成したチャート・イベントをページにマップし、ユーザーが円グラフの一部をクリックしたときに、円グラフで選択した郵便番号がページによってページ出力として受け入れられるようにする方法を示します。これにより、ページには、WebサービスおよびWebページ・ポートレットで選択した郵便番号に該当するデータが表示されます。

チャート・イベントをページにマップする手順は、次のとおりです。

1. ページの編集モードで、「ページ: プロパティ」リンクをクリックし、「イベント」タブをクリックします。

2. 図4-48に示すように、リストで2つ目のOmniPortletを開いて、その下にイベントを表示し、「イベント1」を選択します。

図4-48 ページの「イベント」タブの「ポートレット・イベント」セクション

3. 「ページに移動」ラジオ・ボタンを選択し、その右側のフィールドのさらに右にある「ページをブラウズ」アイコンをクリックし、ページの名前(この場合はOmniPortlet Examples)を検索します。ページ名の横にある「オブジェクトを戻す」をクリックします。

注意:

ページ名がわからない場合は、「取消」をクリックするとページの編集モードに戻ることができます。次に、「ページ・グループ: プロパティ」リンクをクリックし、ページ・グループの表示名を表示します。「ページ・プロパティ」の「イベント」タブに戻った後、「ページをブラウズ」アイコンをクリックしてページ・グループを検索すると、その下にページ名が表示されます。

4. 図4-49に示すように、「ページ入力」を設定します。

図4-49 「イベント」タブの「ページ入力」

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

6. これで、チャート・ポートレットの円グラフの上にマウスをドラッグするとセクションの1つをクリックできるようになりました。最も大きい部分(ニューヨーク)をクリックしてみてください。ページがリフレッシュされるのがわかります。
ページのURLには、たとえばOmniPortlet%20Examples?zip=10001のように、ページ名の後に設定されたパラメータ値が表示されます。天気予報情報が変更され、図4-50のようになります。

図4-50 ニューヨークの天気予報の(Webサービス)ポートレット

天気情報ポートレットが変更され、図4-51のようになります。

図4-51 ニューヨークの天気情報の(Webページ)ポートレット

4.7 HTMLレイアウトを使用したOmniPortletの構築

この章での例からわかるように、OmniPortletの任意の組込みレイアウトでは任意のデータ・ソースを使用できます。この項では、OmniPortletのHTMLレイアウトで、4.2項「Webサービスに基づくOmniPortletの構築」で使用したものと同じWebサービス・データ・ソースを使用してポートレットを作成する方法を説明します。この項を終了すると、ポートレットは図4-52のようになります。

図4-52 HTMLレイアウトを使用したOmniPortlet

HTMLレイアウトを使用してポートレットを作成する手順は、次のとおりです。

1. 4.2項「Webサービスに基づくOmniPortletの構築」のステップ1から8に従って、Webサービス・データ・ソースを使用します。

2. 「表示」タブの「レイアウト・スタイル」で、「HTML」を選択してから、「次へ」をクリックします。

3. 「レイアウト」タブに表示されるデフォルトのレイアウトは、「簡易表」です。
「クイック・スタート」ドロップダウン・リストを使用してレイアウトを切り替えたり、各フィールドを消去して独自のレイアウトを作成したりできます。この例では、デフォルトの「簡易表」レイアウトを使用します。「繰返しセクション」で、OmniPortletによってデータ・ソースの列がレイアウトにどのようにして自動的に移入されるかが確認できます。必要に応じて、任意のセクションでHTMLを変更できます。

4. 「終了」をクリックします。ポートレットは図4-53のように表示されます。

5. 図4-53 HTMLレイアウトを使用したOmniPortletの初期表示

6. 「img」の下に、実際のイメージのかわりにURLが表示されていることがわかります。HTMLソースを変更するには、「デフォルトの編集」(鉛筆)アイコンをクリックしてOmniPortletを編集します。

7. 「レイアウト」タブをクリックします。

8. 「繰返しセクション」で、<TD>##img##</TD>というコードの行を見つけます。

9. このコードを、<TD><img src="##img##"></TD>で置換します。

10. 「非繰返し見出しセクション」で、列ヘッダーを変更することもできます。たとえば、次のように置換します。
<TH CLASS='PortletHeading1'>img</TH>"

を、次のようにします。

<TH CLASS='PortletHeading1'>Weather Graphic</TH>

11. 「非繰返し見出しセクション」で、次の行を削除します。
<TH CLASS='PortletHeading1'>Zip Code</TH>

12. 「繰返しセクション」で、次の行を削除します。
<TD>##zipCode##</TD>

13. 他にも変更する見出しがあればそれに対して同じ操作を実行し、「終了」をクリックします。これにより、ポートレットは、図4-54のように表示されます。

図4-54 HTMLレイアウトを使用したOmniPortletの最終表示

5 Webクリッピングを使用したコンテンツ・ベースのポートレットの作成

Webクリッピングは、ブラウザ・ベースの宣言型ツールで、これを使用すると、WebアプリケーションとOracle Portalを統合できます。これは、Webアプリケーションの既存のユーザー・インタフェースを利用して迅速に統合できるように設計されています。Webクリッピングは、Oracle PortalのコンポーネントであるOracle Portal Developer Kitを使用してWebプロバイダとして実装されています。

Webクリッピングでは、Webコンテンツを単一の一元化したWebページのポートレットに収集できます。Webクリッピングを使用すると、大規模な組織に散在するWebサイトのコンテンツを統合できます。

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

- 5.1項「Webクリッピングの概要」

- 5.2項「ポータル・ページへのWebページ・コンテンツの追加」

- 5.3項「シングル・サインオンを使用した認証されているWebコンテンツの統合」

- 5.4項「ユーザーがパーソナライズできるWebクリッピングの追加」

- 5.5項「WebクリッピングOpen Transport APIの使用」

- 5.6項「URLベースのポートレットからの移行」

- 5.7項「Webクリッピングに関する現在の制限」

注意:

Webクリッピングは、Oracle Portal 11g リリース1 (11.1.1)に付属しているほか、Oracle Portal Developer Kitとともにダウンロードすることもできます。Oracle Portalでは、「ポートレット・ビルダー」フォルダのOracle PortalリポジトリからWebクリッピング・ポートレットを追加できます。WebクリッピングをOracle Portal Developer Kitの一部としてダウンロードしてある場合は、使用する前に登録する必要があります。Webプロバイダの登録の詳細は、『Oracle Fusion Middleware Oracle Portal管理者ガイド 』を参照してください。登録すると、Webクリッピング・ポートレットを任意のポータル・ページに追加できます。

5.1 Webクリッピングの概要

Webクリッピングを使用すると、Webページ全体または一部をクリップし、ポートレットとして再利用することができます。基本およびHTMLフォーム・ベースのサイトはクリップ可能です。Webクリッピングは、既存のWebページのコンテンツをコピーし、ポータルでポートレットとして公開する場合に使用します。Webクリッピング・ポートレットは次の機能をサポートします。

- 様々なスタイルのログイン・メカニズムを介したナビゲーション。これには、フォーム・ベースとJavaScriptベースの送信、およびCookieベースのセッション管理を使用したHTTPのBasic認証とDigest認証が含まれます。

- クリッピングのファジー・マッチング。ソース・ページ内部でのWebクリッピングの順序変更、または文字のフォント、サイズまたはスタイルの変更が行われた場合でも、Webクリッピング・エンジンでは正確に識別され、ポートレット・コンテンツとして配信されることを意味します。

- 広範囲なWebコンテンツの再利用。これには、HTTPのGETとPOST(フォーム送信)を使用して取得された、HTML 4.0.1、JavaScript、アプレットおよびプラグイン対応コンテンツで作成されたページの基本サポートが含まれます。

- パーソナライズ。ページ設計者は、ページの閲覧者がポートレットのパーソナライズ時に変更できる入力パラメータを公開できます。これらのパラメータは、ページ設計者がOracle Portalのページ・パラメータとしてマップできるパブリック・パラメータとして公開できます。この機能により、エンド・ユーザーはパーソナライズされたクリッピングを取得できます。

- シングル・サインオンを使用した認証されているWebコンテンツの統合。これには、外部アプリケーションとの統合が含まれます。この統合によって、Oracle Application Server Single Sign-Onの利用や、認証されている外部Webサイトのコンテンツのクリップが可能になります。

- インライン・レンダリング。このレンダリングによって、Webクリッピング・ポートレットは、ポートレットのコンテキスト内にリンクを表示するように設定できます。その結果、ユーザーがWebクリッピング・ポートレット内でリンクをクリックすると、同じポートレット内に結果が表示されます。この機能は、内部および外部のWebサイトで使用できます。

- プロキシ認証。これには、グローバルなプロキシ認証やユーザーごとの認証のサポートも含まれます。「プロバイダ・テスト・ページ: Webクリッピング」を使用して、タイプ(「Basic」または「Digest」)やレルムなどプロキシ・サーバー認証の詳細を指定できます。また、ユーザー資格証明の入力用に次のいずれかのスキームを指定できます。

- すべてのユーザーは、指定されたユーザー名とパスワードを使用して自動的にログインします。

- すべてのユーザーは、自ら設定したユーザー名とパスワードを使用してログインする必要があります。

- すべてのパブリック・ユーザー(ポートレットで未認証)は、指定されたユーザー名とパスワードを使用して自動的にログインしますが、有効なユーザー(ポートレットで認証済)は、自ら設定したユーザー名とパスワードを使用してログインする必要があります。

詳細は、『Oracle Fusion Middleware Oracle Portal管理者ガイド 』を参照してください。

- URLベースのポートレットからの移行。URLベースのポートレットからWebクリッピングへの移行を可能にします。詳細は、5.6項「URLベースのポートレットからの移行」を参照してください。

- HTTPSベースの外部Webサイトのナビゲーションとクリッピング。サーバーの証明書を取得していることが条件です。

- Open Transport API。クリップされたサイトに対する認証メカニズムをカスタマイズするためのAPI。デフォルトでは、Webクリッピング・プロバイダはBasicとDigest、送信ログインのようなHTTP要求ベースの認証方法のみをサポートしています。Kerberosプロキシ認証のようなカスタムの認証方法をサポートするには、ユーザーはWebクリッピングTransport APIを使用できます。詳細は、5.5項「WebクリッピングOpen Transport APIの使用」を参照してください。

- HTML 4.0.1ページからのページ・コンテンツのクリッピング。次があります。

- <applet>、<body>、<div>、<embed>、<img>、<object>、<ol>、<span>、<table>および<ul>タグ付きコンテンツのクリッピング

- <head>スタイルとフォント、Cascading Style Sheet (CSS)の保持

- UTF-8準拠の文字セット

- ハイパーリンク(HTTP GET)、フォーム送信(HTTP POST)、フレームおよびURLリダイレクションを使用したナビゲーション

- URLおよびURLパラメータの各国語セット(NLS)。クリップされたコンテンツの文字セットをWebクリッピングが決定する方法については、5.7項「Webクリッピングに関する現在の制限」を参照してください。

デフォルトでは、すべてのWebクリッピング定義は、Oracle Fusion Middlewareインフラストラクチャ・データベースに永続的に格納されます。パスワードなどの保護情報は、Oracleの暗号化テクノロジを使用し、Data Encryption Standard (DES)に基づいて暗号化されたフォームで格納されます。

5.2 ポータル・ページへのWebページ・コンテンツの追加

ポータル・ページにWebページ・コンテンツを追加する手順については、次の各項の手順を参照してください。

- 5.2.1項「ページへのWebクリッピング・ポートレットの追加」

- 5.2.2項「Webクリッピング・ポートレットに表示するWebページのセクションの選択」

- 5.2.3項「Webクリッピング・ポートレットのプロパティの設定」

5.2.1 ページへのWebクリッピング・ポートレットの追加

Webクリッピング・ポートレットをOracle Portalページに追加する手順は、次のとおりです。

1. 「ページ・グループ」ポートレットにナビゲートします。デフォルトでは、「ページ・グループ」ポートレットは、「Portalビルダー」ページの「構築」タブにあります。

2. 「ページ」の「レイアウトと外観」セクションで、「ブラウズ」をクリックします。

3. 図5-1に、ページ・リストが表示された「ページ・グループ」タブを示します。Webクリッピング・ポートレットに追加するページについて、「操作」列の「編集」をクリックします。

図5-1 ページの選択

編集するページが表示されます。

4. Webクリッピング・ポートレットを追加するリージョンで、「ポートレットの追加」アイコンをクリックします。
図5-2に、そのページの一部を示します。

図5-2 ページへのポートレットの追加

5. 「ポートレットの追加」ページの「使用可能なポートレット」リストで、「ポートレット・ビルダー」リンクをクリックします。

6. 「Webクリッピング・ポートレット」リンクをクリックします。

7. 「OK」をクリックします。図5-3に示すように、Webクリッピングの新規インスタンスがポータル・ページに表示されます。

図5-3 ページに追加されたWebクリッピング・ポートレット

5.2.2 Webクリッピング・ポートレットに表示するWebページのセクションの選択

Webクリッピング・ポートレットに表示するWebページのセクションを選択するには、Webクリッピング・スタジオを使用します。Webクリッピング・スタジオを使用すると、次の操作を実行できます。

- Webコンテンツのブラウズ

- 選択したターゲット・ページのセクション化

- Webコンテンツの正確なクリップ部分の選択

- ポートレットとしてクリップされたコンテンツのプレビュー

- ポートレットとしてクリップされたコンテンツの保存

- ポートレット・プロパティの設定と更新されたポートレット情報の保存

Webクリッピング・ポートレットに表示するWebページのセクションを選択する手順は、次のとおりです。

1. 図5-4に示すように、Webクリッピング・ポートレットの上にある「デフォルトの編集」アイコンをクリックします。

図5-4 デフォルト設定の編集

「Webクリッピングの検索」ページが表示されます。

2. 図5-5に示すように、「URLロケーション」フィールドに、クリップするコンテンツにリンクするWebページの開始の位置を入力します。

図5-5 URLの指定

3. 「開始」をクリックします。
図5-6に示すように、Webクリッピング・スタジオに、指定したページが表示されます。

図5-6 Webクリッピング用のコンテンツを含むページのブラウズ

ブラウザ・バーのURLが変更されます。変更前:

http://host:port/portal/page?_dad=portal&_schema=PORTAL...

変更後:

http://host:port/portalTools/webClipping...

4. クリップするコンテンツを含むページをブラウズします。
このWebページでハイパーリンクをクリックすると、使用するナビゲーション・リンクが記録されます。

注意:

最終的なWebクリッピングの要因とならないブラウズ操作は、破棄されます。表示モードの間は、重要なブラウズ操作のみが後の再生用に記録され、破棄されたリンクは参照されません。

HTTPのBasic認証またはDigest認証が必要なWebサイトの場合は、ユーザー名とパスワード情報をリクエストするフォームが表示されます。このエンコードされた認証情報は、ブラウズ情報の一部として記録されます。

5. クリップするコンテンツを含むページを表示した後は、Webクリッピング・スタジオのバナーで、図5-7に示すように、「セクション」をクリックします。

図5-7 ターゲットのWebページのセクション化

図5-8に示すように、セクション化によって、ターゲットのWebページがクリップ可能な複数のセクションに分割されます。「セクション」をクリックした後は、表示されたページのリンクがブラウズできなくなります。ナビゲーションを続行する場合は、Webクリッピング・スタジオのバナーで「セクション解除」をクリックします。

図5-8 セクション化されたターゲットのWebページ

6. クリップするWebコンテンツのセクションの左上にある「選択」をクリックします。
クリッピングとして一度に選択できるセクションは、1つのみです。

注意:

使用可能なセクションの数を増やすには、Webクリッピング・スタジオのバナーで「セクション縮小」をクリックします。たとえば、ネストした表の1レベルをドリルダウンするには、「セクション縮小」をクリックします。使用可能なセクションの数を減らすには、「セクション拡大」をクリックします。

7. Webクリッピング・スタジオに、選択したセクションのプレビューが表示されます。目的のセクションが表示された場合は、Webクリッピング・スタジオのバナーで「選択」をクリックします。Webクリッピング・スタジオに、「Webクリッピングの検索」ページがクリッピングのプロパティとともに表示されます。
ポートレットにクリップされたセクションを使用しない場合は、「選択解除」をクリックして、そのセクションを含むページに戻ります。そのページで別のセクションを選択するか、「セクション解除」をクリックして、別のページにナビゲートできます。

セクションには、空白のみを含み、データを含まないものがあります。たとえば、Webページにテキストもイメージも含まないHTML <DIV>タグが含まれている場合があります。データを含まないセクションで「選択」をクリックすると、Webクリッピングにプレビューが表示されますが、プレビューは正確に空白のみを表示します。この場合、プレビュー・ページで「選択解除」をクリックしてセクション化されたページに戻ります。次に、データを含むセクションを選択します。

8. 「Webクリッピングの検索」ページで「OK」をクリックすると、使用するページのWebクリッピング・ポートレットに、選択されたWebクリッピングが表示されます。(このページで、デフォルトのプロパティを編集できます。詳細は、5.2.3項「Webクリッピング・ポートレットのプロパティの設定」を参照してください。
図5-9に、Webクリッピング・ポートレットに追加されたコンテンツを示します。

図5-9 ポータル・ページのWebクリッピング・ポートレットに追加されたクリップされたコンテンツ

Webクリッピング・ポートレットの「リフレッシュ」リンクは、元のWebサイトから新しいデータを取得します。「ポートレット・リフレッシュ」・リンクはポートレットをリロードしますが、有効期限の設定によってはキャッシュからデータを取得する場合もあります。

5.2.3 Webクリッピング・ポートレットのプロパティの設定

様々なポートレット設定を編集することによって、Webクリッピング・ポートレットの外観を変更し、エンド・ユーザーとポートレットとの対話方法を指定できます。

Webクリッピング・ポートレットのプロパティを設定する手順は、次のとおりです。

1. 目的のセクションを選択して、Webクリッピング・スタジオのバナーで「選択」をクリックします。図5-10に示すように、Webクリッピング・スタジオに、「プロパティ」セクションのある「Webクリッピングの検索」ページが表示されます。

図5-10 「Webクリッピングの検索」ページの「プロパティ」セクション

2. リンク・ターゲットをポートレット内に表示する場合は、「プロパティ」セクションの「URLリライト」リストから「インライン」を選択し、ブラウザでリンク・ターゲットに現在のPortalページを差し替える場合は、「なし」を選択します。

3. 「タイトル」フィールドに、ポートレット・バナーに表示するタイトルを入力します。

4. 「説明」フィールドに、ポートレットの説明を入力します。

5. 「タイムアウト(秒)」フィールドに、Webクリッピング・プロバイダが、コンテンツをクリップしたWebページへの接続を試みる時間(秒)を入力します。

6. 「有効期限(分)」フィールドに、キャッシュされたコンテンツの有効時間(分)を入力します。指定した時間内に発生したポートレット・コンテンツへのリクエストは、キャッシュによって処理されます。
キャッシュの期限が切れた後、ポートレット・コンテンツへのリクエストは、ポートレットのWebクリッピング・データ・ソースからコンテンツを取得して処理されます。キャッシュも、このコンテンツでリフレッシュされます。

7. Webクリッピング・ポートレット用のコンテンツをクリップしているときに、フォームに情報を入力した場合は、「入力のパラメータ化」セクションを使用できます。「クリックして、パラメータ化を開始します。」チェック・ボックスを選択し、Webクリッピング・ポートレットのコンテンツに関連付けられたパラメータをカスタマイズします。次の手順を実行します。

1. 「パラメータ」リストから、カスタマイズするパラメータを選択します。

2. ポートレットをパーソナライズするときに、パラメータに独自の値を指定することをエンド・ユーザーに対して許可する場合は、「パーソナライズ可能」リストから、そのパラメータを選択します。許可しない場合は、「なし」を選択します。

3. 「表示名」フィールドに、パラメータに表示する名前を入力します。

4. 「デフォルト値」フィールドに、パラメータにデフォルトで使用する値を入力します。

パーソナライズ・パラメータの例は、5.4.3項「Webクリッピング・ポートレットのパーソナライズ」を参照してください。

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

5.3 シングル・サインオンを使用した認証されているWebコンテンツの統合

この項では、OracleAS Single Sign-Onを利用して、認証が必要な外部WebサイトからのコンテンツをWebクリッピング・ポートレットに統合する方法を示す例を説明します。

この例では、Oracle Metalink(外部アプリケーション)内の保護されたページをWebクリッピング・ポートレットに組み込みます。

外部アプリケーションを統合する手順は次のとおりです。

1. 次の手順を実行して認証情報を指定し、Oracle Portalに外部アプリケーションを設定します。詳細は、『Oracle Fusion Middleware Oracle Portal管理者ガイド』を参照してください。

1. SSO管理権限のあるユーザー(たとえばorcladminユーザー)として、Oracle Portalにログインします。

2. 「外部アプリケーションの管理」ポートレットにナビゲートします。(「管理」タブをクリックしてから「ポータル」サブタブをクリックします。右側の列にある「SSO Server管理」セクションで「外部アプリケーションの管理」を選択します。

3. 「外部アプリケーションの追加」をクリックします。

4. 「外部アプリケーションの作成」ページの「アプリケーション名」フィールドに、アプリケーションの名前(たとえばMetalink)を入力します。

5. 「ログインURL」については、アプリケーションにログインするためのURL(たとえば、http://metalink.oracle.com/metalink/plsql/sit_main.showSitemap?p_showTitle=0)を入力します。URLを特定するには、ブラウザで目的のアプリケーションにナビゲートし、そのURLを書き留めておきます。
フォーム・ベースのアプリケーションの場合は、外部アプリケーションのログイン・ページのソースを表示し、ログインでアクセスするURLを書き留めておきます。

6. 「ユーザー名/IDフィールド名」には、外部アプリケーションでユーザー名に使用されるフィールド名を入力します。このフィールド名は、目的のページのソースの表示によって変わります。認証方式としてBasic認証を使用する場合は、このフィールドに入力する必要はありません。MetaLinkの場合は、このフィールドには何も入力する必要がありません。

7. 「パスワード・フィールド名」には、外部アプリケーションでパスワードに使用されるフィールド名を入力します。このフィールド名は、目的のページのソースの表示によって変わります。認証方式としてBasic認証を使用する場合は、このフィールドに入力する必要はありません。MetaLinkの場合は、このフィールドには何も入力する必要がありません。

8. 認証方式として「Basic認証」を選択します。
図5-11に、「外部アプリケーションの作成」ページの一部を示します。

図5-11 外部アプリケーションの作成

9. 「追加フィールド」セクションでは、外部アプリケーションのログイン・フォームとともに送信される任意の追加フィールドの名前および値を入力できます。リダイレクションURLを示すフィールド名を指定するには、「フィールド名」にredirectFieldNameと入力します。この例では、さらに他のフィールドに入力する必要はありません。図5-12に、「追加フィールド」セクションを示します。

図5-12 リダイレクションの指定

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

11. Oracle Metalinkを使用して資格証明をテストするには、「外部アプリケーションの管理」ページで、作成したばかりのアプリケーション名をクリックします。次に、「外部アプリケーション・ログイン」ページで、Oracle Metalinkのユーザー名およびパスワードを使用し、アプリケーションOracle Metalinkにログインします。
「外部アプリケーションの管理」ページで、「閉じる」をクリックします。

OracleAS Single Sign-On Serverおよび外部アプリケーションの詳細は、Oracle Application Server Single Sign-On管理者ガイドを参照してください。

2. 次の手順を実行して、Webクリッピング・ポートレットについて、新しいWebクリッピング・プロバイダを作成します。

1. 「管理」タブをクリックしてから「ポートレット」タブをクリックします。

2. 「プロバイダの登録」を選択します。

3. 「プロバイダの登録」ページで、「名前」にwebClippingMetalinkと入力し、「表示名」にWeb Clipping Metalinkと入力します。タイムアウトおよびタイムアウト・メッセージの値を入力します。「実装スタイル」に対して「Web」を選択します。

4. 「次へ」をクリックします。

5. 「接続の定義」ページの「一般プロパティ」セクションで、「URL」に、次のように入力します。

http://host:port/portalTools/webClipping/providers/webClipping

host:portは、プロバイダがあるホストおよびポートを指しています。これはOracle PortalのURLに相当します。

6. ユーザーの識別については、「ユーザーのIDを、Webプロバイダのアプリケーション内の異なる名前にマップする必要があります。また、Webプロバイダは、ブラウザ・セッションを確立するために、外部アプリケーション・ログインを必要としますこのオプションを選択する場合、下の外部アプリケーションIDを指定してください。」を選択します。

7. 「外部アプリケーションID」では、「値リスト」アイコンをクリックし、追加した外部アプリケーションを選択します。
図5-13に、「接続の定義」ページの上部を示します。

図5-13 Webクリッピング・プロバイダに対する外部アプリケーションの指定

8. 「ユーザー/セッション情報」セクションで、「ユーザー」を選択し、ユーザー固有の情報をプロバイダに送信します。「ログイン頻度」には、「ユーザー・セッションごとに1回」を選択します。

9. プロキシ設定が正しいことを確認します。プロキシ・サーバーを使用して中間層からWebプロバイダに接続する場合は、「中間層」にプロキシ・サーバーを入力します。
プロキシ・サーバーを使用してPortalリポジトリからWebプロバイダに接続する場合は、「Portalリポジトリ」にプロキシ・サーバーを入力します。

通常、Oracle PortalとWebクリッピングURLは同じ中間層を指すので、この手順は不要です。

10. 「終了」をクリックします。

11. 「登録確認」ページで、登録が成功した場合は、「OK」をクリックします。

3. 次の手順を実行し、作成したばかりのWeb Clipping Metalinkプロバイダを使用して、ポートレットをページに追加します。

1. Oracle Portalで、ポートレットを追加するページにナビゲートします。

2. Webクリッピング・ポートレットを追加するリージョンで、「ポートレットの追加」アイコンをクリックします。

3. 「ポートレットをリージョンに追加」ページで、Web Clipping Metalinkを検索します。これは「ポートレット・ステージング領域」にあります。このポートレットをクリックして「選択したポートレット」ボックスに移動します。

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

ポートレットの追加方法の詳細は、5.2.1項「ページへのWebクリッピング・ポートレットの追加」を参照してください。

4. Metalinkを表す外部アプリケーションの資格証明を入力していない場合は、ポートレットに「ログイン情報を更新します。」リンクが含まれます。リンクをクリックして資格証明を入力します。次に、「OK」をクリックします。

5. 次の手順を実行して、Webクリッピング・ポートレットに表示するWebページのセクションを選択します。

1. Webクリッピング・ポートレットの「デフォルトの編集」アイコンをクリックします。
「Webクリッピングの検索」ページが表示されます。

2. 「URLロケーション」フィールドに、外部アプリケーションのデフォルトURLが表示されます。これを、クリップするコンテンツにリンクする開始Webページのロケーションに変更します。この場合はhttp://www.metalink.oracle.comと入力します。

3. 「開始」をクリックします。Webクリッピング・スタジオに指定したページが表示されます。Oracle Metalinkにログインします。

4. クリップするコンテンツを含むページをブラウズします。クリップするコンテンツを含むページを表示してから、Webクリッピング・スタジオのバナーの「セクション」をクリックします。図5-14に、Webクリッピング・スタジオに表示される外部アプリケーションを示します。

図5-14 Webクリッピング・スタジオでの外部アプリケーション

5. クリップするWebコンテンツのセクションの左上にある「選択」をクリックします。

6. Webクリッピング・スタジオに、選択したセクションのプレビューが表示されます。目的のセクションが表示された場合は、Webクリッピング・スタジオのバナーで「選択」をクリックします。
図5-15に示すように、Webクリッピング・スタジオに、「Webクリッピングの検索」ページがクリッピングのプロパティとともに表示されます。

図5-15 外部アプリケーションのプロパティ

7. 「Webクリッピングの検索」ページで、「URLリライト」リストから「インライン」を選択し、リンク・ターゲットの表示先を、新しいブラウザ・ウィンドウではなくポートレット内に指定します。「OK」をクリックすると、図5-16に示すように、使用するページのWebクリッピング・ポートレットに、選択されたWebクリッピングが表示されます。

図5-16 ポートレットに表示される外部アプリケーション

これで、認証が必要なページからのWebクリッピングの場合でも、ポートレットで使用できます。

1つのプロバイダに関連付けることができる外部アプリケーションは1つのみです。外部アプリケーションごとに新規のプロバイダを登録する必要があります。各ポータル・ユーザーは、ページ設計者の資格証明ではなく、そのシステムでの自分のユーザー名およびパスワードを使用して、認証されているコンテンツにアクセスします。

5.4 ユーザーがパーソナライズできるWebクリッピングの追加

この項では、エンド・ユーザーがWebクリッピング・ポートレットのコンテンツのビューをパーソナライズできるようにする方法の例を説明します。

この例では、次のタスクを実行します。

- 5.4.1項「個人用ページへのWebクリッピング・ポートレットの追加」

- 5.4.2項「OTNでのクリッピングの選択」

- 5.4.3項「Webクリッピング・ポートレットのパーソナライズ」

5.4.1 個人用ページへのWebクリッピング・ポートレットの追加

管理者は、すべてのユーザーに対して個人用ページを設定できます。ここでは、管理者がその機能を使用できると想定しています。このタスクでは、Webクリッピング・ポートレットを個人用ページに追加する方法を説明します。これを行うには、次の手順を実行します:

1. 「ページ・グループ」ポートレットの「作業場所」フィールドで、個人用ページが含まれるページ・グループを選択します。
デフォルトでは、ページ・グループ・ポートレットは「Portalビルダー」ページの「構築」タブにあり、「個人ページ」ページは「共有オブジェクト」ページ・グループにあります。

2. 「ページ」セクションで、「個人用ページ」を選択します。ユーザー名の最初の文字のノードを開きます。「個人ページ」ページ(図5-17)を表示するには、ページ・グループ・ポートレットで「表示」リンクをクリックします。

図5-17 「ページ・グループ・マップ」のノードの展開

3. ページ名をクリックします。個人用ページが表示されます。

4. 任意のポートレット・リージョンで、「ポートレットの追加」アイコンをクリックします。

5. 「ポートレットの追加」ページで、「Webクリッピング・ポートレット」リンクをクリックします。
デフォルトでは、Webクリッピング・ポートレットは、ポートレット・リポジトリの「Portalビルダー」ページにあります。このページが見つからない場合は、「検索」フィールドを使用してポートレットを検索します。

6. Webクリッピング・ポートレットが「選択したポートレット」リストに追加されます。「OK」をクリックします。

5.4.2 OTNでのクリッピングの選択

このタスクでは、Oracle Technology Network (OTN)にナビゲートして特定の情報を検索し、その結果をポートレットに対するクリッピングとして選択します。これを行うには、次の手順を実行します:

1. Webクリッピング・ポートレットの「デフォルトの編集」アイコンをクリックします。

2. Webクリッピング・スタジオの「Webクリッピングの検索」ページにある「URLロケーション」フィールドに、次のように入力します。

http://www.oracle.com/technology/products/ias/portal/index.html

「開始」をクリックします。OTNに、Portal Centerのページが表示されます。

3. ページ上部にある「検索」フィールドに検索文字列を入力します。この例では、"web clipping portlet"(引用符も含む)と入力して、「検索」をクリックします。
検索結果は、図5-18に示すようにWebクリッピング・スタジオに表示されます。

図5-18 OTNでの情報の検索

4. 「セクション」をクリックします。図5-19に示すように、Webクリッピング・スタジオによって、ターゲットのWebページがクリップ可能な複数のセクションに分割されます。

図5-19 ターゲットのWebページのセクション化

5. 検索結果の左上隅にある「選択」をクリックします。
検索結果のセクションのプレビューが表示されます。

セクションには、空白のみを含み、データを含まないものがあります。たとえば、Webページにテキストもイメージも含まないHTML <DIV>タグが含まれている場合があります。データを含まないセクションで「選択」をクリックすると、Webクリッピングにプレビューが表示されますが、プレビューは正確に空白のみを表示します。この場合、プレビュー・ページで「選択解除」をクリックしてセクション化されたページに戻ります。次に、データを含むセクションを選択します。

6. 「選択」をクリックして、検索結果のセクションが、クリップするセクションであることを確認します。

7. 「Webクリッピングの検索」ページで「OK」をクリックすると、使用するページのWebクリッピング・ポートレットに、選択されたWebクリッピングが表示されます。図5-20に、ページに表示されたWebクリッピングを示します。

図5-20 Webクリッピング・ポートレットに表示された選択されたWebクリッピング

5.4.3 Webクリッピング・ポートレットのパーソナライズ

このタスクでは、Webクリッピング・ポートレットのプロパティを編集して、エンド・ユーザーがポートレットに様々な検索結果を表示できるようにします。そのためには、次のタスクを実行します。

1. 図5-21に示すように、追加したWebクリッピング・ポートレットの上にある「デフォルトの編集」アイコンをクリックします。

図5-21 Webクリッピング・ポートレットの「デフォルトの編集」のクリック

2. 「Webクリッピングの検索」ページで、「プロパティ」セクションにある次の項目を変更します。

- 「URLリライト」リストから「インライン」を選択し、リンク・ターゲットの表示先を、新しいブラウザ・ウィンドウではなくポートレット内に指定します。

- 「タイトル」フィールドに、OTN Searchと入力します。このタイトルは、Webクリッピング・ポートレットのヘッダー、およびユーザーがWebクリッピングのパラメータをパーソナライズできるページに表示されます。

図5-22に、「Webクリッピングの検索」ページの「プロパティ」セクションおよび「入力のパラメータ化」セクションを示します。

図5-22 Webクリッピング用のプロパティの設定

3. ポートレットに表示されるコンテンツは、OTNの検索フィールドに情報を入力することによって生成されるため、検索で使用するパラメータをカスタマイズして、エンド・ユーザーによる独自の検索文字列の指定を許可できます。
「入力のパラメータ化」セクションで、「クリックして、パラメータ化を開始します。」チェック・ボックスを選択します。

4. パラメータ表で、次の変更を行います。

- 「パラメータ」列で、リストからp_Queryを選択します。

- 「パーソナライズ可能」列で、リストからParam1を選択します。必要に応じて、さらにprovider.xmlファイルに手動でパラメータを追加できます。

- 「表示名」列に、OTN Searchと入力します。

- 「デフォルト値」に"web clipping portlet"と表示されていることを確認し、適切なパラメータを選択していることを確認します。

図5-23に、パラメータ表を示します。

図5-23 ユーザー入力に対するパラメータの指定

5. 「OK」をクリックして、使用するページのWebクリッピング・ポートレットにデフォルトの検索結果を表示します。

6. 「ビューの編集」セクションで、「ページの表示」をクリックします。

7. 図5-24に示すように、Webクリッピング・ポートレットのヘッダーで、「パーソナライズ」をクリックします。

図5-24 Webクリッピング・ポートレットのヘッダーにある「パーソナライズ」のクリック

8. 表示されたページで、「入力」セクションにスクロールします。検索文字列のパラメータ・フィールドに、このパラメータの表示名に指定したOTN Searchが表示されていることに注意してください。「OTN Search」フィールドには、様々な検索文字列を入力します。たとえば、図5-25に示すように、OmniPortlet 2004と入力します。

図5-25 パラメータに対する入力の指定

9. 「OK」をクリックします。
これで、Webクリッピング・ポートレットには、図5-26に示すように、OmniPortlet 2004の情報についてOTNで実行した検索の結果が表示されます。

図5-26 ユーザーが入力したパラメータに基づく新しいWebクリッピングの結果

5.5 WebクリッピングOpen Transport APIの使用

カスタムの認証方法をサポートするには、ユーザーはWebクリッピングTransport APIを使用できます。カスタムの認証方法をサポートするためにWebクリッピング・トランスポート・レイヤーを拡張するには、ユーザーが次の実装およびデプロイの手順を実行する必要があります。

実装

ユーザーは独自のトランスポート・クラスを実装できます。

- ユーザーはoracle.portal.wcs.transport.http.HttpTransportLiaisonインタフェースの2つのユースケースについて、オーバライドを提供できます。Webクリッピングでは、このインタフェースを使用してHTTPトランスポート・レイヤーが抽象化されます。デフォルトでは、以下の実装によって、このインタフェースの2つのユースケースがマニフェストされます。

- HttpClientStudioTransportLiaisonは、Webクリッピング・スタジオ・モードでHTTPトランスポートを処理します。

- HttpClientProviderTransportLiaisonは、Webクリッピング・プロデューサ表示モードでHTTPトランスポートを処理します。

その他の認証方法をサポートするには、スタジオとプロバイダの両方のHttpClientTransportLiaison実装についてaddRequestHeadersメソッドをオーバーライドし、独自の認証固有ヘッダーを追加する必要があります。実装の詳細は、Oracle WebLogic Server Webクリッピング・トランスポートAPIリファレンスを参照してください。

- ユーザーは、新しいサブクラスをコンパイルして、それをjarファイルにパッケージ化する必要があります。新しいサブクラスをコンパイルするには、以下のコマンドを使用できます。
javac -classpath path_to_wcejar -d classes/

path_to_wcejarは、wce.jarファイルのパスを指します。

jarファイルを作成するには、たとえば、classesディレクトリから次のコマンドを使用できます。

jar cvf ../mytransport.jar

mytransport.jarは、ユーザーが作成するjarファイルを指します。

デプロイ

ユーザーは、カスタムの認証方式をサポートするためにjarファイルをデプロイする必要があります。

- ユーザーは、jarファイルを実行時にWebクリッピング・プロデューサで使用されるクラス・パスまたは共有ライブラリに置く必要があります。

- ユーザーは、HttpClientProviderTranportiaisonおよびHttpClientStudioTransportLiaisonに定義されたコンテキスト・パラメータに以下の変更を行うことにより、Webクリッピング・プロデューサのweb.xmlファイルにトランスポート・クラスを登録する必要があります。

- oracle.webclipping.provider.TransportLiaisonClassのパラメータを、HttpClientProviderTransportLiaisonクラスから拡張された新しいクラス名に変更します。

- oracle.webclipping.studio.TransportLiaisonClassのパラメータを、HttpClientStudioTransportLiaisonクラスから拡張された新しいクラス名に変更します。

- 最後に、変更を有効にするにはプロデューサのサーバーを再起動する必要があります。

5.6 URLベースのポートレットからの移行

provider.xmlファイルに格納されているURLベースのポートレットを、Webクリッピング・ポートレットに移行できます。このようなWebクリッピング・ポートレットはWebクリッピング・リポジトリにありますが、これらのポートレットには、provider.xmlファイルに定義されているポインタを使用してアクセスできます。

移行プロセスでは、このようなURLベースのポートレットによって使用される元のファイルは変更されません。

この項では、次のタスクを説明します。

- 5.6.1項「移行の準備」

- 5.6.2項「移行の実行」

- 5.6.3項「移行後の構成」

- 5.6.4項「移行されたポートレットの管理」

- 5.6.5項「URLベースのポートレットからの移行における制限事項」

5.6.1 移行の準備

移行を開始する前に、次の手順を行います。

1. 移行対象のURLベースのポートレットを含んでいるWebプロバイダが、有効であることを確認します。移行プロセスは、無効なURLベースのポートレットでは成功しません。念のため、URLベースのポートレットがPortalページで使用され正常に表示されているかどうかを確認します。

2. 既存のURLベースのポートレットを検索します。
移行ツールを実行する前に、サービス・デプロイ・プロパティ・ファイルのファイル・パスを確認します。このファイルには、URLサービス定義があるprovider.xmlファイルへのパスなど、サービスの全構成要素へのポインタが収容されています。

サービスごとに1回ずつ、移行ツールを実行する必要があります。複数のサービスがある場合は、移行時に使用するサービス・デプロイ・プロパティ・ファイルのリストをくまなく検索します。

サービス・デプロイ・プロパティ・ファイルの場所は、個々のデプロイ状況によって異なります。通常、JPDKサンプルでは次のとおりです。

<Domain_home>/servers/WLS_PORTAL/tmp/_WL_user/jpdk

Oracle Portalに付属するJPDKサンプルは、これと同じディレクトリ・パスにあります。

サンプルのサービス・デプロイ・プロパティ・ファイルのリストには、次のものが含まれています。

- urlbasicauth.properties

- urlexternalauth.properties

- urlnls.properties

- urlparams.properties

- urlsample.properties

- urlssl.properties

移行プロセスでは、古いURLベースのポートレットを格納するprovider.xmlファイルのみでなく、サービス・デプロイ・プロパティ・ファイルが、ファイル・プリファレンス・ストアにある以前のすべてのカスタマイズとともに、Webクリッピング・アプリケーションにコピーおよびインポートされます。これらのURLベースのポートレットによって使用される元のファイルは変更されないため、これらのファイルはバックアップする必要がありません。これらはURLベースのポートレットとして引き続き使用できます。

3. 保持するURLベースのポートレットのタイプに応じて、次のようにポートレットの再配置が必要な場合があります。

- Webクリッピングは、URLベースのポートレットが提供するXMLフィルタ機能の類似機能を提供しないので、XMLフィルタを使用するURLベースのポートレットをすべて、移行されない別のサービス・デプロイ(およびprovider.xmlファイル)に隔離します。

- 外部アプリケーションを使用するURLベースのポートレットを移行する際に制限事項があることがわかり、URLベースのポートレットのそのサブセットを移行するのはコストが高すぎると思われる場合もあります。このような場合、移行されない別のサービス・デプロイ(およびprovider.xmlファイル)にポートレットを隔離できます。

4. 移行ツールの実行を予定しているマシンが、URLベースのポートレット・プロバイダとWebクリッピング・プロバイダの両方について、サービス・デプロイ・ファイルおよびデプロイ・ファイルが指すファイルにローカルでアクセスできることを確認します。

5. Webクリッピング・リポジトリとHTTPプロキシの両方が構成され、プロキシ設定がURLベース・ポートレットのデプロイによって使用されるプロキシ設定と一致することを確認します。認証が必要なプロキシ・サーバーがある場合、Webクリッピング・プロバイダは、「認証が必要」を有効にして構成する必要があります。グローバル・ログイン(「すべてのユーザーに次のログインを使用」)を使用するようにログイン・スキームを設定します。
次の場所にある「プロバイダ・テスト・ページ: Webクリッピング」をチェックします:

http://host:port/portalTools/webClipping/providers/webClipping

プロキシ認証の設定の詳細は、『Oracle Fusion Middleware Oracle Portal管理者ガイド』を参照してください。

6. Portalツール・アプリケーションが実行されているWLSインスタンスを停止します。この手順により、移行対象のファイルが変更されないようになります。移行が完了するまでは、WLSインスタンスを再起動しないでください。
PortalインスタンスのWLSインスタンスを停止するには、次のコマンド(Oracle\Middleware\user_projects\domains\<Domain Name>\binディレクトリから)を使用します。

stopWebLogic.cmd

ドメイン名は、ポータルに設定したドメインを参照します。

5.6.2 移行の実行

移行ツールはサービス・デプロイ・プロパティ・ファイルを解析し、移行対象となるURLベースのポートレットのXML定義を含んでいるprovider.xmlファイルを検索します。

このツールにより、プロバイダ定義クラスがURLProviderDefinitionからWcProviderDefinitionに変更されます。provider.xmlファイルに定義されたURLベースのポートレットごとに、同等のクリッピング定義が作成され、Webクリッピング・リポジトリに挿入されます。次に、移行対象のポートレットに対応するPortletDefinition XMLの部分が、WcPortletDefinitionをそのクラスとして使用する新しいものに置き換えられます。置き換えられたXMLの部分には、新たに挿入されたクリッピング定義のポインタとなるクリップIDが含まれています。

新しいPortletDefinition XMLの部分には、URLPortletDefinitionに含まれていたのとは異なる情報が入ってきます。つまり、移行ツールは、URLを使用してheaderTrimTagおよびfooterTrimTagにアクセスするのみでなく、同等のWebクリッピング定義の生成も行います。この定義はWebクリッピング・リポジトリ内に格納され、クリップIDを使用してprovider.xmlファイルからのみアクセスできます。残されている情報はタイトルと説明のみです。クリッピング変更の手順については、5.2.3項「Webクリッピング・ポートレットのプロパティの設定」を参照してください。

ポートレットを移行するには、次の手順に従います。

1. 次のように環境変数を設定します。

- UNIXの場合は、オペレーティング・システムが32ビットか64ビットであるかに応じて、LD_LIBRARY_PATHをInstall_home/libまたはInstall_home/lib32に設定します。

- Windowsの場合は、PATHをInstall_home\binに設定します。

2. ORACLE_HOME/portal/jlibディレクトリに移動します。

3. 次のコマンドを使用してWebクリッピングにポートレットをインポートします。

java -Doracle.ons.oraclehome=ORACLE_HOME -jar wcwebdb.jar -import -from urlservices webclip_depprop urlsvc_depprop

この例のパラメータの意味は次のとおりです。

- ORACLE_HOMEは、Oracleアプリケーションがインストールされているディレクトリを参照します。

- webclip_deppropは、Webクリッピング・サービス・デプロイ・プロパティ・ファイルへのパスを参照します。このパスは通常、次のようになります。

MW_HOME\user_projects\domains\<DomainName>\servers\WLS_PORTAL\tmp\_WL_user\portalTools_11.1.1.1.0\kjdcke\war\WEB-INF\deployment

Inst_Homeは、Portalがインストールされている場所を参照します。WLS_PORTALは、Portalツール・アプリケーションがデプロイされたWLSインスタンスを参照します。

- urlsvc_deppropは、移行対象となるURLベースのポートレットを指す、URLベースのポートレットのサービス・デプロイ・プロパティ・ファイルのパスを参照します。

たとえば、URLベースのポートレットがWindowsの次のディレクトリにデプロイされているとします。

MW_HOME\user_projects\domains\<DomainName>\servers\WLS_PORTAL\tmp\_WL_user\\portalTools_11.1.1.1.0\kjdcke\war\WEB-INF\deployment\providers

5.6.3 移行後の構成

URLベースのポートレットをすべて移行した後は、次の手順を実行します。

1. プロバイダをホスティングするWLSインスタンスを起動します。
WLSインスタンスを起動するには、次のコマンドを使用します。

startWeblogic.cmd

2. URLベースのポートレットが登録されていたすべてのPortalインスタンスを更新します。Portalナビゲータに移動し、以前登録したURLベースのポートレット・プロバイダを検索します。「登録の編集」をクリックしてから「接続」タブをクリックし、新たに移行されたプロバイダに接続するように接続情報を編集します。ポートレットの登録方法に応じて、次のいずれかの手順を実行します。

- 以前にサービスIDメカニズムを使用してURLベースのポートレット・プロバイダを登録している場合は、プロバイダURLは次のようになります。

http://host:port/jpdk/jpdk/providers

この場合、「サービスID」フィールドにはすでにurn:someserviceが含まれているので、ここではプロバイダURLの値を次のように更新するのみで済みます。

http://host:port/portalTools/webClipping/providers

- 以前に、サービスIDを含んだプロバイダURLを使用してURLベースのポートレット・プロバイダを登録している場合は、プロバイダURLは次のようになります。

http://host:port/jpdk/jpdk/providers/service_id

この場合、次のようにプロバイダを更新する必要があります。

http://host:port/portalTools/webClipping/providers/service_id

通常、これ以外の登録詳細事項は現状のままで構いません。ただし、移行されたポートレットのインライン・レンダリング機能を使用する予定の場合は、「ログイン頻度」に「ユーザー・セッションごとに1回」を選択する必要があります。

3. 移行への準備で変更したHTTPプロキシ認証設定をリストアします。移行プロセスで、URLベースのポートレットはWebクリッピング・ポートレットに変換されました。Webクリッピング・プロバイダが当初「認証が必要」を有効にして構成されている場合は、移行されたURLベースのポートレットは正常に機能しない場合があります。
次の場所にあるテスト・ページをチェックします:

http://host:port/portalTools/webClipping/providers/webClipping

「ログイン・スキーム」を「すべてのユーザーに次のログインを使用」に設定していない場合は、現在のポータル・ユーザーをプロキシ・サーバーのユーザー名とパスワードにマッピングすることで認証を完了します。ポータル・ユーザーのプロキシ・サーバー資格証明は、Webクリッピング・ポートレットの「パーソナライズ」リンクからのみ入力できます。ただし、これは移行対象のURLベースのポートレットの「パーソナライズ」リンクでは行うことができません。回避策としては、一時的にWebクリッピング・ポートレットをページに追加して、ポートレットのパーソナライズでセキュリティ資格証明を入力することです。これが完了したら、一時ポートレットは削除して構いません。

4. URLベースのポートレットを使用していた各Portalページを参照して、ページにまだコンテンツが含まれていることを確認します。移行後、「整理された」はずのWebページが現在もそのまま表示されていることに気づくことがあります。これは移行ツールの制限事項に原因がある場合があります。これについては、5.6.5項「URLベースのポートレットからの移行における制限事項」を参照してください。この問題が発生する場合は、関連付けられたWebクリッピングを変更することでポートレットを編集します。

5.6.4 移行されたポートレットの管理

ポートレットを移行した後は、そのポートレットの編集にはこのprovider.xmlファイルを使用できなくなります。かわりに、5.2.3項「Webクリッピング・ポートレットのプロパティの設定」で説明したように、Webクリッピングを使用してポートレットを編集します。

次の点に注意してください。

- クリッピングに対して行う変更はすべて、ポートレットの定義レベルでクリッピングに影響し、このため、複数のPortalページに存在するそのポートレットのすべてのインスタンスに影響を与える可能性があります。

- 開発者がポートレットのレンダリングをインラインにし、「ログイン頻度」を「ユーザー・セッションごとに1回」にしてプロバイダを登録していたときにクリッピングを変更した場合、ページにこのポートレットのインスタンスを持つページ閲覧者が変更内容を確認するには、Oracle Portalをログアウトして再ログインする必要があります。この機能により、開発者が特定ポートレットを変更した場合にページ閲覧者がそのポートレットを使用することによる混乱が回避されます。

- クリップを含むページへのアクセスに先立ち外部アプリケーションの認証が必要なWebクリッピングのあるポートレットに対しては、このような認証情報はオフライン編集メカニズム(前の項目で詳述)では提供されません。このため、元のURLベースのポートレットが外部アプリケーションを使用する場合、移行されたクリッピングを変更する方法はありません。現在のところ、この制限事項に対する回避策はありません。

5.6.5 URLベースのポートレットからの移行における制限事項

この項では、URLベースのポートレットをWebクリッピングに移行する際における制限事項と、これら2つのメソッド間の相違点について説明します。次のような相違点があります。

- URLベースのポートレットとWebクリッピングは、クリッピングの定義方法において根本的な相違があります。
URLベースのポートレットは、headerTrimTagsおよびfooterTrimTagsタグを使用してHTMLページの特定セクションの開始と終了を定義します。一方、Webクリッピングは、HTMLタグ・パス(たとえば、html/body/table[2]/tr[2]/td[1])を使用して、ページ内にクリッピングを埋め込むために使用するHTMLタグを検索するパスを指定します。

URLベースのポートレットのヘッダーおよびフッター・トリム・タグの方が高い柔軟性を備えています(つまり、クリッピングがただ1つのHTMLタグ内に存在しなくてもよい)が、それほど堅牢ではありません。ページ内の同じ場所にクリッピングが見つからないときは、ファジー・マッチング・ロジックを適用してクリッピングを再度検索することができません。一方、Webクリッピングは、情報の重要な部分を格納してページ内のクリッピングを見つけます。クリッピングが同じ場所にない場合は、ファジー・マッチング機能を使用して同じHTMLページ内の他の候補を検索し、クリップが移動された可能性を明らかにします。

- 移行ツールは、headerTrimTagsおよびfooterTrimTagsをカプセル化したクリッピング(HTMLタグ)を検索しようとします。これが、URLベースのポートレットによって抽出された正しいHTMLではないことがよくあります。このような場合は、Webページ全体が移行されたWebクリッピング・ポートレットのコンテンツとして戻されます。これを修正するには、ポートレットを編集するのみです。

- Webクリッピングに移行されたURLベースのポートレットは、デフォルトではプロキシ認証をサポートしません。これは、URLベースのポートレットが本来プロキシ認証をサポートせず、Webクリッピングがポートレットの編集モードを保持するためです。この編集モードには認証情報を入力する機会がありません。この制限に対処するには、空のWebクリッピング・ポートレットを同じポータルに追加し、Webクリッピング・ポートレットの「パーソナライズ」リンクを使用して、プロキシ認証用のユーザー名およびパスワードを入力します。

- 外部アプリケーションを使用したURLベースのポートレットは、フル・ページのWebクリッピング・ポートレットとして移行されます。つまり、URLベースのポートレット定義によって以前に指定されたURLは、ログイン・プロセス後にフル・ページの表示に使用されるURLであるということです。以前に指定したheaderTrimTagsおよびfooterTrimTagsはすべて失われます。移行ツールがプロバイダ側を処理するのみであるのに対し、Portal側では外部アプリケーションが統合されるためです。移行時にどのPortalインスタンスにも接続しておらず、外部アプリケーションのフレームワークがPortal側にのみあるため、移行ツールはログインに必要な認証情報をフェッチしてHTMLを解析することができません。また、以前に指定したheaderTrimTagsおよびfooterTrimTagsを使用してHTMLタグ・パスを計算しWebクリッピング定義に格納することができません。
移行されたポートレットを管理する際、テスト・ページのリンクを介してクリッピングを編集できます。ただし、外部サイトに対して自身を認証するために外部アプリケーションを使用したURLベースのポートレットではこれはできません。現在のところ、この問題に対する回避策はありません。

- XMLフィルタを使用するURLベースのポートレットは、Webクリッピング・ポートレットに移行できません。Webクリッピング・ポートレットにはそのような機能がないためです。移行に進む前に、XMLフィルタを使用するURLベースのポートレットを、別のURLベースのポートレット・プロバイダにバックアップしてあることを確認します。プロバイダ・レベルで移行が行われるので、これは必ず実行してください。つまり、特定のprovider.xmlファイルにプロバイダ定義クラスとしてURLProviderDefinitionがあると解釈されると、このプロバイダ定義に含まれるポートレット定義がすべて移行されます。

5.7 Webクリッピングに関する現在の制限

この項では、Webクリッピングに関する現在の制限について説明します。リリースの最新の制限の詳細は、『Oracle Portalリリース・ノート』で確認してください。次のような制限があります。

- 接続しているサイトで、Cookieを操作するために多数のJavaScriptが使用されている場合、または、書き出されるHTML文書を変更するためにJavaScriptメソッドのdocument.writeが使用されている場合は、そのサイトからコンテンツをクリップできない場合があります。

- パートナ・アプリケーションと(mod_ossoを使用して)統合する場合、認証された方法ではそのパートナ・アプリケーションを介して直接クリップできません。ただし、パートナ・アプリケーションは、外部アプリケーション・フレームワークを介して使用できます。

- Webクリッピング・ポートレットを使用して、Oracle Portalページをクリップすることはできません。回避策として、データを提供しているポートレットを調査し、次のように適切に処置します。

- データベース・プロバイダのポートレットの場合、エクスポートまたはインポートを使用して、ポータル全体のページをコピーします。

- Webプロバイダのポートレットの場合、接続先ポータルで同じプロバイダを再登録し、そのポータルを手動で編集します。

- Webクリッピング・ポートレットを使用して、複数のフレームつまりフレームセットを含むWebページをクリップすることはできません。

- WebクリッピングとCascading Style Sheet (CSS)の使用に関して次の点に注意してください。

- CSSを使用するポートレットがWebページに複数ある場合、CSSが、スタイルの名前としてHTMLタグ名(<A>など)ではなく個別のスタイル名(OraRefなど)を使用してHTMLタグ内にスタイルを指定すれば、ポートレットが競合することはありません。

- あるポートレットがCSSを使用し、そのCSSが、スタイルの名前としてタグ名(<A>など)を使用してHTMLタグの動作を上書きし、同じページの2番目のポートレットがCSSを使用しない場合、2番目のポートレットは、最初のポートレットのCSSのスタイル指示によって影響されます。

- 同じページにある2つのポートレットが別々のCSSを使用し、各CSSがスタイル名としてHTMLタグ名(<A>など)を使用して相手のHTMLタグの動作を上書きする場合、表示されるスタイルはブラウザによって異なってきます。

- Webクリッピングは、次の方法でNLS設定がないかチェックします。

1. Webクリッピングは、文字セット属性がないかHTTPヘッダーのContent-Typeをチェックします。文字セット属性がある場合は、これがHTMLページの文字コードであるとみなします。

2. 文字セット属性がない場合は、ページのHTML METAタグをチェックして文字コードを突き止めます。

3. HTML METAタグがない場合、Webクリッピングは以前にブラウズされたページの文字セットを使用します。これがブラウズした最初のページである場合、デフォルトは文字コードISO-8859-1になります。

4. Content-TypeまたはMETAタグの文字セットの値がサポートされていない(たとえば、文字セットがNONEとして指定されている)場合、Webクリッピングは、以前にブラウズされたページの文字セットではなくデフォルトの文字セットISO-8859-1を使用します。

- Webクリッピング・ポートレットを使用するには、Windows 2000ではNetscape 7.0以上またはMicrosoft Internet Explorer 5.5以上、Windows XPではMicrosoft Internet Explorer 6.0以上を使用する必要があります。
使用するブラウザのバージョンがこれより古い場合は、JavaScriptエラーが発生する可能性があります。

トラブルシューティング情報は、付録B「ポートレットおよびプロバイダのトラブルシューティング」を参照してください。

6 Javaポートレットの作成

この章では、Javaポートレット仕様(JSR 168)、またはOracle JDeveloperのJSR 168 Javaポートレット・ウィザードおよびJavaポートレット・ウィザードを使用するOracle Portal Developer Kit-Java (PDK-Java)に基づいてJavaポートレットを作成する方法について説明します。この章の内容は、次のとおりです。

- 6.1項「Javaポートレット作成のガイドライン」

- 6.2項「Javaポートレット仕様(JPS)およびWSRPの概要」

- 6.3項「Oracle JDeveloperを使用したJPS準拠のポートレットの構築」

- 6.4項「Oracle PDK-Javaの概要」

- 6.5項「Oracle JDeveloperを使用したOracle PDK-Javaポートレットの構築」

- 6.6項「Oracle PortalでのWSRPおよびJPDKアプリケーションの設定」

この章で参照される多数の例のソース・コードは、PDK-Javaの一部として利用できます。PDK-Javaは、Oracle Technology Network (OTN)の「Oracle Portal Developer Kit (PDK)」ページからダウンロードできます:

http://www.oracle.com/technology/products/ias/portal/pdk.html

PDK-Javaを解凍すると、例がzip形式ファイルで次の場所にあります。

../pdk/jpdk/v2/src.zip

PDK-Java用の参照Javadocにアクセスするには、次の中からjpdk.warを抽出します。

../pdk/jpdk/v2/jpdk.ear

次に、jpdk.warを解凍します。Javadocは、apidocフォルダにあります。

6.1 Javaポートレット作成のガイドライン

Javaポートレット仕様(JPS)またはPDK-Javaのいずれかに基づいてJavaでポートレットを作成する場合は、この項の次のベスト・プラクティスに従ってください。

- 6.1.1項「表示モードに関するガイドライン」

- 6.1.2項「ポートレット内のナビゲーションのガイドライン」

- 6.1.3項「JavaScriptに関するガイドライン」

- 6.1.4項「モバイル・ポートレットのガイドライン」

6.1.1 表示モードに関するガイドライン

表示モードは、ポートレットの実行時機能をユーザーが確認できるようにするものです。JPSおよびPDK-Javaは、それぞれ独自のモードを提供しています。ポートレットをJPSにコーディングする場合は、PDK-Javaが提供するオプションのモードにマップする、または提供する他の任意の機能に対応する、カスタム・ポートレット・モードをportlet.xmlで宣言できます。たとえば、JPSポートレット用のJSR 168 Javaポートレット・ウィザードには印刷をコールするカスタム・モードが含まれ、これを使用して印刷用バージョンのポートレットを提供できます。カスタム・モードの定義は、特に、ポートレットを他のベンダーのポータル実装と相互運用する場合に役立ちます。

ポートレットには異なる表示モードがあり、表示方法と動作がそれぞれ異なります。次の各項では、これらの表示モードについて説明します。

- 6.1.1.1項「共有画面モード(JPSの場合は表示モード)」

- 6.1.1.2項「編集モード(JPSおよびPdk-Java)」

- 6.1.1.3項「デフォルト編集モード(JPSおよびPDK-Java)」

- 6.1.1.4項「プレビュー・モード(JPSおよびPDK-Java)」

- 6.1.1.5項「全画面モード(PDK-Java)」

- 6.1.1.6項「ヘルプ・モード(JPSおよびOracle Portal)」

- 6.1.1.7項「情報モード(JPSおよびPDK-Java)」

- 6.1.1.8項「リンク・モード(PDK-Java)」

6.1.1.1 共有画面モード(JPSの場合は表示モード)

ポートレットは共有画面モード(JPSでは表示モードと呼ばれます)を使用して、他のポートレットと同じページに表示されます。ポートレットといえば、ほとんどの人がこのモードを思い浮かべます。JPSポートレットには表示モードは必須で、その他はオプションです。

ポートレットを開発するときは、ポートレットに含まれるオブジェクトやポートレットがページを共有する他のポートレットなど、ページ上のポートレットの外観に影響を与える可能性のあるすべての要素を考慮する必要があります。Oracle Portalでは、共有画面モードのときはポートレットはHTMLの表のセル内にレンダリングされます。つまり、ポートレットには、HTML、プラグイン、Javaアプレットなどの他のテクノロジも含めて、表のセル内にレンダリング可能なコンテンツのみを表示できます。表のセルの実際のサイズは、ユーザー設定、ブラウザの幅、およびポートレットに表示されるコンテンツの量とスタイルによって異なります。

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

プレーンHTMLは最も基本的なポートレットのレンダリング方法であり、ポートレットの開発者に大きな柔軟性を提供します。リンク、フォーム、イメージ、表など、HTMLの表のセル内に表示できるほとんどの標準的なHTMLパラダイムを使用できます。HTMLが適切に作成されていない場合は、異なる複数のブラウザで表示したときに表示の一貫性がなくなり、ページの一部が表示されないこともあります。次のルールに従ってください。

- 標準HTMLを使用する。HTMLの正式な仕様は、W3Cにあります(詳細はhttp://www.w3.org/MarkUpを参照)。

- 閉じていないタグや不要なタグがないように注意する。ページはブラウザの動作の影響を受けるため、タグが正しく閉じていないとページの動作は予測不可能になります。weblint(http://www.weblint.org/)やHTML Tidy(http://www.w3.org/People/Raggett/tidy/)などのツールは、閉じていないタグや不要なタグの検出および修正に役立ちます。

- HTMLの表のセルに正しくレンダリングできる要素のみを使用する。一部の構造体は、表のセルに正しく表示されないという理由で使用できません。たとえば、フレームは表に挿入されると表示されません。

- ポートレットのコンテンツは簡潔にする。全画面のコンテンツを取得して、小さなポートレットから公開しないでください。ポートレットのコンテンツが小さくなりすぎて、小さなモニターではポートレットが使用不能になるのみです。全画面のコンテンツは、PDK-Javaの全画面モードで最適に表示されます。

- ポートレット内に固定幅のHTMLの表を作成しない。ユーザーのページに表示されるポートレットの列幅を事前に知る方法はありません。与えられた空間よりも広い空間がポートレットに必要な場合、特定のブラウザでは、他のポートレットとオーバーラップする可能性があります。

- 折り曲がらない長いテキスト行を避ける。固定幅の表を使用した場合と同様の結果になります。特定のブラウザでは、他のポートレットとオーバーラップする可能性があります。

- ページ・サイズ変更時の動作をチェックする。ブラウザ・ウィンドウをサイズ変更した際のポートレットの動作をテストし、ポートレットがブラウザ・ウィンドウの様々なサイズで動作することを確認してください。

- ブラウザのデフォルトのフォントが変更された場合の動作をチェックする。ブラウザのフォント・サイズはいつでも変更できることが必要です。ポートレットは、その変更に対応する必要があります。

また、使用するHTMLは、サイトのパフォーマンスに直接影響を与えます。ユーザーは、リクエストしたページの表示にかかる時間に基づいてパフォーマンスを判断します。ブラウザには、HTMLを解釈して表示するための時間が必要です。このため、次の点を考慮してください。

- 深くネストした表を避ける。深くネストした表は、古いバージョンのブラウザのパフォーマンスを大きく低下させます。Oracle Portalは、複数のレベルの表を描画してポートレットをレンダリングします。ポートレットが表の中で表を使用している場合、そのページのレンダリングには、かなり長い待機時間が必要な場合があります。

- 長く複雑なHTMLを避ける。ポートレットはページを他のポートレットと共有します。したがって、ポートレットの生成時間はページのパフォーマンス全体に大きく影響します。ポートレットが複雑なHTMLをレンダリングしたり、サード・パーティのアプリケーションなど外部リソースを待機する場合は、ページのレンダリングが大幅に遅くなることがあります。

6.1.1.1.2 ポートレットのレンダリングに関するCascading Style Sheetガイドライン

ページ上のそれぞれのポートレットのフォントと色は、ユーザーが選択したスタイル設定に一致する必要があります。このために、これらのスタイル選択は、各Oracle PortalページのCascading Style Sheet (CSS)を使用して自動的に埋め込まれます。その後、ポートレットは直接またはAPIを使用して、フォントと色の設定にアクセスします。

ブラウザによってCSS仕様の実装レベルが異なりますが、Oracle Portalは、この仕様の非常に基本的なサブセットを使用して、整合性のあるフォントと色を実現します。CSSの実装レベルによってブラウザ間でのページの一貫性が影響されることはありません。CSS使用に関するガイドラインは、次のとおりです。

- ハードコーディングではなくCSSを使用する。フォントと色のハードコーディングは非常に危険です。フォントと色をハードコーディングすると、ユーザーがページ・スタイルの設定を変更した場合に、ポートレットが不釣合いに見えることがあります。開発者はユーザーが設定するフォントや色を予測できないため、ユーザーが選択した背景色と同じフォント色でハードコーディングする可能性があり、この場合、ユーザーはポートレットを識別できなくなります。

- テキストの書式設定にはCSS APIを使用する。スタイルシートの定義はOracle Portalページの最上部にありますが、直接コールしないでください。かわりに、テキストの適切な書式設定のために用意されているAPIを使用してください。これによって、後でスタイルシートが変更された場合でもポートレットは正しく動作します。

- CSSを使用した絶対位置の設定は避ける。ユーザーは各自のポータル・ページをパーソナライズできるため、ポートレットが特定の位置に表示される保証はありません。

- アクセシビリティの標準に従う。必ず既存のアクセシビリティの標準に従って、スタイル・シートを記述してください(詳細はhttp://www.w3.org/TR/WCAG10-CSS-TECHS/を参照)。

6.1.1.2 編集モード(JPSおよびPdk-Java)

ポートレットは編集モードを備えており、これによってユーザーはポートレットの動作をパーソナライズできます。編集モードには設定のリストがあり、ユーザーはその設定を変更できます。設定には、タイトル、コンテンツの種類、書式、情報量、フォーム要素のデフォルト、およびポートレットの外観や内容に影響するあらゆる要素が含まれます。

通常、ポータル・ユーザーは、ポートレット・バナーの「パーソナライズ」をクリックしてポートレットの編集モードにアクセスします。ユーザーが「パーソナライズ」をクリックすると、同じブラウザ・ウィンドウに新しいページが表示されます。このポートレットは、通常、ポートレットの設定を選択するダイアログ・ボックスを表すWebページを作成します。設定を適用すると、自動的に元のページに戻ります。

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

次のガイドラインに従って、編集モードでユーザーに公開する内容を管理してください。

- ユーザーがポートレットのタイトルをパーソナライズできるようにする。同じポートレットが同じポータル・ページに複数回追加されることがあります。ユーザーがタイトルをパーソナライズできると混乱を避けることができます。

- キャッシュを使用する場合はコンテンツを無効化する。パーソナライズによってポートレットの表示やコンテンツに変更が生じた場合は、ポートレットのコンテンツが再生成され、キャッシュから戻されないことを確認する必要があります。そうしないと、誤ったコンテンツが表示されることがあります。

- 編集モードを管理ツールとして使用しない。編集モードは、ユーザーがポートレットの動作を変更するために使用します。プロバイダ設定の変更などの管理作業が必要な場合は、その作業専用の安全なポートレットを作成してください。

- モバイル・オプションのみが表示される(該当する場合)。ポートレットは、Oracle Portalインスタンスがモバイル機器に対して有効かどうかを問合せできます。インスタンスがモバイルに対応していない場合は、モバイル固有オプションを表示する必要はありません。さらに、ページをモバイル・ユーザーとデスクトップ・ユーザーの両方で使用できるようにする場合は、モバイル・オプションとデスクトップ・オプションの間での線引きを検討する必要があります。その他のヒントは、6.1.4.6項「パーソナライズ・ページの調整」を参照してください。

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

整合性を維持し、ユーザーにとっても便利なように、次のボタンを次の順序で編集モードに実装してください。

- OK: ユーザーのパーソナライズを保存し、ポートレットを共有画面モードに戻します。

- 適用: ユーザーのパーソナライズを保存し、現在のページをリロードします。

- 取消: 変更内容を保存せずに、ポートレットを共有画面モードに戻します。

6.1.1.2.3 パーソナライズ値のレンダリングに関するガイドライン

パーソナライズ設定を変更するフォームを表示する場合は、デフォルトの値を表示し、ユーザーが設定を毎回再入力しないで済むようにしてください。動作の整合性を維持するために、パーソナライズ値のレンダリングは次の順序で行います。

1. ユーザー設定項目: このユーザーのパーソナライズが使用可能な場合は、問い合せて表示します。

2. インスタンス・デフォルト: ユーザーのパーソナライズがない場合は、ポートレット・インスタンスのシステム・デフォルトを問い合せて表示します。これらのデフォルトは編集モードで設定され、このポートレット・インスタンスに対してのみ適用されます。

3. ポートレット・デフォルト: システム・デフォルトのパーソナライズがない場合は、一般的なポートレットのデフォルトを表示しますが、空白の場合があります。一般的なポートレットのデフォルトはポートレットにハードコーディングされている場合がありますが、前述の2つの条件のいずれかが該当する場合はオーバーライドしてください。

このロジックによって、ポータル内の他のポートレットとの整合性がとれた予測可能な方法でパーソナライズを表すことができます。PDK-Javaでは、このようなロジックを簡単に実装できます。

6.1.1.3 デフォルト編集モード(JPSおよびPDK-Java)

ポートレットはデフォルト編集モードを備えており、ページ設計者はこのモードを使用して、特定のポートレット・インスタンスのデフォルト動作をカスタマイズできます。デフォルト編集モードには設定のリストがあり、ページ設計者はその設定を変更できます。設定には、タイトル、コンテンツの種類、書式、情報量、フォーム要素のデフォルト、およびポートレットの外観や内容に影響するあらゆる要素が含まれます。

これらのデフォルトのパーソナライズ設定によって、個々のポートレットの外観とコンテンツをすべてのユーザーに対して変更できます。デフォルト編集モードは、ポートレットの表示内容と表示形式に対してシステム・レベルのデフォルトを定義するためのモードであるため、このモードを管理ツールとして使用したり、他のポートレットの管理に使用することは避けてください。

ページ設計者は、ページ編集の際、ポートレット・バナーの真上の「デフォルトの編集」アイコンをクリックしてデフォルト編集モードにアクセスします。

ユーザーが「デフォルトの編集」アイコンをクリックすると、同じブラウザ・ウィンドウに新しいページが表示されます。このポートレットは、通常、ポートレット・インスタンスの設定をカスタマイズするダイアログ・ボックスを表すWebページを作成します。設定を適用すると、ユーザーは自動的に元のページに戻されます。

6.1.1.3.1 デフォルト編集モード・オプションに関するガイドライン

次のガイドラインに従って、デフォルト編集モードでページ設計者に公開する内容を管理してください。

- キャッシュを使用する場合はキャッシュを無効化する。カスタマイズによってポートレットの表示やコンテンツに変更が生じた場合は、ポートレットのコンテンツが再生成され、キャッシュから戻されないことを確認する必要があります。そうしないと、誤ったコンテンツが表示されることがあります。

- デフォルト編集モードを管理ツールとして使用しない。デフォルト編集モードは、ユーザーがポートレットの動作を変更するために使用します。プロバイダ設定の変更などの管理作業が必要な場合は、その作業専用の安全なポートレットを作成してください。

- モバイル・オプションのみが表示される(該当する場合)。ポートレットは、Oracle Portalインスタンスがモバイル機器に対して有効かどうかを問合せできます。インスタンスがモバイルに対応していない場合は、モバイル固有オプションを表示する必要はありません。さらに、ページをモバイル・ユーザーとデスクトップ・ユーザーの両方で使用できるようにする場合は、モバイル・オプションとデスクトップ・オプションの間での線引きを検討する必要があります。その他のヒントは、6.1.4.6項「パーソナライズ・ページの調整」を参照してください。

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

整合性を維持し、ユーザーにとっても便利なように、次のボタンを次の順序でデフォルト編集モードに実装してください。

- OK: ユーザーのカスタマイズを保存し、ポートレットを共有画面モードに戻します。

- 適用: ユーザーのカスタマイズを保存し、現在のページをリロードします。

- 取消: 変更内容を保存せずに、ポートレットを共有画面モードに戻します。

6.1.1.3.3 パーソナライズ値のレンダリングに関するガイドライン

カスタマイズ設定を変更するフォームを表示する場合は、デフォルトの値を表示し、ページ設計者が設定を毎回再入力しないで済むようにしてください。動作の整合性を維持するために、カスタマイズ値のレンダリングは次の順序で行います。

1. インスタンス設定: ポートレット・インスタンスのシステム・デフォルトを問い合せて表示します。

2. ポートレット・デフォルト: システム・デフォルトのカスタマイズがない場合は、一般的なポートレットのデフォルトを表示しますが、空白の場合があります。一般的なポートレットのデフォルトはポートレットにハードコーディングされている場合がありますが、システム・デフォルトでオーバーライドしてください。

このロジックによって、ポータル内の他のポートレットとの整合性がとれた予測可能な方法でカスタマイズを表すことができます。

6.1.1.4 プレビュー・モード(JPSおよびPDK-Java)

ポートレットはプレビュー・モードを備えており、ポートレットをページに追加する前に、それがどのように表示されるかをユーザーに示します。プレビュー・モードは、ポートレットの機能を視覚的に表現したものです。

通常、ポータル・ユーザーは、「ポートレットの追加」ページで「プレビュー」アイコンをクリックして、ポートレットのプレビュー・モードにアクセスします。選択したポートレットのプレビューがウィンドウに表示されます。ユーザーは、そのポートレットをページに追加できます。ポータル管理者は、ポートレット・リポジトリからプレビュー・モードにアクセスできます。

プレビュー・モードに関するガイドライン

次のガイドラインに従って、プレビュー・モードでユーザーに公開する内容を管理してください。

- ポートレットの機能に関する情報を提供する。プレビュー・モードでは、ユーザーがポートレットの実際のコンテンツや機能に関する情報を得られるように、十分なコンテンツを生成する必要があります。

- ポートレットのプレビューは大きくしない。このモードで生成されるデータの量は、数行以内のHTMLまたは1つの画面ショットにとどめてください。プレビュー・モードは小さい領域に表示されるため、ウィンドウのサイズより大きくなると見栄えが悪くなり、ユーザーによるスクロールが必要になります。

- ライブ・ハイパーリンクを使用しない。プレビュー・モードでレンダリングしたリンクは、予想した動作をしないことがあります。ハイパーリンクは、下線付きのフォントでシミュレートできます。

- アクティブ・フォーム・ボタンを使用しない。プレビュー・モードでレンダリングしたフォームは、予想した動作をしないことがあります。フォーム要素をレンダリングする場合、そのフォーム要素はどこにもリンクしないでください。

6.1.1.5 全画面モード(PDK-Java)

ポートレットは全画面モードを使用して、さらに詳細な表示を行える、より大きなバージョンのポートレットを実現します。全画面モードによって、ポートレットは画面全体を使用できます。

たとえば、ポートレットで経費情報を表示する場合、共有画面モードでは経費の多い上位10人のサマリーを表示し、全画面モードでは各人の経費合計を表示できます。また、ポートレットは、Webアプリケーションへのショートカットも提供できます。ポートレットの共有画面モードに経費領収書発行へのインタフェースがある場合は、全画面モードから経費アプリケーション全体にリンクすることも可能です。

ポータル・ユーザーは、ポートレットのタイトルをクリックして、ポートレットの全画面モードにアクセスします。

厳密には、JPSポートレットに全画面モードはありません。ただし、表示モード(共有画面モード)とウィンドウの最大化を使用して、JPSポートレット用に全画面モードと同等の機能を実装できます。

6.1.1.6 ヘルプ・モード(JPSおよびOracle Portal)

ポートレットは、ヘルプ・モードを使用して、そのポートレットの機能と使用方法に関する情報を表示します。ユーザーはこのモードで、ポートレットおよびそのコンテンツと機能に関する有用な情報を検索できます。

ポータル・ユーザーは、ポートレット・ヘッダーの「ヘルプ」をクリックしてポートレットのヘルプ・モードにアクセスします。

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

次のガイドラインに従って、ヘルプ・モードでユーザーに公開する内容を管理してください。

- ポートレットの使用方法を説明する。ポートレットのインタフェースのみでは、ポートレットのすべての機能がユーザーに理解されない可能性があります。ポートレットの機能とその活用方法を説明してください。

6.1.1.7 情報モード(JPSおよびPDK-Java)

ユーザーは、実行中のポートレットのバージョン、発行と著作権の情報、および作者への連絡方法を参照できる必要があります。登録が必要なポートレットは、このモードからWebベースのアプリケーションまたは連絡先情報にリンクできます。

ポータル・ユーザーは、ポートレット・ヘッダーの「情報」をクリックしてポートレットの情報モードにアクセスします。同じブラウザ・ウィンドウに新しいページが表示されます。この新しいページにコンテンツを生成するか、またはユーザーを既存のページやアプリケーションに移動させることができます。

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

次のガイドラインに従って、情報モードでユーザーに公開する内容を管理してください。

- 関連の著作権、バージョンおよび作成者の情報を表示する。ユーザーは、使用しているポートレットの内容と詳細情報の入手先を参照できる必要があります。この情報ページは、ポートレットのサポート時に重要になることがあります。

6.1.1.8 リンク・モード(PDK-Java)

ポートレットはリンク・モードを使用して、モバイル・ページに表示されるそのポートレット自体へのリンクをレンダリングします。ユーザーがリンクをクリックすると、ポートレットは表示モードでコールされます。これにより、ポートレットが表示モードまたは共有画面モードでレンダリングされます。

Oracle Mobile XMLコンテンツ・タイプのサポートを宣言するJPSポートレットの場合、Oracle Portalは次のいずれかの方法でリンクをレンダリングします。

- ポートレットがサポートを宣言している場合は、ウィンドウを最小化した状態でポートレットの表示モードをコールします。

- それ以外の場合は、ポートレットのタイトルを使用してリンクをレンダリングします。

リンク・モードに関するガイドライン

次のガイドラインに従って、リンク・モードでユーザーに公開する内容を管理してください。

- コンテンツを制限する。リンク・モードの目的は、余分な素材なしでリンクをレンダリングすることです。リンク・モードは、ただ、短いタイトルや、場合によっては関連サマリー情報を(通常わずか1、2語)レンダリングするのみです。

6.1.2 ポートレット内のナビゲーションのガイドライン

いろいろな点で、1つのポートレットの異なるセクションまたはページ間のナビゲーションは、標準のWebページ間のナビゲーションと似ています。ユーザーはフォームを実行してリンクをクリックできます。通常の標準的なWebページの場合、これらの操作により、新しいコンテンツをレンダリングするサーバーにメッセージが直接送信され、次に、このメッセージがクライアントに戻されます。ポートレットの場合は、ページの一部分のみを構成するため、そのポートレット内でのフォーム実行またはリンクのレンダリングでは、情報は直接ポートレットに渡されません。情報はポータルを介してポートレットに渡されます。ポートレット内でのリンクまたはフォームの実行がポータルを参照しない場合は、そのリンクをたどるとユーザーをポータルから離れさせることになり、通常好ましくない動作です。

ポートレットの開発者は、フォームまたはリンクのパラメータがユーザー、ポータルおよびポートレット間を受け渡しされる詳細な機構を知る必要はありません。しかし、通常の標準的なWebページの場合と同じ方法でポートレット内にリンクを作成できないことは理解しておく必要があります。

6.1.2.1 ポートレット用のリンクのタイプ

ポートレットは、次の4つのクラスのリンクをレンダリングできます。

- ポートレット内リンク: ポートレットはOracle Portalのアドレスを認識できるようにしておきます。実際になんらかの方法で参照するためです。

- ポータル・リンク: ポートレット内リンクと同じ理由で、Oracle Portalのアドレスを認識できるようにしておきます。

- 外部リンク: Oracle Portalを参照せず、標準のWebページの場合と同様にポートレット内で動作します。

- 内部/リソース・リンク: 外部リンクと同様にOracle Portalを参照しません。

図6-1に、これらのリンク・タイプのサマリーを示します。矢印は、リンクがどのように論理的な参照先であるリソースを参照するかを示します。

図6-1 Oracle Portalリンク・タイプ

6.1.2.1.1 ポートレット内リンク

ポートレット内リンクは、所定のポートレット内の様々なセクションまたはページに移動します。厳密に言えば、ポートレットが含まれているページが参照されます。が、このリンクには、ユーザーによってリクエストされたときに、ポートレットにページ内の様々なセクションまたはページをレンダリングさせるパラメータが含まれています。

この直接の結果として、ポートレットは、独自のサーバー・コンテキストに基づく相対リンクまたは絶対リンクを使用して、自身の様々なセクションまたはページへのリンクのレンダリングをリクエストすることはできません。ポートレット内リンクは、リンクまたはフォーム実行ターゲットとしてポートレット内のナビゲーションには便利です。

6.1.2.1.2 ポータル・リンク

ポータル・リンクは、ユーザーのホーム・ページなど、Oracle Portal内の重要なページを参照します。

6.1.2.1.3 外部リンク

外部リンクは、ポートレット(ページ経由)もポータルの一部も参照しません。選択した場合、ユーザーがポータル(たとえばwww.oracle.com)に戻ることはありません。

6.1.2.1.4 内部/リソース・リンク

内部/リソース・リンクは、(ポートレットの)内部リソースを参照します。このリンクは、ポートレットのレンダリング中に内部で排他的に、たとえばサーバー側インクルードとして、使用されることがあります。また、外部的に、イメージなどのポートレット・リソースの参照に使用されることもあります。外部的に使用される場合は、PDK-JavaのUrlUtilsクラスのconstructResourceURLメソッドを使用し、リソース・プロキシを使用してファイアウォールの内部からイメージを取得します。

たとえば、PDK-Javaに含まれている宝くじのサンプルjspであるlottery.jspには、イメージに対するリソース・プロキシ・リクエストが含まれています。

<%@ page contentType="text/html;charset=UTF-8" %>
<%@ page session="false" import="oracle.portal.provider.v2.render.*" %>
<%@ page import="oracle.portal.provider.v2.render.http.HttpPortletRendererUtil" %>
<%@ page import="oracle.portal.provider.v2.url.UrlUtils" %>
<%@ page import="oracle.portal.sample.v2.devguide.lottery.*" %>
<%
LottoPicker picker = new LottoPicker();
picker.setIdentity(request.getRemoteAddr() ); %>
<% PortletRenderRequest portletRequest = (PortletRenderRequest)
request.getAttribute("oracle.portal.PortletRenderRequest"); %>
<% String name = portletRequest.getUser().getName(); %>
<P class="PortletHeading1" ALIGN="CENTER">Hi <%= name %>, Your Specially
Picked</P><P ALIGN="CENTER"><IMG SRC="<%= UrlUtils.constructResourceURL(portletRequest,
HttpPortletRendererUtil.absoluteLink(request, "images/winningnumbers.gif")) %>"
WIDTH="450" HEIGHT="69" ALIGN="BOTTOM" BORDER="0"></P>
<P>
<P ALIGN="CENTER">
<TABLE ALIGN="CENTER" BORDER="0" CELLPADDING="0" CELLSPACING="0">
<TR>
<%
int [] picks = picker.getPicks();
for (int i = 0; i < picks.length; i++) {
%>
<TD>
<IMG SRC="<%= UrlUtils.constructResourceURL(portletRequest,
HttpPortletRendererUtil.absoluteLink(request, "images/ball" + picks[i])) %>
.gif" WIDTH="68" HEIGHT="76" ALIGN="BOTTOM" BORDER="0">
</TD>
<%
}

これらのコールにより、Parallel Page Engineはリソースをリクエストし、ブラウザに戻します。セッション・ベースのプロバイダの場合、元のinitSessionコールからプロバイダに戻されるCookieは、リクエストとともに戻され、正しいセッション・コンテキストを維持します。

6.1.3 JavaScriptに関するガイドライン

ポートレット内でJavaScriptを使用するのは便利な場合もありますが、ポートレット内では次のガイドラインに留意してください。

- ポートレットが内部でレンダリングされるページを、JavaScriptを使用してリダイレクトしないでください。ユーザーを別の場所に送る必要がある場合は、ポートレット・アクション処理コードで行うか、ブラウザで新しいウィンドウを開く必要があります。

- JavaScript内の識別子は必ず修飾してください。識別子を修飾することで、一意性が保証され、ページ上の他のJavaScriptとクラッシュしなくなります。

6.1.4 モバイル・ポートレットのガイドライン

Oracle Portalのページは、HTMLデバイスおよび非HTMLデバイス(モバイル機器)の両方に対してレンダリングできます。モバイル機器用にレンダリングする場合、Oracle Portalでは、ポートレットはOracleAS Wireless XMLと呼ばれる汎用マークアップ言語でコンテンツを生成する必要があります。

大部分のポートレットは、デスクトップ・ポートレットとも呼ばれ、HTMLのレスポンスのみを生成するので、標準のHTMLブラウザでしかレンダリングできません。この他に、ポートレットにはモバイル・ポートレットがあり、OracleAS Wireless XMLレスポンスのみを生成します。モバイル・ポートレットは、標準のHTMLブラウザを含む任意のデバイスでレンダリングできます。しかし、多くのポートレットは、環境に応じてHTMLまたはOracleAS Wireless XMLのどちらでもレンダリングできるハイブリッド手法をとっています。このようなハイブリッド・ポートレットは任意のデバイスでレンダリングできますが、標準のHTMLブラウザで最もよくレンダリングできます。OracleAS Wireless XMLは十分にHTMLでのレスポンス用に使用できますが、HTMLほど表現が豊かではありません。デスクトップおよびモバイルの両環境で実行されるポートレットは、通常デスクトップを使用してアクセスされるので、開発者は一般に、デスクトップ環境で最適にレンダリングできるハイブリッド・ポートレットの方を開発対象として選択します。

モバイル・ポートレットの構築の際は、次のガイドラインに準拠する必要があります。

- 6.1.4.1項「機能の宣言」

- 6.1.4.2項「短いタイトルの宣言」

- 6.1.4.3項「短いタイトルのパーソナライズの実装」

- 6.1.4.4項「リンク・モードの実装」

- 6.1.4.5項「デバイス情報への留意」

- 6.1.4.6項「パーソナライズ・ページの調整」

モバイル対応ポートレットの構築方法については、7.2.10項「ポートレットのモバイル機器用拡張」を参照してください。

6.1.4.1 機能の宣言

ポートレットを適切に管理するため、ポートレットによって生成されるすべてのコンテンツ・タイプをOracle Portalに認識させる必要があります。この情報は、Oracle Portalによって次のように使用されます。

- 「ポートレットの追加」ダイアログでの「ポートレット・リポジトリ」ビューを制限するのに使用されます。ターゲットのページにレンダリング可能なポートレットのみが「ポートレットの追加」ダイアログに表示されます。たとえば、ユーザーがモバイル設計ページから「ポートレットの追加」ダイアログを起動すると、OracleAS Wireless XMLレスポンスを生成できるポートレットのみが表示されます。

- 多くのデバイスでレンダリング可能なポートレットを表示する「ポートレットの追加」ダイアログの「ポートレット・リポジトリ」ビューでのアイコンを表示するのに使用されます。たとえば、ユーザーが標準の設計ページから「ポートレットの追加」ダイアログを起動すると、モバイル対応のポートレットが、モバイル機器上でもレンダリングされることを示す図6-2のアイコンとともにリストされます。

図6-2 モバイル対応アイコン

- モバイル機器での標準ページのレンダリングの際、OracleAS Wireless XMLを生成する機能ありとして登録されたポートレットのみを表示するのに使用されます。

- 既存の標準ページに基づく新しいモバイル・ページの作成の際、OracleAS Wireless XMLを生成する機能ありとして登録されたポートレットのみを組み入れるのに使用されます。

6.1.4.2 短いタイトルの宣言

通常、モバイル機器は画面サイズが小さいので、1つの行にスクロールなしで表示できる文字数が制限されます。ポートレットのタイトルは、Oracle Portalがモバイル・ページをメニュー構成としてレンダリングする際にメニュー・アイテム・ラベルとして表示されますが、モバイル表示としては長すぎることがよくあります。そのため、ポートレットには短いタイトルを定義できます。表示スペースが制限されている場合は、短いタイトルが標準タイトルに取ってかわります。

6.1.4.3 短いタイトルのパーソナライズの実装

標準のポートレット・タイトルは、標準ページのポートレットのヘッダーにレンダリングされる際の、デフォルトのポートレット・インスタンス名になります。ポートレットの短いタイトルは、モバイル・ページのメニュー・アイテムとしてレンダリングされる際の、デフォルトのポートレット・インスタンス名になります。ポートレットで標準タイトルをパーソナライズできるようにすることをお薦めしましたが、これと同様に、ポートレットで短いタイトルをパーソナライズできるようにすることもお薦めします。この機能により、ページ設計者またはエンド・ユーザーは、読みやすい名前をインスタンスに付けられます。

6.1.4.4 リンク・モードの実装

Oracle Portalはデスクトップに標準ページをレンダリングする際、ページ設計者によって定義された表形式でポートレットをページ上にアセンブルします。Oracle Portalは、したがって、1つのページに多くのポートレットのコンテンツを集約します。ディスプレイが小さいため、モバイル機器は1つのページに複数のポートレットのコンテンツを効果的に表示できません。かわりに、ページのポートレットがリンク(メニュー・アイテム)として表示されます。ユーザーは、一度に1つのポートレットずつメニューをナビゲートしてポートレットのコンテンツを参照します。メニュー・アイテムのリンクは通常、ポートレットの短い名前を使用します。使用しやすいポートレットとは、短い名前をパーソナライズでき、そのパーソナライズ・データを管理できるものである必要があるため、ポートレットではメニュー・アイテム・リンクのレンダリングに関与する必要があります。この機能を有効にするには、ポートレットのリンク・モードを実装します。リンク・モードでのレンダリングのリクエストに応答して、ポートレットは、適切なコンテンツ・タイプで自身へのリンクを生成します。たとえば、レンダリングでHTMLがリクエストされた場合、ポートレットはアンカー・タグを戻します。レンダリングでOracleAS Wireless XMLがリクエストされた場合、ポートレットはSimpleHrefタグを戻します。

6.1.4.5 デバイス情報への留意

モバイル機器からであれデスクトップからであれ、すべてのリクエストは一般的なデバイス情報を渡します。たとえば、受け渡しされるある属性は、pcbrowser、pdabrowser、microbrowser(携帯電話)などのデバイス・クラスを識別します。ポートレット開発者は、この属性を使用してレスポンスのレイアウトやデータ量を調整できます。

6.1.4.6 パーソナライズ・ページの調整

1つのポートレット・インスタンスは、モバイルおよびデスクトップのすべてのデバイスにわたるユーザー・パーソナライズのセットを一括して管理する必要があります。したがって、標準ページとモバイル・ページとの間でインスタンスが共有され、一部のフィールドがデスクトップかモバイルの1つの環境にのみ適用される場合でも、同じパーソナライズ・ページが表示されます。このような場合、ポートレットは、1つの環境にのみ関連するこのようなフィールドを識別する必要があります。たとえば、ポートレットがそのパーソナライズ・ページにモバイル専用セクションを表示することがあります。ところが、モバイル機能が構成可能なため無効になっていることをポートレットが検出したときには、パーソナライズ・ページからモバイル専用セクションが削除されるようにもできます。

6.2 Javaポートレット仕様(JPS)およびWSRPの概要

企業ポータル・プロジェクトに従事する組織では、アプリケーションの統合が主要な課題でした。これまでユーザーは、単一のポータル・プラットフォーム専用のAPIを使用してポートレットを開発してきましたが、多くの場合、特定のポータル・ベンダーによるポートレットでは不十分でした。このような状況は、次の標準を導入することで大きく変わります。

- Web Services for Remote Portlets (WSRP)

- JSR 168に基づくJavaポートレット仕様(JPS)脚注1

この2つの標準によって、異なる複数のポータル製品を相互運用できるポートレットを開発できるため、組織におけるポートレットの可用性が拡大します。この可用性の拡大によって、企業ポータルの構築時には、組織の生産性を大幅に向上させることができます。

WSRPはWebサービスの標準です。この標準によって、ポータルまたは他の中間Webアプリケーションを使用する、ユーザー対象で視覚的なWebサービスのプラグ・アンド・プレイが可能になります。1つの標準であるWSRPによって、標準対応のコンテナとWSRPポータル間の相互運用が実現します。WSRPでは、次のものを定義します。

- WSRPサービスを起動するためのWeb Services Definition Language (WSDL)インタフェース

- WSRPサービスで発生するマークアップのためのマークアップ・フラグメント・ルール

- WSRPサービスとメタデータを公開、検索およびバインドするためのメソッド

JPSは、ポートレットとポータル間の相互運用を可能にし、集約、パーソナライズ、表示形式およびセキュリティの各領域に対処する一連のAPIを定義する仕様です。JPSでは、次の機能を提供するコンテナ・サービスを定義します。

- ポートレット機能をコーディングするためのポートレットAPI

- ポートレット・コンテナ内でユーザー相互作用を作成するためのURLリライティング・メカニズム

- ポートレットのセキュリティとパーソナライズ

Oracleは、WSRP委員会に積極的に参加しており、JPSの専門家グループのメンバーでもあります。

注意:

HTMLフォームはgetまたはpostメソッドを使用して実行できますが、WSRP標準ではコンシューマ(ポータル)はpostメソッドのみを使用することが要求されます。getメソッドのサポートは、標準に則ってオプション扱いになっています。ポータルのコンシューマはgetメソッドをサポートする必要がないので、ポートレット開発の際はpostメソッドを使用することをお薦めします。

WSRPとJPSの関連

WSRPはポータル・サーバーとポートレット・コンテナ間の通信プロトコルです。一方、JPSにはポートレットを構築するためのJavaポートレットAPIが記述されています。これらの標準を組み合せることで、開発者は、内部または外部のソースからのアプリケーションをポートレットとしてWSRPポータルに統合できます。これによって、Oracle Portalリポジトリからポートレットを選択するだけで簡単にポータル・ページを構築できるようになります。図6-3に、WSRP仕様のアーキテクチャを示します。

注意:

図6-3は、JPSポートレットをWSRPとともに使用する方法を示していますが、WSRPはJPS以外のポートレットでも使用できることに注意してください。

図6-3 WSRP仕様のアーキテクチャ

Oracle Portalの既存のアーキテクチャはWSRP委員会で指定されたアーキテクチャと似ているため、Oracle Portalでは、Oracleのポータルと既存のAPI (PDK-Java)間の通信、および新しいJavaポートレットAPIとの間の通信もサポートできます。図6-4に、WSRPポータルのアーキテクチャを示します。JPS準拠のポートレット・コンテナはWSRPプロトコルを使用して通信を行い、PDK-Javaポートレット・コンテナはOracleの専用SOAPプロトコルを使用して通信を行うことに注意してください。

図6-4 Oracle PortalのWSRPアーキテクチャ

6.3 Oracle JDeveloperを使用したJPS準拠のポートレットの構築

Oracle JDeveloperのJSR 168ポートレット・ウィザードを使用すると、短時間で簡単にポートレットをWSRPで公開できます。

この項では、次のことを前提にしています。

- ポートレットの表示モードなど、ポートレットに関する用語の知識があること。第1章「ポートレットの理解」および6.1項「Javaポートレット作成のガイドライン」を参照してください。

- Oracle JDeveloperに関する知識があり、それを使用したJavaコンポーネントを構築およびデプロイする方法を習得していること。Oracle JDeveloperはOTNからダウンロードできます。OTNの「Oracle JDeveloper」ページにアクセスします:

http://www.oracle.com/technology/products/jdev/index.html

この項には次のサブセクションがあります。

- 6.3.1項「JSR 168ポートレットの作成」

- 6.3.2項「JSR 168ポートレットへのポートレット・ロジックの追加」

- 6.3.3項「Oracle WebLogic ServerへのJSR 168ポートレットのデプロイ」

- 6.3.4項「JSR 168ポートレットの登録と表示」

- 6.3.5項「エンタープライズ構成でのWSRPプロデューサの登録」

6.3.1 JSR 168ポートレットの作成

この項ではJSR 168 Javaポートレット・ウィザードの手順を説明します。最初に、実装するポートレットの表示モード、および実装メソッド(JSP、HTTPサーブレット、JavaクラスまたはHTML)を選択できます。次に、ウィザードによって、選択したモードごとに簡単なサンプル実装が作成されます。

JSR 168 Javaポートレット・ウィザードを使用してポートレットを作成する手順は、次のとおりです。

1. Oracle JDeveloperを起動します。

2. 「アプリケーション・ナビゲータ」で、ポートレットを作成するアプリケーションを開きます。

3. ポートレットを作成するプロジェクトを右クリックし、「新規」を選択します。

注意:

プロジェクトがまだない場合は、次の2つのうちいずれかの方法で作成できます。

- 「アプリケーション - ナビゲータ」で既存のアプリケーションを右クリックし、「新規プロジェクト」を選択します。「空のプロジェクト」を選択し、「OK」をクリックします。「プロジェクトの作成」ダイアログ・ボックスに入力し、「OK」をクリックします。

- 「アプリケーション」ノードを右クリックし、「新規アプリケーション」を選択します。「アプリケーションの作成」ダイアログ・ボックスに入力し、「OK」をクリックします。「プロジェクトの作成」ダイアログ・ボックスが表示されたら、「OK」をクリックします。

4. 「新規ギャラリ」で「Web層」を展開し、「ポートレット」、「規格に基づいたJavaポートレット(JSR 168)」(図6-5)の順に選択します。
「規格に基づいたJavaポートレット」を選択すると、JPS準拠のポートレット作成のためのポートレット・ウィザードが開きます。「Oracle PDK-Javaポートレット」を選択すると、PDK-Javaポートレット作成のためのポートレット・ウィザードが開きます。

注意:

Oracle Portal 11g用の規格に基づいたJavaポートレットを作成するには、Oracle JDeveloperリリース11.1.1.1.0、11.1.1.2.0または11.1.1.3.0を使用する必要があります。これらのリリースでのみ、JSR-168ポートレットの作成がサポートされているからです。

図6-5 規格に基づいたJavaポートレットが選択された「新規ギャラリ」ダイアログ・ボックス

5. 「OK」をクリックすると、「一般ポートレット情報」ページ(図6-6)が表示されます。

図6-6「一般ポートレット情報」ページ

6. 「名前」フィールドに、ポートレットの名前を入力します。デフォルトの名前をそのまま使用しても、新しい名前を入力してもかまいません。

7. 「クラス」フィールドに、ウィザードがポートレット用に作成するクラスの名前を入力します。デフォルトの名前をそのまま使用しても、新しい名前を入力してもかまいません。新しい名前を入力する場合は、有効なJava名を使用する必要があります。

8. 「パッケージ」リストから、クラスが存在するパッケージを選択します。プロジェクト内のパッケージを検索するには、「参照」ボタンをクリックします。特定のパッケージを選択しないと、ウィザードではプロジェクトのデフォルト・パッケージが使用されます。

9. 「言語」リストから、ポートレットがサポートするデフォルト言語を選択します。ウィザードでは、デフォルトで英語が使用されます。

10. ポートレットで「編集」モードをサポートするには、「ユーザーがポートレット・コンテンツを編集できるようにします」を選択します。ウィザードでは、このオプションはデフォルトで選択されています。
このオプションを選択すると、後にウィザードで「編集」モードの詳細を指定できます。

11. Oracle WSRP 2.0拡張機能をサポートするポートレットを作成するには、「Oracle WSRP V2拡張機能を使用してポートレット間通信を可能にします」を選択して「次へ」をクリックします。

注意:

Oracle拡張機能で構築されたJSR 168ポートレットは、WSRP 2.0をサポートするすべてのコンシューマで使用できます。WSRP 2.0を利用するには、Oracle WebLogic Serverにポートレットをデプロイする必要があります。

12. 「追加ポートレット情報」ページ (図6-7)の「表示名」フィールドに、ポートレットの名前を入力します。この名前は、Oracle Portalのカタログまたはリポジトリに表示されます。

図6-7「追加ポートレット情報」ページ

13. 「ポートレット・タイトル」フィールドに、ポートレットを説明するタイトルを入力します。
「リソース・パレット」パネルまたは「アプリケーション・リソース」パネルにポートレットのタイトルが表示されるため、ポートレットが役に立つかどうかをユーザーが判断しやすくなるタイトルを使用してください。ポートレットのタイトルは、ポートレットがページに表示されるとポートレットのヘッダーにも表示されます。

14. 「ポートレット・タイトル」フィールドに、ポートレットのタイトルを入力します。このタイトルは、ポートレットがページに表示されるとポートレットのヘッダーに表示されます。

15. 「短いタイトル」フィールドに、ポートレットの短いタイトルを入力します。この短いタイトルは、モバイル・デバイスでポートレットがページに表示されるとポートレットのヘッダーに表示されます。

16. 「説明」フィールドに、ポートレットの説明を入力します。この説明は、ポートレット・リポジトリでポートレット名の下に表示されます。

17. 「キーワード」フィールドに、ユーザーがポートレットを検索するときに役立つ追加のキーワードを入力します。

18. 「次へ」をクリックすると、「コンテンツ・タイプとポートレット・モード」ページ(図6-8)が表示されます。
または、「終了」をクリックして、すぐにポートレットを作成することもできます。残りのすべての設定にはデフォルト値が使用されます。

図6-8 「コンテンツ・タイプとポートレット・モード」ページ

19. デフォルトでは、ポートレットはコンテンツ・タイプがtext/htmlで表示されます。他のコンテンツ・タイプを追加する場合は、text/htmlをクリックし、「追加」をクリックします。
使用できるコンテンツ・タイプのリストが表示されます(図6-9)。「使用可能」リストで目的のコンテンツ・タイプを選択し、矢印ボタンを使用して、「- 選択されたもの」リストに移動します。終了したら、「OK」をクリックします。

図6-9 「コンテンツ・タイプ」ダイアログ・ボックス

20. デフォルトでは、ポートレットには「view」モードが含まれます。「一般ポートレット・プロパティ」ページで「編集可能」を選択した場合は、「編集」モードも含まれます。他のポートレット表示モードを含める場合は、既存の表示モード(たとえば、「view」)を選択し、「追加」をクリックします。
使用できるポートレット表示モードのリストが表示されます(図6-10)。必要なモードを「使用可能」リストから「- 選択されたもの」リストに移動することで、表示モードを追加できます。終了したら、「OK」をクリックします。ポートレット表示モードの詳細は、6.1項「Javaポートレット作成のガイドライン」を参照してください。

図6-10 「ポートレット・モード」ダイアログ・ボックス

21. 必要なポートレット表示モードをすべて追加した後、各モードについて実行する機能を選択します。ポートレット・モードごとに、ポートレット・モードをクリックして右側にある次のオプションを選択します。

- Oracle JDeveloperでそのポートレット・モードにJSPを生成する場合は、「JSPの生成」を選択します。対応するフィールドにJSPの名前を入力するか、デフォルトのままにします。
ウィザードを完了すると、生成されたJSPが「アプリケーション・ナビゲータ」に表示されるので、それを選択してさらに開発できます。これは、すべてのポートレット表示モードのデフォルトの選択です。これを選択すると、生成されるJSPに特定のモードに対するリクエストをルーティングするコードが、生成されるポートレットJavaクラスに入力されます。

- .jspxファイルを生成するには、「ADF-Faces JSPXの生成」を選択します。.jspxファイルは、JSPとまったく同じマークアップを生成します。

- ポートレットをページなどの既存のWebリソースにマップする場合は、「パスへのマップ」を選択します。対応するフィールドにパスを入力します。これを選択するときは、ターゲットのリソースまたはファイルを作成する必要があります。ターゲットとしては、JSP、サーブレット、HTMLファイルなどを使用できます。これを選択すると、指定したターゲットに特定のモードに対するリクエストをルーティングするコードが、生成されるポートレットJavaクラスに入力されます。

- カスタム・コーディングしたオブジェクトでポートレット・モードを実装する場合は、「カスタム・コード」を選択します。このオブジェクトは後で作成します。これを選択すると、生成されるポートレットJavaクラスにコンテンツをレンダリングするスケルトン・メソッド(private void do<MODE_NAME><CONTENT_TYPE>)が生成されます。有用なコンテンツをレンダリングするには、このコードを更新する必要があります。

22. 「次へ」をクリックします。
ウィザードの「一般ポートレット・プロパティ」ページで「編集可能」を選択した場合は、「カスタマイズ・プリファレンス」ページ(図6-11)が表示されます。ステップ23に進みます。

このオプションを選択していない場合は、「セキュリティ・ロール」ページ(図6-13)が表示されます。ステップ31に進みます。

図6-11 「カスタマイズ・プリファレンス」ページ

23. カスタマイズ・プリファレンスを追加する場合は、「追加」をクリックします。「新規プリファレンスの追加」ダイアログ・ボックスが表示されます。

図6-12 「新規プリファレンスの追加」ダイアログ・ボックス

24. 「名前」フィールドに、新しいプリファレンスの名前を入力します。この名前は、ポートレット内で一意である必要があります。文字、数字、アンダースコアのみを使用できます。

25. 「デフォルト値」フィールドに、新しいカスタマイズ・プリファレンスのデフォルト値を1つ以上入力します。複数の値はカンマで区切ります。

26. カスタマイズ・プリファレンスの値を翻訳する場合は、「プリファレンスの翻訳」チェック・ボックスを選択します。このオプションを選択すると、Oracle JDeveloperは、翻訳できる文字列のリソース・バンドル・クラスを生成します。実行時には、ポートレットはリソース・バンドルのエントリを参照します。

注意:

名前は常に翻訳されますが、デフォルト値は必ずしも翻訳する必要はありません。たとえば、値が整数の場合、翻訳は不要です。

27. 「OK」をクリックします。カスタマイズ・プリファレンスをさらに追加する場合は、前述の手順を繰り返します。

28. 既存のカスタマイズ・プリファレンスの詳細を編集するには、「ポートレット・プリファレンス」リストでプリファレンスを選択し、「プリファレンス詳細」セクションでフィールドを編集します。

29. 既存のカスタマイズ・プリファレンスを削除するには、「ポートレット・プリファレンス」リストでプリファレンスを選択し、「削除」をクリックします。

30. 「次へ」をクリックすると、「セキュリティ・ロール」ページ(図6-13)が表示されます。

図6-13 「セキュリティ・ロール」ページ

31. JSR 168ポートレットでは、web.xmlで定義され、portlet.xmlで参照されているJ2EEセキュリティ・ロールを使用できます。「選択可能」リストには、ポートレット・アプリケーションのWebデプロイメント・ファイル(web.xml)に定義されているセキュリティ・ロールが表示されます。「使用可能」リストから「- 選択されたもの」リストにセキュリティ・ロールを移動すると、web.xml内のセキュリティ・ロールに対する参照が、アプリケーションのポートレット・デプロイ・ファイル(portlet.xml)に作成されます。

32. 新しいセキュリティ・ロールを定義する場合は、「新規セキュリティ・ロール」をクリックします。「セキュリティ・ロールの新規作成」ダイアログ・ボックス(図6-14)表示されます。

図6-14 「セキュリティ・ロールの新規作成」ダイアログ・ボックス

33. 「名前」フィールドに、セキュリティ・ロールの一意の名前を入力します。

34. 「説明」フィールドに、アクセス権限およびこのロールのポートレットでの制限についての、セキュリティ・ロールの説明を入力します。

35. 「OK」をクリックします。
新しいセキュリティ・ロールが、「使用可能」リストに追加されます。セキュリティ・ロールを手動で作成することもできます。

36. 「次へ」をクリックすると、「キャッシュ・オプション」ページ(図6-15)が表示されます。

図6-15 「キャッシュ・オプション」ページ

37. ポートレットのキャッシュを有効にする場合は、「キャッシュ・ポートレット」を選択します。
このオプションを選択すると、ポートレットのキャッシングをポートレット・コンテナで管理することを示されます。ポートレット自体で、指定のレスポンスのコンテンツをキャッシュすることもできます。このページで指定する設定は、レスポンスに対するキャッシュ条件がポートレットで指定されていない場合にのみ適用されます。

38. 「デフォルト失効条件」セクションで、次を選択します。

- キャッシュされているポートレット・コンテンツに有効期限を設定する場合は、「キャッシュ・コンテンツ有効期限 [] 秒」を選択します。隣接フィールドで時間制限を指定します。

- キャッシュされているポートレット・コンテンツに有効期限を設定しない場合は、「キャッシュ・コンテンツ無期限」を選択します。ポートレットのコンテンツが静的であまり変化しない場合は、このオプションを選択します。

注意:

このポートレットについてデフォルトのキャッシュをしない場合は、「デフォルトでキャッシュしない」を選択します。この場合、ウィザードではキャッシュ有効期限が0秒に設定されます。前述したとおり、このキャッシュ設定が有効となるのは、レスポンスに対するキャッシュ条件がポートレットで指定されていない場合のみです。

ここでキャッシュしないように設定し、後で、ポートレットについてデフォルトでキャッシュする必要が生じた場合は、簡単に変更できます。変更するには、ウィザードで生成したportlet.xmlファイルのキャッシュ有効期限の値を、0より大きい数字に指定します。

39. 「次へ」をクリックすると、「初期化パラメータ」ページ(図6-16)が表示されます。

図6-16 「初期化パラメータ」ページ

40. 初期化パラメータによって、.warファイルの内容を決定するWebアプリケーション開発者が指定されます。このファイルは、JNDI変数のかわりに、Webアプリケーション(サーブレットやポートレット)のすべてのコンポーネントの動作を互換性のある方法で構成するために使用します。初期化パラメータは、portlet.xmlファイルに追加されます。
初期化パラメータを追加する場合は、「新規」をクリックします。パラメータの表に新しい行が追加されます。行をダブルクリックすると詳細を編集できます。

41. 「名前」フィールドに、初期化パラメータの一意の名前を入力します。文字、数字、アンダースコアのみを使用できます。

42. 「値」フィールドに、パラメータのデフォルト値を入力します。

43. 「説明」フィールドに、パラメータの説明を入力します。

44. 初期化パラメータを削除するには、表で選択し、「削除」をクリックします。

45. 「次へ」をクリックすると、「終了」ページが表示されます。

注意:

PortalでWSRP2が有効になっている場合、ポータル・ナビゲーション・パラメータ・ページが表示されます。「次へ」をクリックすると、「終了」ページが表示されます。

46. 「終了」をクリックすると、ポートレット用のファイルが生成されます。「アプリケーション・ナビゲータ」のプロジェクト・ノードに対して、次のファイルが生成されます(図6-17を参照)。

- ポートレット・モードに「JSPの生成」を選択した場合は、モードごとにコードが生成されます。
「カスタム・コード」を選択した場合は、生成されるコードはポートレットのJavaクラスに属します。

- 2つのJavaクラス

- <packagename>.<portletname>.javaは、ポートレット・コンテナによって呼び出され、ポートレット標準で必要なすべてのメソッドを含みます。

- <packagename>.<portletname>Bundle.javaは、ポートレットのすべての翻訳文字列を含みます。

- portlet.xml

- oracle-portlet.xml

- web.xml

図6-17 アプリケーション・ナビゲータ

6.3.2 JSR 168ポートレットへのポートレット・ロジックの追加

ポートレットのデフォルト実装を作成した後は、独自のビジネス・ロジックでサンプル・コードを拡張し、必要な機能を実装できます。機能の追加方法は、JPSまたはJavadocを参照してください。

6.3.3 Oracle WebLogic ServerへのJSR 168ポートレットのデプロイ

ウィザードを終了してポートレットを生成した後は、そのポートレットをOracle WebLogic Serverにデプロイできます。WARファイルを作成してデプロイする手順は、次のとおりです。

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

2. 「新規ギャラリ」で「一般」を開き、「Deployment Profiles」を選択します。

3. 「項目」リストで、「WARファイル」を選択して、「OK」をクリックします。
「デプロイメント・プロファイルの作成 -- WARファイル」ダイアログ・ボックスが開きます。

4. 「デプロイメント・プロファイル名」フィールドに、デプロイ・ファイルのわかりやすい名前を入力します(たとえば、webapp)。

5. 「OK」をクリックします。
「WARデプロイメント・プロファイルのプロパティの編集」ダイアログ・ボックスが開きます。

6. 「Webアプリケーションのコンテキスト・ルート」の下で、「J2EE Webコンテキスト・ルートを指定」を選択し、対応するフィールドにコンテキスト・ルートを入力します(たとえば、my-portlet)。

7. 「OK」をクリックします。
「プロジェクト・プロパティ」ダイアログ・ボックスが開きます。

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

9. 「アプリケーション・ナビゲータ」で、プロジェクトを右クリックして「デプロイ」を選択し、デプロイ・ファイルを選択してから「デプロイ先」を選択し、最後にIntegratedWLSConnectionを選択します。

10. 「デプロイメント・タイプの選択」ダイアログ・ボックスで、「はい」を選択して「OK」をクリックします。

11. Oracle JDeveloperの下部にあるデプロイ・ログに「---- デプロイが終了 ----」メッセージが表示されたときは、エラーが発生していないことを確認します。

12. JSP準拠のポートレットのWSDL URLを次のように作成します。

http://host:port/context-root/portlets/wsrp2?WSDL

hostは、プロデューザがデプロイされているサーバーです。

portは、Application Server Controlコンソールのメイン・ページの「ポート」タブにあるOracle Web Cache HTTP Listenerポートです。

context-rootは、Webアプリケーションのコンテキスト・ルートで、「一般」の「WARデプロイメント・プロファイルのプロパティ」にあります。

13. Webブラウザで、前述の手順で指定したWSDL URLを入力し、正しく動作することを確認します。WSDL定義がブラウザに表示されない場合は、WARファイルのデプロイに失敗しています。付録B「Javaポートレットの問題」を参照してください。

14. SSL (HTTPS)を使用している場合は、Oracle Portalにプロデューサを登録する前にWSDL URLを変更する必要があります。SSLを使用していない場合は、次の手順をスキップできます。

注意:

HTTPSをプロデューサで動作させるには、『Oracle Fusion Middleware Oracle Portal管理者ガイド』で説明しているように、インフラストラクチャ・サーバー証明書ストアでサーバー証明書を事前構成する必要があります。

WSDL URLを変更する手順は、次のとおりです。

1. Webブラウザで、HTTPS WSDL URLを入力します。例:

http://host:port/context-root/portlets/WSRPBaseService?WSDL

宛先の各ポートが、HTTPSロケーションに表示されます。たとえば、次のようになります。

<wsdl:port binding="bind:WSRP_v1_Markup_Binding_SOAP" name="WSRPBaseService">
<soap:address location="https://host:port/context-root/portlets/WSRPBaseService"/>
</wsdl:port>

2. ポートがHTTPSロケーションにリストされない場合は、次に進む前に手動でこれらを変更する必要があります。これは、ブラウザからXMLをファイルに保存し、テキスト・エディタで開いて行います。

3. WSDL定義のコピーを、HTTPによる外部アクセスが可能なアプリケーション・サーバー上のファイルに保存します。たとえば、Apacheインストールのhtdocsディレクトリを使用します。Oracle Portalにプロデューサを登録するとき、登録の「接続の定義」ページでWSDL URLにこのWSDLロケーションを使用します。

15. ここでプロデューサを登録し、ポートレットを表示する必要があります。6.3.4項「JSR 168ポートレットの登録と表示」を参照してください。
ポートレット・コンテナにポートレットを再度デプロイすると、プロデューサとそのすべてのコンシューマの間で持たれている既存のセッションがすべて失われます。コンシューマが既存のプロデューサ・セッションを再利用しようとする場合、コンシューマが再デプロイ後初めてプロデューサに接続しようとすると、エラー・メッセージが表示されることがあります。

Error: Could not get markup. The cookie or session is invalid or there is a runtime exception.

プロデューサのセッションを再確立するには、ポータル・ページをリフレッシュします。新しいブラウザ・セッションからポートレットに再アクセスする場合は、このエラー・メッセージは表示されません。自動的に新しいプロデューサ・セッションが確立されるためです。

6.3.4 JSR 168ポートレットの登録と表示

プロバイダとそのポートレットを作成してデプロイした後は、そのプロバイダをOracle Portalに登録する必要があります。プロバイダを登録すると、そのプロバイダを検索して通信するために必要な情報がOracle Portalに提供されます。プロバイダを登録した後は、プロバイダとそのポートレットがポートレット・リポジトリで使用可能になります。また、Oracle Portalのナビゲータにもプロバイダとそのポートレットのリストが表示されます。

注意:

ポートレット・ビルダーなどの組込みツールを使用してポートレットやプロバイダを作成すると、Oracle Portalによってそのプロバイダが自動的に登録されます。さらに、作成したポートレットは、ポートレット・リポジトリに自動的に表示されます。Oracle Portalには組込みポートレットも用意されており、それらは事前構成済のプロバイダに含まれています。たとえば、複雑な設定が不要なポートレットのOmniPortletとWebクリッピングは、すでにOracle Portalに登録されています。これらのポートレットは「ポートレットの追加」リストで参照できます。ただし、ポートレットとプロバイダをプログラムで作成した場合、そのプロバイダは、ポータル・ユーザーが使用できるように登録する必要があります。

標準準拠のポートレット用にプロバイダを登録する手順は、次のとおりです。

1. Oracle Portalを開いてログインします。プロバイダを登録するには、プロバイダに対する管理権限または編集権限が必要です。これらの権限がない場合は、管理者にリクエストする必要があります。

2. 「Portalビルダー」ページで作業していない場合は、右上隅にある「ビルダー」をクリックします。

3. 「管理」タブをクリックします。

4. 「ポートレット」サブタブをクリックします。

5. 「リモート・プロバイダ」ポートレットで、「プロバイダの登録」をクリックして、「プロバイダの登録」ページを表示します(図6-18)。

図6-18 「プロバイダの登録」ページ

6. 「名前」フィールドに、プロバイダの名前を入力します。この名前は200文字までで、スペースまたは他の特殊文字は使用できません。

7. 「表示名」フィールドに、ポートレット・リポジトリなどでプロバイダが参照されるときに表示される名前を入力します。表示名は200文字以下です。

8. 「タイムアウト」フィールドに、タイムアウト・メッセージが表示されるまでにOracle Portalがプロバイダへの接続を試行する秒数を入力します。

9. 「タイムアウト・メッセージ」フィールドに、「タイムアウト」フィールドで指定した秒数以内にOracle Portalがプロバイダとの接続を確立できないときに表示するメッセージを入力します。メッセージは、ポートレットの本体に表示されます。メッセージにHTMLまたはmobileXMLを含めることはできません。

10. 「実装スタイル」リストから、WSRPプロバイダのWSRPを選択します。

注意:

なんらかの理由でプロバイダが使用できない場合は、そのプロバイダからのポートレットを含むページのレンダリングが遅くなる可能性があります。デフォルトでは、Oracle Portalは、ページ・アセンブリが完了する前にすべてのポートレットが戻されるまで待機します。遅延を回避するため、ページ・プロパティの「メイン」タブにある「ページ・アセンブリ・タイムアウト」を使用して時間制限を設定できます。Oracle Portalが指定されたタイムアウト期間内にプロバイダからポートレットを取得できない場合は、ポートレットなしでページをレンダリングします。プロバイダが後で利用できるようになった場合、Oracle Portalはページをリフレッシュし、取得できなかったポートレットを追加します。ページのレンダリングは、このように、特定のプロバイダが利用できないため停止するということはありません。ページ・アセンブリ・タイムアウトの詳細は、『Oracle Fusion Middleware Oracle Portalユーザーズ・ガイド』を参照してください。

11. 「次へ」をクリックすると、「接続の定義」ページ(図6-19)が表示されます。

12. WSDL URLフィールドに、プロバイダのWSDL URLを入力します。例:

http://myserver.com:8888/my-portlet/portlets/WSRPBaseService?WSDL

図6-19 「接続の定義」ページ

注意:

WSRPプロデューサには、WLDL v1またはv2フレームワークで動作するポートレットを含めることができます。WLDL v1ポートレットは、11gR1より前のOracle Portalリリースで動作します。WSDL v2ポートレットは、Oracle Portal 11gR1で動作します。v2ポートレットを含むWSRPプロデューサがv1 URLに登録されている場合は、ポートレット・リポジトリにv1登録名とv1ポートレットのみが表示されます。

したがって、v2ポートレットのみを含むWSRPプロデューサがv1 URLに登録されている場合は、ポートレット・リポジトリに登録名のみが表示され、ポートレットは表示されません。

13. 「次へ」をクリックすると、「登録プロパティ値を入力」ページ(図6-20)が表示されます。

14. プロバイダに必要な登録プロパティを指定します。必要な登録プロパティがない場合は、次の手順に進みます。

図6-20 「登録プロパティ値を入力」ページ

15. 「終了」をクリックします。図6-21に示すような「登録確認」ページが表示されます。

図6-21 「登録確認」ページ

16. これで、ポートレット・リポジトリ内のポートレットと同様に、ポートレットをページに追加できます。ポートレットをページに追加するには、『Oracle Fusion Middleware Oracle Portalユーザーズ・ガイド』の指示に従ってください。

6.3.5 エンタープライズ構成でのWSRPプロデューサの登録

エンタープライズ構成でWSRPプロデューサを登録する場合、Webサービス定義言語(WSDL)のドキュメントを手動で作成し、そのWSDLを使用してWSRPプロデューサを登録する必要があります。これは、動的に生成されたWSDLではHTTPSプロトコルおよびHTTPSポートを使用してURLが作成されるのに対し、WSRPプロデューサではHTTPが使用されるためです。

注意:

WSRPポートレットのプロデューサは、PDK-Javaポートレットのプロバイダと類似しています。

WSDLドキュメントを手動で作成するには、次のタスクを実行します。

1. ブラウザ(Internet Explorerを推奨)に、動的に生成されたWSDLを表示します。
WSRPサンプルのWSDLを表示するには、次に移動します:

http://host:external http port/portletapp/portlets?WSDL

2. ブラウザから外部の使用可能な場所にファイルを保存します。
このWSRPサンプルでは、ブラウザから次のディレクトリにファイルを保存します。

ORACLE_HOME/j2ee/home/applications/portletapp/wsrp-samples

ファイルをwsrpsamples.wsdlという名前で保存します。

3. ファイルを編集し、httpsをhttpに置き換え、ポートを外部HTTPポートに修正します。

4. ブラウザにファイルを表示します。
たとえば、このWSRPサンプルでは次のURLを使用します。

http://host:external http port/portletapp/wsrpsamples.wsdl

5. WSRPプロデューサを登録する場合、*.wsdlファイルに対するURL(ステップ4のURLなど)を使用します。

エンタープライズ構成の詳細は、Oracle Fusion Middlewareエンタープライズ・アーキテクチャおよびデプロイメント・ガイドを参照してください。

6.4 Oracle PDK-Javaの概要

Oracle PDK-Javaは、一般的に必要なユーティリティを提供することでJavaポートレットを簡単に開発できるフレームワークを提供し、これまでの開発スキルや、JSP、サーブレット、静的HTMLページなどの既存アプリケーション・コンポーネントを活用できるようにします。また、Oracle Portalとプロバイダ間の通信の複雑性に直接対処する必要なしにポートレットを作成できます。

Oracle PDK-Javaのフレームワークは次の領域に分けられます。

- プロバイダ・アダプタ: これにより、開発者は、Webプロバイダとの通信用にOracle Portalによって定義されたHTTP構文を使用しないで済むようになります。Oracle PortalとJava Webプロバイダ間で受け渡しされる情報がトランスレートされます。プロバイダは、アダプタがないと、ポートレットを管理するのみでなく、必要な言語でこの情報を直接Oracle Portalに伝達する必要があります。アダプタによって、Webプロバイダはポータル言語を理解する必要がなくなり、逆に、アダプタがない場合は、理解する必要が出てきます。

- プロバイダ・インタフェース: プロバイダ・アダプタとの統合にJava実装で必要となるAPI(関数)を定義します。プロバイダ・アダプタは、ポータルからのメッセージを受信してプロバイダ・インタフェースへのコールに変換し、プロバイダのレスポンスをポータルが理解できるフォーマットにトランスレートします。プロバイダ・インタフェースには、プロバイダが実装する必要のあるメソッドを定義するためのJavaクラスのセットが含まれ、多くの場合、標準実装が用意されています。主なクラスには次のものがあります。

- ProviderDefinition (oracle.portal.provider.v2.ProviderDefinition)

- ProviderInstance (oracle.portal.provider.v2.ProviderInstance)

- PortletDefinition (oracle.portal.provider.v2.PortletDefinition)

- PortletInstance (oracle.portal.provider.v2.PortletInstance)

- ParameterDefinition (oracle.portal.provider.v2.ParameterDefinition)

- EventDefinition (oracle.portal.provider.v2.EventDefinition)

- プロバイダ・ランタイム: プロバイダ・インタフェースの仕様に準拠する基本実装です。プロバイダ・ランタイムには、個々のプロバイダ・インタフェースを実装するためのデフォルト・クラスのセットが含まれ、PDK-Javaに付属のレンダリング、パーソナライズおよびセキュリティのフレームワークを活用できるようにします。このようなクラスと関連フレームワークは、Oracle Portalリクエストの共通関数を実装し、プロバイダを構成するための宣言メカニズムを提供することで、プロバイダの開発を簡略化します。プロバイダ・ランタイムを使用すると、ポータルとの通信に必要なインフラストラクチャではなく、ポートレット自体に開発労力を集中できます。プロバイダ・ランタイムの標準動作がニーズに一致しない場合に、特定の動作の拡張または変更を容易に行うことができます。主なクラスには次のものがあります。

- DefaultProviderDefinition (oracle.portal.provider.v2.DefaultProviderDefinition)

- DefaultProviderInstance (oracle.portal.provider.v2.DefaultProviderInstance)

- DefaultPortletDefinition (oracle.portal.provider.v2.DefaultPortletDefinition)

- DefaultPortletInstance (oracle.portal.provider.v2.DefaultPortletInstance)

- PortletRenderer (oracle.portal.provider.v2.render.PortletRenderer)

- PortletPersonalizationManager (oracle.portal.provider.v2.personalize.PortletPersonalizationManager)

- PortletSecurityManager (oracle.portal.provider.v1.http.DefaultSecurityManager)

- プロバイダ・ユーティリティ: ポートレットのレンダリングを簡略化するメソッドを提供します。このユーティリティには、有効なリンク(hrefs)を構築するメソッド、ポートレットのコンテナ(ヘッダーを含む)をレンダリングするメソッド、ポータル・ページ内で動作するHTMLフォームをレンダリングするメソッドおよびポートレット・キャッシュをサポートするメソッドが含まれています。

6.5 Oracle JDeveloperを使用したOracle PDK-Javaポートレットの構築

Oracle JDeveloperのOracle PDK-Javaポートレット・ウィザードを使用すると、短時間で簡単にポートレットの開発を開始できます。

この項では、次のことを前提にしています。

- ポートレットの表示モードなど、ポートレットに関する用語の知識があること。第1章「ポートレットの理解」および6.1項「Javaポートレット作成のガイドライン」を参照してください。

- Oracle JDeveloperに関する知識があり、それを使用したJavaコンポーネントを構築およびデプロイする方法を習得していること。Oracle JDeveloperはOTNからダウンロードできます。OTNの「Oracle JDeveloper」ページにアクセスします:

http://www.oracle.com/technology/products/jdev/index.html

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

- 6.5.1項「Oracle PDK-Javaポートレットとプロバイダの作成」

- 6.5.2項「Oracle PDK-Javaポートレットへのポートレット・ロジックの追加」

- 6.5.3項「Oracle PDK-Javaポートレットとプロバイダの検証」

- 6.5.4項「アプリケーション・サーバーへのOracle PDK-Javaポートレットのデプロイ」

- 6.5.5項「Oracle PDK-Javaポートレットの登録と表示」

6.5.1 Oracle PDK-Javaポートレットとプロバイダの作成

この項では、Oracle PDK-Javaポートレット・ウィザードの手順を説明します。最初に、実装するポートレットの表示モード、および実装メソッド(JSP、HTTPサーブレット、JavaクラスまたはHTML)を選択できます。次に、ウィザードによって、選択したモードごとに簡単なサンプル実装が作成されます。

ポートレットおよびプロバイダを作成する手順は、次のとおりです。

1. Oracle JDeveloperを起動します。

2. 「アプリケーション・ナビゲータ」で、ポートレットを作成するアプリケーションを開きます。

3. ポートレットを作成するプロジェクトを右クリックし、「新規」を選択します。

注意:

プロジェクトがまだない場合は、次のいずれかの方法で作成できます。

- 「アプリケーション・ナビゲータ」で既存のアプリケーションを右クリックし、「新規プロジェクト」を選択します。「空のプロジェクト」を選択し、「OK」をクリックします。「プロジェクトの作成」ダイアログ・ボックスに入力し、「OK」をクリックします。

- 「アプリケーション」ノードを右クリックし、「新規アプリケーション」を選択します。「アプリケーションの作成」ダイアログ・ボックスに入力し、「OK」をクリックします。「プロジェクトの作成」ダイアログ・ボックスが表示されたら、「OK」をクリックします。

4. 「新規ギャラリ」で「Web層」カテゴリを開き、「ポートレット」をクリックします。

5. 「項目」リストで「Oracle PDK-Javaポートレット」を選択します(図6-22)。

注意:

「規格に基づいたJavaポートレット」を選択すると、JPS準拠のポートレット作成のためのポートレット・ウィザードが開きます。「Oracle PDK-Javaポートレット」を選択すると、PDK-Javaポートレット作成のためのポートレット・ウィザードが開きます。

図6-22 Oracle PDK-Javaポートレットが選択された「新規ギャラリ」ダイアログ・ボックス

6. 「OK」をクリックすると、「プロバイダの詳細」ページ(図6-23)が表示されます。

図6-23 「プロバイダの詳細」ページ

7. 「プロバイダの詳細」ページで、ポートレットを含める新しいプロデューサの名前を入力します。この名前は、プロジェクト内で一意である必要があります。PDK-Javaでは、プロデューサではなく「プロバイダ」という用語を使用します。プロバイダは、プロデューサとまったく同じです。

8. デプロイメント・プロパティ・ファイルの生成」を選択します。
これによって、以下の2つの.propertiesファイルが自動的に生成されます。

- serviceID.propertiesは、そのサービスIDを持つプロデューサのプロパティを定義します。サービスIDの値は、プロデューサ名と同じ値です。

- _default.propertiesは、デフォルトのプロパティ・ファイルです。1つのプロデューサ・アプリケーションが複数のプロデューサを持つことができ、それぞれには固有のサービスIDが付きます。登録のときに、サービスIDが定義されていない場合は、デフォルトのプロパティ・ファイルが使用されます。

9. 「XMLエントリの生成」を選択します。
これによって、ウィザードによって生成されるものも含めて、プロデューサに属するポートレットの詳細を含むプロデューサ定義ファイル(provider.xml)が自動的に生成されます。

10. 「索引JSPの生成」を選択します。
これによって、アプリケーション内に存在するプロデューサと、プロデューサのテスト・ページへのアクセスを簡単にするハイパーリンクをすべてリストしたindex.jspファイルが自動的に生成されます。

11. 「次へ」をクリックすると、「一般ポートレット情報」ページが表示されます。

図6-24 「一般ポートレット情報」ページ

12. 「ポートレット名」フィールドに、ポートレットのわかりやすい名前を入力します。この名前は内部的に使用され、ユーザーには公開されません。表示名は、コンポーネント・パレットなどのポートレット選択リストでユーザーに対して表示されます。

13. 「表示名」フィールドに、ポートレットの表示名を入力します。この名前は、ポートレット・リポジトリでユーザーがページに追加するポートレットを選択する場合など、ポートレットの選択リストに表示されます。

14. 「説明」フィールドに、ポートレットの説明を入力します。この説明は、ポートレット・リポジトリでポートレット名の下に表示されます。

15. 「タイムアウト」フィールドに、ポートレットのレンダリングに与える秒数を入力します。

16. 「タイムアウト・メッセージ」フィールドに、ポートレットのレンダリングが指定したタイムアウト値を超えた場合に表示するメッセージを入力します。

17. 「次へ」をクリックすると、「ビュー・モード」ページ(図6-25)が表示されます。

図6-25 「ビュー・モード」ページ

18. 「ページの表示」セクションで、「実装スタイル」リストから共有画面モードの実装スタイルを選択します。

- ポートレットの共有画面モードをJavaServer Pageとして実装するには、「JSP」を選択します。「ファイル名」フィールドに、ウィザードで生成するファイルの名前を入力します。

- ポートレットの共有画面モードをHTTPサーブレットとして実装するには、「HTTPサーブレット」を選択します。「パッケージ名」フィールドに、HTTPサーブレットを含むパッケージの名前を入力します。「クラス名」フィールドに、ポートレットの共有画面モードとともに参照するJavaクラスを入力します。

- ポートレットの共有画面モードをHTMLファイルとして実装するには、「HTMLファイル」を選択します。「ファイル名」フィールドに、ウィザードで生成するファイルの名前を入力します。「HTMLファイル」を選択した場合は、provider.xmlファイルの<renderer>要素の内部に次のコードが追加されることに注意してください。

<showPage class="oracle.portal.provider.v2.render.http.ResourceRenderer">
<resourcePath>/hub_inside/index.html</resourcePath>
<contentType>text/html</contentType>
<charSet>UTF-8</charSet>
</showPage>

<charSet>は、HTMLページのエンコードに使用する文字セットをプロバイダに指定します。ウィザードで指定されるデフォルトの文字セットはUTF-8です。UTF-8以外の文字セットのエンコードが必要な場合は、provider.xmlのこの要素を適切に更新する必要があります。

- ポートレットの共有画面モードをJavaクラスとして実装するには、「Javaクラス」を選択します。「パッケージ名」フィールドに、Javaクラスを含むパッケージの名前を入力します。「クラス名」フィールドに、Javaクラスの名前を入力します。

共有画面モードの詳細は、6.1.1.1項「共有画面モード(JPSの場合は表示モード)」を参照してください。

19. ポートレットに全画面モードを実装する場合は、「詳細ページの表示」を選択し、前の「ページの表示」で説明したように「実装スタイル」を選択します。
全画面モードの詳細は、6.1.1.5項「全画面モード(PDK-Java)」を参照してください。

20. 「次へ」をクリックすると、「カスタマイズ・モード」ページ(図6-26)が表示されます。

図6-26 「カスタマイズ・モード」ページ

21. デフォルトでは、「ページの編集」が選択されています。ポートレットに編集モードを実装する場合は、前の「ページの表示」で説明したように「実装スタイル」を選択します。編集モードを実装しない場合は、「ページの編集」チェック・ボックスの選択を解除します。
編集モードの詳細は、6.1.1.2項「編集モード(JPSおよびPdk-Java)」を参照してください。

22. ポートレットにデフォルト編集モードを実装する場合は、「デフォルト・ページの編集」を選択し、前の「ページの表示」で説明したように「実装スタイル」を選択します。
デフォルト編集モードの詳細は、6.1.1.3項「デフォルト編集モード(JPSおよびPDK-Java)」を参照してください。

23. 「次へ」をクリックすると、「追加モード」ページ(図6-27)が表示されます。

図6-27 「追加モード」ページ

24. ポートレットにヘルプ・モードを実装する場合は、「ヘルプ・ページ」を選択し、前の「ページの表示」で説明したように「実装スタイル」を選択します。
ヘルプ・モードの詳細は、6.1.1.6項「ヘルプ・モード(JPSおよびOracle Portal)」を参照してください。

25. ポートレットに情報モードを実装する場合は、「ページ情報」を選択し、前の「ページの表示」で説明したように「実装スタイル」を選択します。
情報モードの詳細は、6.1.1.7項「情報モード(JPSおよびPDK-Java)」を参照してください。

26. 「次へ」をクリックすると、「パブリック・ポートレット・パラメータ」ページ(図6-28)が表示されます。

図6-28 「パブリック・ポートレット・パラメータ」ページ

27. パブリック・パラメータをポートレットに追加する場合は、「追加」をクリックして、ブランク行を作成します。パラメータの使用方法の詳細は、7.2.3項「パラメータの引渡しとイベントの送信」を参照してください。

28. 「名前」フィールドに、パラメータの内部名を入力します(たとえば、MyParam)。

29. 「表示名」フィールドに、ユーザーに対して表示する名前を入力します(たとえば、My Portlet Parameter)。

30. 「説明」フィールドに、パラメータの説明を入力します。

31. 「次へ」をクリックすると、「パブリック・ポートレット・イベント」ページ(図6-29)が表示されます。

図6-29 「パブリック・ポートレット・イベント」ページ

32. このページでは、パラメータをイベントにマップできます。イベントの使用方法の詳細は、7.2.3項「パラメータの引渡しとイベントの送信」を参照してください。

33. 「終了」をクリックすると、ポートレット用のファイルが生成されます。「アプリケーション・ナビゲータ」のプロジェクトに対して次のファイルが生成されます(図6-30を参照)。

- 選択した各ポートレット・モード用のファイル

- provider.xml

- web.xml

- index.jsp

- _default.properties

- <serviceID>.properties

これらすべてのファイルは、ポートレットを正常にデプロイして実行するために必要です。ただし、index.jspはOracle JDeveloperでテスト用に使用されます。

図6-30 アプリケーション・ナビゲータ

6.5.2 Oracle PDK-Javaポートレットへのポートレット・ロジックの追加

ポートレットのデフォルト実装を作成した後は、独自のビジネス・ロジックでサンプル・コードを拡張し、必要な機能を実装できます。機能の追加方法は、JPSまたはJavadocを参照してください。

6.5.3 Oracle PDK-Javaポートレットとプロバイダの検証

ポートレットを作成した後は、構成をチェックして、ポートレットとそのプロバイダが正しく動作することを確認する必要があります。

注意:

この手順は、テスト目的でのみ実行します。この手順を実行した後は、6.5.5項「PDK-Javaポートレットの登録と表示」で説明しているように、プロバイダを登録する必要があります。また、開発と本稼働では、6.5.4項「アプリケーション・サーバーへのOracle PDK-Javaポートレットのデプロイ」で説明しているように、必ずポートレットをアプリケーション・サーバーにデプロイする必要があります。

ポートレットとプロバイダを検証するには、次のようにします。

1. Oracle JDeveloperで、前項までで作成したプロジェクトを開きます。

2. アプリケーション・ナビゲータで、ポートレットのindex.jspファイルを右クリックし、「実行」を選択します。
ブラウザが開き、図6-31に示すようなページが表示されます。

図6-31 「ポートレット・アプリケーション・テスト・ページ」

3. 「サービス名」の下にあるリンクをクリックします。
ブラウザが開き、図6-32に示すようなページが表示されます。次のタスクでプロバイダを登録する際は、このページに表示されるURLが必要になることに注意してください。

図6-32 プロバイダ・テスト・ページ

6.5.4 アプリケーション・サーバーへのOracle PDK-Javaポートレットのデプロイ

ウィザードを終了してポートレットを生成した後は、そのポートレットをOracle WebLogic Server (WLS)にデプロイできます。以下の項で、Oracle PDK-JavaポートレットをWLSにデプロイする方法について説明します。

WARファイルを作成してデプロイするには、次の手順を実行します。

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

2. 「新規ギャラリ」で「一般」カテゴリを開き、「Deployment Profiles」を選択します。

3. 「項目」リストで、「WARファイル」を選択して、「OK」をクリックします。「デプロイメント・プロファイルの作成 -- WARファイル」ダイアログ・ボックスが開きます。

4. 「デプロイメント・プロファイル名」フィールドに、デプロイ・ファイルのわかりやすい名前を入力します(たとえば、myj2eeportlet)。

5. 「OK」をクリックします。「WARデプロイメント・プロファイルのプロパティ」ダイアログ・ボックスが開きます。

6. 「Webアプリケーションのコンテキスト・ルート」の下で、「Java EE Webコンテキスト・ルートを指定」を選択し、対応するフィールドにコンテキスト・ルートを入力します(たとえば、myj2eeportlet1)。

7. WEB-INF/libの下のContributorsノードを選択します。

8. ポートレット開発を選択します。

9. 「OK」をクリックします。「プロジェクト・プロパティ」ダイアログ・ボックスが開きます。

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

11. 「アプリケーション・ナビゲータ」で、プロジェクトを右クリックして「デプロイ」を選択し、デプロイ・ファイルを選択してから「デプロイ先」を選択し、最後にポートレットをデプロイするアプリケーション・サーバー接続を選択します。

12. Oracle JDeveloperの下部にあるデプロイ・ログに「---- デプロイが終了 ----」メッセージが表示されたときは、エラーが発生していないことを確認します。

13. ポートレットのURLを次のように作成します。

http://host:port/context-root/providers

hostは、プロバイダがデプロイされているサーバーです。

portは、Application Server Controlコンソールのメイン・ページの「ポート」タブにあるOracle Web Cache HTTP Listenerポートです。

context-rootは、Webアプリケーションのコンテキスト・ルートで、「一般」の「WARデプロイメント・プロファイルのプロパティ」にあります。

14. Webブラウザで、前述の手順で指定したURLを入力し、正しく動作することを確認します。図6-33に示すようなページが表示されます。

図6-33 PDK-Javaポートレットのテスト・ページ

6.5.5 Oracle PDK-Javaポートレットの登録と表示

プロバイダとそのポートレットを作成してデプロイした後は、そのプロバイダをOracle Portalに登録する必要があります。プロバイダを登録すると、そのプロバイダを検索して通信するために必要な情報がOracle Portalに提供されます。プロバイダを登録した後は、プロバイダとそのポートレットがポートレット・リポジトリで使用可能になります。また、Oracle Portalのナビゲータにもプロバイダとそのポートレットのリストが表示されます。

注意:

ポートレット・ビルダーなどの組込みツールを使用してポートレットやプロバイダを作成すると、Oracle Portalによってそのプロバイダが自動的に登録されます。さらに、作成したポートレットは、ポートレット・リポジトリに自動的に表示されます。Oracle Portalには組込みポートレットも用意されており、それらは事前構成済のプロバイダに含まれています。たとえば、複雑な設定が不要なポートレットのOmniPortletとWebクリッピングは、すでにOracle Portalに登録されています。これらのポートレットは「ポートレットの追加」リストで参照できます。ただし、ポートレットとプロバイダをプログラムで作成した場合、そのプロバイダは、ポータル・ユーザーが使用できるように登録する必要があります。

Oracle PDK-Javaポートレットのプロバイダを登録するには、次のようにします。

1. Oracle Portalを開いてログインします。プロバイダを登録するには、プロバイダに対する管理権限または編集権限が必要です。これらの権限がない場合は、管理者にリクエストする必要があります。

2. 「Portalビルダー」ページで作業していない場合は、右上隅にある「ビルダー」リンクをクリックします。

3. 「管理」タブをクリックします。

4. 「ポートレット」サブタブをクリックします。

5. 「リモート・プロバイダ」ポートレットで、「プロバイダの登録」をクリックして、「プロバイダの登録」ページを表示します。

6. 「名前」フィールドに、プロバイダの名前を入力します。名前は200文字までで、スペースまたは他の特殊文字は使用できません。

7. 「表示名」フィールドに、ポートレット・リポジトリなどでプロバイダが参照されるときに表示される名前を入力します。表示名は200文字以下です。

8. 「タイムアウト」フィールドに、タイムアウト・メッセージが表示されるまでにOracle Portalがプロバイダへの接続を試行する秒数を入力します。

9. 「タイムアウト・メッセージ」フィールドに、「タイムアウト」フィールドで指定した秒数以内にOracle Portalがプロバイダとの接続を確立できないときに表示するメッセージを入力します。メッセージは、ポートレットの本体に表示されます。メッセージにHTMLまたはmobileXMLを含めることはできません。

10. 「実装スタイル」リストから「Web」を選択します。

11. 「次へ」をクリックすると、「接続の定義」ページ(図6-34)が表示されます。

図6-34 「接続の定義」ページ

12. 「URL」フィールドに、プロバイダのURLを入力します。このURLは、6.5.4項「アプリケーション・サーバーへのOracle PDK-Javaポートレットのデプロイ」の最後に作成したものです。

13. 「サービスID」フィールドに、プロバイダのサービスIDを入力します。

注意:

PDK-Javaでは、1つのアダプタ・サーブレットの下に複数のプロバイダをデプロイできます。これらのプロバイダは、「サービスID」フィールドに表示されます。新しいプロバイダをデプロイする場合は、プロバイダにサービス識別子を割り当て、プロバイダWARファイルの作成時にそのサービス識別子を使用する必要があります。そのサービス識別子を使用してファイルservice_id.propertiesを検索します。このファイルは、テスト・ページの表示の有無など、プロバイダの特性を定義したものです。

サービス識別子の詳細は、D.1.2項「サービス識別子」を参照してください。

サンプルのプロバイダ・テスト・ページにアクセスするには、URLおよびサービスIDを指定する必要があります。サンプル・プロバイダのURLの例を次に示します。

http://myserver.com:8888/myj2eeportlet1/providers/sample

http://myserver.com:8888/myj2eeportlet1/providersがURLの値、sampleがサービスIDです。

14. 「終了」をクリックします。「登録確認」ページが表示されます。

15. これで、ポートレット・リポジトリ内のポートレットと同様に、ポートレットをページに追加できます。ポートレットをページに追加するには、『Oracle Fusion Middleware Oracle Portalユーザーズ・ガイド』の指示に従ってください。

6.6 Oracle PortalでのWSRPおよびJPDKアプリケーションの設定

この項では、WSRPおよびJPDKアプリケーションを手動で構成し、Oracle WebLogic Serverにデプロイする手順について説明します。

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

- WSRPの構成およびデプロイ

- JPDKの構成およびデプロイ

6.6.1 WSRPの構成およびデプロイ

WSRPを構成するには、次の手順を実行します。

- WSRP管理対象サーバーの作成

- WSRP管理対象サーバーへの必須ライブラリの追加

- WSRP管理対象サーバーの起動

- データソースの構成

- 既存のWebLogicドメインの拡張

- WSRP管理対象サーバーへのwsm-pmの追加

- サンプルEARファイルのデプロイ

- Oracle Web Cacheの構成

- ポートレットの登録と表示

WSRP管理対象サーバーの作成

カスタムのOracle Portalアプリケーションの実行に必要な管理対象サーバー・インスタンスの作成および共有ライブラリのプロビジョニングを行うために、Oracle WebLogic Server管理コンソールを使用して既存のドメインでWebLogic管理対象サーバーを作成できます。WSRP管理対象サーバーを作成するには、次の手順を実行します。

1. Oracle WebLogic Server管理コンソールにログオンします。

2. まだ行っていない場合は、管理コンソールのチェンジ・センターで「ロックして編集」をクリックします。

3. 「ドメイン構造」ツリーで、「環境」を開き、「サーバー」を選択します。
「サーバーのサマリー」ページが表示されます。

4. 新規をクリックします。
「新しいサーバーの作成」ページが表示されます。

5. 「新しいサーバーの作成」ページで、次の情報を入力します。

- サーバー名: WLS_WSRPなど、サーバーの名前を入力します。

- サーバー・リスニング・ポート: サーバー・インスタンスにアクセスするポート番号を入力します。たとえば、9003と入力します。

- 「いいえ、これはスタンドアロン・サーバーです。」ラジオ・ボタンを選択します。

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

7. 「サーバーのサマリー」ページで、作成したサーバー(WLS_WSRP)をクリックします。

8. 「マシン」ドロップダウン・リストからマシン名を選択して「保存」をクリックします。

9. 「変更のアクティブ化」をクリックします。

WSRP管理対象サーバーへの必須ライブラリの追加

ポートレット・プロデューサ・アプリケーションの場合は、新しい管理対象サーバーまたはクラスタに、次のライブラリをデプロイする必要があります。

- oracle.portlet-producer.wsrp(11.1.1,11.1.1)

- oracle.portlet-producer.jpdk(11.1.1,11.1.1)

- DMSアプリケーション(11.1.1.1.0)

- oracle.jrf.system.filter

- oracle.jsp.next(11.1.1,11.1.1)

- oracle.wsm.seedpolicies(11.1.1,11.1.1)

- wsil-wls

ライブラリを追加するには、次の手順を実行します。

1. 「ロックして編集」をクリックします。

2. 「ドメイン構造」ツリーで、「デプロイメント」を選択します。
「デプロイメントのサマリー」ページが表示されます。

3. 「デプロイメント」表からoracle.portlet-producer.wsrp(11.1.1,11.1.1)を選択します。
「oracle.portlet-producer.wsrp(11.1.1,11.1.1)の設定」ページが表示されます。

注意:

oracle.portlet-producer.wsrp(11.1.1,11.1.1)が「デプロイメント」表に表示されない場合は、「この表のカスタマイズ」をクリックして「デプロイメントを表示するときにライブラリを除外」チェック・ボックスを無効にします。「適用」をクリックします。

4. 「ターゲット」タブをクリックして「サーバー」セクションからAdminServerおよびWLS_WSRPを選択します。

5. 「保存」をクリックします。

6. 「デプロイメントのサマリー」ページに移動し、共有ライブラリごとに「ターゲット」タブをクリックして「サーバー」セクションからAdminServerおよびWLS_WSRPをチェックします。

7. wsil-wlsライブラリを追加するには、次の手順を実行します。

1. 「デプロイメント」表からwsil-wlsを選択します。

2. 「ターゲット」タブをクリックして「コンポーネント」表からwsil-wlsを選択します。

3. 「ターゲットの変更」をクリックして「サーバー」セクションからAdminServerおよびWLS_WSRPをチェックします。

4. 「はい」をクリックします。

8. 「変更のアクティブ化」をクリックします。

WSRP管理対象サーバーの起動

管理対象サーバーを起動するには、次の手順を実行します。

1. 「ロックして編集」をクリックします。

2. 「ドメイン構造」ツリーで、「環境」を開き、「サーバー」を選択します。
「サーバーのサマリー」ページが表示されます。

3. 「制御」タブをクリックして、作成したサーバー(WLS_WSRP)をチェックします。

4. 「開始」をクリックします。
「サーバー・ライフサイクル・アシスタント」ページが表示されます。

5. 「はい」をクリックして管理対象サーバーを起動します。

データソースの構成

portletPrefsデータソース・ターゲットを管理対象サーバー(WLS_WSRP)にマップするには、次の手順を実行します。

1. 「ドメイン構造」ツリーで「サービス」を展開し、「JDBC」を選択および展開して「データ・ソース」をクリックします。
「JDBCデータ・ソースのサマリー」ページが表示されます。

2. jdbc/portletPrefs JNDI.に関連付けられている名前をクリックします。

3. 「ターゲット」タブをクリックして「サーバー」セクションからWLS_WSRPをチェックします。

4. 「保存」をクリックします。

5. 「変更のアクティブ化」をクリックします。

既存のWebLogicドメインの拡張

Oracle WSM Policy Managerを使用して既存のOracle WebLogic Serverドメインを拡張するには、次の手順を実行します。

注意:

Oracle Portalドメインで実行中のすべてのサーバーを停止する必要があります。

1. 「既存のWebLogicドメインの拡張」を選択して「次へ」をクリックします。
「WebLogicドメイン・ディレクトリの選択」画面が表示されます。

2. 有効なドメイン・ディレクトリを選択して「次へ」をクリックします。
「拡張ソースの選択」画面が表示されます。

3. 「次の追加製品をサポートするために、自動的にドメインを拡張する:」オプションから(使用しているOracle Portalに関連付けられている)Oracle WSM Policy Manager - 11.1.1.0 [Oracle_Common]チェック・ボックスを選択して「次へ」をクリックします。
「JDBCデータ・ソースの構成」画面が表示されます。

4. 「次へ」をクリックします。
「JDBCデータ・ソースのテスト」画面が表示されます。

5. 「次へ」をクリックします。
「JDBCコンポーネント・スキーマの構成」画面が表示されます。

6. OWSM MDS Schemaをチェックして、MDSスキーマのホスト名、ポート、DBMS/サービス、スキーマ・パスワードを入力します。「次へ」をクリックします。

注意:

これは、インストール時にリポジトリ構成ユーティリティ(RCU)を実行した際、MDS用に作成されたスキーマです。このスキーマをまだ作成していない場合は、まず、RCUを使用してこのスキーマを作成する必要があります。

「コンポーネント・スキーマのテスト」画面が表示されます。

7. テストが正常に実行されたことを確認して「次へ」をクリックします。
「オプションの構成を選択」画面が表示されます。

8. 「デプロイメントとサービス」を選択します。

9. 「次へ」をクリックします。
「デプロイメントのクラスタまたはサーバーへのターゲット設定」画面が表示されます。

10. wsrp-pmがWLS_WSRPおよびAdminServerを含むサーバーを対象としていることを確認します。

11. 「次へ」をクリックします。
「サービスのクラスタまたはサーバーへのターゲット設定」画面が表示されます。

12. 「次へ」をクリックします。

13. 「構成のサマリー」画面の設定を確認し、「拡張」をクリックします。

14. 「完了」をクリックします。

Oracle WebLogicの管理サーバー、管理対象サーバー、およびWLS_WSRP管理対象サーバーを起動します。

WSRP管理対象サーバーへのwsm-pmの追加

次の手順を実行して、WLS_WSRP管理対象サーバーにwsm-pmを追加する必要があります。

1. まだ行っていない場合は、管理コンソールのチェンジ・センターで「ロックして編集」をクリックします。

2. 「ドメイン構造」ツリーで、「デプロイメント」を選択します。
「デプロイメントのサマリー」ページが表示されます。

3. 「デプロイメント」表からwsm-pmを選択します。

4. 「ターゲット」タブをクリックして「コンポーネント」表からwsm-pmを選択します。

5. 「ターゲットの変更」をクリックして「サーバー」セクションからAdminServerおよびWLS_WSRPをチェックします。

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

サンプルEARファイルのデプロイ

EARファイルをデプロイするには、http://www.oracle.com/technology/products/ias/portal/pdk.htmlにある「Download the Oracle Portlet Container」からwsrp-samples.earファイルをダウンロードし、次の手順を実行します。

1. 「ロックして編集」をクリックします。

2. 「ドメイン構造」ツリーで、「デプロイメント」を選択します。
「デプロイメントのサマリー」ページが表示されます。

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

4. ディレクトリからwsrp-samples.earを選択し、「次へ」をクリックします。

5. このデプロイメントをアプリケーションとしてインストールするを選択し、「次へ」をクリックします。

6. 「サーバー」セクションでWLS_WSRPをチェックし、「次へ」をクリックします。

7. デプロイメントの名前を入力し、「終了」をクリックします。

8. 「変更のアクティブ化」をクリックします。

9. 「デプロイメントのサマリー」ページで、デプロイしたアプリケーションを選択して「起動」をクリックします。

10. サンプルEARファイルのデプロイが完了したら、WSDL URLをブラウザに入力してテストする必要があります。WSDL URLの形式は次のとおりです。

http://host:port/portletapp/portlets?WSDL

例6-1に示すようなページが表示されます。

例6-1 WSRPプロデューサWSDLページ

<?xml version="1.0" encoding="UTF-8" ?>
<definitions targetNamespace="urn:oasis:names:tc:wsrp:v1:wsdl"
xmlns="http://schemas.xmlsoap.org/wsdl/"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:bind="urn:oasis:names:tc:wsrp:v1:bind">
<import namespace="urn:oasis:names:tc:wsrp:v1:bind"
location="http://stamf10.us.abc.com:8090/wsrp-tools/portlets/wsrp1?WSDL=wsrp_v1_bindings.wsdl" />
<service name="WSRP_v1_Service">
<port name="WSRPServiceDescriptionService"
binding="bind:WSRP_v1_ServiceDescription_Binding_SOAP">
<soap:address location="http://stamf10.us.abc.com:8090/wsrp-tools/portlets/WSRPServiceDescriptionService" />
</port>
<port name="WSRPBaseService" binding="bind:WSRP_v1_Markup_Binding_SOAP">
<soap:address location="http://stamf10.us.abc.com:8090/wsrp-tools/portlets/WSRPBaseService" />
</port>
<port name="WSRPPortletManagementService"
binding="bind:WSRP_v1_PortletManagement_Binding_SOAP">
<soap:address location="http://stamf10.us.abc.com:8090/wsrp-tools/portlets/WSRPPortletManagementService" />
</port>
<port name="WSRPRegistrationService" binding="bind:WSRP_v1_Registration_Binding_SOAP">
<soap:address location="http://stamf10.us.abc.com:8090/wsrp-tools/portlets/WSRPRegistrationService"/>
</port>
</service>
</definitions>

Oracle Web Cacheの構成

Oracle Web Cacheポートを使用してWSDL URLを表示するには、portal.confファイル(Windowsでの場所はORACLE_INSTANCE\config\OHS\ohs1\moduleconf)を次のように編集します。

<Location /portletapp>
SetHandler weblogic-handler
WebLogicHost servername.domain.com
WebLogicPort 9003
</Location>

ファイルを保存し、Oracle HTTP Serverを再起動します。これで、Oracle Portalポート(デフォルトポートは8090)を介してWSDL URLにアクセスできます。

ポートレットの登録と表示

プロバイダおよびそのポートレットを作成してデプロイした後、Oracle Portalでプロバイダを登録する必要があります。詳細は、『Oracle Fusion Middleware Oracle Portal開発者ガイド』のJSR 168ポートレットの登録および表示に関する説明を参照してください。

6.6.2 JPDKの構成およびデプロイ

JPDKを構成してデプロイするには、次の手順を実行します。

- JPDK管理対象サーバーの構成

- JPDK管理対象サーバーへの必須ライブラリの追加

- JPDK管理対象サーバーの起動

- データソースの構成

- EARファイルのデプロイ

- Oracle Web Cacheの構成

- ポートレットの登録と表示

JPDK管理対象サーバーの作成

カスタムのOracle Portalアプリケーションの実行に必要な管理対象サーバー・インスタンスの作成および共有ライブラリのプロビジョニングを行うために、Oracle WebLogic Server管理コンソールを使用して既存のドメインでWebLogic管理対象サーバーを作成できます。JPDK管理対象サーバーを作成するには、次の手順を実行します。

1. WebLogic Server管理コンソールにログオンします。

2. まだ行っていない場合は、管理コンソールのチェンジ・センターで「ロックして編集」をクリックします。

3. 「ドメイン構造」ツリーで、「環境」を開き、「サーバー」を選択します。
「サーバーのサマリー」ページが表示されます。

4. 新規をクリックします。
「新しいサーバーの作成」ページが表示されます。

5. 「新しいサーバーの作成」ページで、次の情報を入力します。

- サーバー名: サーバーの名前を入力します。この手順では、例としてWLS_JPDKを使用します。

- サーバー・リスニング・ポート: サーバー・インスタンスにアクセスするポート番号を入力します。この手順では、例として9004を使用します。

- 「いいえ、これはスタンドアロン・サーバーです。」ラジオ・ボタンを選択します。

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

7. 「サーバーのサマリー」ページで、作成したサーバー(WLS_JPDK)をクリックします。

8. 「マシン」ドロップダウン・リストからマシン名を選択して「保存」をクリックします。

9. 「変更のアクティブ化」をクリックします。

JPDK管理対象サーバーへの必須ライブラリの追加

ポートレット・プロデューサ・アプリケーションの場合は、新しい管理対象サーバーまたはクラスタに、次のライブラリをデプロイする必要があります。

- oracle.portlet-producer.jpdk(11.1.1,11.1.1)

- DMSアプリケーション(11.1.1.1.0)

- oracle.jsp.next(11.1.1,11.1.1)

ライブラリを追加するには、次の手順を実行します。

1. 「ロックして編集」をクリックします。

2. 「ドメイン構造」ツリーで、「デプロイメント」を選択します。
「デプロイメントのサマリー」ページが表示されます。

3. 「デプロイメント」表からoracle.portlet-producer.jpdk(11.1.1,11.1.1)を選択します。
「oracle.portlet-producer.jpdk(11.1.1,11.1.1)の設定」ページが表示されます。

注意:

oracle.portlet-producer.jpdk(11.1.1,11.1.1)が「デプロイメント」表に表示されない場合は、「この表のカスタマイズ」をクリックして「デプロイメントを表示するときにライブラリを除外」チェック・ボックスを無効にします。「適用」をクリックします。

4. 「ターゲット」タブをクリックして「サーバー」セクションからAdminServerおよびWLS_JPDKを選択します。

5. 「保存」をクリックします。

6. 「デプロイメントのサマリー」ページに移動し、共有ライブラリごとに「ターゲット」タブをクリックして「サーバー」セクションからAdminServerおよびWLS_JPDKをチェックします。

7. 「変更のアクティブ化」をクリックします。

JPDK管理対象サーバーの起動

管理対象サーバーを起動するには、次の手順を実行します。

1. 「ロックして編集」をクリックします。

2. 「ドメイン構造」ツリーで、「環境」を開き、「サーバー」を選択します。
「サーバーのサマリー」ページが表示されます。

3. 「制御」タブをクリックして、作成したサーバー(WLS_JPDK)を選択します。

4. 「開始」をクリックします。
「サーバー・ライフサイクル・アシスタント」ページが表示されます。

5. 「はい」をクリックして管理対象サーバーを起動します。

データソースの構成

portletPrefsデータソース・ターゲットを管理対象サーバー(WLS_JPDK)にマップするには、次の手順を実行します。

1. 「ドメイン構造」ツリーで「サービス」を展開し、「JDBC」を選択および展開して「データ・ソース」をクリックします。
「JDBCデータ・ソースのサマリー」ページが表示されます。

2. jdbc/portletPrefs JNDI.に関連付けられている名前をクリックします。

3. 「ターゲット」タブをクリックして「サーバー」セクションからWLS_JPDKをチェックします。

4. 「保存」をクリックします。

5. 「変更のアクティブ化」をクリックします。

EARファイルのデプロイ

JPDKをデプロイするには、次の手順を実行します。

1. 「ロックして編集」をクリックします。

2. 「ドメイン構造」ツリーで、「デプロイメント」を選択します。
「デプロイメントのサマリー」ページが表示されます。

3. 「インストール」をクリックします。
「アプリケーション・インストール・アシスタント」ページが表示されます。

4. 「パス」フィールドで、(WindowsではORACLE_HOME/archives/applications、UNIXではORACLE_HOME\archives\applicationsにある)jpdk.earファイルの場所を入力します。

5. jpdk.earを選択し、「次へ」をクリックします。

6. このデプロイメントをアプリケーションとしてインストールするを選択し、「次へ」をクリックします。

7. 「サーバー」セクションでWLS_JPDKをチェックし、「次へ」をクリックします。

8. 「名前」フィールドに、デプロイメントの名前を入力します。

9. 「終了」をクリックします。

10. 「変更のアクティブ化」をクリックします。

11. 「ロックして編集」をクリックします。

12. 「デプロイメントのサマリー」ページで、アプリケーションを選択して「起動」、「すべてのリクエストを処理」の順にクリックします。

13. 「アプリケーション起動アシスタント」から、「はい」をクリックします。

14. サンプルEARファイルのデプロイが完了したら、URLをブラウザに入力してテストする必要があります。URLの形式は次のとおりです。

http://host:port/jpdk/providers/sample/

詳細は、『Oracle Fusion Middleware Oracle Portal開発者ガイド』のJavaポートレットの作成に関する説明を参照してください。

Oracle Web Cacheの構成

Oracle Web Cacheポートを使用してJPDKサンプルURLを表示するには、portal.confファイル(Windowsでの場所はORACLE_INSTANCE\config\OHS\ohs1\moduleconf)を次のように編集します。

<Location /jpdk>
SetHandler weblogic-handler
WebLogicHost servername.domain.com
WebLogicPort 9004
</Location>

ファイルを保存し、Oracle HTTP Serverを再起動します。これで、Oracle Portalポート(デフォルトポートは8090)を介してWSDL URLにアクセスできます。

ポートレットの登録と表示

プロバイダおよびそのポートレットを作成してデプロイした後、Oracle Portalでプロバイダを登録する必要があります。詳細は、『Oracle Fusion Middleware Oracle Portal開発者ガイド』のPDK-Javaポートレットの登録および表示に関する説明を参照してください。

脚注

脚注1:  Javaポートレット仕様1.0は、Java Specification Request 168およびJSR168専門家グループによって作成されました。

7 Javaポートレットの拡張

この章では、Oracle JDeveloperポータル・アドインを使用して作成したJavaポートレットを拡張する方法、およびStrutsアプリケーションからポートレットを作成する方法について説明します。この章の内容は、次のとおりです。

- 7.1項「JPSポートレットの拡張」

- 7.2項「PDK-Javaポートレットの拡張」

- 7.3項「Oracle JDeveloperを使用したStrutsポートレットの作成」

この章で参照される多数の例のソース・コードは、PDK-Javaの一部として利用できます。PDK-JavaはOracle Technology Network (OTN)からダウンロードできます。

http://www.oracle.com/technology/products/webcenter/index.html

PDK-Javaを解凍すると、次の場所に例があります。

../pdk/jpdk/v2/src/oracle/portal/sample/v2/devguide

PDK-Java用の参照Javadocは次の場所にあります。

../pdk/jpdk/v2/apidoc

7.1 JPSポートレットの拡張

6.3.1項「JSR 168ポートレットの作成」に示すように、ポートレット・ウィザードで初期ポートレットを作成すると、これを拡張できます。JPSポートレットはJava標準に準拠しているため、これの拡張に関する情報は、サード・パーティの書籍やWebページなど様々なソースから多数入手できます。この項では、必要性が高い最重要レベルの拡張機能である7.1.1項「パーソナライズの追加」について説明します。

7.1.1 パーソナライズの追加

この項では、6.3.1項「JSR 168ポートレットの作成」で作成したポートレットを拡張します。拡張には、ユーザーがポートレットによるレンダリング対象のフィールドに編集モードまたはデフォルト編集モードでHTMLを貼り付けるために使用できるコードを使用します。また、ポートレットを簡単に再デプロイする方法についても説明します。

7.1.1.1 前提

この項のタスクを実行するには、次の前提が必要です。

- ウィザードで作成したポートレットが正常にプロデューサに登録され、ページに追加されていること。

7.1.1.2 パーソナライズの実装

この項では、コードをMy Java Portletに追加し、ポートレットを再デプロイし、これをOracle Portalでテストします。これを行うには、次の手順を実行します:

1. Oracle JDeveloperの「アプリケーション・ナビゲータ」で、JPS標準に準拠したポートレットのview.jspファイルをダブルクリックします。

2. 次のコードの中で太字で示された部分を追加します。

<%@ page contentType="text/html"
import="javax.portlet.*,java.util.*,mypackage1.Portlet1,
mypackage1.resource.Portlet1Bundle"%>"
<%@ taglib uri="http://java.sun.com/portlet" prefix="portlet"%>
<portlet:defineObjects/>
<%
PortletPreferences prefs = renderRequest.getPreferences();
%>
<%= prefs.getValue("portletContent", "Portlet Content") %>

3. ビジュアル・デザイナでedit.jspを開き、「設計」タブをクリックします。JSPは、図7-1で示すように、フォーム・フィールド、フォーム入力フィールドおよび2つのフォーム・ボタン・フィールドで構成されています。

図7-1 設計ビューでのedit.jsp

4. 次のコードの中で太字で示された部分を追加し、Contentという名前のフォーム・フィールドを実装します。

<FORM ACTION="<portlet:actionURL/>" METHOD="POST">
<TABLE BORDER="0">
<TR><TD WIDTH="20%">
<P CLASS="portlet-form-field" ALIGN="right">
<%= res.getString(Portlet1Bundle.PORTLETTITLE) %>
</P></TD><TD WIDTH="80%"><INPUT CLASS="portlet-form-input-field" TYPE="TEXT"
NAME="<%= Portlet1.PORTLETTITLE_KEY %>"
VALUE="<%= prefs.getValue(Portlet1.PORTLETTITLE_KEY,
res.getString("javax.portlet.title")) %>"
SIZE="20">
</TD></TR>
<tr><td width="20%">
<p class="portlet-form-field" align="right">
Content
</p>
</td><td width="80%">
</td></tr>
<TR><TD COLSPAN="2" ALIGN="CENTER">
<INPUT CLASS="portlet-form-button" TYPE="SUBMIT" NAME=
"<%= Portlet1.OK_ACTION%>"
VALUE="<%= res.getString(Portlet1Bundle.OK_LABEL) %>">
<INPUT CLASS="portlet-form-button" TYPE="SUBMIT" NAME=
="<%=Portlet1.APPLY_ACTION %>"
VALUE="<%= res.getString(Portlet1Bundle.APPLY_LABEL) %>"></TD></TR>
</TABLE>

5. 「設計」タブをクリックし、追加した新しいフォーム・フィールドを表示します(図7-2)。

図7-2 設計ビューでの変更されたedit.jsp

6. ビジュアル・エディタでWelcomePortlet.javaを開き、processActionメソッドに次の太字で示された2行のコードを挿入します。

// Save the preferences.
PortletPreferences prefs = request.getPreferences();
String param = request.getParameter(PORTLETTITLE_KEY);
prefs.setValues(PORTLETTITLE_KEY, buildValueArray(param));
String contentParam = request.getParameter("portletContent");
prefs.setValues("portletContent", buildValueArray(contentParam));
prefs.store();

7. ポートレットを再デプロイします。Oracle JDeveloperによりコードが自動的に保存およびコンパイルされた上で、ポートレットがデプロイされます。この手順の実行方法に関する注意は、6.3.3項「Oracle WebLogic ServerへのJSR 168ポートレットのデプロイ」を参照してください。

8. Oracle Portalで、ポートレットが含まれるページをリロードします。ポートレットには、Oracle JDeveloperで行った変更の1つである「Portlet Content」というテキストが表示されます。

9. 「カスタマイズ」リンクをクリックします。Oracle JDeveloperで追加した新しいフォーム・フィールドが表示されます。

10. 「Content」フィールドに次のHTMLを入力し、Portlet Contentというテキストを置き換えます。

11. <p>Read <em>The Path to Portlet Interoperability</em> by John Edwards in
<strong>Oracle Magazine</strong>, Nov-Dec 2003. </p>
<p>It discusses JSR 168 and WSRP open portals. </p>

12. 「適用」をクリックし、「閉じる」をクリックします。これにより、このHTMLはポートレットでレンダリングされます。

7.2 PDK-Javaポートレットの拡張

6.5項「Oracle JDeveloperを使用したOracle PDK-Javaポートレットの構築」に示すように、ポートレット・ウィザードで初期ポートレットを作成すると、次のタスクを実行してこれを拡張できます。

- 7.2.1項「表示モードの追加」

- 7.2.2項「パーソナライズの追加」

- 7.2.3項「パラメータの引渡しとイベントの送信」

- 7.2.4項「JNDI変数の使用」

- 7.2.6項「セッション情報へのアクセス」

- 7.2.7項「ポートレットのセキュリティの実装」

- 7.2.8項「ポートレットのパーソナライズのエクスポート/インポートの制御」

- 7.2.9項「キャッシュを使用したポートレットのパフォーマンスの向上」

- 7.2.11項「多言語ポートレットの作成」

この項では、次のことを前提にしています。

- ポートレットの表示モードなど、ポートレットに関する用語の知識があること。第1章「ポートレットの理解」および6.1項「Javaポートレット作成のガイドライン」を参照してください。

- Javaポートレット・コンテナをすでにダウンロードしてインストールしていること。

- Oracle JDeveloperに関する知識があり、それを使用したJavaコンポーネントを構築およびデプロイする方法を習得していること。Oracle JDeveloperはOTNからダウンロードできます。OTNの「Oracle JDeveloper」ページにアクセスします:

http://www.oracle.com/technology/products/jdev/index.html

7.2.1 表示モードの追加

表示モードを追加するには、ポートレット・ウィザードの各ページで該当するボックスを選択します。ウィザードの使用方法の詳細は、6.5項「Oracle JDeveloperを使用したOracle PDK-Javaポートレットの構築」を参照してください。ウィザードで選択した表示モードごとに、基本的なHelloWorldスケルトンが作成されています。ポートレットの作成後に表示モードを追加する必要がある場合やウィザードでは選択できないモード(プレビューまたはリンク)を追加する場合は、provider.xmlおよびHTMLまたはJSPをOracle JDeveloperで更新して手動で追加できます。次の各項では、PDK-Javaポートレットに表示モードを追加する方法について説明します。

- 7.2.1.2項「追加の表示モードの実装」

- 7.2.1.3項「XMLプロバイダ定義の更新」

- 7.2.1.4項「ポートレットの表示」

この項を終了すると、RenderManagerを使用してあらゆる表示モードを実装できます。これは、すべてのモードの原理が同じであるためです。たとえば、この項ではヘルプ・モードの実装方法は詳しく説明しませんが、プロセスはここで説明するプレビュー・モードと同じであるため、方法は理解できます。

この項で使用されているPDKランタイム・クラスの詳細は、次の「Portlet Development」ページの「Java Doc API」をクリックして、OTNのJavadocを参照してください。

http://www.oracle.com/technology/products/ias/portal/portlet_development_10g1014.html

provider.xmlの構文の詳細は、プロバイダのJavadocを参照してください。

http://www.oracle.com/technology/products/ias/portal/html/javadoc/xml_tag_reference_v2.html

7.2.1.1 前提

この項のタスクを実行するには、次の前提が必要です。

- ウィザードで作成したポートレットが正常にプロデューサに登録され、ページに追加されていること。

7.2.1.2 追加の表示モードの実装

表示モードを手動で作成する際は、最初に、各モードのHTMLファイルまたはJSPを作成します。たとえば、プレビュー・モードを実装する場合は、HTMLファイルを作成してプレビュー・コンテンツを提供する必要があります。

HTMLファイルを作成してコンテンツをプレビューする手順は、次のとおりです。

1. Oracle JDeveloperで、ポートレットが含まれるプロジェクトを開きます。

2. Webコンテンツhtdocs\myportletの下に、PreviewPage.htmlというHTMLページを作成します。ファイルのコンテンツは、たとえば次のようになります。

<p>This is the <i>preview</i> mode of your portlet!</p>

コンテンツをプレビューするためのHTMLファイルを作成すると、XMLプロバイダ定義を更新する準備が完了します。

7.2.1.3 XMLプロバイダ定義の更新

追加の表示モードを公開する場合は、次のようにXMLプロバイダ定義を更新する必要があります。

- ブール・フラグを設定し、そのモードへのリンクまたはアイコンをレンダリングする必要があることをPDKフレームワークに示します。

- そのモードに対して作成したHTMLファイルまたはJSPを指定します。

provider.xmlの構文の詳細は、OTNにあるプロバイダのJavadocを参照してください。

http://www.oracle.com/technology/products/ias/portal/html/javadoc/xml_tag_reference_v2.html

たとえば、プレビュー・モードをレンダリングする手順は、次のとおりです。

1. プロバイダ定義ファイルprovider.xmlを編集し、<portlet></portlet>タグでプレビュー・モードが有効になるように次のようにタグを追加します。

<showPreview>true</showPreview>

2. 7.2.1.2項「追加の表示モードの実装」で作成したHTMLページをプレビュー・ページとして指定します。

<previewPage>/htdocs/myportlet/MyPortletPreviewPage.html</previewPage>

3. 更新内容をprovider.xmlに保存します。

4. ポートレットを再デプロイします。6.5.4項「アプリケーション・サーバーへのOracle PDK-Javaポートレットのデプロイ」のステップ11を参照してください。
再デプロイする場合は、Oracle JDeveloperにより、コードが自動的に保存およびコンパイルされた上で、ポートレットがデプロイされます。

7.2.1.4 ポートレットの表示

新規の表示モードを表示するには、更新したXMLプロバイダ定義が再解析されるようにする必要があります。これを行うには、次の手順を実行します:

1. 7.2.1.2項「追加の表示モードの実装」で作成したHTMLファイルおよびprovider.xmlを、ポートレットをデプロイするWebLogic Serverインスタンスにコピーします。

2. プロバイダをリフレッシュします。

3. ポートレットが含まれているポータル・ページをリフレッシュします。

プレビュー・モードを表示する手順は、次のとおりです。

1. ページを編集するか、新規ページを作成して、「ポートレットの追加」を選択します。

2. ポートレット・リポジトリでプロバイダの場所(「ポートレット・ステージング領域」など)にナビゲートし、ポートレットを見つけます。図7-3に示すように、ポートレットの横に虫眼鏡のアイコンが表示されます。

図7-3 「ポートレットの追加」ページ

3. ポートレットの横にある虫眼鏡のアイコンをクリックすると、図7-4に示すような「プレビュー」ウィンドウが表示されます。

図7-4 「プレビュー」ウィンドウ

7.2.2 パーソナライズの追加

7.2.1項「表示モードの追加」では、PDKプロバイダ・フレームワークを使用して、ウィザードでポートレットを作成したときに無効だった表示モード、またはウィザードでは選択できない表示モード(リンク・モードとプレビュー・モードなど)を有効にしてレンダリングする方法を説明しました。この項では、2つのパーソナライズ・モード(編集およびデフォルト編集)を詳細に説明します。Javaポートレット・ウィザードで「ページを編集」と「デフォルト・ページを編集」を選択すると、この2つのパーソナライズ・モードについてスケルトン・コードが生成されます。このスケルトン・コードを使用すると、数行のコードでパーソナライズ・フレームワークにアクセスでき、パーソナライズ・フレームワークおよび値を保持するためのデータ・ストアをすべて手動でコーディングする必要がありません。ポートレットにパーソナライズを追加するには、次の作業を実行する必要があります。

- ポートレットの「編集」ページを更新し、パーソナライズの変更を設定して取得します。

- ポートレットの「デフォルトの編集」ページを更新し、パーソナライズの変更を設定して取得します。

- ポートレットの「表示」ページを更新して、ユーザーが設定したパーソナライズを使用します。

ポートレット・ユーザーは、編集モードおよびデフォルト編集モードを使用して、ポートレットでサポートされている一連のカスタマイズ可能パラメータを変更できます。通常は、これらのパラメータによって、ポートレットを他のモードでレンダリングします。Oracle Portalページにあるポートレットの特定のインスタンスの場合、編集モードおよびデフォルト編集モードで行われたパーソナライズは、そのポートレットのそのインスタンスにのみ適用されます。このことについて説明します。

- 編集モードでのパーソナライズは、パーソナライズを行う個々のユーザーに適用されます。このモードを有効にするには、表示モードで、ポートレット・ヘッダーにある「パーソナライズ」リンクをクリックします。

- デフォルト編集モードでのパーソナライズは、そのポートレット・インスタンスに対して特定のパーソナライズを行っていない、同じロケール内のすべてのユーザーに適用されます。通常、このモードを使用できるのはページ設計者のみで、ページ上の「編集」アイコンに従うことで有効にできます。

編集モードおよびデフォルト編集モードをレンダリングすると、PortletRendererは、パーソナライズ・プロセスをサポートするために、次のいずれかのタスクを実行できます。

- 編集フォームのレンダリング: ポートレットのカスタマイズ可能パラメータごとに、PortletRendererはPortletPersonalizationManagerを使用して現在の値を取得し、コントロールをHTMLフォームでレンダリングします。これによって、現在の値を編集できます。

- 編集フォーム操作の処理: 標準の編集フォーム・ヘッダーで「OK」または「適用」ボタンをクリックすると、PortletRendererはPortletPersonalizationManagerを使用して、編集フォームから送信されたパーソナライズ済パラメータを格納し、ブラウザを適切なポータル・ページにリダイレクトします。

したがって、PortletPersonalizationManagerコントローラを使用することによって、PortletRendererは、特定のポートレットのインスタンスやユーザーに適用されるカスタマイズ可能パラメータの現在の値を格納および取得できます。PDKフレームワークでは、一連のパーソナライズ済パラメータのコンテナとしてPersonalizationObjectの抽象化を使用し、一連のパーソナライズを格納するキーとしてPortletReferenceを使用します。つまり、PortletPersonalizationManagerは、特定のPortletReferenceの下にある永続的なPersonalizationObjectsの格納と取得を可能にするメカニズムです。

プリファレンス・ストアは、Oracle Portalの使用時に、ユーザー・プリファレンス・データ、ポートレットまたはプロバイダの設定、さらにポートレット・データなどの情報を格納するメカニズムです。ログアウトした後で再度ログインしても、以前保存したプリファレンスにアクセスできるという意味で、プリファレンス・ストアに格納された情報は永続的です。プリファレンス・ストアではユーザー設定項目情報が保持され、ユーザーがログインするたびにそのユーザーの設定項目が起動されます。PDK-Javaには、PreferenceStore実装を使用してパーソナライズ済データを永続化するPrefStorePersonalizationManagerが用意されています。現在、PDK-Javaには、DBPreferenceStoreおよびFilePreferenceStoreの2つのPreferenceStore実装があります。DBPreferenceStoreは、JDBCと互換性のあるリレーショナル・データベースを使用してデータを永続化し、FilePreferenceStoreは、ファイル・システムを使用してデータを永続化します。

これらの実装の詳細は、次の「Portlet Development」ページの「Java Doc API」をクリックして、OTNのJavadocを参照してください。

http://www.oracle.com/technology/products/ias/portal/portlet_development_10g1014.html

注意:

PDK-Javaには、プリファレンス・ストア移行/アップグレード・ユーティリティが用意されています。このユーティリティを使用すると、プリファレンス・ストアのファイル・システムからデータベースへの移行、およびパーソナライズの旧リリースからのアップグレードが簡単にできます。このユーティリティの詳細は、OTNを参照してください。

http://www.oracle.com/technology/products/webcenter/index.html

パーソナライズ機能をポートレットに追加するには、PrefStorePersonalizationManagerを、デフォルトのPersonalizationObject実装であるNameValuePersonalizationObjectとともに使用します。ユーザーがポートレット・タイトルをパーソナライズできるように、ウィザードではデフォルトで、編集モードおよびデフォルト編集モードに対して簡単な編集フォームが生成されます。この項では、ポータル・ユーザーがポートレット・メッセージをパーソナライズできるように、既存のコードを更新する方法を説明します。

7.2.2.1 前提

この項のタスクを実行するには、次の前提が必要です。

1. 次の項を読み終えて理解していること。

- 6.5項「Oracle JDeveloperを使用したOracle PDK-Javaポートレットの構築」

- 7.2.1項「表示モードの追加」

2. 「ページを編集」および「デフォルト・ページを編集」が選択された状態のウィザードで作成したポートレットをページに追加していること。

7.2.2.2 「編集」ページおよび「デフォルトの編集」ページでのパーソナライズの実装

ポートレットの「編集」ページは、ユーザーがポートレットをパーソナライズするときにコールされます。ウィザードで生成されたJSPには、ポートレット・タイトルのパーソナライズに必要なコードがすべてデフォルトで含まれています。さらにパーソナライズする場合は、数行のコードを「編集」ページに挿入する必要があります。

7.2.2.2.1 生成されたコードの確認

ウィザードでは、デフォルトで次のコードが作成されます。

<%@page contentType="text/html; charset=windows-1252"
import="oracle.portal.provider.v2.render.PortletRenderRequest"
import="oracle.portal.provider.v2.http.HttpCommonConstants"
import="oracle.portal.provider.v2.personalize.NameValuePersonalizationObject"
import="oracle.portal.provider.v2.render.PortletRendererUtil"
%>

<%
PortletRenderRequest pReq = (PortletRenderRequest)
request.getAttribute(HttpCommonConstants.PORTLET_RENDER_REQUEST);
%>

<P>Hello <%=pReq.getUser().getName() %>.</P>
<P>This is the <b><i>Edit</i></b> render mode!</P>
<%-- This page both displays the personalization
form and processes it,. Display the form if
there is no action parameter, process it
otherwise --%>

<%
String actionParam = PortletRendererUtil.getEditFormParameter(pReq);
String action = request.getParameter(actionParam);
String title = request.getParameter("my2portlet_title");
NameValuePersonalizationObject data = (NameValuePersonalizationObject)
PortletRendererUtil.getEditData(pReq);
// Cancel automatically redirects to the page, so
// will only receive OK or APPLY
if (action !=null)
{
data.setPortletTitle(title);
PortletRendererUtil.submitEditData(pReq, data);
return;
}

// Otherwise just render the form.
title = data.getPortletTitle();
%>
<table border="0">
<td width="20%">
<p align="right">Title:</p>
</td>
<td width="80%">
<input type="TEXT" name="my2portlet_title" value="<%= title %>">
</td>
</table>

7.2.2.2.2 生成されたコードの変更

JSPには、ポートレット・タイトル用の入力フィールドが含まれています。このフィールドはポートレットの「パーソナライズ」ページを表し、ユーザーはこのページでポートレット・タイトルを更新できます。生成されたコードを変更するための手順は、次のとおりです。

1. 生成されたコード内の表に続いて、ユーザーがポートレットの新しいメッセージを入力できるテキスト・フィールドとプロンプトを含む2番目の表を追加します。

<table border="0">
<tr>
<td width="20%">
<p align="right">Greeting:</p>
</td>
<td width="80%">
<input type="TEXT" name="myportlet_greeting" value="<%= greeting %>">
</td>
</tr>
</table>

2. このHTMLは、「編集」ページで新しいメッセージを入力するためのフィールドを指定します。この新しいメッセージは、ポートレットの共有画面モードで表示されます。次に、String titleの下に、メッセージの値を取得する文字列を追加します。

String title = request.getParameter("my2portlet_title");
String greeting = request.getParameter("myportlet_greeting");

3. ウィザードで「編集」ページが生成されると、パーソナライズ・フレームワークへのアクセスがページ・コードに自動的に含まれます。「編集」ページの最上部で、NameValuePersonalizationObjectが宣言されています。Oracle Portalにあるパーソナライズ用のこのフォームを使用すると、名前と値のペアを簡単に格納できます。
「編集」ページでは、ページの表示、またはページへの変更の適用を処理します。これまでに行った変更は、ページを表示するためのコードに影響を与えます。「編集」ページへの変更の適用は、if (action !=null)で始まるコード・ブロックで処理されます。

新しいポートレット・メッセージは、このコード・ブロックで格納する必要があります。また、ユーザーが何も変更しなかったため、既存のメッセージを取得する場合にも対処する必要があります。

if (action !=null)
{
data.setPortletTitle(title);
//Put the new greeting.
data.putString("myportlet_greeting", greeting);
PortletRendererUtil.submitEditData(pReq, data);
return;
}
//Otherwise just render the form.
title = data.getPortletTitle();
//Get the old greeting.
greeting = data.getString("myportlet_greeting");

これで、「編集」ページの更新が完了しました。

これらの変更内容は、「デフォルトの編集」ページにそのままコピーできます。「デフォルトの編集」ページは、ページ設計者またはポータル管理者がページで「編集」をクリックしてからポートレットの「デフォルトの編集」アイコンをクリックするとコールされます。このページでは、ポートレットのこのインスタンスに対して、デフォルトのパーソナライズを設定します。JSPのコードが同じ場合でも、PDKフレームワークとOracle Portalは、表示モード(編集またはデフォルト編集)に応じて個別にパーソナライズを自動的に処理します。

7.2.2.3 「表示」ページでのパーソナライズの実装

ポートレットの共有画面モードでパーソナライズ・データにアクセスするには、「表示」ページに数行のコードを追加する必要があります。これらの行を追加することで、次のタスクを実行します。

- import文の追加

- NameValuePersonalizationObjectの宣言

- パーソナライズ・データの取得

「表示」ページのパーソナライズを実装する手順は、次のとおりです。

1. 「表示」ページを編集し、NameValuePersonalizationObjectおよびPortletRendererUtilをインポートします。これらは、必要に応じて「編集」ページからコピーすることもできます。

<%@page contentType="text/html; charset=windows-1252"
import="oracle.portal.provider.v2.render.PortletRenderRequest"
import="oracle.portal.provider.v2.http.HttpCommonConstants"
import="oracle.portal.provider.v2.personalize.
NameValuePersonalizationObject"
import="oracle.portal.provider.v2.render.PortletRendererUtil"
%>

2. NameValuePersonalizationObjectを宣言し、ポートレット・レンダリング・リクエストから編集データを取得します。この編集データは、ポートレットの「編集」ページからコピーすることもできます。

<%
PortletRenderRequest pReq = (PortletRenderRequest)
request.getAttribute(HttpCommonConstants.PORTLET_RENDER_REQUEST);
NameValuePersonalizationObject data = (NameValuePersonalizationObject)
PortletRendererUtil.getEditData(pReq);
%>

3. パーソナライズ・フレームワークから文字列情報を取得します。

<%
String greeting = data.getString("myportlet_greeting");
%>

4. ポートレットの共有画面モードでメッセージを表示する「表示」ページに、テキストを追加します。

<P>Hello <%= pReq.getUser().getName() %>.</P>
<P>This is the <b><i>show</i>,</b> render mode!</P>
<P>Greeting: <%= greeting %></P>

これで、ポートレットの「表示」ページの更新が完了しました。

7.2.2.4 XMLプロバイダ定義内の設定情報

ポートレット・ウィザードでは、XMLプロバイダ定義ファイル(provider.xml)のPreferenceStoreにアクセスするために必要なすべてのタグが生成されます。デフォルトでは、ウィザードはプロバイダ・レベルでFilePreferenceStoreクラスを使用して設定を格納します。

<provider class="oracle.portal.provider.v2.DefaultProviderDefinition">
<session>false</session>
<passAllUrlParams>false</passAllUrlParams>
<preferenceStore class="oracle.portal.provider.v2.preference.FilePreferenceStore">
<name>prefStore1</name>
<useHashing>true</useHashing>
</preferenceStore>

ポートレット・レベルでは、PrefStorePersonalizationManagerをpersonalizationManagerクラスとして使用し、NameValuePersonalizationObjectをデータ・クラスとして使用するためのタグが追加されます。

<personalizationManager class="oracle.portal.provider.v2.personalize.
PrefStorePersonalizationManager">
<dataClass>oracle.portal.provider.v2.NewValuePersonalizationObject</dataClass>
</personalizationManager>

FilePreferenceStoreクラスを継続して使用する場合、XMLプロバイダ定義に対する変更や更新は不要です。ただし、Oracle Portalのグローバル環境がある場合(たとえば、Oracle Containers for Java EEインスタンスのロード・バランスされた複数ノード・クラスタで実行中の場合)、または設定をデータベースに格納する場合は、クラスをFilePreferenceStoreからDBPreferenceStoreに変更できます。

DBPreferenceStoreの使用方法の詳細は、『Oracle Fusion Middleware Oracle Portal管理者ガイド』を参照してください。

provider.xmlの構文の詳細は、OTNにあるプロバイダのJavadocを参照してください。

http://www.oracle.com/technology/products/ias/portal/html/javadoc/xml_tag_reference_v2.html

7.2.2.5 ポートレットの表示

前述の項で行ったパーソナライズの変更を表示するには、ポートレットをアプリケーション・サーバーまたはOracle Containers for Java EEにデプロイし、ポートレットが含まれるページをリフレッシュする必要があります。ポートレットのデプロイの詳細は、6.5.4項「アプリケーション・サーバーへのOracle PDK-Javaポートレットのデプロイ」を参照してください。

ポートレットにNULLのメッセージが含まれていることを確認してください。ポートレット・タイトル・バーで「パーソナライズ」をクリックし、メッセージを更新します。ページに戻ると、変更内容が反映されています。

また、ページ上の「編集」をクリックしてから「デフォルトの編集」アイコンをクリックすると、「デフォルトの編集」をテストできます。すでにポートレットは変更されているため、パブリック・ユーザーまたは別のユーザーとしてページを表示するまで、変更内容は共有画面モードで表示されません。

7.2.3 パラメータの引渡しとイベントの送信

Oracle PortalおよびPDKは、ポートレット開発者が再利用可能で複雑なポートレットを簡単に作成できるように、ページ・パラメータ、パブリック・ポートレット・パラメータ、プライベート・ポートレット・パラメータおよびイベントを提供しています。Oracle JDeveloperのポートレット・ウィザードは、パラメータとイベントを使用するように設定されたポートレットを作成します。この機能によって、開発者はビジネス・ロジックをポートレットに追加するのみ行い、provider.xmlを変更する必要はありません。

パラメータおよびイベントの概要は、次の項を参照してください。

- 2.12項「パブリック・ポートレット・パラメータのサポート」

- 2.13項「プライベート・ポートレット・パラメータのサポート」

- 2.14項「イベントのサポート」

7.2.3.1 前提

この項のタスクを実行するには、次の前提が必要です。

1. 6.5項「Oracle JDeveloperを使用したOracle PDK-Javaポートレットの構築」を読んで理解していること。

2. ウィザードで作成したポートレットがページに正常に追加されていること。

注意:

各ポートレットのデータは4Kに制限されています。パラメータ、イベント名、表示名および説明の各長さもすべてこの4Kの制限に対するカウント対象に含まれます。このため、各ポートレットに対して必要以上の数のパラメータやイベントを使用しないこと、またはこれらの名前や説明を長くしないことが必要です。

7.2.3.2 パブリック・パラメータの追加

6.5項「Oracle JDeveloperを使用したOracle PDK-Javaポートレットの構築」では、ウィザードを使用して、基本的なポートレットを作成し、MyParamというパラメータを指定しました。パラメータを作成していない場合は、ここで新しいポートレットを作成できます。ポートレットを作成するには、Oracle JDeveloperの「アプリケーション - ナビゲータ」でprovider.xmlを右クリックし、「ポートレットの追加」を選択して、6.5項「Oracle JDeveloperを使用したOracle PDK-Javaポートレットの構築で説明している手順を実行します。

ウィザードでは、コードまたはファイルを更新する必要がなくページ・パラメータを簡単にマップできるポートレットがデフォルトで作成されます。この項では、ウィザードで作成されたデフォルト・パラメータを使用します。

デフォルト・パラメータを使用するには、プロバイダを登録して、ポートレットをページに追加する必要があります。追加した後に、次のタスクを実行します。

- ページ・パラメータを作成します。

- ページ・パラメータをJavaポートレットにマップします。

- URL、またはこのページ・パラメータを渡す別のポートレットにパラメータ値を入力します。

ポートレットにパラメータを追加する手順は次のとおりです。

1. ページ・プロパティの「パラメータ」タブに移動します。パラメータは、デフォルトで有効になっています。無効な場合は、続行する前に有効にしてください。

2. MyParameterというページ・パラメータを作成し、デフォルト値はMy Default Valueと入力します。

3. Javaポートレットを開き、作成したページ・パラメータをポートレット・パラメータにマップします。ポートレットのパラメータは、MyParameterと呼ばれるページ・パラメータにマップする必要があります。

4. ページに戻ります。ポートレットにMy Default Valueという値が表示されていることに注意してください。

5. ページを表示し、URLの最後にパラメータと値を入力します。

&MyParameter=This%20portlet%20works

図7-5は、パラメータ・ポートレットの一例を示しています。

図7-5 パラメータ・ポートレット

OmniPortletのシンプル・パラメータ・フォームなど、パラメータを渡すことができるポートレットがある場合は、「イベント」タブを使用して、そのポートレットからJavaポートレットにパラメータをマップできます。

ここで、ウィザードで生成されたコードおよびタグを確認すると、Javaポートレットでパラメータを有効にするには、数行のコードが必要であることがわかります。

provider.xmlを確認します。ウィザードによって、inputParameterというタグ・グループが追加されています。これには、ポートレットがリスニングするパラメータの名前が含まれます。

<inputParameter class="oracle.portal.provider.v2.DefaultParameterDefinition">
<name>MyParam</name>
<displayName>My Portlet Parameter</displayName>
</inputParameter>

provider.xmlの構文の詳細は、OTNにあるプロバイダのJavadocを参照してください。

http://www.oracle.com/technology/products/ias/portal/html/javadoc/xml_tag_reference_v2.html

また、ウィザードによって、このパラメータを受信してパラメータ名とその値を表示する「表示」ページのコードがJSPで生成されています。

<%
ParameterDefinition params[] =
pReq.GetPortletDefinition().getInputParameters();
%>

<p>This portlets input parameters are ...</p>
<table align="left" width="50%"><tr><td><span class="PortletHeading1">Value
</span></td></tr>
<%
String name = null;
String value = null;
String[] values = null;
for (int i = 0; i < params.length; i++)
{
name = params[i].getName();
values = pReq.getParameterValues(name);
if (values != null)
{
StringBuffer temp = new StringBuffer();
for (int j = 0; j < params.length; j++)
{
temp.append(values[j]);
if (j + 1 != values.length)
{
temp.append(", ");
}
}
value = temp.toString();
}
else
{
value = "No values submitted yet.";
}
%>
<tr>
<td><span class="PortletText2" <%= name %></span></td>
<td><span class="PortletText2" <%= value %></span></td>
</tr>
<%
}
%>
</table>

7.2.3.3 プライベート・ポートレット・パラメータの引渡し

1つのポートレット内で使用されるパラメータを、プライベート・パラメータといいます。これらは、1つのポートレット・インスタンスでのみ表示されます。ポートレット・パラメータは、この項で説明するPDK-Java APIを使用して作成およびアクセスします。ポートレット・コンシューマで正しく処理されるように、パラメータ名は修飾されます。以下のAPIによって、この処理が行われます。

HttpPortletRendererUtil.portletParameter(HttpServletRequest request, String param);

HttpPortletRendererUtilは、パッケージoracle.portal.provider.v2.render.httpに含まれています。

例:

qualParamQ = HttpPortletRendererUtil.portletParameter(r, "q");

受信リクエストからポートレット・パラメータの値をフェッチするには、次のAPIを使用します。

注意:

このAPIは、受信リクエストから値をフェッチする前にパラメータ名を修飾パラメータ名に変換します。このため、この手順を実行する必要はありません。

PortletRenderRequest.getQualifiedParameter(String name);

PortletRenderRequestは、パッケージoracle.portal.provider.v2.renderに含まれています。

例:

valueQ = r.getQualifiedParameter("q");

プライベート・パラメータを使用するためのユーティリティの詳細は、7.2.3.3.2項「ポートレットのURLタイプを使用したリンクの構築」および7.2.3.3.3項「ポートレットのURLタイプを使用したフォームの構築」を参照してください。

7.2.3.3.1 ポートレットのURLタイプ

ポートレット内リンクは、ポートレットがあるOracle Portalページを参照します。多くの場合、このポートレットはOracle Portalから離れた場所で動作しています。このため、ポートレットがOracle PortalページのURLを知らなくても正しいページのリンクをレンダリングできるようにする方法を検討する必要があります。ポートレットによって使用されるリンクのタイプの詳細は、6.1.2項「ポートレット内のナビゲーションのガイドライン」を参照してください。

Oracle Portalは、ポートレットに自身でレンダリングさせる場合、このポートレットに様々なURLを渡します。ポートレットはこれらのURLを使用して、ポートレット内リンクなど必要なリンクをレンダリングします。これらのURLをフェッチおよび操作することにより、Oracle Portal内のポートレットおよびページの間のリンクを作成するタスクを簡略化できます。

Oracle Portalでは、ポートレットに対して次のURLを提供しています。

- PAGE_LINK: ポートレット・インスタンスがあるページのURLです。このURLは、すべてのポートレット内リンクのベースとして使用します。ユーザーを同じポートレットの別のセクションにナビゲートするリンクをポートレットでレンダリングする場合、このナビゲーションは、PAGE_LINKを使用してパラメータ・セットとしてエンコードする必要があります。このURLは、デスクトップ・ポートレットとモバイル・ポートレットの両方で役に立ちます。

- DESIGN_LINK: ポートレットのパーソナライズ・ページを示すOracle PortalページへのURLです。Oracle Portalでは、ポートレットの編集モードおよびカスタマイズ・モードはポートレットと同じページ上にはレンダリングされません。編集モードおよびカスタマイズ・モードは、ブラウザ・ウィンドウ全体を占有します。Oracle Portalのポートレットの編集/カスタマイズ・ページには、すべてのユーザーがアクセスできるわけではありません。これは、ポートレットがそのパーソナライズまたは編集オプションを自由にレンダリングできる最小限の静的フレームワークです。このURLは、デスクトップ・クライアントでのみサポートされている編集およびカスタマイズ・リンクをレンダリングする場合のみ役に立ちます。

- LOGIN_LINK: OracleAS Single Sign-On ServerのURLです(ポートレットがユーザーにログインを要求する場合(PUBLICの場合))。このリンクはまれにのみ使用され、ポートレットのデスクトップ・レンダリングにのみ適用されます。

- BACK_LINK: ポートレットがそれ自体をレンダリングする現行のページからの有効な戻りポイントとしてOracle Portalが考慮するページへのURLです。たとえば、ポートレットがその「編集」ページをレンダリングする場合、このリンクは、ポートレットがありユーザーが「編集」ページへナビゲートされる元のページを参照します。このため、このリンクは、保留中のアクションを受け入れる、または取り消すボタンにエンコードします。このURLは、ポートレットのデスクトップ・レンダリングでのみ役に立ちます(通常は編集またはカスタマイズ・モード)。モバイル・ポートレットは、ポートレットがそれ自体のコンテンツをレンダリングするままにして、「戻る」リンクを自動的にレンダリングします。

- EVENT_LINK: 特定のページに明示的にナビゲートするかわりにイベントを発生させるURLです。このリンクは、イベント・マネージャへのOracle Portalエントリ・ポイントを指し示します。このURLは、デスクトップ・ポートレットとモバイル・ポートレットの両方で役に立ちます。

7.2.3.3.2 ポートレットのURLタイプを使用したリンクの構築

URLパラメータを使用してリンクを構築するには、ポートレットのレンダリング・コードの作成時にこれらにアクセスして使用する必要があります。リンクのURLをフェッチするには、PDKで次のAPIをコールします。

portletRenderRequest.getRenderContext().getPageURL()
portletRenderRequest.getRenderContext().getEventURL()
portletRenderRequest.getRenderContext().getDesignURL()
portletRenderRequest.getRenderContext().getLoginServerURL()
portletRenderRequest.getRenderContext().getBackURL()

ポートレットのナビゲーションの場合、ページURLのポートレット・パラメータを追加(または更新)する必要があります。このタスクを実行するには、次のAPIを使用して適切なURLを構築します。

UrlUtils.constructLink(
PortletRenderRequest pr,
int linkType, -- UrlUtils.PAGE_LINK in this case
NameValue[] params,
boolean encodeParams,
boolean replaceParams)

UrlUtilsは、oracle.portal.provider.v2.urlと呼ばれるパッケージに含まれています。実際には自分自身でページURLをフェッチすることはありません。かわりに、提供されているポートレットURLタイプの1つであるUrlUtils.PAGE_LINKを使用します。

params引数のパラメータ名は完全に修飾されている必要があります。また、パラメータが正しく修飾されていることを前提に、適切なlinkTypeを持つUrlUtils.constructLinkが、ポートレットに属さないURLパラメータを妨害していない必要があります。

UrlUtils.contructLinkの代替バージョンは、URLを受け入れて、それを、戻されるURLのベースとします。HTMLリンクが必要な場合、UrlUtils.constructHTMLLinkを使用して完全なアンカー要素を作成できます。

次のポートレット例であるThesaurusLink.jspでは、パラメータqを使用して、シソーラスで検索する単語を識別します。次に、見つかった関連単語についてのリンクが作成され、ユーザーはこのリンクをたどり、この新しい単語に影響するシソーラスを取得します。値qを設定する初期の実行フォームの詳細は、7.2.3.3.3項「ポートレットのURLタイプを使用したフォームの構築」の例を参照してください。

注意:

SimpleResult(モバイル・ポートレット用)の属性をレンダリングする場合、属性値に無効なXML文字が含まれる可能性があるときはこの属性値をエスケープする必要があります。ほとんどのURLには、URLのパラメータ間を区切るために&が含まれます。このため、通常、次を使用してURLが含まれる属性をエスケープする必要があります。

oracle.portal.utils.xml.v2.XMLUtil.escapeXMLAttribute

<%
String paramNameQ = "q";
String qualParamNameQ =
HttpPortletRendererUtil.portletParameter(paramNameQ);
PortletRenderRequest pRequest = (PortletRenderRequest)
request.getAttribute(HttpCommonConstants.PORTLET_RENDER_REQUEST);
String paramValueQ = pRequest.getQualifiedParameter(paramNameQ);
%>
<!-- Output the HTML content -->
<center>
Words similar to <%= paramValueQ %>
<br>
Click on the link to search for words related to that word.
<br>
<ul>
<%
String[] relatedWords = Thesaurus.getRelatedWords(paramValueQ);
NameValue[] linkParams = new NameValue[1];
for (int i=0; i<=relatedWords.length; i++)
{
linkParams[0] = new NameValue(
qualParamNameQ, relatedWords[i]);
%>
<li>
<b> <%= relatedWords[i] %> </b>
<%= UrlUtils.constructHTMLLink(
pRequest,
UrlUtils.PAGE_LINK,
"(words related to " + relatedWords[i] + ")",
"",
linkParams,
true,
true)%>
</li>
<%
}
%>
</ul>
</center>

7.2.3.3.3 ポートレットのURLタイプを使用したフォームの構築

フォームでポートレット・パラメータを使用する方法は、リンクで使用する方法とほとんど違いはありません。次の2つの基本的ルールが同様に適用されます。

- ポートレットのパラメータ名を修飾します。

- 受信URLのその他のパラメータは操作したり削除しません。

マークアップおよび動作の点では、フォームとリンクはかなり異なります。ただし、リンクの場合と同様、PDK-Javaにはこれら2つの基本ルールに準拠するためのユーティリティが含まれています。

ポートレットのパラメータ名を正しく修飾するためのコードは、7.2.3.3.2項「ポートレットのURLタイプを使用したリンクの構築」に記載されているコードと同じです。つまり、ページ上のリンクにしてもフォーム要素の名前にしても、パラメータ名は単なる文字列です。

フォームは、URLのその他のパラメータは変更しないままにする必要があるという点でリンクとは異なります。マークアップでフォームを開いた後、次のAPIの1つを使用できます。

UrlUtils.htmlFormHiddenFields(pRequest,UrlUtils.PAGE_LINK, formName);
UrlUtils.htmlFormHiddenFields(someURL);

この場合、formName = UrlUtils.htmlFormName(pRequest,null)です。

注意:

ページに複数のフォームがある可能性があるため、フォーム名は完全に修飾する必要があります。これは、ページ上のその他のポートレットと競合するのを避けるために、URLのパラメータとフォームの要素名に修飾が必要であるのと同様です。

htmlFormHiddenFieldsユーティリティは、HTMLの非表示フォーム要素をフォームに書き込みます。この場合、指定したURLの、ポートレットに属さないパラメータごとに1つのフォーム要素を書き込みます。

<INPUT TYPE="hidden" name="paramName" value="paramValue">

このため、開発者は、ポートレットのパラメータをフォームに追加するのみでよいのです。

もう1つ注意が必要なのは、フォームの送信ターゲットを導出する方法です。多くの場合、送信ターゲットは現行のページです。

formTarget = UrlUtils.htmlFormActionLink(pRequest,UrlUtils.PAGE_LINK)

formTargetの値には、HTMLフォームのアクション属性やSimpleFormのターゲット属性を使用できます。メソッド名にHTMLが含まれている場合でも、実際にはURLを戻すのみであるため、これはモバイル・ポートレットでも使用できます。

次の例のフォームは、シソーラス・ポートレットの送信フォームをレンダリングします。このフォームの送信結果であるポートレットの詳細は、7.2.3.3.2項「ポートレットのURLタイプを使用したリンクの構築」の例を参照してください。

<%
String paramNameSubmit = "submit";
String paramNameQ = "q";
String qualParamNameQ =
HttpPortletRendererUtil.portletParameter(paramNameQ);
String qualParamNameSubmit =
HttpPortletRendererUtil.portletParameter(paramNameSubmit);
PortletRenderRequest pRequest = (PortletRenderRequest)
request.getAttribute(HttpCommonConstants.PORTLET_RENDER_REQUEST);
String formName = UrlUtils.htmlFormName(pRequest,"query_form");
%>
<!-- Output the HTML content -->
<center>
<b>Thesaurus</b>
Enter the word you wish to search for
<form name="<%= formName %>" method="POST"
action="<%= UrlUtils.htmlFormActionLink(pRequest,UrlUtils.PAGE_LINK) %>">
<%= UrlUtils.htmlFormHiddenFields(pRequest,UrlUtils.PAGE_LINK, formName)%>
<table><tr><td>
Word of interest:
</td><td>
<input
type="text"
size="20"
name="<%= qualParamNameQ %>"
value="">
</td></tr></table>
<input type=submit name="<%= qualParamNameSubmit %>" Value="Search">
</form>
</center>

7.2.3.3.4 ポートレット内でのナビゲーションの実装

ポートレット内でナビゲーションを実装する方法には、次の3つがあります。

- 明示的なポートレット・パラメータを使用して、レンダリングされるURLにナビゲーション情報を渡します。このURLに基づいて、ポートレット・コード内のブランチ・ロジックは、どのポートレットのセクションをレンダリングするのかを確認できます。このオプションは、7.2.3.3.2項「ポートレットのURLタイプを使用したリンクの構築」および7.2.3.3.3項「ポートレットのURLタイプを使用したフォームの構築」に示されているシソーラス例を少し拡張したものです。基本的に、このポートレットは、パラメータ値qを使用してシソーラスの検索動作を実行するのでなく、パラメータ値に基づいて分岐し、これに応じて様々なコンテンツをレンダリングします。

- 前の項目と同じようにナビゲーション情報を渡します。ただし、PDK-Javaを使用してパラメータを解釈し、その値に基づいて分岐してください。この方法の場合、シソーラスの例をいくらか変更する必要があるため、後でその詳細を説明します。

- セッション記憶域を使用してポートレットの状態を記録し、URLパラメータを使用して明示的なナビゲーションではなくアクションを示します。この方法は、ポートレットが含まれるページからユーザーが移動したときにポートレットを前の状態にリストアする唯一の方法です。ユーザーがこのページから移動すると、すべてのポートレット・パラメータは失われ、セッション記憶域にある状態のみをリストアできます。ただし、その状態がセッション記憶域に保管されていることが前提です。このオプションを使用するには、セッション記憶域について理解し、これを実装する必要があります。セッション記憶域の実装の詳細は、7.2.6.2項「セッション記憶域の実装」を参照してください。

次のポートレット・コードは、PDK-Javaのサンプル・プロバイダのマルチページ例の一部です。

<portlet>
<id>11</id>
<name>Multipage</name>
<title>MultiPage Sample</title>
<shortTitle>MultiPage</shortTitle>
<description>
This portlet depicts switching between two screens all
in the context of a Portal page.
</description>
<timeout>40</timeout>
<timeoutMessage>MultiPage Sample timed out</timeoutMessage>
<renderer class="oracle.portal.provider.v2.render.RenderManager">
<contentType>text/html</contentType>
<showPage>/htdocs/multipage/first.jsp</showPage>
<pageParameterName>next_page</pageParameterName>
</renderer>
</portlet>

pageParameterNameの値はポートレット・パラメータnext_pageの名前です。この値は、PDKフレームワークがshowPageパラメータ値のオーバーライドとして取得および解釈するポートレット・パラメータの名前です。PDKフレームワークは、マルチページ・ポートレットのリクエスト時にパラメータの修飾バージョンを検出すると、first.jspではなくnext_pageによって示されたリソースをレンダリングします。ポートレット内のパラメータは、ポートレットによってレンダリングされるため、PDKではレンダリングされません。

シソーラスの例をこのパラメータで動作するように変更できます。特に、フォーム送信ポートレットをシソーラスの入力用(ポートレットの先頭ページ)として使用し、シソーラス内をさらにドリルダウンしていくためのリンクが含まれる結果ページにユーザーをナビゲートできます。次の例は、これらの変更内容を示します。

注意:

次の例は、このシソーラスの例のように、比較的簡単なケースの場合に最も役に立ちます。ウィザードの使用経験を積む必要があるなど、より込み入った必要性がある場合は、StrutsなどのMVCフレームワークを使用することを検討してください。Strutsアプリケーションからポートレットを構築する方法の詳細は、7.3項「Oracle JDeveloperを使用したStrutsポートレットの作成」を参照してください。

ThesaurusForm.jsp:

<%
PortletRenderRequest pRequest = (PortletRenderRequest)
request.getAttribute(HttpCommonConstants.PORTLET_RENDER_REQUEST);
String paramNameSubmit = "submit";
String paramNameQ = "q";
String qualParamNameQ =
HttpPortletRendererUtil.portletParameter(pRequest, paramNameQ);
String qualParamNameSubmit =
HttpPortletRendererUtil.portletParameter(pRequest, paramNameSubmit);
String formName = UrlUtils.htmlFormName(pRequest,"query_form");
%>
<!-- Output the HTML content -->
<center>
<b>Thesaurus</b>
Enter the word you wish to search for
<form name="<%= formName %>" method="POST"
action="<%= UrlUtils.htmlFormActionLink(pRequest,UrlUtils.PAGE_LINK) %>">
<%= UrlUtils.htmlFormHiddenFields(pRequest,UrlUtils.PAGE_LINK, formName)
%>
<%= UrlUtils.emitHiddenField(
HttpPortletRendererUtil.portletParameter(request, "next_page"),
"htdocs/path/ThesaurusLink.jsp" ) %>
<table><tr><td>
Word of interest:
</td><td>
<input
type="text"
size="20"
name="<%= qualParamNameQ %>"
value="">
</td></tr></table>
<input type=submit name="<%= qualParamNameSubmit %>" Value="Search">
</form>
</center>

ThesaurusLink.jspを指し示すためにnext_pageを明示的に設定する必要がありますので、その方法に留意してください。この方法でnext_pageを明示的に設定しない場合、このパラメータは、provider.xmlに登録されているリソース(ThesaurusForm.jsp)にデフォルト設定されます。

ThesaurusLink.jsp:

<%
PortletRenderRequest pRequest = (PortletRenderRequest)
request.getAttribute(HttpCommonConstants.PORTLET_RENDER_REQUEST);
String paramNameQ = "q";
String paramNameNextPage = "next_page";
String qualParamNameQ =
HttpPortletRendererUtil.portletParameter(pRequest, paramNameQ);
String qualParamNameNextPage =
HttpPortletRendererUtil.portletParameter(pRequest, paramNameNextPage);
String paramValueQ = pRequest.getQualifiedParameter(paramNameQ);
%>
<!-- Output the HTML content -->
<center>
Words similar to <%= paramValueQ %>
<br>
Click on the link to search for words related to that word.
<br>
<ul>
<%
Thesaurus t = new Thesaurus();
String[] relatedWords = t.getRelatedWords(paramValueQ);
NameValue[] linkParams = new NameValue[2];
linkParams[0] = new NameValue(
qualParamNameNextPage, "htdocs/path/ThesaurusLink.jsp");
for (int i=0; i<relatedWords.length; i++)
{
linkParams[1] = new NameValue(
qualParamNameQ, relatedWords[i]);
%>
<li>
<b> <%= relatedWords[i] %> </b>
<%= UrlUtils.constructHTMLLink(
pRequest,
UrlUtils.PAGE_LINK,
"(words related to " + relatedWords[i] + ")",
"",
linkParams,
true,
true)%>
</li>
<%
}
%>
</ul>
<a href="<%=XMLUtil.escapeXMLAttribute
(pRequest.getRenderContext().getPageURL())%>">
Reset Portlet
</a>
</center>

ページの部分的なリフレッシュ

ページ全体をリフレッシュすることなく、ポートレットはそれ自体をリフレッシュできます。たとえば、マルチページ・ポートレット・サンプルでは、子細に説明すると、firstpage.jspはAPIを使用して、ポートレットが次のページにリンクし、ポータル・ページ全体をリフレッシュさせずに次のページを表示できるようにします。次の例の太字のテキストは、これをどのように設定できるのかを示しています。

<%@ page contentType="text/html;charset=UTF-8" %>
<%@ page language="java" session="false" %>
<%@ page import="oracle.portal.provider.v2.url.UrlUtils" %>
<%@ page import="oracle.portal.provider.v2.render.http.HttpPortletRendererUtil" %>
<%@ page import="oracle.portal.provider.v2.render.PortletRenderRequest" %>
<%@ page import="oracle.portal.provider.v2.http.HttpCommonConstants" %>
<%@ page import="oracle.portal.utils.NameValue" %>
<%
PortletRenderRequest prr = (PortletRenderRequest)
request.getAttribute(HttpCommonConstants.PORTLET_RENDER_REQUEST);

NameValue[] linkParams = new NameValue[1];
linkParams[0] = new NameValue(HttpPortletRendererUtil.portletParameter(request,
"next_page"), "/htdocs/multipage/second.jsp");
%>

<center>
Hello, this is the first page<p>
<%=UrlUtils.constructHTMLLink(prr, UrlUtils.REFRESH_LINK, "second page", "", linkParams, true, true)%>
</center>

7.2.3.4 イベントの送信

前述の項では、パラメータを受信するポートレットを作成しました。次に、パラメータおよびイベントを、同じページまたは別のページの他のポートレットに渡すポートレットを作成します。OmniPortletのシンプル・パラメータ・フォームのように、パラメータを他のポートレットに渡すシンプル・フォームを作成するための簡単で宣言的なインタフェースを提供するポートレットもあります。ただし、渡されるイベントやポートレットの外観を完全に制御する必要がある場合は、イベントをJavaポートレットに追加できます。

ポートレット・ウィザードでは、パラメータを他のポートレットに渡すために必要なすべてのコードが作成されるわけではありません。ウィザードではprovider.xmlのタグが更新され、開発者は必要なビジネス・ロジックをJSPコードに追加する必要があります。イベントを使用するポートレットを作成するには、次のタスクを実行します。

- ポートレット・ウィザードを使用して、新しいポートレットを作成します。

- コードをJSPページに追加します。

- このポートレットのパラメータを、7.2.3.2項「パブリック・パラメータの追加」で作成したポートレットにマップします。

イベント・ポートレットの作成

イベント・ポートレットを作成する手順は、次のとおりです。

1. ポートレット・ウィザードを起動して、7.2.3.2項「パブリック・パラメータの追加」でパラメータ・ポートレットに使用したのと同じプロバイダにMyEventsPortletという新しいポートレットを作成します(図7-6)。通常どおりにウィザードを進めます。ウィザードのステップ5で、パラメータを作成します。ウィザードのステップ6で、表7-1に示す情報を入力します。

表7-1 イベント

イベント領域

名前

表示名

説明

公開されるイベント

MyEvent

My Event

This is my event.

関連付けられたパラメータ

MyParam

My Parameter

This is my parameter

図7-6 ポートレット・ウィザードの「Public Portlet Events」ページ

ウィザードによって、次のコードがprovider.xmlに生成されます。

注意:

次の例では、入力パラメータとイベント・パラメータの名前がいずれもMyParamになっていることに注意してください。これらは、名前が同じでも異なるパラメータです。

<showDetails>false</showDetails>
<inputParameter class="oracle.portal.provider.v2.
DefaultParameterDefinition">
<name>MyParam</name>
<displayName>My Parameter</displayName>
</inputParameter>
<event class="oracle.portal.provider.v2.DefaultEventDefinition">
<name>MyEvent</name>
<displayName>My Event</displayName>
<parameter class="oracle.portal.provider.v2.DefaultParameterDefinition">
<name>MyParam</name>
<displayName>My Parameter</displayName>
</parameter>
</event>
<renderer class="oracle.portal.provider.v2.render.RenderManager">

provider.xmlの構文の詳細は、OTNにあるプロバイダのJavadocを参照してください。

http://www.oracle.com/technology/products/ias/portal/html/javadoc/xml_tag_reference_v2.html

2. 必要な次のクラスをMyEventsPortletにインポートします。

- oracle.portal.provider.v2.event.EventUtils

- oracle.portal.utils.NameValue

- oracle.portal.provider.v2.url.UrlUtils

3. MyEventsPortletに、パラメータ値を別のポートレットに渡すリンクを追加します。次のサンプル・コードに示すように、前のポートレットと同じページ・パラメータを受信しますが、それに加えてイベントを渡すリンクも作成します。

<%@page contentType="text/html; charset=windows-1252"
import="oracle.portal.provider.v2.render.PortletRenderRequest"
import="oracle.portal.provider.v2.http.HttpCommonConstants"
import="oracle.portal.provider.v2.ParameterDefinition"
import="oracle.portal.provider.v2.event.EventUtils"
import="oracle.portal.utils.NameValue"
import="oracle.portal.provider.v2.url.UrlUtils"
%>
<%
PortletRenderRequest pReq = (PortletRenderRequest)
request.getAttribute(HttpCommonConstants.PORTLET_RENDER_REQUEST);
%>
<%
NameValue[] parameters = new NameValue[2];
parameters[0] = new NameValue( EventUtils.eventName("MyEvent"),"");
parameters[1] = new
NameValue(EventUtils.eventParameter("MyParam"),pReq.getParameter
("MyParam"));
%>
<span class="portletText1"><br>

<a href="<%= UrlUtils.constructLink
(pReq, pReq.getRenderContext().getEventURL(), parameters , true, true)%>">
The value of the stock is <%= pReq.getParameter("MyParam") %>
</a>
<br><br></span>

注意:

このサンプル・コードでは、NULL値を処理していません。ポートレットを最初にページに追加する際にエラーが発生する場合がありますが、ポートレットをページ・パラメータにマップすると正常に機能します。

4. ポートレットを、前のポートレット(パラメータ・ポートレット)以外の別のページ(同じページ・グループ内)に追加します。ポートレットを開き、前のポートレットと同じパラメータを受信するようにマップします。

My Parameter = Page Parameter MyParameter

5. 「パラメータ」タブで変更内容を適用し、「イベント」タブに移動します。イベント・ポートレットを開き、イベントを選択します。「ページに移動」を選択し、イベントを渡すページを検索します。パラメータ・ポートレットが存在するページを選択します。図7-7に示すように、イベントをページ・パラメータMyParameterとして渡すように、このポートレットを構成します。

MyParameter = Event Output MyParameter

図7-7 「ページの編集」のポートレット・イベント

6. 「OK」をクリックすると、ページが表示されます。イベント・ポートレットには、ページから受信した値を表示するリンクが表示されます(図7-8)。

図7-8 パラメータ変更前のMy Eventポートレット

7. パラメータ値をURLに追加すると、ポートレットのリンクにその値が表示されます。

&MyParameter=20

8. リンクをクリックすると、その値がページのパラメータ・ポートレットに渡されます(図7-9)。

図7-9 パラメータ変更後のMy Eventポートレット

7.2.4 JNDI変数の使用

Javaポートレットを作成する場合、JNDIサービスを介して、デプロイ固有のプロパティを設定できます。これにより、これらの値がプロバイダ・コードから取得されるようにできます。この方法により、プロバイダ・デプロイに任意のプロパティを指定し、プロバイダ・コード内の任意の場所からこのプロパティに簡単にアクセスできます。PDK-Javaには、J2EEコンテナ内のプロバイダJNDI変数と非プロバイダJNDI変数の両方を取得するためのユーティリティが用意されています。JNDI変数を使用するには、次のタスクを実行する必要があります。

- 7.2.4.1項「JNDI変数の宣言」

- 7.2.4.2項「JNDI変数値の設定」

- 7.2.4.3項「JNDI変数の取得」

7.2.4.1 JNDI変数の宣言

JNDI変数は、プロバイダのweb.xmlファイルで宣言します。JNDI変数を宣言するための書式は、次のとおりです。

<env-entry>
<env-entry-name>variableName</env-entry-name>
<env-entry-type>variableType</env-entry-type>
<env-entry-value>variableValue</env-entry-value>
</env-entry>

env-entry-name要素にはこの変数を識別する名前が含まれます。env-entry-typeにはこの変数の完全修飾されたJava型が含まれます。env-entry-valueにはこの変数のデフォルト値が含まれます。

7.2.4.1.1 変数型

env-entry-type要素では、Javaコードによって予期される、完全に修飾されたJava型変数を指定する必要があります。JNDI変数で使用可能なJava型は、次のとおりです。

- java.lang.Boolean

- java.lang.String

- java.lang.Integer

- java.lang.Double

- java.lang.Float

J2EEコンテナは、これらの型宣言を使用して、指定された型のオブジェクトを自動的に構成し、コード内で変数を取得するときに、指定された値をオブジェクトに設定します。

7.2.4.1.2 変数の命名規則

PDK-Javaは、個々のプロバイダ・サービス・レベルまたはWebアプリケーション・レベルで設定可能な環境変数をいくつか定義します。同じWebアプリケーションにパッケージ化されている様々なプロバイダ・サービスやアプリケーション・コンポーネントの間で命名が競合しないようにするには、特定の命名規則を策定することをお薦めします。

注意:

EnvLookupメソッドを使用する場合、oracle/portal/provider/service/propertyを使用する必要があります。この場合、独自の会社名またはコンポーネントで代用することはできません。

例:

- プロバイダ・サービス固有名の書式は、次のようにする必要があります。

{company}/{component name}/{provider name}/{variable name}

- 共有名の書式は、次のようにする必要があります。

{company}/{component name}/{provider name}/global

説明:

- {company}: アプリケーションを所有する会社名です。

- {component name}: プロバイダが関連付けられているアプリケーションまたはコンポーネントの名前です。

- {provider name}: プロバイダのサービス名です。

- {variable name}: 変数自体の名前です。

これらの命名規則は、Javaパッケージに使用されている命名規則と似ています。この方法により、アプリケーションまたはアプリケーション・コンポーネントの間で名前が衝突する可能性を最小限に抑えることができます。PDK-Javaには、プロバイダのサービス名をサーブレットまたはJSPにハードコーディングせずにこの書式の変数を取得するためのユーティリティが用意されています。このサービス名は、プロバイダのWARファイルに定義しておくのみでよいのです。JNDI変数の取得方法は、7.2.4.3項「JNDI変数の取得」を参照してください。

7.2.4.1.3 例

次の例は、プロバイダの変数名を示します。

oracle/portal/myProvider/myDeploymentProperty
oracle/portal/myprovider/myProperties/myProperty

次の例は、プロバイダ以外の変数名を示します。

oracle/portal/myOtherProperty

7.2.4.2 JNDI変数値の設定

プロバイダ・デプロイでは、JNDI変数の一部またはすべてに対して新しい値を設定できます。このタスクは、Oracle WebLogic Serverのデプロイ・プランで以下のように値を手動で設定することで実行できます。

1. Oracle WebLogic管理コンソールで「プロバイダのデプロイ」に移動し、設定がまだであれば新しいデプロイ・プランを作成します。

2. デプロイ・プランのXMLファイルを編集します。設定するデプロイのプロパティごとに、次の変数定義を<deployment-plan>タグの直下に追加します。

<variable-definition>
<variable>
<name>jndi_var_def</name>
<value>false</value>
</variable>
</variable-definition>

3. この変数定義を設定する実際のJNDI変数に結びつけるには、WEB-INF/web.xmlモジュール記述子(oracle/portal/sample/rootDirectoryを例として使用します)の下の各プロパティで以下を実行します。

<module-descriptor external="false">
<root-element>web-app</root-element>
<uri>WEB-INF/web.xml</uri>
<variable-assignment>
<name>jndi_var_def</name>        <xpath>/web-app/env-entry/[env-entry-name=&quot;oracle/portal/sample/rootDirectory&quot;]/env-entry-value</xpath>
</variable-assignment>
</module-descriptor>

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

5. プロバイダのデプロイで「更新」を選択し、新しい設定のデプロイ・プランを有効にします。

7.2.4.3 JNDI変数の取得

JNDIは、標準的なJ2EEテクノロジです。このため、JNDI変数にはJ2EE APIを介してアクセスできます。例:

String myVarName = "oracle/portal/myProvider/myVar"
String myVar = null;
try
{
InitialContext ic = new InitialContext();
myVar = (String)ic.lookup("java:env/" + myVarName);
}
catch(NamingException ne)
{
exception handling logic
}

基本的なJ2EE API以外にも、PDK-Javaには、PDK自体によって定義および使用される変数値を取得するための簡素なユーティリティ・クラスが用意されています。これらの変数はすべて、7.2.4.1.2項「変数の命名規則」で説明されている命名規則に準拠しており、その書式は次のとおりです。

oracle/portal/provider_service_name/variable_name
oracle/portal/variable_name

これらのAPIを使用するには、provider_service_nameおよびvariable_nameを指定するのみでよいのです。このユーティリティは、指定された情報に基づいて完全なJNDI変数名を構成し、前に示したものと類似のコードを使用して変数を参照し、変数値を戻します。

EnvLookupクラス(oracle.portal.utils.EnvLookup)には、2つのlookup()メソッドがあります。1つはプロバイダ変数を取得し、もう1つは非プロバイダ変数を取得します。どちらのメソッドもjava.lang.Objectを戻します。これは、目的のJava型にキャストできます。

次のコード例では、プロバイダ変数を取得しています。

EnvLookup el = new EnvLookup();
String s = (String)el.lookup(myProviderName, myVariableName);

変数名のうち、myProviderNameは、プロバイダのサービス名を示す部分です。変数名のうち、このプロバイダのサービス名の後ろに続く部分がmyVariableNameです。この例では、取得される変数の型がjava.lang.Stringであると想定しています。

非プロバイダ変数を取得するには、同じコードを使用し、1つのパラメータ、変数名のみをlookup()に渡します。また、この場合、接頭辞oracle/portalは除きます。

EnvLookup el = new EnvLookup();Object o = el.lookup(myVariableName);

表7-2は、デフォルトでPDK-Javaに用意されているJNDI変数を示します。これらの変数を宣言しない場合、PDK-Javaは、元の場所(web.xmlおよびデプロイ・プロパティ・ファイル)でこれらの値を検索します。

表7-2 PDK-JavaのJNDI変数

変数

説明

oracle/portal/provider/provider_name/autoReload

ブール型の自動リロード・フラグ。デフォルト値はtrue。

oracle/portal/provider/provider_name/definition

プロバイダの定義ファイルの場所。

oracle/portal/provider/global/log/logLevel

ログ設定(0から8)。0はロギングなし、8は最大限のロギング。

oracle/portal/provider/provider_name/maxTimeDifference

プロバイダのHMAC時間差。

oracle/portal/provider/<service_name>/resourceUrlKey

Parallel Page Engineによるリソースのプロキシ化の認証キー。詳細は、『Oracle Fusion Middleware Oracle Portal管理者ガイド』を参照してください。

oracle/portal/provider/provider_name/rootDirectory

プロバイダのパーソナライズの場所。デフォルト値はなし。

oracle/portal/provider/provider_name/sharedKey

HMAC共有キー。デフォルト値はなし。

oracle/portal/provider/provider_name/showTestPage

(非プロバイダ)プロバイダのテスト・ページにアクセス可能どうかを決定するブール型フラグ。デフォルト値はtrue。

oracle/portal/provider/global/transportEnabled

「デフォルトの編集」のパーソナライズをエクスポートおよびインポート可能かを決定するブール型フラグ。詳細は、7.2.8.3.2項「パーソナライズのエクスポート/インポートの無効化」を参照してください。

7.2.5 プライベート・イベントの作成

トランザクションとレンダリングを同時に実行するのではなく、トランザクションを完了してからそのトランザクションがあるページをレンダリングする方が、ポートレットにとって都合がよい場合があります。たとえば、ポートレットにデータ値を更新するリンクがあり、その更新はページ上の他のポートレットに影響を与える可能性があるとします。ページのリフレッシュによって同時にトランザクションも実行されると、そのデータ値に依存する他のポートレットは最新の値でリフレッシュされる場合と、されない場合があります。さらに、トランザクションとレンダリングがこのように結び付けられると、ブラウザでユーザーが「戻る」を押すなどの操作によって、トランザクションが繰り返され、レコードが重複して作成されるなどの可能性があります。

JSPポートレットでは、processActionメソッドを使用してこの問題を解決できます。このメソッドを使用すると個々のポートレットは、ページのレンダリングが行われる前に、値の更新などのトランザクションを完了できます。PDK-JavaにはprocessActionがありませんが、別のメカニズムを使用してサーブレットにデータを送信することにより、同じ結果を得ることができます。ページ・フローおよびポートレットの制御にStrutsを使用している場合は、formタグおよびトランザクション・トークンを使用して、同じパラメータが2回送信されないようにすることができます。Strutsポートレットの詳細は、7.3項「Oracle JDeveloperを使用したStrutsポートレットの作成」を参照してください。

別の方法として、共有画面モードではなく、編集モードでデータを送信することもできます。編集モードなど、フル・ページ表示モードに基づくリクエストは、リンクを生成したポートレットにのみ送信されます。同じポータル・ページの他のポートレットはレンダリング・リクエストに気付くこともありません。このため、このようなフル・ページ表示モードを使用すると、ページおよびその他のポートレットと切り離してポートレットのトランザクションを実行できます。

ポートレットの送信を実行した後は、戻りURLを使用してフル・ページ表示モードからページにリダイレクトします。この操作により、次の2つの効果を得ることができます。

- ユーザーは元のページに戻ります。

- フォーム送信のすべてのトレースをブラウザから消去します。

この結果、データ送信処理の後にすべてのページ・リフレッシュが行われることが保証されます。ページ・リフレッシュは送信後に行われるので、ページ上のすべてのポートレットは更新後のデータにアクセスし、送信の重複は発生しないことになります。

この手法は、プライベート・イベント送信ポートレットというPDK内のサンプル・ポートレットで説明されています。これは、ポートレットに単純なフォームを送信し、フォームのコンテンツのログを記録する処理を示します。プライベート・イベント送信ポートレットでは、データ送信とパーソナライズのためのポートレット・レンダリングの両方を扱うように、編集モードをオーバーロードします。どのフル・ページ表示モード(編集、ヘルプ、情報およびデフォルトの編集)でもこの目的に関して同じ効果が得られます。

このポートレットの編集モードには、最初に特定のパラメータを探す追加コードが含まれています。このパラメータが存在する場合は、リクエストはプライベート・イベントを表すことになります。パラメータを識別するために様々な値を使用して、同じモードで多数の様々なプライベート・イベントを扱うことができます。識別パラメータが存在しない場合は、編集モードは標準のポートレット・パーソナライズ・ロジックになります。

プライベート・イベントを処理した後は、このモードはユーザーが「OK」をクリックしたときに編集モードが使用するものとまったく同じロジックを使用して、ページにリダイレクトされます。この手法を示す完全なソース・コードは、サンプル・ファイルのEditServlet.javaを参照してください。

注意:

この手法を使用するときは、イベントの詳細情報が永続化されている必要があります。ポートレット・レンダリングはイベント・プロセスと同じリクエスト・サイクルで起こらないので、ポートレットをレンダリングするために必要なイベントのすべてのデータは、ストレージから入手できる必要があります。そうしないと、次にレンダリングするときに、必要なデータがポートレットまたはページにない場合があります。

データを永続化する必要がある場合は、(ユーザー・リファレンスおよびポートレット・リファレンスで)修飾した形式で格納します。そうしないと、あるユーザー/ポートレットからのイベントが、誤って別のページで別のユーザーの同じポートレットのレンダリングと関連付けられたり、同じユーザー/同じポートレットが同じページ上の別のポートレット・リファレンスと関連付けられたりする可能性があります。

7.2.6 セッション情報へのアクセス

ユーザーがポータル・ページにアクセスすると、Oracle Portalは、パブリックな未認証のセッションを起動してCookieを保持し、そのセッションに関する情報を複数のリクエストにわたって追跡します。ユーザーがOracle Portalにログインすると、このセッションはログイン・ユーザーの認証済セッションとなります。このポータル・セッションは、次の場合に終了します。

- ブラウザ・セッションが終了したとき(つまり、ユーザーがすべてのブラウザ・ウィンドウを閉じたとき)

- ユーザーが明示的にログアウトしたとき

- ユーザーのアイドル時間が設定時間を超えたためにセッションがタイムアウトしたとき

そのポートレットをページに提供したプロバイダが、自分がなんらかの特別な処理のためにコールされるように登録時に指定している場合、Oracle Portalはメタデータ生成の一環として、プロバイダすべてに連絡します。このコールにより、プロバイダは、ユーザー・セッションに基づいて処理を行い、必要に応じてプロバイダのアプリケーションのユーザーをログに記録し、Oracle Portalでプロバイダ・セッションを確立できるようになります。データベース・プロバイダの場合、このコールの名前はdo_loginであり、Webプロバイダの場合はinitSessionです。Web対応型アプリケーションの大部分はCookieを使用してセッションを追跡するため、アプリケーションのプロバイダはCookieを戻すのにこのAPIコールを利用できます。

セッション・ストアを使用すると、ポータル・セッションの間存続する情報を保存および取得できます。この情報が有効で使用可能なのは、そのセッションの存続期間中のみです。セッション・ストアに格納するのは、一時情報のみです。アプリケーション開発者はこのセッション・ストアを使用して、現行のユーザー・セッションに関する情報を格納できます。セッション・ストアのデータは複数のポートレット間で共有できます。

格納する情報を複数のセッションにわたって存続させる必要がある場合は、セッション・ストアのかわりにプリファレンス・ストアに格納できます。一般的なセッション・ストアの適用例を次に示します。

- ロードや演算にコストがかかるデータ(たとえば、検索結果)をキャッシュする場合。

- ポートレットの現在の状態(たとえば、ポートレットに表示された検索結果の現在の範囲(ページ)やユーザーが実行したイベントの順序)をキャッシュする場合。

セッション記憶域を実装する前には、パフォーマンス・コストを慎重に検討する必要があります。ポートレットとプロバイダはリモートであるため、セッション・ストアに情報を作成して保持する操作は、少ない情報量であっても比較的コストがかかる可能性があります。このため、多数のユーザーが頻繁にアクセスするパブリック・ページについては、セッション記憶域の実装を避けた方がよい場合があります。

スケーラビリティに重要な関心がある場合、ステートフルなアプリケーションは問題発生の原因となる可能性があります。ステートフルなアプリケーションは、使用しているOracle Portal構成のロード・バランシングとフェイルオーバー・メカニズムに影響を与えることがあります。これは、同じOracle Portalインスタンスにアクセスする複数の中間層をデプロイしても、状態を追跡するためには面倒なルーティング(同じノードが後続のリクエストを同じセッションで処理する)を実装する必要があるためです。このルーティングによって、ノードがクラッシュした場合に不均衡なロード・バランスやセッション・データの消失が発生し、フェイルオーバーに影響を与えることがあります。多くの開発者がステートレスなアプリケーションの構築を選ぶ理由の1つはここにあります。ただし、スケーラビリティが問題でない場合、ステートフルなアプリケーションによる問題は発生しません。

この項の例では、共有画面モードでポートレットをレンダリングした回数をカウントするために、セッション記憶域を使用します。

7.2.6.1 前提

この項のタスクを実行するには、次の前提が必要です。

1. 6.5項「Oracle JDeveloperを使用したOracle PDK-Javaポートレットの構築」を読んで理解していること。

2. ウィザードで作成したポートレットがページに正常に追加されていること。

7.2.6.2 セッション記憶域の実装

PDKフレームワークでは、セッションをProviderSessionオブジェクトを使用して表します。このオブジェクトはプロバイダ・インスタンスのinitSessionメソッドへのコールの際に確立されます。このオブジェクトは、ProviderUserと関連付けられています。Oracle Portalからのリクエスト間でデータを永続的に保持するには、ProviderSessionオブジェクト上のsetAttributeメソッドを使用してセッション・オブジェクトにデータを書き込む必要があります。このメソッドはjava.lang.Objectをjava.lang.Stringにマップし、そのマッピングをセッション・オブジェクト内に格納します。Stringは、その後、セッションがまだ有効である場合、後続のリクエスト中にObjectを取得するために使用できます。

次のような場合は、プロバイダ・セッションが無効になることがあります。

- セッションがタイムアウトした場合

- ProviderSession上のinvalidateメソッドがコールされた場合

- サーブレット・コンテナを実行中のJVMプロセスが終了した場合

同じProviderInstanceに含まれるすべてのポートレットは、特定のProviderUserに対して同じセッションを共有します。したがって、特定のポートレット・インスタンスに対して一意のデータは、セッション内の一意のStringにマップする必要があります。これは、PortletRendererUtilクラス内のportletParameterメソッドを使用して行います。このメソッドは、そのインスタンス用に生成された識別子を先頭に付けることで、提供されたStringパラメータまたは属性名をPortletInstanceに対して一意にします。戻されたインスタンス固有の名前を使用すると、セッションにポートレット・インスタンス・データを書き込むことができます。

PDKフレームワーク・クラスの詳細は、次の「Portlet Development」ページの「Java Doc API」をクリックして、OTNのJavadocを参照してください。

http://www.oracle.com/technology/products/ias/portal/portlet_development_10g1014.html

セッション記憶域を実装するには、次のタスクを実行する必要があります。

- ProviderSession、PortletRendererUtilおよびHttpPortletRendererUtilをインポートします。

- プロバイダ・セッションを取得します。

- Javaポートレット内からセッションにアクセスして、セッションの読取りと書込みを行います。

- provider.xmlでsessionをtrueに設定します。

- セッション記憶域のプロバイダを登録し、「ログイン頻度」を設定します。

次に、現行セッションでポートレットがレンダリングされた回数を表示するセッション・カウントをポートレットに追加する手順を説明します。

1. ウィザードを使用してポートレットを作成した後は、Oracle JDeveloperの「表示」ページのJSPを編集できます。次のクラスをインポートする必要があります。

<%@page contentType="text/html; charset=windows-1252"
import="oracle.portal.provider.v2.render.PortletRenderRequest"
import="oracle.portal.provider.v2.http.HttpCommonConstants"
import="oracle.portal.provider.v2.ProviderSession"
import="oracle.portal.provider.v2.render.PortletRendererUtil"
import="oracle.portal.provider.v2.render.http.HttpPortletRendererUtil"
%>

2. 最初に有効なセッションをチェックし、次にカウントを増分して表示するコードを挿入します。セッションが有効で、以前に格納した値が存在する場合は、その値を表示し、カウントを増分して新しい値を格納します。セッションは有効だが以前に格納した値がない場合は、カウントを1に初期化し、その値を表示して格納します。また、このポートレットの一意の文字列キーを取得し、その文字列キーを配列で使用してセッションをカウントできます。セッション情報を受信していない場合は、ユーザーに対して、再度ログインが必要であることを示す情報を提供できます。

<%
PortletRenderRequest pReq = (PortletRenderRequest)
request.getAttribute(HttpCommonConstants.PORTLET_RENDER_REQUEST);
ProviderSession pSession = pReq.getSession();
if (pSession != null)
{
String key = PortletRendererUtil.portletParameter(pReq, "count");
Integer i = (Integer)pSession.getAttribute(key);
if (i == null)
{
i = new Integer(0);
}
i = new Integer(i.intValue()+1);
pSession.setAttribute(key, i);
%>

<p>Render count in this session: <%=i%> </p>

<%
}
else
{
%>

<p>The session has become invalid</p>
<br>
Please log out and log in again.
<%
}
%>

3. デフォルトでは、ウィザードでprovider.xmlのsessionをtrueに設定することはありません。プロバイダがポータルからセッション情報を受信するためには、このフラグを更新する必要があります。このタグをtrueに設定する必要があるのは、プロバイダまたはポートレットでセッション情報を使用する場合のみです。このフラグをtrueに設定すると、プロバイダ・コールに余分なロードが追加されます。

<provider class="oracle.portal.provider.v2.DefaultProviderDefinition">
<session>true</session>

provider.xmlの構文の詳細は、OTNにあるプロバイダのJavadocを参照してください。

http://www.oracle.com/technology/products/ias/portal/html/javadoc/xml_tag_reference_v2.html

4. Oracle Portalでプロバイダを登録します。ウィザードの「接続の定義」ページで、「ユーザー」ラジオ・ボタンを選択し、「ログイン頻度」として「セッションごとに1回」を選択します。ポートレットの登録方法に関する注意は、6.5.5項「Oracle PDK-Javaポートレットの登録と表示」を参照してください。

7.2.6.3 ポートレットの表示

Javaポートレットをページに追加していない場合は、ここで追加します。次のタスクを実行します。

- プロバイダの「ログイン頻度」の値を「ユーザー・セッションごとに1回」に設定します。

- プロバイダをリフレッシュして新しい変更内容を反映させます。

- セッションがすでに無効の場合は、再度ログインします。

7.2.7 ポートレットのセキュリティの実装

この項では、Javaポートレットで使用できるセキュリティ・サービスについて説明します。

この項で参照されているPDKクラスの詳細は、次の「Portlet Development」ページの「Java Doc API」をクリックして、OTNのJavadocを参照してください。

http://www.oracle.com/technology/products/ias/portal/portlet_development_10g1014.html

7.2.7.1 前提

この項のタスクを実行するには、次の前提が必要です。

1. 6.5項「Oracle JDeveloperを使用したOracle PDK-Javaポートレットの構築」を読んで理解していること。

2. ウィザードで作成したポートレットがページに正常に追加されていること。

7.2.7.2 ポートレットのセキュリティ機能の概要

この項では、ポートレット・プロバイダの保護に使用できる主な機能について説明します。

7.2.7.2.1 認証

ユーザーが初めてOracle Portalインスタンスにログインするときは、IDを確認してアクセス権限を取得するためにパスワードを入力する必要があります。この認証は、OracleAS Single Sign-On Serverで実行されます。詳細は、7.2.7.3項「シングル・サインオン」を参照してください。

ユーザーのIDが示されたリクエストでプロバイダに渡されると、プロバイダのコードは、HttpServletRequestオブジェクトから入手可能なPortletRenderRequestからの認証済みユーザーIDにアクセスできます。

PortletRenderRequest pr = (PortletRenderRequest)request.getAttribute
(HttpCommonConstants.PORTLET_RENDER_REQUEST);
String userName = pr.getUser().getName();

詳細は、『Oracle Fusion Middleware Oracle Portal管理者ガイド』を参照してください。

7.2.7.2.2 認可

認可によって、特定のユーザーがポートレットの表示または対話を行えるかどうかが判断されます。Oracle Portalには、次の2種類の認可チェックが用意されています。

- Portalアクセス制御リスト(ACL): OracleAS Single Sign-On Serverによって認証されると、Oracle PortalではACLを使用して、フォルダやポートレットなどのポータル・オブジェクトに対して操作を実行するユーザー権限を決定します。ユーザーの操作の範囲は、単なるオブジェクトの表示から、そのオブジェクトに対する管理機能の実行にまで及びます。特定の権限が付与されているグループに属していない場合、Oracle Portalでは、その権限に関連付けられている操作を実行できません。詳細は、7.2.7.4項「Oracle Portalアクセス制御リスト(ACL)」を参照してください。

- プログラムによるポートレットのセキュリティ: プログラムによって独自のセキュリティ・マネージャを実装することも可能です。詳細は、7.2.7.5項「ポートレットのセキュリティ・マネージャ」を参照してください。

7.2.7.2.3 通信セキュリティ

これまでに説明したユーザー認証と認可では、プロバイダが受信したメッセージの信頼性までは確認されません。以下の方法を使用して、ポータルとWebプロバイダ間の通信を適切に保護できます。

- Oracle Portalサーバー認証では、プロバイダへのアクセスを少数の認証されているマシンに制限します。この方法では、受信したHTTPメッセージのIPアドレスまたはホスト名をトラステッド・ホストのリストと比較します。リストにIPアドレスまたはホスト名がある場合、メッセージはプロバイダに渡されます。リストにないと、そのメッセージはプロバイダに達する前に拒否されます。詳細は、7.2.7.6項「Oracle Portalのサーバー・セキュリティ」を参照してください。

- メッセージ認証では、共有キーを使用してPortalクライアントのIDをアサートし、メッセージの改ざんを防止します。詳細は、7.2.7.7項「メッセージ認証」を参照してください。

- メッセージの暗号化は、メッセージの内容を暗号化します。詳細は、7.2.7.8項「HTTPS通信」を参照してください。

- ユーザー入力のエスケープでは、Oracle PortalはXSS攻撃から保護するために、ユーザーが入力した任意の文字列をエスケープし、テキストのみとして処理します。XSS攻撃では、攻撃者はユーザー入力フォームを介して悪意のあるスクリプトで渡そうとします。詳細は、7.2.7.10項「ユーザー入力のエスケープ」を参照してください。

通信セキュリティの詳細は、『Oracle Fusion Middleware Oracle Portal管理者ガイド』を参照してください。

7.2.7.3 シングル・サインオン

ポートレットは、アプリケーションへのウィンドウの役目を果します。ポートレットにはサマリー情報が表示され、アプリケーションのすべての機能にアクセスする方法が提供されます。ポートレットは、アプリケーションの機能をポータルで直接公開したり、タスクを実行するためにアプリケーション自体にアクセスできる深いリンクを提供します。

アプリケーションでは、ポートレットを介してアプリケーションにアクセスするユーザーを認証する必要があります。次のアプリケーション認証方法があります。

- 7.2.7.3.1項「パートナ・アプリケーション」。この認証方法では、アプリケーションのユーザーは、Oracle Portalの認証ユーザーと同じです。

- 7.2.7.3.2項「外部アプリケーション」。この認証方法では、Oracle Portalユーザーとアプリケーションのユーザーは異なりますが、アプリケーションのユーザー名とパスワードはOracle Portalユーザーが管理します。

- 7.2.7.3.3項「アプリケーションによる認証がない場合」。この場合、プロバイダとOracle Portal間の通信はまったく保護されません。

シングル・サインオンの詳細は、『Oracle Fusion Middleware Oracle Portal管理者ガイド』を参照してください。

7.2.7.3.1 パートナ・アプリケーション

パートナ・アプリケーションは、認証のためにOracle Portalと同じOracleAS Single Sign-On Serverを共有するアプリケーションです。したがって、ユーザーがOracle Portalにすでにログインしているときは、再度ログインしなくてもそのIDがパートナ・アプリケーションにアサートされます。

パートナ・アプリケーションは、OracleAS Single Sign-On Serverと密接に統合されています。ユーザーがパートナ・アプリケーションへのアクセスを試みると、パートナ・アプリケーションはそのユーザーの認証をOracleAS Single Sign-On Serverに委任します。あるパートナ・アプリケーションに対してユーザーが認証される(有効なユーザー名とパスワードを入力する)と、そのユーザーは、同じOracleAS Single Sign-On Serverインスタンスを共有している他のパートナ・アプリケーションにアクセスするときにユーザー名やパスワードを入力する必要がありません。OracleAS Single Sign-On Serverでは、ユーザーが正常に認証されたと確認し、認証が成功したことを他のパートナ・アプリケーションに示します。

パートナ・アプリケーションの利点は次のとおりです。

- Oracle PortalとOracleAS Single Sign-On Serverを最も密接に統合できます。

- ユーザーはシングル・サインオンを最も有効に利用できます。

- Oracle Portalとプロバイダ間ではユーザー名やパスワードが転送されないため、最もセキュアな形式で統合できます。

パートナ・アプリケーションの不利な点は次のとおりです。

- アプリケーションのユーザー・コミュニティがOracle Portalのユーザー・コミュニティの一部である可能性があっても、アプリケーションはOracle Portalと同じユーザー・リポジトリを共有する必要があります。この点は考慮する必要がありますが、そのアプリケーションを公開するポータル・ページへのアクセスをアプリケーションのユーザー・コミュニティに簡単に制限できるため、この問題は重大ではありません。

- アプリケーションを1つ以上のOracleAS Single Sign-On Serverインスタンスと密接に統合できるのは、それらのインスタンスが同じユーザー・リポジトリを共有している場合のみです。

- アプリケーションは、認証をOracleAS Single Sign-On Serverに委任するように作成する必要があります。

- アプリケーションのソース・コードへのアクセス権限が必要です。

7.2.7.3.2 外部アプリケーション

外部アプリケーションでは、Oracle Portalとは異なる認証サーバーを使用します。このアプリケーションでは、Oracle Portalが使用するのとは別のOracleAS Single Sign-On Serverインスタンスまたは他の認証方法を使用できます。ただし、OracleAS Single Sign-On Serverでは、そのユーザーについて、外部アプリケーションのユーザー名とパスワードが格納されます。これは、ユーザーがOracle Portalにすでにログインしている場合、そのユーザーはユーザー名やパスワードを入力しなくても外部アプリケーションにログインできることを意味します。

ユーザーの認証を管理しているアプリケーションは、管理者がそのアプリケーションを外部アプリケーションとして登録している場合、OracleAS Single Sign-On Serverと柔軟に統合できます。以前にOracleAS Single Sign-On Serverによって認証されたユーザーが初めて外部アプリケーションにアクセスすると、OracleAS Single Sign-On Serverでは、その外部アプリケーションを使用してユーザーの認証を試みます。認証プロセスでは、そのアプリケーションの登録情報と、ユーザーのユーザー名とパスワードとを結合するHTTPリクエストが送信されます。ユーザーがまだその外部アプリケーションのユーザー名とパスワードを登録していない場合、OracleAS Single Sign-On Serverでは、認証リクエストを行う前に、必要な情報の入力をユーザーに要求します。ユーザーが外部アプリケーションのユーザー名とパスワードを入力すると、OracleAS Single Sign-On Serverでは新しいユーザー名とパスワードがユーザーのOracle Portalのユーザー名にマップされ、格納されます。格納された情報は、次回ユーザーが外部アプリケーションによる認証が必要なときに使用されます。

外部アプリケーションの利点は次のとおりです。

- 多数のポータルとの統合が可能です。ただし、優先するポータルがある場合は、アプリケーションをその優先ポータルのパートナ・アプリケーションとして統合し、他のポータルの外部アプリケーションとして統合できます。

- ユーザーはシングル・サインオンを利用できます。ただし、ユーザーは異なるユーザー名やパスワードを保持する必要があります。さらに、外部アプリケーションのユーザー名のマッピングも保持する必要があります。

- ユーザー・リポジトリおよびOracleAS Single Sign-On Serverに依存せずに、複数のポータルと統合できます。

- アプリケーションのソース・コードへのアクセス権限が不要です。

外部アプリケーションの不利な点は次のとおりです。

- ポータルと同じユーザー・リポジトリを共有しません。このため、エンド・ユーザーによるユーザー情報の管理が必要です。

- ユーザー名とパスワードは、SSLを実装しないかぎり、プレーン・テキストでプロバイダに送信されます。

7.2.7.3.3 アプリケーションによる認証がない場合

プロバイダはリクエストを送信するOracle Portalインスタンスを完全に信頼します。プロバイダは、ユーザーがログインしているかどうかの確認やポータル・ユーザー名の確認はできますが、アプリケーションによるユーザーの認証は行われていません。

アプリケーションによる認証がない場合の利点は次のとおりです。

- 最も簡単な形式で統合し、最も短時間で実装できます。

アプリケーションによる認証が場合の不利な点は次のとおりです。

- 最も低いセキュリティ・レベルになります。

- Oracle Portalとの統合が最も弱くなります。

7.2.7.4 Oracle Portalアクセス制御リスト(ACL)

Oracle Portalインスタンスにログインすると、OracleAS Single Sign-On Serverインスタンスによって認証が行われます。IDを確認した後、Oracle Portalは、ACLを使用して、特定のポートレットへのアクセスが認可されているかどうかを確認し、そのポートレットをポートレット・リポジトリからページに追加します。

Oracle Portal ACLは、次のセキュリティ特性に従って使用されます。

- 権限は、権限が付与されているオブジェクトに対して実行できる操作を定義します。権限には、管理や実行などの操作が含まれます。

- Oracle Portalのユーザーとその権限は、ビルダーの「管理」タブで付与されます。

- Oracle Portalのユーザー・グループは、Oracle Portalビルダーの「管理」タブで管理されます。グループ内のメンバーシップとそのグループに付与されている権限は、すべてこのタブで定義および保持されます。ユーザー・グループに付与された権限は、そのグループのすべてのユーザーによって継承されます。

- プロバイダの権限は、プロバイダとそのすべてのポートレットに適用されます。プロバイダのACLは、Oracle Portalナビゲータの「プロバイダ」タブで管理されます。

- ポートレットの権限によって、ポートレットのプロバイダに設定された権限をオーバーライドできます。ポートレットのACLは、Oracle Portalナビゲータの「プロバイダ」タブで管理されます。プロバイダについて「開く」をクリックすると、そのプロバイダのポートレットを管理するページが表示されます。

Oracle Portalのオブジェクト、ユーザーおよびユーザー・グループに使用できる権限の詳細は、『Oracle Fusion Middleware Oracle Portal管理者ガイド』を参照してください。

ACLの利点は次のとおりです。

- ACLは、Oracle Portalオブジェクトを保護するための簡単かつ強力なメカニズムを備えています。

- ユーザー・グループのメンバーシップを集中管理することによって、各オブジェクトに関連付けられているACLの変更が不要になるため、ACLの管理が簡略化されます。

ACLの不利な点は次のとおりです。

- ACLは、プロバイダまたはポートレットのレベルで適用されます。ポートレットを配置するページに応じてポートレットのセキュリティ・ルールを変更することはできません。

7.2.7.5 ポートレットのセキュリティ・マネージャ

ポートレットのセキュリティ・マネージャはプロバイダ内部に実装され、特定のユーザーがポートレットのインスタンスを表示できることを確認します。ユーザーがポートレット・インスタンスを含むページを表示すると、セキュリティ・マネージャによって、そのユーザーにポートレットを表示する適切な権限があるかどうかが判断されます。プロバイダでアクセス制御メソッドを実装することで、適切な権限のないユーザーはポートレットからコンテンツを取得できない(つまり、ポートレットを表示しない)ように制限します。ユーザーの詳細や設定項目など指定の特性が認可ロジックを通過した場合のみ、そのユーザーはコンテンツを取得できます。プロバイダでポートレットのセキュリティ・メソッドを実装しない場合は、偽名や認証されていない名前であっても、すべてのユーザー名が通過する可能性があります。

プロバイダでは、次の2つのポートレットのセキュリティ・メソッドを実装できます。

- ポートレットのリストの取得

- ポートレットのアクセス可能性の確認

ポートレットは、Oracle Portalのユーザー権限、およびユーザーがメンバーとして属しているグループにアクセスできます。セキュリティ・メソッドで使用できる情報は次のとおりです。

- ユーザーのデフォルト・グループ

- ユーザーまたはグループの権限

- すべてのグループで利用できる最高のユーザー権限

- ユーザーがアクセスできるオブジェクト(データベース・プロバイダのみ)

AuthLevelSecurityManagerは、認可レベルに関する次の情報にアクセスできます。

- 強い認証
ユーザーは、現行のOracle PortalセッションでOracleAS Single Sign-On Serverによって認証されています。つまり、ユーザーは有効なユーザー名とパスワードを使用してログインし、そのセッションのコンテキスト内でポートレットをリクエストしました。

- 弱い認証
以前に強い認証を受けているユーザーは、Oracle Portalセッションがアクティブではないページに戻り、そのページを表示します。永続的なCookie(ユーザーのブラウザで保持)には、以前のセッションでユーザーが有効なユーザー名とパスワードでログインしたことが示されます。

- パブリックまたは認証なし
ユーザーは現行のOracle Portalセッションのコンテキスト内でログインしたことがなく、以前にログインしたことを示す永続的なCookieもありません。

これらのセキュリティ・サービスをJavaポートレットに組み込むには、provider.xmlを更新して、セキュリティ・レベルをstrong、weakまたはpublicに設定します。次のXMLをprovider.xmlの</portlet>タグの直前に挿入してください。

<securityManager class="oracle.portal.provider.v2.security.AuthLevelSecurityManager">
<securityLevel>strong</securityLevel>
</securityManager>

provider.xmlを変更した後は、プロバイダをリフレッシュします。

provider.xmlの構文の詳細は、OTNにあるプロバイダのJavadocを参照してください。

http://www.oracle.com/technology/products/ias/portal/html/javadoc/xml_tag_reference_v2.html

セキュリティ・メソッドの利点は次のとおりです。

- ポートレットでは、認可レベルに従って異なる出力を作成できます。

セキュリティ・メソッドの不利な点は次のとおりです。

- セキュリティ・マネージャのほとんどの実装では、認可レベルや受信メッセージにあるユーザー固有の他の要素が使用されます。このような確認は、Oracle Portalインスタンスを装ったエンティティによって無視されることがあります。

7.2.7.5.1 ポートレットの表示

セキュリティ・マネージャをポートレットに追加した後、次の手順に従ってこれを検証できます。

1. ページ作成とページへのポートレット追加を実行できる権限でOracle Portalインスタンスにログインしていることを確認します。

2. PUBLICに対して表示可能な新しいポータル・ページを作成します。

3. Javaポートレットをページに追加します。

4. 新しいポータル・ページへの直接URLを書き留めておきます。

5. 「ログアウト」リンクをクリックして、ポータル・インスタンスからログアウトします。

6. ブラウザのアドレス・バーにステップ4で書き留めたURLを入力して、ポータル・ページに直接アクセスします。

手順2で作成したページが表示されますが、手順3で作成したポートレットは表示されません。ページにポートレットを追加したときはログインしていたため、強い認証を受けています。PDKランタイムはこれを検出し、ポートレットの追加を許可しました。ログアウトしてページを表示したときには、強い認証がすでに失われていたため、PDKフレームワークはポートレットのコンテンツのレンダリングを許可しませんでした。

再度ログインしてページを表示すると、ポートレットの存在を確認できます。

7.2.7.5.2 独自のセキュリティ・マネージャの実装

PDKに付属の実装では提供されない特別なセキュリティ対策がポートレットに必要な場合は、独自のカスタムのPortletSecurityManagerコントローラ・クラスを用意する必要があります。そのためには、oracle.portal.provider.v2.security.PortletSecurityManagerクラスを拡張し、インタフェースで指定されている2つのメソッドに対して実装を提供します。次に、XMLプロバイダ定義でsecurityManagerコントローラ要素のクラス属性を新しいクラス名に置き換え、子要素を適切に構成します。

7.2.7.6 Oracle Portalのサーバー・セキュリティ

プロバイダへの認可されていないアクセスを回避する1つの方法は、プロバイダへのアクセスを既知のクライアント・マシンに、サーバー・レベルで制限することです。プロバイダにアクセスできるのは識別されたクライアントのみであるため、この方法により、サービス拒否攻撃を防御できます。

このため、Oracle Application Serverでは、ホスト名またはIPアドレスに基づいてhttpd.confファイルのディレクティブを許可または拒否することで、クライアント・マシンへのアクセスを制御します。識別子としてホスト名が使用されている場合、サーバーはドメイン・ネーム・サーバー(DNS)でホスト名を検索する必要があり、各リクエストの処理で余分なオーバーヘッドが発生します。この問題はIPアドレスを使用することで回避できますが、リモート・クライアントのIPアドレスが警告なしに変更される可能性があります。

サーバー・セキュリティの利点は次のとおりです。

- プロバイダへのアクセスをトラステッド・ホストのみに制限できます。

- 構成を簡略化できます。

サーバー・セキュリティの不利な点は次のとおりです。

- Oracle Web CacheにはIPアドレスのチェック機能がありません。プロバイダの前にOracle Web Cacheがある場合は、すべてのホストのクライアントがOracle Web Cacheに表示リクエストを送信することを防止できません。

- アクセスを特定のIPアドレスとホスト名に制限しても、偽のIPアドレスとホスト名が含まれたプロバイダにメッセージを送信することで回避される可能性があります。この方法の場合、リターン・メッセージはIPアドレスがコピーされたマシンに送信されますが、その後も問題が発生する可能性があるため、効果的に実行するのは困難です。

このトピックの詳細は、『Oracle Fusion Middleware Oracle Portal管理者ガイド』を参照してください。

7.2.7.7 メッセージ認証

既知のクライアントへのアクセスを制限するために、メッセージ認証にはクライアント(Portalインスタンス)とプロバイダに認識されている共有キーが使用されます。これはSSL通信で、クライアント証明書のかわりにプロバイダと使用できます。

Oracle Portalでは、Hashed Message Authentication Code (HMAC)アルゴリズムを使用して計算されたデジタル署名が各メッセージとともにプロバイダに送信されます。プロバイダは、そのプロバイダ独自の共有キーのコピーを使用して署名を確認し、メッセージを認証できます。この手法は、プロバイダとのSecure Socket Layer (SSL)通信で、クライアント証明書のかわりに使用できます。

セキュリティや管理上の問題が発生する可能性があるため、1つのプロバイダ・インスタンスで複数の共有キーはサポートできません。たとえば、共有キーのコピーの1つがなんらかの方法で侵害された場合、プロバイダの管理者は新しいキーを作成してすべてのOracle Portalクライアントに配布し、クライアントはそのプロバイダ定義を更新する必要があります。この問題を回避するには、異なるプロバイダ・サービスをデプロイして、サービスごとに一意の共有キーを指定します。各プロバイダ・サービスには独自のデプロイ・プロパティ・ファイルがあるため、各サービスは他のサービスとは無関係に構成されます。同じプロバイダ・アダプタ内に複数のプロバイダ・サービスをデプロイすることによるオーバーヘッドは比較的小さいものです。

プロバイダの前にOracle Web Cacheがない場合、プロバイダ・セッションの存続期間中に同じ署名Cookieを使用するこの方法は、パフォーマンスと、リクエストを認証することによるセキュリティの間のトレードオフを意味します。署名Cookieの値が計算されるのは、最初のSOAPリクエストによってプロバイダとのセッションが確立された後の1回のみです。プロバイダ・セッションのタイムアウトが短いほど、署名の計算頻度が高くなり、不正に再送信される表示リクエストに対するセキュリティが高まります。ただし、セッションの確立に必要なSOAPリクエストでは時間がかかります。

Oracle Web Cacheを使用して表示リクエストのレスポンスをキャッシュするプロバイダでも、同様のトレードオフが必要です。キャッシュされたコンテンツは、それを取得するための署名Cookieが受信リクエストに含まれているという点で安全ですが、長期間にわたってコンテンツをキャッシュすると、プロバイダは不正にトラップされてプロバイダに再送信される表示リクエストに対して無防備になります。

署名要素は、メッセージの傍受や再送信に対する保護を提供しますが、メッセージ・コンテンツの傍受や読取りを防ぐための処理は何も行いません。しかも、メッセージはプレーン・テキストで送信されます。メッセージの内容が認可されていない者に読み取られるのが心配な場合は、メッセージ認証をSSLと組み合せて使用する必要があります。

メッセージ認証の利点は次のとおりです。

- プロバイダによって受信されたメッセージが正当なOracle Portalインスタンスから送信されたものであることが保証されます。

メッセージ認証の不利な点は次のとおりです。

- プロバイダが複数のポータルを処理する場合は、管理上の問題が発生します。セッションのタイムアウトを短くすることによってセキュリティを非常に高くした場合は、パフォーマンス上の影響があります。

このトピックの詳細は、『Oracle Fusion Middleware Oracle Portal管理者ガイド』を参照してください。

資格証明ストア共有キー

プロデューサの共有キーは、資格証明ストアに格納されます。共有キーを資格証明ストアに格納するには、以下を実行します。

資格証明を作成

資格証明を作成するには、次のWLSTコマンドを実行します。

createCred(map='PDK', key='pdk.omniPortlet.sharedKey', user='sharedKey', password='1234567890abc')

資格証明ストアにPDK Javaコード・アクセスを付与

pdk javaコード・アクセスを資格証明ストア権限に付与するには、以下を実行します。

grantPermission(appStripe=None,principalClass=None,principalName=None,codeBaseURL='file:${domain.home}/servers/WLS_Portal/tmp/_WL_user/-',permClass='oracle.security.jps.service.credstore.CredentialAccessPermission',permTarget='context=SYSTEM,mapName=PDK,keyName=*',permActions='read')

7.2.7.8 HTTPS通信

Oracle Portalとプロバイダとの間の通常の通信には、TCPをトランスポート・レイヤーとして使用してデータをプレーン・テキストで送信する、HTTPというネットワーク・プロトコルが使用されます。HTTPSは、TCPの上位にある保護された追加のレイヤー(SSL)を使用して、クライアントとサーバー間の通信を保護し、メッセージの傍受や読取りを困難にします。

SSLを使用して通信を受信する各エンティティ(たとえば、Oracle Web Cacheインスタンス)には、自由に利用できる公開鍵と、そのエンティティのみが知っている秘密鍵があります。エンティティに送信されるメッセージは、そのエンティティの公開鍵で暗号化されます。公開鍵で暗号化されたメッセージは秘密鍵によってのみ復号化できるため、悪意のある第三者がメッセージを傍受しても復号化はできません。

通信の署名に使用される証明書によって、公開鍵が実際に正しいエントリに属していることが保証されます。このような証明書は、認証局(CA)として知られる信頼できるサード・パーティによって発行されます。この証明書には、エンティティの名前、公開鍵およびその他のセキュリティ資格証明が記述されており、サーバーのIDを確認するためにSSL通信のサーバー側にインストールされます。クライアントの証明書は、クライアントのIDを確認するためにクライアントにインストールすることもできます。

Oracle Wallet Managerは、公開鍵のセキュリティ資格証明を管理します。また、公開鍵と秘密鍵のペアの生成、CAに対する証明書リクエストの作成、およびサーバーでの証明書のインストールを行います。

このトピックの詳細は、『Oracle Fusion Middleware Oracle Portal管理者ガイド』を参照してください。

SSLの構成

プロバイダをOracle Portalインスタンスから登録するときは、URLを1つのみ入力します。これは、HTTPまたはHTTPSのいずれかを使用できますが、両方は使用できないことを意味します。

SSLメッセージの受信に使用される各サーバーの各ポートには、サーバー側の証明書がインストールされている必要があります。つまり、Webプロバイダとプロバイダをホスティングするサーバーの前には、OracleAS Web Cacheインスタンスが必要です。サーバー・ポートにインストールされている証明書によって、2地点間の通信が暗号化されることが保証されますが、メッセージのソースは認証されません。信頼できるOracle Portalインスタンスとプロバイダとの間の通信を完全に保護するには、メッセージ認証もあわせて使用する必要があります。

Oracle Portal用のSSL構成の詳細は、『Oracle Fusion Middleware Oracle Portal管理者ガイド』を参照してください。

7.2.7.9 LDAP (Oracle Internet Directory)セキュリティ

PDK-Javaでは、LDAP (Oracle Internet Directory)セキュリティにポートレットのセキュリティ・マネージャを使用します。また、PDK-Javaでは、ユーザー、グループおよび権限のリポジトリとしてOracle Internet Directoryを使用します。ログイン・ユーザーに関する情報が取得され、そのユーザーにポートレットとポートレット内のデータの表示に必要な権限があるかどうかが判断されます。Oracle Internet Directoryセキュリティを有効にすると、プロバイダで次の処理が実行されます。

- グループに基づいてポートレットを保護できます。

- (独自のセキュリティ・マネージャを使用して)ポートレットの管理機能へのアクセスを制限します。

- 姓、名前、タイトル、電子メール、電話番号、グループ、写真など、Oracle Internet Directoryに格納されているユーザー・プロパティ情報をすべて取得できます。

- Oracle Portalのユーザーおよびグループを作成できます。

デフォルトでは、Oracle Internet Directoryセキュリティは無効になっています。有効にするには、特定のプロバイダのデプロイ・プロパティ・ファイルを変更する必要があります。ポートレットを保護するために、迅速かつ簡単にOracle Internet Directoryを有効にして使用できます。これを行うには、次の手順を実行します:

1. デプロイ・プロパティ・ファイル(provider_name.properties)でOracle Internet Directoryマネージャを有効にします。

oidManager=true
oidAdminClass=class_that_extends_oracle.portal.provider.v2.oid.OidInfo

2. OidInfoという単純なクラスを拡張して、Oracle Internet Directoryの接続情報を指定します。

3. プロバイダ定義ファイルに、ポートレットを表示できるグループのリストを指定します。

<group>cn=group1,cn=groups,dc=us,dc=oracle,dc=com</group>

プロバイダは、OidInfoクラスに指定した情報を使用してOracle Internet Directoryに接続します。ポートレットは、指定の資格証明(たとえば、ユーザー名とパスワード)を使用してOracle Internet Directoryにアクセスし、指定されたタスクを実行します。特にプロバイダ接続用として、ポートレットでリクエストされるタスクの実行に必要な最低限の権限を持つOracle Internet Directoryユーザーを作成することをお薦めします。たとえば、ポートレットでグループ情報のチェックのみを行う場合は、管理者としてOracle Internet Directoryに接続しないでください。

7.2.7.9.1 Oracle Internet Directoryセキュリティの実装

PDK-Javaには、特にOracle Internet Directoryとの統合用に一連のデフォルト・クラスが用意されています。これらのクラスは、ポートレットからOracle Internet Directoryへの接続を処理し、Oracle Portalグループに基づいてポートレットを保護し、さらにOracle Internet Directory内からユーザー・プロパティ情報にアクセスすることを可能にします。Oracle Internet Directoryとの統合用にWebプロバイダで使用するクラスは、次のとおりです。

- oracle.portal.provider.v2.oid.OidInfoは、開発者が指定したOracle Internet Directory接続情報を受信して、Oracle Internet Directoryに接続します。独自のポートレットを作成するときは、このクラスを拡張して、プロバイダからOracle Internet Directoryにセキュアな接続詳細を送信する必要があります。

- oracle.portal.sample.v2.devguide.oid.UnsafeOidInfoはOidInfoの拡張機能で、ポートレットのセキュリティをテストする簡単な方法を提供します。このクラスは、PDK-JavaのOracle Internet Directoryサンプルで使用され、Oracle Internet Directory接続情報(後の説明を参照)についてデプロイ・プロパティ・ファイルを解析します。このクラスは、テストおよび開発の目的でのみ使用してください。本稼働用に使用するのは安全ではありません。

- oidManagerは、デフォルトではfalseに設定されています。Oracle Internet Directoryを有効にするには、provider_name.propertiesでこれをtrueに設定する必要があります。(Webアプリケーションに存在するプロバイダが1つのみの場合は、provider_name.propertiesが_default.propertiesと同じであることを確認してください。)例:

serviceClass=oracle.webdb.provider.v2.adapter.soapV1.ProviderAdapter
loaderClass=oracle.portal.provider.v2.http.DefaultProviderLoader
showTestPage=true
definition=providers/lab_provider/provider.xml
autoReload=true
oidManager=true
oidAdminClass=oracle.portal.sample.v2.devguide.oid.UnsafeOidInfo
oidHost=myhost.mydomain.com
oidPort=oidPort
oidUser=oidUser
oidPasswd=oidPassword

- oidAdminClassは、OidInfoを拡張するクラスに設定されます。PDK-Javaでは、デフォルトでUnsafeOidInfoを使用しますが、その名前に示すように、このクラスは本稼働用に使用しないでください。

- oidHostは、Oracle Internet Directoryがホスティングされているマシンです。

- oidPortは、Oracle Internet Directoryで使用するポートです。

- oidUserは、Oracle Internet Directoryのアカウントです。

- oidPasswdは、Oracle Internet Directoryのパスワードです。

例:

serviceClass=oracle.webdb.provider.v2.adapter.soapV1.ProviderAdapter
loaderClass=oracle.portal.provider.v2.http.DefaultProviderLoader
showTestPage=true
definition=providers/lab_provider/provider.xml
autoReload=true
oidManager=true
oidAdminClass=oracle.portal.sample.v2.devguide.oid.UnsafeOidInfo
oidHost=myhost.mydomain.com
oidPort=oidPort
oidUser=oidUser
oidPasswd=oidPassword

- oracle.portal.provider.v2.security.GroupSecurityManagerは、プロバイダとそのポートレットへのアクセス権限を持つグループを管理します。これは、ポートレット固有で、プロバイダ定義ファイルから情報を取得します。プロバイダのポートレットごとに、異なるグループ設定を指定することもできます。このタグを使用して設定できるグループの数に制限はありませんが、Webプロバイダは各グループを解析して検証するため、グループ数が多いとパフォーマンスが低下する場合があります。

- <group>はprovider.xml内のタグで、グループ管理を行います。これは、ポートレットにアクセス可能なグループのリストを表示します。このグループ情報の大/小文字の区別は、Oracle Internet Directoryと同じです。

注意:

次の例で参照しているportal_instance_idは、使用しているインストールに固有な内容です。インスタンス識別子を検索する場合は、『Oracle Fusion Middleware Oracle Internet Directory管理者ガイド』を参照してください。

<securityManager class="oracle.portal.provider.v2.security.
GroupSecurityManager">
<group>cn=DBA,cn=portal_instance_id,cn=groups,
dc=us,dc=oracle,dc=com</group>
</securityManager>

provider.xmlの構文の詳細は、OTNにあるプロバイダのJavadocを参照してください。

http://www.oracle.com/technology/products/ias/portal/html/javadoc/xml_tag_reference_v2.html

Oracle Internet Directoryセキュリティの利点は次のとおりです。

- ポートレットを保護する簡単で強力な方法を提供します。

- ユーザーのグループ・メンバーシップに基づいてポートレット内のデータを保護します。

- Webプロバイダとして公開されているポートレットから直接ユーザーとグループを作成します。

Oracle Internet Directoryセキュリティの不利な点は次のとおりです。

- Oracle Internet Directoryを介してポートレットを認可するときに、パフォーマンスがわずかに低下します。LDAPサーバーからグループ情報を取得するときにコストがかかりますが、このコストが発生するのは、ユーザーがセッション内のポートレットに初めてアクセスするときのみです。

- プロバイダはOracle Internet Directoryにアクセスする必要があります。

- プロバイダで使用するすべてのOracle Portalインスタンスは、同じOracle Internet Directoryインスタンスを使用することが前提です。

Oracle Internet Directoryを使用してプロバイダを保護する方法、またはOracle Internet Directoryを使用して保護されたサンプル・ポートレットを設定する方法は、OTNでテクニカル・ノート『Installing the Oracle Internet Directory Portlets』を参照してください。

7.2.7.9.2 ポートレットの表示

Oracle Internet Directoryを使用してプロバイダを保護した後、次の手順に従ってこれを検証できます。

1. provider.xmlの<group>タグに指定されているグループのメンバーであるユーザーとして、Oracle Portalインスタンスにログインしていることを確認します。

2. PUBLICに対して表示可能な既存のページを使用するか、新しいページを作成します。

3. Javaポートレットをページに追加します。

4. 新しいページへの直接URLを書き留めておきます。

5. 「ログアウト」をクリックします。

6. ステップ4で書き留めたURLをブラウザのアドレス・バーに入力してページに直接アクセスするか、provider.xmlにリストされているグループに属さないユーザーを使用してOracle Portalにログインします。

図7-10のように、ステップ2で作成したページが表示されますが、ステップ3で追加したポートレットは表示されません。ページにポートレットを追加したときは、ポートレット表示の認可を受けたユーザーとしてログインしています。PDKランタイムはこれを検出し、ポートレットの追加を許可しました。ログアウトしてページを表示したときは、ポートレット表示を許可されたグループにはすでに属していなかったため、PDKフレームワークはポートレットのコンテンツのレンダリングを許可しませんでした。

図7-10 開発者用のページとポートレット

再度ログインしてページを表示すると、ポートレットの存在を確認できます(図7-11)。

図7-11 開発者/管理者用のページとポートレット

7.2.7.10 ユーザー入力のエスケープ

テキストにエスケープせずにユーザー入力を受け入れると、攻撃者がユーザー入力フォームを介して悪意のあるスクリプトで渡そうとするXSS攻撃の危険があります。たとえば、ポートレット・タイトルがカスタマイズ可能な場合、攻撃者はタイトル文字列を使用して、ポートレットにスクリプトまたはコマンドを渡そうとすることができます。Oracle Porletでは、そのような攻撃からポートレットを保護できるように、次の機能が提供されています。

- 7.2.7.10.1項「デフォルト・コンテナ・エンコーディング」

- 7.2.7.10.2項「エスケープ・メソッド」

7.2.7.10.1 デフォルト・コンテナ・エンコーディング

ポートレット・タイトル内のスクリプトが実行されないように、フレームワーク・デフォルト・コンテナ・レンダラ・クラスはすべてのスクリプト文字をエンコードします。このデフォルトの動作は、JNDI変数escapeStringsで制御されます。trueに設定すると、ポートレット・タイトル内のマークアップ・タグが表示タグ文字としてレンダリングされます。たとえば、<i>title</i>というタイトルのカスタマイズは、titleではなく<i>title</i>としてレンダリングされます。このモードは安全ですが、そのようにしたくない場合は、そのプロバイダのescapeStringsをfalseに設定できます。

escapeStringsはWebプロバイダ内のすべての論理プロバイダに適用されます。escapeStringsの値は、WebLogic Server管理コンソールから、他のJNDI変数と同じように設定できます。詳細は、7.2.4.2項「JNDI変数値の設定」を参照してください。

7.2.7.10.2 エスケープ・メソッド

カスタマイズされた値をレンダリングするコードがある場合、XSS攻撃を避けるためにそれらの入力値を適切にエスケープする必要があります。これは、どのモードでページをレンダリングするコードでも同様です。Oracle Portalではこのための2つの新しい静的なメソッドが提供されています。Javaクラスoracle.portal.provider.v2.url.UrlUtilsにある次のようなメソッドです。

- public static escapeString(string_text)は、与えられた文字列内の任意のスクリプト文字をエスケープします。たとえば、より小さい(<)は&ltとなります。このメソッドはescapeStrings JNDI変数による影響を受けず、安全であり、使用を推奨されています。

- public static escapeStringByFlag(string_text)は、与えられた文字列内の任意のスクリプト文字をエスケープします。このメソッドはescapeStrings JNDI変数によって制御されるので、安全性が低く、使用を推奨されていません。

例:

title = UrlUtils.escapeString(data.getPortletTitle());

7.2.8 ポートレットのパーソナライズのエクスポート/インポートの制御

Oracle Portalのエクスポート/インポート機能は、ポートレットなどのポータル・オブジェクトをOracle Portalインスタンス間で移動するための多目的ツールです。たとえば、エクスポート/インポートを使用して、オブジェクトを開発環境からステージング環境に、さらに最終的には本番環境に移動できます。また、Oracle Portalインスタンス間でページおよびページ・グループを移動したり、Webプロバイダをマシン間で移動するのに、エクスポート/インポートを使用することもできます。一般的なエクスポート/インポートの詳細は、『Oracle Fusion Middleware Oracle Portal管理者ガイド』を参照してください。

ポートレットのデフォルト設定は、管理者が設定した後、ユーザーが変更できるため、開発者はデフォルト設定をインポートおよびエクスポートする際に、いくつかの特別な配慮をする必要があります。トランスポート・プロセスを簡略化するために、Oracle Portalには開発者のために、管理者のパーソナライズ・データ(つまり、デフォルトの編集モードで作成されたデータ)を処理するデフォルト機能が用意されています。ポートレットがエクスポートされるとき、デフォルトでは、PDK-JavaのPreferenceStoreメカニズムを使用して格納されたデフォルトのパーソナライズ・データがポートレットとともにエクスポートされます。したがって、ポートレットがターゲットのOracle Portalインスタンスにインポートされるとき、このデータはポートレットとともにインポートされます。その結果、ポートレットがポートレット・インスタンス間で移動されるとき、ポートレット・インスタンスのデフォルト設定は保持されます。脚注1

前述の動作は、開発者が便利なように提供されており、利用するためになんらかの操作を実行する必要はありません。ただし、パーソナライズ・データのエクスポートに対して、デフォルト機能より精度の高い制御を行うことが必要な場合があります。エクスポート/インポートについて独自の要件を実装するために、開発者はプログラミング・インタフェースを使用してパーソナライズのデフォルト処理を強化またはオーバーライドできます。

PDK-Javaのプリファレンス・ストア・メカニズムを使用する場合、デフォルトの編集をパーソナライズした内容のエクスポート/インポートが組み込まれるため、開発者側でなんらかの操作を実行する必要はありません。デフォルトで行われる、管理者のパーソナライズのこのエクスポート/インポートは、PDK-Javaのプリファレンス・ストアに基づいて行われます。独自のプリファレンス・ストア・メカニズム(ファイルまたはデータベースのプリファレンス・ストレージ・システムなど)を作成した場合、次の機能を実行する独自のエクスポート/インポート・サポートを実装する必要があります。

- パーソナライズのエクスポート。この機能は少なくとも管理者のパーソナライズをエクスポートする必要がありますが、必要に応じてユーザーのパーソナライズを含めることもできます。

- パーソナライズのインポート。この機能は、エクスポートに対して実装したすべての機能に対応している必要があります。たとえば、管理者とユーザーの両方のパーソナライズのエクスポートを実装した場合、これらの両方がインポートできる必要があります。

パーソナライズに対するエクスポート/インポート機能では、Oracle Portalインスタンスおよびプロバイダがリリース10.1.2上に存在する必要があります。パーソナライズのエクスポート/インポートの動作は、プロバイダの位置に関係なく同じです。次のいずれかの場合があります。

- Oracle Application ServerのデフォルトのOracle Containers for Java EE (Oracle Portalインスタンスは異なります)。

- 別のOracle Containers for Java EE (Oracle Portalインスタンスは異なることがあり、プロバイダは同じでもターゲットのOracle Portalインスタンスに登録されていません)。

7.2.8.1 エクスポート/インポートのプログラミング・インタフェース

PDK-Javaのプリファレンス・ストア・メカニズムは、多数のアプリケーション・エンティティによるデータの永続化を可能にします。次の3つのエンティティは、エクスポート/インポートのためにデータを永続化するエンティティです。

1. ポートレット・インスタンスは、管理者によってデフォルトのパーソナライズが行われたページ上のポートレットです。ポートレット・インスタンスのAPIは、次のとおりです。

- oracle.portal.provider.v2.PortletInstance

- exportData

public byte[] exportData
(
boolean exportUsers,
String[] userNames,
TransportLogger logger
)    throws PortletException

- importData

public void importData
(
byte[] data,
TransportLogger logger
)
throws PortletException

2. ポートレット定義は、パーソナライズがまったく適用されていない基本ポートレットです。ポートレット定義は、特定のページで使用するために配置される前の、ポートレット・リポジトリに存在するポートレットのバージョンと考えることができます。ポートレット定義のAPIは、次のとおりです。

- oracle.portal.provider.v2.PortletDefinition

- exportData

public byte[] exportData
(
ProviderInstance pi,
boolean exportUsers,
String[] userNames,
TransportLogger logger
)
throws PortletException

- importData

public void importData
(
ProviderInstance pi,
byte[] data,
TransportLogger logger
)
throws PortletException

3. プロバイダ・インスタンスは、一連のポートレットを含み、これらのポートレットと通信するエンティティです。プロバイダ・インスタンスのAPIは、次のとおりです。

- oracle.portal.provider.v2.ProviderInstance

- exportData

public byte[] exportData
(
boolean exportUsers,
String[] userNames,
TransportLogger logger
)
throws ProviderException

- importData

public void importData
(
byte[] data,
TransportLogger logger
)
throws ProviderException

デフォルトでは、これらの各エンティティは、oracle.portal.provider.v2.transport.PrefStoreTransporterのインスタンスを使用して、トランスポート用にデータをoracle.portal.provider.v2.preference.PreferenceStoreからバイト配列に変換します。ただし、エクスポート/インポートのデフォルト動作では、ポートレット・インスタンス・エンティティのパーソナライズ・データのみがエクスポートおよびインポートされます。ポートレット定義またはプロバイダ・インスタンスのレベルで永続化されたデータがある場合、そのデータもエクスポートすることがあります。たとえば、ProviderInstanceレベルで永続化した請求ハンドルはエクスポートする必要があります。

PrefStoreTransporterの動作を変更するために、デフォルト実装をオーバーライドできます。PrefStoreTransporterのオーバーライド方法は、7.2.8.3.7項「参照によるエクスポートの例」の例を参照してください。

ロギング・インタフェース

エクスポート/インポート・トランザクションのトラブルシューティングを簡略化するために、メッセージをコール元のOracle PortalインスタンスとWebプロバイダ・ログの両方に送信できます。PDK-Javaでは、トランスポート・ロギング・クラスを提供しています。このクラスを使用すると、エクスポートおよびインポートの操作中にイベントをログに追加できます。この方法により、ポートレットのパーソナライズのトランスポート中に発生するイベントをより適切に管理できます。ログは、トランスポート中またはトランスポート後にポートレットで予期しない動作が発生した場合に、有益なトラブルシューティング・ツールになります。たとえば、PDK-Javaのバージョン間で不一致が見つかった場合に、イベントをログに記録できます。

イベントをログに記録するには、ロガー・オブジェクト、すなわち前述の各メソッドに提供されるoracle.portal.provider.v2.transport.TransportLoggerクラスのインスタンスを使用します。コール元のポータルでは、各メソッドに提供されるこのインスタンスを介してイベントをログに記録します。Webプロバイダ・ログには、標準的なロギング・メカニズムのoracle.portal.log.LogManagerを使用してイベントを記録します。エクスポート/インポートのログ・レベルは次のとおりです。

- TransportLogger.SEVERITY_INFO

- TransportLogger.SEVERITY_WARNING

- TransportLogger.SEVERITY_ERROR

7.2.8.2 パーソナライズのエクスポートの例

この例では、ポートレットを構築し、パーソナライズのエクスポートについてデフォルト動作を受け入れる最も基本的なケースを示します。7.2.8.3.6項「パーソナライズ・データの暗号化の例」および7.2.8.3.7項「参照によるエクスポートの例」の例では、エクスポートおよびインポート時にパーソナライズのセキュリティを強化する方法を示します。最も基本的な形式のパーソナライズのエクスポートを実装する手順は、次のとおりです。

1. 株式ポートレットを作成し、次のクラスMyStockPortletShowRenderer.javaを使用して表示モードを実装します。このクラスには、エクスポート/インポートを有効にする特別なコードが組み込まれていないことに注意してください。

package oracle.portal.sample.v2.devguide.tx;
import java.util.StringTokenizer;
import oracle.portal.provider.v2.PortletException;
import oracle.portal.provider.v2.personalize.NameValuePersonalizationObject;
import oracle.portal.provider.v2.render.PortletRenderRequest;
import oracle.portal.provider.v2.render.PortletRendererUtil;
import oracle.portal.provider.v2.render.http.BaseManagedRenderer;
import java.io.PrintWriter;
import oracle.portal.sample.v2.devguide.webservices.
NetXmethodsServicesStockquoteStockQuoteServiceStub;
public class MyStockPortletShowRenderer extends BaseManagedRenderer
{
private String pid = null;
private String userdata;
private String stockList;
private String stockCode;
public void renderBody(PortletRenderRequest request) throws PortletException
{
// Use the PrintWriter from the PortletRenderRequest
PrintWriter out = null;
NetXmethodsServicesStockquoteStockQuoteServiceStub ns = new
NetXmethodsServicesStockquoteStockQuoteServiceStub();
try
{
out = request.getWriter();      NameValuePersonalizationObject data = null;
data = (NameValuePersonalizationObject)PortletRendererUtil.
getEditDefaultData(request);
stockList= data.getString("stock");
if(stockList!=null) {
StringTokenizer st = new  StringTokenizer(stockList,",");
out.println("<table border='0'>");
out.println("<thead>");
out.println("<tr>");
out.println("<th width='20%'>");
out.println("<p align='left'> Stock Code</p></th><th width='20%'>");
out.println("<p align='left'> Quote</p>");
out.println("</th>");
out.println("</tr>");
out.println("<thead>");
while(st.hasMoreElements()) {
stockCode= st.nextElement().toString();
out.println("<tr>");
out.println("<td width='20%'>");
out.println("<p align='left'>"+  stockCode +
"</p></td><td width='20%'>");
out.println(ns.getQuote(stockCode));
out.println("</td>");
out.println("</tr>");
}
out.println("</table>");
}
else
{
out.println("<br> Click <b>Edit Defaults</b> to define stock codes.");
}
}
catch(Exception ioe)
{
throw new PortletException(ioe);
}
}
}

2. 次のクラスMyStockPortletEditDefaultsRenderer.javaを使用して、株式ポートレットにデフォルト編集モードを実装します。このクラスにより、管理者はデフォルトのパーソナライズを実行し、格納できます。その後、そのパーソナライズは、デフォルト動作に従ってエクスポートされます。

package oracle.portal.sample.v2.devguide.tx;
import oracle.portal.provider.v2.PortletException;
import oracle.portal.provider.v2.http.HttpCommonConstants;
import oracle.portal.provider.v2.render.PortletRenderRequest;
import oracle.portal.provider.v2.render.http.BaseManagedRenderer;
import oracle.portal.provider.v2.render.PortletRendererUtil;
import oracle.portal.provider.v2.personalize.NameValuePersonalizationObject;
import java.io.PrintWriter;
import java.io.IOException;
import oracle.portal.provider.v2.render.http.HttpPortletRendererUtil;
public class MyStockPortletEditDefaultsRenderer extends BaseManagedRenderer
{
public void renderBody(PortletRenderRequest request) throws PortletException
{
PrintWriter out = null;
try
{
out = request.getWriter();
}
catch(IOException ioe)
{
throw new PortletException(ioe);
}

// Personalize the portlet title and stock
String actionParam = PortletRendererUtil.getEditFormParameter(request);
PortletRenderRequest prr = (PortletRenderRequest)
request.getAttribute(HttpCommonConstants.PORTLET_RENDER_REQUEST);
String action = request.getParameter(actionParam);
String title = prr.getQualifiedParameter("myportlet_title");
String stock = prr.getQualifiedParameter("myportlet_stock");
NameValuePersonalizationObject data = null;
try
{
data = (NameValuePersonalizationObject)
PortletRendererUtil.getEditDefaultData(request);
}
catch(IOException io)
{
throw new PortletException(io);
}
// Cancel automatically redirects to the page, so
// will only recieve OK or APPLY
if (action != null)
{
data.setPortletTitle(title);
data.putString("stock",stock);
try
{
PortletRendererUtil.submitEditData(request, data);
}
catch(IOException ioe)
{
throw new PortletException(ioe);
}
return;
}
// Otherwise just render the form
title = data.getPortletTitle();
stock = data.getString("stock");
out.print("<table border='0'> <tr> ");
out.println("<td width='20%'> <p align='right'>Title:</p></td>
<td width='80%'>");
out.print("<input type='TEXT' name='" +
HttpPortletRendererUtil.portletParameter(prr, "myportlet_title")
+ "' value='" + title + "'>");
out.println("</td> </tr>");
out.print("<tr> <td width='20%'> <p align='right'>Stock Codes:</p></td>
<td width='80%'>");
out.print("<input type='TEXT' name='" +
HttpPortletRendererUtil.portletParameter(prr, "myportlet_stock")
+ "' value='" + stock + "'>");
out.println("<br> For example use US Stock Codes separated by comma:
<i> SUNW,IBM,ORCL</i>");
out.print("</td> </tr>");
out.println("</table>");
}
}

3. 株式ポートレット用に、次のクラスNetXmethodsServicesStockquoteStockQuoteServiceStub.javaを作成します。

package oracle.portal.sample.v2.devguide.webservices;
import oracle.soap.transport.http.OracleSOAPHTTPConnection;
import org.apache.soap.encoding.SOAPMappingRegistry;
import java.net.URL;
import org.apache.soap.rpc.Call;
import org.apache.soap.Constants;
import java.util.Vector;
import org.apache.soap.rpc.Parameter;
import org.apache.soap.rpc.Response;
import org.apache.soap.Fault;
import org.apache.soap.SOAPException;
import java.util.Properties;
public class NetXmethodsServicesStockquoteStockQuoteServiceStub
{
public NetXmethodsServicesStockquoteStockQuoteServiceStub()
{
m_httpConnection = new OracleSOAPHTTPConnection();
m_smr = new SOAPMappingRegistry();
}
private String _endpoint = "http://64.124.140.30:9090/soap";
public String getEndpoint()
{
return _endpoint;
}
public void setEndpoint(String endpoint)
{
_endpoint = endpoint;
}
private OracleSOAPHTTPConnection m_httpConnection = null;
private SOAPMappingRegistry m_smr = null;
public Float getQuote(String symbol) throws Exception
{
Float returnVal = null;
URL endpointURL = new URL(_endpoint);
Call call = new Call();
call.setSOAPTransport(m_httpConnection);
call.setTargetObjectURI("urn:xmethods-delayed-quotes");
call.setMethodName("getQuote");
call.setEncodingStyleURI(Constants.NS_URI_SOAP_ENC);
Vector params = new Vector();
params.addElement(new Parameter("symbol", String.class, symbol, null));
call.setParams(params);
call.setSOAPMappingRegistry(m_smr);
Response response = call.invoke(endpointURL,
"urn:xmethods-delayed-quotes#getQuote");
if (!response.generatedFault())
{
Parameter result = response.getReturnValue();
returnVal = (Float)result.getValue();
}
else
{
Fault fault = response.getFault();
throw new SOAPException(fault.getFaultCode(), fault.getFaultString());
}
return returnVal;
}
public void setMaintainSession(boolean maintainSession)
{
m_httpConnection.setMaintainSession(maintainSession);
}
public boolean getMaintainSession()
{
return m_httpConnection.getMaintainSession();
}
public void setTransportProperties(Properties props)
{
m_httpConnection.setProperties(props);
}
public Properties getTransportProperties()
{
return m_httpConnection.getProperties();
}
}

4. このポートレットのprovider.xmlを使用してWebプロバイダを作成します。パーソナライズの格納を可能にする<preferenceStore>要素の使用に注意してください。

<provider class="oracle.portal.provider.v2.DefaultProviderDefinition">
<session>false</session>
<passAllUrlParams>false</passAllUrlParams>
<preferenceStore class="oracle.portal.provider.
v2.preference.FilePreferenceStore">
<name>prefStore1</name>
<useHashing>true</useHashing>
</preferenceStore>
<portlet class="oracle.portal.provider.v2.DefaultPortletDefinition">
<id>1</id>
<name>MyStockPortlet</name>
<title>My Stock Portlet</title>
<description>Simple Stock Portlet to show Export and Import
feature of web providers</description>
<timeout>80</timeout>
<showEditToPublic>false</showEditToPublic>
<hasAbout>false</hasAbout>
<showEdit>false</showEdit>
<hasHelp>false</hasHelp>
<showEditDefault>true</showEditDefault>
<showDetails>false</showDetails>
<renderer class="oracle.portal.provider.v2.render.RenderManager">
<renderContainer>true</renderContainer>
<renderCustomize>true</renderCustomize>
<autoRedirect>true</autoRedirect>
<contentType>text/html</contentType>
<showPage class="oracle.portal.sample.v2.
devguide.tx.MyStockPortletShowRenderer"/>
<editDefaultsPage class="oracle.portal.sample.v2.devguide.tx.
MyStockPortletEditDefaultsRenderer"/>
</renderer>
<personalizationManager class="oracle.portal.provider.v2.personalize.
PrefStorePersonalizationManager">         <dataClass>oracle.portal.provider.v2.personalize.
NameValuePersonalizationObject
</dataClass>
</personalizationManager>
</portlet>
</provider>

provider.xmlの構文の詳細は、OTNにあるプロバイダのJavadocを参照してください。

http://www.oracle.com/technology/products/ias/portal/html/javadoc/xml_tag_reference_v2.html

5. このエクスポート対応のプロバイダをソースのOracle Portalインスタンスに登録します。Webプロバイダの登録方法は、6.5.5項「Oracle PDK-Javaポートレットの登録と表示」を参照してください。

注意:

Webプロバイダが保護された環境で実行されている場合、Oracle WebLogic Serverの起動時にプロキシ・ホストおよびポートを必ず指定してください。例:

JAVA_OPTIONS=“-Dhttp.proxyHost=www.xmlns.oracle.com -Dhttp.proxyPort=80

6. サンプル・ページにリージョンを2つ作成し、My Stock Portletを1つ目のリージョンに追加します。リージョンおよびページの作成方法は、『Oracle Fusion Middleware Oracle Portalユーザーズ・ガイド』を参照してください。

7. ページを編集し、My Stock Portletの「デフォルトの編集」アイコンを選択します。株式コードSUNW、IBM、ORCLを選択します。ページ上のポータルのデフォルトを編集する方法は、『Oracle Fusion Middleware Oracle Portalユーザーズ・ガイド』を参照してください。

8. My Stock Portletを2つ目のリージョンに追加し、デフォルトを再編集します。今度は、別の株式コードMSFTを使用します。

9. このページを含むページ・グループをエクスポートします。ページ・グループのエクスポート方法は、『Oracle Fusion Middleware Oracle Portal管理者ガイド 』の第10章「コンテンツのエクスポートおよびインポート」を参照してください。

10. このページ・グループをターゲットのOracle Portalインスタンスにインポートします。ページ・グループのインポート方法は、『Oracle Fusion Middleware Oracle Portal管理者ガイド』の第10章「コンテンツのエクスポートおよびインポート」を参照してください。

11. ターゲットのOracle PortalインスタンスでMy Stock Portletをページに表示し、パーソナライズが保持されていることを確認します。

7.2.8.3 エクスポート/インポートのセキュリティの実装

パーソナライズのトランスポートは、ポートレットが機密データを格納し、保護された環境で機能していない場合、セキュリティ上の問題を示すことがあります。Oracle Portalには、プロバイダおよびポートレットのレベルで、ポートレットのパーソナライズのエクスポートとそれに続くインポートを保護するための方法がいくつか用意されています。エクスポート/インポートについてポートレットおよびプロバイダをより厳しく保護するために、次の処置を行うことができます。

- 7.2.8.3.1項「プロバイダ通信の保護」。Oracle Portalの構成オプションを使用して、プロバイダとOracle Portal間の通信を保護できます。これにより、ポートレットのエクスポートとインポートがよりセキュアになります。

- 7.2.8.3.2項「パーソナライズのエクスポート/インポートの無効化」。各Webアプリケーションに対して、すべてのポートレットのパーソナライズ・データのエクスポートを無効化できます。この方法は、最も高いセキュリティを提供しますが、ポートレットの移動時に管理者は自分のデフォルトのパーソナライズを保持できないため、機能性を著しく犠牲にします。

- 7.2.8.3.3項「トランスポート用データの不明瞭化(自動)」。デフォルトでは、Oracle Portalはトランスポートする前にパーソナライズ・データを不明瞭化しますが、暗号化はしません。

- 7.2.8.3.4項「トランスポート用パーソナライズ・データの暗号化」。次のいずれかに該当する場合、トランスポート用にパーソナライズ・データを暗号化することができます。

- Webプロバイダ接続がHTTPSを使用して保護されていない場合。

- 転送時のデータ保護を確保する場合。

- Oracle Portalインスタンスに格納されている間、データを保護されたままにする場合。

- 7.2.8.3.5項「参照によるエクスポート」。ポートレットのパーソナライズ・データは、トランスポート・セットに直接含めるかわりに、参照を使用してトランスポート・セットに含めることができます。データ自体はトランスポート・セットに存在しないため、参照によるエクスポートは最もセキュアなパーソナライズのトランスポート方法です。

7.2.8.3.1 プロバイダ通信の保護

ポートレットのエクスポート/インポートのセキュリティが重要な問題である場合、ポートレット・プロバイダとの通信を保護するようにOracle Portalを構成する必要があります。Oracle Portalでのプロバイダ通信の保護に対する主要なメカニズムは次のとおりです。

- Hashed Message Authentication Code (HMAC)アルゴリズムを使用したメッセージ認証。プロバイダに対するメッセージ認証の詳細は、『Oracle Fusion Middleware Oracle Portal管理者ガイド 』の6.1.7.8項「メッセージ認証」を参照してください。

- プロバイダとOracle Portal間のHTTPS。プロバイダ通信に対するHTTPSの詳細は、『Oracle Fusion Middleware Oracle Portal管理者ガイド』の6.1.7.9項「HTTPS通信」を参照してください。

注意:

証明書は、プロバイダとのHTTPS通信に使用できません。

7.2.8.3.2 パーソナライズのエクスポート/インポートの無効化

JNDI変数oracle/portal/provider/global/transportEnabledにより、パーソナライズのエクスポートおよびインポートを許可するかどうかが制御されます。この変数をtrueに設定すると、パーソナライズはエクスポートとインポートの一環としてトランスポートされます。falseに設定すると、トランスポートされません。Oracle WebLogic ServerのPDK-Java Webアプリケーションに設定されたデプロイ・プランを通して、PDK-JavaにJNDI変数を設定できます。これは、WebLogic Server管理コンソールを使用して行えます。デプロイ・プランは、パッケージ化されたデプロイ記述子ファイルを変更する手間を省き、アプリケーションの構成変更が簡単になります。デプロイ・プランの設定が終わったら、既存のWEB-INF/web.xmlモジュール記述子内のJNDI変数に対して、それを次のように手動で変更できます。

<module-descriptor external="false">
<root-element>web-app</root-element>
<uri>WEB-INF/web.xml</uri>
<variable-assignment>
<name>provider_transportEnabled</name>        <xpath>/web-app/env-entry/[env-entry-name=&quot;oracle/portal/provider/global/transportEnabled&quot;]/env-entry-value</xpath>
</variable-assignment>
</module-descriptor>

この変数割当の変数定義は<deployment-plan>タグの直下で行われ、次のようになります。

<variable-definition>
<variable>
<name>provider_transportEnabled</name>
<value>false</value>
</variable>
</variable-definition>

これによって、oracle/portal/provider/global/transportEnabledはfalseに設定されます。

参照:

Oracle Fusion Middleware Oracle WebLogic Serverへのアプリケーションのデプロイ

7.2.8.3.3 トランスポート用データの不明瞭化(自動)

デフォルトでは、パーソナライズ・データはエンコード(BASE64)されます。このエンコーディングにより、トランスポート時のデータは不明瞭化されます。BASE64エンコーディングは、デフォルトで提供されるため、利用するためになんらかの操作を実行する必要はありません。ただし、より高いセキュリティが必要な場合は、データを暗号化できます。7.2.8.3.4項「トランスポート用パーソナライズ・データの暗号化」を参照してください。

7.2.8.3.4 トランスポート用パーソナライズ・データの暗号化

oracle.portal.provider.v2.security.CipherManagerクラスをプロバイダに実装することで、エクスポートする前にパーソナライズ・データを暗号化できます。インポート時には、暗号マネージャが再起動され、データが復号化されます。7.2.8.3.6項「パーソナライズ・データの暗号化の例」を参照してください。

注意:

暗号マネージャを使用して、エクスポート用にWebプロバイダを暗号化する場合、暗号化アルゴリズムに対する鍵の管理戦略を独自に考案する必要もあります。

7.2.8.3.5 参照によるエクスポート

前述のとおり、ポートレットのエクスポートのデフォルト動作では、実際のパーソナライズ・データがトランスポート・セットに含まれます。よりセキュアなトランスポートのために、実際のプリファレンス・データを含めるのではなく、ポインタを使用してパーソナライズがエクスポートされるように、ポートレットをコーディングできます。トランスポート・セットのインポート時に、ターゲットのOracle PortalインスタンスはポインタをWebプロバイダに戻します。その後、Webプロバイダで、実際のデータは新しいポートレット・インスタンスと再度関連付けられます。7.2.8.3.7項「参照によるエクスポートの例」を参照してください。

注意:

セキュリティ・ゾーンを越えてエクスポートする場合、参照によるエクスポートは事実上機能しないことがあります。一般に、参照によるエクスポートを採用するのは、同じ一般的なセキュリティ環境内でトランスポートを実行する場合のみです。

7.2.8.3.6 パーソナライズ・データの暗号化の例

Webプロバイダのパーソナライズ・データを暗号化するには、独自の暗号マネージャを作成し、ポートレット・プロバイダに関連付ける必要があります。この例では、説明専用の、単純でセキュアではない暗号マネージャを示します。セキュアな暗号マネージャを本番システムに実装するには、この例を大幅に拡張する必要があります。本番システムへの実装で考慮する必要がある問題を次に示します。

- 鍵オブジェクトをメモリー内に保持しないでください。必要に応じて、永続ストアから読み取ります。

- クラスタ化されたケースで機能させるには、DBPreferenceStoreでサポートされるプロバイダのPreferenceStore APIを使用します。

- インポート時に、provider.xmlから取得された暗号マネージャのインスタンスがSOAPメッセージで戻されたクラス名と一致する場合、復号化の実行にそのCipherManagerインスタンスが使用されます。したがって、ポートレット/プロバイダ定義に保持されるインスタンスが、適切な方法(たとえば、provider.xmlのタグやJNDI変数)を使用して構成されると、その構成がインポート時に再利用されます。

Webプロバイダのパーソナライズ・データを暗号化する手順は、次のとおりです。

注意:

次のサンプルは説明専用のものです。本番環境で使用するには、大幅に拡張する必要があります。

1. 暗号マネージャ・クラスInsecureCipherManagerを作成します。このクラスは、Webプロバイダに対してエクスポートまたはインポートされるパーソナライズ・データの暗号化および復号化に使用されます。BASE64でエンコードされ、ハードコーディングされた秘密鍵が、基礎となるJava Runtime Environmentのデフォルトのjavax.cryptoプロバイダにより提供されるDESアルゴリズムで使用されます。その結果、エンコードされた鍵は、バイト・コードを逆コンパイルするのみで悪意を持ったユーザーに奪取されるため、この特別サンプルはセキュアではありません。

注意:

このサンプルではjavax.cryptoパッケージを使用します。このパッケージは、Java1.3のオプションで、手動でインストールする必要があります。ただし、Java1.4では、このパッケージをデフォルトで提供しています。

package oracle.portal.sample.v2.devguide.tx;
import java.io.IOException;
import java.security.GeneralSecurityException;
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESKeySpec;
import oracle.portal.provider.v2.ProviderException;
import oracle.portal.provider.v2.security.CipherManager;
import sun.misc.BASE64Decoder;
public final class InsecureCipherManager implements CipherManager
{
/**
* Base64 encoded external form of a javax.crypto.SecretKey which was
* generated for the DES algorithm. This is completely insecure! Anyone
* can decompile the bytecode and recostitue the key. A more secure
* implementation would implement a key management policy in a
* java.security.KeyStore.
*/
private static final String sEncodedKey = "UTJds807Arw=";
/**
* Generated from the (insecure) encoded form in sEncodedKey.
*/
private SecretKey mKey;
/**
* Transforms the input data to a more secure form, in a single operation,
* using the DES cryptographic algorithm along with a statically defined
* secret key.
* @param toEncode the input data.
* @return an encoded form of the input data.
* @throws ProviderException if an error occurs during transform.
*/
public final byte[] encode(byte[] toEncode) throws ProviderException
{
try
{
Cipher c = Cipher.getInstance("DES");
c.init(Cipher.ENCRYPT_MODE, getSecretKey());
return c.doFinal(toEncode);
}
catch (GeneralSecurityException gse)
{
throw new ProviderException(gse);
}
catch (IOException ioe)
{
throw new ProviderException(ioe);
}
}
/**
* Transforms the input data to its original form, in a single operation,
* using the DES cryptographic algorithm along with a statically defined
* secret key.
* @param toDecode the input data.
* @return a decoded form of the input data.
* @throws ProviderException if an error occurs during transform.
*/
public final byte[] decode(byte[] toDecode) throws ProviderException
{
try
{
Cipher c = Cipher.getInstance("DES");
c.init(Cipher.DECRYPT_MODE, getSecretKey());
return c.doFinal(toDecode);
}
catch (GeneralSecurityException gse)
{
throw new ProviderException(gse);
}
catch (IOException ioe)
{
throw new ProviderException(ioe);
}
}
/**
* Returns a <code>javax.crypto.SecretKey</code> deserialized from the
* obuscated form in sEncodedKey. Note, this is highly insecure!!
*/
private SecretKey getSecretKey()
throws GeneralSecurityException, IOException
{
if (mKey == null)
{
DESKeySpec ks = new DESKeySpec((new BASE64Decoder()).decodeBuffer(
sEncodedKey));
SecretKeyFactory skf = SecretKeyFactory.getInstance("DES");
mKey = skf.generateSecret(ks);
}
return mKey;
}
}

2. 暗号マネージャを参照するように、provider.xmlを変更します。

<?xml version = '1.0' encoding = 'UTF-8'?>
<?providerDefinition version="3.1"?>
<provider class="oracle.portal.provider.v2.DefaultProviderDefinition">
<providerInstanceClass>net.mzyg.tx.TxProviderInstance</providerInstanceClass>
<session>false</session>
<passAllUrlParams>false</passAllUrlParams>
<preferenceStore class="oracle.portal.provider.v2.
preference.DBPreferenceStore">
<name>prefStore1</name>
<connection>java:comp/env/jdbc/PortletPrefs</connection>
</preferenceStore>
<cipherManager class="oracle.portal.sample.v2.devguide.tx.
InsecureCipherManager"/>

7.2.8.3.7 参照によるエクスポートの例

実際のパーソナライズをエクスポートするのではなく、参照によりエクスポートする手順は、次のとおりです。

1. DefaultPortletInstanceを次のExportByRefDefaultPortletInstanceでオーバーライドします。

package oracle.portal.sample.v2.devguide.tx;
import oracle.portal.provider.v2.DefaultPortletInstance;
import oracle.portal.provider.v2.preference.PreferenceStore;
import oracle.portal.provider.v2.transport.PrefStoreTransporter;
public class ExportByRefDefaultPortletInstance extends DefaultPortletInstance
{
/**
* Returns a {@link oracle.portal.provider.v2.transport.PrefStoreTransporter}
* capable of carrying out transport operations such as export/import on
* data applicable to {@link oracle.portal.provider.v2.PortletInstance}
* persisted in {@link oracle.portal.provider.v2.preference.PreferenceStore}.
* This implementation returns an {@link ExportByRefPrefStoreTransporter}.
* @param ps the {@link oracle.portal.provider.v2.preference.PreferenceStore}
* containing the data to be transported.
* @return a {@link oracle.portal.provider.v2.transport.PrefStoreTransporter}
*/
protected PrefStoreTransporter getPrefStoreTransporter(PreferenceStore ps)
{
return new ExportByRefPrefStoreTransporter(ps);
}
}

2. ExportByRefDefaultPortletInstanceで参照されるExportByRefPrefStoreTransporterクラスを作成します。このクラスは、エクスポート操作時にプリファレンス・データを送信しない代替プリファレンス・ストア・トランスポータを実装します。かわりに、ソース・プリファレンスのコンテキスト・パスをストリームに書き出します。エクスポート時に、コンテキスト・パスを読み取り、そのパスを使用してプリファレンス・データを検索し、新しいインスタンスにコピーします。この参照によるエクスポート方法は、ソースとターゲットのプロバイダが同じプリファレンス・ストアにアクセスすることを前提にしています。つまり、この例の最も適した例は、ソースとターゲットのプロバイダが同じ場合です。

package oracle.portal.sample.v2.devguide.tx;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import oracle.portal.provider.v2.transport.PrefStoreTransporter;
import oracle.portal.provider.v2.transport.TransportLogger;
import oracle.portal.provider.v2.preference.Preference;
import oracle.portal.provider.v2.preference.PreferenceStore;
import oracle.portal.provider.v2.preference.PreferenceStoreException;
public class ExportByRefPrefStoreTransporter extends PrefStoreTransporter
{
public ExportByRefPrefStoreTransporter(PreferenceStore prefStore)
{
super(prefStore);
}
/**
* Exports the context path of the supplied {@link
* oracle.portal.provider.v2.preference.Preference} from the {@link
* oracle.portal.provider.v2.preference.PreferenceStore}.
* @param pref the source {@link
* oracle.portal.provider.v2.preference.Preference}
* @param out the <code>java.io.OutputStream</out> to which data will be
* written.
* @param logger
*/
protected void exportPreference(Preference pref, OutputStream out,
TransportLogger logger) throws PreferenceStoreException, IOException
{
// Get the context path of the preference we are exporting.
String contextPath = pref.getContextPath();
DataOutputStream dos = new DataOutputStream(out);
// Write the context path in the export data. The import process
// will use this context path to lookup this preference in the
// preference store and copy it to the new context
dos.writeUTF(contextPath);
}
/**
* Reads a context path from the stream and copies preference data
* from that location into the {@link
* oracle.portal.provider.v2.preference.PreferenceStore}.
* @param pref the target {@link
* oracle.portal.provider.v2.preference.Preference}
* @param in the <code>java.io.InputStream</code> from which to read data.
* @param logger
*/
protected void importPreference(Preference pref, InputStream in,
TransportLogger logger) throws PreferenceStoreException, IOException
{
// Read the context path to copy the value for this
// preference from.
DataInputStream dis = new DataInputStream(in);
String contextPath = dis.readUTF();
// Create preference object to copy from (identical to the
// target preference but with a different context path)
Preference sourcePref = new Preference(contextPath,
pref.getName(), pref.getType(), (String)null);
// Copy across the preference
getPrefStore().copy(sourcePref, pref, true);
}
}

3. ポートレットに次の要素が含まれるように、provider.xmlを更新します。

<portlet class="oracle.portal.provider.v2.DefaultPortletDefinition">
...
<portletInstanceClass>oracle.portal.sample.v2.devguide.tx.
ExportByRefDefaultPortletInstance</portletInstanceClass>
</portlet>

provider.xmlの構文の詳細は、OTNにあるプロバイダのJavadocを参照してください。

http://www.oracle.com/technology/products/ias/portal/html/javadoc/xml_tag_reference_v2.html

7.2.9 キャッシュを使用したポートレットのパフォーマンスの向上

この章の前述の各項では、完全に機能するJavaポートレットをPDKフレームワークを使用して作成する方法を説明しました。ポートレットの基本機能の設定が完了した後は、ポートレットのパフォーマンスに注目する必要があります。

キャッシュは、高度な動的コンテンツを含むWebサイトのパフォーマンスの向上に使用される一般的な手法です。この手法では、キャッシュと呼ばれる待機時間の短い大きなデータ・ストアを備えたローカル・エージェントを使用してリクエストをプロキシ化することで、動的コンテンツのデータの取得と出力の生成に伴うオーバーヘッドを大幅に削減できます。キャッシュ・エージェントは、リクエストに対して次のいずれかの方法で応答します。

- リクエストされたコンテンツの有効なバージョンがキャッシュ内に存在する場合、エージェントはキャッシュされた既存のコピーをそのまま戻します。これによって、コンテンツの取得と生成というコストがかかるプロセスを省くことができます。この状況はキャッシュ・ヒットと呼ばれます。

- リクエストされたコンテンツの有効なバージョンがキャッシュ内に存在しない場合、エージェントはリクエストをその宛先に転送し、コンテンツが戻されるのを待機します。エージェントはコンテンツをリクエスト元に戻し、そのキャッシュ内にローカル・コピーを格納して、同じコンテンツに対するリクエストが後で発生した場合に再利用します。この状況はキャッシュ・ミスと呼ばれます。

Webプロバイダは、動的コンテンツ(つまり、ポートレット)の生成元であり、多くの場合、デプロイされているOracle Portalインスタンスから離れた場所にあります。このため、キャッシュによるパフォーマンス向上が可能となります。Oracle Portalのアーキテクチャは、それ自体がキャッシュに適しています。これは、すべてのレンダリング・リクエストが、ポータルの中間層に存在するParallel Page Engine (PPE)という単一のページ作成エージェントから発生するためです。WebプロバイダでレンダリングされたポートレットをPPEでキャッシュし、キャッシュされたコピーを再利用して後続のリクエストを処理することによって、Webプロバイダがページ作成にもたらすオーバーヘッドを最小限にできます。

Webプロバイダでは、どれがアプリケーションに最も適しているかによって、次の3種類のキャッシュ方法のいずれも使用できます。これらのキャッシュ方法の主な違いは、コンテンツが有効かどうかを判断する方法にあります。3種類のキャッシュ方法を次に示します。

1. 有効期限ベースのキャッシュ: プロバイダはレンダリング・リクエストを受信すると、そのレスポンスに有効期限のスタンプを付けます。レンダリングされたレスポンスはキャッシュに格納され、同じコンテンツに対する後続のすべてのリクエストは、有効期限が経過するまで、このキャッシュを使用して処理されます。このキャッシュ・スキームは最も簡単でパフォーマンスが優れていると考えられます。それは、キャッシュの有効性をテストするためのオーバーヘッドがほとんどなく、ネットワークのラウンドトリップを伴わないためです。有効期限ベースのキャッシュは、コンテンツの使用期間が効率よく定義されているアプリケーションに適しています。コンテンツの使用期間が確実ではない場合、有効期限ベースのキャッシュは効果的ではありません。詳細は、7.2.9.2項「キャッシュのアクティブ化」および7.2.9.3項「有効期限ベースのキャッシュの追加」を参照してください。

2. 無効化ベースのキャッシュ: 無効化ベースのキャッシュは、基本的には有効期限ベースのキャッシュと同様に機能しますが、任意の時点でキャッシュのコンテンツを期限切れ、つまり無効化できる点が異なります。キャッシュのコンテンツの無効化は、通常、イベントによってトリガーされます。
たとえば、当日の予定を表示するカレンダ・ポートレットの場合、ポートレットのコンテンツが生成されるのは、初めてその日のカレンダを表示したときの1回のみです。予定の追加や取消し、予定時間の変更などその日の予定に変更が発生するまで、コンテンツはキャッシュされたままです。各変更イベントは、カレンダ・アプリケーションでアクションをトリガーできます。変更イベントが発生すると、カレンダ・アプリケーションは、その変更の影響を受けるキャッシュされたポートレット・コンテンツに対して無効化リクエストを生成できます。カレンダ・ポートレットを含むページを次回に表示すると、キャッシュにはエントリが含まれていません。Webプロバイダは、変更後の予定で新しいコンテンツを再生成するように連絡を受けます。

この方法は、非常に効率的にコンテンツをキャッシュできます。これは、コンテンツの生成元(つまり、Webプロバイダ)が連絡を受けるのは新しいコンテンツの生成が必要なときのみで、固定した再生成スケジュールに拘束されないためです。詳細は、7.2.9.2項「キャッシュのアクティブ化」および7.2.9.4項「無効化ベースのキャッシュの追加」を参照してください。

3. 有効化ベースのキャッシュ: レンダリング・リクエストを受信したプロバイダは、そのレスポンスにバージョン識別子(または「E」タグ)のスタンプを付けます。この方法でもレスポンスはキャッシュされますが、キャッシュされたレスポンスをPPEが再利用する前に、キャッシュされたバージョンがまだ有効かどうかを判断する必要があります。そのために、キャシュされたコンテンツのバージョン識別子を含めたレンダリング・リクエストをプロバイダに送信します。プロバイダは、このバージョン識別子が有効であるかどうかを判断します。バージョン識別子が有効である場合、プロバイダはコンテンツを含まない軽量のレスポンスをPPEに即座に送信し、キャッシュされたバージョンを再利用できることを通知します。そうでない場合、プロバイダは新しいバージョン識別子を含む新しいコンテンツを生成し、以前にキャッシュされたバージョンを置き換えます。このキャッシュ方法では、PPEは、常にプロバイダに対してコンテンツが最新かどうかを確認する必要があります。キャッシュされたコピーの有効性は、プロバイダのロジックによって判断されます。この方法では、固定期間に依存するのではなく、キャッシュされたコンテンツの使用をプロバイダが管理できるという利点があります。詳細は、7.2.9.2項「キャッシュのアクティブ化」および7.2.9.5項「有効化ベースのキャッシュの追加」を参照してください。

7.2.9.1 前提

これらの項のタスクを実行するには、次の前提が必要です。

1. 6.5項「Oracle JDeveloperを使用したOracle PDK-Javaポートレットの構築」を読んで理解していること。

2. ウィザードで作成したポートレットがページに正常に追加されていること。

7.2.9.2 キャッシュのアクティブ化

Oracle Portalのキャッシュ機能をWebプロバイダで使用するには、最初に、中間層キャッシュをアクティブにする必要があります。このキャッシュは、mod_plsql(データベース・プロシージャおよびデータベース・プロバイダをHTTPでコールするOracle HTTP Serverプラグイン)で使用されるキャッシュと同じであるため、PL/SQLキャッシュと呼ばれます。

通常、キャッシュに関する構成詳細の責任は、OracleAS Portal管理者にあります。

無効化ベースのキャッシュの場合は、Webプロバイダの前にOracle Web Cacheを構成する必要があります。リモートのWebプロバイダにはOracle Web Cacheがインストールされていない場合が多いことに注意してください。Oracle Web Cacheの詳細は、『Oracle Fusion Middleware Oracle Web Cache管理者ガイド』を参照してください。

Oracle Web Cacheをインストールして構成した後は、Oracle Web Cache Managerについて次の点を確認してください。

- Webプロバイダのホスト名とポートを指していること。

- キャッシュ・ルールによってプロバイダのコンテンツのキャッシュが発生しないこと。コンテンツは、プロバイダがそのレスポンスで生成するSurrogate-Controlヘッダーに従ってキャッシュされる必要があります。

7.2.9.3 有効期限ベースのキャッシュの追加

有効期限ベースのキャッシュは、実装が最も簡単なキャッシュ・スキームの1つで、XMLプロバイダ定義内で宣言によってアクティブにできます。利用するManagedRendererの出力には、出力のキャッシュ時間(分)をそのpageExpiresプロパティに設定することによって、有効期限を設定できます。たとえば、ポートレット出力を1分間キャッシュすると仮定します。有効期限ベースのキャッシュを追加する手順は、次のとおりです。

1. 6.5項「Oracle JDeveloperを使用したOracle PDK-Javaポートレットの構築」の説明に従って、ポートレット・ウィザードを使用してポートレットを作成した後、provider.xmlファイルを編集し、showPageのpageExpiresプロパティ・タグを1に設定します。これによって、ポートレットの1分間の期限切れエントリが設定されます。
デフォルトでは、ウィザードによって、showPageの圧縮された標準的なタグが生成されます。pageExpiresのサブタグを含めるには、このタグを拡張する必要があります。

<showPage class="oracle.portal.provider.v2.render.http.ResourceRenderer">
<resourcePath>/htdocs/mycacheportlet/MyCachePortletShowPage.jsp
</resourcePath>
<pageExpires>1</pageExpires>
</showPage>

provider.xmlの構文の詳細は、OTNにあるプロバイダのJavadocを参照してください。

http://www.oracle.com/technology/products/ias/portal/html/javadoc/xml_tag_reference_v2.html

2. JSPコードを表示ページに追加して、ポートレットが1分間キャッシュされることをテストします。ここでは、現在の時刻をJSPに追加します。

<%@page contentType="text/html; charset=windows-1252"
import="oracle.portal.provider.v2.render.PortletRenderRequest"
import="oracle.portal.provider.v2.http.HttpCommonConstants"
import="java.util.Date"
import="java.text.DateFormat"
%>

<%
PortletRenderRequest pReq = (PortletRenderRequest)
request.getAttribute(HttpCommonConstants.PORTLET_RENDER_REQUEST);
DateFormat df = DateFormat.getDateTimeInstance(DateFormat.LONG,
DateFormat.LONG,pReq.getLocale());
String time = df.format(new Date());
%>

<P>Hello <%=pReq.getUser().getName() %>.</P>
<P>This is the <b><i>Edit</i></b> render mode!</P>
<P>This information is correct as of <%=time%>.</P>

ポートレットを表示して、時間(秒を含む)が1分間で一定していることを確認します。時間が経過すると、ポートレットは最新の時刻を表示し、新しいキャッシュが設定されます。

7.2.9.4 無効化ベースのキャッシュの追加

Oracle Web Cacheを使用すると、コンテンツに対するリクエストはHTTPを使用して送信され、コンテンツがキャッシュから戻されるか、またはHTTPリクエストがコンテンツの生成元に転送されます。Oracle Web Cacheに戻されたコンテンツは、リクエスト元に戻される前にキャッシュに追加されます。キャッシュのコンテンツは、無効化リクエストをOracle Web Cacheに直接送信することで無効化されます。PDK-Javaでは、Java API for Web Cache (JAWC)を使用して無効化リクエストを生成します。この項では、Oracle Web Cacheの構成方法、およびPDK-Javaに付属する無効化ベースのキャッシュのサンプルの使用方法を説明します。

Oracle Web Cacheに送信されたすべてのリクエストがキャッシュされるわけではありません。コンテンツをキャッシュするには、Oracle Web Cacheに対してコンテンツのキャッシュを指示するディレクティブがコンテンツに含まれている必要があります。通常、Oracle Web Cacheでは、リクエストに関連付けられたURLをキャッシュ・キーとして使用しますが、Surrogate-Controlヘッダーと呼ばれる特別なHTTPヘッダーをレスポンスに設定すると追加のキーを指定できます。

Javaポートレットを構成して無効化ベースのキャッシュを使用するには、次の処理を実行する必要があります。

- Oracle Web Cacheを構成します。詳細は、『Oracle Fusion Middleware Oracle Web Cache管理者ガイド』を参照してください。

- 7.2.9.4.1項「プロバイダ・サーブレットの構成」

- 7.2.9.4.2項「Oracle Web Cacheの無効化ポートの定義」

- 7.2.9.4.3項「XMLプロバイダ定義の更新」

- 7.2.9.4.4項「手動によるキャッシュの無効化」

7.2.9.4.1 プロバイダ・サーブレットの構成

無効化ベースのキャッシュを有効にするには、そのキャッシュをプロバイダ・サーブレット・レベルでオンにします。PDK-JavaのWebアプリケーション・デプロイメント・ディスクリプタであるweb.xml内にある初期化パラメータにフラグが設定されます。例:

<servlet>
...
<servlet-class>oracle.webdb.provider.v2.adapter.SOAPServlet</servlet-class>
<init-param>
<param-name>invalidation_caching</param-name>
<param-value>true</param-value>
</init-param>
</servlet>

ここにフラグが定義されていないと、無効化ベースのキャッシュはオフになります。フラグの状態は、プロバイダのテスト・ページを表示してチェックできます。testPageURIプロパティがsample.propertiesファイルで設定されていない場合は、プロバイダ・コードによりテスト・ページが古いデフォルト形式で表示されます。古い形式のテスト・ページは、無効化ベースのキャッシュのフラグをweb.xmlファイルから正しく取得します。テスト・ページURLの形式は、次のとおりです。

http://provider_hostname:port/jpdk/providers/sample

7.2.9.4.2 Oracle Web Cacheの無効化ポートの定義

PDK-Javaが自動的に事前インストールされているOracle Application Serverインストール・タイプ(たとえば、Oracle Portal and Wirelessタイプのインストール)を使用する場合は、Oracle Web Cacheの無効化設定がすでにMID_TIER_ORACLE_HOME/portal/conf/cache.xmlに事前構成されていることを確認する必要があります。事前構成されている場合、この項の説明は無視して7.2.9.4.3項「XMLプロバイダ定義の構成」に進んでください。そうでない場合は、Oracle Web Cacheの無効化ポートレットを構成する必要があります。

最初に必要なのは、アプリケーション・サーバーに関連付けられたOracle Web Cacheインスタンスの無効化ポートのユーザー名とパスワードです。これらを取得した後は、提供されているoracle.webdb.provider.v2.cache.Obfuscate Javaユーティリティを使用して、このユーザー名とパスワードを、JAWC APIに必要な書式の不明瞭化された文字列に変換します。デフォルトのOracle Application Serverインストールでは、通常、無効化ポートのユーザー名はinvalidatorで、パスワードはアプリケーション・サーバー管理者のパスワードと同じです。たとえば、無効化ポートのユーザー名にinvalidatorを、パスワードにwelcomeを指定して、Oracle Application ServerをD:\as904にインストールするとします。次のコマンドを実行します。

注意:

次に示すコマンドは、PDK-Javaのインストレーション・ガイドで指示されているように、pdkjava.jarおよびjawc.jarがORACLE_HOME/j2ee/home/shared-lib/oracle.jpdk/1.0に存在することを前提にしています。

スタンドアロンのOracle Containers for Java EEインストールを使用している場合は、Java実行可能ファイルへのパスを外部のJava 2 SDKインストールに置き換える必要があります。

D:\as904\jdk\bin\java -classpath D:\as904\j2ee\home\shared-lib\oracle.jpdk\1.0\pdkjava.jar
oracle.webdb.provider.v2.cache.Obfuscate invalidator:welcome

このコマンドが正常に実行されると、次に示すような16進文字列が出力されます。

0510198d5df8efd5779406342be2528aa0cccb179ea6b77baf49f019f5075a3a11

この情報を使用してJAWC構成ファイルcache.xmlを作成します。この構成ファイルは、1つ以上のOracle Web Cacheインスタンスとその無効化ポートを指定します。例:

<?xml version="1.0"?>
<webcache>
<invalidation
host="cache.mycompany.com"
port="4001"
authorization="0510198d5df8efd5779406342be2528aa0cccb179ea6b77baf49f019f5075a3a11"/>
</webcache>

JAWCではシステム・プロパティ・ファイルを使用して、この構成ファイルを検索します。このシステム・プロパティをOracle WebLogic Serverに設定するには、PDK-Javaがインストールされている特定のインスタンス(たとえば、MW_HOME/wlserver_10.3/.product.properties)について、.product.propertiesファイルに適切な1行を追加して、そのインスタンスを再起動します。

注意:

キャッシュ構成ファイルの場所はシステム・プロパティとして定義されるため、サーバー・インスタンスごとに定義できるキャッシュは1つのみです。各Oracle Web Cache構成の背後に、2つの異なるWebプロバイダ・インスタンスを指定することはできません。

7.2.9.4.3 XMLプロバイダ定義の更新

provider.xmlでタグの組合せを使用すると、ポートレット全体またはそのページの一部に対して自動無効化ベースのキャッシュをアクティブ化できます。自動無効化ベースのキャッシュをオンにするには、それを、次に示すように各ページまたはレンダラのレベルで宣言して、無効化ベースのキャッシュがすべてのページに対してアクティブ化されていることを示す必要があります。

<useInvalidationCaching>true</useInvalidationCaching>

ポートレットで(編集モードまたはデフォルト編集モードでの)パーソナライズをサポートしている場合は、レンダラに対しても<autoInvalidate>true</autoInvalidate>を宣言できます。編集モードで「OK」または「適用」をクリックすると、この宣言によって、キャッシュされたポートレット・コンテンツがすべて無効化されます。したがって、パーソナライズされた設定に基づいて、新しいマークアップが生成されます。

ページをキャッシュに保持する最大時間は、次の時間についての最小時間となります。

- 「グローバル設定」ページの「キャッシュ」タブに定義されているOracle Portalの有効期間の最大値

- Oracle Portalで有効期間の最大値が指定されていない場合は、Webプロバイダのデフォルト(24時間)

- <pageExpires>タグがある場合はその時間(分)。

provider.xmlの次の抜粋部分では、このポートレットは最大5分間キャッシュされ、パーソナライズ時には自動的に無効化されるように指定されています。

<renderer class="oracle.portal.provider.v2.render.RenderManager">
<contentType>text/html</contentType>
<renderContainer>true</renderContainer>
<autoRedirect>true</autoRedirect>
<autoInvalidate>true</autoInvalidate>
<showPage class="oracle.portal.provider.v2.render.http.ResourceRenderer">
<resourcePath>/htdocs/invalidation/invalidation1.jsp</resourcePath>
<useInvalidationCaching>true</useInvalidationCaching>
<pageExpires>5</pageExpires>
</showPage>
<editPage class="oracle.portal.sample.v2.devguide.invalidation.
InvalidationEditRenderer"/></renderer>

注意:

pageExpiresタグは、通常の有効期限ベースのキャッシュでも使用します。これら2つの形式のキャッシュは、相互に排他的です。無効化ベースのキャッシュは、Webプロバイダと同じ場所にあるOracle Web Cacheインスタンスで発生します。有効期限ベースのキャッシュを使用して格納されたページは、Oracle Portalの中間層にキャッシュされます。

provider.xmlの構文の詳細は、OTNにあるプロバイダのJavadocを参照してください。

http://www.oracle.com/technology/products/ias/portal/html/javadoc/xml_tag_reference_v2.html

7.2.9.4.4 手動によるキャッシュの無効化

リクエストの処理、またはなんらかの情報の更新が行われたときに、ポートレットのキャッシュされたバージョンを無効化する必要が生じる場合があります。このような場合は、手動でキャッシュを無効化できます。

PDK-Javaに付属する無効化ベースのキャッシュのポートレット・サンプルには、コンテンツがキャッシュされた時刻、および無効化リクエストをトリガーするためのリンクを表示する単一のポートレットが含まれています。Webプロバイダに対するページ・リクエストがキャッシュを介して初めて行われたときは、そのレスポンスがキャッシュされます。ポートレットのコンテンツに対する後続のリクエストは、Oracle Web Cacheからコンテンツを戻すことによって実行されます。ポートレット下部にあるリンクをクリックすると、キャッシュからポートレットを削除する無効化リクエストがプロバイダで生成されます。ポートレットに対する次のリクエストはプロバイダに転送され、プロバイダは現在の時刻で新しいポートレットを生成します。

Oracle Web Cacheに対する無効化コールを実行するには、最初に、ServletInvalidationContextオブジェクトへのハンドルを用意する必要があります。このハンドルは、ServletInvalidationContextFactoryクラスのstatic getServletInvalidationContext()メソッドをコールすると取得できます。

ハンドルを取得した後は、キャッシュ・キーを指定する必要があります。キャッシュ・キーでは、無効化する対象が、特定のポートレット・インスタンスか、あるポートレットのすべてのインスタンスか、またはあるプロバイダが管理するすべてのポートレットかを指定する必要があります。このタスクを実行するには、ServletInvalidationContextクラスのメソッド、またはそのスーパー・クラスInvalidationContextのメソッドを使用します。ここでは、特定のユーザー(ユーザー・レベル)についてポートレットをキャッシュするかどうかを指定できます。キャッシュ・キーにユーザーが指定されていない場合、キャッシュされたコンテンツはすべてのユーザーに戻されます。これは、システム・レベルのキャッシュを使用していることを意味します。

次の例は、ポートレット・インスタンスを無効化し、setFullProviderPath()およびsetPortletReference()メソッドをコールします。キャッシュ・キーが設定されている場合は、InvalidationContextオブジェクトのinvalidate()メソッドをコールします。このメソッドは、無効化メッセージをOracle Web Cacheに送信します。

ServletInvalidationContext inv =
ServletInvalidationContextFactory.getServletInvalidationContext();
inv.setFullProviderPath
((ServletPortletRenderRequest)pReq);
inv.setPortletReference
(pReq.getPortletReference());
int num = inv.invalidate();

詳細は、Web Cacheのサンプル・プロバイダを参照してください。

7.2.9.5 有効化ベースのキャッシュの追加

有効化ベースのキャッシュの追加は多少複雑ですが、プロバイダに対するどのリクエストがキャッシュ・ヒットであるかを厳密に制御できます。ここでは、ポートレット内のデータが変更された場合のみキャッシュを更新する例を説明します。このアルゴリズムを実装するには、prepareResponseメソッドをオーバーライドする必要があります。BaseManagedRenderer.prepareResponseメソッドの署名は次のとおりです。

public boolean prepareResponse(PortletRenderRequest pr)
throws PortletException,
PortletNotFoundException

使用しているバージョンのprepareResponse()で、次の処理を実行する必要があります。

- キャッシュされたバージョン識別子を取得します。この識別子は、HttpPortletRendererUtil.getCachedVersion()メソッドをコールすることで、PPEによってレンダリング・リクエストに設定されます。

public static java.lang.String getCachedVersion
(PortletRenderRequest request)

- 以前にキャッシュされたバージョンが有効であることをポートレットが検出した場合は、HttpPortletRendererUtil.useCachedVersion()メソッドをコールして適切なヘッダーを設定する必要があります。また、RenderManagerに対しては、ポートレット本体をレンダリングするためにrenderBody()をコールする必要がないことが指示されます。

public static void useCachedVersion(PortletRenderRequest request)

これ以外の場合は、HttpPortletRendererUtil.setCachedVersion()を使用して、新しいバージョンのポートレットを生成し、このポートレットがキャッシュされます。また、PPEに対しては、renderBody()メソッドをコールして、ポートレットのコンテンツを再生成する必要があることが指示されます。

public static void setCachedVersion(PortletRenderRequest request,
java.lang.String version,
int level)
throws java.lang.IllegalArgumentException

有効化ベースのキャッシュの場合、provider.xmlを更新する必要はありません。ポートレットを表示するには、ページをリフレッシュするか、ポートレットをページに追加してコンテンツを更新します。コンテンツが変更されている場合、ポートレットは新しいコンテンツを表示します。コンテンツが変更されていない場合は、キャッシュされたバージョンのポートレットが表示されます。

7.2.10 ポートレットのモバイル機器用拡張

この項では、モバイル機器のPDK-Javaポートレットを拡張する方法について説明します。この項に進む前に、モバイル対応型のポートレットの構築ガイドライン(6.1.4項「モバイル・ポートレットのガイドライン」)、PDK-Javaを使用したポートレットの構築方法(7.2項「PDK-Javaポートレットの拡張」)について確認しておく必要があります。

モバイル機器のポートレットを正しく構築する手順は、次のとおりです。

1. ポートレットの表示リクエストに応じてOracleAS Wireless XMLを生成するJSPを作成します。ポートレットのJSPは、組込みレンダラであるoracle.portal.provider.v2.render.http.ResourceRendererによって管理および制御されます。
このレンダラを使用して、表示モードごとに個別のリソース(JSP)を定義することや、表示モードごとにコールするJSPを定義することが可能です。このため、表示モードを処理するためのJSPを、リクエストされるコンテンツがHTMLかOracleAS Wireless XMLかに応じて複数個定義できます。たとえば、この機能を使用して、宝くじポートレットのモバイル機器へのレンダリングを別のJSPに行わせることができます。このサンプルでは、mlotto.jspがモバイル・レンダリングを生成します。

contentType宣言は、ソース・コードの先頭行にあります。JSPレスポンスのコンテンツ・タイプは、text/vnd.oracle.mobilexmlに設定されています。これは、OracleAS Wireless XMLのMIMEタイプ名です。すべてのモバイル・レスポンスが正常に動作するには、そのコンテンツ・タイプをこの値に設定する必要があります。

<%@ page session="false" contentType="text/vnd.oracle.mobilexml" %>
<%@ page import="oracle.portal.sample.v2.devguide.lottery.LottoPicker" %>
<% LottoPicker picker = new LottoPicker();
picker.setIdentity(request.getRemoteAddr() ); %>
<SimpleText>
<SimpleTextItem />
<SimpleTextItem>Your numbers:</SimpleTextItem>
<SimpleTextItem />
<SimpleTextItem HALIGN="CENTER" >
<%
int [] picks = picker.getPicks();
for (int i = 0; i < picks.length; i++) {
out.print(picks[i] + " ");
}
out.println("");
%>
</SimpleTextItem>
</SimpleText>

2. ポートレットがOracleAS Wireless XMLレスポンスを生成できるように、provider.xmlを変更してポートレット定義にacceptContentTypeタグを追加します。各acceptContentTypeタグは、ポートレットがレンダリング可能な個別のコンテンツ・タイプを定義します。この値は、コンテンツのMIMEタイプです。この場合、宝くじポートレットは、HTML (text/html)およびOracleAS Wireless XML (text/vnd.oracle.mobilexml)を生成可能であることを宣言します。

<acceptContentType>text/html</acceptContentType>
<acceptContentType>text/vnd.oracle.mobilexml</acceptContentType>

provider.xmlの構文の詳細は、OTNにあるプロバイダのJavadocを参照してください。

http://www.oracle.com/technology/products/ias/portal/html/javadoc/xml_tag_reference_v2.html

3. provider.xmlで表示モードに対するJSPレンダラのマッピングを宣言します。
コンテンツ・タイプ別に関連表示モードのレンダリング・ハンドラを定義する必要があります。1つのshowPage宣言では、HTMLレスポンスをレンダリングするJSPを識別します。別の宣言では、OracleAS Wireless XMLレスポンスをレンダリングするJSPを識別します。ここではクラス属性が必要ですが、より簡単な場合は、クラスはデフォルトのままでかまいません。showPage宣言内の次のようなresourcePathおよびcontentTypeタグを使用して、特定のJSPと特定のコンテンツ・タイプの関連付けを表現します。

- resourcePathは、このモードをレンダリングするためのJSPを定義します。

- contentTypeは、このJSPのレスポンス・タイプを定義します。

ResourceRendererは、宝くじポートレットの表示リクエストを受信すると、HTMLレスポンスをレンダリングする場合はlotto.jspを起動し、OracleAS Wireless XMLをレンダリングする場合はmlotto.jspを起動します。次のコードは、provider.xmlでこの関係を表現する方法を示します。

<renderer class="oracle.portal.provider.v2.render.RenderManager">
<contentType>text/html</contentType>
<renderContainer>true</renderContainer>
<showPage
class="oracle.portal.provider.v2.render.http.ResourceRenderer">
<resourcePath>/htdocs/lottery/lotto.jsp</resourcePath>
<contentType>text/html</contentType>
</showPage>
<showPage
class="oracle.portal.provider.v2.render.http.ResourceRenderer">
<resourcePath>/htdocs/lottery/mlotto.jsp</resourcePath>
<contentType>text/vnd.oracle.mobilexml</contentType>
</showPage>
...
</renderer>

注意:

ResourceRenderer(および任意のポートレット)は、リクエストのAcceptヘッダーによって受信したリクエストのタイプを判定します。Acceptヘッダーは、特定のリクエストについて受信可能なレスポンス・タイプを定義する標準のHTTPヘッダーです。複数のコンテンツ・タイプを受信可能である場合は、これは複数の値からなるリストになります。複数の値がある場合、これらは優先順位の高い値から低い順に並べられます。Oracle Portalは、Acceptヘッダーでポートレットに渡される値を制御します。HTMLリクエストの場合、Acceptヘッダーは次のようになります。

text/html, text/xml, text/vnd.oracle.mobilexml

これらの値は、Oracle PortalはHTMLレスポンスを優先するがXMLおよびOracleAS Wireless XMLも受信することを示します。

モバイル・リクエストの場合、Acceptヘッダーは次のようになります。

text/vnd.oracle.mobilexml, text/xml

これらの値は、Oracle PortalはOracleAS Wireless XMLを優先するが、OracleAS Wireless XMLに変換されるスタイルシート参照が含まれる一般的なXMLも受信することを示します。

ResourceRendererは、Acceptリストを優先順位に従って処理することにより、リクエストされたコンテンツ・タイプを特定のリソース・レンダラにマップします。受信可能なレスポンス・タイプと登録されているレンダラのうち関連付けられているものが見つかると、リクエストをリソースに送信します。たとえば、HTMLリクエストの場合、ResourceRendererにより、最初のエントリであるtext/htmlが、text/htmlハンドラとしてlotto.jspを定義する宣言にマッチングされます。同様に、モバイル・リクエストを受信した場合は、ResourceRendererにより、最初のエントリであるtext/vnd.oracle.mobilexmlが、text/vnd.oracle.mobilexmlハンドラとしてmlotto.jspを定義する宣言にマッチングされます。

4. 短いタイトルを宣言します。短いタイトルは、ポートレット名の短い書式であり、表示領域が制限されているときに使用されます。特に、Oracle Portalは、モバイル・リクエストに応じて生成されたページ・メニューでポートレットをメニュー・アイテムとしてレンダリングするときに、短いタイトルを使用します。ポートレットによって短いタイトルが登録された場合、Oracle Portalはこれをメニュー・アイテムのラベルとして使用します。それ以外の場合は、ポートレットの標準タイトルを使用します。短いタイトルを宣言するには、provider.xmlのポートレットのメタデータ・セクションにshortTitleタグを含めます。

<portlet class="oracle.portal.provider.v2.DefaultPortletDefinition">
<id>2</id>
<name>Lottery</name>
<title>Lottery Portlet</title>
<shortTitle>Lottery</shortTitle>
...
</portlet>

5. 短いタイトルのパーソナライズをサポートします。ポートレットの短いタイトルは、ページ上のポートレット・インスタンスを参照するメニュー・アイテムのラベルとしてユーザーに表示されるため、すべてのポートレットでユーザーが短いタイトルをパーソナライズできるようにすることをお薦めします。PDK-Javaには、短いタイトルと標準タイトルの両方を管理する基本データ・クラスが用意されています。

oracle.portal.provider.v2.personalize.NameValuePersonalizationObject

NameValuePersonalizationObjectは、標準タイトルと短いタイトルの両方を管理します。これには、値を取得および設定するためのメソッドが含まれます。パーソナライズ・コードは、フォーム表示とフォーム送信という2つの部分に分割されます。このロジックは、最初に現在のデータ・パーソナライズ・オブジェクトを取得します。次に、これがフォーム送信であるかどうかを確認します。フォーム送信である場合、データ・パーソナライズ・オブジェクトの値を更新し、これらの値をリポジトリに書き戻し、制御を戻します。その後、PDK-Javaは、このフォームにリダイレクトしますが、その際、これが新しい値を使用してフォームを再表示するフォーム送信であることを示すパラメータは使用しません。この場合、JSPは、現在のパーソナライズ値が含まれるパーソナライズ・ページを使用して応答します。

ポートレットではこのクラスまたはサブクラスを使用してこの基本サポートを継承するようにすることをお薦めします。宝くじの例でサポートされているパーソナライズは、これら2つのタイトルのみです。このため、custom.jspでNameValuePersonalizationObjectクラスを直接使用しています。

<%@ page session="false" import="oracle.portal.provider.v2.*" %>
<%@ page import="oracle.portal.provider.v2.http.*" %>
<%@ page import="oracle.portal.provider.v2.render.*" %>
<%@ page
import="oracle.portal.provider.v2.personalize.NameValuePersonalizationObject"
%>
<%-- This page both displays the personalization form and processes it.
We display the form if there isn't a submitted title parameter,
else we apply the changes --%>
<%
PortletRenderRequest portletRequest = (PortletRenderRequest)
request.getAttribute(HttpCommonConstants.PORTLET_RENDER_REQUEST);
String title = request.getParameter("lotto_title");
String sTitle = request.getParameter("lotto_short_title");
String actionParam =
PortletRendererUtil.getEditFormParameter(portletRequest);
String action = request.getParameter(actionParam);
NameValuePersonalizationObject data = (NameValuePersonalizationObject)
PortletRendererUtil.getEditData(portletRequest);
// Cancel automatically redirects to the page
//   -- so will only receive 'OK' or 'APPLY'
if (action != null) {
data.setPortletTitle(title);
data.setPortletShortTitle(sTitle);
PortletRendererUtil.submitEditData(portletRequest, data);
return;
}
// otherwise just render the form
title = data.getPortletTitle();
sTitle = data.getPortletShortTitle();
%>
<TABLE BORDER="0">
<TR>
<TD WIDTH="20%">
<P ALIGN="RIGHT">Title:
</TD>
<TD WIDTH="80%">
<INPUT TYPE="TEXT" NAME="lotto_title"
VALUE="<%= title %>" SIZE="20">
</TD>
</TR>
<TR>
<TD WIDTH="20%">
<P ALIGN="RIGHT">Short Title:
</TD>
<TD WIDTH="80%">
<INPUT TYPE="TEXT" NAME="lotto_short_title" VALUE="<%= sTitle %>"
SIZE="20" MAXLENGTH="20">
</TD>
</TR>
</TABLE>

6. パーソナライズされた短いタイトルのレンダリングをサポートします。短いタイトルのパーソナライズを追加した場合は以後、モバイル・ページのレスポンスではポートレット側で自分自身をメニュー・アイテムとしてレンダリングする必要があります。モバイル機器では表示される画面が小さいため、ポートレットは同時にレンダリングされることはありません。ユーザーには、特定のページで、ポートレットへのリンクのメニューが表示されます。ユーザーは、このメニューから各ポートレットにナビゲートしてコンテンツを表示します。このモデルをより効率的にサポートするために、Oracle Portalにはリンク・モードが用意されています。このモードでは、ポートレットがそれ自体に対するリンク参照を生成します。
HTMLリクエストの場合、リンク・モードではアンカー・タグhrefが生成されます。モバイル・リクエストの場合、リンク・モードではsimpleHrefタグが生成されます。現在、Oracle Portalは、モバイル・ページのレスポンスを組み立てるときにリンク・モードのリクエストのみを送信します。このため、リンク・モードについては、text/vnd.oracle.mobilexmlコンテンツ・タイプのレンダリングをサポートするのみでよいのです。ポートレットでHTMLレンダリングも行う場合は、HTMLリンク・モードもサポートすることをお薦めします。

宝くじポートレットの例では、次のように個々のJSPで各リンク・レンダリングを実装しています。

- milotto.jspには、text/vnd.oracle.mobilexmlリンク・レスポンスを生成するコードが含まれています。

- anchorlotto.jspには、text/htmlリンク・レスポンスを生成するコードが含まれています。

それぞれのコードはほぼ同じです。リンク・モードをサポートする目的は、パーソナライズされた短いタイトルをレンダリングすることにあるため、コードはリポジトリから最初に短いタイトルを取得します。次に、リクエストされたマークアップに適したリンク・タグを生成します。取得された短いタイトルは、リンクのラベルとしてレンダリングされます。Oracle Portalは、ページ上のポートレットの特定の使用方法を参照するURLを作成する必要があるため、リンクで使用されるURLを作成し、これをポートレットに渡し、ポートレットは、このURLを使用してリンクを作成します。このリンクのURLは、リクエストのPageURLパラメータから取得されます。milotto.jspのコードは、次のとおりです。

<%@ page session="false" contentType="text/vnd.oracle.mobilexml" %>
<%@ page import="oracle.portal.provider.v2.http.HttpCommonConstants" %>
<%@ page import="oracle.portal.provider.v2.render.*" %>
<%@ page
import="oracle.portal.provider.v2.personalize.NameValuePersonalizationObject"
%>
<%@ page import="oracle.portal.utils.xml.v2.XMLUtil" %>
<%
PortletRenderRequest portletRequest = (PortletRenderRequest)
request.getAttribute(HttpCommonConstants.PORTLET_RENDER_REQUEST);
NameValuePersonalizationObject data = (NameValuePersonalizationObject)
PortletRendererUtil.getEditData(portletRequest);
String title = data.getPortletShortTitle();
// if short title is empty then use the title
if (title == null || title.length() == 0)
title = data.getPortletTitle();
%>
<SimpleHref target="<%= XMLUtil.escapeXMLAttribute(
portletRequest.getRenderContext().getPageURL()) %>">
<%= XMLUtil.escapeXMLText(title) %>
</SimpleHref>

注意:

URLおよび短いタイトル・ラベルとして出力されるテキストは、特別なXMLエスケープ・ユーティリティを介して渡されます。text/vnd.oracle.mobilexmlはXMLコンテンツ・タイプであるため、生成されるレスポンスは、特定の文字のエスケープを必要とするXMLルールに準拠する必要があります。静的テキストを生成する場合を除き、テキストはすべて、提供されている2つのユーティリティを使用してエスケープすることをお薦めします。2つのユーティリティ・メソッドを使用するのは、テキストがタグ属性値とタグ値のどちらであるかによって、エスケープを必要とする文字セットが異なるためです。

7. リンク・モードのサポートを宣言します。リンク・モードを実装した後は、provider.xmlを更新してリンク・モードの存在を示す必要があります。リンク・モードを宣言するには、次のようなコードをprovider.xmlに追加します。

<portlet class="oracle.portal.provider.v2.DefaultPortletDefinition">
<id>2</id>
<name>Lottery</name>
...
<showLink>true</showLink>
<showEdit>true</showEdit>
<showEditToPublic>false</showEditToPublic>
...
</portlet>

8. JSPをリンク・モードにバインドします。ポートレットは、表示モードとJSPレンダラ間のマッピングを宣言する必要があります。リンク・モードの構文は、表示モードの構文と同じです。

<portlet class="oracle.portal.provider.v2.DefaultPortletDefinition">
<id>2</id>
<name>Lottery</name>
...
<renderer class="oracle.portal.provider.v2.render.RenderManager">
<contentType>text/html</contentType>
<renderContainer>true</renderContainer>
<linkPage
class="oracle.portal.provider.v2.render.http.ResourceRenderer" >
<resourcePath>/htdocs/lottery/anchorlotto.jsp</resourcePath>
<contentType>text/html</contentType>
</linkPage>
<linkPage
class="oracle.portal.provider.v2.render.http.ResourceRenderer" >
<resourcePath>/htdocs/lottery/milotto.jsp</resourcePath>
<contentType>text/vnd.oracle.mobilexml</contentType>
</linkPage>
...
</renderer>
...
</portlet>

7.2.10.1 構成、ユーザーおよびデバイス情報へのアクセス

モバイル機器をより効率的にサポートするために、Oracle Portalは、レスポンスを生成するための追加情報をポートレットに渡します。この情報は、次のように3つの大きなカテゴリに分けられます。

- 7.2.10.1.1項「構成データ」

- 7.2.10.1.2項「ユーザー・データ」

- 7.2.10.1.3項「デバイス情報」

7.2.10.1.1 構成データ

Oracle Portalは、ポートレットによるパーソナライズのレンダリングまたはページの編集をリクエストするときにモバイル機能を有効化するかどうかを示すフラグを送信します。ポートレットは、この情報を使用して、必要に応じてモバイル固有の属性をパーソナライズ・ページで含めるか除外するかを指定します。

ポートレットは、PortletRenderRequestオブジェクトを使用してこの情報にアクセスします。

...
if (portletRequest.getPortalConfig().isMobileEnabled()) {
...
}
...

7.2.10.1.2 ユーザー・データ

OracleAS Wirelessは、レスポンス用としてOracle Portalに転送するリクエストにユーザーの位置を追加します。このユーザーの位置情報は、ユーザーの実際の位置(ユーザーのデバイスがこの機能をサポートしている場合)またはプロファイルされている位置によって決まります。ユーザーの位置は、ProviderUserオブジェクトによって公開されます。このオブジェクトには、PortletRenderRequestオブジェクトからアクセスできます。位置対応型のポートレットは、この情報を使用して生成対象のコンテンツを調整できます。

...
UserLocation location = portletRequest.getUser().getLocation();
if (location != null) {
...
}
...

7.2.10.1.3 デバイス情報

Oracle Portalはリクエストごとに、リクエスト側のデバイスに関する特性をポートレットに送信します。この情報は、モバイル・リクエストのみではなくすべてのポートレット・リクエストについて送信されます。この情報は、リクエストを行うデバイスのタイプ、そのレイアウト方向、デバイスが処理可能な最大レスポンス・サイズ、デバイスとの接続がセキュアかどうかを分類するものです。表7-3は、使用可能なデバイスのタイプを示します。

表7-3 デバイスのクラス

クラス

説明

voice

音声アクセス番号をコールする通常の電話など、音声専用デバイスを示します。

micromessenger

SMS電話またはポケットベルなど、テキスト・メッセージ・デバイスを示します。

messenger

電子メールなどの一般的なメッセージのデバイスを示します。

microbrowser

WAP電話など、マークアップ・ブラウザをサポートする小型サイズの表示デバイスを示します。

pdabrowser

PalmまたはPocketPCなど、中型サイズの表示デバイスを示します。

pcbrowser

デスクトップ・ブラウザを使用する大型サイズの表示デバイスを示します。

ポートレットは、リクエストを行うデバイスのタイプに基づいてレスポンスのコンテンツのレイアウトまたは表現を変更できます。たとえば、ポートレットは、幅の広い表を、画面の小さなデバイス用に列グループがまとめてリンクされた一連の画面に分割できます。

最大レスポンス・サイズは、ポートレットが戻すデータ量を制限するためのヒントとなります。このサイズはバイト単位で示されます。最大レスポンス・サイズが0である場合、このサイズが不明であることを示します。

ポートレットは、PortletRenderRequestオブジェクトを使用してこの情報にアクセスします。

...
DeviceInfo deviceInfo = portletRequest.getDeviceInfo();
switch (deviceInfo.getDeviceClass()) {
case DeviceInfo.DeviceClass.MICROBROWSER:
renderMicroBrowser(portletRequest);
break;
default:
renderDefault(portletRequest);
break;
}
...

7.2.10.2 モバイル・ポートレットのナビゲーションの変更

7.2.3.3.4項「ポートレット内でのナビゲーションの実装」のほとんどの情報は、モバイル・ポートレットの開発にも関連しています。ただし、記載されている一部のユーティリティは、HTMLをレンダリングするポートレットに固有のものです。SimpleResultをレンダリングするポートレットについては、表7-4に示されているものと同等のユーティリティが用意されています。

表7-4 同等のHTMLおよびSimpleResultユーティリティ

HTMLユーティリティ

SimpleResultユーティリティ

UrlUtils.constructHTMLLink

UrlUtils.constructMXMLLink

UrlUtils.htmlFormHiddenFields

UrlUtils.mxmlFormHiddenFields

UrlUtils.emitHiddenField

UrlUtils.emitMxmlHiddenField

次の例は、シソーラス・サンプルをモバイル対応型のポートレットに対応させる方法を示します。モバイル・ポートレットとしてデプロイする場合、JSPのどちらのセット(HTMLとSimpleResult)もデプロイされます。これらのJSPは、そのHTMLの対応ユーティリティを補完するものであり、これらを置き換えるものではありません。また、これらのJSPはSimpleResultをそのマークアップとして使用します。ナビゲーション・パラメータの値は、次のデスクトップJSPではなく次のモバイルJSPを指し示すように変更されています。

mThesaurusForm.jsp:

<%
PortletRenderRequest pRequest = (PortletRenderRequest)
request.getAttribute(HttpCommonConstants.PORTLET_RENDER_REQUEST);
String paramNameQ = "q";
String qualParamNameQ =
HttpPortletRendererUtil.portletParameter(pRequest, paramNameQ);
%>
<!-- Output the MXML content -->
<SimpleText>
<SimpleTitle>Thesaurus</SimpleTitle>
<SimpleTextItem>Enter the word you wish to search for:</SimpleTextItem>
<SimpleForm
method="POST"
target="<%= UrlUtils.htmlFormActionLink(pRequest,UrlUtils.PAGE_LINK) %>">
<%=UrlUtils.mxmlFormHiddenFields
(pRequest.getRenderContext().getPageURL()) %>
<%= UrlUtils.emitMxmlHiddenField(
HttpPortletRendererUtil.portletParameter(request, "next_page"),
"htdocs/path/mThesaurusLink.jsp" ) %>
<SimpleFormItem type="text" size="20" name="<%= qualParamNameQ %>"
value="" />
</SimpleForm>
</SimpleText>

mThesaurusLink.jsp:

<%
PortletRenderRequest pRequest = (PortletRenderRequest)
request.getAttribute(HttpCommonConstants.PORTLET_RENDER_REQUEST);
String paramNameQ = "q";
String paramNameNextPage = "next_page";
String qualParamNameQ =
HttpPortletRendererUtil.portletParameter(pRequest, paramNameQ);
String qualParamNameNextPage =
HttpPortletRendererUtil.portletParameter(pRequest, paramNameNextPage);
String paramValueQ = pRequest.getQualifiedParameter(paramNameQ);
%>
<!-- Output the MXML content -->
<SimpleText>
<SimpleTitle>Words similar to <%= paramValueQ %></SimpleTitle>
<%
Thesaurus t = new Thesaurus();
String[] relatedWords = t.getRelatedWords(paramValueQ);
NameValue[] linkParams = new NameValue[2];
linkParams[0] = new NameValue(
qualParamNameNextPage, "htdocs/path/mThesaurusLink.jsp");
for (int i=0; i<relatedWords.length; i++)
{
linkParams[1] = new NameValue(
qualParamNameQ, relatedWords[i]);
%>
<SimpleTextItem>
<%= relatedWords[i] %>
<SimpleBreak/>
<%= UrlUtils.constructMXMLLink(
pRequest,
pRequest.getRenderContext().getPageURL(),
"(words related to " + relatedWords[i] + ")",
"",
linkParams,
true,
true)%>
</SimpleTextItem>
<%
}
%>
<SimpleTextItem>
<SimpleHref target="<%=XMLUtil.escapeXMLAttribute(
pRequest.getRenderContext().getPageURL())%>">
Reset Portlet
</SimpleHref>
</SimpleTextItem>
</SimpleText>

7.2.11 多言語ポートレットの作成

この項では、異なる言語でレンダリングできるJavaポートレットの作成方法を説明します。ポートレットで使用する言語は、そのポートレットを表示しているポータルの言語設定によって決まります。

この項を終了すると、必要な数の言語をサポートするポートレットを作成できるようになります。また、既存のポートレットを多言語をサポートするように変換することもできます。ポートレットが複数の言語をサポートするように作成されていると、新しい言語をプラグ・インするのが簡単になります。多言語のJavaポートレットの基本モデルは、標準のJava国際化モデルと似ています。Javaの国際化に関する知識がある場合は、容易にこのプロセスを習得できます。

7.2.11.1 前提

この項のタスクを実行するには、次の前提が必要です。

1. 6.5項「Oracle JDeveloperを使用したOracle PDK-Javaポートレットの構築」を読んで理解していること。

2. ウィザードで作成したポートレットがページに正常に追加されていること。

7.2.11.2 ポートレットの国際化

これは、次の2つのタスクから構成されます。

- 7.2.11.2.1項「ポートレット・コンテンツの翻訳の提供」

- 7.2.11.2.2項「ポートレット属性の翻訳の提供」

7.2.11.2.1 ポートレット・コンテンツの翻訳の提供

6.5項「Oracle JDeveloperを使用したOracle PDK-Javaポートレットの構築」では、Javaポートレット・ウィザードを使用してポートレットを作成しました。ウィザードで作成した基本的なメッセージは1つの言語でのみ利用でき、表示するテキストはポートレットのレンダラ・クラスにハードコーディングされています。ポートレットを複数の言語で利用できるようにするには、このような言語依存要素を、リソース・バンドルと呼ばれる独自のクラスに格納する必要があります。

リソース・バンドルの作成

リソース・バンドルは、ポートレットで利用する言語ごとに必要です。また、ポータルで選択された言語設定に対応するリソース・バンドルがない場合に使用するリソース・バンドルも作成する必要があります。次のタスクを実行します。

- デフォルト・リソース・バンドルの作成
次の手順を実行します。

1. Oracle JDeveloperで、java.util.packageのListResourceBundleを拡張するMyProviderBundleというJavaクラスを作成します。このクラスには、オブジェクトの多次元配列が含まれており、この配列には、JSPの表示ページにある各言語依存要素を表すキー値のペアが保持されます。この実装は次のコードで示されます。

package mypackage2;
import java.util.ListResourceBundle;
public class MyProviderBundle extends ListResourceBundle
{
public static String HELLO_MSG = "MyPortletHelloMessage";
public static String INFO_MSG = "MyPortletInfoMessage";
public Object[][] getContents()
{
return contents;
}
static private final Object[][] contents =
{
{HELLO_MSG, "Hello"},
{INFO_MSG, "This is the show page of the portlet and it is being generated in the default language!"}
};
}

2. MyProviderBundleを保存します。

- サポートする他の言語のためのリソース・バンドルの作成
ここで、ポートレットでサポートする各言語について、リソース・バンドル・クラスを作成する必要があります。それぞれのクラスの名前は、デフォルトのリソース・バンドル・クラスと同じである必要がありますが、末尾に言語コードを付加します。たとえば、フランス語をサポートする場合は、MyProviderBundle_frというJavaクラスを作成します。言語コードfrは、言語設定がフランス語に設定されている場合にポータルのロケール・オブジェクトによって使用されるコードと同じです。

ロケールの詳細は、Javadocでjava.util.Localeを参照してください。次の「Portlet Development」ページの「Java Doc API」をクリックして、OTNのJavadocを参照してください。

http://www.oracle.com/technology/products/ias/portal/portlet_development_10g1014.html

Oracle Portalで言語設定を変更する場合は、現行のロケール・オブジェクトの値、つまりロケール・オブジェクトの言語コードを変更します。言語コードは、言語の呼称に関するISO:639コードに準拠しています。サポートされている他の言語のリソース・バンドルを作成する手順は、次のとおりです。

1. フランス語のリソース・バンドルを作成するには、前述したように、MyProviderBundle_frというJavaクラスを作成します。

2. デフォルトのリソース・バンドルをテンプレートとして使用し、英語文字列を対応するフランス語に置き換えます。例を次に示します。

package mypackage2;

import java.util.ListResourceBundle;
public class MyProviderBundle_fr extends
ListResourceBundle
{
public Object[][] getContents()
{
return contents;
}
static private final Object[][] contents =
{
{MyProviderBundle.HELLO_MSG, "Bonjour"},
{MyProviderBundle.INFO_MSG, "Cette page est le 'show mode' de la portlet
et est generee dans la langue par defaut."}
};
}

3. MyProviderBundle_frを保存します。

4. リソース・バンドルを作成する各言語について、ステップ1から3を繰り返します。その際、クラス名を適切な言語コードを持つ名前に変更し、メッセージ文字列を適切な言語の同等のメッセージに変更します。

レンダラの更新

ここで作成したリソース・バンドルを使用するには、JSPの表示ページを編集し、ハードコーディングされたメッセージを、実行時にポータルのロケール・オブジェクトと最も密接に対応するリソース・バンドルからメッセージを取り出す参照に置き換えます。レンダラを更新する手順は、次のとおりです。

1. 表示ページを表すJSPを開き、次のように変更します。

<%@page contentType="text/html; charset=windows-1252"
import="oracle.portal.provider.v2.render.PortletRenderRequest"
import="oracle.portal.provider.v2.http.HttpCommonConstants"
import="java.util.ResourceBundle"
%>

<%
PortletRenderRequest pReq = (PortletRenderRequest)
request.getAttribute(HttpCommonConstants.PORTLET_RENDER_REQUEST);

<!-- Get a resource bundle object for the current language. -->
ResourceBundle b = ResourceBundle.getBundle("mypackage2.MyProviderBundle",pReq.getLocale());
%>

<!--  Pull the message from the appropriate resource bundle. -->
<P> <%= b.getString(mypackage2.MyProviderBundle.HELLO_MSG) %>
<%= pReq.getUser().getName() %>.</P>
<P> <%= b.getString(mypackage2.MyProviderBundle.INFO_MSG) %></P>

2. JSPページを変更します。

これで、ポートレットをリフレッシュして変更を表示できます(図7-12)。

図7-12 英語のポートレット

フランス語のメッセージを表示するには、「言語の設定」ポートレットで言語を英語からフランス語に設定します(図7-13)。

図7-13 フランス語のポートレット

ポートレット内のテキストは変更されますが、ポートレット・タイトルはデフォルト言語の英語のままであることに注意してください。また、次の項で説明しているように、provider.xmlからリソース・バンドルを指し示すことによって、ポートレットで適切なポートレット属性(ポートレット名、ポートレット・タイトル、ポートレットの説明など)を設定できます。

7.2.11.2.2 ポートレット属性の翻訳の提供

プロバイダの定義ファイルprovider.xmlには、ポートレット名や説明などポートレットを記述する多数の属性が定義されています。これらの属性は、表示モードでポートレットのタイトル・バーなどで使用されるため、翻訳する必要があります。翻訳を提供する方法は2通りあり、いずれかを選択します。両方の方法について、次の項で概略を説明します。

- 方法1: プロバイダ・レベルでリソース・バンドルを使用

- 方法2: ポートレット・レベルでリソース・バンドルを作成

方法1: プロバイダ・レベルでリソース・バンドルを使用

リソース・バンドルでポートレット属性に関する翻訳を提供し、リソース・バンドルで使用したキーを指定すると、provider.xmlでこれらのリソース・バンドルを使用するように指定できます。この方法では、任意のキーを使用できるため、プロバイダの各種ポートレットで対応する各属性に対して異なるキーを使用することによって、プロバイダのすべてのポートレットが使用できるリソース・バンドルのセットを1つのみにできます。この項では、次のタスクを説明します。

- リソース・バンドルの更新
次の手順を実行します。

1. デフォルトのリソース・バンドルMyProviderBundle.javaを開きます。

2. ポートレット属性を表すリソース・バンドルに文字列を追加し、その文字列のテキストを追加します。

package mypackage2;

import java.util.ListResourceBundle;
public class MyProviderBundle extends ListResourceBundle
{
public static String HELLO_MSG = "MyPortletHelloMessage";
public static String INFO_MSG = "MyPortletInfoMessage";
public static String PORTLET_NAME = "FirstPortletName";
public static String PORTLET_TITLE = "FirstPortletTitle";
public static String PORTLET_SHORT_TITLE = "FirstPortletShortTitle";
public static String PORTLET_DESCRIPTION = "FirstPortletDescription";
public static String TIMEOUT_MESSAGE = "FirstPortletTimeoutMessage";

public Object[][] getContents()
{
return contents;
}
static private final Object[][] contents =
{
{HELLO_MSG, "Hi"},
{INFO_MSG, "This is the show page of the portlet and it is being generated
in the default language!"},
{PORTLET_NAME, "MyNLSPortlet"},
{PORTLET_TITLE, "My NLS Portlet"},
{PORTLET_SHORT_TITLE, "MyNLSPortlet"},
{PORTLET_DESCRIPTION, "My first ever NLS portlet, using my
MyPortletShowPage.jsp"},
{TIMEOUT_MESSAGE, "Timed out waiting for MyNLSPortlet"}
};
}

3. MyProviderBundle.javaを保存します。

4. MyProviderBundle_fr.javaを開きます。MyProviderBundleで宣言した文字列と一致するフランス語文字列を含むように変更します。

package mypackage2;

import java.util.ListResourceBundle;
public class MyProviderBundle_fr extends ListResourceBundle
{
public Object[][] getContents()
{
return contents;
}
static private final Object[][] contents =
{
{MyProviderBundle.HELLO_MSG, "Bonjour"},
{MyProviderBundle.INFO_MSG, "Cette page est le 'show mode' de la portlet
et est generee en francais!"},
{MyProviderBundle.PORTLET_NAME, "MaPremierePortlet"},
{MyProviderBundle.PORTLET_TITLE, "Ma Portlet Multi-Langue"},
{MyProviderBundle.PORTLET_SHORT_TITLE, "Ma NLS Portlet"},
{MyProviderBundle.PORTLET_DESCRIPTION, "Ma premiere portlet
multi-langue, utilisant mon renderer"},
{MyProviderBundle.TIMEOUT_MESSAGE, "Temps d'acces a la portlet
demandee expire"}
};
}

5. MyProviderBundle_fr.javaを保存します。

- provider.xmlの更新
次の手順を実行します。

1. XMLプロバイダ定義ファイルを開き、ハードコーディングしたポートレット属性値を使用するかわりにリソース・バンドルを指すように変更します。

<portlet class="oracle.portal.provider.v2.DefaultPortletDefinition">
<id>3</id>
<resource>mypackage2.MyProviderBundle</resource>
<nameKey>FirstPortletName</nameKey>
<titleKey>FirstPortletTitle</titleKey>
<ShortTitleKey>FirstPortletShortTitle</ShortTitleKey>
<descriptionKey>FirstPortletDescription</descriptionKey>
<timeout>10</timeout>
<timeoutMessageKey>FirstPortletTimeoutMessage</timeoutMessageKey>
<showEditToPublic>false</showEditToPublic>
<hasAbout>true</hasAbout>

provider.xmlの構文の詳細は、OTNにあるプロバイダのJavadocを参照してください。

http://www.oracle.com/technology/products/ias/portal/html/javadoc/xml_tag_reference_v2.html

方法2: ポートレット・レベルでリソース・バンドルを作成

PDK-Javaでは、ポートレット属性の翻訳を提供するために使用できるリソース・バンドル・キーのセットが定義されます。これらのキーを使用すると、「方法1: プロバイダ・レベルでリソース・バンドルを使用」で実行したようにprovider.xmlファイルでリソース・バンドル・キーを指定する必要がなくなります。ただし、プロバイダの各ポートレットに対して独立した一連のリソース・バンドルを提供する必要があります。これは、各ポートレットで使用するキーは同じである必要がありますが、その値は異なるためです。次のタスクを実行する必要があります。

- リソース・バンドルの更新
次の手順を実行します。

1. デフォルトのリソース・バンドルMyProviderBundle.javaを開きます。

2. 前述の項で実行した変更を削除し、oracle.portal.provider.v2.PortletConstantsをインポートします。これで、文字列のかわりに次の定数を参照できます。PortletConstantsを使用するときは、静的文字列を宣言する必要はありません。

{PortletConstants.NAME, "MyNLSPortlet"},
{PortletConstants.TITLE, "My NLS portlet"},
{PortletConstants.SHORTTITLE, "MyNLSPortlet"},
{PortletConstants.DESCRIPTION, "My first ever NLS portlet"},
{PortletConstants.TIMEOUTMSG, "Timed out waiting for MyNLSPortlet"}

3. MyProviderBundle.javaを保存します。

4. MyProviderBundle_fr.javaを開きます。前述の項で追加したポートレット属性を削除し、oracle.portal.provider.v2.PortletConstantsをインポートして、文字列のかわりに定数を参照します。

{PortletConstants.NAME, "MaPremierePortlet"},
{PortletConstants.TITLE, "Ma Portlet Multi-Langue"},
{PortletConstants.SHORTTITLE, "Ma NLS Portlet"},
{PortletConstants.DESCRIPTION, "Ma premiere portlet multi-langue,
utilisant mon renderer"},
{PortletConstants.TIMEOUTMSG, "Temps d'acces a la portlet demandee
expire"}

5. MyProviderBundle_fr.javaを保存します。

- provider.xmlの更新
次の手順を実行します。

1. provider.xmlで、「方法1: プロバイダ・レベルでリソース・バンドルを使用」で実行したように文字列ごとに1つのタグを使用するのではなく、1つのタグのみを使用する必要があります。ファイル内の翻訳された文字列をすべて削除します。たとえば、<nameKey>、<titleKey>、<ShortTitleKey>および<descriptionKey>などです。次に、ポートレットIDとタイムアウト値の間に次のタグを追加します。

<resource>mypackage2.MyProviderBundle</resource>

provider.xmlの構文の詳細は、OTNにあるプロバイダのJavadocを参照してください。

http://www.oracle.com/technology/products/ias/portal/html/javadoc/xml_tag_reference_v2.html

Java国際化の詳細は、Javaチュートリアルの「Internationalization trail」を参照してください。

7.2.11.3 ポートレットの表示

プロバイダを更新してOracle Containers for Java EEにデプロイした後、プロバイダおよびポートレットを含んだポータル・ページをリフレッシュします。リソース・バンドルが機能していることを確認するには、ページに「言語の設定」ポートレットを追加し、言語設定をフランス語に変更してみてください。デフォルトのリソース・バンドルは英語です。対応するリソース・バンドルのない他の言語を選択した場合は、ポートレットは英語で表示されることに注意してください。

7.3 Oracle JDeveloperを使用したStrutsポートレットの作成

この項では、Oracle Portalで使用するStrutsポートレットをOracle JDeveloperで作成するフレームワークについて説明します。Strutsタグ・ライブラリをOracle Portal Developer Kit(リリース9.0.4.0.2以上)からOracle JDeveloperに追加して既存のアプリケーションからStrutsポートレットを作成し、次にOracle PDK Javaポートレット・ウィザードを使用してJavaポートレットを作成する方法を説明します。この項では、次のタスクを説明します。

- 7.3.1項「Oracle PortalおよびApache Strutsのフレームワーク」

- 7.3.2項「Strutsポートレットの作成」

7.3.1 Oracle PortalおよびApache Strutsのフレームワーク

この項では、Apache StrutsをOracle Portalとともに使用する方法を説明します。Strutsは、Model-View-Controller (MVC)設計パターンの実装です。この項では、次のトピックについて説明します。

- 7.3.1.1項「Model-View-Controllerの概要」

- 7.3.1.2項「Apache Strutsの概要」

- 7.3.1.3項「Oracle PortalとStrutsの統合」

- 7.3.1.4項「サマリー」

7.3.1.1 Model-View-Controllerの概要

エンタープライズ・アプリケーションは、次のような複数の異なるタスクを実行します。

- データ・アクセス

- ビジネス・ロジックの実装

- ユーザー・インタフェースの表示

- ユーザーの相互作用

- アプリケーション(ページ)フロー

MVC (Model-View-Controller)アーキテクチャは、データ表示などのアクティビティはデータ・アクセスから分離する必要があるという前提に基づいて、これらのタスクを区分する方法を提供します。このアーキテクチャによって、データ・ソースをアプリケーションに簡単にプラグインでき、ユーザー・インタフェースをリライトする必要はありません。MVCでは、アプリケーションを論理的にモデル、ビューおよびコントローラの3つのレイヤーに区分できます。

モデル

モデルは、アプリケーション・データとビジネス・ロジック用のリポジトリです。モデルの目的の1つは、データベースからデータを取得し、データをデータベースに保持することです。また、ビューからデータにアクセス可能にするなどの方法でデータの公開を行い、ビューから入力されたデータの検証と消込みを行うためにビジネス・ロジック・レイヤーを実装します。アプリケーション・レベルでは、モデルは、ユーザー・インタフェースと表示されるビジネス・データの間で検証および抽象化のレイヤーとして機能します。データベース・サーバー自体は、モデルの永続的なレイヤーとして機能します。

ビュー

ビューは、JSPを使用して、モデルのデータをレンダリングします。ビューのコードには、ハードコーディングされたアプリケーションやナビゲーション・ロジックは含まれていませんが、ユーザー・ロールに基づいて条件付きデータを表示するなどのタスクを実行するロジックが含まれている場合があります。エンド・ユーザーが、ビューでレンダリングされたHTMLページ内で操作を実行すると、イベントがコントローラに送信されます。これによって、コントローラは次のステップを決定します。

コントローラ

コントローラはMVCパターンの重要な基軸です。ビューで実行されるすべてのユーザー操作は、コントローラを介して送信されます。コントローラは、ブラウザからのリクエストの内容に基づいて、次の操作を実行します。

コントローラを起動する方法はいくつかあります。たとえば、URL引数を使用して、リクエストを適切なコードにルーティングできます。MVCパターンでは、コントローラの機能を決定しますが、その動作は決定しません。

利点

MVCアーキテクチャによって、アプリケーションとその設計をモジュール単位で明確に表示できます。アプリケーション・ロジックの様々なコンポーネントとロールを区分することによって、開発者はアプリケーションを簡単で異なるコンポーネント(モデル、ビューおよびコントローラ)の集まりとして設計できます。このパターンは、保持や拡張が容易なアプリケーションの作成に役立ちます。たとえば、1つのビューを作成すると、同じビジネス・ロジックを使用して別のビューを簡単に作成できます。その使いやすさと再利用性のため、MVCパターンは、Webベースのアプリケーション開発で最も広く使用されているパターンです。

図7-14は、MVCパターンを従来のシン・クライアントのWebアプリケーションに適用する方法を示します。

図7-14 MVCパターン

7.3.1.2 Apache Strutsの概要

Apache Strutsフレームワーク(http://struts.apache.org)は、Webアプリケーション作成用の最も一般的なフレームワークの1つで、MVC設計パラダイムのJSPモデル2に基づくアーキテクチャを提供します。モデル2では、エンド・ユーザーのリクエストは、フローを制御し、JavaBeansまたはEJBなどのコンポーネントを使用してデータにアクセスして操作するサーブレットで管理されます。さらに、JSPを使用して、アプリケーションのコンテンツをWebブラウザにレンダリングします。このモデルは、JSPがブラウザ・リクエストとデータ・アクセスを管理するJSPモデル1とは異なります。

Strutsフレームワークは、コントローラ・コンポーネントとして独自のHTTPサーブレットを提供します。Strutsフレームワークは、アプリケーションのページ・フローが含まれるXML構成ファイルによって起動されます。Strutsはモデルを提供しませんが、開発者は、EJB、TopLink、JDBCなどのデータ・アクセス・メカニズムにStrutsを統合できます。ビュー・コンポーネントを作成するための最も一般的なテクノロジはJSPです。Strutsには、ビュー・コンポーネントを作成するための様々なタグ・ライブラリが用意されています。ただし、現在、これらのタグの一部は、Java標準タグ・ライブラリ(JSTL)に取って代わられており、これらも使用される可能性があります。

注意:

JSTLおよびJSFの詳細は、Apache Software FoundationのWebサイト(http://struts.apache.org/kickstart.html)でFAQを参照してください。

7.3.1.3 Oracle PortalとStrutsの統合

Oracle Portal Developer Kitには、パーソナライズやキャッシュなどOracle Portal APIの使用方法に関する多数の例やドキュメントが含まれています。ポートレットAPIでは、アプリケーション・ロジックとビジネス・ロジックを統合できません。一方、Strutsフレームワークを使用すると、MVCアーキテクチャを利用して、企業ポータル内でアプリケーションを作成および公開できます。

Oracle Strutsポートレット

Strutsフレームワークを使用したポートレットの作成、または既存のStrutsアプリケーションからポートレットの生成を行うには、すべてのコンポーネントをJ2EEコンテナにデプロイする必要があります。Oracle Portalのコンテキストでは、StrutsアプリケーションはPPEによってコールされ、スタンドアロンのStrutsアプリケーションのようにブラウザではコールされません。図7-15に示すように、ポートレットの表示コールが送信されると、ページ・エンジンはStrutsポートレット・レンダラにリクエストを送信し、Strutsポートレット・レンダラはそのリクエストをApache Strutsコントローラ・サーブレットに転送します。

図7-15 StrutsアプリケーションとOracle Portalの統合

次に示すコードは、プロバイダ定義ファイル(provider.xml)の一部です。

...
<renderContainer>true</renderContainer>
<renderCustomize>true</renderCustomize>
<autoRedirect>true</autoRedirect>
<contentType>text/html</contentType>
<showPage class="oracle.portal.provider.v2.render.http.StrutsRenderer">
<defaultAction>showCustomer.do</defaultAction>
</showPage>
</renderer>
...

provider.xmlの構文の詳細は、OTNにあるプロバイダのJavadocを参照してください。

http://www.oracle.com/technology/products/ias/portal/html/javadoc/xml_tag_reference_v2.html

showPageタグは、ポートレットの表示モードで実行されるビジネス・ロジックを定義します。StrutsポートレットのshowPageには、次の2つの重要なコンポーネントが含まれます。

1. レンダラ・クラス(oracle.portal.provider.v2.render.http.StrutsRenderer)。PPEからポートレット・リクエストを受信し、プロキシとして機能してリクエストをStrutsアクション・サーブレットに転送します。

2. defaultActionタグ。ポートレットが初めてコールされたときにデフォルトで使用するStrutsアクションを定義します。

PDK-Javaを使用すると、Strutsアプリケーションのビュー(Portalビュー)を容易に開発できます。このビューによって、ポータル・スタイルを使用するStrutsポートレットでは整合性のとれたルック・アンド・フィールが維持され、エンド・ユーザーはポータル内でアプリケーションを使用できます。

Strutsポートレットを作成するには、デフォルトのStruts JSPタグの拡張であるOracle Portal JSPタグを使用する必要があります。この開発プロセスは、スタンドアロンのStrutsアプリケーションを作成するプロセスに似ています。Strutsポートレットの作成方法は、7.3.2.1項「Strutsポートレットの作成」を参照してください。また、ポートレットとStrutsアプリケーションは同じサーブレット・コンテキスト内に存在する必要があるため、両方の要素を含む単一のWebアプリケーションを作成する必要があります。Oracle JDeveloperでこのようなWebアプリケーションを簡単に作成する方法は、次の7.3.2.1項「Strutsポートレットの作成」を参照してください。

7.3.1.4 サマリー

Apache Strutsは、MVC設計パラダイムの明確で簡単な実装を提供しているため、事実上、MVCベースのJ2EEアプリケーションを開発する際の標準になっています。このフレームワークによって、ポートレット開発者は、アプリケーションの様々なコンポーネントを区分し、Strutsコントローラを利用して既存のStrutsアプリケーションをOracle Portalに容易に公開できるため、既存のビジネス・ロジックをすべて変更する必要はありません。

注意:

Oracle Portal Developer Kitの詳細は、Portal Center(http://www.oracle.com/technology/products/ias/portal/pdk.html)を参照してください。

7.3.2 Strutsポートレットの作成

Oracle PDKには、Apache Strutsアプリケーションを統合するための新しい拡張機能が含まれています。この項では、既存のStrutsアプリケーションからポートレットを作成する方法を説明します。また、その作成手順に従うと、Model-View-Controllerパラダイムを使用するポートレットも作成できます。Apache Strutsフレームワークの詳細は、7.3.1項「Oracle PortalおよびApache Strutsのフレームワーク」を参照してください。この項で説明するPDK-Javaの拡張機能は、Apache Struts 1.1に準拠しています。

この項では、次の手順を説明します。

- 7.3.2.1項「Strutsポートレットの作成」

- 7.3.2.2項「プロバイダの登録」

- 7.3.2.3項「サマリー」

7.3.2.1 Strutsポートレットの作成

既存のStrutsアプリケーションの一部をポートレットとして公開するには、最初に、アプリケーションのPortalビューとして機能する新しいビューを作成することをお薦めします。このビューでは、既存のオブジェクト(Actions、ActionFormなど)とともに新しいマッピングとJSPを使用します。

注意:

アプリケーションのPortalビューを作成することをお薦めしますが、アプリケーションのStrutsタグをPDK-JavaのStrutsタグに置き換えることもできます。この方法を使用すると、アプリケーションをスタンドアロンStrutsとポートレットの両方として実行できます。

この例では、新しいエントリをWebロガー(Blog)に追加できるポートレットを作成します。図7-16および図7-17は、Blogを送信してBlogエントリを保存する方法を示しています。

図7-16 Blogの送信

図7-17 Blogエントリの保存

prepareNewBlogは、リクエストをenterNewBlog.jspページにリダイレクトする単純な空のアクションです。このページには、新しいBlogを送信するためのフォームが表示されます。

struts-config.xmlで対応するエントリは次のとおりです。

<action path="/prepareNewBlog" scope="request"
type="view.PrepareNewBlogAction" >
<forward name="success" path="/view/enterNewBlog.jsp"/>
</action>
<action path="/saveNewBlog" name="blogForm" scope="request"
type="view.SaveNewBlogAction" input"/view/enterNewBlog.jsp"  >
<forward name="success" path="/view/newBlogConfirmation.jsp"/>
</action>

7.3.2.1.1 ポートレット・アクションをホスティングするための新しいフローとビューの作成

新しいビューを作成するには、最初に、様々なアクションとリクエストをPortal固有のJSPにリダイレクトするActionMappings(ページ・フロー)の新しいセットを作成します。

<action path="/portal/prepareNewBlog" scope="request"
type="view.PrepareNewBlogAction" >
<forward name="success" path="/view/portal/enterNewBlog.jsp"/>
</action>
<action path="/portal/saveNewBlog" name="blogForm" scope="request" type="view.SaveNewBlogAction" input="/view/enterNewBlog.jsp"  >
<forward name="success" path="/view/portal/newBlogConfirmation.jsp"/>
</action>

変更するのはパス属性のみです。FormBeanアクションは、アプリケーションのビジネス・ロジックが変更されないようにします。

7.3.2.1.2 新しいJSPの作成

前述の手順で指定したように、アクションによってリクエストが新しいJSPに転送され、JSPでポートレットのコンテンツがレンダリングされます。新しいポートレット・ビューのJSPは、HTMLをスタンドアロン・ビューと共有できますが、ポートレットが次の条件を満たしていることを確認してください。

- 他のポータル・ページと整合性のとれたルック・アンド・フィールを維持するPortalスタイルが使用されていること。

- HTMLの表のセルに格納できるHTMLコードが含まれていること(つまり、<html>、<body>および<frame>タグ以外)。

- ポータルで認識できるリンクおよびフォームをレンダリングしていること。これは、Strutsポートレットがコンテンツをインラインでレンダリングするために必要です。これによって、同じポートレット・コンテナ内でリクエストされたコンテンツがレンダリングされ、ユーザーをポータル・ページのコンテキスト内で管理できます。

Strutsポートレット内でインラインのレンダリングを実行するには、Oracle PDKタグを使用する必要があります。

<pdk-struts-html:form action="/portal/saveNewBlog.do">
...
...
</pdk-struts-html:form>

ポートレットのレンダリング中に、いずれかのJSPタグ(たとえば、pdk-struts-html:formタグ)でフォームをParallel Page Engine (PPE)に送信し、PPEではそのパラメータをStrutsポートレットに送信します。Strutsコントローラは、これらのアクションのロジックを実行し、次のJSPをポータル・ページ内のポートレットに戻します。

PDKにはすべてのStrutsタグが含まれており、URLに関連するすべてのタグを拡張します。次に、PDKによって拡張されるタグを示します。

- form: HTMLフォームを作成し、フォーム内にポータル・ページのコンテキストを埋め込んで、インラインのレンダリングを保証します。

- text: フォーム上のフィールドをレンダリングします。

- linkおよびrewrite: ポータル・ページへのリンクを作成します。これらはインラインのレンダリングに必要です。

- img: Webプロバイダを指す絶対リンクを作成します。このタグを、ファイアウォールを備えたインターネットWebサイトのコンテキストで使用する場合は、プロバイダにインターネットから直接アクセスできることを確認する必要があります。これが不可能な場合は、Oracle Portal中間層へイメージをデプロイし、Apache Strutsのイメージ・リンクを使用して関連リンク(アプリケーションではなくポータルに関連付けられたリンク)を生成できます。

注意:

Oracle PDKはOracle JDeveloperに登録できるため、Oracle JDeveloperのコンポーネント・パレットからタグを削除できます。詳細は、Oracle JDeveloperのオンライン・ヘルプでJDeveloperでのカスタム・タグ・ライブラリの登録に関する項を参照してください。

7.3.2.1.3 ポートレットの作成

Strutsポートレットは、手動またはJavaポートレット・ウィザードを使用して作成できます。ウィザードでは明示的にStrutsサポートを提供していませんが、ウィザードを使用してStrutsポートレットを作成できます。

ポートレットを作成する手順は、次のとおりです。

1. Oracle JDeveloperで、Javaポートレット・ウィザードを開いてOracle PDK Javaポートレットを作成します。

注意:

JavaポートレットとOracle PDK Javaポートレットの各オプションは、それぞれ、JPSに準拠したポートレットとPDK-Javaポートレットを作成するのに使用します。「Javaポートレット」または「Oracle PDK Javaポートレット」をクリックすると、Javaポートレット・ウィザードが開きます。ウィザードの起動方法の詳細は、6.5.1項「Oracle PDK-Javaポートレットとプロバイダの作成」を参照してください。

2. 「ページを表示」の「実装スタイル」で、「Javaクラス」を選択します。

3. 「パッケージ名」には、oracle.portal.provider.v2.render.httpと入力します。

4. 「クラス名」には、StrutsRendererと入力します。これにより、ポートレットのレンダラ・クラスのスケルトンとしてStrutsRendererが生成されます。

5. StrutsRendererはPDKに含まれているため、この生成されたファイルは必要ありません。したがって、ウィザードが完了した後は、ウィザードで生成されたファイルを削除する必要があります。これを行うには、「システム・ナビゲータ」ウィンドウでファイルをクリックし、Oracle JDeveloperの「ファイル」>「ディスクから削除」を選択します。

6. provider.xmlを編集して、次のプロパティを変更します。
プロバイダ・レベルで、次のタスクを実行します。

- ユーザーがポータル・ページを終了するたびに元のポートレット状態に戻るようにするには、StrutsアクションをStrutsコンテンツに保存するようにStrutsレンダラを構成します。

<actionInSession>true</actionInSession>

ユーザーがポータル・ページの外部から戻ると常にポートレットの先頭から開始するようにするには、Strutsアクションを保存しないでください。

<actionInSession>false</actionInSession>

- Strutsアプリケーションがセッションを使用する場合(たとえば、フォーム・シンクロナイザのトークン・メカニズムが使用されているか、または<actionInSession>がtrueに設定されている場合)、セッション処理を有効化します。

<session>true</session>

ポートレット・レベルで、次のタスクを実行します。

- ポートレットがコールされたときに起動する最初のアクションを指定します。次のコードを使用します。

<showPage class="oracle.portal.provider.v2.render.http.StrutsRenderer">
<defaultAction>/portal/prepareNewBlog.do</defaultAction>
</showPage>

provider.xmlの構文の詳細は、OTNにあるプロバイダのJavadocを参照してください。

http://www.oracle.com/technology/products/ias/portal/html/javadoc/xml_tag_reference_v2.html

7.3.2.1.4 Portalのビジネス・ロジックを追加するためのポートレットの拡張

アプリケーションで、ユーザーの情報、パーソナライズ、ローカライゼーションなど、ポータル固有のコードを追加する必要があります。これを行うために、Portalのコンテキストでのみコールでき、Portal固有のビジネス・ロジックを処理する新しいActionクラスを作成できます。

7.3.2.2 プロバイダの登録

ポートレットをOracle Portalで使用する準備が完了すると、そのポートレットをOracle Portalに登録してアクセス可能にする必要があります。PDK-Javaポートレットの登録方法の詳細は、6.5.5項「Oracle PDK-Javaポートレットの登録と表示」を参照してください。Strutsアクションをセッション・コンテキストに保存する場合(<actionInSession>true</actionInSession>)、登録時にプロバイダのログイン頻度を「ユーザー・セッションごとに1回」に指定する必要があります。この方法でログイン頻度を設定すると、セッション情報がStrutsポートレットに渡されます。

7.3.2.3 サマリー

Oracle Application Serverを使用すると、Oracle JDeveloperを使用してStrutsポートレットを容易に作成でき、既存のStrutsアプリケーションをOracle Portalに公開できます。Oracle JDeveloperのJavaポートレット・ウィザードの使用方法は、この章の前半を参照してください。Oracle Portalの使用方法の詳細は、『Oracle Fusion Middleware Oracle Portalユーザーズ・ガイド』およびOracle Portalのオンライン・ヘルプを参照してください。

7.3.3 Oracle Application Development Framework (ADF)ポートレットの作成

Strutsの場合と同様、Oracle ADFはMVCの設計パターンに準拠しています。Strutsコントローラを使用するOracle ADFアプリケーションは、Strutsアプリケーションの場合と同じように、ポートレットに変換してOracle Portalにデプロイできます。詳細は、7.3.2項「Strutsポートレットの作成」を参照してください。

注意:

Oracle ADFポートレットを作成しても、JSPページが正しく表示されないことがあります。これはParallel Page EngineのリクエストがSOAPリクエスト(oracle.webdb.provider.v2.adapter.SOAPServlet)を介してプロバイダに送信されるためで、ポータルでは、ページが標準の.JSPページとして扱われなくなります。これを解決するには、ADFBindingFilterフィルタを作成します。

ADFBindingFilterフィルタを作成してマッピングをフィルタするには、web.xmlファイルに次のコードを記述します。

<filter>
<filter-name>ADFBindingFilter</filter-name>
<filter-class>oracle.adf.model.servlet.ADFBindingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>windows-1252</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>ADFBindingFilter</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>ADFBindingFilter</filter-name>
<url-pattern>*.jspx</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>ADFBindingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>ADFBindingFilter</filter-name>
<url-pattern>*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>ADFBindingFilter</filter-name>
<servlet-name>action</servlet-name>
</filter-mapping>
<filter-mapping>
<filter-name>ADFBindingFilter</filter-name>
<servlet-name>jsp</servlet-name>
</filter-mapping>

脚注

脚注1: Oracle Portalオブジェクトに対するユーザーのパーソナライズ・データはエクスポートされません。この制限は、ポートレットと同様に、ページなどの他のオブジェクトにも適用されます。

8 PL/SQLポートレットの作成

注意:

一般に、ポートレットの構築には、PL/SQLではなくJavaを使用することをお薦めします。ポートレットを構築するためのテクノロジの選択方法は、第2章「ポートレット・テクノロジのマトリックス」を参照してください。Javaを使用したポートレットの構築方法は、第6章「Javaポートレットの作成」を参照してください。

Oracle PortalのPL/SQL APIは、一連のPL/SQLパッケージおよびオブジェクトとして実装されます。データベース・プロバイダおよびポートレットは、データベース・スキーマにPL/SQLパッケージとしてデプロイされます。この章では、Oracle Portal Developer Kit-PL/SQL (PDK-PL/SQL)に基づいてPL/SQLポートレットを作成する方法について説明します。この章を効果的に利用するには、PL/SQLを理解し、ある程度PL/SQL Webツールキットに精通している必要があります。

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

- 8.1項「PL/SQLポートレットの作成のガイドライン」

- 8.2項「PL/SQLジェネレータを使用したPL/SQLポートレットの構築」

- 8.3項「手動によるPL/SQLポートレットの構築」

- 8.4項「情報ストレージの実装」

- 8.5項「パラメータの使用」

- 8.6項「コンテキスト情報へのアクセス」

- 8.7項「ポートレットのセキュリティの実装」

- 8.8項「キャッシュを使用したポートレットのパフォーマンスの向上」

- 8.9項「エラー処理の実装」

- 8.10項「イベント・ロギングの実装」

- 8.11項「多言語ポートレットの作成」

- 8.12項「ポートレットのモバイル機器用拡張」

- 8.13項「プログラムを使用したプロバイダの登録」

この章で参照される多数の例のソース・コードは、PDK-PL/SQLの一部として利用できます。PDK-PL/SQLは、Oracle Technology Network (OTN)の「Oracle Portal Developer Kit (PDK)」ページからダウンロードできます:

http://www.oracle.com/technology/products/ias/portal/pdk.html

PDK-PL/SQLを解凍すると、次の場所に例があります。

../pdk/plsql/starter
../pdk/plsql/sample
../pdk/plsql/cache
../pdk/plsql/sso
../pdk/plsql/svcex

PDK-PL/SQLのリファレンスは、次の場所にあります。

../pdk/plsql/doc

8.1 PL/SQLポートレットの作成のガイドライン

PL/SQLでポートレットを作成する際は、この項で説明するベスト・プラクティスに従う必要があります。

- 8.1.1項「ポートレットの表示モード」

- 8.1.2項「推奨されるポートレットのプロシージャおよびファンクション」

- 8.1.3項「モバイル・ポートレットのガイドライン」

8.1.1 ポートレットの表示モード

Javaポートレットと同様に、PL/SQLポートレットでは、様々な表示モードが使用できます。表示モードは、ポートレットの機能の一部です。使用できる次の表示モードの詳細は、第6章「Javaポートレットの作成」を参照してください。

- 共有画面モードは、6.1.1.1項「共有画面モード(JPSの場合は表示モード)」を参照してください。

- 編集モードの詳細は、6.1.1.2項「編集モード(JPSおよびPdk-Java)」を参照してください。

- デフォルト編集モードの詳細は、6.1.1.3項「デフォルト編集モード(JPSおよびPDK-Java)」を参照してください。

- プレビュー・モードの詳細は、6.1.1.4項「プレビュー・モード(JPSおよびPDK-Java)」を参照してください。

- 全画面モードの詳細は、6.1.1.5項「全画面モード(PDK-Java)」を参照してください。

- ヘルプ・モードは、6.1.1.6項「ヘルプ・モード(JPSおよびOracle Portal)」を参照してください。

- 情報モードの詳細は、6.1.1.7項「情報モード(JPSおよびPDK-Java)」を参照してください。

- リンク・モードの詳細は、6.1.1.8項「リンク・モード(PDK-Java)」を参照してください。

選択した表示モードを確認するために、wwpro_api_providerパッケージの定数を使用できます。表8-1に、これらの定数とそれに対応する表示モードを示します。

表8-1 wwpro_api_providerの表示モードの定数

表示モード

定数

共有画面

MODE_SHOW

編集

MODE_SHOW_EDIT

デフォルト編集

MODE_SHOW_EDIT_DEFAULTS

プレビュー

MODE_SHOW_PREVIEW

全画面

MODE_SHOW_DETAILS

ヘルプ

MODE_SHOW_HELP

情報

MODE_SHOW_ABOUT

リンク

MODE_SHOW_LINK

8.1.2 推奨されるポートレットのプロシージャおよびファンクション

ポートレット・コードの主な目的は、Oracle Portalで必要なすべての表示モードでページに表示されるHTML出力を生成することです。ポートレットを一連の別個のPL/SQLストアド・プログラム・ユニットとして実装することは可能ですが、ポートレット・コードをPL/SQLパッケージに編成することが、関連するポートレット・コードとデータを単一のユニットとしてデータベースにカプセル化する最適な方法です。また、データベース・パフォーマンスが改善され、ポートレットのメンテナンスが容易になります。

2.4項「デプロイ・タイプ」から想起されるように、特定のポートレットに対するOracle Portalからのリクエストは、ポートレットのプロバイダを介します。ポートレットと通信するために、プロバイダには、ポートレット・コードをコールする一連の必須メソッドが含まれています。

ポートレットをPL/SQLパッケージとして実装するときは、ポートレット・コードをプロバイダ・コードとともに、同時に編成することをお薦めします。たとえば、プロバイダは、ポートレットの1つについて情報を取得する必要があるとき、get_portletファンクションを使用します。したがって、ポートレットがget_portlet_infoファンクションを含むのは当然のことで、このファンクションは、プロバイダのget_portletファンクションでコールされると、リクエストされた情報を戻します。同様に、プロバイダのshow_portletプロシージャがポートレットのshowプロシージャをコールするのは当然のことで、このプロシージャは、リクエストされた表示モード用のHTML出力を作成し、それをプロバイダに戻します。

表8-2に、データベース・プロバイダと効率的に通信するためにPL/SQLポートレットで使用する推奨プロシージャおよびファンクションを示します。

表8-2 PL/SQLポートレット用の推奨ファンクションおよびプロシージャ

プロシージャ/ファンクション名

用途

get_portlet_info

ポートレット・レコードをプロバイダに戻します。

show

リクエストされた表示モード用のHTML出力を作成し、それをプロバイダに戻します。

register

ポートレットをインスタンス・レベルで初期化します。登録プロシージャには、COMMIT、ROLLBACKまたはSAVEPOINTのようなトランザクション終了文はいっさい含めないでください。OracleAS Portalは、トランザクションの終了を自分で処理します。

deregister

インスタンス・レベルでのクリーンアップを可能にします。登録解除プロシージャには、COMMIT、ROLLBACKまたはSAVEPOINTのようなトランザクション終了文はいっさい含めないでください。OracleAS Portalは、トランザクションの終了を自分で処理します。

is_runnable

ポートレットを実行できるかどうかを決定します。セキュリティ・チェックは、このファンクションで実行できます。

copy

Oracle Portalでページをコピーする際に、ポートレット・プリファレンスのパーソナライズされた値およびデフォルト値をポートレット・インスタンスから新しいポートレット・インスタンスにコピーします。

describe_parameters

パブリック・ポートレット・パラメータのリストを戻します。

8.1.3 モバイル・ポートレットのガイドライン

Oracle Portalのページは、HTMLデバイスおよび非HTMLデバイス(モバイル機器)の両方に対してレンダリングできます。モバイル機器用ポートレットを設計するときは、いくつかの追加のガイドラインを考慮する必要があります。モバイル・ポートレットに関するガイドラインは、6.1.4項「モバイル・ポートレットのガイドライン」を参照してください。

モバイル対応ポートレットの構築方法は、8.12項「ポートレットのモバイル機器用拡張」を参照してください。

8.2 PL/SQLジェネレータを使用したPL/SQLポートレットの構築

データベース・プロバイダおよびPL/SQLポートレットの開発を容易にするために、PL/SQLジェネレータを使用できます。PL/SQLジェネレータは、データベース・プロバイダとそのポートレットに関するインストール可能なPL/SQLコードを作成するユーティリティです。PL/SQLジェネレータは、プロバイダおよびポートレットの定義をXMLファイル形式(provider.xmlファイルと同様の形式)で受信するスタンドアロンのWebアプリケーションです。プロバイダおよびポートレットの定義で使用するXMLタグは、PDK-JavaでWebプロバイダを定義するために使用するXMLタグのサブセットです。PL/SQLジェネレータは、SQL*Plusから実行できるSQLスクリプトを出力します。このスクリプトには、プロバイダおよびポートレットのパッケージを正しい順序でインストールするためのSQLコマンドが含まれています。

PL/SQLジェネレータは、次の場所からインストール手順とともにダウンロードできます:

http://www.oracle.com/technology/products/ias/portal/files/plsqlgenerator.zip

PL/SQLジェネレータを使用するための一般的なモデルは次のとおりです。

1. 構築するプロバイダおよびポートレットを定義するXMLファイルを作成します(8.2.1項「入力XMLファイルの作成」を参照)。

2. 作成したXMLファイルを入力として使用し、PL/SQLジェネレータを実行します(8.2.2項「PL/SQLジェネレータの実行」を参照)。

3. 生成されたPL/SQLポートレットを公開します。手順は次のとおりです。

- PL/SQLジェネレータで生成されたプロバイダをデータベースにインストールします(8.2.3.1項「データベースへのパッケージのインストール」を参照)。

- データベース・プロバイダをOracle Application Serverに登録します(8.2.3.2項「データベース・プロバイダの登録」を参照)。

- 生成されたポートレットをページに追加します(8.2.3.3項「ページへのポートレットの追加」を参照)。

8.2.1 入力XMLファイルの作成

ソースのXMLファイルは、<provider>タグで始まり</provider>タグで終わります。また、1つ以上のポートレット定義を含めることができます。各ポートレット定義は、<portlet>タグと</portlet>タグで囲まれます。ポートレット定義には、ポートレット・レコード属性の値を指定し、ポートレット・ヘッダーでのリンクを有効にするXMLタグが含まれます。たとえば、<name>タグは、プロバイダ・ドメインにポートレット名を指定します。また、<title>タグは、ポートレットの表示名またはタイトルを指定します。<showEdit>タグをtrueに設定すると、ポートレットの編集モードとポートレッド・ヘッダーでの対応するリンクが有効になります。表8-3に、PL/SQLジェネレータの入力に使用できるXMLタグを示します。

表8-3 PL/SQLジェネレータの入力用XMLタグ

XMLタグ

定義

値のタイプ

provider

プロバイダ定義タグを囲みます。

該当なし

portlet

ポートレット定義タグを囲みます。

該当なし

id

プロバイダにポートレットIDを指定します。この値は、プロバイダ内で一意である必要があります。

文字列

name

ポートレット名を指定します。名前には空白を含めないでください。ジェネレータでは、nameタグで指定された情報をポートレット・パッケージ名に使用します。

文字列

title

ポートレットの表示名を指定します。

文字列

shortTitle

ポートレットの短い表示名を指定します。このタグは、モバイル・ポートレットに便利です。

文字列

description

ポートレットの説明を指定します。

文字列

defaultLocale

ポートレットがデフォルトでレンダリングする言語を指定します。この値は、2文字のISO言語コードと国コードで、language.countryと表現されます。

文字列

timeout

ポートレットのタイムアウト時間(秒数)を指定します。

数値

timeoutMsg

ポートレットがタイムアウトしたときに表示されるメッセージを指定します。

文字列

showEdit

ユーザーがポートレットのプロパティをパーソナライズできる編集モードを、ポートレットがサポートするかどうかを指定します。

ブール

showEditDefault

ポートレットのプロパティのデフォルト値をパーソナライズできるデフォルト編集モードを、ポートレットがサポートするかどうかを指定します。

ブール

showDetails

ポートレットが全画面モードで表示できるかどうかを指定します。このモードでは、ブラウザ・ウィンドウ全体がそのポートレットのみのものになります。全画面モードを使用すると、ポートレットは、他のポートレットとページを共有しているときよりも詳細な表示を行います。

ブール

showPreview

ポートレットがプレビュー・モードをサポートするかどうかを指定します。

ブール

hasHelp

ポートレットがヘルプ・モードをサポートするかどうかを指定します。

ブール

hasAbout

ポートレットが情報モードをサポートするかどうかを指定します。

ブール

language

ポートレットのデフォルト言語(たとえばen)を定義します。

文字列

contentType

ポートレットでサポートされるデフォルトのコンテンツ・タイプを指定します。タグは、次のいずれかの値をとります。

wwpro_api_provider.CONTENT_TYPE_HTML
wwpro_api_provider.CONTENT_TYPE_XML
wwpro_api_provider.CONTENT_TYPE_MOBILE

文字列

apiVersion

ポートレットが準拠するOracle PortalのPL/SQL APIのバージョンを指定します。値は、wwpro_api_provider.API_VERSION_1となります。

文字列

callIsRunnable

ポートレットを表示する前に、OracleAS Portalでユーザーの資格証明をチェックする必要があるかどうかを指定します。デフォルト値はtrueです。

ブール

callGetPortlet

ポートレット・レコードのプロバイダに接続するかわりに、Portlet Metadata Repository (PMR)に格納されるポートレット・レコード・データをポータルで使用できるかどうかを指定します。プロバイダから戻されるポートレット・レコード(プロバイダのid、ポートレットのidおよびlanguageで指定)に変更がなければ、プロバイダはcall_get_portletの値をfalseに設定します。つまり、プロバイダのget_portletファンクションおよびget_portlet_listファンクションをコールするかわりに、PMRを使用するようにポータルに指示します。プロバイダがPMRのポートレット・メタデータをポータルに使用させない場合の例は、ポートレット・レコードの値が、ログインしているユーザーのものとは異なる場合です。デフォルト値はtrueです。

ブール

acceptContentType

ポートレットで作成できるコンテンツ・タイプのカンマ区切りのリストを指定します。たとえば、ポートレットでHTMLおよびMOBILEXMLの両タイプのコンテンツを作成できる場合は、タグの値は次のとおりです。

text/html,text/vnd.oracle.mobilexml

文字列

hasShowLinkMode

ポートレットがリンク・モードを実装するかどうかを指定します。値がfalseの場合、ポートレットは、短いタイトルまたはフル・タイトルを使用して、モバイル機器のポートレット・コンテンツを参照するリンク・ラベルを表示します。そうでない場合、パーソナライズされたリンクをポートレット・コードで生成できます。デフォルト値はfalseです。

ブール

mobileOnly

ポートレットはモバイル機器でのみ使用可能かどうかを指定します。デフォルト値はfalseです。

ブール

preferenceStorePath

プロバイダがポートレットのパーソナライズ情報を格納した場所へのベース・プリファレンス・ストア・パスを指定します。このパスは、ポートレットのエクスポート時に使用されます。

文字列

createdOn

ポートレットの作成日を定義します。デフォルト値はsysdateです。

日付

createdBy

ポートレット・レコードを作成したユーザーを指定します。

文字列

lastUpdatedOn

ポートレット・レコードが変更された最新の日付を定義します。デフォルト値はsysdateです。

日付

lastUpdatedBy

ポートレット・レコードを最近変更したユーザーを指定します。

文字列

passAllUrlParams

ポートレットでのパラメータの引渡し動作を指定します。タグの値がtrueの場合、Oracle Portalは、URLですべてのパラメータをポートレットに渡します。タグの値がfalseの場合、ポートレットは、そのポートレットを対象とするパラメータのみを受け取ります。デフォルト値はtrueです。

ブール

cacheLevel

ポートレットのキャッシュ・レベルを指定します。次のいずれかの値をとります。

wwpro_api_provider.CACHE_LEVEL_SYSTEM
wwpro_api_provider.CACHE_LEVEL_USER

文字列

rewriteUrls

ポートレット・レンダリング・リクエストからの出力で、URLリライティングを実行するかどうかを指定します。デフォルト値はfalseです。

ブール

次に、PL/SQLジェネレータ用の入力XMLのサンプルを示します。必須情報は太字で示されています。

<!-- This is a sample provider.xml file for the PLSQL Generator 1.2 -->
<provider>
<portlet>
<id>1</id>
<name>Test_Portlet</name>
<title>Test Portlet Title</title>
<shortTitle>Short portlet title</shortTitle>
<description>This is a Test portlet</description>
<timeout>30</timeout>
<timeoutMsg>Test Portlet Timed Out</timeoutMsg>
<showEdit>true</showEdit>
<showEditDefault>true</showEditDefault>
<showDetails>true</showDetails>
<showPreview>true</showPreview>
<hasHelp>true</hasHelp>
<hasAbout>true</hasAbout>
<language>en</language>
<contentType>wwpro_api_provider.CONTENT_TYPE_HTML</contentType>
<apiVersion>wwpro_api_provider.API_VERSION_1</apiVersion>
<callIsRunnable>true</callIsRunnable>
<callGetPortlet>true</callGetPortlet>
<acceptContentType>'text/html'</acceptContentType>
<hasShowLinkMode>false</hasShowLinkMode>
<mobileOnly>false</mobileOnly>
<passAllUrlParams>true</passAllUrlParams>
<cacheLevel>wwpro_api_provider.CACHE_LEVEL_USER</cacheLevel>
<rewriteUrls>true</rewriteUrls>
</portlet>
</provider>

8.2.2 PL/SQLジェネレータの実行

有効なXML入力ファイルを作成したら、次のようにPL/SQLジェネレータを実行して、プロバイダおよびポートレットのパッケージをSQLファイル形式で生成できます。

1. PL/SQLジェネレータをインストールしていない場合は、一緒にダウンロードした手順に従って、PL/SQLジェネレータをインストールします。

2. ブラウザから、PL/SQLジェネレータのURLに移動します。図8-1に示すようなページが表示されます。

図8-1 PL/SQLジェネレータ・ページ

3. 「Source XML File」フィールドで、「Browse」をクリックしてソースのXMLファイルを選択します。XMLファイルの作成方法は、8.2.1項「入力XMLファイルの作成」を参照してください。

4. 「Provider Name」フィールドに、プロバイダの名前を入力します。プロバイダ名には空白を含めないでください。ジェネレータでは、このフィールドに入力された値をプロバイダ・パッケージ名に使用します。

5. 「Generate」をクリックして、プロバイダおよびポートレットのパッケージに関するインストール可能なPL/SQLコードを含むSQLファイルを生成します。ブラウザからファイルの保存またはオープンを要求された場合は、「Save」を選択します。

6. 「Save」ダイアログ・ボックスで、ファイル拡張子を.sqlに変更し、希望するファイル名に変更します。

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

8.2.3 生成されたPL/SQLポートレットの公開

PL/SQLジェネレータを実行してSQLファイルを取得した後に、Oracle Portalでプロバイダとポートレットを使用できるようにするには、次のタスクを実行する必要があります。

- 8.2.3.1項「データベースへのパッケージのインストール」

- 8.2.3.2項「データベース・プロバイダの登録」

- 8.2.3.3項「ページへのポートレットの追加」

8.2.3.1 データベースへのパッケージのインストール

生成されたプロバイダおよびポートレットのパッケージを、Oracle Portalがインストールされたデータベースにインストールする手順は、次のとおりです。

1. SQL*Plusセッションを開始し、PORTALスキーマにログインします。

2. 新しいデータベース・スキーマのプロバイダ・スキーマを作成し、SQL*Plusで次のコマンドを入力して生成されたプロバイダおよびポートレットのパッケージを格納します。

create user provider_schema identified by provider_schema_password;
grant resource, connect to provider_schema;

3. 次のようにprovsyns.sqlスクリプトを実行して、Oracle PortalのAPIに対するEXECUTE権限をプロバイダ・スキーマに付与します。このスクリプトは、ORACLE_HOME/portal/admin/plsql/wwcディレクトリにあります。

@provsyns.sql provider_schema

4. プロバイダ・スキーマにログインし、生成されたSQLファイルを実行します。プロバイダおよびポートレットのパッケージがデータベースに作成されます。

8.2.3.2 データベース・プロバイダの登録

プロバイダおよびポートレットのパッケージをデータベースに作成した後は、次の手順を実行して、PL/SQLポートレットをポータル・ページに追加する前にプロバイダをOracle Portalに登録する必要があります。

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

2. Portalビルダーで、「管理」タブ、次に「ポートレット」タブをクリックします。

3. 「リモート・プロバイダ」ポートレットで、「プロバイダの登録」をクリックします。

4. 必要に応じて、「名前」、「表示名」、「タイムアウト」および「タイムアウト・メッセージ」に入力します。

5. 「実装スタイル」リストから「データベース」を選択します。

6. 「次へ」をクリックして残りのウィザードを入力します。

7. ウィザードへの入力が完了したら、「終了」をクリックします。

8. 「ポートレット・リポジトリ」ポートレットで、「ポートレット・リポジトリの表示」をクリックします。

9. リポジトリを参照し、登録したばかりのプロバイダを探します。通常、新規プロバイダはリポジトリの「ポートレット・ステージング領域」に表示されます。

10. プロバイダが見つかったら、作成したポートレットがすべてプロバイダに含まれていることを確認します。プロバイダまたはそのポートレットが表示されない場合は、この項および前項(8.2.3.1項「データベースへのパッケージのインストール」、8.2.1項「入力XMLファイルの作成」、8.2.2項「PL/SQLジェネレータの実行」)の手順を見なおし、プロバイダおよびポートレットを正しく作成、登録したことを確認します。

8.2.3.3 ページへのポートレットの追加

プロバイダとそのポートレットがリポジトリに表示されたら、ページに追加できます。ポートレットをページに追加するには、『Oracle Fusion Middleware Oracle Portalユーザーズ・ガイド』の指示に従ってください。

8.3 手動によるPL/SQLポートレットの構築

この項では、starterプロバイダ・サンプルに含まれるhello worldサンプルを使用して、基本的なPL/SQLポートレットの構築方法について説明します。starterプロバイダ・サンプルは、PDK-PL/SQL (pdkplsql.zip)の..\pdkplsql\pdk\plsql\starterにあり、次のファイルで構成されています。

- starter_provider.pks: starterプロバイダのパッケージ仕様です。

- starter_provider.pkb: starterプロバイダのパッケージ本体です。

- helloworld_portlet.pks: hello worldポートレットのパッケージ仕様です。

- helloworld_portlet.pkb: hello worldポートレットのパッケージ本体です。

- snoop_portlet.pks: snoopポートレットのパッケージ仕様です。

- snoop_portlet.pkb: snoopポートレットのパッケージ本体です。

- insintpr.sql: starterプロバイダのインストール・スクリプトです。

PL/SQLポートレットを手動で構築するための一般的なモデルは、次のとおりです。

1. hello worldポートレットのパッケージ仕様および本体を変更し、独自のポートレット・パッケージを作成します(8.3.1項「ポートレット・パッケージの実装」を参照)。

2. starterプロバイダのパッケージ仕様および本体を変更し、新規作成したポートレットをプロバイダに追加します(8.3.2項「プロバイダ・パッケージの実装」を参照)。

3. 新規作成したポートレットをページに追加します(8.3.3項「ページへのポートレットの追加」を参照)。

8.3.1 ポートレット・パッケージの実装

helloworld_portlet.pksおよびhelloworld_portlet.pkbを変更し、独自のポートレット・パッケージを作成する手順は、次のとおりです。

1. パッケージ仕様helloworld_portlet.pksおよびパッケージ本体helloworld_portlet.pkbをコピーします。

2. コピーの名前をmy_first_portlet.pksおよびmy_first_portlet.pkbにそれぞれ変更します。

3. エディタでmy_first_portlet.pksを開き、次のようにパッケージ名をmy_first_portletに変更します。

CREATE OR REPLACE
package my_first_portlet
is
...

end my_first_portlet;

4. エディタでmy_first_portlet.pkbを開き、前述の手順で行った変更を繰り返します。つまり、パッケージ名をmy_first_portletに変更します。

5. my_first_portlet.pkbで、get_portlet_infoというファンクションを探し、次のように変更します。

function get_portlet_info
(
p_provider_id in integer
,p_language in varchar2
)
return wwpro_api_provider.portlet_record
is
l_portlet      wwpro_api_provider.portlet_record;
begin
l_portlet.id := starter_provider.PORTLET_FIRST;
l_portlet.provider_id := p_provider_id;
l_portlet.title := 'My First Portlet';
l_portlet.name := 'My_First_Portlet';
...

6. my_first_portlet.pkbで、showというプロシージャを探し、次のように変更します。

procedure show
(
p_portlet_record        wwpro_api_provider.portlet_runtime_record
)
is
l_portlet      wwpro_api_provider.portlet_record;
l_text_name in varchar2(100);
l_text in varchar2(200);
begin
...
/*
Display the content of the portlet in the show mode.
Use the wwui_api_portlet.portlet_text() API when
generating the content of the portlet so that the
output uses the portlet CSS.
*/
htp.p(wwui_api_portlet.portlet_text(
p_string   =>  'Hello World - Mode Show'
,p_level    =>  1
));
/*
Add the functionality you want here. In this case we are adding
a welcome message addressed to the current user.
*/
l_text_name := 'Welcome to my first portlet ' || wwctx_api.get_user;
l_text := wwui_api_portlet.portlet_text(
p_string   =>  l_text_name,
p_level    =>  1        );
htp.p(l_text);        htp.para;
if (p_portlet_record.has_border) then
wwui_api_portlet.close_portlet;
end if;
...

7. my_first_portlet.pkbを保存します。

8.3.2 プロバイダ・パッケージの実装

ポートレット・パッケージを実装した後は、ポートレットをプロバイダに追加する必要があります。starter_provider.pksおよびstarter_provider.pkbを変更して、新規ポートレットをプロバイダに追加する手順は、次のとおりです。

1. パッケージ仕様starter_provider.pksおよびパッケージ本体starter_provider.pkbをコピーします。

2. コピーの名前をstarter_provider2.pksおよびstarter_provider2.pkbにそれぞれ変更します。

注意:

新しい空のプロバイダを作成する場合、次の手順を実行する前に、hello worldポートレットおよびsnoopポートレットへのすべての参照をstarter_provider2.pksおよびstarter_provider2.pkbから削除します。

3. エディタでstarter_provider2.pksを開きます。

4. PORTLET_FIRSTという定数を追加します。この定数は、プロバイダ内のポートレットの識別子として使用されます。したがって、定数の値は、プロバイダ内で一意である必要があります。

CREATE OR REPLACE
package STARTER_PROVIDER
is
/**
* This package is used as an example to show how providers can be created
* in the portal system.
*
* This provider contains the following portlets:
*
* Hello World (PORTLET_HELLOWORLD)
* Snoop (PORTLET_SNOOP)
*
*/
PORTLET_HELLOWORLD constant integer := 1;
PORTLET_SNOOP      constant integer := 2;
PORTLET_FIRST      constant integer := 3;

5. starter_provider2.pksを保存します。

6. エディタでstarter_provider2.pkbを開きます。

7. starter_provider2.pkbで、新規ポートレットのget_portlet_infoファンクションに対するコールをプロバイダ・パッケージのget_portletファンクションに追加します。このためには、コールmy_first_portlet.get_portlet_infoをget_portletファンクションに追加する必要があります。get_portletファンクションによって、ポータルは、必要に応じてポートレットに関する情報を取得できます。

function get_portlet
p_provider_id in integer
,p_portlet_id in integer
,p_language in varchar2
)
return wwpro_api_provider.portlet_record
is
begin
if (p_portlet_id = PORTLET_HELLOWORLD) then
return helloworld_portlet.get_portlet_info(
p_provider_id  => p_provider_id
,p_language     => p_language
);
elsif (p_portlet_id = PORTLET_SNOOP) then
return snoop_portlet.get_portlet_info(
p_provider_id  => p_provider_id
,p_language     => p_language
);
elsif (p_portlet_id = PORTLET_FIRST) then
return my_first_portlet.get_portlet_info(
p_provider_id  => p_provider_id
,p_language     => p_language
);
else
raise wwpro_api_provider.PORTLET_NOT_FOUND_EXCEPTION;
end if;
end get_portlet;

8. starter_provider2.pkbで、プロバイダから戻されるポートレットのリストに新規ポートレットを追加します。このためには、新規ポートレットをプロバイダのget_portlet_listファンクションに追加する必要があります。get_portlet_listファンクションは、プロバイダが実装するポートレットをポータルに指示します。

function get_portlet_list
...
begin
l_cnt := 0;
if (p_security_level = false ) then            l_cnt := l_cnt + 1;
l_portlet_list(l_cnt) := get_portlet(
p_provider_id  => p_provider_id
,p_portlet_id   => PORTLET_HELLOWORLD
,p_language     => p_language
);
l_cnt := l_cnt + 1;
l_portlet_list(l_cnt) := get_portlet(
p_provider_id  => p_provider_id
,p_portlet_id   => PORTLET_SNOOP
,p_language     => p_language
);
l_cnt := l_cnt + 1;
l_portlet_list(l_cnt) := get_portlet(
p_provider_id  => p_provider_id
,p_portlet_id   => PORTLET_FIRST
,p_language     => p_language
);
else
if (helloworld_portlet.is_runnable(
p_provider_id     =>  p_provider_id
,p_reference_path  =>  null)
) then
l_cnt := l_cnt + 1;
l_portlet_list(l_cnt) := get_portlet(
p_provider_id  => p_provider_id
,p_portlet_id   => PORTLET_HELLOWORLD
,p_language     => p_language
);        end if;
if (snoop_portlet.is_runnable
p_provider_id     =>  p_provider_id
,p_reference_path  =>  null)
) then
l_cnt := l_cnt + 1;
l_portlet_list(l_cnt) := get_portlet(
p_provider_id  => p_provider_id
,p_portlet_id   => PORTLET_SNOOP
,p_language     => p_language
);
end if;
if (my_first_portlet.is_runnable(
p_provider_id     =>  p_provider_id
,p_reference_path  =>  null)
) then
l_cnt := l_cnt + 1;
l_portlet_list(l_cnt) := get_portlet(
p_provider_id  => p_provider_id
,p_portlet_id   => PORTLET_FIRST
,p_language     => p_language
);
end if;
end if;
return l_portlet_list;
end get_portlet_list;

9. starter_provider2.pkbで、is_portlet_runnableファンクションを変更して、新規ポートレットのis_runnableファンクションへのコールを追加します。

function is_portlet_runnable
(
p_portlet_instance in wwpro_api_provider.portlet_instance_record
)
return boolean
is
begin
if (p_portlet_instance.portlet_id = PORTLET_HELLOWORLD) then
return helloworld_portlet.is_runnable(
p_provider_id     =>  p_portlet_instance.provider_id
,p_reference_path  =>  p_portlet_instance.reference_path
);
elsif (p_portlet_instance.portlet_id = PORTLET_SNOOP) then
return snoop_portlet.is_runnable(
p_provider_id     =>  p_portlet_instance.provider_id
,p_reference_path  =>  p_portlet_instance.reference_path
);
elsif (p_portlet_instance.portlet_id = PORTLET_FIRST) then
return my_first_portlet.is_runnable(
p_provider_id     =>  p_portlet_instance.provider_id
,p_reference_path  =>  p_portlet_instance.reference_path
);
else
raise wwpro_api_provider.PORTLET_NOT_FOUND_EXCEPTION;
end if;
end is_portlet_runnable;

10. 表8-4の情報に従ってステップ9を繰り返します。

表8-4 starter_provider2.pkbに対する変更

プロシージャ/ファンクション

追加内容

procedure register_portlet

elsif (p_portlet_instance.portlet_id =
PORTLET_FIRST) then
my_first_portlet.register(p_portlet_instance)

procedure deregister_portlet

elsif (p_portlet_instance.portlet_id =
PORTLET_FIRST) then
my_first_portlet.deregister
(p_portlet_instance)

function describe_portlet_parameters

elsif (p_portlet_id =
PORTLET_FIRST) then
return my_first_portlet.describe_parameters
(p_provider_id, p_language);

procedure show_portlet

elsif (p_portlet_record.portlet_id =
PORTLET_FIRST) then
my_first_portlet.show(p_portlet_record)

procedure copy_portlet

elsif (p_copy_portlet_info.portlet_id =
PORTLET_FIRST) then
my_first_portlet.copy(p_portlet_record)

11. starter_provider2.pkbを保存して閉じます。

12. 通常どおり、Oracle Portalにログインします。

13. Portalビルダーで、「管理」タブ、次に「ポートレット」タブをクリックします。

14. 「ポートレット・リポジトリ」ポートレットで、「ポートレット・リポジトリの表示」をクリックします。

15. リポジトリを参照し、starterプロバイダを探します(通常、リポジトリの「ポートレット・ステージング領域」に表示されます)。これには、元のポートレットhello worldおよびsnoopの2つが含まれています。

16. コマンドラインのプロンプトからSQL*Plusを起動し、starterプロバイダ・スキーマの所有者として接続します。

17. 新規および変更済のPL/SQLパッケージを次の順序でコンパイルします。

- starter_provider2.pks

- my_first_portlet.pks

- starter_provider2.pkb

- my_first_portlet.pkb

18. コンパイル・エラーが発生した場合は、すべてのパッケージが正常にコンパイルされるまで、修正して再コンパイルします。

19. 「ポートレット・リポジトリ」ポートレットで、「ポートレット・リポジトリの表示」をクリックします。

20. リポジトリを参照し、starterプロバイダを再度探します。この時点で、これには、元のポートレットに加えて、新規ポートレットmy_first_portletが含まれています。

注意:

既存のプロバイダまたはポートレット・レコードに変更を加える場合、Oracle Portalインスタンスに反映された変更を表示するには、プロバイダをリフレッシュする必要があります。

8.3.3 ページへのポートレットの追加

これで、ポートレット・リポジトリ内のポートレットと同様に、ポートレットをページに追加できます。ポートレットをページに追加するには、『Oracle Fusion Middleware Oracle Portalユーザーズ・ガイド』の指示に従ってください。

8.4 情報ストレージの実装

Oracle Portalには、個々のポートレット・プリファレンスを格納、取得するためのAPI、および現行セッション用の一時データを格納、操作するためのAPIが用意されています。情報ストレージの実装は次のもので構成されます。

- 8.4.1項「プリファレンス・ストアの実装」

- 8.4.2項「セッション・ストアの実装」

8.4.1 プリファレンス・ストアの実装

Oracle Portalでは、固有のポートレット・インスタンスごとに個々のプリファレンスを永続的に格納、取得するための一連のAPIを提供しています。各プリファレンスに対する一意の識別子、ユーザーごとに自動的にマップされるプリファレンス・ストア、およびPL/SQLポートレットのパーソナライズ情報を格納、取得するためのアクセス・メカニズムを提供しています。

デフォルトでは、エンドユーザーのパーソナライズを有効にすると、ポートレットのタイトル・バーに「パーソナライズ」が表示されます。このリンクにより、ユーザーがそのポートレットに対する設定を選択できるフォームが表示されます。

エンド・ユーザーのパーソナライズ・オプションは、wwpre_api_nameパッケージおよびwwpre_api_valueパッケージを介して使用できます。

8.4.1.1 プリファレンス・ストアの使用

一般に、プリファレンス・ストレージは次のように設定できます。

1. wwpre_api_name.create_pathを使用して、プリファレンス・パスを作成します。

2. wwpre_api_name.create_nameを使用して、プリファレンスを作成します。

3. プリファレンス名を指定し、値を設定するレベルを調べて、プリファレンス値を設定します。このために、wwpre_api_value.set_value_as_varchar2、set_value_as_numberまたはset_value_as_dateを使用します。

4. プリファレンス値を取得するときは常に、プリファレンスの名前およびパスを指定して、プリファレンス値を取得します。このために、wwpre_api_value.get_value_as_varchar2、get_value_as_numberまたはget_value_as_dateを使用します。

8.4.1.2 プリファレンス・ストアの作成およびアクセス

PDK-PL/SQL (pdkplsql.zip)の..\pdkplsql\pdk\plsql\svcexにあるサービスの例に、プリファレンス・ストレージの実装方法を示します。この例の目的は、次の機能を実現することです。

- 「パーソナライズ」をクリックすると、ユーザーは2つのフィールドにテキストを入力できます。

- 1つ目のフィールドは、パーソナライズされたテキストの入力を要求します。2つ目のフィールドは、パーソナライズされたポートレットのタイトルの入力を要求します。

- これら2つのフィールドに対してユーザーが入力した値は、プリファレンス・ストアに格納されます。

- パーソナライズされたテキストおよびポートレットのタイトルは、ユーザーがポートレット・インスタンスを起動するたびに取得されます。

次に示すこの例を参照すると、プリファレンス・ストアの作成方法、プリファレンス・ストアに対する値の格納および取得方法がわかります。

1. エディタでservices_portlet.pkbファイルを開きます。
ポートレット定義の定数部で、ポートレット・パスおよびプリファレンス名に別名を指定します。

DOMAIN           constant varchar2(30) := 'provider';
SUBDOMAIN        constant varchar2(32) := 'services';
PORTLET_PATH     constant varchar2(256):= 'oracle.portal.pdk.servicesportlet.';
PREFNAME_STRING  constant varchar2(30) := 'services_string';
PREFNAME_TITLE   constant varchar2(30) := 'services_title';

2. registerプロシージャを探します。ポートレットでは、プリファレンスを格納するためのパスを作成する必要があります。そのためには、wwpre_api_name.create_pathをコールしてプリファレンス・パスを作成します。次に、ポートレットのパス、名前および説明を入力パラメータとして使用してwwpre_api_name.create_nameをコールし、プリファレンス名を作成します。もう1つの入力パラメータのp_type_nameは、特殊な値のタイプを指定します。NLSIDタイプは、格納される値がNLS IDであることを示します。このタイプを設定および取得するためのファンクションでは、その値を数値として処理します。それとは別に、このタイプのプリファレンス・ストア値のエクスポートまたはコピー時は、関連付けられた文字列もエクスポートまたはコピーされます。最後の入力パラメータの言語は、コンテキストAPIから取得されます。

procedure register
(
p_portlet_instance in wwpro_api_provider.portlet_instance_record
)
is
begin
--
-- Create a path for the portlet instance.  This is used to create
-- the preferences for the portlet instance in the preference store.
--
wwpre_api_name.create_path(
p_path => PORTLET_PATH || p_portlet_instance.reference_path
);
--
-- Create the names to store the portlet preferences.
--
wwpre_api_name.create_name(
p_path        => PORTLET_PATH
|| p_portlet_instance.reference_path,
p_name        => PREFNAME_STRING,
p_description => 'Single custom row in '
|| 'Introductory Example portlet.',
p_type_name   => 'NLSID',
p_language    => wwctx_api.get_nls_language);
wwpre_api_name.create_name(
p_path        => PORTLET_PATH
|| p_portlet_instance.reference_path,
p_name        => PREFNAME_TITLE,
p_description => 'Single custom row in '
|| 'Introductory Example portlet.',
p_type_name   => 'NLSID',
p_language    => wwctx_api.get_nls_language);
exception
when others then
raise;
end register;

3. deregisterプロシージャでは、wwpre_api_name.delete_nameをコールして、プリファレンス・ストアを削除する必要があります。

procedure deregister
(
p_portlet_instance in wwpro_api_provider.portlet_instance_record
)
is
begin
--
-- Delete the path used by the portlet instance.  This will delete
-- all the names and all the values associated with the path.
--
wwpre_api_name.delete_path(
p_path => PORTLET_PATH || p_portlet_instance.reference_path
);
exception
when others then
raise;
end deregister;

4. また、ポートレットでは、wwpre_api_value.set_valueおよびwwpre_api_value.get_valueを使用し、プリファレンス・ストアに対して値の取得および設定を実行する必要があります。get_default_preferenceファンクションを探します。このファンクションがシステム・レベルのデフォルト値をプリファレンス・ストアからロードする方法に注意してください。デフォルトのプリファレンスは、インスタンスに関連付けられています。言語文字列は、データベースに設定されています。

function get_default_preference
...
begin
--
-- Try to find a previously entered portlet instance string preference,
-- if any.
-- A portlet instance string preference is stored in the preference
-- store and has a level of SYSTEM_LEVEL_TYPE.
--
p_path       => PORTLET_PATH || p_reference_path,
l_prefs.string_id := to_char(wwpre_api_value.get_value_as_number(
p_name       => PREFNAME_STRING,
p_level_type => wwpre_api_value.SYSTEM_LEVEL_TYPE
));
--
-- If the value returned above is null it is an indication that there
-- is no default string yet.  Initialize the string id to 0 to indicate
-- this and load the default string value.
--
if (l_prefs.string_id is null or to_number(l_prefs.string_id) = 0) then
wwpre_api_value.set_value_as_number(
p_path       => PORTLET_PATH || p_reference_path,
p_name       => PREFNAME_STRING,
p_level_type => wwpre_api_value.SYSTEM_LEVEL_TYPE,
p_level_name => null,
p_value      => 0
);
...
end get_default_preference;

5. showプロシージャを探します。ポートレットがデフォルト編集モードまたは編集モードであるときの動作に注意してください。また、ユーザーが「適用」、「取消」または「OK」をクリックしたときにp_actionに移入が行われる方法にも注意してください。フォームが送信されると、ポートレットのshowプロシージャが再度コールされます。p_actionパラメータがNULLでない場合は、save_prefsプロシージャをコールして、パーソナライズを保存し、関連ページにリダイレクトします。

procedure show
(
p_portlet_record        wwpro_api_provider.portlet_runtime_record
)
is
l_str varchar2(32000);
l_pref_record preference_record;
l_action   varchar2(10);
l_names    owa.vc_arr;
l_values   owa.vc_arr;
begin
...
elsif (p_portlet_record.exec_mode =
wwpro_api_provider.MODE_SHOW_EDIT)
or (p_portlet_record.exec_mode =
wwpro_api_provider.MODE_SHOW_EDIT_DEFAULTS)
then
wwpro_api_parameters.retrieve(l_names, l_values);
for i in 1..l_names.count loop
if (upper(l_names(i)) = upper('p_string')) then
l_pref_record.string := l_values(i);
elsif l_names(i) = 'p_title' then
l_pref_record.title_string := l_values(i);
elsif l_names(i) = 'p_action' then
l_action := l_values(i);
end if;
end loop;
if (l_action in (ACTION_OK,ACTION_APPLY,ACTION_CANCEL)) then
if (p_portlet_record.exec_mode =
wwpro_api_provider.MODE_SHOW_EDIT) then
save_prefs(p_string => l_pref_record.string,
p_title  => l_pref_record.title_string,
p_action => l_action,
p_level  => wwpre_api_value.USER_LEVEL_TYPE,
p_portlet_record  => p_portlet_record);
else
save_prefs(p_string => l_pref_record.string,
p_title  => l_pref_record.title_string,
p_action => l_action,
p_level  => wwpre_api_value.SYSTEM_LEVEL_TYPE,
p_portlet_record  => p_portlet_record);
end if;
else
show_edit(p_portlet_record  => p_portlet_record);
end if;
...
end show;

6. show_editプロシージャでは、編集モードまたはデフォルト編集モードのページがレンダリングされます。2つのテキスト・フィールドがレンダリングされ、ユーザーは、3つのボタン(「適用」、「OK」および「取消」)を使用してフォームでパーソナライズ可能な値を変更できます。このファンクションでは、wwpro_api_adapter.open_formを使用して、<FORM>タグに対する適切なアクション属性および適切な非表示フィールドが設定されたHTMLフォームを作成することに注意してください。重要なのは、リモートのOracle Portalインスタンスから連携されたPortalアダプタを利用してポートレットを使用する場合、このプロシージャを使用して<FORM>タグを作成することです。

procedure show_edit
(
p_portlet_record in wwpro_api_provider.portlet_runtime_record
)
is
l_prefs    preference_record;
l_text_prompt_string  varchar2(30);
l_title_prompt_string varchar2(30);
begin
...
htp.centeropen;
htp.tableOpen(cattributes => 'BORDER="1" WIDTH=90%');
htp.tableRowOpen;
htp.p('<TD>');
--
--  This procedure call creates the <FORM> tags with a set of
--  standard parameters.  Using this procedure makes the
--  personalization page work through the pl/sql http adapter.
--
wwpro_api_adapter.open_form(p_formattr => 'NAME="services"',
p_prr      => p_portlet_record);
htp.p('</TD>');
htp.tableRowClose;
htp.tableClose;
htp.centerclose;
htp.formclose;
end show_edit;

7. この例でプリファレンス・ストレージの実装に関連する、次のプロシージャおよびファンクションを確認します。

- get_user_preference: ユーザーによってパーソナライズされたポートレットの文字列およびタイトルを取得します。

- save_prefs: パーソナライズ変更後にユーザーが「OK」または「適用」をクリックすると、プリファレンスをプリファレンス・ストアに保存するために起動されます。

- entered_text_is_valid: パーソナライズ可能なテキスト・フィールドに入力されたテキストが有効かどうかをチェックします。

8. このポートレットをページに表示するのに、ポートレット・リポジトリにまだ登録していない場合は、その追加方法について8.3.2項「プロバイダ・パッケージの実装」の手順を必要に応じて参照してください。

9. ポートレットがリポジトリに表示されたら、ページに追加してテストできます。ポートレットをページに追加するには、『Oracle Fusion Middleware Oracle Portalユーザーズ・ガイド』の指示に従ってください。

8.4.2 セッション・ストアの実装

PDK-PL/SQL (pdkplsql.zip)の..\pdkplsql\pdk\plsql\svcexにあるサービスの例に、セッション・ストアの実装方法を示します。この例の目的は、次の機能を実現することです。

- ユーザーがこのポートレットを起動すると、「このポートレットは、このセッションでx回描画されています。」というテキストが表示されます(xはポートレットがレンダリングされた回数です)。

- ユーザーがポートレットを起動するたびに、カウンタが1ずつ増えます。

- ポートレットで「詳細」をクリックすると、ユーザーは「消去」を使用してカウンタをリセットできます。カウンタをクリアすると、カウンタは再度0(ゼロ)から始まります。

セッション・ストアの作成およびアクセス

次に示すこの例を参照すると、セッション・ストアの作成方法、セッション・ストアに対する値の格納および取得方法がわかります。

1. エディタでservices_portlet.pkbファイルを開きます。
ポートレット定義の定数部で、セッション・オブジェクトのドメインおよびサブドメインの定義に別名を指定します。

DOMAIN           constant varchar2(30) := 'provider';
SUBDOMAIN        constant varchar2(32) := 'services';
PORTLET_PATH     constant varchar2(256):= 'oracle.portal.pdk.servicesportlet';
PREFNAME_STRING  constant varchar2(30) := 'services_string';
PREFNAME_TITLE   constant varchar2(30) := 'services_title';

2. clear_countプロシージャを探します。clear_countは、カウンタをリセットするためにユーザーが「消去」をクリックすると、showプロシージャからコールされます。clear_countは、wwsto_api_session.load_sessionをコールしてセッション・オブジェクトをロードします。次に、wwsto_api_session.set_attributeをコールしてカウンタをゼロに設定します。最後に、save_sessionをコールしてセッション・オブジェクトを保存します。

procedure clear_count
(
p_action          in varchar2,
p_back_url        in varchar2,
p_reference_path  in varchar2
)
is
ex_counter integer;
session_parms &&1..wwsto_api_session;
begin
--
-- Clear the display counter.
--
if (p_action = ACTION_CLEAR) then
--
-- Load the session object that contains the display counter
--
session_parms :=
&&1..wwsto_api_session.load_session (DOMAIN,SUBDOMAIN);
ex_counter :=
session_parms.get_attribute_as_number(
'ex_counter' || p_reference_path);
--
-- Reset the display counter.
--
ex_counter := 0;
session_parms.set_attribute(
'ex_counter' || p_reference_path, ex_counter);
--
-- Save the changes to the database immediately to avoid any
-- data consistency problems with the data stored in the
-- session object.
--
session_parms.save_session;
end if;
owa_util.redirect_url(curl=>p_back_url);
end clear_count;

3. show_contentsプロシージャを探します。show_contentsは、showプロシージャからコールされ、カウンタを取得して1のみ増やし、セッション・ストアにその値を保存します。セッション・オブジェクトが取得されることにより、ユーザーがポートレットをレンダリングした回数が表示されることに注意してください。また、get_attribute_as_numberでカウンタ値が取得された後、このプロシージャが呼び出されるたびにカウンタが増分されます。

procedure show_contents
(
p_portlet_record  wwpro_api_provider.portlet_runtime_record
)
is
l_prefs preference_record;
session_parms &&1..wwsto_api_session;
ex_counter integer;
l_portlet wwpro_api_provider.portlet_record;
l_str varchar2(32000);
begin
--
-- In this mode a session counter is used to indicate
-- the number of invocations of this portlet during the
-- current session.  The counter is stored in the session
-- store.
--
session_parms :=
&&1..wwsto_api_session.load_session(DOMAIN,SUBDOMAIN);
ex_counter    :=
session_parms.get_attribute_as_number(
'ex_counter' || p_portlet_record.reference_path);
if (ex_counter is null) then -- first invocation
session_parms.set_attribute(
'ex_counter' || p_portlet_record.reference_path,1);
ex_counter := session_parms.get_attribute_as_number(
'ex_counter' || p_portlet_record.reference_path);
else -- on every invocation increase by 1
ex_counter := ex_counter + 1;
session_parms.set_attribute(
'ex_counter'
|| p_portlet_record.reference_path, ex_counter);
end if;    session_parms.save_session;
...
end show_contents;

4. このポートレットをページに表示するのに、ポートレット・リポジトリにまだ登録していない場合は、その追加方法について8.3.2項「プロバイダ・パッケージの実装」の手順を必要に応じて参照してください。

5. ポートレットがリポジトリに表示されたら、ページに追加してテストできます。ポートレットをページに追加するには、『Oracle Fusion Middleware Oracle Portalユーザーズ・ガイド』の指示に従ってください。

8.5 パラメータの使用

ポートレットの機能は、パラメータを利用して拡張できます。ポートレットによって実装されたビジネス・ロジックは、ページに渡されるパラメータによって異なるHTML出力を作成できます。ポートレット・パラメータを使用することで、現行ページを変更せずに共有画面モードでポートレット内をナビゲートできます。また、ポートレットはパラメータを使用して相互に通信することもできます。

ポートレット・パラメータの構造は、名前/値ペアです。これらのペアは、GET送信メソッドを使用してURLパラメータ引渡し形式に直接マップするか、POST送信メソッドを使用してHTTPメッセージ本文を使用できます。また、ポートレットは、Oracle Portalにパラメータを公開できます。ページに追加されると、これらのポートレットは、ページ設計者が作成したページ・パラメータの形式で値を受け入れることができます。

注意:

ポートレット・パラメータ名は、アンダースコア(_)で始めないでください。アンダースコアで始まるパラメータは、Oracle Portalの内部で使用するために予約されており、ポートレットには渡されません。

ポートレットは、URL、HTTPメッセージ本文またはページ・パラメータに直接アクセスできません。パラメータ値を取得するには、wwpro_api_parametersパッケージで提供されるOracle PortalのPL/SQLパラメータAPIをポートレットでコールする必要があります。

Oracle Portalでは、次のタイプのパラメータを提供しています。

警告:

ポートレットでは、パブリックおよびプライベートのパラメータを混ぜて使用することはできません。ポートレットでパブリック・パラメータを有効にするにはプライベート・パラメータを、逆にプライベート・パラメータを有効にするにはパブリック・パラメータを使用できなくする手順をとる必要があります。

- プライベート・ポートレット・パラメータ: ポートレットに内部ナビゲーションを実装できます。

- パブリック・ポートレット・パラメータ: ポートレットのデータ・フローの制御をページ設計者に渡すことができます。ページ設計者は、パブリック・ポートレット・パラメータをページ・パラメータにマップしてデフォルト値を指定し、ユーザーがその値をパーソナライズすることを許可できます。

- ページ・パラメータ: ページ設計者によって単純なユーザー・インタフェースに定義されます。これらのページ・パラメータは、ページ設計者がパラメータ値をページからそのポートレットに渡すために、パブリック・ポートレット・パラメータにマップできます。

パラメータの詳細は、2.12項「パブリック・ポートレット・パラメータのサポート」および2.13項「プライベート・ポートレット・パラメータのサポート」を参照してください。

8.5.1 プライベート・パラメータの引渡し

プライベート・ポートレット・パラメータを渡す際に、GETまたはPOSTのいずれかのHTML送信メソッドを使用できます。GETメソッドは、URLを使用してパラメータを渡すのに対し、POSTメソッドは、パラメータをHTTPメッセージ本文に挿入します。どちらのメソッドにおいても、ポータル・ページ上のポートレット・インスタンス、パラメータのコール方法およびパラメータの値を指定する必要があります。

プライベート・ポートレット・パラメータには、次の2種類があります。

- 修飾パラメータ: プライベート・ポートレット・パラメータがページ上の他のどのポートレットでも読み取られないことを保証します。参照パスは、ポートレットがページに追加されると割り当てられる、パラメータの一意の接頭辞です。たとえば、http://page_url?277_MAP_368673.region=Europeとなります。この修飾パラメータの参照パスは277_MAP_368673、名前はregion、値はEuropeです。プライベート・パラメータには、常に修飾パラメータを使用することをお薦めします。

- 非修飾パラメータ: ポートレット・インスタンスに関する情報を保持せず、ページ上のどのポートレットでも読み取ることができます。たとえば、 http://page_url?region=Europeとなります。この非修飾パラメータの名前はregion、値はEuropeです。プライベート・パラメータには、非修飾パラメータを使用しないことをお薦めします。

8.5.2 ページ・パラメータの引渡しとパブリック・ポートレット・パラメータのマッピング

パブリック・ポートレット・パラメータは、ページ設計者がポートレットを複数のページで再利用できるようにすることで、ポートレットの柔軟性を高めます。その結果、ページ設計者は、異なるページにポートレットを追加する際に、ポートレット・コードの変更を開発者に依頼する必要がありません。パブリック・ポートレット・パラメータを使用することで、ページ上のポートレットは、ポートレット・パラメータ名に関係なく、マップされたページ・パラメータから値を簡単に受け取ることができます。

たとえば、dept_idというページ・パラメータがあるとします。3つのポートレットでこの値が必要ですが、1つのポートレットではdept、もう1つのポートレットではdeptno、さらにもう1つのポートレットではdepartment_idという名前です。ページ・パラメータをマップすることで、3つすべてのポートレットは、dept_idパラメータから値を受け取り、適切なポートレット・パラメータに設定することができます。さらに、ページ設計者は、デフォルト値(たとえば、department 20)を設定して、その値をユーザーがパーソナライズ(たとえばdepartment 30)し、3つすべてのポートレットに適用できます。

パブリック・パラメータおよびページ・パラメータを引き渡すための一般的なモデルは、次のとおりです。

1. pass_all_url_paramsをfalseに設定して、ポートレット・レコードでパブリック・パラメータを有効にします。この設定により、ポートレットには、そのポートレットを対象とするパラメータのみが渡されます。

2. パブリック・パラメータをプロバイダのdescribe_portlet_parametersファンクションで宣言します。プロバイダに属すポートレットごとに、このプロシージャは、ポートレットが受け入れるパラメータのリストを、次のタイプのレコードのPL/SQL表形式で戻します。

type portlet_parameter_table is table ofportlet_parameter_record index by binary_integer;

3. パラメータの説明的な情報をポートレットのdescribe_parametersファンクションに指定します。例:

function describe_parameters
(p_provider_id in integer, p_language in varchar2)
return wwpro_api_provider.portlet_parameter_table
is
l_params wwpro_api_provider.portlet_parameter_table;
begin
l_params(1).name := 'dept_id';
l_params(1).datatype := wwpro_api_provider.STRING_TYPE;
l_params(1).description := 'Defines a department ID';
l_params(1).display_name := 'Department ID';
return l_params;
end describe_parameters;

4. パブリック・パラメータに値を割り当てます。パブリック・パラメータは、通常、ページ・パラメータを使用して値を取得します。ページ・パラメータには、通常、ページ設計者がデフォルト値を割り当て、ユーザーが実行時にその値をパーソナライズできます。あるいは、ページ・パラメータ値はコール元のURLで割り当てることができます。ページ設計者によるページ・パラメータの使用方法は、『Oracle Fusion Middleware Oracle Portalユーザーズ・ガイド』を参照してください。

8.5.3 パラメータ値の取得

プライベート・パラメータまたはパブリック・パラメータを使用しているかどうかに関係なく、同じAPIを使用してその値を取得できます。ポートレットは、wwpro_api_parametersパッケージの次のPL/SQLパラメータAPIをコールして、パラメータを取得できます。

- wwpro_api_parameters.get_value: 特定のパラメータ名によって指定されるパラメータ値を戻します。パラメータ名は大/小文字を区別しないのに対して、パラメータ値は大/小文字を区別します。例:

l_region := wwpro_api_parameters.get_value
(p_name => 'region',
p_reference_path => p_portlet_record.reference_path);

- wwpro_api_parameters.get_values: パラメータ値の配列を戻します。このファンクションは、1つのパラメータ名に関連付けられているすべての値、または、まったく一致しない場合は空のリストを戻します。一部のビジネス・ロジックでは、同じパラメータ名を使用して複数の値がポートレットに渡される場合、複数の選択が必要です。ポートレットは、同じパラメータの1つまたは複数の値を受け取ることができます。例:

l_region_values owa.vc_arr;
...
l_region_values := wwpro_api_parameters.get_values
(p_name = 'region',
p_reference_path => p_portlet_record.reference_path);

- wwpro_api_parameters.get_names: 参照パスで特定される指定のポートレットに渡されるパラメータの名前を戻します。戻されるリストは、次のように定義されるowa.vc_arタイプのPL/SQL表です。

type vc_arr is table of varchar2(32000) index by binary_integer;

注意:

ポートレット・パラメータ名は、アンダースコア(_)で始めないでください。アンダースコアで始まるパラメータは、Oracle Portalの内部で使用するために予約されており、ポートレットには渡されません。

例:

l_names owa.vc_arr;
...
l_names := wwpro_api_parameters.get_names
(p_reference_path => p_portlet_record.reference_path);

- wwpro_api_parameters.retrieve: ポートレットのすべてのパラメータについて名前および値を戻します。例:

procedure show_portlet
( p_portlet_record in out
wwpro_api_provider.portlet_runtime_record )
is
l_names owa.vc_arr;
l_values owa.vc_arr;
...
begin
...
wwpro_api_parameters.retrieve (l_names, l_values);
for i in 1..l_names.count loop
htp.p('Parameter Name: '||l_names(i));
htp.p('Parameter Value: '||l_values(i));
htp.br;
end loop;
...
end show_portlet;

8.6 コンテキスト情報へのアクセス

ユーザーがOracle Portalのページにアクセスするたびに、パブリック・セッションが確立されます。ユーザーがOracle Portalにログインすると、パブリック・セッションは認証済セッションになります。このセッションには、ユーザー名、現行セッションID、IPアドレス、言語設定など、ユーザーに関する複数のコンテキスト情報が含まれます。また、現在使用されているOracle Portalスキーマなどのサポート情報も含まれます。

セッション・コンテキスト・サービスは、ユーザーのセッションに関する情報を戻し、wwctx_apiパッケージを介して使用できます。

8.6.1 コンテキスト情報の使用

セッション・コンテキストを使用するための一般的なモデルは次のとおりです。

1. 機能に必要な情報を指定します。

2. wwctx_apiの適切なメソッドを使用して、その値を取得し、必要に応じて設定します。

表8-5に、様々なセッション情報の取得に使用されるファンクション・コールを示します。

注意:

コンテキストAPIの詳細は、PL/SQL APIリファレンスを参照してください。APIリファレンスは、Portal Center(http://portalcenter.oracle.com)か、PDK-PL/SQL (pdkplsql.zip)をダウンロードしている場合は、..\pdkplsql\pdk\plsql\docにあります。

表8-5 コンテキスト情報のファンクション・コール

セッション情報

ファンクション・コール

現行ユーザー

wwctx_api.get_user

ユーザーのログイン・ステータス

wwctx_api.is_logged_on

ログイン時間

wwctx_api.get_login_time

言語

wwctx_api.get_nls_language

現行セッションID

wwctx_api.get_sessionid

ユーザー・クライアントのIPアドレス

wwctx_api.get_ip_address

ユーザー・スキーマ

wwctx_api.get_db_user

Oracle Portalのスキーマ

wwctx_api.get_product_schema

Oracle Portalのバージョン

wwctx_api.get_product_version

8.6.2 コンテキスト情報を取得するためのwwctx_apiの使用

PDK-PL/SQL (pdkplsql.zip)の..\pdkplsql\pdk\plsql\svcexにあるサービスの例に、wwwctx_apiパッケージを使用したセッション情報の取得用法を示します。次に示すこの例を参照すると、ポートレットにファンクション・コールを実装する方法がわかります。

1. エディタでservices_portlet.pkbファイルを開きます。

2. get_portlet_infoファンクションを探します。

3. ユーザー情報を導出し、ポートレット情報レコードにその値を設定するためのwwctx_api.get_userの使用方法に注意してください。

...
l_portlet.timeout              := null;
l_portlet.timeout_msg          := null;
l_portlet.created_on           := to_date('10/19/2000', 'MM/DD/YYYY');
l_portlet.created_by           := wwctx_api.get_user;
l_portlet.last_updated_on      := to_date('10/19/2000', 'MM/DD/YYYY');
l_portlet.last_updated_by      := wwctx_api.get_user;
l_portlet.has_show_edit_defaults := true;
l_portlet.has_show_preview     := true;
l_portlet.preference_store_path := PORTLET_PATH;
...

4. wwctx_api.get_userは、services_portlet.pkb全体にわたって様々な場所で同じように使用されています。wwctx_api.get_userが他にないかコードを検索します。

5. コンテキスト情報を取得する別の例が、is_runnableファンクションにあります。

function is_runnable
(
p_provider_id in integer
,p_reference_path in varchar2
)
return boolean
is
begin
--
-- Portlet security check.  It allows the portlet to be visible
-- if the user is logged on, that is, the current session is not a
-- public session.
--
return wwctx_api.is_logged_on;
end is_runnable;

6. registerプロシージャでは、言語の取得にwwctx_api.get_nls_languageが使用されています。

--
-- Create the names to store the portlet preferences.
--
wwpre_api_name.create_name(
p_path        => PORTLET_PATH
|| p_portlet_instance.reference_path,
p_name        => PREFNAME_STRING,
p_description => 'Single custom row in '
|| 'Introductory Example portlet.',
p_type_name   => 'NLSID',
p_language    => wwctx_api.get_nls_language);
wwpre_api_name.create_name(
p_path        => PORTLET_PATH
|| p_portlet_instance.reference_path,
p_name        => PREFNAME_TITLE,
p_description => 'Single custom row in '
|| 'Introductory Example portlet.',
p_type_name   => 'NLSID',
p_language    => wwctx_api.get_nls_language);

7. services_portlet.pkbを閉じます。セッション・コンテキストは、独自の機能的な要件に基づく以外は同様の方法で実装できます。

8. このポートレットをページに表示するのに、ポートレット・リポジトリにまだ登録していない場合は、その追加方法について8.3.2項「プロバイダ・パッケージの実装」の手順を必要に応じて参照してください。

9. ポートレットがリポジトリに表示されたら、ページに追加してテストできます。ポートレットをページに追加するには、『Oracle Fusion Middleware Oracle Portalユーザーズ・ガイド』の指示に従ってください。

8.7 ポートレットのセキュリティの実装

ポートレットのセキュリティは、エンド・ユーザーによるアクセスを制御するためにポートレットで使用されるテクニックとメソッドに関係しています。ポートレットは、Oracle Portalに認証を任せ、リクエストに基づいてポータルがポートレットを適切な検証済ユーザーに戻すことを信頼しています。

Oracle Portalは、特定の権限をユーザーやグループに割り当てて、情報およびアプリケーションへのアクセスを厳しく制御します。Portalのセキュリティ・サービスを使用すると、プログラムによりアクセス制御を指定し、実行時に適切な権限があるかどうかをチェックできます。ポートレットで使用されるセキュリティ・メカニズムにより、権限を持ったユーザーのみがこれらのポートレットにアクセスできるようになります。これらのセキュリティ・サービスは、wwsec_apiパッケージを介して使用できます。

ポートレットのセキュリティは、ポートレットがポータル・ページに表示されるとき、およびデータベース・プロバイダのget_portlet_listファンクションによってポートレットがポートレット・リストで戻されるときに起動されます。Portalフレームワークのセキュリティ・サービスには、次の主要な機能があります。

- ポートレットの表示: ポートレットがページに表示される前に、プロバイダは、ポートレットのアクセス権限をチェックします。プロバイダで、is_portlet_runnableファンクションを定義する必要があります。このファンクションは、ポートレットのis_runnableファンクションをコールしてアクセス権限をチェックします。

- ユーザー・グループ: wwsec_api.get_defaultgroupファンクションを使用して、ユーザーが属しているデフォルト・グループを検索できます。

- 権限のチェック: wwsec_api.has_privilegeファンクションを使用して、ポートレットをパーソナライズするために必要な権限をユーザーまたはグループが持っているかどうかがわかります。

- 最高の権限: wwsec_api.get_privilege_levelファンクションを使用して、すべてのグループでユーザーが使用できる最高の権限がわかります。

- アクセス可能なオブジェクト: wwsec_api.accessible_objectsファンクションを使用して、指定された権限レベルでユーザーがアクセスできるすべてのオブジェクトがわかります。他の同様の関連するファンクションは、APIドキュメントを参照してください。APIリファレンスは、Portal Center(http://portalcenter.oracle.com)か、PDK-PL/SQL (pdkplsql.zip)をダウンロードしている場合は、..\pdkplsql\pdk\plsql\docにあります。

8.7.1 セキュリティの使用

PL/SQLポートレットのセキュリティを実装するには、データベース・プロバイダによって実装されるファンクションis_portlet_runnableがポータルに必要です。このファンクションの実際の実装は、アプリケーションしだいです。つまり、現行ユーザーがポートレットにアクセスするために十分な権限を持っているかどうかを判断するセキュリティ方式は、個々のポートレットの実装で定義されます。また、ポータルには、現行ユーザーがアクセスできる一連のポートレットを戻す、データベース・プロバイダのファンクションget_portlet_listも必要です。

セキュリティAPIの使用のガイドライン

ポートレットのセキュリティ・メカニズムでは、コンテキストAPI、セキュリティ・サブシステムAPIおよびインフラストラクチャを使用できます。コンテキストAPIは、現行ユーザーに関する情報を取得するために使用できます。セキュリティ・サブシステムは、現行ユーザーの権限をチェックするために使用できます。

注意:

コンテキストAPIとセキュリティ・サブシステムAPIの詳細は、PL/SQL APIのリファレンスを参照してください。APIリファレンスは、Portal Center(http://portalcenter.oracle.com)か、PDK-PL/SQL (pdkplsql.zip)をダウンロードしている場合は、..\pdkplsql\pdk\plsql\docにあります。

これらのAPIを使用する際は、次の事柄に注意してください。

- 権限を持ったユーザーのみ、「ポートレットの追加」ダイアログでポートレットを表示できる必要があります。この目的は、プロバイダにis_portlet_runnableファンクションを実装することで達成できます。また、ポートレットへのパブリック・アクセスを許可できます。

- ポートレットがユーザーに対して自身をレンダリングしない場合、HTMLを戻さないか、ページ・エンジンが無視する例外を戻す必要があります。エラー・メッセージを戻す必要はありません。エラー・メッセージを戻すと、エラー・スタックに無駄に追加されます(エラー・スタックは無制限ではありません)。詳細は、8.9項「エラー処理の実装」を参照してください。

- ポートレットのセキュリティにより、ポートレットでは、ランタイム・セキュリティ・チェックを実行して、現行ユーザーがポートレットにアクセスするために必要な認可を持っていることを保証できます。

- ポートレットが表示モードでレンダリングされるとき、データベース・プロバイダのis_runnableファンクションをコールして、現在ログインしているユーザーにポートレットを表示するかどうかを判断できます。ポータルでは、このファンクションを直接コールすることができません。ただし、ポートレットがこのコールを実行することは必須ではありません。ポートレットのセキュリティを実装する場合のみ、ポートレットは、表示モードでこのコールを実行する必要があります。

- is_runnableへのコールの結果により、ポートレットを実際に表示するかどうかが決まります。結果がtrueの場合、ポートレットは表示されます。それ以外の場合は表示されません。ポートレットは、ポータル・ページに表示されるときに、表示モードでレンダリングされます。

- プロバイダのファンクションget_portlet_listへのコールにより、ポートレットがポートレット・リストで戻される場合、p_security_levelパラメータの値により、ファンクション・コールの目的が決まります。このコールが、プロバイダが実装するポートレットのマスター・リストを取得するためにポートレット・リポジトリのリフレッシュ操作から実行される場合、パラメータp_security_levelの値はfalseです。この設定は、ポートレットのセキュリティ・チェックを実行する必要はなく、プロバイダが実装するすべてのポートレットのマスター・リストを戻す必要があることをプロバイダに指示します。この場合に戻されるポートレットのマスター・リストは、そのプロバイダのポートレット・リポジトリに移入するために使用されます。

- p_security_levelの値がtrueの場合、ポートレットのセキュリティを実行する必要があるかどうかを決定するのは、プロバイダの実装しだいです。ポートレットのセキュリティが実装されている場合、プロバイダは現行ユーザーによって異なるポートレットのリストを戻すことがあります。

- ポートレット・リポジトリが表示されるとき、Oracle Portalは、ポートレット・リポジトリに存在するポートレットごとに、データベース・プロバイダのis_portlet_runnableファンクションをコールします。このステップは、現在ログインしているユーザーが参照の権限を持っているポートレットのみを表示するために実行されます。ポートレット・リポジトリが表示される場所の一例として、「ポートレットの追加」ダイアログ内があります。

8.7.2 セキュリティのコーディング

PDK-PL/SQL (pdkplsql.zip)の..\pdkplsql\pdk\plsql\svcexにあるサービスの例に、セキュリティの実装方法を示します。次に示すこの例を参照すると、ポートレットにセキュリティ・ファンクションを実装する方法がわかります。

1. エディタでservices_provider.pkbファイルを開きます。

2. is_portlet_runnableファンクションを探します。このファンクションは、ポートレットのis_runnableファンクションを使用してセキュリティの実装をコールし、ポートレットのアクセス権限をチェックします。

function is_portlet_runnable
(
p_portlet_instance in wwpro_api_provider.portlet_instance_record
)
return boolean
is
begin
if (p_portlet_instance.portlet_id = SERVICES_PORTLET_ID) then
return services_portlet.is_runnable(
p_provider_id     =>  p_portlet_instance.provider_id
,p_reference_path  =>  p_portlet_instance.reference_path
);
else
raise wwpro_api_provider.PORTLET_NOT_FOUND_EXCEPTION;
end if;
end is_portlet_runnable;

3. get_portlet_listプロシージャを探します。get_portlet_listは、このプロバイダが実装するポートレットのリストに、ポートレットが含まれるようにします。get_portlet_listは、最初にセキュリティ・フラグ(p_security_level)をチェックし、セキュリティが有効かどうかを調べます。フラグがtrueに設定されている場合、get_portlet_listはis_runnableを使用してポートレットがアクセス可能かどうかをチェックします。p_security_levelパラメータの値は、ポートレットをリストで戻す前に、セキュリティ・チェックを実行するかどうかを示します。ポートレット・リポジトリのリフレッシュ操作で、プロバイダが実装するポートレットのマスター・リストを取得する場合、p_security_levelの値はfalseです。falseの値は、プロバイダはセキュリティ・チェックを実行する必要はなく、プロバイダが実装するすべてのポートレットのマスター・リストを戻す必要があることを意味します。戻されるポートレットのマスター・リストは、そのプロバイダのポートレット・リポジトリに移入するために使用されます。p_security_levelの値がtrueの場合、プロバイダの実装により、ポートレットのセキュリティ・チェックを実行するかどうかが決まります。ポートレットのセキュリティが実装されている場合、プロバイダは現在ログインしているユーザーによって異なるポートレットのリストを戻すことがあります。

function get_portlet_list
...
if (p_security_level = false) then
l_cnt := l_cnt + 1;
l_portlet_list(l_cnt) := get_portlet(
p_provider_id  => p_provider_id
,p_portlet_id   => SERVICES_PORTLET_ID
,p_language     => p_language
);
else
if (services_portlet.is_runnable(
p_provider_id     =>  p_provider_id
,p_reference_path  =>  null)
) then
l_cnt := l_cnt + 1;
l_portlet_list(l_cnt) := get_portlet(
p_provider_id  => p_provider_id
,p_portlet_id   => SERVICES_PORTLET_ID
,p_language     => p_language
);        end if;
...
end get_portlet_list;

4. エディタでservices_portlet.pkbファイルを開きます。

5. showプロシージャを探します。ポートレットを表示する前に、showプロシージャは、セキュリティ・チェックを実行し、現行ユーザーがポートレットの参照を許可されているかどうかを判断します。

procedure show
...
-- Perform a security check
if (not is_runnable(
p_provider_id     =>  p_portlet_record.provider_id
,p_reference_path  =>  p_portlet_record.reference_path)
) then
wwerr_api_error.add(
DOMAIN, SUBDOMAIN,
'securityerr', 'services_portlet.show');
raise wwpro_api_provider.PORTLET_SECURITY_EXCEPTION;    end if;
...
end show;

6. is_runnableファンクションを見つけます。is_runnableには、セキュリティ・チェックが実装されています。この例のセキュリティ・チェックは、きわめて単純です。ユーザーがログインしている(つまりパブリック・セッションではない)場合、ファンクションはtrueを戻し、ポートレットがユーザーに表示されます。独自の目的のために、さらに複雑なセキュリティ・チェックをis_runnableファンクションにコーディングすることもできます。

function is_runnable
(
p_provider_id in integer
,p_reference_path in varchar2
)
return boolean
is
begin
--
-- Portlet security check.  It allows the portlet to be visible
-- if the user is logged on, that is, the current session is not a
-- public session.
--
return wwctx_api.is_logged_on;
end is_runnable;

7. このポートレットをページに表示するのに、ポートレット・リポジトリにまだ登録していない場合は、その追加方法について8.3.2項「プロバイダ・パッケージの実装」の手順を必要に応じて参照してください。

8. ポートレットがリポジトリに表示されたら、ページに追加してテストできます。ポートレットをページに追加するには、『Oracle Fusion Middleware Oracle Portalユーザーズ・ガイド』の指示に従ってください。

8.8 キャッシュを使用したポートレットのパフォーマンスの向上

Oracle Portalでは、PL/SQLポートレットのキャッシュを提供しています。この機能により、PL/SQLポートレットは、Webコンテンツを中間層でキャッシュできるようになります。コンテンツに対する後続のリクエストは、データベースからの有効化の有無に関係なく、キャッシュから取得できるため、データベースのワークロードは軽減されます。

Oracle Portalでは、次の3種類のPL/SQLポートレットのキャッシュを提供しています。

- 有効化ベースのキャッシュ: キー値を比較して、キャッシュのコンテンツがまだ有効かどうかをチェックします。キー値が変更されていない場合、キャッシュされたコンテンツが使用されます。それ以外の場合は、ポータルのノードに対してラウンド・トリップを実行し、ポートレットのコンテンツをフェッチします。

- 有効期限ベースのキャッシュ: ポートレットのレンダリング時に、キャッシュのコンテンツに対して、特定の有効期限を使用します。この形式のキャッシュは、めったに変更されない、またはきわめて定期的(たとえば、毎日業務終了時)に変更されるコンテンツに便利です。

- 無効化ベースのキャッシュ: 最も複雑ですが、最も柔軟性のあるキャッシュ形式です。Oracle Web Cache内のオブジェクトは、明示的に無効化されるまで有効とみなされます。また、無効化ベースのキャッシュを、有効期限ベースまたは有効化ベースのキャッシュのいずれかと組み合せることもできます。

Oracle Portalでは、ユーザーによるページおよびポートレットのパーソナライズがサポートされているため、ページの表示はユーザーによって異なることがあります。Oracle Portalのキャッシュは、URLがすべてのユーザーに対して同じでも、ユーザーごとに異なるコンテンツを使用できるように設計されています。そのため、ポータル・オブジェクトは、ユーザー・レベルまたはシステム・レベルでキャッシュできます。これらのキャッシュは、次のように説明できます。

- ユーザー・レベルのキャッシュ: 特定のユーザーを対象としています。キャッシュ・エントリは、そのユーザー固有のものであり、他のユーザーはアクセスできません。

- システム・レベルのキャッシュ: すべてのユーザーを対象としています。1つのキャッシュ・エントリを、すべてのユーザーが使用できます。システム・レベルのキャッシュに適したコンテンツの例として、ページ・バナーとニュース・ポートレットがあります。

データベース・プロバイダがポートレットに対するリクエストを発行すると、リクエストはポートレットのshowプロシージャに送信されます。このプロシージャは、portlet_runtime_recordをパラメータとして受け入れます。このレコード構造体には、キャッシュを有効にするためにポートレットで検査、設定できるフィールドが含まれます。このレコードのキャッシュ・コントロール・フィールドは次のとおりです。

- caching_key: この値は、このリクエストのETAGヘッダーで伝達され、後続のリクエストでポートレット・プロバイダに戻されます。このフィールドを設定すると、有効化ベースのキャッシュが有効になります。

- caching_period: このフィールドは、有効期限ベースのキャッシュを有効にします。値は、コンテンツがキャッシュに保持される時間(分)です。このモードは、有効化ベースのキャッシュに優先します。このフィールドに値が設定されている場合、caching_keyフィールドは無視されます。

- caching_level: このフィールドは、コンテンツが汎用なのか、特定のユーザー用なのかを定義します。有効な値は、SYSTEMおよびUSERです。

8.8.1 キャッシュの使用

ポートレットのキャッシュを使用するための一般的なモデルは、選択するキャッシュ・タイプによって変わります。選択するキャッシュ・タイプは、ポートレットのコンテンツに大きく左右されます。ポートレットのコンテンツが非常に定期的(たとえば、毎日業務終了時)に変わる場合、通常、有効期限ベースのキャッシュを使用することは理にかなっています。ポートレットのコンテンツが不定期に変わる場合、通常、有効化ベースまたは無効化ベースのキャッシュが最適です。

8.8.1.1 有効化ベースのキャッシュ

有効化ベースのキャッシュを選択した場合の一般的なモデルは次のとおりです。

1. portlet_runtime_recordパラメータのcaching_keyフィールドを設定します。現在のキー値とportlet_runtime_recordパラメータのcaching_keyフィールドの値を比較するチェックを追加します。showプロシージャの初回コール時、キーはNULLであるため、値を設定する必要があります。

2. システム・レベルまたはユーザー・レベルのキャッシュのどちらを使用するかを決定します。それに応じて、portlet_runtime_recordパラメータのcaching_levelフィールドを設定します。

8.8.1.2 有効期限ベースのキャッシュ

有効期限ベースのキャッシュを選択した場合の一般的なモデルは次のとおりです。

1. portlet_runtime_recordパラメータのcaching_periodフィールドに希望するキャッシュ間隔(分)を設定します。

2. システム・レベルまたはユーザー・レベルのキャッシュのどちらを使用するかを決定します。それに応じて、portlet_runtime_recordパラメータのcaching_levelフィールドを設定します。

8.8.1.3 無効化ベースのキャッシュ

無効化ベースのキャッシュを選択した場合の一般的なモデルは次のとおりです。

1. wwpro_api_provider.USE_INVALIDATIONをコールして、Oracle Web Cache用に特別なヘッダーを生成する必要があることをOracle Portalに指示します。

2. システム・レベルまたはユーザー・レベルのキャッシュのどちらを使用するかを決定します。それに応じて、portlet_runtime_recordパラメータのcaching_levelフィールドを設定します。

3. 必要に応じて、有効化ベースまたは有効期限ベースのキャッシュも設定します。

4. 必要に応じて(たとえば、ポートレットがパーソナライズされたときに)ポートレットに無効化ロジックを追加し、wwpro_api_invalidationへの適切なコールを実行します。

8.8.2 キャッシュの構成と監視

キャッシュの構成方法と、パフォーマンスの監視およびチューニング方法は、『Oracle Fusion Middleware Oracle Portal管理者ガイド』を参照してください。

8.8.3 有効化ベースのキャッシュの実装

PDK-PL/SQL (pdkplsql.zip)の..\pdkplsql\pdk\plsql\cacheにあるキャッシュの例に、有効化ベースのキャッシュの実装方法を示します。次に示すこの例を参照すると、ポートレットに有効化ベースのファンクションを実装する方法がわかります。

1. エディタでvalidcache_portlet.pkbファイルを開きます。

2. ファイルの最上部にある、キャッシュ・レベルの定数に対する別名に注意してください。

CREATE OR REPLACE
package body VALIDCACHE_PORTLET
is
-- Caching Constants
CACHE_LEVEL_SYSTEM constant varchar2(10) := 'SYSTEM';
CACHE_LEVEL_USER   constant varchar2(10) := 'USER';

3. showプロシージャを探します。p_portlet_recordが、このプロシージャの入出力パラメータであることに注意してください。

procedure show
(
p_portlet_record   in out     wwpro_api_provider.portlet_runtime_record
)

4. プロシージャのセキュリティ・チェックで、セキュリティ・チェックが失敗した場合、p_portlet_recordのキャッシュ・フィールドはNULLに設定されます。

begin
if (not is_runnable(
p_provider_id      => p_portlet_record.provider_id
,p_reference_path   => p_portlet_record.reference_path)
) then
-- Set it to null so that cache does not get used even if exists
p_portlet_record.caching_level := null;
p_portlet_record.caching_key := null;
raise wwpro_api_provider.PORTLET_SECURITY_EXCEPTION;    end if;

5. その後に、プロシージャはget_cache_keyファンクションをコールして、キャッシュ・キーの値を取得し、一時値に割り当てます。

--
-- CACHE IS VALID?
--
l_cache_key := get_cache_key();

6. showプロシージャから参照されるget_cache_keyファンクションを探します。このファンクションは、ポートレット用のキーを生成します。ポートレットの要件に基づいて、独自のロジックをここに実装できます。

function get_cache_key
return varchar2
is
l_date date;
begin
select sysdate into l_date from  dual;
return trim(substr(to_char(l_date, 'YYYY:MM:DD:HH:MI:SS'),1,18));
exception
when others then
null;
end get_cache_key;

7. showプロシージャに戻ります。コードで、caching_keyおよびcaching_levelの現在の値がportlet_runtime_recordパラメータに含まれていないかチェックする方法に注意します。この同じコードで、caching_keyの値を比較できます。

if p_portlet_record.caching_level = CACHE_LEVEL_SYSTEM then
if l_cache_key is not null then
-- Cache exists for the user, overwrite it
p_portlet_record.caching_level := CACHE_LEVEL_USER;
p_portlet_record.caching_key := l_cache_key;
else
return; -- System cache is still valid.
end if;
elsif p_portlet_record.caching_level = CACHE_LEVEL_USER then
if p_portlet_record.caching_key != l_cache_key then
-- cache has expired. reset it
p_portlet_record.caching_key := l_cache_key;
else
return; -- User cache is good as gold
end if;
elsif p_portlet_record.caching_level is null then
if p_portlet_record.caching_key is not null then
-- Cache does not exists for the user, create it
p_portlet_record.caching_level := CACHE_LEVEL_USER;
p_portlet_record.caching_key := l_cache_key;
else
-- Define a sytem cache. This can happen only once!
-- the first time the portlet is rendered.
p_portlet_record.caching_level := CACHE_LEVEL_SYSTEM;
p_portlet_record.caching_key := 'MY_INITIAL_CACHE_KEY';
end if;
else
p_portlet_record.caching_level := CACHE_LEVEL_SYSTEM;
p_portlet_record.caching_key := 'MY_INITIAL_CACHE_KEY';
end if;

8. このポートレットをページに表示するのに、ポートレット・リポジトリにまだ登録していない場合は、その追加方法について8.3.2項「プロバイダ・パッケージの実装」の手順を必要に応じて参照してください。

9. ポートレットがリポジトリに表示されたら、ページに追加してテストできます。ポートレットをページに追加するには、『Oracle Fusion Middleware Oracle Portalユーザーズ・ガイド』の指示に従ってください。

8.8.4 有効期限ベースのキャッシュの実装

PDK-PL/SQL (pdkplsql.zip)の..\pdkplsql\pdk\plsql\cacheにあるキャッシュの例に、有効期限ベースのキャッシュの実装方法を示します。次に示すこの例を参照すると、ポートレットに有効期限ベースのファンクションを実装する方法がわかります。

1. エディタでexpirycache_portlet.pkbファイルを開きます。

2. ファイルの最上部にある、キャッシュ・レベルの定数に対する別名に注意してください。

CREATE OR REPLACE
package body VALIDCACHE_PORTLET
is
-- Caching Constants
CACHE_LEVEL_SYSTEM constant varchar2(10) := 'SYSTEM';
CACHE_LEVEL_USER   constant varchar2(10) := 'USER';

3. showプロシージャを探します。p_portlet_recordが、このプロシージャの入出力パラメータであることに注意してください。

procedure show
(
p_portlet_record   in out     wwpro_api_provider.portlet_runtime_record
)

4. プロシージャのセキュリティ・チェックで、セキュリティ・チェックが失敗した場合、p_portlet_recordのキャッシュ・フィールドはNULLに設定されます。

begin
if (not is_runnable(
p_provider_id      => p_portlet_record.provider_id
,p_reference_path   => p_portlet_record.reference_path)
) then
-- Set it to null so that cache does not get used even if exists
p_portlet_record.caching_level := null;
p_portlet_record.caching_key := null;
raise wwpro_api_provider.PORTLET_SECURITY_EXCEPTION;    end if;

5. その後に、プロシージャは、次のように、キャッシュ期間の値(分)を一時変数で設定します。

-- Set the Caching Period to one minute
l_cache_period := 1;

6. 次に、コードで、caching_periodの現在の値がyour portlet_runtime_recordパラメータに含まれていないかチェックし、それに応じてcaching_periodを設定する方法に注意します。この同じコードで、caching_periodの値を比較できます。

if p_portlet_record.caching_level = CACHE_LEVEL_SYSTEM then
-- Cache does not exists for the user, create it
p_portlet_record.caching_level := CACHE_LEVEL_USER;
p_portlet_record.caching_period := l_cache_period;
elsif p_portlet_record.caching_level = CACHE_LEVEL_USER then
-- Cache exists for the user, overwrite it
p_portlet_record.caching_period := l_cache_period;
elsif p_portlet_record.caching_level is null then
if p_portlet_record.caching_period  is not null then
-- Cache does not exists for the user, create it
p_portlet_record.caching_level := CACHE_LEVEL_USER;
p_portlet_record.caching_period := l_cache_period;
else
-- Define a sytem cache. This can happen only once!
p_portlet_record.caching_level := CACHE_LEVEL_SYSTEM;
p_portlet_record.caching_period := l_cache_period;
end if;
else -- p_portlet_record.caching_level value is messed up!
p_portlet_record.caching_level := CACHE_LEVEL_SYSTEM;
p_portlet_record.caching_period := l_cache_period;   end if;

7. このポートレットをページに表示するのに、ポートレット・リポジトリにまだ登録していない場合は、その追加方法について8.3.2項「プロバイダ・パッケージの実装」の手順を必要に応じて参照してください。

8. ポートレットがリポジトリに表示されたら、ページに追加してテストできます。ポートレットをページに追加するには、『Oracle Fusion Middleware Oracle Portalユーザーズ・ガイド』の指示に従ってください。

8.8.5 無効化ベースのキャッシュの実装

世界地図を表示するポートレット(map_portlet.pkbとmap_portlet.pks)があるとします。無効化ベースのファンクションをそのポートレットに追加する手順は次のとおりです。

1. showプロシージャで、wwpro_api_provider.use_invalidationへのコールを追加する必要があります。このコールは、ポートレットのコンテンツをOracle Web Cacheでキャッシュする必要があることをOracle Portalに指示します。コンテンツをユーザー・レベルでキャッシュすること、および有効期限ベースのキャッシュも使用する(つまり有効期限1分が設定されている)ことも指定していることに注意してください。

procedure show
...
if (p_portlet_record.exec_mode = wwpro_api_provider.MODE_SHOW) then
p_portlet_record.caching_invalidation :=
wwpro_api_provider.use_invalidation;
p_portlet_record.caching_level := 'USER';
p_portlet_record.caching_period := 1;
...

2. キャッシュを無効化するプロシージャをmap_portlet.pkbファイルに作成します。例:

procedure map_invalidation
(
p_provider_id in number,
p_portlet_id in number,
p_instance_id in varchar2,
p_page_url in varchar2
)
is
begin
wwpro_api_invalidation.invalidate_by_instance
(p_provider_id => p_provider_id,
p_portlet_id =>  p_portlet_id,
p_instance_id => p_instance_id,
p_user => wwctx_api.get_user);
owa_util.redirect_url(p_page_url);
end map_invalidation;

3. showプロシージャで、地図を描画するコードの前にポートレットをリフレッシュするためのリンクを追加します。例:

/* Draw the Refresh Me link */
htp.anchor(
curl => wwctx_api.get_user||
'.map_invalidation?p_provider_id='||p_portlet_record.provider_id||
'&p_portlet_id='||p_portlet_record.portlet_id||
'&p_instance_id='||p_portlet_record.reference_path||
'&p_page_url='||utl_url.escape(
url => p_portlet_record.page_url,
escape_reserved_chars => TRUE),
ctext => wwui_api_portlet.portlet_text(
p_string =>'Refresh Me',
p_level => 1)
);

4. このポートレットをページに表示するのに、ポートレット・リポジトリにまだ登録していない場合は、その追加方法について8.3.2項「プロバイダ・パッケージの実装」の手順を必要に応じて参照してください。

5. ポートレットがリポジトリに表示されたら、ページに追加してテストできます。ポートレットをページに追加するには、『Oracle Fusion Middleware Oracle Portalユーザーズ・ガイド』の指示に従ってください。

8.9 エラー処理の実装

Oracle Portalには、誤った入力をトラップし、重要なエラー・メッセージを戻すための機能があります。内部エラー・スタックは、発生した例外を追跡し、その情報を保持することで管理されます。また、Oracle Portalには、エラーを標準化された方法で提示する一連のAPIが付属しています。

エラー処理サービスは、wwerr_api_errorパッケージおよびwwerr_api_error_uiパッケージを介して使用できます。これらのエラー処理サービスには、次の主要な機能があります。

- エラー・スタック。Oracle Portalでは、エラー・スタックを使用して、エラー・メッセージを管理します。エラーが発生すると、エラー・メッセージがエラー・スタックに送信されます。プロシージャまたはファンクションのコールがネストされるたびに、エラー・スタックですべてのエラー・メッセージを管理します。wwerr_api_error.get_topメソッドを使用すると、一番上のエラー(最新のエラー)のみを取得できます。あるいは、wwerr_api_error.get_errorsファンクションを使用すると、スタックのすべてのエラー・メッセージを取得できます。スタックでは、wwerr_api_error.is_emptyファンクションをコールしてエラーの存在をチェックすることもできます。

- エラー・メッセージ。エラー処理サービスでは、重要なエラー・メッセージを定義する方法を提供しています。独自のエラー・メッセージを定義するには、ネームスペースを定義する必要があります。ネームスペースは次のもので構成されます。

- 名前: エラー名です。

- ドメイン: エラーが発生した製品エリアです。

- サブドメイン: エラーが発生したサブシステムです。

- コンテキスト: エラーが発生したファンクション名です。

ネームスペースは、エラー・メッセージを一意に識別します。識別しない場合は、wwc-0000エラー・メッセージが生成されます。

デフォルト・ドメインには、ポータル(WWC)、アプリケーション(WWV)およびページ・グループ(WWS)があります。各ドメインは、オブジェクト・タイプを定義するサブドメインにさらに分類されます。ポータル・ドメインには、ポートレット、ページおよびドキュメントの各オブジェクト・タイプがあります。アプリケーション・ドメインには、フォーム、メニュー、レポート、チャートなどのオブジェクト・タイプがあります。ページ・グループ・ドメインには、ページ、アイテム、カテゴリ、パースペクティブなどのオブジェクト・タイプがあります。これらの分類に該当しないというエラーを定義する必要がある場合は、エラー用のサブドメインを使用して独自のドメインを定義できます。

- メッセージ・パラメータ。エラー用に作成する他の言語の文字列では、メッセージ用の置換パラメータを使用できます。p1、p2、p3...といったパラメータを使用して置換パラメータをエラー・メッセージに渡すことができます。たとえば、次の文字列の場合を考えます。

(domain='yahoo', subdomain='provider', name='generalerror', string='Error: %1')

次のようにエラーを追加できます。

wwerr_api_error.add(p_domain=>'yahoo',  p_sub_domain=>'provider',
p_name=>'generalerror',  p_context=>'yahoo.show',  p1=> sqlerrm);

- エラー表示。wwerr_api_error_uiパッケージは、Oracele Portalにエラーを表示するための標準的なユーザー・インタフェースを生成するための手段を提供しています。エラー・メッセージは、次の2つの方法で表示できます。

- 全画面ユーザー・インタフェース: これらのエラー・メッセージが全画面モードで表示されます。システムで致命的なエラーや動作を停止させるエラーが発生した場合に、全画面エラーを表示します。

- インライン・ユーザー・インタフェース: これらのエラー・メッセージは、現行のページ自体の内部に表示されます。重大ではないエラーや警告の場合に、インライン・エラーを使用します。

さらに、表示の出力形式(HTML、XMLまたはASCIIテキスト)を選択できます。

8.9.1 エラー処理の使用

一般に、次のようにエラー処理を設定します。

1. エラーの検出時に、wwerr_api_error.addプロシージャを使用して、エラー・メッセージを適切なドメインとサブドメインを組み合せてスタックに追加します。

2. 必要に応じて(たとえば、ルーチンの終了時)、wwerr_api_error_uiプロシージャを使用して、エラー・メッセージを公開します。全画面メッセージを表示するには、希望する出力タイプに応じて、プロシージャshow_html、show_xmlまたはshow_textを使用します。インライン・メッセージを表示するには、希望する出力タイプに応じて、プロシージャshow_inline_html、show_inline_xmlまたはshow_inline_textを使用します。

エラー処理のガイドライン

エラー処理を実装する際は、次の事柄に注意してください。

- 独自のエラー・メッセージを定義している場合、これらのメッセージには独自のエラー・ドメインを使用します。独自のエラー・メッセージには、WWC、WWVまたはWWSドメインを使用しないでください。これらのメッセージを他の言語の表にロードするには、小規模のローダー・スクリプトを作成する必要があります。

- 不必要なエラー・メッセージは避けます。ファンクションで何もしない場合は、エラーではなくnullを戻します。たとえば、プロバイダで他のポートレットすべてに対してcopy_portletプロシージャをコールするので、自分のポートレット用のcopy_portletプロシージャをコーディングしているとします。この特別なポートレット用のcopy_portletプロシージャで何もしない場合は、nullを戻します。エラーを戻すと、ポートレットの機能を不用意に妨害することになります。

- 最大10のエラー・メッセージをスタックに保持できます。10を超えて、wwerr_api_error.addがコールされると、メッセージは無視されます。

- APIは、問題を発見するプログラム的な方法として使用します。このために、ユーザー・インタフェース以外の形式を使用できます。たとえば、プログラムを使用してプロバイダを登録するとき、例外ブロックでは、get_text_stackを使用して、エラー・メッセージを取得し、出力できます。この方法は、デバッグでパブリックAPIをコールする際に役立ちます。というのも、すべてのパブリックAPIが例外用のスタックにエラーを追加するためです。

- 独自のエラー・メッセージ用に他の言語の文字列を必ず生成してください。詳細は、8.11項「多言語ポートレットの作成」を参照してください。

- エラー・メッセージの標準的なユーザー・インタフェースには、前ページに戻るナビゲーション・リンクが用意されています。また、特定のヘルプのURLに対する「ヘルプ」アイコンも含まれます。

8.9.2 エラー処理の追加

PDK-PL/SQL (pdkplsql.zip)の..\pdkplsql\pdk\plsql\svcexにあるサービスの例に、エラー処理の実装方法を示します。次の例を参照すると、ポートレットにエラー処理ファンクションを実装する方法がわかります。

1. エディタでservices_portlet.pkbファイルを開きます。

2. ポートレット定義の定数部で、エラー・メッセージのドメインおよびサブドメインの定義に別名を指定します。

DOMAIN           constant varchar2(30) := 'provider';
SUBDOMAIN        constant varchar2(32) := 'services';
PORTLET_PATH     constant varchar2(256):= 'oracle.portal.pdk.servicesportlet';
PREFNAME_STRING  constant varchar2(30) := 'services_string';
PREFNAME_TITLE   constant varchar2(30) := 'services_title';

3. showプロシージャを探します。このプロシージャは、セキュリティ・チェックを実行し、エラーが発生すると、wwerr_api_error.addをコールしてsecurityerrエラー・メッセージをスタックに送信します。

procedure show
(
p_portlet_record        wwpro_api_provider.portlet_runtime_record
)
is
...
begin
-- Perform a security check
if (not is_runnable(
p_provider_id     =>  p_portlet_record.provider_id
,p_reference_path  =>  p_portlet_record.reference_path)
) then
wwerr_api_error.add(
DOMAIN, SUBDOMAIN,
'securityerr', 'services_portlet.show');
raise wwpro_api_provider.PORTLET_SECURITY_EXCEPTION;
end if;

4. showプロシージャでは、他の種類の実行モードについてもチェックし、無効な表示モードについて適切なエラー・メッセージを生成します。

if (p_portlet_record.exec_mode = wwpro_api_provider.MODE_SHOW) then
...
elsif (p_portlet_record.exec_mode = wwpro_api_provider.MODE_SHOW_EDIT)
...
else
wwerr_api_error.add(DOMAIN, SUBDOMAIN,
'invaliddispmode', 'services_portlet.show');
raise wwpro_api_provider.PORTLET_EXECUTION_EXCEPTION;
end if;

5. 最後に、showプロシージャは、汎用エラー・メッセージを例外ハンドラに実装し、前の条件ではトラップされなかったエラーを捕捉します。

exception
when others then
wwerr_api_error.add(
DOMAIN, SUBDOMAIN,
'generalerr', 'services_portlet.show');
raise wwpro_api_provider.PORTLET_EXECUTION_EXCEPTION;
end show;

6. エラー処理は、save_prefsプロシージャおよびsave_default_prefsプロシージャにも実装されます。これらのプロシージャはエラー・スタックが空かどうかをチェックし、空でない場合は、ポートレットでwwerr_api_error.show_htmlをコールして全画面モードでエラーを表示します。

exception
when INVALID_TEXT_EXCEPTION then
l_information := l_user||'%'||l_time
||'%INVALID_TEXT_EXCEPTION%'||p_string;
l_action      := LOG_FAILED;
wwlog_api.log (p_domain      => DOMAIN,
p_subdomain   => SUBDOMAIN,
p_name        => l_user,
p_action      => l_action,
p_information => l_information,
p_url         => l_url,
p_row_count   => 0,
p_elapsed_time=> l_elapsed_time);
wwerr_api_error.add(DOMAIN, SUBDOMAIN,
'invalid_text', 'services_portlet.save_prefs');
if (not wwerr_api_error.is_empty) then
wwerr_api_error_ui.show_html;
end if;
end save_prefs;

7. このポートレットをページに表示するのに、ポートレット・リポジトリにまだ登録していない場合は、その追加方法について8.3.2項「プロバイダ・パッケージの実装」の手順を必要に応じて参照してください。

8. ポートレットがリポジトリに表示されたら、ページに追加してテストできます。ポートレットをページに追加するには、『Oracle Fusion Middleware Oracle Portalユーザーズ・ガイド』の指示に従ってください。

8.10 イベント・ロギングの実装

Oracle Portalは、トランザクション時に発生したイベントをオブジェクトとともにログに記録できます。これらのログはデータベースに格納されるため、標準的なSQLコールおよびレポート作成ツールを介して使用できます。

ログに記録するイベントや、ユーザー定義のドメインおよびサブドメインに基づいて全面的に編成するイベントを選択できます。ログに記録されたイベントについては、イベント、イベントの開始/停止時間、リモート・ユーザーのホストまたはIPアドレス、ブラウザ・タイプおよび言語に関する情報を表示できます。

イベント・ロギング・サービスは、wwlog_apiパッケージおよびwwlog_api_adminパッケージを介して使用できます。これらのサービスには、次の主要な機能があります。

- イベント・ログは、ポータルの特定の使用を追跡するのに便利です。このような情報を追跡するには、ログ・イベントを作成します。ログ・イベントには、次のもので構成されるネームスペースが必要です。

- 名前: イベント名です。

- ドメイン: イベントが発生した製品エリアです。

- サブドメイン: イベントを生成したサブシステムです。

デフォルト・ドメインには、ポータル(WWC)、アプリケーション(WWV)およびページ・グループ(WWS)があります。各ドメインは、オブジェクト・タイプを定義するサブドメインにさらに分類されます。ポータル・ドメインには、ポートレット、ページおよびドキュメントの各オブジェクト・タイプがあります。アプリケーション・ドメインには、フォーム、メニュー、レポート、チャートなどのオブジェクト・タイプがあります。ページ・グループ・ドメインには、フォルダ、アイテム、カテゴリ、パースペクティブなどのオブジェクト・タイプがあります。イベント自体には、追加、削除、パーソナライズ、非表示、コピー、実行、エクスポートなどのタイプがあります。これらの分類に該当しないというイベントを定義する必要がある場合は、イベント用のサブドメインを使用して独自のドメインを定義できます。

- ログでは、次の2つの方法で情報を追跡できます。

- 間隔ロギング: 実行されたアクションの経過時間(たとえば、ポートレットのレンダリングにかかる時間)を計算します。

- イベント・ロギング: 関心がある単一ステップ・イベントの発生を(たとえば、ユーザーがポートレットをパーソナライズするたび)ログに記録します。

- ログ切替えにより、既存のログ・レコードを保持する期間を定義する切替え間隔を設定できます。データベースに格納されるログ情報は、2つの異なる表を使用します。ログ・レコードは、「グローバル設定」(「管理」タブの「ポータル」サブタブの「サービス」ポートレットからアクセス可能)の「構成」タブの「動作ログ間隔」に入力された値に基づいて消去されます。ログ間隔(日)に達すると、ロギングはデータベースの2つのロギング表(たとえばAとB)で切り替わります。最初、ログはAに書き込まれます。初めてログ間隔に達すると、ログはBに書き込まれます。再びログ間隔に達すると、ログはまたAに書き込まれます。Aは、新しいログ・レコードを格納できるように空にされています。ログ間隔を14(デフォルト設定)に設定すると、ログは14日ごとに切り替わるため、どの時点でも、過去14から28日間のレコードが保持されます。

8.10.1 イベント・ロギングの使用

一般に、イベント・ロギングは次のように設定できます。

1. wwlog_api_admin.add_log_eventを使用して、適切なドメインとサブドメインを組み合せてイベント・オブジェクトを追加します。イベントを追加することで、ユーザーがイベントを監視しているときに呼び出される値のリストや他のユーザー・インタフェースのコンポーネントのリストに、この新しいイベントが確実に表示されます。

2. wwlog_api_admin.add_log_registryを使用して、ログ・イベント・レコードを登録します。ログ・レジストリ・レコードは、ログに記録する予定のイベントを表し、ログに記録する必要があるイベントをフィルタ処理する手段を提供します。

3. コードでstart_logおよびstop_logを使用し、ログに記録するイベントをマークします。あるいは、単一ステップ・イベントのログ情報を入力する場合は、ログ・メソッドをコールしてそのイベントをマークします。

イベント・ロギングのガイドライン

イベント・ロギングを実装する際は、次の事柄に注意してください。

- パフォーマンスを向上させるために、本当に関心があることのみをログに記録します。不要なログ・メッセージが、システムにあふれないようにします。イベントが表示モードでログに記録される場合は、これらのポートレットの複数のインスタンスが、データベースに対して余計にヒットします。

- ドメイン、サブドメインおよびログ・イベントを注意深く選択します。ログAPIを使用する際は、独自のログ・メッセージに、WWC、WWV、WWSなどのOracle Portalドメインを使用しないでください。ドメインおよびサブドメインを階層的に編成すると、ポートレット間で確実に一意になります。他のポートレットで同じドメインまたはサブドメインの使用が発生した場合、それらのログ・メッセージの間に独自のログ・メッセージが散らばって表示されます。

- ログの監視時に値のポップアップ・リストに表示されるログ・イベントを作成します。また、特定のイベントを指定するか、ワイルド・カード(%)を指定した汎用フィルタを使用して、実際にログに記録されるイベントをフィルタ処理するログ・レジストリ・レコードが簡単に作成できます。ログ・レジストリ・レコードの作成とは別に、監視するイベントについてログ・イベントを作成することをお薦めします。この方法で、ユーザー・インタフェースの値のリストに、監視などの追加機能に対するこれらのレコードが表示されます。

- ログの監視が必要なユーザーまたはユーザー・グループに必要な権限を付与します。ユーザーが作成したログは、そのユーザー、ポータル管理者、およびANY_LOGSオブジェクト・タイプに対して編集の権限を持つユーザーが表示できます。

8.10.2 イベント・ロギングの追加

PDK-PL/SQL (pdkplsql.zip)の..\pdkplsql\pdk\plsql\svcexにあるサービスの例に、イベント・ロギングの実装方法を示します。次に示すこの例を参照すると、ポートレットにイベント・ロギング・ファンクションを実装する方法がわかります。

1. エディタでservices_portlet.pkbファイルを開きます。
ポートレット定義の定数部で、ログ・メッセージのドメインおよびサブドメインの定義に別名を指定します。

DOMAIN           constant varchar2(30) := 'provider';
SUBDOMAIN        constant varchar2(32) := 'services';
PORTLET_PATH     constant varchar2(256):= 'oracle.portal.pdk.servicesportlet';
PREFNAME_STRING  constant varchar2(30) := 'services_string';
PREFNAME_TITLE   constant varchar2(30) := 'services_title';

2. save_prefsプロシージャを探します。このプロシージャは、編集モードでテキストおよびポートレット・タイトルをパーソナライズできるパーソナライズ可能な機能を提供します。save_prefsは、これらのパーソナライズをデータベースに格納します。変更を保存する際には、ログにも記録することをお薦めします。したがって、このプロシージャは、ロギング・サービスを実装する理想的な例を示しています。単一ステップ・イベントは、wwlog_api.logを使用してログに記録します。wwlog_api.logの最初のインスタンスは、テキストのパーソナライズ・イベントをログに記録します。2番目のインスタンスは、ポートレット・タイトルのパーソナライズ・イベントをログに記録します。

procedure save_prefs
...
begin
...
if (l_prefs.string_id is null or to_number(l_prefs.string_id) = 0)
then
l_action := LOG_INSERT;
...
else  -- string exists in at least one language so update it
l_action := LOG_UPDATE;
...
end if;
-- Log this transaction
l_information := l_user||'%'||l_time||'%completed%'||p_string;
wwlog_api.log (p_domain      => DOMAIN,
p_subdomain   => SUBDOMAIN,
p_name        => l_user,
p_action      => l_action,
p_information => l_information,
p_url         => l_url,
p_row_count   => l_row_count,
p_elapsed_time=> l_elapsed_time);
...
if (l_prefs.title_id is null or to_number(l_prefs.title_id) = 0)
then
l_action := LOG_INSERT;
...
else
l_action := LOG_UPDATE;
...
-- Log this transaction       l_information := l_user||'%'||l_time||'%completed%'||p_title;
wwlog_api.log (p_domain      => DOMAIN,
p_subdomain   => SUBDOMAIN,
p_name        => l_user,
p_action      => l_action,
p_information => l_information,
p_url         => l_url,
p_row_count   => l_row_count,
p_elapsed_time=> l_elapsed_time);
...
end save_prefs;

3. save_prefsプロシージャでは、例外の発生時にもwwlog_api.logを使用してイベントをログに記録します。

exception
when INVALID_TEXT_EXCEPTION then
l_information := l_user||'%'||l_time
||'%INVALID_TEXT_EXCEPTION%'||p_string;
l_action      := LOG_FAILED;
wwlog_api.log (p_domain      => DOMAIN,
p_subdomain   => SUBDOMAIN,
p_name        => l_user,
p_action      => l_action,
p_information => l_information,
p_url         => l_url,
p_row_count   => 0,
p_elapsed_time=> l_elapsed_time);
...

4. このポートレットをページに表示するのに、ポートレット・リポジトリにまだ登録していない場合は、その追加方法について8.3.2項「プロバイダ・パッケージの実装」の手順を必要に応じて参照してください。

5. ポートレットがリポジトリに表示されたら、ページに追加してテストできます。ポートレットをページに追加するには、『Oracle Fusion Middleware Oracle Portalユーザーズ・ガイド』の指示に従ってください。

8.11 多言語ポートレットの作成

Oracle Portalには、Oracle Portalの多言語ストレージ機能とやり取りするための堅牢な一連のAPIがあります。このストレージ機能は、異なる言語で文字列を格納および取得するためのメカニズムを提供しています。これらのAPIは、ネイティブの多言語機能を抽出し、異なる言語環境をサポートするプロバイダを開発するために開発者に強力なストレージ・メカニズムを提供します。

多言語サービスは、wwnls_apiパッケージを介して使用できます。これらのサービスには、次の主要な機能があります。

- 多言語APIにより、プロバイダは、そのポートレットに表示される文字列について複数の翻訳をロードできます。文字列がロードされると、プロバイダは、必要に応じてAPIをコールして多言語の表から文字列を取得できます。

- コンテキストAPIは、ユーザーの言語およびその言語の適切な翻訳を取得します。コンテキストAPIは、ユーザーの言語環境をブラウザの言語設定から判断します。リクエストされた翻訳が存在しない場合、APIは基本言語の翻訳を戻します。

たとえば、プロバイダのregisterプロシージャでポートレット・タイトルについて英語とフランス語の翻訳をロードしたとします。ポートレットがレンダリングされると、プロバイダの実装では、ポートレット・タイトルの文字列を表から取得し、次の結果が表示されます。

- フランス語文字列のリクエストには、ポートレット・タイトルがフランス語で表示されます。

- 英語文字列のリクエストには、ポートレット・タイトルが英語で表示されます。

- 中国語文字列のリクエストには、中国語の翻訳はロードされていないため、ポートレット・タイトルは英語で表示されます。

8.11.1 多言語サポートの使用

一般に、多言語サポートは次のように設定できます。

1. 使用する各言語に対応する文字列を使用して、文字列定義をデータベースにロードします。このために、ドメイン、サブドメイン、エラー・メッセージ名およびエラー・テキストの組合せを設定して、wwnls_api.add_stringまたはwwnls_api.set_stringをコールします。

2. 希望する言語について、wwnls_api.get_stringを使用し、必要な文字列を取得します。

8.11.2 多言語サポートの追加

多言語サポートを追加する手順は、次のとおりです。

- 8.11.2.1項「言語文字列のロード」

- 8.11.2.2項「言語文字列の取得」

8.11.2.1 言語文字列のロード

言語文字列は、プロバイダのインストールの一部であるスクリプトによってロードできます。このスクリプトは、add_stringおよびset_stringをコールして、異なる言語の対応する文字列を作成します。

Oracle Portalは、ドメイン、サブドメインおよび名前の組合せを使用して、言語文字列を一意に識別します。ドメインとサブドメインにより、文字列の分類方法が提供されます。ドメインとサブドメインは、APIの他のユーザーと競合しない程度に一意である必要があります。

- ドメインは、製品の特定エリアです。ドメインの例には、プロバイダやページ・グループがあります。

- サブドメインは、ドメインのサブシステムです。サブドメインの例には、プロバイダ名(HelloProviderなど)やサブページ名(HelloPageなど)があります。

PDK-PL/SQL (pdkplsql.zip)の..\pdkplsql\pdk\plsql\svcexにあるサービスの例に、多言語サポートの実装方法を示します。次に示すこの例を参照すると、多言語サポート用の文字列をロードする方法がわかります。

1. エディタでservices_seed.sqlファイルを開きます。

2. ドメイン名、サブドメイン名、文字列名、言語および実際の文字列テキストのパラメータを設定したadd_stringコールに注意してください。これは、言語文字列に対する文字列IDを戻します。他の言語で対応する文字列を設定するために、同じパラメータを設定したset_stringがコールされます。

set serveroutput on size 1000000
set define off

declare
l_string_id  integer;
l_person_id  integer;
l_group_id   integer;
begin
...
-- strings for portlet record fields
l_string_id := wwnls_api.add_string(
'provider','services','ptldefname','us','DatabaseServicesPortlet');
wwnls_api.set_string(
'provider','services','ptldefname','d','DatenbankServicesPortlet-d');
l_string_id := wwnls_api.add_string(
'provider','services','ptldeftitle','us','Database Services Portlet');
wwnls_api.set_string(
'provider','services','ptldeftitle','d','Datenbank Services Portlet - d');
l_string_id := wwnls_api.add_string(
'provider','services','ptldefdesc','us','This is the database services
portlet implemented in PL/SQL. It displays 6 show modes.');
wwnls_api.set_string(
'provider','services','ptldefdesc','d','Dies ist das Datenbank Service
Portlet, erstellt in PL/SQL. Es stellt 6 Anzeigemodi dar. - d');
l_string_id := wwnls_api.add_string(
'provider','services','ptldevtmmsg','us','Web Services Portlet Timed
Out.');
wwnls_api.set_string(
'provider','services','ptldevtmmsg','d','Zeitüeberschreitung aufgetreten
in Web Services Portlet. -d');

8.11.2.2 言語文字列の取得

PDK-PL/SQL (pdkplsql.zip)の..\pdkplsql\pdk\plsql\svcexにあるサービスの例に、多言語サポートの実装方法を示します。次に示すこの例を参照すると、多言語サポート用の文字列を取得する方法がわかります。

1. エディタでservices_portlet.pkbファイルを開きます。

2. ポートレット定義の定数部で、言語文字列のドメインおよびサブドメインの定義に別名を指定します。

DOMAIN           constant varchar2(30) := 'provider';
SUBDOMAIN        constant varchar2(32) := 'services';
PORTLET_PATH     constant varchar2(256):= 'oracle.portal.pdk.servicesportlet';
PREFNAME_STRING  constant varchar2(30) := 'services_string';
PREFNAME_TITLE   constant varchar2(30) := 'services_title';

3. get_portlet_infoファンクションを探します。ポートレット・タイトル、名前および説明を移入するための、wwnls_api.get_stringへのコールに注意してください。

function get_portlet_info
(
p_provider_id in integer
,p_language in varchar2
)
return wwpro_api_provider.portlet_record
is
l_portlet  wwpro_api_provider.portlet_record;
begin
l_portlet.id := services_provider.SERVICES_PORTLET_ID;
l_portlet.provider_id := p_provider_id;
l_portlet.language := p_language;
l_portlet.title :=
wwnls_api.get_string(
p_domain       =>  DOMAIN
,p_sub_domain   =>  SUBDOMAIN
,p_name         =>  'ptldeftitle'
,p_language     =>  p_language
);
l_portlet.description :=
wwnls_api.get_string(
p_domain       =>  DOMAIN
,p_sub_domain   =>  SUBDOMAIN
,p_name         =>  'ptldefdesc'
,p_language     =>  p_language
);
l_portlet.name :=
wwnls_api.get_string(
p_domain       =>  DOMAIN
,p_sub_domain   =>  SUBDOMAIN
,p_name         =>  'ptldefname'
,p_language     =>  p_language
);
...

4. services_portlet.pkbファイルの残りの部分を参照し、別の場所でも使用されているwwnls_api.get_stringの他の使用例を調査します。

5. このポートレットをページに表示するのに、ポートレット・リポジトリにまだ登録していない場合は、その追加方法について8.3.2項「プロバイダ・パッケージの実装」の手順を必要に応じて参照してください。

6. ポートレットがリポジトリに表示されたら、ページに追加してテストできます。ポートレットをページに追加するには、『Oracle Fusion Middleware Oracle Portalユーザーズ・ガイド』の指示に従ってください。

8.12 ポートレットのモバイル機器用拡張

この項では、PDK-PL/SQLを使用してポートレットをモバイル機器用に拡張する手順を説明します。この項を読み進める前に、モバイル対応ポートレットの構築に関するガイドライン(8.1.3項「モバイル・ポートレットのガイドライン」)およびPDK-PL/SQLを使用してポートレットを構築する方法(8.2項「PL/SQLジェネレータを使用したPL/SQLポートレットの構築」および8.3項「手動によるPL/SQLポートレットの構築」)についてよく理解しておく必要があります。

モバイル機器のポートレットを正しく構築する手順は、次のとおりです。

1. ポートレット・レコード属性をモバイル出力可能に設定します。モバイル機器からモバイル・ゲートウェイを介して到着するリクエストには、OracleAS Wireless XMLでヘッダーにtext/vnd.oracle.mobilexmlコンテンツ・タイプを使用して応答する必要があります。モバイル対応ポートレットは、このタイプのリクエストを処理し、対応するモバイル・コンテンツを作成できるようにする必要があります。
表8-6に、モバイル・ポートレットに関連するポートレット・レコード属性をリストし、その指定方法について説明します。

表8-6 ポートレット・レコード属性

属性

説明

accept_content_type

ポートレットが作成するコンテンツ・タイプのカンマ区切りのリストを指定します。ポートレットでHTMLおよびOracleAS Wireless XMLの両方のコンテンツを作成できる場合、リストの文字列には次のように指定します。

text/html, text/vnd.oracle.mobilexml

ポートレットでOracleAS Wireless XMLのみを作成できる場合、リストの文字列には次のように指定します。

text/vnd.oracle.mobilexml

mobile_only

ポートレットがモバイル・ページでのみ使用可能かどうかを指定します。TRUEは、ポートレットがモバイル専用で、標準ページ用の「ポートレットの追加」ページには表示されないことを宣言します。FALSEは、ポートレットがモバイルおよび標準の両用で、標準ページとモバイル・ページの両方用として「ポートレットの追加」ページに表示されることを宣言します。ポートレットでOracleAS Wireless XMLのみが作成できる場合にこのフラグをFALSEに設定すると、OracleAS Wireless XMLは自動的にデスクトップ・デバイス(たとえば、普通のパーソナル・コンピュータのWebブラウザ)用のHTMLに変換されます。OracleAS Wireless XMLしか出力しないのに、モバイル・アクセス用のみでなくデスクトップ・アクセス用の標準ページにも表示できるポートレットを、この機能により開発できます。

short_title

ポートレット・タイトルの短いバージョンを入力します。このタイトルは、小さな画面に収まりやすいことから、モバイル機器上で使用されます。短いタイトルを設定しないと、かわりにポートレット・タイトルが使用されます。

has_show_link_mode

ポートレットに対してリンク・モードを実装しているかどうかを示します。すべてのモバイル・ポートレットでリンク・モードを有効にすることをお薦めします。リンク・モードを使用する根拠については、ステップ3で詳しく説明します。

2. ポートレットでは、HTMLとOracleAS Wireless XMLの両方を作成できるようにする場合、実行時に、リクエストがモバイル機器とデスクトップ・デバイスのどちら用であるかを判別できる必要があります。デスクトップ・リクエストの場合、ポートレットはHTML出力を作成する必要があります。モバイル・リクエストの場合は、OracleAS Wireless XML出力を作成する必要があります。リクエスト・タイプを判別するのに、wwctx_api.get_http_accept()が使用できます。これは、リクエスト・タイプを示すHTTP Acceptヘッダーをフェッチします。ポートレットのレスポンスでは、ポートレット・コンテンツを作成するために、MIMEヘッダーをHTTPヘッダーの該当値に設定する必要があります。設定しないと、結果のページがOracle Portalによって構築されたときに、ポートレットのレスポンスが拒否されます。wwctx_api.get_http_accept()を取得するコールが、text/vnd.oracle.mobilexmlで始まる文字列を戻した場合は、モバイル・リクエストであると想定できます。そうでない場合は、デスクトップ・リクエストです。モバイル・リクエストの場合は、MIMEヘッダーをtext/vnd.oracle.mobilexmlに設定する必要があります。デスクトップ・リクエストの場合は、MIMEヘッダーを明示的にtext/htmlに設定してもかまいませんが、これはデフォルト設定なので特にそのように設定する必要はありません。
デスクトップ・リクエストに対してHTMLを作成し、モバイル・リクエストに対してOracleAS Wireless XMLを作成するには、ポートレットのshowプロシージャを次のように実装する必要があります。

procedure show
(
p_portlet_record in out wwpro_api_provider.portlet_runtime_record
)
is
begin
--
-- Does the portal want us to render the portlet contents?
--
if (p_portlet_record.exec_mode = wwpro_api_provider.MODE_SHOW) then
--
-- Is this a mobile request?
--
if owa_util.get_cgi_env('HTTP_ACCEPT') like
wwpro_login.CONTENT_TYPE_MOBILEXML || '%' then
--
-- This is a mobile request for the portlet contents
-- call the mobile show contents procedure
--
render_mobile_show_contents(p_portlet_record);
else
--
-- This is a desktop request for the portlet contents,
-- call the desktop show contents procedure
--
render_desktop_show_contents(p_portlet_record);
end if;
elsif -- check for other show modes, and handle them
...
end show;

どのようなリクエストが来てもOracleAS Wireless XMLしか作成しないようにするには、ポートレットのshowプロシージャを次のように実装する必要があります。

procedure show
(
p_portlet_record in out wwpro_api_provider.portlet_runtime_record
)
is
begin
--
-- Does the portal want us to render the portlet contents?
--
if (p_portlet_record.exec_mode = wwpro_api_provider.MODE_SHOW) then
--
-- This is either a desktop or mobile request for the portlet
-- contents call the show contents procedure to render the
-- OracleAS Wireless XML output
--
render_show_contents(p_portlet_record);
elsif -- check for other modes
...
end show;

OracleAS Wireless XMLを生成するためには、render_show_contentsプロシージャまたはrender_show_mobile_contentsプロシージャに次のような内容を含める必要があります。

...
(
p_portlet_record in out wwpro_api_provider.portlet_runtime_record
)
is
begin
--
-- Set the MIME type to be Oracle9iAS Wireless XML
--
owa_util.mime_header('text/vnd.oracle.mobilexml');
--
-- Output the Oracle9iAS Wireless XML markup
--
htp.p('<SimpleText><SimpleTextItem>');
htp.p('Hello World!');
htp.p('</SimpleTextItem></SimpleText>');
...

注意:

これはモバイル・リクエストなので、MIMEヘッダーはtext/vnd.oracle.mobilexmlに設定されています。OracleAS Wireless XMLマークアップでは、コンテンツをそのままレンダリングするのみで済みます。Oracle Portalにより、コンテンツが完全なOracleAS Wireless XMLドキュメントとして表示されます。<SimpleResult>タグまたは<SimpleContainer>タグは必要ありません。これらのタグは、Oracle Portalによって「戻る」のリンクとともにレンダリングされます。「戻る」のリンクは、モバイル機器上でボタンの1つにデフォルトで割り当てられます。

3. ポートレットでモバイル・レンダリング用にタイトルのパーソナライズを可能にするには、リンク・モードを実装する必要があります。リンク・モードは、モバイル・リクエストに対してのみコールされ、ポートレット・コンテンツへのリンクをレンダリングします。このリンクは、ユーザーが初めてページにナビゲートしたときに、そのページ・コンテンツのメニューに表示されます。ポートレットにリンク・モードが実装されていない場合は、Oracle Portalによって、ポートレット・レコード内の短いタイトルを使用して、デフォルトのリンク・モードがレンダリングされます。リンク・モードは、タイトル以外のものをレンダリングするのにも使用できます。たとえば、株式ポートレットでは、ユーザーのお気に入り株式の株価をレンダリングできます。このようにすれば、ドリルダウンしていかなくても最新の株価を表示できます。

リンク・モードをレンダリングするリンクはOracle Portalによって提供され、ポートレット・レコード内のpage_urlパラメータでポートレットに渡されます。ポートレットは、この動作を拡張することも完全に置き換えることもできます。このリンクがユーザーをOracle Portalから引き離す(Oracle Portalの中間層サーバーのサービスを受けない)ようなURLとして書きなおされた場合、ポートレットはshow_behaviour_styleフィールドをポートレット・レコード内のwwpro_api_provider.EXTERNAL_PORTLETに設定する必要があります。

次の例では、リンク・モードを含むようにshowプロシージャをコーディングする方法を示します。

procedure show
(
p_portlet_record in out wwpro_api_provider.portlet_runtime_record
)
is
begin
--
-- Does the portal want us to render the portlet contents?
--
if (p_portlet_record.exec_mode = wwpro_api_provider.MODE_SHOW) then
--
-- Is this a mobile request?
--
if owa_util.get_cgi_env('HTTP_ACCEPT') like
wwpro_login.CONTENT_TYPE_MOBILEXML || '%' then
--
-- This is a mobile request for the portlet contents,
-- call the mobile show contents procedure
--
render_mobile_show_contents(p_portlet_record);
else
--
-- This is a desktop request for the portlet contents,
-- call the desktop show contents procedure
--
render_desktop_show_contents(p_portlet_record);
end if;
--
-- Does the portal want us to render the LINK mode?
--
elsif (p_portlet_record.exec_mode = wwpro_api_provider.MODE_LINK) then
--
-- This is a mobile request for the portlet link mode,
-- call the mobile link procedure
--
render_mobile_link(p_portlet_record);
elsif -- check for other show modes, and handle them
...
end show;

次の例に、render_mobile_linkプロシージャにリンク・モード用に実装する必要がある内容を示します。特に、MIMEタイプの設定、get_custom_short_titleの使用方法およびOracleAS Wireless XML出力に注目してください。

procedure render_mobile_link
(
p_portlet_record in out wwpro_api_provider.portlet_runtime_record
)
is
l_short_title varchar2(80);
begin
--
-- Set the MIME type to be Oracle9iAS Wireless XML
--
owa_util.mime_header('text/vnd.oracle.mobilexml');
--
-- Get the personalized short title for this portlet instance
-- using the language and reference path held in the portlet
-- record
--
l_short_title := get_custom_short_title(p_portlet_record);
--
-- Output the OracleAS Wireless XML markup
--
if l_short_title is not null then
htp.p('<SimpleHref target="'
|| htf.escape_sc(p_portlet_record.page_url)
|| '">'
|| l_short_title
|| '</SimpleHref>');
else
htp.p('<SimpleHref target="'
|| htf.escape_sc(p_portlet_record.page_url)
|| '">'
|| get_custom_title(p_portlet_record)
|| '</SimpleHref>');
end if;
end render_mobile_link;

DeviceClassヘッダーへのアクセス

DeviceClassヘッダー内の情報を使用すると、モバイル対応ポートレットをさらに容易に作成できます。このヘッダーは、すべてのポートレットにowa_util.get_cgi_env('x-oracle-device.class')を介して送信されます。このヘッダーの値は、ポートレットのOracleAS Wireless XMLレンダリングの複雑度を決定するのに使用できます。たとえば、PDAでは、マイクロブラウザよりもさらに表現の豊かなコンテンツをレンダリングできます。音声レンダリングでは、ボイス・コマンド用の追加タグや音声ファイルへのリンクを対象とすることができます。これらは、テキスト読上げソフトを使用した場合と同様に再生されます。

表8-7に、このヘッダーに利用できる値を示します。

表8-7 DeviceClassヘッダーの値

値

説明

voice

音声アクセス番号をコールする通常の電話など、音声専用デバイスを示します。

microbrowser

WAP電話など、マークアップ・ブラウザをサポートする小型サイズの表示デバイスを示します。

pdabrowser

PalmまたはPocketPCなど、中型サイズの表示デバイスを示します。

pcbrowser

デスクトップ・ブラウザを使用する大型サイズの表示デバイスを示します。

8.13 プログラムを使用したプロバイダの登録

プロバイダを登録するには、ほとんどの場合、8.2.3.2項「データベース・プロバイダの登録」で説明したようにOracle Portalのユーザー・インタフェースを使用します。ただし、場合によっては、ユーザー・インタフェースを使用するのではなく、プログラムを使用してプロバイダを登録できます。この項では、次のようにwwpro_api_provider_registry.register_providerを使用してプロバイダを登録する方法を説明します。

- 8.13.1項「登録の前提条件」

- 8.13.2項「プロバイダ・レコードの入力」

- 8.13.3項「登録の例」

8.13.1 登録の前提条件

wwpro_api_provider_registry.register_providerを使用してプログラムでプロバイダを登録するには、次の前提条件を満たしている必要があります。

- 最初に、8.2.3.1項「データベースへのパッケージのインストール」の説明に従ってプロバイダをインストールする必要があります。

- wwpro_api_provider_registry.register_providerを実行するのに必要な権限を持っている必要があります。これはセキュアなAPIなので、セキュリティ・チェックによって呼出元のユーザーに必要な権限があるかどうかが判断されます。少なくとも、wwsec_api.ANYPROVIDER_PUBLISH権限を持っている必要があります。APIを実行する権限を持っている場合は、wwctx_api.set_contextを使用してOracle Portalセッションを設定する権限も十分に持っていることになります。

注意:

SQL*Plusセッションのデータベース・ユーザーがOracle Portalスキーマの所有者である場合は、デフォルトで、このユーザーがOracle Portalスキーマの所有者になっています。(wwctx_api.set_contextが別のユーザーによって呼び出された場合を除く)。スキーマの所有者には、wwpro_api_provider_registry.register_providerの実行に必要な権限がすでに備わっています。

8.13.2 プロバイダ・レコードの入力

wwpro_api_provider_registry.register_provider APIは、入力としてprovider_recordを必要とします。provider_recordをregister_providerに渡すとき、フィールドのすべてが必要なわけではありません。表8-8に、Webプロバイダ用およびデータベース・プロバイダ用に必要とされるフィールドを示します。フィールドが特定タイプのプロバイダには適用されない場合は、NAと示されています。

表8-8 provider_recordの必須フィールド

フィールド

データベース・プロバイダで必須

Webプロバイダで必須

コメント

name

はい。

はい。

なし。

implementation_style

はい。

はい。

このフィールドは、PL/SQLポートレットの場合、常に次のようになります。

wwpro_api_provider_registry.
DATABASE_IMPL;

implementation_owner

NA。

はい。

このフィールドは、プロバイダ/ポートレットが配置されるスキーマです。

implementation_name

NA。

はい。

データベース・プロバイダを登録する際は、プロバイダの実装パッケージが有効でないと登録に失敗します。

login_frequency

はい。

はい。

このフィールドは、セッション情報を取得する頻度を指定します。

http_app_type

はい。

NA。

外部アプリケーションのWebプロバイダの場合:

wwpro_api_provider_registry.HTTP_APP_TYPE_EXTERNAL

標準のWebプロバイダの場合:

wwpro_api_provider_registry.HTTP_APP_TYPE_PORTAL

http_url

はい。

NA。

なし。

require_url

はい。

NA。

なし。

encryption_key

provider_keyがNULLではない場合は、はい。

provider_keyがNULLの場合は、いいえ。

provider_keyがNULLではない場合は、はい。

provider_keyがNULLの場合は、いいえ。

なし。

8.13.3 登録の例

次のサンプルSQLスクリプトに、wwpro_api_provider_registry.register_providerの使用方法を示します。

set serveroutput on size 1000000
set define on
declare
l_prov_rec     wwpro_api_provider_registry.provider_record;
l_prov_id      integer;
begin
l_prov_rec.name                 := 'CacheProvider';
l_prov_rec.display_name         := 'Cache Provider';
l_prov_rec.timeout              := 10;
l_prov_rec.timeout_msg          := 'The provider timed out';
l_prov_rec.implementation_style := wwpro_api_provider_registry.DATABASE_IMPL;
l_prov_rec.implementation_owner := '&&2';
l_prov_rec.implementation_name  := 'cache_provider';
l_prov_rec.language             := wwctx_api.get_nls_language;
l_prov_rec.enable_distribution  := true;
l_prov_rec.login_frequency      := wwpro_api_provider_registry.LOGIN_
FREQUENCY_NEVER;
l_prov_rec.created_on           := sysdate;
l_prov_rec.created_by           := '&&1';
l_prov_rec.last_updated_on      := sysdate;
l_prov_rec.last_updated_by      := '&&1';
l_prov_id := wwpro_api_provider_registry.register_provider(l_prov_rec);
commit;
dbms_output.put_line('Cache Provider successfully registered');
exception
when others then
dbms_output.put_line('ERROR: Could not register Cache Provider');
dbms_output.put_line('SQLERRM: ' || SQLERRM);
rollback;
end;
/

注意:

プロバイダを登録したら、wwpro_api_provider_registry.refresh_portlet_repositoryまたはOracle Portalのユーザー・インタフェースを使用して、プログラム的にポートレット・リポジトリをリフレッシュすることもできます。

第III部

コンテンツ管理API

第III部の内容は次のとおりです。

- 第9章「コンテンツ管理APIの概要」

- 第10章「コンテンツ管理APIのスタート・ガイド」

- 第11章「単純なコンテンツ管理タスクの実行」

- 第12章「ポータルの拡張」

- 第13章「Portalコンテンツの検索」

- 第14章「多言語コンテンツの作成」

- 第15章「コンテンツのセキュリティの実装」

- 第16章「コンテンツ管理イベント・フレームワークの使用」

9 コンテンツ管理APIの概要

この章では、Oracle Portalに用意されている、精選されたAPIの概要を示します。これらの特別なAPIを使用して、コンテンツ管理タスクを実行するためのコードを作成できます。内容は、次のとおりです。

- 9.1項「概要」

- 9.2項「コンテンツ管理API」

- 9.3項「APIおよびセキュア・ビューへのアクセスの提供」

- 9.4項「APIの使用のガイドライン」

- 9.5項「セキュア・ビューの使用のガイドライン」

- 9.6項「コード・サンプル」

9.1 概要

Oracle Portalは、図9-1に示すOracle Metadata Repository内のスキーマを使用して、ポータル・インスタンスに関連付けられたコンテンツとメタデータを格納します。このスキーマは、コンテンツ・リポジトリと呼ばれることもあります。たとえば、コントリビュータがファイル・アイテムをポータル・ページに追加すると、ファイルは、提供されたメタデータとともにMDS RepositoryのPortalスキーマ内の表にアップロードされます。

図9-1 MDS Repository

MDS RepositoryおよびOracle Portalアーキテクチャの一般的な詳細は、『Oracle Fusion Middleware管理者ガイド』を参照してください。

Oracle Portalには、WebブラウザからMDS RepositoryのPortalスキーマ内のコンテンツを直接管理する上で役に立つツールが多数組み込まれています。ただし、Oracle Portalのブラウザ・ベースのユーザー・インタフェース外の環境でコンテンツ管理が必要になることがあります。

管理が必要となる場合の例を次に示します。

- 製品のユーザー・インタフェースが要件を十分に満たしていない場合、別のユーザー・インタフェースを作成します。作成例は次のとおりです。

- ウィザードのルック・アンド・フィールが独自の企業デザインに合うように変更します。

- カスタム検証機能を追加します。

- カスタム検索フォームまたは検索結果ページを提供します。

- コンテンツとメタデータを一括ロードします。

- 外部アプリケーションおよびコンテンツ管理システムと統合します。

- アイテムをアーカイブします(アイテムのアーカイブ・ページまたはオフライン記憶域への移動など)。

- バージョンを管理します(古いバージョンの削除またはパージ、バージョン数の制限など)。

- 外部ワークフロー・システムと統合します。

コンテンツ管理APIを使用すると、Oracle Portalのユーザー・インタフェースを使用しないでプログラムにより、MDS RepositoryのPortalスキーマと対話できます。詳細は、9.2項「コンテンツ管理API」を参照してください。

また、一連のセキュア・ビューを使用してコンテンツ・リポジトリ内のデータを問い合せることもできます。詳細は、9.2.1項「セキュアなコンテンツ・リポジトリ・ビュー」を参照してください。

9.2 コンテンツ管理API

多くのコンテンツ管理タスク(アイテムの追加、ページの作成など)をプログラムにより実行するために、複数のパブリックAPIが用意されています。

コンテンツ管理用のAPIの大部分は、WWSBR_APIパッケージに含まれています。また、コンテンツ管理タスクを実行するためのコードを書く場合、次のAPIパッケージも役に立ちます。

- WWSRC_APIパッケージ: MDS RepositoryのPortalスキーマのコンテンツを検索するためのAPIが含まれています。

- WWSEC_APIパッケージ: MDS RepositoryのPortalスキーマでコンテンツへのアクセスを制御するためのAPIが含まれています。

- WWCTX_APIパッケージ: 特定のユーザーのセッション・コンテキストを管理するためのAPIが含まれています。

- WWPRO_API_INVALIDATIONパッケージ: Oracle Web Cacheのコンテンツを無効にするためのAPIが含まれています。

注意:

コードにはパブリックAPIのみを使用してください。パブリック以外のAPIの使用はサポートされていません。このため、新しいリリースにアップグレードするとコードが作動しなくなる可能性があります。

これらのパッケージの詳細は、F.1項「サポートされているAPI」を参照してください。サポートされているPL/SQL APIの完全なリストは、Portal Centerの『Oracle Portal PL/SQL API Reference』を参照してください。

http://portalcenter.oracle.com

「Portal Focus Areas」セクションで「Portlet Development」をクリックし、次に、「APIs and References」セクションで「PL/SQL API Reference」をクリックします。

9.2.1 セキュアなコンテンツ・リポジトリ・ビュー

Portalスキーマ内には、多くのコンテンツ・リポジトリ・ビューが用意されています。これらのビューを使用して、コンテンツ・リポジトリに格納されている文書およびアイテムのデータに問い合せることができます。セキュア・ビューのリストは、F.2項「セキュア・ビュー」を参照してください。

このマニュアルで説明するほとんどのコンテンツ管理APIでは、パラメータとしてオブジェクトIDを渡す必要があります。これを行うには、処理対象のオブジェクトIDを知る必要があります。ポータル・オブジェクトのIDを検索するには、セキュアなコンテンツ・リポジトリ・ビューを使用できます。詳細は、10.3項「オブジェクトIDの検索」を参照してください。

注意:

MDS RepositoryのPortalスキーマの他の表およびビューについては、その定義がリリース間で異なることがあるため、これらの表およびビューへの直接アクセスはサポートされていません。

9.2.2 用語

Oracle9iAS Portalリリース1 (3.0.9)のコンテンツ領域用API/ビューとの下位互換性を保つため、APIのプロシージャ/パラメータ名やビュー/列名の多くにはリリース1の用語が使用されています。リリース1の用語と現在の用語との対応については、表9-1が役に立ちます。

表9-1 リリース1の用語と現在の用語の対応

リリース1の用語

現在の用語

コンテンツ領域

ページ・グループ

フォルダ

ページ

ナビゲーション・バー

ナビゲーション・ページ

9.3 APIおよびセキュア・ビューへのアクセスの提供

Portalスキーマは、パブリックAPIおよびセキュア・ビューに対する必要なアクセス権を自動的に保持します。別のスキーマがパブリックAPIおよびセキュア・ビューにアクセスできるようにするには、次のスクリプトを使用します。

ORACLE_HOME/portal/admin/plsql/wwc/provsyns.sql

APIへのアクセスを可能にする手順は、次のとおりです。

1. provsyns.sqlスクリプトが含まれるディレクトリに変更します。

Windows: cd <ORACLE_HOME>\portal\admin\plsql\wwc
Linux/Unix: cd <ORACLE_HOME>/portal/admin/plsql/wwc

2. Portalスキーマの所有者としてSQL*Plusにログインします。例:

sqlplus portal/oracle1

Portalスキーマの所有者としてprovsyns.sqlを実行する必要があります。デフォルトでは、PortalスキーマはPORTALという名前です。管理者はOracle Enterprise Manager 11g Fusion Middleware ControlまたはWLSTコマンドを使用して、ポータル・スキーマ・パスワードを取得できます。ポータル・スキーマ・パスワードを取得するには、『Oracle Fusion Middleware Oracle Portal管理者ガイド』のポータル・スキーマ・パスワードの取得に関する項の手順を実行してください。

3. provsyns.sqlスクリプトを実行します。

SQL>@provsyns.sql <schema>

schemaは、アクセス権限を付与するスキーマの名前です。

ヒント:

provsyns.sqlの実行時には、不足しているファイルに関するメッセージはすべて無視してください。

9.4 APIの使用のガイドライン

このマニュアルで説明するAPIを使用する場合、次の各項で説明するベスト・プラクティスのガイドラインに従う必要があります。

9.4.1 異なるスキーマの使用

コンテンツ管理APIを使用するプロシージャおよびパッケージを作成する場合、Oracle Portalがインストールされている異なるデータベース・スキーマで作成します。Portalスキーマで作成しないでください。Portalスキーマでのプロシージャおよびパッケージの追加作成はサポートされていないので、新しいリリースへのアップグレード時に失われる場合があります。

プロシージャおよびパッケージに使用するスキーマを作成した後、APIおよびセキュアなコンテンツ・リポジトリ・ビューへのアクセス権をスキーマに付与する必要があります。この方法の詳細は、9.3項「APIおよびセキュア・ビューへのアクセスの提供」を参照してください。

9.4.2 定数の使用

すべてのAPIパッケージには、Oracle Portalのオブジェクトおよびメタデータを簡単に参照するための、事前に定義された定数が含まれています。たとえば、WWSBR_APIパッケージには、基本属性(ATTRIBUTE_AUTHORおよびATTRIBUTE_TEXTなど)、生成済アイテム・タイプ(ITEM_TYPE_FILEおよびITEM_TYPE_URLなど)、イメージの位置オプション(ALIGN_BOTTOMおよびALIGN RIGHTなど)の定数が含まれています。コードを堅牢なものにするには、可能なかぎりオブジェクトIDおよび属性値にこれらの定数を使用する必要があります。これにより、実際のIDまたは値が変更されても、定数名が同じであるため、コードは動作し続けます。

各APIパッケージで使用可能な定数の完全なリストは、Portal CenterのOracle Portal PL/SQL APIリファレンスを参照してください。

http://portalcenter.oracle.com

「Portal Focus Areas」セクションで「Portlet Development」をクリックし、次に、「APIs and References」セクションで「PL/SQL API Reference」をクリックします。

9.4.3 キャッシュの無効化

多くのAPIでは、変更の影響を受けるページについてキャッシュの無効化に関するメッセージが自動的に生成されます。このため、ルーチンの最後で常にwwpro_api_invalidation.execute_cache_invalidationをコールし、これらのメッセージを処理する必要があります(この方法の例は、例11-3を参照してください)。このプロシージャをコールしない場合、影響を受けるページのキャッシュをその他の方法で無効化しないかぎり、変更内容は表示されません。

execute_cache_invalidationは複数回コールする必要はありません。たとえば、1つのループ内で複数のアイテムを追加または更新する場合は、ループが完了した時点でexecute_cache_invalidationをコールします。

9.4.4 コミットの発行

各コンテンツ管理APIではコミットを発行しません。ただし、ブラウザ・セッションからPortalサービスを介してAPIをコールする場合、Portalサービスは、ブラウザに制御を返す前に自動コミットを実行します。

また、wwpro_api_invalidation.execute_cache_invalidation APIもコミットを発行します。外部環境(SQL*PlusまたはWebプロバイダなど)からAPIをコールするときに、キャッシュの無効化を処理する前にコミットする必要がある場合、コード内でコミット文を明示的に発行する必要があります。同様に、ロールバックする必要がある場合も、execute_cache_invalidationをコールする前に文を明示的に発行する必要があります。

9.4.5 CMEFグローバル変数のリセット

コンテンツ管理APIをコンテンツ管理イベント・フレームワーク(CMEF)とともに使用している場合、各APIコールの前または後にCMEFグローバル変数を確実にリセットする必要があります。

ユーザーがこのユーザー・インタフェースを使用して操作を実行する場合、Oracle Portalは、様々なグローバル変数を使用して、ログに記録するCMEFメッセージを設定します。各操作後に、これらのグローバル変数は次の操作に備えて自動的にリセットされます。APIを使用してポータル操作を実行する場合、これらのグローバル変数は自動リセットされません。このため、CMEFメッセージが現在ログに記録されていることを確認するには、各APIコールの前または後にCMEFグローバル変数wwsbr_api.clear_cmef_context APIをコールしてCMEF変数を明示的にリセットする必要があります。

たとえば、APIを使用してページ上で複数のアイテムを作成する場合、各add_itemコールの間にclear_cmef_context APIをコールする必要があります(例9-1)。

例9-1 clear_cmef_context APIのコール

...
l_new_item_master_id1 := wwsbr_api.add_item(
p_caid              => l_caid,
p_folder_id         => l_folder_id,
...
);
wwsbr_api.clear_cmef_context;
l_new_item_master_id2 := wwsbr_api.add_item(
p_caid              => l_caid,
p_folder_id         => l_folder_id,
...
);
wwsbr_api.clear_cmef_context;
...

CMEFの詳細は、第16章「コンテンツ管理イベント・フレームワークの使用」を参照してください。

9.4.6 事前定義済の例外の使用

APIパッケージには、事前に定義された多くの例外が含まれています。コンテンツ管理APIを使用してコーディングする場合、すべてのエラーを捕捉するためにWHEN OTHERS例外を使用するのではなく適切な事前定義済の例外を含めることをお薦めします。このことには、コードによって生成されるエラー・メッセージが実際の問題をより明確に示すことができるという利点もあります。例9-2は、wwsbr_api.set_attribute APIをコールするときに含めることができる例外をいくつか示しています。

例9-2 事前定義済の例外の使用

begin
wwsbr_api.set_attribute(
p_site_id           => 37,
p_thing_id          => 8056,
p_attribute_site_id => wwsbr_api.SHARED_OBJECTS,
p_attribute_id      => wwsbr_api.ATTRIBUTE_TITLE,
p_attribute_value   => 'New Display Name'
);
-- Process cache invalidation messages.
wwpro_api_invalidation.execute_cache_invalidation;
exception
when wwsbr_api.ITEM_NOT_FOUND_ERROR then
dbms_output.put_line('Item does not exist');
when wwsbr_api.ATTRIBUTE_NOT_FOUND then
dbms_output.put_line('Attribute does not exist');
when wwsbr_api.ITEM_NOT_FOR_UPDATE then
dbms_output.put_line('Cannot update an item with a status of Rejected, Deleted or Marked for Delete');
when wwsbr_api.NOT_AUTHORIZED_USER then
dbms_output.put_line('User trying to update the item is not the current user or the user who checked the item out');
when wwsbr_api.EDIT_CUSTOM_ATTR then
dbms_output.put_line('Error while trying to update a custom attribute');
when OTHERS then
dbms_output.put_line('Error '||to_char(sqlcode)||': '||sqlerrm);
end;
/

ヒント:

事前定義済の例外を使用する場合、これが含まれているパッケージ名(wwsbr_api.PAGE_NOT_FOUNDなど)を必ず含めるようにしてください。

各APIパッケージで使用可能な例外の完全なリストは、Portal Centerの『Oracle Portal PL/SQL API Reference』を参照してください。

http://portalcenter.oracle.com

「Portal Focus Areas」セクションで「Portlet Development」をクリックし、次に、「APIs and References」セクションで「PL/SQL API Reference」をクリックします。

9.4.7 オブジェクトの命名

ページ・グループおよびページ・グループ・オブジェクトを作成する場合、オブジェクトに対して一意の内部名(p_name)を指定します。内部名は、次の規則に従う必要があります。

- 長さは60文字以内にします。

- 空白またはアンダースコア文字(_)以外の特殊文字を含めません。

9.5 セキュア・ビューの使用のガイドライン

このマニュアルで説明するセキュア・ビューを使用する場合、次の各項で説明するベスト・プラクティスのガイドラインに従う必要があります。

注意:

このリリースでは、リポジトリのドキュメント表のビューはサポートされていません。ドキュメント表のセキュア・ビューは、将来のリリースで予定されています。

9.5.1 主キーの識別

ほとんどのオブジェクトの主キーには、オブジェクトID、ページ・グループID (caid)および言語が含まれます。ビュー間を結合する場合、JOIN句で常にこれらの列を使用します。例9-3は、アイテムをページに結合するときのJOINを示します。

例9-3 ページへのアイテムの結合

select ...
from wwsbr_all_items i,
wwsbr_all_folders p
where i.folder_id = p.id
and i.caid = p.caid
and i.language = p.language

9.5.2 翻訳可能オブジェクトの問合せ

オブジェクトが翻訳可能である(翻訳が可能なページ・グループ内にオブジェクトがあり、そのキーに言語が含まれる)場合、次の規則に従う必要があります。

- オブジェクト(つまり、その現行バージョン)を翻訳する場合は、翻訳が入る行を作成します。現在のセッション言語の行を選択するには、言語列の値をファンクションwwctx_api.get_nls_language()と比較します。

- オブジェクトを翻訳しない場合は、ページ・グループのデフォルト言語の行を選択します。

例9-4では、特定のページ・グループ内のすべてのページについて、翻訳されたページ表示名を選択しています。

例9-4 翻訳されたページ表示名の選択

select p.display_name title
from wwsbr_all_folders p
where p.caid = 53
and (p.language = wwctx_api.get_nls_language -- The current language.
or (exists -- A row for the page in the page group default language.
(select pg.id
from wwsbr_all_content_areas pg
where pg.id = p.caid
and pg.default_language = p.language
)
and not exists -- A row for the page in the current language.
(select p2.id
from wwsbr_all_folders p2
where p2.id = p.id
and p2.language = wwctx_api.get_nls_language
)
)
)
/

ヒント:

現在のセッション言語を参照するPL/SQLルーチンを作成する場合、wwctx_api.get_nls_languageを1回コールし、これを変数に格納します。APIを複数回コールするのではなく次のSQL文の変数を参照すると、より効率的に実行されるコードを作成できます。

9.5.3 現行ユーザーのデータの選択

現行ユーザーのデータを選択するには、ファンクションwwctx_api.get_userを使用します。例9-5では、現行ユーザーによって作成されたアイテムを選択しています。

例9-5 現行ユーザーによって作成されたアイテムの選択

declare
l_user varchar2(60);
...
begin
...
l_user := wwctx_api.get_user;
select ...
from wwsbr_all_items
where creator = l_user
...
end;
/

9.6 コード・サンプル

次の数章で示すコード・サンプルは、コンテンツ管理とコンテンツ管理APIの使用方法の例をいくつか示すことを目的としています。これらのサンプル内では、すべてのAPIが使用されているわけではなく、また、APIで使用可能なすべてのパラメータ、定数、例外などが使用されているわけではありません。

Oracle Portalで使用可能なパブリックAPI、およびそのパラメータ、定数、例外などの完全なリストは、Portal Centerの『Oracle Portal PL/SQL API Reference』を参照してください。

http://portalcenter.oracle.com

「Portal Focus Areas」セクションで「Portlet Development」をクリックし、次に、「APIs and References」セクションで「PL/SQL API Reference」をクリックします。

これらの例は、SQL*Plusから実行するものとして作成されています。Portalサービスなど、他の環境から実行する場合は、コードを実行するコンテキストに応じて変更してください。

翻訳を扱う例(第14章「多言語コンテンツの作成」を除く)では、言語コンテキストが操作対象のページ・グループのデフォルト言語に設定されていることを前提としています。これにより、すべてのSQL文のWHERE句を簡略化できます。オブジェクトには常にデフォルト言語の翻訳があるため、問合せにより、該当する単一行が戻されます。

言語コードに関するこの前提がコードに当てはまらない場合は、9.5.2項「翻訳可能オブジェクトの問合せ」を参照してください。この項には、WHERE句を拡張し、特定の言語コンテキストで複数の翻訳が存在するケースや翻訳が存在しないケースに対応する方法の例が示されています。

10 コンテンツ管理APIのスタート・ガイド

この章では、Oracle Portal付属のコンテンツ管理APIを使用する前に、知っておくと役に立つと思われるタスクや概念について説明します。内容は、次のとおりです。

- 10.1項「セッション・コンテキストの設定」

- 10.2項「APIパラメータ」

- 10.3項「オブジェクトIDの検索」

10.1 セッション・コンテキストの設定

コンテンツ管理APIおよびセキュア・ビューでは、特定のポータル・ユーザーとして実行するファンクションにコンテキストが設定されていることを前提としています。ブラウザ・セッション(データベース・プロバイダまたはPL/SQLアイテムなど)内からAPIをコールする場合、現在ポータルにログインしているユーザーに対して、コンテキストが自動的に設定されます。Webプロバイダまたは外部アプリケーション(SQL*PlusまたはPortalサービス)からAPIをコールする場合、wwctx_api.set_context APIを使用してコンテキストを特定のユーザーに設定する必要があります。

このAPIを使用して、アサートされるユーザーのセッションを確立する前に、ポータルがOracle Application Server Single Sign-On Serverで検証できるユーザー名およびパスワードを提供することにより、アプリケーションはIDをアサートできます。パスワードの無効などが原因でアサーションが失敗した場合は、例外が発生します。

例10-1では、パスワードwelcome1を持つユーザーJOE.BLOGSに対してコンテキストを設定します。

例10-1 セッション・コンテキストの設定(set_context API)

declare
p_user_name varchar2(60) := 'JOE.BLOGGS';
p_password  varchar2(60) := 'welcome1';
p_company   varchar2(60) := null;
begin
wwctx_api.set_context(p_user_name,p_password,p_company);
end;
/

10.2 APIパラメータ

- 次のパラメータはページ・グループIDを参照します。

- p_site_id

- p_siteid

- p_caid

これらのパラメータ名は、下位互換性を確保するために変更されておらず、最新の用語を使用する場合でも変更されることはありません。詳細は、9.2.2項「用語」を参照してください。

- 次のパラメータはページIDを参照します。

- p_folder_id

- p_id

これらのパラメータ名は、下位互換性を確保するために変更されておらず、最新の用語を使用する場合でも変更されることはありません。詳細は、9.2.2項「用語」を参照してください。

- 1つのアイテムには2つのIDがあります。アイテムの各バージョンは、すべて同じマスター・アイテムID (GUID)を持ちます。ただし、アイテムの新しいバージョンを作成する場合、アイテムの個々のバージョンを一意に識別する独自のIDが割り当てられます。一部のAPIでは、アイテムを識別するためにマスター・アイテムID (p_master_item_id)のみが必要とされます。ただし、処理するアイテムの個々のバージョンも認識する必要があるAPI (modify_itemなど)もあります。この場合、一意のアイテムID (p_item_id)を渡す必要があります。一部のAPIでは、アイテムIDはp_thing_idとして参照されます。

- ほとんどのオブジェクトの主キーには、実際のオブジェクトのIDと、このオブジェクトが属しているページ・グループのIDが含まれます。パラメータで既存のオブジェクトを参照する場合、オブジェクトIDとページ・グループIDの両方を参照する必要があります。参照先オブジェクトのページ・グループは、参照元オブジェクトのページ・グループまたは共有オブジェクトのページ・グループのどちらかと同じである必要があります。たとえば、アイテムを追加する場合、アイテム・タイプ(ファイル、テキスト、イメージなど)を指定する必要があります。これを行うには、アイテム・タイプID (p_type_id)およびアイテム・タイプが含まれるページ・グループのID (p_type_caid)を渡す必要があります。

10.3 オブジェクトIDの検索

ほとんどのコンテンツ管理APIでは、パラメータにオブジェクトIDを渡す必要があります。これを行うには、処理対象のオブジェクトIDを知る必要があります。このIDを取得するには、セキュアなコンテンツ・リポジトリ・ビューを使用します。

10.3.1 ページ・グループIDの検索

ほとんどのコンテンツ管理APIには、パラメータの1つとしてページ・グループIDが含まれています。たとえば、add_folder APIを使用してページを作成する場合、p_caidパラメータを使用して、ページを作成するページ・グループのIDを指定する必要があります。例10-2は、このIDを検索するために使用できる問合せを示します。

例10-2 ページ・グループIDの検索

select id "Page Group ID"
from wwsbr_all_content_areas
where name = '&pagegroup'
and language = '&language'
/

例10-3は、ファンクションでこの問合せを使用する方法を示します。

例10-3 ページ・グループIDを検索するためのファンクション

create or replace function get_page_group_id (p_name in varchar2) return number is
l_page_group number;
l_language   varchar2(30);
begin
l_language := wwctx_api.get_nls_language;
select id
into l_page_group
from wwsbr_all_content_areas
where name = p_name
and language = l_language;
return l_page_group;
exception
...
end;
/

10.3.2 ページIDの検索

コンテンツ管理APIを使用してページおよびアイテムを処理する場合、処理対象のページIDを知る必要があります。たとえば、delete_page APIを使用してページを削除する場合、ページIDによって削除対象のページを指定する必要があります。例10-4は、ページが属しているページ・グループのIDがわかっている場合にページIDを検索する方法を示します。

例10-4 既知のページ・グループ内でのページIDの検索

select id "Page ID"
from wwsbr_all_folders
where name = '&page'
and caid = 53
and language = '&language'
/

特定のページが属しているページ・グループのIDがわからない場合があります。例10-5は、ページのIDとこのページが属しているページ・グループを検索する方法を示します。

例10-5 ページおよびページ・グループ名がわかっている場合のページとページ・グループのIDの検索

column 'Page Group Name' format a25;
column 'Page Name' format a25;
select f.caid "Page Group ID",
c.name "Page Group Name",
f.id   "Page ID",
f.name "Page Name"
from wwsbr_all_content_areas c,
wwsbr_all_folders f
where f.name = '&page'
and c.id = f.caid
and c.name = '&pagegroup'
and c.language = '&language'
and c.language = f.language
/

10.3.3 リージョンIDの検索

add_item APIを使用してアイテムをページに追加する場合、アイテムを配置するリージョンのIDを知る必要があります。アイテムを追加できるのは、コンテンツを追加できるよう設定されたアイテム・リージョンに対してのみです。例10-6は、特定のページに挿入可能なリージョンのIDおよびタイプを検索する問合せを示します。この情報を使用して、新しいアイテムを配置するのに適したページ内リージョンのIDを選択できます。

例10-6 特定のページに挿入可能なリージョンのIDおよびタイプの検索

select distinct r.id "Region ID",
r.type "Type"
from wwsbr_all_content_areas c,
wwsbr_all_folders f,
wwsbr_all_folder_regions r
where f.name = '&page'
and c.name = '&pagegroup'
and c.id = f.caid
and f.id = r.folder.id
and f.caid = r.folder.caid
and r.allow_content = 1
and c.language = '&language'
and c.language = f.language
and (f.language = r.language
or r.language is null)
/

10.3.4 アイテムIDの検索

例10-7は、WWSBR_ALL_ITEMSビューを問い合せてアイテムIDを検索する方法を示します。

例10-7 マスター・アイテムIDを指定したアイテムの現行バージョンIDの検索

select id
from wwsbr_all_items
where masterid = 513
and caid = 53
and active = 1
and is_current_version = 1
and language = '&language'
/

現在公開されているアイテムを問い合せるときに行が重複しないようにするには、常にLANGUAGE、ACTIVE (active=1)およびIS_CURRENT_VERSION (is_current_version=1)列を含めます。例10-8は、特定のページ(folder_id=1)および特定のページ・グループ(caid=75)にあるアイテムをすべて選択する方法を示します。

例10-8 アイテムIDの検索

select i.display_name title, i.id latestversion
from wwsbr_all_items i
where i.folder_id = 1
and i.caid = 75
and i.active = 1
and i.is_current_version = 1
and (i.language = '&language' -- The current session language.
or (    exists -- A row for the item in the page group default language.
(select pg.id
from wwsbr_all_content_areas pg
where pg.id = i.caid
and pg.default_language = i.language
)
and not exists -- A row for the item in the current language.
(select i2.id
from wwsbr_all_items i2
where i2.id = i.id
and i2.language = '&language'
and i2.active = i.active
and i2.is_current_version = i.is_current_version
)
)
)
order by i.id
/

11 単純なコンテンツ管理タスクの実行

この章では、Oracle Portal付属のAPIを使用して単純なコンテンツ管理を実行する方法について説明します。内容は、次のとおりです。

- 11.1項「ページ・プロパティの編集」

- 11.2項「コンテンツの編集」

- 11.3項「コンテンツの再編成」

- 11.4項「コンテンツのコピー」

- 11.5項「コンテンツの削除」

この章で説明する各APIの詳細は、次に示すPortal Centerの『Oracle Portal PL/SQL API Reference』を参照してください。

http://portalcenter.oracle.com

「Portal Focus Areas」セクションで「Portlet Development」をクリックし、次に、「APIs and References」セクションで「PL/SQL API Reference」をクリックします。

ヒント:

Webブラウザまたは外部アプリケーションからAPIをコールする場合、最初にセッション・コンテキストを設定する必要があります。詳細は、10.1項「セッション・コンテキストの設定」を参照してください。

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

ページ・プロパティの編集手順は次のとおりです。

1. WWSBR_USER_PAGESビューを問い合せてページ・レコードを移入します。

2. 更新する必要があるプロパティを変更します。

3. 更新されたページ・レコードをmodify_folder APIに渡します。

更新できるページ・レコード内のプロパティは表11-1のとおりです。

表11-1 編集可能なページ・レコード・プロパティ

プロパティ

データ型

説明

NAME

VARCHAR2(60)

ページの名前。この名前はパスに基づくURLで使用されます。

TITLE

VARCHAR(256)

ページの表示名またはタイトル。

SETTINGSSETID

NUMBER

ページによって使用されるスタイルのID。

SETTINGSSETSITEID

NUMBER

ページによって使用されるスタイルのページ・グループID。

ISPUBLIC

NUMBER(1)

ページがパブリック・ユーザーから参照可能であることを示します。有効な値は次のとおりです。

- 0 - 非公開

- 1 - 公開

IMAGE

VARCHAR2(350)

6001.JPGなど、ページに関連付けられたイメージの一意のドキュメント名。

ROLLOVERIMAGE

VARCHAR2(350)

6001.JPGなど、ページに関連付けられた反転イメージ、またはタブのアクティブでないタブ・イメージの、一意のドキュメント名。

TITLEIMAGE

VARCHAR2(350)

6001.JPGなど、タブのアクティブなタブ・イメージの一意のドキュメント名。

LEADER

VARCHAR2(256)

ページ連絡先の電子メール・アドレス。

DESCRIPTION

VARCHAR2(2000)

ページの説明。

CREATEDATE

DATE

ページの作成日付。

CREATOR

VARCHAR2 (256)

ページ作成者のユーザー名。

HAVEITEMSECURITY

NUMBER(1)

アイテム・レベル・セキュリティがページに対して有効になっているかどうかを示します。有効な値は次のとおりです。

- 0 - ILSが無効

- 1 - ILSが有効

ITEMVERSIONING

VARCHAR2(30)

ページのアイテム・バージョニングのレベルを示します。有効な値は次のとおりです。

- versionnone - バージョニングなし

- versionsimple - シンプル・バージョニング

- versionaudit - 監査バージョニング

TOPICID

NUMBER

ページに割り当てられたカテゴリのID。

TOPIC_SITEID

NUMBER

ページに割り当てられたカテゴリのページ・グループID。

VALUE

VARCHAR2(2000)

PL/SQLページの場合、PL/SQLコード。

JSPページの場合、JSPソースのドキュメント名。JSPページでは、この値は変更しないでください。

IS_PORTLET

NUMBER(1)

ページがポートレットとして公開されているかどうかを示します。有効な値は次のとおりです。

- 0 - ポートレットではない

- 1 - ポートレット

PLSQL_EXECUTOR

VARCHAR2(30)

PL/SQLタイプのページの場合、PL/SQLコードの実行に使用されるデータベース・スキーマ。有効な値は次のとおりです。

- $PUBLIC$

- $CREATOR$

- <データベース・ユーザー名>

KEYWORDS

VARCHAR2(2000)

ページのキーワード。

IS_READY

NUMBER(1)

ページの作成が完了していることを示します。有効な値は次のとおりです。

- 1 - ページは作成完了済

INHERIT_PRIV

VARCHAR2(200)

このページが権限を継承するページ。次の形式を使用します。

<page group id>/<page id>

CACHE_MODE

NUMBER(1)

ページのキャッシュ・モード。有効な値は次のとおりです。

- 2 - キャッシュしない

- 1 - ページ定義のみをキャッシュ

- 0 - ページ定義とコンテンツをx分間キャッシュ

- 4 - システム・レベルでのみページ定義をキャッシュ

- 3 - ページの定義およびコンテンツをシステム・レベルでx分間キャッシュ

CACHE_EXPIRES

NUMBER(38)

分単位のキャッシュ期間。

ALLOW_PAGE_STYLE

NUMBER(1)

テンプレートに対して、ページで別のスタイルを使用できるかどうかを示します。有効な値は次のとおりです。

- 1 - ページで別のスタイルを使用可能

ALLOW_PAGE_ACL

NUMBER(!)

テンプレートに対して、ページで様々なアクセス設定を持てるかどうかを示します。有効な値は次のとおりです。

- 1 - ページで様々なアクセス設定を使用可能

INIT_JSPFILE

VARCHAR2(256)

JSPページの場合、ページのJSPソースがJARまたはWARファイルのときの初期JSPファイル。

UI_TEMPLATE_ID

NUMBER(38)

HTMLページ・スキンのID。

TEMPLATE_ISPUBLIC

NUMBER(1)

テンプレートが使用可能かどうかを示します。有効な値は次のとおりです。

- 1 - テンプレートは使用可能

CONTAINER_ID

NUMBER

コンテナ・ページのID。

DEFAULT_ITEM_REGION_ID

NUMBER

ページのデフォルトのアイテム・リージョンのID。

DEFAULT_PORTLET_REGION_ID

NUMBER

ページのデフォルトのポートレット・リージョンのID。

ITEMTYPE_INHERIT_FLAGS

NUMBER(1)

WebDAVの場合、デフォルトのアイテム・タイプが親ページから継承されているかどうかを示します。有効な値は次のとおりです。

- 7 - すべてのアイテム・タイプを親ページから継承

- 0 - すべてのタイプをこのページ上で指定

REGFILE_ITEMTYPE

RAW(32)

WebDAVの場合、標準ファイルのデフォルト・アイテム・タイプのGUID。

ZIPFILE_ITEMTYPE

RAW(32)

WebDAVの場合、ZIPファイルのデフォルト・アイテム・タイプのGUID。

IMAGEFILE_ITEMTYPE

RAW(32)

WebDAVの場合、イメージ・ファイルのデフォルト・アイテム・タイプのGUID。

DISPLAYINPARENT

NUMBER(1)

ページが親ページのサブページ・リージョンに表示されるかどうかを示します。有効な値は次のとおりです。

- 1 - 親ページのサブページ・リージョンにページを表示

SEQ

NUMBER

親ページのサブページ・リージョンでのページの順序。

ALPHABETICAL_SORT

NUMBER(1)

サブページがアルファベット順に表示されることを示します。有効な値は次のとおりです。

- 1 - アルファベット順にサブページを表示

ITEM_PAGE_ID

NUMBER(38)

アイテム・テンプレートのID。

ITEM_PAGE_SITE_ID

NUMBER(28)

アイテム・テンプレートのページ・グループID。

ITEM_PAGE_TABSTRING

VARCHAR2(512)

アイテム・テンプレートのタブ文字列。次の形式を使用します。

<tab name>:<sub tab name>:...:<sub tab name>

INHERIT_ITEM_PAGE

NUMBER(1)

アイテム・テンプレート専用で、アイテムが親ページのアイテム・テンプレートを継承することを示します。有効な値は次のとおりです。

- 1 - 親ページのアイテム・テンプレートを継承

ALLOW_ITEM_PAGE_OVERRIDE

NUMBER(1)

アイテム・テンプレート専用で、アイテムが独自のアイテム・テンプレートを持てることを示します。有効な値は次のとおりです。

- 1 - ページ上のアイテムに独自のアイテム・テンプレートを使用可能

HAS_INPLACE_ITEM

NUMBER(1)

ページまたはタブにプレースホルダ・アイテムがあるかどうかを示します。有効な値は次のとおりです。

- 1 - プレースホルダ・アイテムあり

TIMEOUT

NUMBER

ポートレットをフェッチするために使用される制限時間(秒単位)。

ユーザーは、プロパティを編集するにはそのページに対する「管理」権限が必要です。

翻訳可能な各ページ属性をmodify_folderで更新すると、セッションの言語設定で設定されている翻訳が更新されます。したがって、すべての翻訳可能な属性について必ず正しい値で翻訳を更新するには、最初に同じ言語の各ページ属性を問い合せる必要があります。

例11-1に、modify_folder APIを使用してページの表示名の英語翻訳を編集する方法を示します。

例11-1 ページ・プロパティの編集

declare
l_page     wwsbr_api.page_record;
begin
wwctx_api.set_nls_language(
p_nls_language => wwnls_api.AMERICAN
);
select *
into l_page
from   <schema>.wwsbr_user_pages
where  siteid = 33
and  id = 1
and  language = wwnls_api.AMERICAN;
l_page.title := 'New Page Display Name';
wwsbr_api.modify_folder(
p_page => l_page
);
-- Process cache invalidation messages.
wwpro_api_invalidation.execute_cache_invalidation;
exception
...
end;
/

p_page: 変更するページのページ・レコードです。

schema: Portalスキーマ(Oracle Portalがインストールされているスキーマ)です。

11.2 コンテンツの編集

この項には、次の例が記載されています。

- 11.2.1項「アイテム属性の設定」

- 11.2.2項「アイテムの編集」

- 11.2.3項「アイテムのチェックアウトおよびチェックイン」

- 11.2.4項「バージョン・コントロールの使用」

注意:

アイテムを編集する場合、コードで行われる変更が他のユーザーによって上書きされないよう、最初にアイテムをチェックアウトすることをお薦めします。編集の完了後は忘れずにアイテムをチェックインしてください。アイテムのチェックアウトおよびチェックインについては、11.2.3項「アイテムのチェックアウトおよびチェックイン」を参照してください。

11.2.1 アイテム属性の設定

アイテムに特定の属性を設定する場合には、set_attribute APIを使用します。このAPIは、アイテムの特定バージョンの属性値を更新します。指定された値は、属性のデータ型に準拠しているかどうか検証されます。このAPIを使用して基本属性(表11-2を参照)またはカスタム属性の値を設定できます。却下されたアイテム、削除としてマークされたアイテム、および削除としてマークされた却下アイテムは、このAPIでは編集できません。

例11-2に、set_attribute APIを使用してアイテムに特定の属性を設定する手順を示します。

ヒント:

set_attribute APIは、1つのアイテム属性を設定する場合に使用します。複数のアイテム属性を設定する場合には、modify_item APIを使用します(11.2.2項「アイテムの編集」を参照)。

例11-2 アイテムの表示名の設定(set_attribute API)

begin
wwsbr_api.set_attribute(
p_site_id           => 37,
p_thing_id          => 8056,
p_attribute_site_id => wwsbr_api.SHARED_OBJECTS,
p_attribute_id      => wwsbr_api.ATTRIBUTE_TITLE,
p_attribute_value   => 'New Display Name'
);
-- Process cache invalidation messages.
wwpro_api_invalidation.execute_cache_invalidation;
exception
...
end;
/

- p_site_id: アイテムが属しているページ・グループのIDです。

- p_thing_id: 一意のアイテムIDです。アイテムIDにより、編集するアイテムの特定のバージョンが識別されます。

- p_attribute_site_id: 属性が属しているページ・グループのIDです。基本属性の場合は、wwsbr_api.SHARED_OBJECTS定数を使用します。

- p_attribute_id: 属性のIDです。基本属性の場合は、表11-2に示すようにWWSBR_APIパッケージからの定数を使用します。

- p_attribute_value: 属性に割り当てる新しい値です。基本属性の場合は、表11-2を参照してください。

ページ・グループIDやアイテムIDなどのオブジェクトIDを取得する方法については、10.3項「オブジェクトIDの検索」を参照してください。

表11-2に、基本属性の値を設定するためのガイドラインを示します。

表11-2 基本属性の属性値

属性

定数

値(p_attribute_value)

作成者

wwsbr_api.ATTRIBUTE_AUTHOR

任意のvarchar2(50)値。

カテゴリ

wwsbr_api.ATTRIBUTE_CATEGORY

<pagegroupid>_<categoryid>

文字セット

wwsbr_api.ATTRIBUTE_CHARSET

- wwsbr_api.VALUE_BIG5

- wwsbr_api.VALUE_EUC_JP

- wwsbr_api.VALUE_GBK

- wwsbr_api.VALUE_ISO_8859

- wwsbr_api.VALUE_SHIFT_JIS

- wwsbr_api.VALUE_US_ASCII

- wwsbr_api.VALUE_UTF8

- wwsbr_api.VALUE_WINDOWS_1252

説明

wwsbr_api.ATTRIBUTE_DESCRIPTION

任意のvarchar2(2000)値。

表示名

wwsbr_api.ATTRIBUTE_TITLE

任意のvarchar2(256)値。

表示オプション

wwsbr_api.ATTRIBUTE_DISPLAYOPTION

- wwsbr_api.IN_PLACE(直接、その場所にアイテム表示)

- wwsbr_api.FULL_SCREEN(フル・ブラウザ・ウィンドウにアイテム表示)

- wwsbr_api.NEW_WINDOW(新しいブラウザ・ウィンドウにアイテム表示)

アイテムのチェックアウトを有効にする

wwsbr_api.ATTRIBUTE_ITEMCHECKOUT

- wwsbr_api.ENABLE_ITEM_FOR_CHECK_OUT

- wwsbr_api.DISABLE_ITEM_FOR_CHECK_OUT

有効期限

wwsbr_api.ATTRIBUTE_EXPIRATIONPER

- wwsbr_api.PERMANENT(このアイテムの期限切れを無効化)

- 期限モードを「NUMBER」に設定するための任意の数値

- 有効期限日を渡された値に、期限モードを「DATE」に設定するための、公開日付より大きい日付値

ファイル

wwsbr_api.ATTRIBUTE_FILE

アップロードするファイルのパスとファイル名。

イメージ

wwsbr_api.ATTRIBUTE_IMAGE

アップロードするイメージのパスとファイル名。

イメージマップ

wwsbr_api.ATTRIBUTE_IMAGEMAP

任意のvarchar2(4000)値。

イメージの位置

wwsbr_api.ATTRIBUTE_IMAGEALIGN

- wwsbr_api.ALIGN_TEXT_TOP

- wwsbr_api.ALIGN_ABSOLUTE_BOTTOM

- wwsbr_api.ALIGN_ABSOLUTE_MIDDLE

- wwsbr_api.ALIGN_BOTTOM

- wwsbr_api.ALIGN_RIGHT

- wwsbr_api.ALIGN_TOP

- wwsbr_api.ALIGN_LEFT

- wwsbr_api.ALIGN_MIDDLE

- wwsbr_api.ALIGN_BASELINE

- wwsbr_api.ALIGN_IMAGE_ABOVE_LINK

アイテムリンク

wwsbr_api.ATTRIBUTE_ITEM_LINK

<pagegroupid>_<itemid>

アイテム・テンプレート

wwsbr_api.ATTRIBUTE_ITEM_TEMPLATE

<pagegroupid>_<itemtemplateid>

キーワード

wwsbr_api.ATTRIBUTE_KEYWORDS

任意のvarchar2(2000)値。

MIMEタイプ

wwsbr_api.ATTRIBUTE_MIME_TYPE

WWSBR_APIパッケージ内の任意のMIMEタイプ定数。例:

- wwsbr_api.VALUE_TEXT_HTML

- wwsbr_api.VALUE_TEXT_PLAIN

- wwsbr_api.VALUE_IMAGE_GIF

使用可能なMIMEタイプ定数のリストについては、Portal Centerの『Oracle Portal PL/SQL API Reference』を参照してください。

http://portalcenter.oracle.com

「Portal Focus Areas」セクションで「Portlet Development」をクリックし、次に、「APIs and References」セクションで「PL/SQL API Reference」をクリックします。

名前

wwsbr_api.ATTRIBUTE_NAME

任意のvarchar2(256)値。

ページ、そのすべてのタブおよびサブページ内で一意の名前を指定します。

ページ・リンク

wwsbr_api.ATTRIBUTE_PAGE_LINK

<pagegroupid>_<pageid>

パースペクティブ

wwsbr_api.ATTRIBUTE_PERSPECTIVES

<pagegroupid>_<perspectiveid>

複数のパースペクティブはカンマで区切ります。

実在しないパースペクティブはAPIによって識別されます。ページ・グループに利用できるパースペクティブのみが、アイテムに追加されます。

PL/SQL

wwsbr_api.ATTRIBUTE_PLSQL

任意のvarchar2(2000)値。

公開日付

wwsbr_api.ATTRIBUTE_PUBLISHDATE

日付値。

必須属性です。

反転イメージ

wwsbr_api.ATTRIBUTE_ROLLOVERIMAGE

アップロードするイメージ・ファイルのパスとファイル名。

スマート・リンク

wwsbr_api.ATTRIBUTE_SMARTLINK

- wwsbr_api.VALUE_ACCOUNT_INFO

- wwsbr_api.VALUE_ADVANCED_SEARCHE

- wwsbr_api.VALUE_BUILDER

- wwsbr_api.VALUE_COMMUNITY

- wwsbr_api.VALUE_CONTACT

- wwsbr_api.VALUE_EDIT_PAGE

- wwsbr_api.VALUE_FAVOURITES

- wwsbr_api.VALUE_HELP

- wwsbr_api.VALUE_PORTAL_HOME

- wwsbr_api.VALUE_CUST_MOBILE_HOME_PAGE

- wwsbr_api.VALUE_NAVIGATOR

- wwsbr_api.VALUE_PAGE_GROUP_HOME

- wwsbr_api.VALUE_PERSONAL_PAGE

- wwsbr_api.VALUE_CUSTOMIZE_PAGE

- wwsbr_api.VALUE_PORTLET_REPOS_REF_STATUS

- wwsbr_api.VALUE_PORTLET_REPOS

- wwsbr_api.VALUE_PROPERTY_SHEET

- wwsbr_api.VALUE_REF_PORTLET_REPOS

- wwsbr_api.VALUE_REFRESH_PAGE

- wwsbr_api.VALUE_SUBSCRIBE

スマート・テキスト

wwsbr_api.ATTRIBUTE_SMARTTEXT

- wwsbr_api.VALUE_SMART_TEXT_CURRENT_DATE

- wwsbr_api.VALUE_SMART_TEXT_CURRENT_PAGE

- wwsbr_api.VALUE_SMART_TEXT_CURRENT_USER

テキスト

wwsbr_api.ATTRIBUTE_TEXT

任意のvarchar2(4000)値。

URL

wwsbr_api.ATTRIBUTE_URL

最大長がvarchar2(2000)である任意のURL値。

バージョン番号

wwsbr_api.ATTRIBUTE_VERSION_NUMBER

任意の正数。整数でなくてもかまいません。

一意のバージョン番号を指定します。アイテムの既存のバージョンと同じにはしないでください。アイテムに既存のバージョン番号と同じ値を指定した場合は、アイテムの最上位バージョン番号より1つ大きい値に設定されます。

11.2.2 アイテムの編集

既存のアイテムを編集するには、modify_item APIを使用します。このAPIを使用すると、アイテムのプロパティを設定できます。また、このAPIにより次の処理も可能になります。

- アイテムの新規バージョンを追加できます(ページに対してアイテムのバージョンが有効になっている場合)。11.2.4項「バージョン・コントロールの使用」を参照してください。

- アイテムに対してアイテム・レベル・セキュリティを有効にできます(ページに対してアイテム・レベル・セキュリティ(ILS)が有効になっている場合)。同様に実行できる別の方法については、15.3項「アイテム・レベルの権限の設定」を参照してください。

- アイテムに関連付けられたファイルをアップロードできます。アイテムに関連付けるファイルがアップロード済の場合は、かわりにmodify_item_post_upload APIを使用します。

このAPIを使用して編集するのは、ACTIVE値が1のアイテムのみです。保留中か、却下されたかまたは削除されたアイテムの編集には使用しないでください。

アイテムを識別するアイテム・マスターIDと、更新するアイテムの特定バージョンを識別するアイテムIDの両方を渡す必要があります。指定されたIDがアイテムの現行のバージョンである必要はありません。オブジェクトIDを取得する方法については、10.3項「オブジェクトIDの検索」を参照してください。

modify_item APIでは、パラメータ・リストに属性が渡されなかった場合でも、すべての属性の値を変更します。属性が渡されなかった場合、その属性の値はパラメータのデフォルト値に戻ります。属性の現行値を保持する場合は、アイテムの属性値を取得してこのAPIに渡す必要があります。属性の値は、次のビューおよびAPIから取得できます。

- WWSBR_ALL_ITEMS(組込み属性用)。

- WWSBR_ITEM_ATTRIBUTES(カスタム属性用)。

- WWSBR_ITEM_TYPE_ATTRIBUTES(アイテム・タイプの属性リスト用)。

- WWSBR_ITEM_PERSPECTIVES(パースペクティブ用)。

- wwsec_api.grantee.list(アイテム・タイプの権限リスト用)。このAPIの使用方法の詳細は、15.3項「アイテム・レベルの権限の設定」を参照してください。

例11-3では、テキスト・アイテムの表示名とテキストを更新しています。

例11-3 アイテムの編集(modify_item API)

declare
l_item_master_id number;
begin
l_item_master_id := wwsbr_api.modify_item(
p_master_item_id => 453,
p_item_id        => 454,
p_caid           => 33,
p_folder_id      => 45,
p_display_name   => 'Movie Review',
p_text           => 'This is the text of the review.'
);
-- Process cache invalidation messages.
wwpro_api_invalidation.execute_cache_invalidation;
exception
...
end;
/

- p_master_item_id: アイテムのマスターIDです。この値は、WWSBR_ALL_ITEMSビューのMASTERID列で検索できます。

- p_item_id: アイテムIDです。これはアイテムのバージョンを識別するものです。このアイテムの現行バージョンでなくてもかまいません。

ヒント:

アイテムの現行バージョンを識別するには、次の問合せを使用します。

select id
from wwsbr_all_items
where master_id = 453
and is_current_version = 1;

- p_caid: アイテムが属しているページ・グループのIDです。

- p_folder_id: アイテムが表示されるページのIDです。

- p_display_name: アイテムの表示名(タイトル)です。

- p_text: アイテムのテキストです(この例のアイテムはテキスト・アイテムです)。

11.2.3 アイテムのチェックアウトおよびチェックイン

アイテムがチェックアウト対象として有効になっている場合は、他のユーザーが同時に変更できないようにするため編集前にアイテムをチェックアウトしてください(例11-4)。

例11-4 アイテムのチェックアウトおよびチェックイン(check_out_itemおよびcheck_in_item)

begin
-- Check out the item.
wwsbr_api.check_out_item(
p_master_item_id => 12345, -- Master ID is the same for all versions.
p_caid           => 33
);
-- Update the display name of the item.
wwsbr_api.set_attribute(
p_site_id => 33,
p_thing_id => 8056, -- Unique item ID.
p_attribute_site_id => wwsbr_api.SHARED_OBJECTS,
p_attribute_id      => wwsbr_api.ATTRIBUTE_TITLE,
p_attribute_value   => 'New Display Name'
);
-- Check the item back in.
wwsbr_api.check_in_item(
p_master_item_id => 12345, -- Master ID is the same for all versions.
p_caid           => 33
);
-- Process cache invalidation messages.
wwpro_api_invalidation.execute_ache_invalidation;
exception
...
end;
/

- p_master_item_id: チェックアウトまたはチェックインされるアイテムのマスターIDです。

- p_caid: アイテムが属しているページ・グループのIDです。

例11-4で使用されたset_attribute APIの詳細は、11.2.1項「アイテム属性の設定」を参照してください。

注意:

アイテムがチェックアウト済か確認するには、WWSBR_ALL_ITEMSビューのIS_ITEM_CHECKEDOUT列を問い合せます。このビューの詳細は、F.2.5項「WWSBR_ALL_ITEMS」を参照してください。

11.2.4 バージョン・コントロールの使用

modify_item APIを使用してアイテムを編集するときに、p_addnewversion = TRUEを設定すると、そのアイテムの新しいバージョンが作成されます。新しいバージョンには新しいIDが与えられます(マスターIDは同じままです)。アイテムの新しいバージョンを現行バージョンとしてすぐに公開しない場合は、p_add_as_current_version = FALSEを設定します。

例11-5に、modify_item APIを使用して新しいバージョンのアイテムを作成する方法を示します。

例11-5 アイテムの新規バージョンの作成(modify_item API)

declare
l_item_master_id number;
begin
l_item_master_id := wwsbr_api.modify_item(
p_master_item_id => 453,
p_item_id        => 454,
p_caid           => 33,
p_folder_id      => 45,
p_display_name   => 'Movie Review',
p_text           => 'This is the text of the review.',
p_addnewversion  => true
);
-- Process cache invalidation messages.
wwpro_api_invalidation.execute_cache_invalidation;
exception
...
end;
/

ここで使用されるパラメータについては、例11-3を参照してください。

11.3 コンテンツの再編集

コンテンツが静的であることはごくまれなので、ポータル内でコンテンツの移動が必要な場合があります。

この項には、次の例が記載されています。

- 11.3.1項「別のページへのアイテムの移動」

- 11.3.2項「ページの移動」

11.3.1 別のページへのアイテムの移動

move_item APIを使用すると、同じページ・グループ内の別のページかまたは別のページ・グループのページにアイテムを移動できます。アイテムを移動してもアイテムのメタデータは保持されます。別のページ・グループにアイテムを移動するには、アイテムが次の条件を満たす必要があります。

- ローカルのアイテム・タイプをベースとしていない。

- ローカルのカテゴリに関連付けられていない。

- ローカルのパースペクティブに関連付けられていない。

例11-6では、あるページ・グループから別のページ・グループのページにアイテムを移動します。

例11-6 別のページ・グループへのアイテムの移動(move_item API)

begin
wwsbr_api.move_item(
p_caid           => 33,
p_master_item_id => 12345,
p_dest_caid      => 53,
p_dest_page_id   => 1,
p_dest_region_id => 5
);
-- Process cache invalidation messages.
wwpro_api_invalidation.execute_cache_invalidation;
exception
...
end;
/

- p_caid: アイテムが現在属しているページ・グループのIDです。

- p_master_item_id: 移動するアイテムのマスターIDです。

- p_dest_caid: アイテムの移動先となるページ・グループのIDです。

- p_dest_page_id: アイテムの移動先となるページのIDです。

- p_dest_region_id: アイテムの移動先となる、ページのアイテム・リージョンのIDです。リージョンIDを指定していない場合、アイテムはページのデフォルト・アイテム・リージョンに移動されますが、これは望ましいリージョンとはかぎりません。

11.3.2 ページの移動

move_folder APIを使用すると、ページを同じページ・グループ内で移動できます。別のページ・グループには移動できません。

ページを移動するには、ユーザーは移動元および移動先のページに対する「管理」権限を持っている必要があります。

例11-7に、ページの移動方法を示します。

例11-7 ページの移動(move_folder API)

begin
wwsbr_api.move_folder(
p_id        => 12345,
p_siteid    => 33,
p_parent_id => 10000
);
-- Process cache invalidation messages.
wwpro_api_invalidation.execute_cache_invalidation;
exception
...
end;
/

- p_id: 移動するページのIDです。

- p_siteid: ページが属しているページ・グループのIDです。

- p_parent_id: ページの移動先となるページのIDです。

11.3.3 カテゴリおよびパースペクティブの移動

必要に応じてカテゴリおよびパースペクティブをページ・グループ内で移動できます。カテゴリまたはパースペクティブを別のページ・グループに移動することはできません。

カテゴリやパースペクティブを移動するには、ユーザーは所有するページ・グループに対して「クラスの管理」以上の権限を持っている必要があります。

カテゴリを移動するには、例11-8に示すようにmove_category APIを使用します。

例11-8 カテゴリの移動(move_category API)

begin
wwsbr_api.move_category(
p_src_id => 2000,
p_dest_id => 3000,
p_siteid  => 33
);
exception
...
end;
/

パースペクティブを移動するには、例11-9に示すようにmove_perspective APIを使用します。

例11-9 パースペクティブの移動(move_perspective API)

begin
wwsbr_api.move_perspective(
p_src_id => 2000,
p_dest_id => 3000,
p_siteid  => 33
);
exception
...
end;
/

- p_src_id: 移動するカテゴリまたはパースペクティブのIDです。

- p_dest_id: カテゴリまたはパースペクティブの移動先となるカテゴリまたはパースペクティブのIDです。

- p_siteid: カテゴリまたはパースペクティブが属しているページ・グループのIDです。

11.4 コンテンツのコピー

最初から作成しなおすのではなく、既存のコンテンツと同一または類似のものを追加する場合は、既存のコンテンツをコピーできます。

この項には、次の例が記載されています。

- 11.4.1項「アイテムのコピー」

- 11.4.2項「ページのコピー」

11.4.1 アイテムのコピー

copy_item APIを使用すると、同じページ・グループ内の別のページ、または別のページ・グループのページにアイテムをコピーできます。別のページ・グループにアイテムをコピーするには、アイテムが次のすべての条件を満たす必要があります。

- ローカルのアイテム・タイプをベースとしていない。

- ローカルのカテゴリに関連付けられていない。

- ローカルのパースペクティブに関連付けられていない。

アイテムをコピーしてもアイテムのメタデータは保持されます。

例11-10では、別のページ・グループのページにアイテムをコピーします。

例11-10 別のページ・グループへのアイテムのコピーの作成(copy_item API)

begin
wwsbr_api.copy_item(
p_caid           => 33,
p_master_item_id => 12345,
p_dest_caid      => 53,
p_dest_page_id   => 1,
p_dest_region_id => 5
);
-- Process cache invalidation messages.
wwpro_api_invalidation.execute_cache_invalidation;
exception
...
end;
/

- p_caid: アイテムが現在属しているページ・グループのIDです。

- p_master_item_id: コピーするアイテムのマスターIDです。

- p_dest_caid: アイテムのコピー先となるページ・グループのIDです。

- p_dest_page_id: アイテムのコピー先となるページのIDです。

- p_dest_region_id: アイテムのコピー先となる、ページのアイテム・リージョンのIDです。リージョンIDを指定していない場合、アイテムはページのデフォルト・アイテム・リージョンにコピーされますが、これは望ましいリージョンとはかぎりません。

11.4.2 ページのコピー

copy_folder APIを使用すると、ページを同じページ・グループ内にコピーできます。別のページ・グループにはコピーできません。

ページをコピーするには、ユーザーはコピー元のページに対する「表示」権限と、コピー先のページに対する「管理」権限を持っている必要があります。

例11-11では、ページのコピー方法を示します。

例11-11 ページのコピーの作成(copy_folder API)

declare
l_new_pageid number;
begin
l_new_pageid := wwsbr_api.copy_folder(
p_id        => 12345,
p_siteid    => 33,
p_parent_id => 10000
p_name      => 'page1',
p_title     => 'page1'
);
-- Process cache invalidation messages.
wwpro_api_invalidation.execute_cache_invalidation;
exception
...
end;
/

- p_id: コピーするページのIDです。

- p_siteid: ページが属しているページ・グループのIDです。

- p_parent_id: ページのコピー先となるページのIDです。

- p_name: コピー操作によって作成される新しいページの名前です。

- p_title: コピー操作によって作成される新しいページの表示名です。

11.5 コンテンツの削除

コンテンツが不要になった場合、APIを使用してそれをポータルから削除し、領域を解放できます。

この項には、次の例が記載されています。

- 11.5.1項「アイテムの削除」

- 11.5.2項「ページの削除」

11.5.1 アイテムの削除

delete_item APIを使用して、アイテムの全バージョンを削除することも特定の1つのバージョンを削除することもできます。このAPIでは、削除対象のバージョンに関連するすべてのサブアイテムを削除することもできます。このAPIを使用してアイテムを削除する場合、ページ・グループのデフォルトの削除モードをそのまま使用することも、この設定をオーバーライドすることも選択できます。

例11-12では、ページ・グループからアイテムのバージョン1を永続的に削除します。削除アイテムを保持するようにページ・グループが設定されている場合でも、そのアイテム・バージョンは永続的に削除されます。

例11-12 アイテムの削除(delete_item API)

begin
procedure delete_item(
p_master_item_id => 48037,
p_caid           => 54,
p_version_number => 1,
p_mode           => wwsbr_api.DELETE_ITEM_PURGE
);
-- Process cache invalidation messages.
wwpro_api_invalidation.execute_cache_invalidation;
exception
...
end;
/

- p_master_item_id: 削除するアイテムのマスターIDです。

- p_caid: アイテムが属しているページ・グループのIDです。

- p_version_number: 削除するアイテムのバージョンです。アイテムの現行バージョンを削除しようとすると、ITEM_ACTIVE_VERSION例外が発生します。アイテムのバージョンを指定していない場合は、アイテムの全バージョンが削除されます。

ヒント:

アイテムの現行バージョンを削除する場合は、全バージョンを削除するか、Oracle Portalユーザー・インタフェースを使用して以前のバージョンに戻す必要があります。

- p_mode: アイテムの削除時に使用するモードです。次の値をとることができます。

- wwsbr_api.DELETE_ITEM_DEFAULTでは、ページ・グループ設定を使用します。

- wwsbr_api.DELETE_ITEM_PURGEでは、ページ・グループ設定に関係なくアイテムをただちに削除します。

- wwsbr_api.DELETE_ITEM_LAZYDELETEでは、ページ・グループ設定に関係なくアイテムを削除済としてマークします。

以前に削除したアイテムをリストアするには、undelete_item APIを使用します(例11-13)。アイテムにサブアイテムがある場合は、そのサブアイテムもリストアされます。

注意:

削除アイテムをリストアできるのは、アイテムを所有するページ・グループが削除アイテムを保持するように設定されているか、wwsbr_api.DELETE_ITEM_LAZYDELETEモードを使用してアイテムが削除され、そのアイテムがコンテンツ・リポジトリからパージされていない場合のみです。

例11-13 前の削除アイテムのリストア(undelete_item API)

begin
wwsbr_api.undelete_item(
p_thing_id => 12345,
p_caid     => 33
);
-- Process cache invalidation messages.
wwpro_api_invalidation.execute_cache_invalidation;
exception
...
end;
/

- p_thing_id: リストアする削除済アイテムの一意のIDです。

- p_caid: アイテムが属しているページ・グループのIDです。

11.5.2 ページの削除

ページを削除するには、delete_folder APIを使用します。ユーザーは、ページを削除するにはそのページに対する「管理」権限が必要です。

注意:

削除済ページをリストアできるAPIコールはありません。

例11-14では、ページの削除方法を示します。

例11-14 ページの削除(delete_folder API)

begin
wwsbr_api.delete_folder(
p_id     => 12345,
p_siteid => 33
);
-- Process cache invalidation messages.
wwpro_api_invalidation.execute_cache_invalidation;
exception
...
end;
/

- p_id: 削除するページのIDです。

- p_siteid: ページが属しているページ・グループのIDです。

12 ポータルの拡張

この章では、Oracle Portal付属のAPIを使用してポータルを拡張する方法について説明します。内容は、次のとおりです。

- 12.1項「ページ・グループの作成」

- 12.2項「ページの作成」

- 12.3項「カテゴリおよびパースペクティブの作成」

- 12.4項「アイテムの作成」

- 12.5項「ページおよびアイテムのパースペクティブ属性の設定」

- 12.6項「アイテムの承認および却下」

これらのAPIの詳細は、Portal Centerの『Oracle Portal PL/SQL API Reference』を参照してください。

http://portalcenter.oracle.com

「Portal Focus Areas」セクションで「Portlet Development」をクリックし、次に、「APIs and References」セクションで「PL/SQL API Reference」をクリックします。

ヒント:

Webブラウザまたは外部アプリケーションからAPIをコールする場合、最初にセッション・コンテキストを設定する必要があります。詳細は、10.1項「セッション・コンテキストの設定」を参照してください。

12.1 ページ・グループの作成

新しいページ・グループを作成するには、例12-1に示すように、add_content_area APIを使用します。

例12-1 ページ・グループの作成(add_content_area API)

declare
l_new_page_group_id number;
begin
-- Create the page group.
l_new_page_group_id := wwsbr_api.add_content_area(
p_name             => 'ENTERTAINMENT',
p_display_name     => 'Entertainment Page Group',
p_versioning       => wwsbr_api.VERSIONING_AUDIT,
p_default_language => 'us'
);
-- process cache invalidation messages.
wwpro_api_invalidation.execute_cache_invalidation;
exception
...
end;
/

- p_name: 新しいページ・グループの内部名です。この名前は、パスに基づくURLで使用され、一意である必要があります。

- p_display_name: 新しいページ・グループの表示名です。

- p_versioning: ページ・グループ内のアイテムのバージョン・レベルです。次の値をとることができます。

- wwsbr_api.VERSIONING_NONE

- wwsbr_api.VERSIONING_SIMPLE

- wwsbr_api.VERSIONING_AUDIT

- p_default_language: ページ・グループのデフォルト言語です。

12.2 ページの作成

新しいページを作成する場合は、add_folder APIを使用します。デフォルトでは、新しいページには、ページ・グループのデフォルトのナビゲーション・ページが含まれるポートレット・リージョンとアイテム・リージョンの2つのリージョンがあります。つまり、Oracle Portalユーザー・インタフェースを使用せずにプログラムで作成されたページは、レイアウトが大幅に制限される場合があります。

ただし、希望のレイアウトを持ったPortalテンプレートに基づいて新しいページの親ページを作成することで、より高度なレイアウトを持ったページをプログラムで作成できます。これにより、親ページのプロパティを自動的にコピーするようにページ・グループを構成する場合、新しいページでは親ページと同じテンプレートが使用されるようになります。この方法によって、ページに必要なレイアウトをすべて設定できます。

このAPIで、JSPページまたはナビゲーション・ページを作成することはできません。このタイプのページを作成するには、Oracle Portalの「ページの作成」ウィザードを使用します。

ページのベースとなるページ・タイプのページ・プロパティにデフォルト値が設定されている場合、このデフォルト値は、APIにより設定される値にすべてオーバーライドされます。

新しいページの権限を定義するには、WWSEC_APIパッケージのAPIを使用します(例12-2)。詳細は、15.2項「ページ・レベルの権限の設定」を参照してください。

例12-2 ページの作成(add_folder API)

declare
l_new_page_id       number;
l_caid              number := 33;
begin
-- create the page.
l_new_page_id := wwsbr_api.add_folder(
p_caid             => l_caid,
p_name             => 'ENTERTAINMENT',
p_display_name     => 'Entertainment Page',
p_type_id          => wwsbr_api.FOLDER_TYPE_CONTAINER,
p_type_caid        => wwsbr_api.SHARED_OBJECTS,
);
-- Process cache invalidation messages.
wwpro_api_invalidation.execute_cache_invalidation;
exception
...
end;
/

- p_caid: ページを追加するページ・グループのIDです。

- p_name: 新しいページの内部名です。この名前はパスに基づくURLで使用されます。

- p_display_name: 新しいページの表示名(タイトル)です。

- p_type_id: ページのベースとなるページ・タイプのIDです。ページ・タイプは、ページを作成するページ・グループで使用可能なものである必要があります。生成済ページ・タイプには、次の定数が定義されています。

- wwsbr_api.FOLDER_TYPE_CONTAINER

- wwsbr_api.FOLDER_TYPE_URL

- wwsbr_api.FOLDER_TYPE_PLSQL

- WWSBR_FOLDER_TYPESビューのID列の値

WWSBR_FOLDER_TYPESビューのID列を問い合せると、カスタム・ページ・タイプのIDを検索できます。

- p_type_caid: ページに使用されるページ・タイプが属しているページ・グループのIDです。この値は、ページを作成するページ・グループ(p_caid)または共有オブジェクトのページ・グループ(wwsbr_api.SHARED_OBJECTS定数を使用)と同じである必要があります。

12.3 カテゴリおよびパースペクティブの作成

ポータルがすでに非常に細かく分類されている場合、Oracle Portalユーザー・インタフェースを使用しないで、プログラムで設定する方が効率的です。

add_category APIを使用して、新しいカテゴリを作成します(例12-3)。add_perspective APIを使用して、新しいパースペクティブを作成します(例12-4)。カテゴリまたはパースペクティブを作成するには、ページ・グループに対して「クラスの管理」以上の権限を持っている必要があります。

例12-3 カテゴリの作成(add_category API)

declare
l_new_category_id number;
l_caid            number := 33;
begin
l_new_category_id := wwsbr_api.add_category(
p_caid         => l_caid,
p_parent_id    => 0,
p_name         => 'newcategory1',
p_display_name => 'New Category 1'
);
-- Process cache invalidation messages.
wwpro_api_invalidation.execute_cache_invalidation;
exception
...
end;
/

例12-4 パースペクティブの作成(add_perspective API)

declare
l_new_perspective_id number;
l_caid               number := 33;
begin
l_new_perspective_id := wwsbr_api.add_perspective(
p_caid         => 33,
p_parent_id    => 0,
p_name         => 'newperspective1',
p_display_name => 'New Perspective 1'
);
-- Process cache invalidation messages.
wwpro_api_invalidation.execute_cache_invalidation;
exception
...
end;
/

- p_caid: カテゴリまたはパースペクティブを作成するページ・グループのIDです。

- p_parent_id: 新しいカテゴリまたはパースペクティブの作成先となる上位のカテゴリまたはパースペクティブのIDです。トップ・レベルのカテゴリまたはパースペクティブである場合は、0(ゼロ)を使用します。

- p_name: 新しいカテゴリまたはパースペクティブの内部名です。

- p_display_name: 新しいカテゴリまたはパースペクティブの表示名です。

12.4 アイテムの作成

ページにアイテムを作成するには、add_item APIを使用します(例12-5)。

このAPIは、アイテムのマスターIDを返します。これは、アイテムの一意のIDではありません。作成後にアイテムIDを検索するには、例10-7で示したように、WWSBR_ALL_ITEMSビューを問い合せます。アイテムの一意のIDとマスター・アイテムIDの差異の詳細は、10.2項「APIパラメータ」を参照してください。

例12-5 テキスト・アイテムの作成(add_item API)

declare
l_new_item_master_id number;
begin
l_new_item_master_id := wwsbr_api.add_item(
p_caid              => 33,
p_folder_id         => 13923,
p_display_name      => 'Movie Review',
p_type_id           => wwsbr_api.ITEM_TYPE_TEXT,
p_type_caid         => wwsbr_api.SHARED_OBEJCTS,
p_region_id         => 5,
p_text              => 'This is the text of the review.',
);
-- Process cache invalidation messages.
wwpro_api_invalidation.execute_cache_invalidation;
exception
...
end;
/

- p_caid: アイテムを作成するページを所有しているページ・グループのIDです。

- p_folder_id: アイテムを作成するページのIDです。

- p_display_name: 新しいアイテムの表示名(タイトル)です。

- p_type_id: アイテムのベースとなるアイテム・タイプのIDです。WWSBR_APIパッケージで定義されている定数を使用します。次に例を示します。

- wwsbr_api.ITEM_TYPE_FILE

- wwsbr_api.ITEM_TYPE_TEXT

- wwsbr_api.ITEM_TYPE_URL

生成済アイテム・タイプの定数の完全なリストは、Portal Centerの『Oracle Portal PL/SQL API Reference』を参照してください。

http://portalcenter.oracle.com

「Portal Focus Areas」セクションで「Portlet Development」をクリックし、次に、「APIs and References」セクションで「PL/SQL API Reference」をクリックします。

WWSBR_ITEM_TYPESビューのID列を問い合せると、カスタム・アイテム・タイプのIDを検索できます。

アイテム・タイプは、アイテムを作成するページ・グループで使用可能になっている必要があり、このため、WWSBR_CONTENT_AREA_ITEM_TYPESビューにリストされている必要があります。

- p_type_caid: アイテムに使用されるアイテム・タイプが属しているページ・グループのIDです。この値は、アイテムを追加するページ・グループ(p_caid)または共有オブジェクトのページ・グループ(wwsbr_api.SHARED_OBJECTS定数を使用)と同じである必要があります。

- p_region_id: アイテムを作成するリージョンのIDです。リージョンを指定していない場合やリージョンIDが無効な場合は、アイテムは、ページのデフォルトのアイテム・リージョンに格納されます。WWSBR_ALL_FOLDER_REGIONSビューを使用して、リージョンIDを検索します。

- p_text: テキスト・アイテムのテキストです。

ファイル・アイテムの作成

オブジェクトが1つ以上のファイル(イメージやファイル・アイテムなど)に関連付けられている場合、そのAPIを使用して、オブジェクトの作成または変更時にこれらのファイルをアップロードできます。これらのAPIのファイルおよびイメージ・パラメータに、ディレクトリ・パスおよびファイル名で構成されるファイルの場所を渡すことができます。ファイルを格納するディレクトリはデータベースから見える(データベース・サーバーに対してローカルである)必要があり、ファイル自体が適切な権限を持っている必要があります。ファイルのアップロード時のAPIコールで予期しない例外が発生した場合は、ディレクトリの権限とファイルの権限を両方チェックしてください。

アップロードするファイルが、Oracle Portalがインストールされているデータベースと同じサーバー上にある場合は、アイテムの作成または更新時にこのファイルをアップロードできます。例12-6は、この方法を示します。

例12-6 ファイル・アイテムの作成(add_item API)

declare
l_item_masterthing_id number;
begin
-- Add an item that resides on the same server as the OracleAS Portal
-- content repository database.
l_item_masterthing_id := wwsbr_api.add_item(
p_caid          => 53,  -- A known page group ID.
p_folder_id     => 1,   -- A known page ID.
p_display_name  => 'My File',
p_type_id       => wwsbr_api.ITEM_TYPE_FILE,
p_type_caid     => wwsbr_api.SHARED_OBJECTS,
p_region_id     => 513, -- A known region on the page.
p_description   => 'Description of my file',
p_file_filename => '/tmp/myfile.txt'
);
-- Process cache invalidation messages.
wwpro_api_invalidation.execute_cache_invalidation;
exception
...
end;
/

- p_caid: アイテムを作成するページを所有しているページ・グループのIDです。

- p_folder_id: アイテムを作成するページのIDです。

- p_display_name: 新しいアイテムの表示名(タイトル)です。

- p_type_id: アイテムのベースとなるアイテム・タイプのIDです。

- p_type_caid: アイテムに使用されるアイテム・タイプが属しているページ・グループのIDです。この値は、アイテムを追加するページ・グループ(p_caid)または共有オブジェクトのページ・グループ(wwsbr_api.SHARED_OBJECTS定数を使用)と同じである必要があります。

- p_region_id: アイテムを作成するリージョンのIDです。リージョンを指定していない場合やリージョンIDが無効な場合は、アイテムは、ページのデフォルトのアイテム・リージョンに格納されます。WWSBR_ALL_FOLDER_REGIONSビューを使用して、リージョンIDを検索します。

- p_description: アイテムの説明です。

- p_file_filename: このアイテムに関連付けられているファイルのディレクトリ・パスおよびファイル名です。このファイルは、Oracle Portalがインストールされているデータベースと同じサーバー上にある必要があります。

このファイルがOracle Portalがインストールされているデータベースと同じサーバー上にない場合、最初にupload_blob APIを使用してファイルをコンテンツ・リポジトリ・ドキュメント表にロードする必要があります(例12-7)。upload_blob APIは、一意のドキュメント名を返します。add_item_post_upload APIを使用して、返されたドキュメント名によって示されるファイルを要求する新しいアイテムを作成します。

注意:

コール元のアプリケーションは、BLOBを宣言し、データベースのBLOBのデータ型と互換性のあるオブジェクトにこのBLOBを割り当てる必要があります(Oracle Databaseのドキュメント・セットにある『Oracle Databaseアプリケーション開発者ガイド-ラージ・オブジェクト』を参照してください)。この後で、BLOBをupload_blob APIのp_blobパラメータに渡すことができます。

例12-7 コンテンツ・リポジトリへのファイルのアップロード、およびアップロード済ファイルを使用したファイル・アイテムの作成(upload_blob APIおよびadd_item_post_upload API)

declare
l_blob                blob;
l_blob_filename       varchar2(250);
l_mime_type           varchar2(100) := 'text/html';
l_doc_name            varchar2(500);
l_display_name        varchar2(250);
l_region_id           number        := 2013;
l_file_name           varchar2(100);
l_image_name          varchar2(100);
l_site_id             number        := 73;
l_page_id             number        := 1;
l_item_type_id        number        := wwsbr_api.ITEM_FILE_TYPE;
l_item_type_siteid    number        := wwsbr_api.SHARED_OBJECTS;
l_description         varchar2(1000);
l_item_masterthing_id number;
begin
-- Your calling application must define the my_get_blob() function and retrieve
-- your document into a blob so that it can be uploaded in the subsequent step.
l_blob := my_get_blob('8001.HTML');
-- Upload the BLOB to the Oracle Portal document table.
l_blob_filename := 'index2.html';
l_doc_name := wwsbr_api.upload_blob(
p_file_name => l_blob_filename,
p_blob      => l_blob,
p_mime_type => l_mime_type
);
l_display_name := l_blob_filename;
l_file_name := l_doc_name;
l_description := 'File uploaded to portal = ' || l_doc_name;
-- Use add_item_post_upload() to claim the document and add the item to a page.
l_item_masterthing_id := wwsbr_api.add_item_post_upload(
p_caid          => l_site_id,
p_folder_id     => l_page_id,
p_display_name  => l_display_name,
p_file_name     => l_file_name,
p_type_id       => l_item_type_id,
p_type_caid     => l_item_type_siteid,
p_region_id     => l_region_id,
p_description   => l_description,
p_display_option => wwsbr_api.FULL_SCREEN
);
-- Process cache invalidation messages.
wwpro_api_invalidation.execute_cache_invalidation;
exception
...
end;
/

upload_blobのパラメータを次に示します。

- p_file_name: BLOBに割り当てるファイル名です。これは、ファンクションによって返される値ではありません。通常、このファイル名により、ファイルがソース・ファイル・システム上で認識されます。

- p_blob: コンテンツが含まれるBLOBです。

- p_mime_type: BLOBのMIMEタイプです。WWSBR_APIパッケージに用意されている事前定義済の定数を使用します。

add_item_post_uploadのパラメータを次に示します。

- p_caid: アイテムを作成するページを所有しているページ・グループのIDです。

- p_folder_id: アイテムを作成するページのIDです。

- p_display_name: 新しいアイテムの表示名(タイトル)です。

- p_file_name: ファイル・アイテムの内部ドキュメント名で、ドキュメント表のドキュメントに対応しています。upload_blobによって返された値をこのパラメータに渡し、アップロードされたドキュメントをこのアイテムのファイルとして参照します。

- p_type_id: アイテムのベースとなるアイテム・タイプのIDです。

- p_type_caid: アイテムに使用されるアイテム・タイプが属しているページ・グループのIDです。この値は、アイテムを追加するページ・グループ(p_caid)または共有オブジェクトのページ・グループ(wwsbr_api.SHARED_OBJECTS定数を使用)と同じである必要があります。

- p_region_id: アイテムを作成するリージョンのIDです。リージョンを指定していない場合やリージョンIDが無効な場合は、アイテムは、ページのデフォルトのアイテム・リージョンに格納されます。WWSBR_ALL_FOLDER_REGIONSビューを使用して、リージョンIDを検索します。

- p_description: アイテムの説明です。

- p_file_filename: このアイテムに関連付けられているファイルのディレクトリ・パスおよびファイル名です。このファイルは、Oracle Portalがインストールされているデータベースと同じサーバー上にある必要があります。

- p_display_option: アイテムを表示する方法です。次の事前定義済の定数を使用します。

- wwsbr_api.FULL_SCREEN: クリック時にアイテムが同じブラウザ・ウィンドウに表示されるリンクを表示します。

- wwsbr_api.NEW_WINDOW: クリック時にアイテムが新しいブラウザ・ウィンドウに表示されるリンクを表示します。

- wwsbr_api.IN_PLACE: アイテムをリージョンに表示します(これは、テキスト・アイテムおよびPL/SQLアイテムに対してのみ適用されます)。

アップロードしたドキュメントを要求するためのアイテムがすでに作成されている場合、modify_item_post_upload APIを使用します。

12.5 ページおよびアイテムのパースペクティブ属性の設定

ページまたはアイテムを作成する場合、必要に応じて、ページまたはアイテムに適用されるパースペクティブを指定できます。

例12-8は、ページの作成時にページに適用されるパースペクティブを指定する方法を示しています。 例12-9は、アイテムの作成時にアイテムに適用されるパースペクティブを指定する方法を示しています。

例12-8 ページの作成時におけるパースペクティブの指定

declare
l_new_page_id       number;
l_perspective_ids   wwsbr_api.g_perspectiveidarray;
l_perspective_caids wwsbr_api.g_caid_array;
begin
select id, caid
bulk collect into l_perspective_ids, l_perspective_caids
from wwsbr_all_perspectives
where caid in (l_caid, wwsbr_api.shared_objects);
l_new_page_id := wwsbr_api.add_folder(
p_caid             => 33,
p_name             => 'ENTERTAINMENT',
p_display_name     => 'Entertainment Page',
p_type_id          => wwsbr_api.FOLDER_TYPE_CONTAINER,
p_type_caid        => wwsbr_api.SHARED_OBJECTS,
p_perspectives     => l_perspective_ids,
p_perspective_caid => l_perspective_caids
);
-- Process cache invalidation messages.
wwpro_api_invalidation.execute_cache_invalidation;
exception
...
end;
/

例12-9 アイテムの作成時におけるパースペクティブの指定

declare
l_new_item_master_id number;
l_perspective_ids    wwsbr_api.g_perspectiveidarray;
l_perspective_caids  wwsbr_api.g_caid_array;
begin
-- Select perspectives with the name prefix = 'ENTERTAINMENT'.
select id, caid
bulk collect into l_perspective_ids, l_perspective_caids
from wwsbr_all_perspectives
where caid in (l_caid, wwsbr_api.shared_objects) and
display_name like 'ENTERTAINMENT%';
l_new_item_master_id := wwsbr_api.add_item(
p_caid              => 33,
p_folder_id         => 13923,
p_display_name      => 'Movie Review',
p_type_id           => wwsbr_api.ITEM_TYPE_TEXT,
p_type_caid         => wwsbr_api.SHARED_OBEJCTS,
p_region_id         => 5,
p_text              => 'This is the text of the review.',
p_perspectives      => l_perspective_ids,
p_perspectives_caid => l_perspective_caids
);
-- Process cache invalidation messages.
wwpro_api_invalidation.execute_cache_invalidation;
exception
...
end;
/

- p_perspectives: パースペクティブIDの配列です。

- p_perspective_caid: p_perspectivesに指定されているパースペクティブのページ・グループIDの配列です。この配列の各要素の位置は、p_perspectives内の対応するIDの位置と一致している必要があります。p_perspective_caidの値は、ページまたはアイテムを作成するページ・グループ(p_caid)または共有オブジェクトのページ・グループ(wwsbr_api.SHARED_OBJECTS定数を使用)と同じである必要があります。

これらの例の他のパラメータの詳細は、例12-2および例12-5を参照してください。

12.6 アイテムの承認および却下

WWSBR_APIパッケージには、承認の管理を支援するためのAPIが2つ含まれています。これらのAPIをコンテンツ管理イベント・フレームワークとともに使用する方法の詳細は、16.7項「例: アイテム検証」および16.8項「例: 外部ワークフローの統合」を参照してください。

例12-10は、保留中のアイテムを承認する方法を示します。例12-11は、保留中のアイテムを却下する方法を示します。

例12-10 アイテムの承認

begin
wwsbr_api.approve(
p_item_id => 8056,
p_site_id => 53,
p_comment => 'Item approved'
);
-- Process cache invalidation messages.
wwpro_api_invalidation.execute_cache_invalidation;
end;
/

例12-11 アイテムの却下

begin
wwsbr_api.reject(
p_item_id => 8056,
p_site_id => 53,
p_comment => 'Item rejected'
);
-- Process cache invalidation messages.
wwpro_api_invalidation.execute_cache_invalidation;
end;
/

- p_item_id: 承認または却下するアイテムの一意のIDです。

- p_site_id: アイテムが属しているページ・グループのIDです。

- p_comment: アイテムの承認または却下に関する追加情報を提供します。

13 Portalコンテンツの検索

この章では、Oracle Portal付属のパブリック検索APIを使用する方法について説明します。検索APIは、WWSRC_APIパッケージに含まれています。

パブリック検索APIを使用して、ポータルをプログラムで検索し、検索結果をコンテンツ・レコードまたはXML文書として返すことができます。これらのAPIを使用して、Oracle Portalページとシームレスに統合できるカスタム検索フォームを完全に設計できます。また、ポータルの検索結果をページ上に表示する方法をカスタマイズすることもできます。つまり、Oracle Portalに用意されている検索結果ポートレットにはもう制限されません。パブリック検索APIは結果をXMLで返すことができるため、必要に応じて検索結果を処理またはフォーマットできます。

また、検索APIを使用して、ポータル・コンテンツを任意のカスタム・アプリケーションで表示することもできます。たとえば、Webベースのアプリケーションがある場合、簡単にアプリケーション内に検索フォームを作成しOracle Portalからの検索結果もフォームに表示できます。

WWSRC_APIパッケージには、次の2つのタイプのAPIが用意されています。

- 検索送信/実行API

- アイテム検索

- ページ検索

- カテゴリ検索

- パースペクティブ検索

- 検索結果API

- アイテム結果をXMLドキュメントとして取得

- ページ結果をXMLドキュメントとして取得

検索APIが返す検索結果の構造を確認するには、表13-1に示すように、適切なセキュア・コンテンツ・リポジトリ・ビューを参照してください。

表13-1 検索結果とセキュアなビューの対応

検索API

セキュアなコンテンツ・リポジトリ・ビュー

wwsrc_api.item_search

WWSBR_ALL_ITEMS

wwsrc_api.page_search

WWSBR_ALL_FOLDERS

wwsrc_api.category_search

WWSBR_ALL_CATEGORIES

wwsrc_api.perspective_search

WWSBR_ALL_PERSPECTIVES

たとえば、item_search APIが返す結果は、WWSBR_ALL_ITEMSビューと同じ構造を持ちます。セキュアなビューの構造の詳細は、第F章「コンテンツ管理のAPIおよびビュー」を参照してください。

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

- 13.1項「すべてのページ・グループからのアイテムの検索」

- 13.2項「特定のページ・グループからのページの検索」

- 13.3項「属性によるアイテムの検索」

- 13.4項「検索結果のXMLへの変換」

- 13.5項「検索結果の表示」

次の各項の例については、SQL*Plusで出力を有効にする必要があります。これを行うには、Portalスキーマの所有者としてSQL*Plusにログインし、次のコマンドを入力します。

SQL> SET SERVEROUTPUT ON

パブリック検索APIの詳細は、Portal Centerの『Oracle Portal PL/SQL API Reference』を参照してください。

http://portalcenter.oracle.com

「Portal Focus Areas」セクションで、「Portlet Development」をクリックし、「APIs and References」セクション内の「PL/SQL API Reference」をクリックします。

ヒント:

Webブラウザまたは外部アプリケーションからAPIをコールする場合、最初にセッション・コンテキストを設定する必要があります。詳細は、10.1項「セッション・コンテキストの設定」を参照してください。

13.1 すべてのページ・グループからのアイテムの検索

例13-1では、item_search APIを使用して、文字列portalを含むアイテムでポータルのすべてのページ・グループを検索しています。

例13-1 すべてのページ・グループからの検索(item _search API)

declare
l_results    wwsrc_api.items_result_array_type;
l_count      number;
l_scores     wwsrc_api.number_list_type;
begin
l_results := wwsrc_api.item_search(
p_mainsearch => 'portal',
p_out_count  => l_count,
p_out_scores => l_scores
);
dbms_output.put_line('Number of results: ' || l_count);
exception
...
end;
/

- p_mainsearch: 検索対象のキーワードまたは文字列です。これには、Oracle Textの問合せ式を含む任意の値を指定できます。

- p_out_count: 検索のヒット数です。

- p_out_scores: 検索結果スコアの配列です。これはOracle Textの関連スコアで、各結果が検索文字列(または他の任意のテキスト検索基準)と一致する割合の評価です。配列のインデックスは、ファンクションが返す結果配列のインデックスと一致します。

例13-1では、返される検索結果の最大数は、wwsrc_apiの定数MAX_ROWS(デフォルトは1000)によって設定されます。この設定により、特定の行数を指定しない場合に、検索問合せのヒット数が多くて時間がかかり実行不可能となるのを避けることができます。返される行数の指定方法の例は、例13-2を参照してください。

13.2 特定のページ・グループからのページの検索

例13-2では、page_search APIを使用して、文字列Oracleを含むページで2つの特定のページ・グループ(MyPageGroupおよびShared)内を検索しています。この例では、最初の10の結果のみが返されています。

例13-2 特定のページ・グループからの検索(page_search API)

declare
l_results   wwsrc_api.pages_result_array_type;
l_count     number;
l_scores    wwsrc_api.number_list_type;
l_pggroups  wwsrc_api.number_list_type;
begin
l_pggroups(1) := 0;  -- Page group  0 (shared).
l_pggroups(2) := 33; -- Page group 33 (mypagegroup).
l_results := wwsrc_api.page_search(
p_mainsearch  => 'Oracle',
p_page_groups => l_pggroups,
p_rows        => 10,
p_out_count   => l_count,
p_out_scores  => l_scores
);
dbms_output.put_line('Number of results:' || l_count);
exception
...
end;
/

- p_mainsearch: 検索対象のキーワードまたは文字列です。これには、Oracle Textの問合せ式を含む任意の値を指定できます。

- p_page_groups: 検索するページ・グループのIDの配列です。このパラメータを含めない場合、値はwwsrc_api.EMPTY_NUMBER_LIST(すなわち、すべてのページ・グループ)にデフォルト設定されます。

- p_rows: 返される検索結果の最大数です。この値は、wwsrc_apiの定数値MAX_ROWSにデフォルト設定されます。

- p_out_count: 検索のヒット数です。

- p_out_scores: 検索結果スコアの配列です。これはOracle Textの関連スコアで、各結果が検索文字列(または他の任意のテキスト検索基準)と一致する割合の評価です。配列のインデックスは、ファンクションが返す結果配列のインデックスと一致します。

13.3 属性によるアイテムの検索

例13-3では、specify_attributesおよびitem_search APIを使用して、2004年1月1日以降にJoe Bloggsによって作成された、文字列Oracleを含むすべてのファイル・アイテムを検索しています。

例13-3 特定の属性の検索(specify_attributes API)

declare
l_results           wwsrc_api.items_result_array_type;
l_count             number;
l_scores            wwsrc_api.number_list_type;
l_attributes        wwsrc_runtime_attr_varray;
l_createdate_attrid wwsbr_attributes.id%type;
l_createdate_caid   wwsbr_attributes.caid%type;
l_createdate_type   wwsbr_attributes.data_type%type;
begin
-- Build up attribute object with author criteria.
wwsrc_api.specify_attributes(
p_id                 => wwsbr_api.ATTRIBUTE_AUTHOR,
p_siteid             => wwsbr_api.SHARED_OBJECTS,
p_value              => 'Joe Bloggs',
p_operator           => wwsrc_api.CONTAINS_ALL,
p_datatype           => wwsrc_api.DATA_TYPE_TEXT,
p_in_out_attr_varray => l_attributes
);
-- Build up attribute object with create date criteria
-- using wwsbr_attributes view.
select id, caid, data_type
into l_createdate_attrid, l_createdate_caid, l_createdate_type
from wwsbr_attributes
where name = 'createdate'
and rownum = 1; -- Ignore translations.
wwsrc_api.specify_attributes(
p_id                 => l_createdate_attrid,
p_siteid             => l_createdate_caid,
p_value              => '01-JAN-2004',
p_operator           => wwsrc_api.GREATER_THAN,
p_datatype           => l_createdate_type,
p_in_out_attr_varray => l_attributes
);
-- Perform the search.
l_results := wwsrc_api.item_search(
p_mainsearch     => 'Oracle',
p_itemtypeid     => wwsbr_api.ITEM_TYPE_FILE,
p_itemtypesiteid => wwsbr_api.SHARED_OBJECTS,
p_attributes     => l_attributes,
p_out_count      => l_count,
p_out_scores     => l_scores
);
dbms_output.put_line('Number of results: ' || l_count);
exception
...
end;
/

specify_attributesのパラメータ:

- p_id: 属性のIDです。wwsbr_api定数を使用するか、WWSBR_ATTRIBUTESビューを問い合せてこのIDを検索します。

- p_siteid: 属性が属しているページ・グループのIDです。

- p_value: 検索基準として含める属性値です。テキスト値である必要があります。

- p_operator: 使用する検索演算子です。

- p_datatype: 属性値のデータ型です。

- p_in_out_attr_varray: 属性の既存のVARRAYです(存在する場合)。

item_searchのパラメータ:

- p_mainsearch: 検索対象のキーワードまたは文字列です。これには、Oracle Textの問合せ式を含む任意の値を指定できます。

- p_itemtypeid: 検索対象のアイテム・タイプのIDです。wwsbr_api定数を使用するか、WWSBR_ITEM_TYPESビューを問い合せてこのIDを検索します。これは、基本アイテム・タイプではなく実際のアイテムのサブタイプです。

- p_itemtypesiteid: アイテム・タイプが属しているページ・グループのIDです。

- p_attributes: 演算子および値とともに検索する属性の配列です。このパラメータの値を設定するには、specify_attributes APIをコールします。

- p_out_count: 検索のヒット数です。

- p_out_scores: 検索結果スコアの配列です。これはOracle Textの関連スコアで、各結果が検索文字列(または他の任意のテキスト検索基準)と一致する割合の評価です。配列のインデックスは、ファンクションが返す結果配列のインデックスと一致します。

13.4 検索結果のXMLへの変換

これまでに説明したAPIは、検索結果を配列で戻します。検索結果をより柔軟に表示できるように、Oracle Portalには、検索結果をXMLとして返すAPIも複数用意されています。これらのAPIは、XMLの結果をCLOBとして返します。

次の各項では、検索APIによって出力されたCLOBから物理的なXMLファイルを生成し、そのXMLファイルをOracle Portal中間層のディレクトリに格納する方法について説明します。

1. 13.4.1項「XMLファイル用ディレクトリの作成」

2. 13.4.2項「CLOBからのXMLファイルの作成」

3. 13.4.3項「検索結果のXMLでの生成」

これらの例では、データベースがOracle Portal中間層と同じマシン上にあることを前提としています。

13.4.1 XMLファイル用ディレクトリの作成

検索結果をXMLファイルに変換する場合、最初に複数の設定タスクを実行し、ファイルを書き込む物理ディレクトリを定義する必要があります。

Oracle Portal中間層でディレクトリを作成する手順は、次のとおりです。

1. SQL*Plusで、SYSTEMまたはSYSとして接続し、次のコマンドを入力します。

create directory <dirname> as '<physical_location>';

例:

create directory RESULTDIR as '/u02/ora/OraHome_101202_PortalMF/Apache/Apache/htdocs/searchapi';

この例では、Oracle Portal中間層のhtdocsディレクトリを使用します。次の形式でHTTPを介してXML結果ファイルにアクセスできるので、この場所は使用するのに便利です:

http://<Portal_Mid_Tier>:<Port>/<directory>/<XML_Output_File>

例:

http://my.portal.com:7778/searchapi/results.xml

次に、これを使用して、XMLファイルをOmniPortletのデータ・ソースとして指定できます。この方法の例は、13.5.1項「OmniPortletでのXML検索結果の表示」を参照してください。

2. さらにSQL*Plusで、PL/SQLプログラムからディレクトリへの書込み権限を付与します。この例では、次のコマンドを入力して実行しています。

grant write on directory RESULTDIR to public;

3. 次のプロシージャを実行し、新しいディレクトリにファイルを書き込めることを確認します。

declare
2 v_output_file1 utl_file.file_type;
3 begin
4 v_output_file1 := utl_file.fopen('RESULTDIR', 'NEW.txt', 'a');
5 utl_file.put_line(v_output_file1, 'NATURE and Beauty');
6 utl_file.fclose_all;
7 end;
8 /

PL/SQL procedure successfully completed.

これで、ファイル・システム上のディレクトリにアクセスすると、NEW.txtファイルが表示されます。

13.4.2 CLOBからのXMLファイルの作成

XML出力の場所を指定した場合、XML出力を生成するプロシージャを作成できます。例13-4は、get_all_items_xml APIによって作成されたCLOBを使用し、XMLファイルを特定の場所に書き込む一般的なプロシージャを示します。これは、ファイル名とCLOBの2つの入力パラメータを使用します。

例13-4 特定のファイル・システムに対するXMLファイルの書込み

create or replace procedure results_xml_to_file(xml_filename varchar2, result_xml clob) as
l_amount binary_integer;
l_offset number := 1;
l_text   varchar2(32767);
l_file   utl_file.file_type;
l_clob   clob;
begin
l_clob := result_xml;
l_file := utl_file.fopen(
location  => 'RESULTDIR', -- Directory name is case-sensitive.
filename  => xml_filename,
open_mode => 'w'
);
l_amount := 32767;
l_offset := 1;
begin
dbms_lob.open(l_clob, dbms_lob.file_readonly);
loop
dbms_lob.read(l_clob, l_amount, l_offset, l_text);
utl_file.put(
file   => l_file,
buffer => l_text
);
l_offset := l_offset + l_amount;
exit when l_amount < 32767;
end loop;
utl_file.new_line(file => l_file);
dbms_lob.close(l_clob);
end;
utl_file.fclose(file => l_file);
exception
...
end;
/

13.4.3 検索結果のXMLでの生成

APIを使用して検索結果をXMLとして作成する場合、例13-4のプロシージャをコールし、結果のCLOBをファイル・システム上のXMLファイルに書き込むことができます。例13-5にその方法を示します。

例13-5 XMLでの検索結果の生成(get_all_items_xml API)

declare
l_results   wwsrc_api.items_result_array_type;
l_scores    wwsrc_api.number_list_type;
l_count     number;
l_clob      clob;
begin
l_results := wwsrc_api.item_search(
p_mainsearch => 'portal',
p_out_count  => l_count,
p_out_scores => l_scores
);
l_clob := wwsrc_api.get_all_items_xml(l_results);
results_xml_to_file('results12.xml', l_clob);
exception
...
end;
/

例13-5で使用されているitem_search APIの詳細は、13.1項「すべてのページ・グループからのアイテムの検索」を参照してください。

このAPIによって生成されるXMLファイルをOmniPortletのデータ・ソースとして使用できます。この実行方法の例は、13.5.1項「OmniPortletでのXML検索結果の表示」を参照してください。

13.4.4 get_item_xmlへの回避策

get_item_xmlを使用して検索結果をXMLに変換すると、検索結果ごとに<?xml version="1.0" ?>要素が作成されます。これにより、無効なXMLが作成されます。例13-6は、これらのタグを削除すると同時に、<ResultSet>の開始タグと終了タグを追加してROWSET/ROW構造を持ったXMLファイルを作成することによる回避策を示します。同様の処理は、XMLファイルをOmniPortletのデータ・ソースとして使用する場合にも実行する必要があります。

注意:

例13-6では、すべての検索結果をループ処理によりXMLに書き込んでいます(get_all_items_xmlを使用した場合と同じ結果が作成されます)。通常、get_item_xmlを使用して、検索結果になんらかのフィルタ処理を行います。

例13-6 get_item_xmlを使用したファイルへの検索結果の書込み

declare
l_amount    binary_integer;
l_offset    number       := 1;
l_text      varchar2(32767);
l_file      utl_file.file_type;
l_clob      clob;
l_results   wwsrc_api.items_result_array_type;
l_scores    wwsrc_api.number_list_type;
l_count     number;
begin
l_results := wwsrc_api.item_search(
p_mainsearch => 'portal',
p_out_count  => l_count,
p_out_scores => l_scores
);
l_file := utl_file.fopen(
location  => 'RESULTDIR', -- Directory name is case-sensitive.
filename  => 'results14.xml',
open_mode => 'w'
);
utl_file.put(
file   => l_file,
buffer => '<ResultSet>'
);
for i in 1..l_results.count loop
l_amount := 32767;
l_offset := 1;
begin
l_clob := wwsrc_api.get_item_xml(l_results(i));
dbms_lob.open(l_clob, dbms_lob.file_readonly);
loop
dbms_lob.read(l_clob, l_amount, l_offset, l_text);
-- Workaround for XML generated with get_item_xml.
if instr(l_text, '?>') != 0 then
l_text := substr(l_text, instr(l_text, '?>') + 2);
end if;
-- End of workaround.
utl_file.put(
file   => l_file,
buffer => l_text
);
l_offset := l_offset + l_amount;
exit when l_amount < 32767;
end loop;
utl_file.new_line(file => l_file);
dbms_lob.close(l_clob);
end;
end loop;
utl_file.put(
file   => l_file,
buffer => '</ResultSet>'
);
utl_file.fclose(file => l_file);
exception
...
end;
/

13.5 検索結果の表示

検索問合せを役立つものにするには、結果をどこかに表示する必要があります。たとえば、動的ページに、検索結果を配列から直接表示するよう選択できます。また、より柔軟に処理するため、検索結果を最初にXMLに変換してからOmniPortletなどに表示することもできます。

13.5.1 OmniPortletでのXML検索結果の表示

この項の手順では、検索APIによって生成されたXMLをOmniPortletのデータ・ソースとして使用する方法の例を示します。たとえば、APIを定期的に実行して検索結果をXMLとして作成し、この結果を自動的にOmniPortletに表示するジョブをスケジュールできます。

OmniPortletの詳細は、第3章「OmniPortletを使用したポートレットの作成」を参照してください。

注意:

検索APIによって作成されたXMLは、CLOBで返されます。このため、XMLをOmniPortletのデータ・ソースとして使用する場合、最初にCLOBをファイルに書き込む必要があります。この実行方法の例は、13.4項「検索結果のXMLへの変換」を参照してください。

OmniPortletでXML検索結果を表示する手順は、次のとおりです。

1. 最初に、新しいOmniPortletインスタンスをページに追加する必要があります。

ヒント:

通常、OmniPortletは、ポートレット・リポジトリの「ポートレット・ビルダー」領域で使用できます。

2. 「定義」リンクをクリックし、OmniPortletウィザードを起動します。

3. ウィザードの「タイプ」ページで、「XML」を選択してから、「次へ」をクリックします。

4. 「ソース」ページの「XML URL」フィールドで、XMLファイルのURLを入力します。例:

http://my.portal.com:7778/searchapi/results.xml

検索APIによって作成されるXMLデータはROWSET/ROW構造を使用するため、XSLフィルタを指定する必要はありません。

5. 「次へ」をクリックします。

6. 「表示」ページで、「レイアウト・スタイル」として「表」を選択してから、「次へ」をクリックします。

7. 「レイアウト」ページで、ポートレットに表示する列とその表示方法を選択します。

8. 「終了」をクリックし、OmniPortletインスタンスを作成します。

13.5.2 動的ページへの検索結果の表示

次の2つの例は、検索結果を動的ページ・ポートレットに表示する方法を示しています。この例を使用することで、ユーザーはこのポートレットをポータル内の任意のページに追加できます。これを行うには、次の手順を実行します:

1. 検索を実行するために動的ページによってコールされるプロシージャを作成します。
例13-7のプロシージャでは、item_search APIを使用して、特定の文字列(searchterm)を検索し、特定の値(score)を超えるスコアを持つ結果のみを表示します。

注意:

このプロシージャは、ポータルがあるデータベースで作成する必要があります。

例13-7 検索を実行するプロシージャ

create or replace procedure search_results(searchterm varchar2, score number) as
x varchar2(100);
y number;
l_results   wwsrc_api.items_result_array_type;
l_count     number;
l_scores    wwsrc_api.number_list_type;
begin
x := searchterm;
y := score;
l_results := wwsrc_api.item_search(
p_mainsearch => x,
p_out_count  => l_count,
p_out_scores => l_scores
);
htp.p('Number of total hits: ' || l_count);
htp.p('<br>');
htp.p('<br>');
for i in 1..l_results.count loop
if (l_scores(i) > y) then
htp.p('<b>' || i || '</b> - <a href="' || l_results(i).url ||
'">' || l_results(i).display_name || '</a>');
htp.p('<br>');
htp.p('score = ' || l_scores(i));
htp.p('<br>');
end if;
end loop;
exception
...
end;
/
grant execute on search_results to public;

例13-7で使用されているitem_search APIの詳細は、13.1項「すべてのページ・グループからのアイテムの検索」を参照してください。

2. 動的ページを作成します。
動的ページは、Oracle Portalのポートレット・ビルダーを使用して構築できるポートレットの1つです。ポートレット・ビルダーの詳細は、『Oracle Fusion Middleware Oracle Portal開発者ガイド』を参照してください。動的ページの構築の詳細は、Oracle Portalのオンライン・ヘルプを参照してください。

例13-8は、動的ページに使用するコードを示します。

ヒント:

<schema>は、プロシージャを作成したスキーマ名に置き換えます。

例13-8 動的ページの結果表示用コード

<html>
<head>
<title>Example for Search API UI</title>
</head>
<body>
<h2>My Search Form</h2>
<oracle>
declare
x varchar2(100);
y number;
begin
x := :searchterm;
y := :score;
<schemaname>.search_results(x,y);
end;
</oracle>
</body>
</html>

3. HTMLコードで定義されている2つのバインド変数にデフォルト値を指定し、動的ページに結果が表示されるようにします(図13-1)。

図13-1 バインド変数のデフォルト値の指定

4. 動的ページがポートレットとして使用できることを確認します。

5. これで、この動的ページ・ポートレットをポータル内の任意のページに追加できます。

ヒント:

ポートレットは、ポートレット・リポジトリの「ステージング」領域でポートレットの作成先のプロバイダ名の下で見つけてください。

動的ページ・ポートレットには、図13-2のように、動的ページを作成したときに指定したデフォルト値に基づいて検索結果が表示されます。

図13-2 動的ページ・ポートレットに表示されるデフォルトの検索結果

6. ユーザーは、このポートレットをパーソナライズし、図13-3に示すように、独自の検索文字列および最小スコアを指定できます。

図13-3 検索基準のパーソナライズ

図13-4に、ポートレットをパーソナライズして最小スコアを70に変更したときに検索結果がどう変更されるかを示します。

図13-4 動的ページ・ポートレットに表示されるパーソナライズ済の検索結果

14 多言語コンテンツの作成

この章では、Oracle Portal付属のAPIを使用して様々な言語でコンテンツを作成する方法について説明します。内容は、次のとおりです。

- 14.1項「多言語サポートの概要」

- 14.2「デフォルト言語の問合せ」

- 14.3項「セッション言語の設定」

- 14.4項「既存の翻訳の変更」

- 14.5項「アイテムの翻訳の作成」

- 14.6項「翻訳およびアイテムのバージョニング」

これらのAPIの詳細は、Portal Centerの『Oracle Portal PL/SQL API Reference』を参照してください。

http://portalcenter.oracle.com

「Portal Focus Areas」セクションで「Portlet Development」をクリックし、次に、「APIs and References」セクションで「PL/SQL API Reference」をクリックします。

ヒント:

Webブラウザまたは外部アプリケーションからAPIをコールする場合、最初にセッション・コンテキストを設定する必要があります。詳細は、10.1項「セッション・コンテキストの設定」を参照してください。

14.1 多言語サポートの概要

APIを使用してポータル・オブジェクトの翻訳を作成するには、ページ・グループが複数の言語をサポートするようにページ・グループ管理者によって設定されている必要があります。APIを使用する前に、ページ・グループの構成方法と翻訳指定のあるオブジェクトの動作内容を理解するために『Oracle Fusion Middleware Oracle Portalユーザーズ・ガイド』の第20章「Portalコンテンツの翻訳」を参照することをお薦めします。

ポータル・オブジェクトの翻訳を作成または変更するための基本的方法は、言語コンテキストを設定し、次に、適切なコンテンツ管理APIを使用してアイテムを作成または変更することです。

14.2 デフォルト言語の問合せ

ページ・グループのデフォルト言語を確認するには、次の問合せを実行します。

select distinct wwnls_api.get_language(default_language) "Page Group Default Language"
from wwsbr_all_content_areas pg
where name = 'MyPageGroup';

SQL*Plusセッションの言語コンテキストを確認するには、以下の手順に従います。

- デフォルト言語を取得するために使用されるSQL文は、Portalスキーマ・ユーザーとして実行する必要があります。ポータル・スキーマに接続するには、ポータル・スキーマのパスワードと、ポータル・リポジトリがインストールされているデータベースのSERVICE_NAME/SIDを入力します。

- 次の問合せを実行します。

select wwctx_api.get_nls_language "Session Context Language Code",
wwnls_api.get_language(wwctx_api.get_nls_language) "Language Description"
from dual;

注意:

SQL*Plusにログインしてユーザー・コンテキストを設定する場合、最初はNLS_LANG環境変数によって指定されている言語になります。

14.3 セッション言語の設定

コンテンツを別の言語で作成する前に、例14-1に示すように、wwctx_api.set_nls_language APIを使用してセッション言語を設定します。

例14-1 セッション言語の設定(set_nls_language API)

begin
wwctx_api.set_nls_language(
p_nls_language => wwnls_api.GREEK,
p_nls_territory => wwnls_api.TER_GREECE
);
exception
...
end;
/

- p_nls_language: セッションに設定する言語の、グローバリゼーション・サポート言語としての略語です。

- p_nls_territory: セッションに設定する地域の、グローバリゼーション・サポート地域としての略語です。

使用可能な言語および地域の定数のリストは、Portal Centerの『Oracle Portal PL/SQL API Reference』のWWNLS_APIパッケージに関するドキュメントを参照してください。

http://portalcenter.oracle.com

「Portal Focus Areas」セクションで「Portlet Development」をクリックし、次に、「APIs and References」セクションで「PL/SQL API Reference」をクリックします。

14.4 既存の翻訳の変更

既存の翻訳の変更は、単に言語コンテキストを設定し、適切なAPIを使用してオブジェクトを変更するだけです。例14-2では、フランス語の翻訳を指定した既存のテキスト・アイテムのテキストを変更しています。

例14-2 翻訳の変更

declare
l_item_master_id number;
begin
-- Set the language context.
wwctx_api.set_nls_language(
p_nls_language => wwnls_api.FRENCH
);
-- Edit the item (this edits the French translation).
l_item_master_id := wwsbr_api.modify_item(
p_master_item_id => 453,
p_item_id        => 454,
p_caid           => 33,
p_folder_id      => 45,
p_display_name   => 'Revue de Film');
p_text           => 'C'est le texte de la revue');
);
-- Process cache invalidation messages.
wwpro_api_invalidation.execute_cache_invalidation;
exception
...
end;
/

例14-2で使用されるmodify_item APIの詳細は、11.2.2項「アイテムの編集」を参照してください。

14.5 アイテムの翻訳の作成

セッションがページ・グループのデフォルト言語とは異なる言語を使用し、ページ・グループに対してセッション言語の翻訳が有効である場合、add_item APIは、アイテムの作成時にアイテムの翻訳を作成します。たとえば、ページ・グループのデフォルト言語が英語で、セッション言語がフランス語であり、ページ・グループに対してフランス語の翻訳が有効である場合には、APIは、アイテム表に次の2行を追加します。

- デフォルト言語の値がus(英語)の行

- セッション言語の値がf(フランス語)の行

言語以外にも、これらの行は、アイテムIDなどすべての属性について同じ値を持つことになります。これを防ぐには、翻訳を作成する前に、常に最初にデフォルト言語でアイテムを追加することをお薦めします。

同様の状況下で、modify_item APIは、セッション言語の翻訳を更新します(翻訳が存在する場合)。翻訳が存在しない場合、セッション言語で翻訳が有効になっているかぎり、このAPIは新しい翻訳を作成します。このため、既存のアイテムに翻訳を追加する場合は、modify_item(またはmodify_item_post_upload) APIを使用します。例14-3では、ファイル・アイテムを作成してから、言語コンテキストを変更し、アイテムに翻訳を追加しています。

例14-3 翻訳の作成

declare
l_item_masterthing_id  number;
l_item_masterthing_id2 number;
l_item_id              number;
begin
-- Set the language context.
wwctx_api.set_nls_language(
p_nls_language => wwnls_api.AMERICAN
);
-- Add an item that resides on the same server as the portal content repository
-- database.
l_item_masterthing_id := wwsbr_api.add_item(
p_caid          => 53,  - A known page group ID.
p_folder_id     => 1,   - A known page ID.
p_display_name  => 'My File',
p_type_id       => wwsbr_api.ITEM_TYPE_FILE,
p_type_caid     => wwsbr_api.SHARED_OBJECTS,
p_region_id     => 513, - A known region on the page.
p_description   => 'Description of my file',
p_file_filename => '/docs_for_upload/English_File.txt'
);
-- Note that if the default language was not American then OracleAS Portal
-- would in addition automatically create a translation of the item in the
-- default language.
--
-- Determine the item id.
select id
into l_item_id
from wwsbr_all_items
where masterid = l_item_masterthing_id
and caid = l_site_id
and language = wwctx_api.get_nls_language
and is_current_version = 1;
-- Change the language context to French.
wwctx_api.set_nls_language(
p_nls_language => wwnls_api.FRENCH
);
-- Modify item adding its translation and any translated attributes.
l_item_masterthing_id2 := wwsbr_api.modify_item(
p_master_item_id => l_item_masterthing_id,
p_item_id        => l_item_id,
p_caid           => l_site_id,
p_folder_id      => l_page_id,
p_display_name   => 'Mon Fichier',
p_description    => 'Description du fichier',
p_file_filename  => '/docs_for_upload/French_File.txt'
);
-- Process cache invalidation messages.
wwpro_api_invalidation.execute_cache_invalidation;
exception
...
end;
/

例14-3で使用されるadd_item APIの詳細は、12.4項「アイテムの作成」を参照してください。modify_item APIの詳細は、11.2.2項「アイテムの編集」を参照してください。

14.6 翻訳およびアイテムのバージョニング

modify_item APIを使用してp_addnewversionをTRUEに設定し、デフォルト以外の言語でアイテムの新しいバージョンを作成しようとすると、新しいバージョンは作成されず、かわりに新しい翻訳が追加されます。

翻訳でバージョニングを使用する場合は、デフォルト言語でアイテムの新しいバージョンを作成して、その新しいバージョンを翻訳することをお薦めします。

翻訳でアイテムのバージョニングを使用する効果の詳細は、『Oracle Fusion Middleware Oracle Portalユーザーズ・ガイド』の20.3項「翻訳可能なコンテンツの作成」を参照してください。

15 コンテンツのセキュリティの実装

この章では、Oracle Portal付属のAPIを使用してコンテンツのセキュリティを実現する方法について説明します。内容は、次のとおりです。

- 15.1項「オブジェクト権限の取得」

- 15.2項「ページ・レベルの権限の設定」

- 15.3項「アイテム・レベルの権限の設定」

これらのAPIの詳細は、Portal Centerの『Oracle Portal PL/SQL API Reference』を参照してください。

http://portalcenter.oracle.com

「Portal Focus Areas」セクションで「Portlet Development」をクリックし、次に、「APIs and References」セクションで「PL/SQL API Reference」をクリックします。

ヒント:

Webブラウザまたは外部アプリケーションからAPIをコールする場合、最初にセッション・コンテキストを設定する必要があります。詳細は、10.1項「セッション・コンテキストの設定」を参照してください。

15.1 オブジェクト権限の取得

現在オブジェクト用に定義されている権限のリストを取得するには、wwsec_api.grantee_list APIを使用します。例15-1に、IDが33であるページ・グループの、IDが17623であるページの権限受領者配列の値を示します。例15-2に、IDが53であるページ・グループの、マスターIDが32919であるアイテムの権限受領者配列の値を示します。

例15-1 ページの権限リストの取得(grantee_list API)

declare
l_grantees         wwsec_api.grantee_array;
l_object_type_name varchar2(5)  := wwsec_api.PAGE_OBJ;
l_name             varchar2(60) := '33/17623';
begin
-- Call the function.
l_grantees := wwsec_api.grantee_list(
p_object_type_name => l_object_type_name,
p_name            => l_name
);
-- Output the results
if l_grantees is not null then
if l_grantees.count > 0 then
for i in l_grantees.first..l_grantees.last loop
if l_grantees.exists(i) then
dbms_output.put_line('GRANTEE_TYPE '||to_char(i)||'=
'||l_grantees(i).GRANTEE_TYPE);
dbms_output.put_line('GRANTEE_ID '||to_char(i)||'=
'||l_grantees(i).GRANTEE_ID);
dbms_output.put_line('GRANTEE_NAME '||to_char(i)||'=
'||l_grantees(i).GRANTEE_NAME);
dbms_output.put_line('PRIVILEGE '||to_char(i)||'=
'||l_grantees(i).PRIVILEGE);
end if;
end loop;
end if;
end if;
exception
...
end;
/

例15-2 アイテムの権限リストの取得

declare
l_grantees         wwsec_api.grantee_array;
p_object_type_name varchar2(5)  := wwsec_api.ITEM_OBJ;
p_name             varchar2(60) := '53/32919';
begin
-- Call the function.
l_grantees := wwsec_api.grantee_list(p_object_type_name, p_name);
-- Output the results.
if l_grantees is not null then
if l_grantees.count > 0 then
for i in l_grantees.first..l_grantees.last loop
if l_grantees.exists(i) then
dbms_output.put.line('GRANTEE_TYPE '||to_char(i)||'= '||l_grantees(i).GRANTEE_TYPE);
dbms_output.put.line('GRANTEE_ID '||to_char(i)||'= '||l_grantees(i).GRANTEE_ID);
dbms_output.put.line('GRANTEE_NAME '||to_char(i)||'= '||l_grantees(i).GRANTEE_NAME);
dbms_output.put.line('PRIVILEGE '||to_char(i)||'= '||l_grantees(i).PRIVILEGE);
end if;
end loop;
end if;
end if;
exception
...
end;
/

grantee_list APIは次の3つのパラメータを取ります。

- p_object_type_name: オブジェクトのタイプです。このパラメータの値を指定するには、WWSEC_APIパッケージ内の事前定義済の定数(wwsec_api.PAGE_OBJ、wwsec_api.ITEM_OBJなど)を使用します。

- p_name: オブジェクトへの参照です。'<page group ID>/<object ID>'という書式を使用します。したがって、アイテムの場合は、'<page group ID>/<master item ID>'の書式を使用し、'53/32919'のように指定します。

- p_owner: オブジェクトを所有するスキーマの名前です。アイテムの場合は、このパラメータの値はデフォルトでPortalスキーマの所有者となるので、このパラメータには値を渡さないでください。

APIにより、次の列を持つ配列(WWSEC_API.GRANTEE_ARRAY)が返されます。

- grantee_type: USERまたはGROUP

- grantee_id: ユーザーまたはグループの一意のID

- grantee_name: ユーザー名またはグループ名

- privilege: ユーザーまたはグループに付与された権限

15.2 ページ・レベルの権限の設定

この項では、WWSEC_APIパッケージのAPIを使用してページ・レベルの権限を設定する方法について説明します。

注意:

次の項に記載されているAPIを使用し、p_nameパラメータの次の書式を使用することで、タブ・レベルのアクセスを設定することもできます。

<page group ID>/<tab ID>

コンテナ・ページのIDを指定する必要はありません。タブIDが、ページ・グループ内でタブを識別できるだけの一意性を備えているためです。

15.2.1 ページ・レベルの権限の付与

例15-3に、set_group_acl APIを使用してグループに権限を付与する方法を示します。例15-4に、set_user_acl APIを使用してユーザーに権限を付与する方法を示します。

例15-3 グループに対するページ権限の付与(set_group_acl API)

declare
l_group_id number       := wwsec_api.group_id('MYGROUP');
l_name     varchar2(60) := '33/17623';
BEGIN
wwsec_api.set_group_acl(
p_group_id         => l_group_id,
p_object_type_name => wwsec_api.PAGE_OBJ,
p_name             => l_name,
p_privilege        => wwsec_api.VIEW_PRIV
);
end;
/

例15-4 ユーザーに対するページ権限の付与(set_user_acl API)

declare
l_person_id number      := wwsec_api.id('JOHN.SMITH');
l_name     varchar2(60) := '33/17623';
begin
wwsec_api.set_user_acl(
p_person_id        => l_person_id,
p_object_type_name => wwsec_api.PAGE_OBJ,
p_name             => l_name,
p_privilege        => wwsec_api.VIEW_PRIV
);
end;
/

この2つのAPIは次のパラメータを取ります。

- p_group_id: 権限を付与するグループのIDです(set_group_aclのみ)。

- p_person_id: 権限を付与するユーザーのIDです(set_user_aclのみ)。

- p_object_type_name: 権限を付与するオブジェクトのタイプです。このパラメータの値を指定するには、WWSEC_APIパッケージ内の事前定義済の定数(wwsec_api.PAGE_OBJなど)を使用します。

- p_name: オブジェクトへの参照です。'<page group ID>/<page ID>'の書式を使用します。たとえば、'33/17623'のように指定します。

- p_privilege: ユーザーまたはグループに付与する権限のレベルです。このパラメータの値を指定するには、WWSEC_APIパッケージ内の事前定義済の定数(wwsec_api.VIEW_PRIVなど)を使用します。

15.2.2 ページ・レベルの権限の削除

ある時点で、ページからのユーザーまたはグループの権限の削除が必要になる場合があります。例15-5に、remove_group_acl APIを使用してグループの権限を削除する方法を示します。例15-6に、remove_user_acl APIを使用してユーザーの権限を削除する方法を示します。

例15-5 グループのページ権限の削除(remove_group_acl API)

declare
l_group_id number       := wwsec_api.group_id('MYGROUP');
l_name     varchar2(60) := '33/17623';
BEGIN
wwsec_api.remove_group_acl(
p_object_type_name => wwsec_api.PAGE_OBJ,
p_name             => l_name,
p_group_id        => l_group_id,
p_privilege        => wwsec_api.MANAGE_PRIV
);
end;
/

例15-6 ユーザーのページ権限の削除(remove_user_acl API)

declare
l_person_id number       := wwsec_api.id('JOHN.SMITH');
l_name     varchar2(60)  := '33/17623';
BEGIN
wwsec_api.remove_user_acl(
p_object_type_name => wwsec_api.GROUP_OBJ,
p_name             => l_name,
p_person_id        => l_person_id,
p_privilege        => wwsec_api.MANAGE_PRIV
);
end;
/

この2つのAPIは次のパラメータを取ります。

- p_object_type_name: 権限を削除するオブジェクトのタイプです。このパラメータの値を指定するには、WWSEC_APIパッケージ内の事前定義済の定数(wwsec_api.PAGE_OBJなど)を使用します。

- p_name: オブジェクトへの参照です。'<page group ID>/<page ID>'の書式を使用します。たとえば、'33/17623'のように指定します。

- p_group_id: 権限を削除するグループのIDです(remove_group_aclのみ)。このページ上の特定の権限をすべてのグループから削除するには、このパラメータをNULLに設定します。

- p_person_id: 権限を削除するユーザーのIDです(remove_user_aclのみ)。このページ上の特定の権限をすべてのユーザーから削除するには、このパラメータをNULLに設定します。

- p_privilege: ユーザーまたはグループから削除する権限のレベルです。このパラメータの値を指定するには、WWSEC_APIパッケージ内の事前定義済の定数(wwsec_api.VIEW_PRIVなど)を使用します。このページ上のすべての権限をユーザーまたはグループから削除するには、このパラメータをNULLに設定します。

15.3 アイテム・レベルの権限の設定

ページに対してアイテム・レベル・セキュリティ(ILS)を有効にしている場合は、ページの個々のアイテムに対してアクセス権限を指定できます。

例15-7に、modify_folder APIを使用してページのILSを有効にする方法を示します。

例15-7 ページのアイテム・レベル・セキュリティの有効化

declare
l_page     wwsbr_api.page_record;
begin
select *
into l_page
from   <schema>.wwsbr_user_pages
where  siteid = 33
and  id = 1
and  rownum = 1;
l_page.haveitemsecurity := 1;
wwsbr_api.modify_folder(
p_page => l_page
);
-- Process cache invalidation messages.
wwpro_api_invalidation.execute_cache_invalidation;
exception
...
end;
/

例15-7で使用されているmodify_folder APIおよびWWSBR_USER_PAGESビューについては、11.1項「ページ・プロパティの編集」を参照してください。

例15-8に、個々のアイテムに対してILSを有効にする方法を示します(これは、Oracle Portalユーザー・インタフェースで「アイテム・レベルのアクセス権限を定義」を選択するのと同じです)。

例15-8 アイテムに対するアイテム・レベル・セキュリティの有効化(enable_ils_for_item API)

begin
wwsbr_api.enable_ils_for_item(
p_master_item_id => 453,
p_caid           => 33,
p_folder_id      => 45
);
-- Process cache invalidation messages.
wwpro_api_invalidation.execute_cache_invalidation;
exception
...
end;
/

- p_master_item_id: アイテムのマスターIDです。この値は、WWSBR_ALL_ITEMSビューのMASTERID列にあります。

- p_caid: アイテムが属しているページ・グループのIDです。

- p_folder_id: アイテムが表示されるページのIDです。

ヒント:

ILS設定のみでなくアイテムの他の属性も編集するには、かわりにmodify_itemまたはmodify_item_post_upload APIを使用できます。ILSを有効にするには、p_access_levelパラメータをwwsbr_api.ITEM_ACCESSに設定し、無効にするにはwwsbr_api.FOLDER_ACCESSに設定します。

15.3.1 アイテム・レベルの権限の付与

アイテムに対してILSを有効にすると、1つ以上のユーザーまたはグループのアクセス権限を定義できます。

アイテム・レベルの権限を設定する場合、付与される権限のタイプは、パラメータ値ではなく次のパラメータのどれが渡されるかによって決まります。

- ユーザーID配列をp_itemown_userに渡すと、リストのユーザーに対して「管理」権限が付与されます。

- ユーザーID配列をp_itemmanage_userに渡すと、リストのユーザーに対して「編集」権限が付与されます。

- ユーザーID配列をp_itemview_userに渡すと、リストのユーザーに対して「表示」権限が付与されます。

- グループID配列をp_itemown_groupに渡すと、リストのグループに対して「管理」権限が付与されます。

- グループID配列をp_itemmanage_groupに渡すと、リストのグループに対して「編集」権限が付与されます。

- グループID配列をp_itemview_groupに渡すと、リストのグループに対して「表示」権限が付与されます。

同じプロシージャ・コール内でこれらのパラメータの任意の組合せに値を渡すことで、様々なユーザーやグループに対していろいろな権限を設定できます。

例15-9に、add_item_ils_privileges APIを使用してユーザーにアイテム・レベルの権限を付与する方法を示します。

例15-9 ユーザーへのアイテム・レベルの権限の付与(add_item_ils_privileges API)

declare
l_itemown_username_array wwsbr_type.array;
l_itemown_userid_array   wwsbr_type.array;
begin
l_itemown_username_array(1) := 'jsmith';
l_itemown_username_array(2) := 'janesmith';
l_itemown_username_array(3) := 'joedoe';
for i in 1 .. l_itemown_username_array.count loop
-- Get the user ID from the wwsec_api.id_sso API.
l_itemown_userid_array(i) := wwsec_api.id_sso(
p_username => l_itemown_username_array(i)
);
end loop;
wwsbr_api.add_item_ils_privileges(
p_master_item_id => 453,
p_caid           => 33,
p_folder_id      => 45,
p_itemown_user   => l_itemown_userid_array
);
-- Process cache invalidation messages.
wwpro_api_invalidation.execute_cache_invalidation;
exception
...
end;
/

- p_master_item_id: アイテムのマスターIDです。この値は、WWSBR_ALL_ITEMSビューのMASTERID列にあります。

- p_caid: アイテムが属しているページ・グループのIDです。

- p_folder_id: アイテムが表示されるページのIDです。

- p_itemown_user: 「管理」権限を付与するユーザーIDの配列です。

複数の権限配列に同じユーザーまたはグループを渡すと、指定されたうちで最高レベルの権限がそのユーザーまたはグループに付与されます。

ヒント:

add_item_ils_privileges APIを使用して、アイテムのアクセス権限を更新することもできます。

15.3.2 アイテム・レベルの権限の削除

なんらかの理由でアイテムに関するユーザーまたはグループの権限を削除する必要がある場合は、例15-10のようにdelete_ils_privilege APIを使用します。

例15-10 アイテム・レベルの権限の削除(delete_ils_privilege API)

declare
l_user_id       number := 334;
l_page_group_id number := 75;
l_page_id       number := 1;
l_item_id       number := 74637;
begin
wwsbr_api.delete_ils_privilege(
p_user_or_group_id => l_user_id,
p_caid             => l_page_group_id,
p_folder_id        => l_page_id,
p_master_item_id   => l_item_id
);
-- Process cache invalidation messages.
wwpro_api_invalidation.execute_cache_invalidation;
exception
...
end;
/

- p_user_or_group_id: 権限を削除するユーザーまたはグループのIDです。

- p_caid: アイテムが属しているページ・グループのIDです。

- p_folder_id: アイテムが表示されるページのIDです。

- p_master_item_id: アイテムのマスターIDです。この値は、WWSBR_ALL_ITEMSビューのMASTERID列にあります。

15.3.3 ページからのアイテム・レベルの権限の継承

独自の権限が定義されているアイテムに、実際には独自の権限ではなく、単にページからの権限を継承するようにする場合は、inherit_folder_privileges APIを使用してILSを無効にします(これは、Oracle Portalユーザー・インタフェースで「親ページのアクセス権限を継承」を選択するのと同じです)。例15-11に、inherit_folder_privileges APIを使用する方法を示します。

15-11 親ページからのアイテム権限の継承(inherit_folder_privileges API)

begin
wwsbr_api.inherit_folder_privileges(
p_master_item_id => 453,
p_caid           => 33,
p_folder_id      => 45
);
-- Process cache invalidation messages.
wwpro_api_invalidation.execute_cache_invalidation;
exception
...
end;
/

- p_master_item_id: アイテムのマスターIDです。この値は、WWSBR_ALL_ITEMSビューのMASTERID列にあります。

- p_caid: アイテムが属しているページ・グループのIDです。

- p_folder_id: アイテムが表示されるページのIDです。

ヒント:

ILS設定のみでなくアイテムの他の属性も編集するには、かわりにmodify_itemまたはmodify_item_post_upload APIを使用できます。ILSを有効にするには、p_access_levelパラメータをwwsbr_api.ITEM_ACCESSに設定し、無効にするにはwwsbr_api.FOLDER_ACCESSに設定します。

16 コンテンツ管理イベント・フレームワークの使用

この章では、Oracle Portalコンテンツ管理イベント・フレームワーク(CMEF)について説明します。内容は、次のとおりです。

- 16.1項「コンテンツ管理イベント・フレームワークの概要」

- 16.2項「コンテンツ管理イベント・フレームワークの動作」

- 16.3項「コンテンツ管理イベント・フレームワークの使用」

- 16.4項「例のインストール」

- 16.5項「例: Portalオブジェクトのイベント・ロギング」

- 16.6項「例: アイテム通知」

- 16.7項「例: アイテム検証」

- 16.8項「例: 外部ワークフローの統合」

16.1 コンテンツ管理イベント・フレームワークの概要

CMEFを使用して、事前定義済ポータルのイベントに対しプログラム的なフックを追加することによって、Oracle Portalのコンテンツ管理機能を拡張できます。フレームワークは、これらのイベントをOracleデータベースのキューに公開します。これにより、サード・パーティのプログラムがこれらのイベントをサブスクライブし、APIを使用してポータルを拡張できるようになります。このようにして、ポータル内のページおよびアイテム関連のイベントを使用して、1つ以上の外部アプリケーション内のアクションをトリガーできます。

16.2 コンテンツ管理イベント・フレームワークの動作

CMEFは、Oracle Streamsアドバンスト・キューイング(AQ)テクノロジを採用しています。Oracle Streams AQはOracleデータベース・コンポーネントであり、業界標準に準拠した豊富な機能セットを持つメッセージ・キュー・システムを提供します。Oracle Streams AQには、次の機能が用意されています。

- アプリケーション(プロデューサ)がキューにメッセージを配置(エンキュー)するための複数の方法

- アプリケーション(コンシューマ)がキューからメッセージを取得(デキュー)するための複数の方法

- プロデューサ・アプリケーションがコンシューマ・アプリケーションに依存しない公開/サブスクライブ・モデル

- 様々なマシンおよびデータベース上のキュー間でのメッセージの伝播

- メッセージを配信できない場合におけるメッセージの保証付き配信および例外処理

- メッセージの永続的記憶域

- メッセージの優先順位付け

- 有効期限や遅延など、メッセージの時間プロパティ

詳細は、Oracle Technology Network (OTN)の「Oracle Streams Advanced Queuing」を参照してください。

http://www.oracle.com/technology/products/aq

Oracle Portalユーザー・インタフェース、Web-based Distributed Authoring and Versioning (WebDAV)プロトコルまたはPL/SQL APIを介したポータル内でのアクションにより、CMEFイベントがトリガーされます。このイベントにより、Oracle PortalはCMEFメッセージをキューに公開します。キューにあるメッセージを消費するサブスクライバを作成し、これらに基づいてアクションを実行できます。たとえば、ユーザーがポータル・ページにアイテムを追加したときに、その表示名が80文字以内であることを確認するサブスクライバを作成できます。サブスクライバは、イベントが発生したときに、または一定の時間間隔に基づいて、イベントを処理できます。

CMEFイベントには、ADD、UPDATEおよびDELETEの3つの主要タイプがあります。すべてのコンテンツ管理アクションは、これらのイベントのいずれかに分類されます。イベントには、複数の異なる状態があります。たとえば、ユーザーがページにアイテムを追加した場合、ADDイベントの状態には、アイテムが即座に使用可能であることを示すもの(PUBLISHED)や、後から使用可能になることを示すもの(NOT_PUBLISHED)があります。サブスクライバがこの情報を使用して目的のメッセージを取得する方法の詳細は、16.3項「コンテンツ管理イベント・フレームワークの使用」を参照してください。

CMEFによって公開されたイベントの使用には、次の5つの基本的なキューイング操作が含まれます。

- メッセージのエンキュー: Oracle Portalは、WWSBR_EVENT_Qという名前のマルチコンシューマ・キューにメッセージを公開します(エンキューと呼ばれます)。このキューのメッセージには有効期限はありません。詳細は、16.2.1項「メッセージのエンキュー」を参照してください。

- メッセージのデキュー: サブスクライブするアプリケーションが、キューからメッセージを取得します(デキューと呼ばれます)。詳細は、16.2.2項「サブスクライバおよびメッセージのデキュー」を参照してください。

- 例外処理: メッセージが指定時間内に指定試行回数内で消費された場合、メッセージは正常に処理されたことになります。正常に消費されなかったメッセージは、例外キューと呼ばれる別のキューに格納されます。詳細は、16.2.3項「例外処理」を参照してください。

- メッセージのリスニング: アプリケーションは、LISTENを使用して、キューを繰り返しポーリングしなくても複数のサブスクリプションに対するメッセージを待機できます。詳細は、16.2.4項「メッセージのリスニング」を参照してください。

- 通知: このOracle Streams AQ機能を使用して、ユーザーまたはクライアントは、目的のメッセージの通知を受信できます。詳細は、Oracle Streams AQのドキュメントを参照してください。

キューイング操作を実行するには、DBMS_AQパッケージを使用します。

16.2.1 メッセージのエンキュー

CMEFは、AQメッセージ・プロパティを指定することにより、WWSBR_EVENT_Qキューにメッセージをエンキューします。このプロパティは、デキュー時にサブスクライバ・アプリケーションにより使用されます(表16-1)。

表16-1 CMEFによって設定されるAQメッセージ・プロパティ

メッセージ・プロパティ

タイプ

値

PRIORITY

BINARY_INTEGER

1

DELAY

BINARY_INTEGER

NO_DELAY

EXPIRATION

BINARY_INTEGER

NEVER

CORRELATION

VARCHAR2(128)

NULL

RECIPIENT_LIST

AQ$_RECIPIENT_LIST_T

NULL

EXCEPTION_QUEUE

VARCHAR2(51)

WWSBR_EVENT_ERR_Q

ORIGINAL_MSGID

RAW(16)

NULL

WWSBR_EVENT_Qキューは、マルチコンシューマ・キューです。このキューにより、複数のサブスクライバがメッセージごとに複数のコピーを作成しないで1つのメッセージを消費できるようになります。キュー内のすべてのメッセージの優先度は同じなので、このキューは先入れ先出し方式で動作します。

CMEFによってWWSBR_EVENT_Qキューにエンキューされる各メッセージには、ページIDやページ・グループIDなど、イベントが関連するポータル・オブジェクトに関する情報を含むペイロードが含まれます。サブスクライバは、このペイロード情報を使用して、ポータル・オブジェクトに対するアクションを実行できます。CMEFメッセージのペイロードのコンテンツの詳細は、16.3.6項「CMEFメッセージのペイロード」を参照してください。

CMEFは、即座に消費するためにメッセージをエンキューします。つまり、ポータルでアクションが発生すると同時にメッセージはWWSBR_EVENT_Qキューに格納されます。遅延はありません。CMEFによって作成されたメッセージには有効期限がありません。

16.2.2 サブスクライバおよびメッセージのデキュー

消費側であるサブスクライバには、CMEFによって作成されたメッセージを消費するために様々なメカニズムが用意されています。サブスクライバはメッセージが到着したときにメッセージを処理できるので、メッセージが到着するまで待機する必要があります。また、サブスクライバは、メッセージの到着時に通知を受けることもできます。これらの通知には、Oracle Call Interface (OCI)、コールバック・ファンクション、PL/SQLファンクションまたは電子メールがあります。

16.2.2.1 WWSBR_EVENT_Qキューへのサブスクライバの追加

CMEFによって作成されたメッセージをサブスクライバが消費できるようにするには、DBMS_AQADM.ADD_SUBSCRIBERプロシージャを使用して、WWSBR_EVENT_Qキューにサブスクライバを追加し、Portalスキーマ・ユーザーとしてログインする必要があります。

GRANT EXECUTE ON DBMS_AQADM TO <<PORTAL_SCHEMA>>;
GRANT Aq_administrator_role TO <<PORTAL_SCHEMA>>;

例16-1では、JAYサブスクライバをWWSBR_EVENT_Qキューに追加しています。

例16-1 WWSBR_EVENT_Qへのサブスクライバの追加

subscriber := sys.aq$_agent('JAY', null, null);
dbms_aqadm.add_subscriber(
queue_name => 'portal.wwsbr_event_q',
subscriber => subscriber
);

Oracle Streams AQは、マルチコンシューマ・キューごとに最大1024のサブスクライバをサポートしているので、WWSBR_EVENT_Qキューには最大1024のサブスクライバを追加できます。このキューにサブスクライバとして追加されるすべてのコンシューマでは、AQ$_AGENTパラメータに対して一意の値を設定する必要があります。

DBMS_AQADM.REMOVE_SUBSCRIBERプロシージャを使用して、サブスクライバを削除できます。

サブスクライバの簡単な例については、16.3.1項「サブスクライバ・コードの作成」を参照してください。

16.2.2.2 サブスクライバのキューの管理

Oracle Enterprise Manager DBA Studioにより、Oracle Streams AQを管理できます。DBA Studioを使用すると、キュー表の作成、キューの作成、AQメッセージのブラウズ、AQメッセージのアーカイブまたはパージ、AQサブスクライバの追加および伝播の管理を実行できます。また、DBA Studioには、データベース・レベルおよびキュー・レベルのキュー間でのメッセージの伝播を示す図が表示されます。

Oracle Diagnostics and Tuning Packは、AQキューに関するアラートおよび監視をサポートしています。特定のサブスクライバのメッセージ数がしきい値を超えた場合や、伝播中にエラーが発生した場合に対応するアラートを設定できます。また、READY状態にあるメッセージ数やサブスクライバごとのメッセージ数などについてキューを監視することもできます。

標準AQ APIを使用して、サブスクライバのキューを管理することもできます。詳細は、Oracle Enterprise Managerのドキュメントを参照してください。

16.2.2.3 メッセージのデキュー

キューからメッセージを取得する操作は、デキューと呼ばれます(図16-1)。

図16-1 デキュー・プロセス

DBMS_AQ.DEQUEUEプロシージャを使用して、WWSBR_EVENT_Qキューからメッセージをデキューします。例16-2は、サブスクライバJAYのデキューを示します。

例16-2 メッセージのデキュー

...
dequeue_options.wait          := dbms_aq.NO_WAIT;
dequeue_options.consumer_name := 'JAY';
dequeue_options.navigation    := dbms_aq.FIRST_MESSAGE;
dequeue_options.dequeue_mode  := dbms_aq.BROWSE;
dbms_aq.dequeue(
queue_name         => 'WWSBR_EVENT_Q',
dequeue_options    => dequeue_options,
message_properties => message_properties,
payload            => message,
msgid              => message_handle
);
...

- NAVIGATION: DBMS_AQ.DEQUEUE操作のNAVIGATIONパラメータを使用して、メッセージをデキューする順序を決定します。デキュー・リクエストのデフォルトのNAVIGATIONパラメータは、NEXT_MESSAGEです。つまり、後続のデキュー操作では、メッセージは、最初のデキューで取得されたスナップショットに基づいてキューから取得されます。特に、デキュー・コマンドの後にエンキューされたメッセージは、先にキューにエンキューされていたメッセージがすべて処理されないと処理されません。このキューでは優先度に基づく順序付けが行われないので、WWSBR_EVENT_Qキューにエンキューされたメッセージの場合はこれで十分対応できます。

注意:

多少の遅延を伴うNEXT_MESSAGEは、AQメッセージの処理に最適な方法です。デキュー・コマンドごとにキュー内の最初のメッセージを処理する必要がある場合、サブスクライバは、FIRST_MESSAGEナビゲーション・オプションを明示的に使用する必要があります。

- DEQUEUE_MODE: デキュー・リクエストによって、メッセージを表示および削除できます。メッセージを表示する場合、サブスクライバはBROWSEまたはLOCKモードを使用できます。メッセージを消費する場合、サブスクライバはREMOVEまたはREMOVE_NODATAモードを使用できます。サブスクライバがメッセージをブラウズしても、メッセージは後の処理で引き続き使用可能です。同様に、ロックされたメッセージは、サブスクライバがトランザクションのコミットまたはロールバックを実行してロックを解放した後でも、後の処理で引き続き使用可能です。表示されたメッセージが同時ユーザーによってデキューされないようにするには、メッセージをロック・モードで表示する必要があります。サブスクライバがいずれかのREMOVEモードでメッセージを消費すると、メッセージはデキュー・リクエストに対して使用不可能になります。
サブスクライバがREMOVE_NODATAモードでメッセージをデキューする場合、リクエストではメッセージのペイロードは取得されません。ユーザーが前回、BROWSEモードでのデキューなどによってメッセージのペイロードをすでに調べている場合に、このモードを使用できます。このようにして、ペイロードが大きい場合に長時間を要するペイロード取得のオーバーヘッドを回避できます。

注意:

サブスクライバごとに1つのイベントがエンキューされます。このため、1つのサブスクライバのキューからイベントを削除しても、そのイベントはその他のサブスクライバのキューからは削除されません。

- CONSUMER_NAME: サブスクライバは、このキューの名前を指定することにより、WWSBR_EVENT_Qキューからメッセージをデキューできます。

- PL/SQLでは、DEQUEUE_OPTIONS_TレコードのCONSUMER_NAMEフィールドを使用してコンシューマ名を指定します。

- OCIでは、OCISetAttrプロシージャを使用してコンシューマ名を指定し、テキスト文字列をOCI_DTYPE_AQDEQ_OPTIONS記述子のOCI_ATTR_CONSUMER_NAMEとして指定します。

- Visual Basic (OO4O)では、OraAQオブジェクトのコンシューマ・プロパティを設定して、コンシューマ名を指定します。

複数のプロセスまたはオペレーティング・システム・スレッドが同じメッセージ名を使用してキューからメッセージを同時にデキューすることは可能です。コンシューマは、デキュー時に特定のメッセージIDを指定しないかぎり、READY状態にあるメッセージをすべてデキューできます。

注意:

検索パラメータを使用してCMEFイベントをデキューする必要はありません。

16.2.3 例外処理

すべての対象となるコンシューマによってメッセージが正常にデキューされると、メッセージは処理されたとみなされます。なんらかの理由によってメッセージが処理されない場合、メッセージは例外キューに移動されます。

1つ以上のコンシューマが有効期限前にメッセージをデキューできない場合、メッセージは期限切れとみなされます。期限切れのメッセージも例外キューに移動されます。例外キューは、すべての期限切れのメッセージまたは使用できないメッセージが格納されるリポジトリです。

アプリケーションがメッセージを例外キューに直接エンキューすることはできません。また、例外キューにサブスクライバを関連付けることもできません。ただし、これらの期限切れのメッセージまたは使用できないメッセージを処理するアプリケーションは、例外キューからメッセージをデキューする必要があります。

CMEF例外は、WWSBR_EVENT_ERR_Q例外キューに送信されます。WWSBR_EVENT_Qマルチコンシューマ・キューの期限切れメッセージを、メッセージの対象となる受信者がデキューすることはできません。ただし、デキュー・オプションにNULLコンシューマ名を指定することにより、これらのメッセージがREMOVEモードになるとデキューできます。キュー・モニターは、マルチコンシューマ・キューから期限切れメッセージを削除します。これにより、デキュー元は、キュー表のメッセージをロックせずにデキュー操作を完了できます。

キュー・モニターは、すべてのコンシューマによって処理されたメッセージをマルチコンシューマ・キューから定期的に削除するので、ユーザーには、メッセージが完全に処理されたときと、メッセージがキューから物理的に削除されるときの間に遅延があるように見えることがあります。

注意:

WWSBR_EVENT_ERR_Q例外キューは、すべての例外キューと同様に単一コンシューマ・キューです。

16.2.4 メッセージのリスニング

Oracle Streams AQは、1回のLISTENコールで複数のメッセージ・キューを監視できます。サブスクライバは、LISTENを使用して、複数のサブスクリプション用のメッセージを待機できます。また、ゲートウェイ・アプリケーションも、複数のキューを監視できます。LISTENコールが正常に返された場合、デキューを使用してメッセージを取得する必要があります。LISTENコールを使用しない場合、一連のキューからデキューしようとするアプリケーションは、WWSBR_EVENT_Qキューに対して連続してポーリングし、メッセージの有無を確認する必要があります。

また、キューごとに別々のデキュー・プロセスを使用するようにサブスクライバを設計することもできます。ただし、WWSBR_EVENT_Qを含む任意のキューに長期間にわたってトラフィックがない場合、許容不可能なオーバーヘッドがこれらのアプリケーションによって発生します。LISTENコールは、このようなサブスクライバに適しています。エージェント・リストの複数のエージェントにメッセージがある場合、LISTENは、メッセージがある最初のエージェントを返します。

LISTENコールを使用すると、エージェント・リストのエージェントではなく、1つ以上のキューでのメッセージ受信を監視できます。このコールは、エージェント・リストを引数として使用します。監視対象のキューは、リストされている各エージェントのアドレス・フィールドで指定されます。また、マルチコンシューマ・キューを監視する場合は、エージェント名も指定する必要があります。例16-3に、LISTENコールを使用して複数のキューでメッセージをリスニングする方法を示します。

例16-3 複数のキューにおけるメッセージのリスニング

declare
agent_w_msg   aq$agent;
qlist         dbms_aq.agent_list_t;
begin
-- MYQ1, MYQ2, MYQ3 are multiconsumer queues in the SCOTT schema.
qlist(1) := aq$agent('agent1', 'scott.MYQ1', null);
qlist(2) := aq$agent(null, 'scott.MYQ2', null);
qlist(3) := aq$agent('agent3', 'scott.MYQ3', null);
-- Listen with a timeout of 100 seconds.
dbms_aq.listen(
agent_list => qlist,
wait       => 100,
agent      => agent_w_msg
);
dbms_output.put_line('MSG in Q: '||agent_w_msg.address||'for '
||agent_w_msg.name);
dbms_output.put_line('');
end;
/

これは、リスト内のエージェントについて消費可能なメッセージがあるときに返されるブロック化コールです。複数のエージェントに対するメッセージがある場合、リストされている最初のエージェントのみが返されます。待機時間が経過したときにメッセージがない場合は、エラーが発生します。

コールが正常に返された場合でも、リストされているエージェントの1つに対するメッセージが指定されたキューのいずれかにあることしかわかりません。関連エージェントは該当するメッセージをデキューする必要があります。例16-4は、リスニングとデキュー・プロセスの組合せを示しています。ここでは、一定期間にわたるサブスクライバJAYのメッセージをデキューしています。

例16-4 リスニングおよびメッセージのデキュー

begin
agent_list(1)     := sys.aq$_agent('JAY', 'WWSBR_EVENT_Q', null);
wait_time integer := 100;
loop
-- Wait for order status messages.
dbms_aq.listen(
agent_list => agent_list,
wait       => wait_time,
agent      => agent_w_message
);
-- If there are messages for JAY, dequeue them.
if (agent_w_message.name = 'JAY') then
dequeue_options.wait          := dbms_aq.NO_WAIT;
dequeue_options.consumer_name := 'JAY';
dequeue_options.navigation    := dbms_aq.FIRST_MESSAGE;
dequeue_options.dequeue_mode  := dbms_aq.BROWSE;
dbms_aq.dequeue(
queue_name         => 'item_queue',
dequeue_options    => dequeue_options,
message_properties => message_properties,
payload            => message,
msgid              => message_handle
);
end if;
end loop;
exception
when NO_MESSAGES then
dbms_output.put_line('No more messages for Jay');
end;
/

16.3 コンテンツ管理イベント・フレームワークの使用

すべてのポータル・アイテムおよびページ・アクションは、WWSBR_EVENT_QキューにエンキューされるCMEFメッセージを生成します。サブスクライバは、このメッセージに含まれる情報を利用し、Oracle Portal PL/SQL APIを使用して様々なアクションを実行できます。

CMEFイベントの処理には次の3つの基本ステップがあります。各ステップについてこの項で説明します。手順は次のとおりです。

1. 16.3.1項「サブスクライバ・コードの作成」

2. 16.3.2項「WWSBR_EVENT_Qへのサブスクライバの追加」

3. 16.3.3項「ページ・グループ・レベルでのCMEFイベントの有効化」

また、この項では、メッセージのペイロードについて説明し、次に一般的なポータル・アクションとアクションによって生成されるイベントの例も示します。

16.3.1 サブスクライバ・コードの作成

Oracle Streams AQには、コンテンツ・ベースのサブスクリプション・モデルが用意されています。サブスクライバ・アプリケーションは、メッセージ・コンテンツに基づいてお気に入りを指定できます。Oracle PortalスキーマでCMEFイベント・サブスクライバ・コードを実行する必要があります。例16-5に、サンプル・サブスクライバを示します。

例16-5 サブスクライバの例

create or replace <procedure name> as
agent_list         dbms_aq.aq$_agent_list_t;
wait_time          integer       := <time in seconds>;
agent_w_message    sys.aq$_agent;
dequeue_options    dbms_aq.dequeue_options_t;
message_properties dbms_aq.message_properties_t;
message_handle     raw(16);
message            <portal schema>.wwsbr_event;
l_subscriber       varchar2(30)  := '<subscriber name>';
l_queue            varchar2(30)  := 'PORTAL.WWSBR_EVENT_Q';
l_mode             binary_integer := dbms_aq.[BROWSE|LOCK|REMOVE|REMOVE_NODATA];
...
<additional parameters>
...
BEGIN
agent_list(1) := sys.aq$_agent(l_subscriber, l_queue, null);
loop
-- Listen for messages.
dbms_aq.listen(
agent_list => agent_list,
wait       => wait_time,
agent      => agent_w_message
);
-- If there are messages for the subscriber then dequeue them.
if (agent_w_message.name = l_subscriber) then
dequeue_options.wait          := dbms_aq.NO_WAIT;
dequeue_options.consumer_name := l_subscriber;
dequeue_options.navigation    := dbms_aq.[NEXT_MESSAGE|FIRST_MESSAGE];
dequeue_options.dequeue_mode  := l_mode;
-- Dequeue messages.
dbms_aq.dequeue(
queue_name         => l_queue,
dequeue_options    => dequeue_options,
message_properties => message_properties,
payload            => message,
msgid              => message_handle
);
-- Determine the type of event that occurred and act accordingly.
...
<your code here>
...
end if;
end loop;
-- Process cache invalidation messages.
wwpro_api_invalidation.execute_cache_invalidation;
end;
/

16.3.2 WWSBR_EVENT_Qへのサブスクライバの追加

サブスクライバは、メッセージを消費するキューをサブスクライブします。例16-6に示すように、CMEFイベント・メッセージを処理するには、サブスクライバをWWSBR_EVENT_Qキューに追加する必要があります。

例16-6 WWSBR_EVENT_Qへのサブスクライバの追加

declare
subscriber sys.aq$_agent;
begin
subscriber := sys.aq$_agent('<subscriber>', null, null);
dbms_aqadm.add_subscriber(
queue_name => '<portal schema>.wwsbr_event_q',
subscriber => subscriber
);
end;
/

16.3.3 ページ・グループ・レベルでのCMEFイベントの有効化

Oracle Portalでは、CMEFはページ・グループ・レベルで有効化または無効化されます。デフォルトでは、ユーザーがページ・グループを作成するとCMEFが有効化され、Oracle Portalユーザー・インタフェースまたはWebDAVで変更が行われるたびにイベントがトリガーされます。

ページ・グループに対してCMEFを有効化または無効化する手順は、次のとおりです。

1. ページ・グループの任意のページに移動し、「編集」モードに切り替えます。

2. ページ上部のツールバーで、「ページ・グループ」の横にある「プロパティ」リンクをクリックします。

注意:

「ページ」の横にあるリンクではなく、「ページ・グループ」の横にあるリンクをクリックしてください(図16-2)。

図16-2 「編集」モードのツールバーにある「ページ・グループ: プロパティ」リンク

3. 「構成」タブをクリックして前面に表示します。

4. 「コンテンツ管理イベント・フレームワーク」セクションで、CMEFが有効か無効かを確認できます。この設定を変更するには、「編集」リンクをクリックします(図16-3)。

図16-3 ページ・グループのCMEFのステータス

5. CMEFを有効にするには、「コンテンツ管理イベント・フレームワークを有効にする」チェック・ボックスを選択します(図16-1)。CMEFを無効にするには、チェック・ボックスの選択を解除します。

図16-4 ページ・グループのCMEFの有効化または無効化

6. 「OK」をクリックして変更内容を保存します。

7. 「閉じる」をクリックして、ページに戻ります。

16.3.4 CMEFイベントの調査

CMEFのイベントのページ(図16-5)を使用して、WWSBR_EVENTS_Qキューに追加されているサブスクライバを調査します。

CMEFのイベントのページにアクセスする手順は、次のとおりです。

1. Portalスキーマの所有者としてポータルにログインします。

2. ブラウザの「アドレス」フィールドに次のURLを入力します。

http://<host>:<port>/portal/pls/<dad>/<schema>.wwsbr_event_dbg.show

- host: ポータルの中間層がインストールされているマシンです。

- port: ポータルによって使用されるポートです。

- dad: Oracle Portalインストールのデータベース・アクセス記述子(DAD)です。

- schema: Oracle Portalがインストールされているスキーマです。

注意:

CMEFのイベントのページはサポートされていませんが、デバッグ用としてOracle Portalに含まれています。これにアクセスできるのは、Portalスキーマの所有者のみです。

図16-5 CMEFのイベントのページ

16.3.5 CMEFサブスクライバの実行

サブスクライバを実行するには、例16-7に示されているコマンドをSQLプロンプトで発行します。

例16-7 サブスクライバの実行

begin
<subscriber procedure>();
end;
/

16.3.6 CMEFメッセージのペイロード

Oracle Portalユーザー・インタフェースまたはPL/SQLコンテンツ管理のアクションは、すべてINSERT、UPDATE、DELETEという3つの主要なCMEFイベントの1つに分類されます。また、状態はイベントをより詳細に説明します。たとえば、ADD/INSERT ITEMイベントには、次のタイプがあります。

- アイテムを追加し、即座に公開します。

- アイテムを追加し、後で公開します。

- ユーザーが「承認付きアイテムの管理」権限を持っているため、承認が必要なアイテムを追加します。

アクションとそれに関連するイベントおよび状態の詳細なリストは、付録G「コンテンツ管理イベント・フレームワークのイベント」を参照してください。

表16-2に示すように、各CMEFイベントには関連付けられたCMEFメッセージ・ペイロードがあります。

表16-2 CMEFメッセージのペイロード・プロパティ

メッセージ・プロパティ

タイプ

説明

ACTION

VARCHAR2(30)

イベントをトリガーしたポータル・アクション。

RAW_EVENT

VARCHAR2(30)

ポータル・アクションの結果として作成されたイベント。

STATE

VARCHAR2(30)

イベントに関連する追加情報を提供します。

OBJECT_ID

NUMBER

イベントが関連するオブジェクト(アイテム、ページ、カテゴリなど)のID。

OBJECT_SITE_ID

NUMBER

オブジェクトが属しているページ・グループのID。

OBJECT_LANGUAGE

VARCHAR2(30)

セッション言語。

アクションが言語に依存していない場合はNULL。

PAGE_ID

NUMBER

アイテムの場合、アイテムが表示されるページのID。

その他のオブジェクトの場合はNULL。

PAGE_SITE_ID

NUMBER

アイテムの場合、PAGE_IDで識別されるページが属しているページ・グループのID。

アイテム以外の関連するイベントの場合はNULL。

OBJECT_CLASS

VARCHAR2(30)

イベントが発生したオブジェクトのクラスを記録します。

EVENTS_USER

VARCHAR2(256)

ポータル・アクションを実行したユーザーの名前。

EVENTS_DATE

VARCHAR2(60)

イベントが発生した日付。書式: dd-mon-yyyy HH12:MI PM。

ID1 (OVERLOADED)

NUMBER

アイテムの場合、アイテム・タイプID。

ページの場合、ページ・タイプID。

アイテム・タイプおよびページ・タイプの場合、基本タイプID。

SITE_ID1 (OVERLOADED)

NUMBER

アイテム・タイプの場合、アイテム・タイプが属しているページ・グループのID。

ページの場合、ページ・タイプが属しているページ・グループのID。

アイテム・タイプおよびページ・タイプの場合、基本タイプが属しているページ・グループのID。

GROUP_ID

NUMBER

特定のイベントに複数のメッセージが関連付けられている場合に、関連するメッセージが持つ同じグループID。

OBJECT PATH

VARCHAR2(4000)

キューにあるこのメッセージによって参照されるポータル・オブジェクトの一意のパス(NULLも可)。ページ、アイテム、カテゴリ、パースペクティブ、アイテム・タイプおよびページ・タイプに対してのみ使用されます。

OBJECT UID

VARCHAR2(4000)

このメッセージによって参照されるポータル・オブジェクトへの一意の不変識別子。ページ、アイテム、カテゴリ、パースペクティブ、アイテム・タイプおよびページ・タイプに対してのみ使用されます。

16.3.7 Oracle PortalアクションおよびCMEFイベント

この項では、最も一般的なポータル・アクションについて説明し、これらのアクションを検出するためのコードをサブスクライバに含める方法を示します。これらのアクションは、Oracle Portalユーザー・インタフェース、Oracle Portal PL/SQL APIまたはWebDAVを介して実行されます。

ポータル・アクションとアクションによって生成されるイベントおよびメッセージ・ペイロードの詳細なリストは、付録G「コンテンツ管理イベント・フレームワークのイベント」を参照してください。

16.3.7.1 ページおよびページ・グループのアクション

Oracle Portalでは、ポータルは、1つ以上のページ・グループの集合です。ページ・グループは、一般的な属性やメカニズムを設定できるページの階層的な集合です。

16.3.7.1.1 ページの作成

ページを作成すると、次のCMEFメッセージ・ペイロードが作成されます。

アクション

イベント

状態

オブジェクト・クラス

ADD_PAGE

INSERT

PUBLISHED

PAGE

ADD_ITEM

INSERT

PUBLISHED

ITEM

最初のメッセージはページ自体用で、2つ目のメッセージは、ページ上でデフォルトのナビゲーション・ページを表示するポートレット・インスタンス用です。

ページの作成に応答するサブスクライバを必要とする場合は、次のチェックを実行します。

if ((message.object_class = 'PAGE') and
(message.raw_event    = wwsbr_event_q_access.EVENT_INSERT) then
. . .
end if;

16.3.7.1.2 ページのアクセス制御リストの更新

ページ・グループのACLを継承しないようにページのACLを変更し、「適用」または「OK」をクリックすると、次のメッセージ・ペイロードが作成されます。

アクション

イベント

状態

オブジェクト・クラス

SPECIFY_PAGE_ACL

UPDATE

GENERAL

PAGE

ユーザーをページのACLに追加し、「追加」をクリックすると、次のメッセージ・ペイロードが作成されます。

アクション

イベント

状態

オブジェクト・クラス

ADD_PAGE_ACL

UPDATE

GENERAL

PAGE

ページ・グループのACLを継承しないようにページのACLを変更して、ユーザーまたはグループをACLに追加し、「適用」または「OK」をクリックすると、次のメッセージ・ペイロードが作成されます。

アクション

イベント

状態

オブジェクト・クラス

SPECIFY_AND_ADD_PAGE_ACL

UPDATE

GENERAL

PAGE

ページ・グループのACLを継承するようにページのACLを変更し、「適用」または「OK」をクリックすると、次のメッセージ・ペイロードが作成されます。

アクション

イベント

状態

オブジェクト・クラス

INHERIT_PAGE_ACL

UPDATE

GENERAL

PAGE

「ページ・プロパティ」ページで「適用」または「OK」をクリックすると、追加メッセージが作成されます。

アクション

イベント

状態

オブジェクト・クラス

UPDATE_PAGE_ACL

UPDATE

GENERAL

PAGE

16.3.7.1.3 ページ・グループのアクセス制御リストの更新

ユーザーまたはグループを追加または削除し、ページ・グループのアクセス制御リスト(ACL)を更新すると、次のメッセージ・ペイロードが作成されます。

アクション

イベント

状態

オブジェクト・クラス

ADD_PAGEGROUP_ACL

または

DELETE_PAGE_GROUP_ACL

UPDATE

GENERAL

PAGE_GROUP

UPDATE_PAGE_GROUP_ACL

UPDATE

GENERAL

PAGE_GROUP

ページ・グループでの一般ACLの更新に応答するサブスクライバを必要とする場合は、次のチェックを実行します。

if ((message.action       = 'UPDATE_PAGE_GROUP_ACL') and
(message.object_class = 'PAGE_GROUP') and
(message.raw.event    = wwsbr_event_q_access.EVENT_UPDATE)) then
. . .
end if;

ただし、ページ・グループのACLに対して実際に更新および削除イベントがあるかどうかでフィルタ処理する必要がある場合、サブスクライバは次のチェックを実行する必要があります。

if ((message.object_class = 'PAGE_GROUP') and
(message.raw_event    = wwsbr_event_q_access.EVENT_UPDATE)) then
if (message.action = 'ADD_PAGE_GROUP_ACL') then
. . .
end if;
if (message.action = 'DELETE_PAGE_GROUP_ACL') then
. . .
end if;
. . .
end if;

注意:

ADD_PAGE_GROUP_ACLおよびDELETE_PAGE_GROUP_ACLイベントは、ACLに追加またはACLから削除するユーザーごとに、ユーザーが「追加」をクリックしたときにトリガーされます。UPDATE_PAGE_GROUP_ACLは、ユーザーが「適用」または「OK」をクリックしたときに生成されます。

16.3.7.1.4 ページの削除

ページを削除すると、次のメッセージ・ペイロードが作成されます。

アクション

イベント

状態

オブジェクト・クラス

DELETE_PAGE

DELETE

PURGED

PAGE

注意:

イベントは、ページ上のサブページまたはアイテムに対しては生成されません。

16.3.7.2 アイテムの操作

アイテムは、ポータル・ページの基本的なコンポーネントの1つです。ポータルのアイテムは、アイテム・タイプをベースとしています。ただし、アイテムに対するアクションは、アイテム・タイプとは関係なくCMEFイベントをトリガーします。

たとえば、ADD_ITEMアクションは、ユーザーが基本、拡張またはカスタムの各アイテム・タイプのアイテムを追加するたびに発生します。これにより、アイテムのアクションが発生する場合に、一貫性のあるCMEFメッセージ動作が行われるようになります。

16.3.7.2.1 アイテムの作成と即時公開

ユーザーが「管理」権限を持っている場合、ページで任意のタイプのアイテムを作成すると、次のメッセージ・ペイロードが作成されます。

アクション

イベント

状態

オブジェクト・クラス

ADD_ITEM

INSERT

PUBLISHED

ITEM

このアクションに応答するサブスクライバを必要とする場合は、次のチェックを実行します。

if ((message.action       = 'ADD_ITEM') and
(message.object_class = 'ITEM') and
(message.raw_event    = 'INSERT') and
(message.state        = 'PUBLISHED')) then
. . .
end if;

16.3.7.2.2 承認を必要とするアイテムの追加

ページ(またはページ・グループ)、および「承認付きアイテムの管理」権限を持つユーザーに対して承認および通知が有効である場合、ページにアイテムを追加すると、次のメッセージ・ペイロードが作成されます。

アクション

イベント

状態

オブジェクト・クラス

SUBMIT_ITEM_FOR_APPROVAL

INSERT

NOT_PUBLISHED

ITEM

このアクションに応答するサブスクライバを必要とする場合は、次のチェックを実行します。

if ((message.action       = 'SUBMIT_ITEM_FOR_APPROVAL') and
(message.object_class = 'ITEM') and
(message.raw_event    = 'INSERT') and
(message.state        = 'NOT_PUBLISHED')) then
. . .
end if;

16.3.7.2.3 アイテムの承認

アイテムを承認すると、INSERTまたはUPDATEイベントがトリガーされます。バージョニングが有効かどうかに応じて、この後にDELETEまたはUPDATEイベントが続く場合もあります。

アイテムは承認、バージョニングは無効

これが最も単純なケースです。アイテムにまだ通過する承認手順がある場合は、UPDATEイベントがトリガーされます。

アクション

イベント

状態

オブジェクト・クラス

APPROVE_ITEM_STEP

UPDATE

GENERAL

ITEM

アイテムの承認手順がすべて完了すると、INSERTイベントがトリガーされます。

アクション

イベント

状態

オブジェクト・クラス

APPROVE_ITEM

INSERT

PUBLISHED

ITEM

アイテムは承認、バージョニングは有効、現行のバージョンは上書き

アイテムのバージョニングがページまたはページ・グループ・レベルでシンプルに設定されているときに、ユーザーがアイテムの編集時に「現行のバージョンの上書き」を選択すると、アイテムの承認時に2つのイベントが生成されます。最初のイベントは、承認されるアイテムに関するイベントです。2つ目のイベントは、アイテムが承認される結果上書きされるアイテムに関するDELETEイベントです。

アクション

イベント

状態

オブジェクト・クラス

APPROVE_ITEM

INSERT

PUBLISHED

ITEM

APPROVE_ITEM

DELETE

PURGED

ITEM

アイテムは承認、バージョニングは有効、新規の現行バージョン

アイテムのバージョニングがページまたはページ・グループ・レベルで「監査」またはシンプルに設定されている場合に、ユーザーが「アイテムを新規かつ現行バージョンとして追加」を選択すると、アイテムの承認時にINSERTイベントが生成されます。また、アイテムの前のバージョンをUNPUBLISHEDとしてマークすることに関するUPDATEイベントも生成されます。

アクション

イベント

状態

オブジェクト・クラス

APPROVE_ITEM

INSERT

PUBLISHED

ITEM

APPROVE_ITEM

UPDATE

UNPUBLISHED

ITEM

アイテムが承認されたか承認のあるステージを通過したときに通知を送信するサブスクライバを作成する場合、次のチェックを実行する必要があります。

-- If an item is approved.
if ((message.action       = 'APPROVE_ITEM') and
(message.object.class = 'ITEM') and
(message.raw_event    = 'INSERT') and
(message.state        = 'PUBLISHED')) then
. . .
-- If an item has passed an approval step.
elsif ((message.action       = 'APPROVE_ITEM_STEP') and
(message.object_class = 'ITEM') and
(message.raw_event    = 'UPDATE') and
(message.state        = 'PUBLISHED')) then
. . .
end if;

アイテムは承認、バージョニングは有効、新規の非現行バージョン

追加されるアイテムに対してINSERTイベントが発生しますが、アイテムの状態はNOT_PUBLISHEDとしてマークされ、現行のバージョンとして公開されないことを示します。

アクション

イベント

状態

オブジェクト・クラス

APPROVE_ITEM

INSERT

NOT_PUBLISHED

ITEM

16.3.7.2.4 アイテムへのカテゴリまたはパースペクティブの適用

アイテムに異なるカテゴリまたはパースペクティブを適用すると、アイテムの編集時と同じメッセージ・ペイロードが作成されます。

アクション

イベント

状態

オブジェクト・クラス

EDIT_ITEM

UPDATE

GENERAL

ITEM

注意:

アイテムに適用したカテゴリまたはパースペクティブが変更されても、特定のイベントは生成されず、また、追加情報も提供されません。

このアクションに応答するサブスクライバを必要とする場合は、次のチェックを実行します。

if ((message.action       = 'EDIT_ITEM') and
(message.object_class = 'ITEM') and
(message.raw_event    = 'UPDATE') and
(message.state        = 'GENERAL') then
. . .
end if;

16.3.7.2.5 アイテムの削除

削除されるアイテムが保持される(すなわち、アイテムは削除としてマークされているが、実際には削除されない)ページ・グループからアイテムを削除すると、次のメッセージ・ペイロードが作成されます。

アクション

イベント

状態

オブジェクト・クラス

DELETE_ITEM

DELETE

MARKED_FOR_DELETE

ITEM

削除されるアイテムが保持されない(すなわち、削除アイテムが即座に永続的に削除される)ページ・グループからアイテムを削除すると、次のメッセージ・ペイロードが作成されます。

アクション

イベント

状態

オブジェクト・クラス

DELETE_ITEM

DELETE

PURGED

ITEM

サブスクライバは、メッセージ・ペイロード内の状態値を使用して、発生した削除アクションのタイプを確認できます。

if ((message.action       = 'DELETE_ITEM') and
(message.object_class = 'ITEM') and
(message.raw_event    = 'DELETE')) then
. . .
-- If item is in a page group that does not actually delete items.
if (message.state = 'MARKED_FOR_DELETE') then
. . .
-- If item is in a page group that actually deletes items.
elsif (message.state = 'PURGED') then
. . .
end if;
end if;

16.4 例のインストール

次のいくつかの項にある例をデプロイし使用する場合は、CMEFSAMPLESという名前の別のスキーマに作成することをお薦めします。このスキーマを作成する手順は、次のとおりです。

1. データベース・スキーマCMEFSAMPLESを作成します。SYSのみがアクセス権を持つ権限パッケージを付与する必要があるため、この操作はSYSユーザーとして実行する必要があります。このデータベース・スキーマは、Oracle Portalリポジトリがあるデータベースと同じデータベースに作成する必要があります。例:

@connect "/ as sysdba"
drop user cmefsamples cascade;
create user cmefsamples identified by oracle1
default tablespace users temporary tablespace temp;
grant connect, resource to cmefsamples;

2. SYSスキーマとして、次の権限をCMEFSAMPLESに付与します。

@connect "/ as sysdba"
grant create table                  to cmefsamples;
grant create sequence               to cmefsamples;
grant create view                   to cmefsamples;
grant create procedure              to cmefsamples;
grant create trigger                to cmefsamples;
grant create indextype              to cmefsamples;

grant create synonym                to cmefsamples;
grant create public synonym         to cmefsamples;

grant create database link          to cmefsamples;
grant create public database link   to cmefsamples;
grant execute on dbms_utility       to cmefsamples;
grant aq_administrator_role         to cmefsamples;
grant aq_user_role                  to cmefsamples;
grant execute  on dbms_aqadm        to cmefsamples;
grant execute  on dbms_aq           to cmefsamples;
grant execute  on aq$_agent         to cmefsamples;
grant execute  on dbms_job          to cmefsamples;

execute dbms_aqadm.grant_type_access('cmefsamples');
execute dbms_aqadm.grant_system_privilege('ENQUEUE_ANY','cmefsamples',FALSE);
execute dbms_aqadm.grant_system_privilege('DEQUEUE_ANY','cmefsamples',FALSE);
execute dbms_aqadm.grant_system_privilege('MANAGE_ANY', 'cmefsamples', FALSE);
EXECUTE DBMS_AQADM.GRANT_QUEUE_PRIVILEGE('ENQUEUE','portal.WWSBR_EVENT_Q','cmefsamples', FALSE);
EXECUTE DBMS_AQADM.GRANT_QUEUE_PRIVILEGE('DEQUEUE','portal.WWSBR_EVENT_Q','cmefsamples', FALSE);

3. Oracle Portal PL/SQL APIをコールする権限をCMEFSAMPLESスキーマに付与します。この方法の詳細は、9.3項「APIおよびセキュア・ビューへのアクセスの提供」を参照してください。

4. Portalスキーマにログインし、次の権限を付与します。

EXECUTE DBMS_AQADM.GRANT_QUEUE_PRIVILEGE('DEQUEUE','WWSBR_EVENT_Q','cmefsamples', FALSE);
grant execute on wwsbr_event_q_access to cmefsamples;
grant execute on wwpob_page_util to cmefsamples;
grant select on wwsbr_all_folders to cmefsamples;
grant execute on wwsbr_thing_types to cmefsamples;
grant execute on wwv_thingdb to cmefsamples;
grant execute on wwsbr_event to cmefsamples;

5. CMEFSAMPLESスキーマにログインし、次を実行します。

sqlplus cmefsamples/<password>
create synonym aq$_agent for sys.aq$_agent;

次の例のコードをOTNからダウンロードできます。

http://www.oracle.com/technology/products/ias/portal/files/cm_overview_10g1014_cmef_samples.zip

16.5 例: Portalオブジェクトのイベント・ロギング

例16-9のLOG_PORTAL_EVENTサブスクライバは、CMEFイベントをリスニングし、CMEF_LOG_TABLEというログ・データベース表(例16-8)にこのイベントを書き込みます。

例16-8 CMEF_LOG_TABLE

create table cmef_log_table(
action          varchar2(30),
event           varchar2(30),
state           varchar2(30),
object_type     varchar2(30),
object_id       number,
object_site_id  number,
object_language varchar2(30),
page_id         number,
page_site_id    number,
performed_by    varchar2(30)
)

例16-9 LOG_PORTAL_EVENTサブスクライバ

create or replace procedure log_portal_event as
agent_list         dbms_aq.aq$_agent_list_t;
wait_time          integer        := 5;
agent_w_message    sys.aq$_agent;
dequeue_options    dbms_aq.dequeue_options_t;
message_properties dbms_aq.message_properties_t;
message_handle     raw(16);
message            portal.wwsbr_event;
l_subscriber       varchar2(30)   := 'CMEF_LOG_PORTAL_EVENT';
l_queue            varchar2(30)   := 'PORTAL.WWSBR_EVENT_Q';
l_mode             binary_integer := dbms_aq.REMOVE;
begin
agent_list(1) := sys.aq$_agent(l_subscriber, l_queue, null);
loop
-- Wait for messages.
dbms_aq.listen(
agent_list => agent_list,
wait       => wait_time,
agent      => agent_w_message
);
if (agent_w_message.name = l_subscriber) then
dequeue_options.wait          := dbms_aq.NO_WAIT;
dequeue_options.consumer_name := l_subscriber;
dequeue_options.navigation    := dbms_aq.FIRST_MESSAGE;
dequeue_options.dequeue_mode  := l_mode;
dbms_aq.dequeue(
queue_name         => l_queue,
dequeue_options    => dequeue_options,
message_properties => message_properties,
payload            => message,
msgid              => message_handle
);
insert into cmef_log_table values(
message.action,
message.raw_event,
message.state,
message.object_class,
message.object_id,
message.object_site_id,
message.object_language,
message.page_id,
message.page_site_id,
message.events_user
);
commit;
end if;
end loop;
end;
/

LOG_PORTAL_EVENTサブスクライバは、wait_time変数に指定された5秒の待機時間の間、WWSBR_EVENT_Qキュー上でイベントを継続的にリスニングします。次に、REMOVEモードでCMEFイベントをデキューし、メッセージ・ペイロード値をログ表に挿入します。

例16-9のコードを使用して、ログ表の結果を表示するHTMLページを構築できます。たとえば、図16-6の表は、アイテムの編集操作に関するCMEFメッセージ・ペイロードを示します。

図16-6 CMEFメッセージのペイロード値を示すHTML表

CMEFメッセージのペイロードのプロパティ(message.raw_eventなど)の詳細は、16.3.6項「CMEFメッセージのペイロード」を参照してください。

LOG_PORTAL_EVENTサブスクライバがWWSBR_EVENT_Qキューから継続的にメッセージを削除するようにするには、例16-9から次の内容を削除する必要があります。

dbms_aq.listen(
agent_list => agent_list,
wait       => wait_time,
agent      => agent_w_message
);
if (agent_w_message.name = l_subscriber) then
dequeue_options.wait          := dbms_aq.NO_WAIT;
dequeue_options.consumer_name := l_subscriber;
dequeue_options.navigation    := dbms_aq.FIRST_MESSAGE;
dequeue_options.dequeue_mode  := l_mode;
END IF;

例16-10は、前項で作成したLOG_PORTAL_EVENTサブスクライバをWWSBR_EVENT_Qキューに追加する方法を示しています。

例16-10 WWSBR_EVENT_QへのLOG_PORTAL_EVENTサブスクライバの追加

declare
subscriber sys.aq$_agent;
begin
subscriber := sys.aq$_agent('CMEF_LOG_PORTAL_EVENT', null, null);
dbms_aqadm.add_subscriber(
queue_name => 'portal.wwsbr_event_q',
subscriber => subscriber
);
end;
/

LOG_PORTAL_EVENTサブスクライバを実行するには、例16-11に示されているコマンドを発行します。

例16-11 LOG_PORTAL_EVENT CMEFサブスクライバの実行

begin
log_portal_event();
end;
/

16.6 例: アイテム通知

例16-12のitem_notifyサブスクライバは、ユーザーが指定ページ上でアイテムを追加、更新または削除するたびに電子メール通知を送信します。

例16-12 CMEF_ITEM_NOTIFYサブスクライバ

create or replace procedure item_notify as
MIME_TYPE_TEXT      constant varchar(30)  := 'text/plain';
CUSTOM_ATTRIBUTE_ID constant number := 1020;
ADDED               constant varchar2(20) := 'added';
UPDATED             constant varchar2(20) := 'updated';
DELETED             constant varchar2(20) := 'deleted';
ITEM                constant varchar2(10) := 'ITEM';
agent_list          dbms_aq.aq$_agent_list_t;
wait_time           integer               := 5;
begin_time          pls_integer;
end_time            pls_integer;
agent_w_message     sys.aq$_agent;
dequeue_options     dbms_aq.dequeue_options_t;
message_properties  dbms_aq.message_properties_t;
message_handle      raw(16);
message             portal.wwsbr_event;
l_subscriber        varchar2(30)          := 'CMEF_ITEM_NOTIFY';
l_queue             varchar2(30)          := 'PORTAL.WWSBR_EVENT_Q';
l_page_id           number                := 33; -- Page ID of page.
l_mode              binary_integer        := dbms_aq.REMOVE;
l_rec               varchar2(256);
l_body              varchar2(4000)        := null;
l_from_user         varchar2(30)          := '<from-email-address>';
l_to_user           varchar2(30)          := '<to-email-address>';
l_event             varchar2(30)          := '';
l_portal_user_name  varchar2(30)          := 'portal';
l_portal_password   varchar2(30)          := '<portal password>';
l_display_name      varchar2(256)         := '';

begin
begin_time :=  dbms_utility.get_time;
agent_list(1) := sys.aq$_agent(l_subscriber, l_queue, null);
loop
-- Wait for messages.
dbms_aq.listen(
agent_list => agent_list,
wait       => wait_time,
agent      => agent_w_message
);
if (agent_w_message.name = l_subscriber) then
dequeue_options.wait          := DBMS_AQ.NO_WAIT;
dequeue_options.consumer_name := l_subscriber;
dequeue_options.navigation    := dbms_aq.FIRST_MESSAGE;
dequeue_options.dequeue_mode  := l_mode;
dbms_aq.dequeue(
queue_name         => l_queue,
dequeue_options    => dequeue_options,
message_properties => message_properties,
payload            => message,
msgid              => message_handle
);
if ((message.object_class = ITEM)) then
-- Determine the type of event that occurred.
if (message.raw_event = portal.wwsbr_event_q_access.EVENT_INSERT) then
l_event  := ADDED;
elsif (message.raw_event = portal.wwsbr_event_q_access.EVENT_UPDATE) then
l_event  := UPDATED;
elsif (message.raw_event = portal.wwsbr_event_q_access.EVENT_DELETE) then
l_event  := DELETED;
end if;
if ((l_event = ADDED) or
(l_event = UPDATED) or
(l_event = DELETED)) then
-- Set the Portal Context.
portal.wwctx_api.set_context(l_portal_user_name, l_portal_password);

begin
-- Get the Item Display name from the all items view.
select display_name
into l_display_name
from portal.wwsbr_all_items
where id=message.object_id
and caid=message.object_site_id;
exception
when NO_DATA_FOUND then
dbms_output.put_line(sqlerrm);
exit;
end;

-- Only send an e-mail if the item has a display name.
if (l_display_name is not null) then
-- Construct the body of the message.
l_body := l_body || '<br>An item titled '
|| CSBR_UTIL.file_viewer_hyperlink(
message.object_id, message.page_site_id, l_display_name)
|| ' was '
|| l_event || ' on '
|| to_char(message.events_date,'dd-mon-yyyy hh12:mi pm')
|| ' by ' || message.events_user || '. ';
-- Send the message.
html_email(
p_from => l_from_user,
p_to => l_to_user,
p_subject => 'Item ' || l_event || ' Notification',
p_text => 'Text',
p_html => l_body
);
end if;
end if;
end if;
end if;
end_time :=  dbms_utility.get_time;
if (end_time - begin_time) > 3000 then
exit;
end if;
end loop;
end;
/

ITEM_NOTIFY CMEFサブスクライバは、キューから実際のイベントを削除し、複数の電子メールがユーザーに送信されないようにします。

注意:

アイテムのURLを取得するfile_viewer_hyperlinkファンクション、およびメッセージの実際の送信を処理するhtml_emailプロシージャの詳細は、「追加コード」を参照してください。

AQイベントのパフォーマンスおよび実行時間の詳細は、OTNの「Streams Advanced Queuing」ページを参照してください。

http://www.oracle.com/technology/products/aq

サブスクライバをWWSBR_EVENT_Qキューに追加する方法の例は、例16-10を参照してください。

サブスクライバの実行方法の例は、例16-11を参照してください。

ITEM_NOTIFY CMEFサブスクライバは、3秒間実行されます。これにより、サブスクライバが作動し続けてシステム・リソースを消費することがなくなります。また、サブスクライバで使用されるwait_time値をより高い値(60秒など)に変更し、サブスクライバが新しいイベントを毎分リスニングすることもできます。例16-13に示すように、DBMS_JOBを使用して、サブスクライバを一定間隔(30分など)で実行することもできます。

例16-13 DMBS_JOBの使用

declare
v_job number;
begin
dbms_job.submit(
job      => v_job,
what     => 'item_notify()',
interval => 'SYSDATE + (30/(24*60))'
);
end;
/

追加コード

例16-14は、CSBR_UTILパッケージを示します。

例16-14 CSBR_UTILパッケージ

create or replace package CSBR_UTIL as
function file_viewer_hyperlink(
p_item_id in number,
p_caid    in number,
p_text    in varchar2) return varchar2;
end;

create or replace package body CSBR_UTIL as

function file_viewer_url(
p_item_id in number,
p_caid    in number) return varchar2 is

l_return      varchar2(10000);
l_item_name   varchar2(100);
l_folder_id   number;
l_folder_name varchar2(100);
l_portal_url  varchar2(1000);
begin
select name, folder_id
into l_return, l_folder_id
from portal.wwsbr_all_items
where id   = p_item_id
and caid   = p_caid
and active = 1;
begin
while 1=1 loop
select parent_id, name
into l_folder_id, l_folder_name
from portal.wwsbr_all_folders
where id = l_folder_id
and caid = p_caid;
l_return := l_folder_name||'/'||l_return;
end loop;
exception
when NO_DATA_FOUND then
null; -- Exit loop at no rows found, this is expected.
END;
-- Set the Portal URL.
l_portal_url := 'http://<host>:<port>/portal/page/<dad>/';
return l_portal_url||l_return;
exception
when OTHERS then
dbms_output.put_line(sqlerrm);
return 'Error';
end file_viewer_url;

function file_viewer_hyperlink(
p_item_id in number,
p_caid    in number,
p_text    in varchar2) return varchar2 is
begin
return ('<a href="'||file_viewer_url(
p_item_id => p_item_id,
p_caid    => p_caid)||'">'||p_text||'</a>');
end file_viewer_hyperlink;

end;
/

例16-15は、html_emailプロシージャを示します。

注意:

このプロシージャを実行するには、データベースにOracle Database Sendmailパッケージをデプロイする必要があります。

例16-15 HTML電子メール・プロシージャ

create or replace procedure html_email(
p_to      in varchar2,
p_from    in varchar2 default '',
p_subject in varchar2,
p_text    in varchar2 default null,
p_html    in varchar2 default null
)
is
l_boundary   varchar2(255) default 'a1b2c3d4e3f2g1';
l_connection utl_smtp.connection;
l_body_html  clob := empty_clob; -- This LOB will be the e-mail message.
l_offset     number;
l_ammount    number;
l_temp       varchar2(32767) default null;
begin
l_connection := utl_smtp.open_connection('<Mail Server here>');
utl_smtp.helo( l_connection, '<Mail Server here>' );
utl_smtp.mail( l_connection, p_from );
utl_smtp.rcpt( l_connection, p_to );
l_temp := l_temp || 'MIME-Version: 1.0' || chr(13) || chr(10);
l_temp := l_temp || 'To: ' || p_to || chr(13) || chr(10);
l_temp := l_temp || 'From: ' || p_from || chr(13) || chr(10);
l_temp := l_temp || 'Subject: ' || p_subject || chr(13) || chr(10);
l_temp := l_temp || 'Reply-To: ' || p_from || chr(13) || chr(10);
l_temp := l_temp || 'Content-Type: multipart/alternative; boundary=' || chr(34) || l_boundary || chr(34) || chr(13) || chr(10);
------------------------------------------------------------------------------
-- Write the headers.
dbms_lob.createtemporary( l_body_html, false, 10 );
dbms_lob.write(l_body_html, length(l_temp), 1,l_temp);

-------------------------------------------------------------------------------
-- Write the text boundary.
l_offset := dbms_lob.getlength(l_body_html) + 1;
l_temp   := '--' || l_boundary || chr(13) || chr(10);
l_temp   := l_temp || 'content-type: text/plain; charset=us-ascii' || chr(13) || chr(10) || chr(13) || chr(10);
dbms_lob.write(l_body_html, length(l_temp), l_offset, l_temp);

------------------------------------------------------------------------------
-- Write the plain text portion of the e-mail.
l_offset := dbms_lob.getlength(l_body_html) + 1;
dbms_lob.write(l_body_html, length(p_text), l_offset, p_text);

------------------------------------------------------------------------------
-- Write the HTML boundary.
l_temp := chr(13) || chr(10) || chr(13) || chr(10) || '--' || l_boundary || chr(13) || chr(10);
l_temp := l_temp || 'content-type: text/html;' || chr(13) || chr(10) || chr(13) || chr(10);
l_offset := dbms_lob.getlength(l_body_html) + 1;
dbms_lob.write(l_body_html, length(l_temp), l_offset, l_temp);

------------------------------------------------------------------------------
-- Write the HTML portion of the message.
l_offset := dbms_lob.getlength(l_body_html) + 1;
dbms_lob.write(l_body_html, length(p_html), l_offset, p_html);

------------------------------------------------------------------------------
-- Write the final HTML boundary.
l_temp := chr(13) || chr(10) || '--' || l_boundary || '--' || chr(13);
l_offset := dbms_lob.getlength(l_body_html) + 1;
dbms_lob.write(l_body_html, length(l_temp), l_offset, l_temp);

------------------------------------------------------------------------------
-- Send the e-mail in 1900 byte chunks to UTL_SMTP.
l_offset := 1;
l_ammount := 1900;
utl_smtp.open_data(l_connection);
while l_offset < dbms_lob.getlength(l_body_html) loop
utl_smtp.write_data(l_connection, dbms_lob.substr(l_body_html,l_ammount,l_offset));
l_offset := l_offset + l_ammount;
l_ammount := least(1900, dbms_lob.getlength(l_body_html) - l_ammount);
end loop;
utl_smtp.close_data(l_connection);
utl_smtp.quit( l_connection );
dbms_lob.freetemporary(l_body_html);
end;
/

16.7 例: アイテム検証

例16-16のitem_valication CMEFサブスクライバは、指定のポータル・ページに追加されたURLアイテムにURLが含まれるかどうかを検証します。アイテムにURLが含まれる場合、アイテムは、wwsbr_api.approve APIを使用して承認されます。そうでない場合、アイテムは、wwsbr_api.reject APIを使用して却下されます。

例16-16 ITEM_VALIDATION CMEFサブスクライバ

create or replace procedure item_validation as
MIME_TYPE_TEXT      constant varchar2(30) := 'text/plain';
agent_list          dbms_aq.aq$_agent_list_t;
wait_time           integer               := 5;
begin_time          pls_integer;
end_time            pls_integer;
agent_w_message     sys.aq$_agent;
dequeue_options     dbms_aq.dequeue_options_t;
message_properties  dbms_aq.message_properties_t;
message_handle      raw(16);
message             portal.wwsbr_event;
l_subscriber        varchar2(30)          := 'CMEF_ITEM_VALIDATION';
l_queue             varchar2(30)          := 'PORTAL.WWSBR_EVENT_Q';
l_mode              binary_integer        := dbms_aq.REMOVE;
l_attribute_site_id number                := 0;
l_event             varchar2(30);
l_doc               wwdoc_api.document_record;
l_desc              varchar2(4000);
l_portal_user_name  varchar2(30)          := 'portal';
l_portal_password   varchar2(30)          := ' <portal password>';
l_itemtype          varchar2(30)          := '';
l_url               varchar2(4000)        := '';
begin
begin_time :=  dbms_utility.get_time;
agent_list(1) := sys.aq$_agent(l_subscriber, l_queue, null);
loop
-- Wait for messages.
dbms_aq.listen(
agent_list => agent_list,
wait       => wait_time,
agent      => agent_w_message
);
if (agent_w_message.name = l_subscriber) then
dequeue_options.wait := DBMS_AQ.NO_WAIT;
dequeue_options.consumer_name := l_subscriber;
dequeue_options.navigation := dbms_aq.FIRST_MESSAGE;
dequeue_options.dequeue_mode := l_mode;
dbms_aq.dequeue(
queue_name         => l_queue,
dequeue_options    => dequeue_options,
message_properties => message_properties,
payload            => message,
msgid              => message_handle
);
-- If the event is an ITEM INSERT event and marked for later publication.
if ((message.action       = 'SUBMIT_ITEM_FOR_APPROVAL') and
(message.object_class = 'ITEM') and
(message.raw_event    = 'INSERT') and
(message.state        = 'NOT_PUBLISHED')) then

-- Set the Portal Context.
portal.wwctx_api.set_context(l_portal_user_name, l_portal_password);
-- Get the Object Information.
begin
select itemtype, url
into l_itemtype, l_url
from portal.wwsbr_all_items
where id=message.object_id
and caid=message.object_site_id;
exception
when NO_DATA_FOUND then
dbms_output.put_line(sqlerrm);
exit;
end;
-- If the item type is a URL and no URL is specified.
if (l_itemtype = portal.wwsbr_thing_types.BASE_ITEM_TYPE_URL) and
(l_url is null) then
begin
-- Update item to indicate that a URL needs to be specified.
l_desc := '<font color=RED>NO URL SPECIFIED</font>';
-- Reset the CMEF global variables.
wwsbr_api.clear_cmef_context;
wwsbr_api.set_attribute(
p_site_id           => message.object_site_id,
p_thing_id          => message.object_id,
p_attribute_site_id => l_attribute_site_id,
p_attribute_id      => wwsbr_api.ATTRIBUTE_DESCRIPTION,
p_attribute_value   => l_desc
p_log_cmef_message  => FALSE
);
-- Reject the item.
wwsbr_api.reject(
p_item_id => message.object_id,
p_site_id => message.object_site_id,
p_comment => 'Rejected'
);
-- Reset the CMEF global variables.
wwsbr_api.clear_cmef_context;
exception
when OTHERS then
dbms_output.put_line(sqlerrm);
end;
else
-- Approve the item.
begin
wwsbr_api.approve(
p_item_id => message.object_id,
p_site_id => message.object_site_id,
p_comment => 'Approved'
);
-- Reset the CMEF global variables.
wwsbr_api.clear_cmef_context;
exception
when OTHERS then
dbms_output.put_line(sqlerrm);
end;
end if;
commit;
end if;
end if;
end_time :=  dbms_utility.get_time;
if (end_time - begin_time) > 3000 then
exit;
end if;
end loop;
-- Process cache invalidation messages.
wwpro_api_invalidation.execute_cache_invalidation;
end;
/

item_validation CMEFサブスクライバの次のチェックにより、アイテムに承認が必要かどうかを確認します。

-- If the event is an ITEM INSERT event and marked for later publication.
if ((message.action       = 'SUBMIT_ITEM_FOR_APPROVAL') and
(message.object_class = 'ITEM') and
(message.raw_event    = 'INSERT') and
(message.state        = 'NOT_PUBLISHED')) then
. . .
end if;

item_validation CMEFサブスクライバには、wwsbr_api.set_attribute APIを使用して、ユーザーがURLを指定していないことを示すためアイテムの説明が設定されます。また、サブスクライバでは、このAPIをコールするときにCMEFメッセージをログに記録しないことも選択されます(p_log_cmef_messages = FALSE)。

-- Update item to indicate that a URL needs to be specified.
l_desc := '<font color=RED>No FILE NAME SPECIFIED</font>';
wwsbr_api.set_attribute(
p_site_id           => l_thing.siteid,
p_thing_id          => l_thing.id,
p_attribute_site_id => l_attribute_site_id,
p_attribute_id      => wwsbr_api.ATTRIBUTE_DESCRIPTION,
p_attribute_value   => l_desc
p_log_cmef_message  => FALSE
);

approveまたはreject APIを使用してアイテムを承認または却下すると、Oracle Portal UIを介してアイテムが承認または却下されたときと同様のイベントがトリガーされます。たとえば、wwsbr_api.approve APIをコールすると、INSERTイベントがAPPROVE_ITEMのアクションとともにトリガーされます。

wwsbr_api.approve(
p_item_id => l_thing.id,
p_site_id => l_thing.siteid,
p_comment => 'Approved'
);

サブスクライバをWWSBR_EVENT_Qキューに追加する方法の例は、例16-10を参照してください。

サブスクライバの実行方法の例は、例16-11を参照してください。

16.8 例: 外部ワークフローの統合

組織では、ビジネス・プロセスを企業ポータルに統合する必要があることが数多くあります。Oracle Workflowの機能を使用して、組織に定義されているコンプライアンス・ルールに応じてあらゆるタイプの情報をルーティングするようにポータルを実装できます。CMEFを使用すると、従来のアプリケーション・ベースのワークフローとE-Business統合ワークフローの両方をOracle Portalコンテンツ管理システムに統合できます。

この項では、外部ワークフローをOracle Portalコンテンツ管理システムに統合する方法の例を示します。

16.8.1 ワークフローとOracle Portalの統合

Oracle Workflowは、Oracle Application ServerおよびOracle E-Business Suiteのコンポーネントであり、Oracle Workflowによって、内部ビジネス・プロセスの設計および中央リポジトリへの格納が可能になります。Oracle Workflowを使用して、様々なタイプのコンプライアンス義務に対応し、監査可能かつ反復可能なプロセスを設計し、事前に承認および制限を強制的に設定できます。Oracleの最新のコンプライアンス・ソリューションであるOracle Internal Controls Manager (Oracle ICM)は、Oracle Workflowと連携して内部ビジネス・プロセスを監視し、これらが設計どおりに実行されていることを確認するために使用されます。

通常、コンテンツの承認のためにOracle WorkflowをOracle Portalコンテンツ管理システムに統合する作業には次の5つの手順が含まれます。

1. Oracle Portalで承認と通知を有効にします。

2. ユーザーに「承認付きアイテムの管理」権限を付与します。

3. アイテムを承認または却下するためにOracle Workflowプロセスによって使用されるポータル・ユーザーを作成し、このユーザーをポータル承認プロセスに追加します。

4. このワークフロー・プロセスをOracle Workflowに登録します。このワークフロー・プロセスは、コンプライアンス・プロセスをコールするか、実際のコンプライアンス・プロセスを実行します。

5. サブスクライバ・コードを作成し、CMEFイベントを処理するためこのサブスクライバをWWSBR_EVENT_Qに追加します。このサブスクライバは、ワークフロー・エンジンを初期化してから、ワークフロー・プロセスをコールします。

この流れを確認するには、16.7項「例: アイテム検証」で説明されているアイテム検証例を変更し、ワークフロー・プロセスをコールしてアイテム検証を実行します。

図16-7のダイアグラムに基づいて、このプロセスの流れを確認してください。

図16-7 WorkflowとOracle Portalの統合のプロセス・フロー

16.8.2 例の概要

図16-7は、CMEFを使用してOracle WorkflowをOracle Portalコンテンツ管理システムに統合するためのプロセス・フローのダイアグラムを示します。「承認付きアイテムの管理」権限を持つユーザーがアイテムをポータルに追加すると、アイテムは保留中としてマークされます。例16-16のITEM_VALIDATIONサブスクライバと同様に、Oracle Streamsアドバンスト・キューイング・サブスクライバは、WWSBR_EVENT_Qキュー上でイベントをリスニングする必要があります(例16-17を参照)。イベントのタイプがSUBMIT_ITEM_FOR_APPROVALである場合、サブスクライバは、ワークフロー・エンジン・プロセスWF_CHECKURLを起動し、ポータル・アイテムのパラメータをワークフロー・プロセスに渡します。ワークフロー・プロセスは、外部PL/SQLプロシージャ(例16-18を参照)をコールし、そのビジネス・ロジックを実行します。この場合、ビジネス・ロジックには、ポータル・アイテムの承認または却下が含まれます。

URLが指定されている場合、Oracle Workflowは、wwsbr_api.approve APIを使用してアイテムを承認します。そうでない場合は、wwsbr_api.reject APIを使用してアイテムを却下します。

この例では、次の前提条件が想定されています。

- CMEFSAMPLESスキーマが、Portalスキーマと同じデータベースに存在しています。

- Oracle OWF_MGRワークフロー・スキーマが、Portalスキーマと同じデータベースにインストールされています。

- AQ_TM_PROCESSESパラメータが、5以上に設定されています。これをチェックするには、SYSユーザーとしてデータベースにログインし、次の問合せを実行します。

select value
from   v$parameter
where  name = 'aq_tm_processes';

この値が5未満である場合、次のように値を設定します。

alter system set aq_tm_processes=5;

- データベースを再起動します。

- Oracle Portal 11gがインストールされています。

16.8.3 詳細な例の説明

「承認付きアイテムの管理」権限を持つポータル・ユーザーがアイテムをページに追加すると、SUBMIT_ITEM_FOR_APPROVALイベントがWWSBR_EVENT_Qキューに追加されます。このアイテムは、ポータル・ページ上で保留中としてマークされます。このユーザーのアイテムをページに表示するには、アイテムを承認する必要があります。

Streamsアドバンスト・キューイング・サブスクライバCMEF_WORKFLOWは、WWSBR_EVENT_Q上でイベントをリスニングします。イベントのタイプがSUBMIT_ITEM_FOR_APPROVALである場合、ワークフロー・エンジン・プロセスが起動され、ポータル・アイテムのパラメータがワークフロー・プロセスに渡されます。

ワークフロー・プロセスWF_CHECKURLは、そのビジネス・ロジックを実行します。この場合、ビジネス・ロジックにはポータル・アイテムの承認または却下が含まれます。WF_CHECKURLは、アイテムを承認または却下するためにビューおよびAPIを使用します。アイテムが承認されると、APPROVE_ITEMイベントがWWSBR_EVENT_Qに追加されます。アイテムが却下されると、REJECT_ITEMイベントがWWSBR_EVENT_Qに追加されます。

ページをリフレッシュすると、ページ上でアイテムが公開される(承認された場合)または削除される(却下された場合)ことを確認できます。

この例では、次の6つの手順が実行されます。

1. 16.8.3.1項「Oracle Portalでの承認と通知の有効化」

2. 16.8.3.2項「ユーザーへの「承認付きアイテムの管理」権限の付与」

3. 16.8.3.3項「スクリプト(CMEFによるWorkflowの統合の例用)の実行」

4. 16.8.3.4項「サブスクライバおよびチェック・プロシージャの作成」

5. 16.8.3.5項「Oracle WorkflowへのWF_CHECKURLプロセスの登録」

6. 16.8.3.6項「WWSBR_EVENT_QキューへのCMEF_WORKFLOWサブスクライバの追加」

これらの各手順の詳細は、次の各項を参照してください。

16.8.3.1 Oracle Portalでの承認と通知の有効化

最初に実行する手順は、ページ・グループで承認と通知を有効にすることです。

承認と通知を有効にする手順は、次のとおりです。

1. ページ・グループの任意のページに移動し、「編集」モードに切り替えます。

2. ページ上部のツールバーで、「ページ・グループ」の横にある「プロパティ」リンクをクリックします。

注意:

「ページ」の横にあるリンクではなく、「ページ・グループ」の横にあるリンクをクリックしてください(図16-2)。

3. 「構成」タブをクリックして前面に表示します。

4. 「承認と通知」セクションで、承認および通知が有効か無効かを確認できます。この設定を変更するには、「編集」リンクをクリックします(図16-8)。

図16-8 ページ・グループの承認と通知のステータス

5. 承認と通知を有効にするには、「承認と通知を有効にする」チェック・ボックスを選択します(図16-9)。

図16-9 ページ・グループの承認と通知の有効化または無効化

6. 「OK」をクリックして変更内容を保存します。

7. 「閉じる」をクリックして、ページに戻ります。

16.8.3.2 ユーザーへの「承認付きアイテムの管理」権限の付与

注意:

ポータル・アイテムの承認または却下が外部ワークフロー・プロセスに不要な場合は、この手順をスキップできます。

次の手順は、アイテムの承認を必要とするすべてのユーザーに対して「承認付きアイテムの管理」権限を付与することです。この例では、すべてのユーザーがアイテムの承認を要求するように指定しています。

すべてのユーザーがアイテムの承認を要求するように指定する手順は、次のとおりです。

1. ページ・グループの任意のページに移動し、「編集」モードに切り替えます。

2. ページ上部のツールバーで、「ページ・グループ」の横にある「プロパティ」リンクをクリックします。

注意:

「ページ」の横にあるリンクではなく、「ページ・グループ」の横にあるリンクをクリックしてください(図16-2)。

3. 「承認」タブをクリックして前面に表示します。

4. 「すべてのユーザーに承認を要求する」チェック・ボックスを選択します(図16-10)。

図16-10 すべてのユーザーがアイテムの承認を必要とする指定

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

16.8.3.3 スクリプト(CMEFによるWorkflowの統合の例用)の実行

次の手順を実行する前に、実行する必要のあるタスクがいくつかあります。手順は次のとおりです。

1. SYSスキーマにログインし、次のコマンドを実行します。

GRANT EXECUTE ON owf_mgr.wf_engine to cmefsamples;

2. Portalスキーマにログインし、provsyns.sqlを実行します。スキーマ/プロバイダ名を入力するよう求められるので、owf_mgrと入力します。

3. CMEFSAMPLESスキーマにログインし、次を実行します。

drop sequence WF_SEQ

create sequence WF_SEQ
increment by 1
start with 1
maxvalue 1000000000
minvalue 1
cache 20

grant select on wf_seq to owf_mgr;

これにより、ワークフローで必要とされる順序が作成され、順序に対する「SELECT」権限がOWF_MGRワークフロー・スキーマに付与されます。

4. ワークフロー・スキーマにシノニムWF_ENGINEを作成します。

create synonym wf_engine for owf_mgr.wf_engine;

16.8.3.4 サブスクライバおよびチェック・プロシージャの作成

承認を必要とするアイテムをユーザーが追加するまでWWSBR_EVENT_Qキューをリスニングするサブスクライバを作成する必要があります。このサブスクライバは、WF_CHECKURLワークフロー・プロセスをコールして、アイテム検証を実行し、電子メール通知を送信します。例16-17は、WORKFLOW_APPROVALサブスクライバのコードを示します。

例16-17 WORKFLOW_APPROVALサブスクライバ

create or replace procedure workflow_approval is
MIME_TYPE_TEXT      constant varchar2(30) := 'text/plain';
agent_list          dbms_aq.aq$_agent_list_t;
wait_time           integer               := 30;
begin_time          pls_integer;
end_time            pls_integer;
agent_w_message     aq$_agent;
dequeue_options     dbms_aq.dequeue_options_t;
message_properties  dbms_aq.message_properties_t;
message_handle      raw(16);
message             portal.wwsbr_event;
l_subscriber        varchar2(30)          := 'CMEF_WORKFLOW';
l_queue             varchar2(30)          := 'PORTAL.WWSBR_EVENT_Q';
l_mode              binary_integer        := dbms_aq.REMOVE;
l_attribute_site_id number                := 0;
l_event             varchar2(30);
l_doc               wwdoc_api.document_record;
l_desc              varchar2(4000);
l_itemkey           varchar2(100);
l_job_nr            number;
l_itemtype          varchar2(100)         := 'WF';
l_wf_process        varchar2(100)         := 'WF_CHECKURL';
l_is_indirect       boolean               := TRUE;
l_portal_user_name  varchar2(30)          := 'portal';
l_portal_password   varchar2(30)          := '<portal password>';
l_url               varchar2(4000);       := '';

begin
begin_time := dbms_utility.get_time;
agent_list(1) := aq$_agent(l_subscriber, l_queue, null);
loop
-- Wait for messages.
dbms_aq.listen(
agent_list => agent_list,
wait       => wait_time,
agent      => agent_w_message
);
if (agent_w_message.name = l_subscriber) then
dequeue_options.wait          := dbms_aq.NO_WAIT;
dequeue_options.consumer_name := l_subscriber;
dequeue_options.navigation    := dbms_aq.FIRST_MESSAGE;
dequeue_options.dequeue_mode  := l_mode;
dbms_aq.dequeue(
queue_name         => l_queue,
dequeue_options    => dequeue_options,
message_properties => message_properties,
payload            => message,
msgid              => message_handle
);
-- If the event is an ITEM INSERT event and marked for later publication.
if ((message.action       = 'SUBMIT_ITEM_FOR_APPROVAL') and
(message.object_class = 'ITEM') and
(message.raw_event    = 'INSERT') and
(message.state        = 'NOT_PUBLISHED') then
portal.wwctx_api.set_context(l_portal_user_name, l_portal_password);
-- Get the URL property for the object.
select url
into l_url
from portal.wwsbr_all_items
where id = message.object_id
and caid = message.object_site_id;
-- Get the nextval of the workflow sequence for the itemkey.
select wf_seq.nextval
into l_job_nr
from dual;
l_itemkey := lpad(to_char(l_job_nr), 5, '0');
-- Launch the workflow engine process and pass the paramters for
-- the portal item to the workflow process.
wf_engine.createprocess(l_itemtype, l_itemkey, l_wf_process);
-- Set the value for the portal URL.
wf_engine.setitemattrtext(l_itemtype, l_itemkey, 'PORTAL_URL', l__url);
-- Set the value for the portal item ID.
wf_engine.setitemattrnumber(l_itemtype, l_itemkey, 'PORTAL_ITEM_ID', message.object_id);
-- Set the value for the portal page group ID.
wf_engine.setitemattrnumber(l_itemtype, l_itemkey, 'PORTAL_SITE_ID', message.object_site_id);
-- Start the workflow process.
wf_engine.startprocess(l_itemtype, l_itemkey);
end if;
end if;
end_time := dbms_utility.get_time;
if (end_time - begin_time) > 3000 then
exit;
end if;
end loop;
exception
when OTHERS then
dbms_output.put_line(sqlerrm);
end workflow_approval;
/

ユーザーがアイテムのファイル名を指定したかどうかをチェックし、アイテムが承認可能かどうかを判別するプロシージャも作成する必要があります。ワークフロー・プロセスは、アイテムの実際の検証および承認をこのCHECK_URLプロシージャに委任します。例16-18に、CHECK_URLプロシージャの作成方法を示します。

例16-18 CHECK_URLプロシージャ

create or replace procedure check_url(
itemtype  in  varchar2,
itemkey   in  varchar2,
actid     in  number,
funcmode  in  varchar2,
resultout out varchar2) is

MIME_TYPE_TEXT      constant varchar2(30) := 'text/plain';
agent_list          dbms_aq.aq$_agent_list_t;
wait_time           integer               := 30;
begin_time          pls_integer;
end_time            pls_integer;
agent_w_message     aq$_agent;
dequeue_options     dbms_aq.dequeue_options_t;
message_properties  dbms_aq.message_properties_t;
message_handle      RAW(16);
message             portal.wwsbr_event;
l_subscriber        varchar2(30)      := 'CMEF_WORKFLOW';
l_queue             varchar2(30)      := 'PORTAL.WWSBR_EVENT_Q';
l_mode              BINARY_INTEGER    := dbms_aq.REMOVE;
l_attribute_site_id number            := 0;
l_event             varchar2(30);
l_doc               wwdoc_api.document_record;
l_desc              varchar2(4000);
l_itemtype          varchar2(100)    := 'WF';
l_itemkey           varchar2(100);
l_url               varchar2(100);
l_siteid            number;
l_itemid            number;
l_ignore            boolean          := FALSE;
l_is_indirect       boolean          := TRUE;
l_portal_user_name  varchar2(30)     := 'portal';
l_portal_password   varchar2(30)     := '<portal password>');
begin
-- Get the values for the attributes stored in the procedure.
l_url := wf_engine.getitemattrtext(itemtype,itemkey,'PORTAL_URL',l_ignore);
l_itemid := wf_engine.getitemattrnumber(itemtype,itemkey,'PORTAL_ITEM_ID',l_ignore);
l_siteid := wf_engine.getitemattrnumber(itemtype,itemkey,'PORTAL_SITE_ID',l_ignore);
-- Set the portal context.
portal.wwctx_api.set_context(l_portal_user_name, l_portal_password);
-- If the item type is a URL item and no URL is specified.
if l_url is null then
begin
-- Update the item to indicate that the URL needs to be specified.
l_desc := '<font color=RED>NO URL SPECIFIED</font>';
-- Reset the CMEF global variables.
wwsbr_api.clear_cmef_context;
wwsbr_api.set_attribute(
p_site_id           => l_siteid,
p_thing_id          => l_itemid,
p_attribute_site_id => l_attribute_site_id,
p_attribute_id      => wwsbr_api.attribute_description,
p_attribute_value   => l_desc
p_log_cmef_message  => FALSE
);
-- Reject the item.
wwsbr_api.reject(
p_item_id     => l_itemid,
p_site_id     => l_siteid,
p_is_indirect => l_is_indirect,
p_comment     => 'Rejected'
);
-- Reset the CMEF global variables.
wwsbr_api.clear_cmef_context;
end;
else
-- Approve the item.
begin
wwsbr_api.approve(
p_item_id => l_itemid,
p_site_id => l_siteid,
p_comment => 'Approved'
);
-- Reset the CMEF global variables.
wwsbr_api.clear_cmef_context;
end;
end if;
commit;
-- Process cache invalidation messages.
wwpro_api_invalidation.execute_cache_invalidation;
exception
when OTHERS then
dbms_output.put_line(sqlerrm);
end check_url;
/

注意:

CMEFSAMPLESは、WORKFLOW_APPROVALおよびCHECK_URLに対する実行権限をOWF_MGRに付与する必要があります。

grant execute on workflow_approval to owf_mgr;
grant execute on check_filename to owf_mgr;

16.8.3.5 Oracle WorkflowへのWF_CHECKURLプロセスの登録

WF_CHECKURLプロセスは、実際にポータル・アイテムを承認または却下し、電子メール通知を送信します。Oracle Workflow Builderを使用して、このプロセスをOracle Workflowに登録する必要があります(図16-11)。

図16-11 CHECK_FILE Oracle Workflowプロセス

次の手順を使用して、WF_CHECKURLプロセスをOWF_MGRスキーマにインストールします。

1. Oracle Workflow Builderを開きます。

ヒント:

Workflow Builderのインストール後、ORACLE_HOME環境変数をWorkflow Builderの環境変数に設定する必要があるため、コマンドラインでの実行が必要となる場合があります。例:

set ORACLE_HOME=c:\oraclewf

2. 新しいワークフロー・プロジェクトを開始します。

3. ワークフロー・プロジェクトをwf_checkurl.wftとして保存します。

4. Oracle Workflow Builderを閉じます。

5. メモ帳などのテキスト・エディタでwf_checkurl.wftを開きます。

6. WF_CHECKURLコードをコピーしてファイルに貼り付けます。このコードは、Portal Centerからダウンロードできます。

http://www.oracle.com/technology/products/ias/portal/files/cm_overview_10g1014_cmef_samples.zip

7. ファイルを保存してテキスト・エディタを閉じます。

8. Oracle Workflow Builderでwf_checkurl.wftを開きます。

9. OWF_MGRスキーマを使用して、wf_checkurl.wftをポータル・データベースに保存します。

ヒント:

OWF_MGRのパスワードがわからない場合、MetaLinkノート198800.1を参照してください。

16.8.3.6 WWSBR_EVENT_QキューへのCMEF_WORKFLOWサブスクライバの追加

次に、例16-19に示すように、CMEF_WORKFLOWサブスクライバをWWSBR_EVENT_Qキューに追加して、このサブスクライバがCMEFイベントを処理し、WF_CHECKURL Oracle Workflowプロセスをトリガーできるようにします。

例16-19 WWSBR_EVENT_QキューへのCMEF_WORKFLOWサブスクライバの追加

declare
subscriber sys.aq$_agent;
begin
1_subscriber := sys.aq$_agent('CMEF_WORKFLOW', null, null);
dbms_aqadm.add_subscriber(
queue_name => 'portal.wwsbr_event_q',
1_subscriber => subscriber
);
end;
/

「承認付きアイテムの管理」権限を持つユーザーがアイテムをページに追加すると、このアイテムは保留中としてマークされ、単一のINSERTイベント(状態は「NOT_PUBLISHED」)が発生します。

アクション

イベント

状態

オブジェクト・クラス

SUBMIT_ITEM_FOR_APPROVAL

INSERT

NOT_PUBLISHED

ITEM

CMEF_WORKFLOW_APPROVALサブスクライバは、このアクションに応答し、PORTAL_ITEM_WORKFLOW Oracle Workflowプロセスを起動します。

PORTAL_ITEM_APPROVAL Oracle Workflowプロセスは、そのビジネス・ロジックを実行し、Oracle Portalのapproveまたはreject APIをコールして、アイテムを承認または却下します。また、指定された電子メールIDに対して承認状態を示す電子メール通知も送信します。

第IV部

付録

第IV部の内容は次のとおりです。

- 付録A「ポートレット・ビルダーを使用したポートレットの作成」

- 付録B「ポートレットおよびプロバイダのトラブルシューティング」

- 付録C「プロファイル・アイテムと属性のマッピング」

- 付録D「手動によるPDK-Javaプロバイダのパッケージ化およびデプロイ」

- 付録E「Oracle Portalプロバイダ・テスト・スイート」

- 付録F「コンテンツ管理のAPIおよびビュー」

- 付録G「コンテンツ管理イベント・フレームワークのイベント」

A ポートレット・ビルダーを使用したポートレットの作成

ポートレット・ビルダーの使用の詳細は、Oracle Technology Network(http://www.oracle.com/technology/documentation/appserver1012.html)にあるOracle Application Serverリリース2 (10.1.2.0.2)のライブラリの『Oracle Fusion Middleware Oracle Portal開発者ガイド・リリース2 (10.1.4)』の付録A「ポートレット・ビルダーを使用したポートレットの作成」を参照してください。

B ポートレットおよびプロバイダのトラブルシューティング

この付録には、Oracle Portalの使用中に発生する可能性のある代表的な問題と、その解決方法を記載します。内容は、次のとおりです。

- B.1項「一般的なポートレットの問題」

- B.2項「Javaポートレットの問題」

- B.3項「OmniPortletの問題」

- B.4項「Webクリッピングの問題」

- B.5項「関連情報」

注意:

この章全体にわたって、ORACLE_HOMEへの参照が記載されています。ORACLE_HOMEはOracleホームのフルパスを表し、どのOracleホームが参照されているかが自明な場合に使用されます。プロシージャで中間層、OracleAS Infrastructure、またはOracle Metadata Repositoryの各Oracleホームを区別する必要がある場合は、次の表記規則が使用されます。

- MW_HOME: Oracle Fusion Middlewareホームのフルパスを表します。

- ORACLE_HOME: 中間層のOracleホームのフルパスを表します。

- ORACLE_INSTANCE: ORACLE_HOMEと関連付けられたインスタンス・ホームのフルパスを表します。

- INFRA_ORACLE_HOME: Oracle Application Server InfrastructureのOracleホームのフルパスを表します。

- METADATA_REP_ORACLE_HOME: Oracle Metadata Repositoryを含んだOracle Infrastructureホームのフルパスを表します。

B.1 一般的なポートレットの問題

この項では、すべてのポートレットに共通する問題と解決方法を記載します。内容は、次のとおりです。

- B.1.1項「ポートレットのリフレッシュ障害」

- B.1.2項「ポートレットにHTMLタグが表示される」

B.1.1 ポートレットのリフレッシュ障害

JavaScript document.write()メソッドをMozillaブラウザで使用すると、ポートレットのリフレッシュが機能しないことがあります。

問題

FirefoxなどのMozillaブラウザを使用する場合、document.write()メソッドを使用するとポートレットのリフレッシュが適正に機能しなくなります。

解決方法

Firefoxでポートレットのリフレッシュを機能させるには、出力でdocument.write()を使用しないでください。使用せざるを得ない場合は、レンダリングでポートレットに「リフレッシュ」アイコンおよび「リストア」アイコンを表示させないようにしてください。また、ポートレットのリフレッシュをオフにし、リージョン・レベルでリストアすることもできます。

B.1.2 ポートレットにHTMLタグが表示される

以前のリリースから11g リリース1 (11.1.1)にアップブレードすると、書式に変換されなかったHTMLがポートレット・タイトルなどポートレット内に表示されることがあります。

問題

ポートレットを表示すると、HTMLの生タグが表示されます。たとえば、次がポートレット・タイトル内に表示されたとします。

<b>Oracle Application Server 10<i>g</i> Collateral</b>

これは、次のように表示されるように予期していたものです。

Oracle Application Server 10g Collateral

クロス・サイト・スクリプティング(XSS)攻撃に対して防衛するため、Oracle Portalリリース10.1.4ではデフォルトですべてのユーザー入力をエスケープ処理します。このように、旧リリースのフォーマット内にあるHTMLタグには、プレーン・テキストにエスケープ処理されるため、このリリースでは書式に変換されないものがあります。

解決方法

この問題は次の2つの方法で解決できます。

- HTMLタグの入力を禁止し、プレーン・テキストのみを入力するようにユーザーに通知します。

- 互換性モードをオンにして、Oracle Portalインスタンスをリリース10.1.4より前のリリースと同じように動作させます。つまり、HTMLをプレーン・テキストにエスケープ処理するデフォルトの機能を停止します。互換性モードをオンにするとポータル・インスタンスのセキュリティが低下しますので、注意してください。

これらのオプションの詳細は、『Oracle Fusion Middleware Oracle Portal, Forms, ReportsおよびDiscovererアップグレード・ガイド』を参照してください。

B.2 Javaポートレットの問題

この項では、Javaポートレットに共通する問題と解決方法を記載します。内容は、次のとおりです。

- B.2.1項「ポートレットのロギング」

- B.2.2項「インストールとデプロイの問題」

- B.2.3項「ポートレット・コードをコンパイルできない」

- B.2.4項「アプリケーション・サーバーの接続テストに失敗する」

- B.2.5項「プロバイダ・テスト・ページにエラーが表示される」

- B.2.7項「ポートレットがページに表示されない」

- B.2.8項「最初は表示されたポートレットがその後ページに表示されない」

B.2.1 ポートレットのロギング

この付録の他の項で説明されている問題以外にポートレットの問題が発生した場合には、次の一般的なテクニックを使用して問題を解決してください。

問題1

ポータル・ページにアクセスした際に、ポートレットが表示されないか、またはエラー・メッセージが表示されます。

解決方法1

診断ログ・ファイルをチェックしてエラーを探します。

Oracle Portalの場合:

MW_HOME\user_projects\domains\<DomainName>\servers\WLS_PORTAL\logs\WLS_PORTAL-diagnostic.log

カスタムWebプロバイダの場合:

MW_HOME\user_projects\domains\<DomainName>\servers\WLS_PORTAL\logs\WLS_PORTAL-diagnostic.log

問題2

問題解決の手がかりとなる情報がログ・ファイルに記録されません。

解決方法2

プロバイダのログ・レベルを上げてさらに詳細なログ情報を作成します。このためには、web.xmlファイルに次のエントリを追加します。

<env-entry>
<env-entry-name>oracle/portal/provider/global/log/logLevel</env-entry-name>
<env-entry-value>6</env-entry-value>
<env-entry-type>java.lang.Integer</env-entry-type>
</env-entry>

B.2.2 インストールとデプロイの問題

この項では、PDK-Javaフレームワークおよびサンプルをインストールおよびデプロイするときに発生する可能性のある問題を記載します。

B.2.2.1 Javaクラス・オブジェクトが見つからない

Javaクラスが存在しないというエラー・メッセージが表示される場合です。例:

An unexpected error occurred-29540 : class
oracle/webdb/provider/web/HttpProviderDispatcher does not exist (WWC-43000)

問題

参照されているJavaクラス・オブジェクトがデータベースにないか、または無効です。PDK-JavaではなくOracle Portalが、クラスを実行できないときにこのエラー・メッセージを生成します。

解決方法

メインのOracle Portalスキーマでこのデータベースにログインします。SELECT文を実行して、オブジェクトがスキーマ内にあるかどうかを確認します。例:

SELECT object_name, object_type, status FROM user_objects
WHERE object_name like '%HttpProvider%'

引用符の間の名前は大/小文字を区別することに注意してください。

次のメッセージが返されます。

/3334f18_HttpProviderDispatcher

無効かまたは存在していないJAVA CLASSオブジェクトがないかどうかを確認します。Oracle Portalが正しくインストールされていないことがあるためです。その場合は、無効なオブジェクトを再コンパイルすると、問題が解決することがあります。

B.2.2.2 template.earファイルをデプロイできない

template.earをベースとしたEARファイルをデプロイするときに、次のエラー・メッセージが表示される場合です。

Invalid J2EE application file specified - Base Exception:
Cannot get xml document by parsing WEB-INF/web.xml in template.war: <Line 88,
Column 14> : '--' is not allowed in comments.
Resolution:

問題

web.xmlファイルには構文エラーがあります。

解決方法

web.xmlの構文が正しいかどうかを確認します。template.warに付属するweb.xmlの一部のバージョンでは、コメント・タグの位置に誤りがあります。新しいコメント・タグを開始する前に、コメント開始タグ<!--にすべて、対応するコメント終了タグ-->があるかどうかを確認します。

B.2.2.3 プロバイダ登録時のエラー

プロバイダを登録するときに、多数のエラーが発生する可能性があります。この項では、エラーの原因とその修正方法を説明します。自分の問題に関連した説明がこのセクションにない場合は、プロバイダのapplication.logを確認します。それでも解決できない場合は、Portalリポジトリ・ログのlogcfg.sqlを使用します。logcfg.sqlおよびapplication.logの詳細は、『Oracle Fusion Middleware Oracle Portal管理者ガイド』を参照してください。

問題1

次のエラー・メッセージが表示される場合です。

Internal error (WWC-00006)
The provider URL specified may be wrong or the provider is not running.
(WWC-43176)

OracleAS Portalは、プロバイダを登録する際に、Webポートレットにサービスを提供するリスナーに接続する必要があります。インストール手順に従ってプロバイダのテスト・ページhttp://host.domain:port/context/providers/servicenameにすでにアクセスしている場合は、Oracle Portalがマシンを認識しないことがあります。

解決方法1

Oracle Portalが存在するマシンが、Webプロバイダ・リスナーにアクセスできるかどうかを確認します。この設定を最も簡単にテストできる方法は、Oracle Portalリポジトリ・データベースのホスト上でブラウザを起動し、プロバイダのテスト・ページにアクセスしてみることです。プロバイダにアクセスするためにブラウザにプロキシ設定が必要な場合は、「管理」タブでOracle Portalと同じプロキシを設定する必要があります。また、プロバイダの登録時にこのプロキシを使用する必要があります。

Webプロバイダ・サーバーがDNSに登録されていない場合は、Oracle Portalサーバーのホスト・ファイルにエントリを追加します。

Oracle Portalデータベースのマシンとプロバイダのマシンの間にファイアウォールがある場合は、必要なポートが開いているかどうかを確認します。

問題2

次のエラー・メッセージが表示される場合です。

Internal error (WWC-00006)
The provider URL specified may be wrong or the provider is not running.
(WWC-43176)
The following error occurred during the call to Web provider: Can't read
deployment properties for service: _default (WWC-43147)

プロバイダを登録する際に、サービスIDを指定することもできます。「サービスID」フィールドに何も指定しない場合は、登録URLにはサービス名の部分が含まれず、http://host.domain:port/context/providers/のようになります。そのため、Oracle Portalは、_default.propertiesというデプロイ・ファイル内からデフォルトのサービスを検索しようとします。このファイルが見つからないときに、前述のエラー・メッセージが表示されるのです。

解決方法2

_default.propertiesというファイルをWARファイル内(次のパス)にバンドルします。

/Web-inf/deployment/

_default.propertiesファイルでは、プロバイダにサービスが指定されていない場合に使用できるデフォルトのサービスを定義する必要があります。ファイルは、次のような内容となる必要があります。

serviceClass=oracle.webdb.provider.v2.adapter.soapV1.ProviderAdapter
loaderClass=oracle.portal.provider.v2.http.DefaultProviderLoader
showTestPage=true
definition=providers/test/provider.xml
autoReload=true
testPageURI=/htdocs/testpage/TestPage.jsp

問題3

次のエラー・メッセージが表示される場合です。

Internal error (WWC-00006)
The provider URL specified may be wrong or the provider is not running.
(WWC-43176)
The following error occurred during the call to Web provider: Can't read
deployment properties for service: test (WWC-43147)

Oracle Portalが、「サービスID」フィールドまたは登録URLのhttp://host.domain:port/context/providers/servicenameのサービス名の部分で指定されたサービスのデプロイ・プロパティ・ファイルを見つけられません。たとえば、次のURLを使用してプロバイダを登録しようとしたときに、このエラー・メッセージを受け取ったとします。

http://host.domain:port/context/providers/test

この場合、WARファイル内(/Web-inf/deployment/)にtest.propertiesというファイルがない可能性があります。

解決方法3

デプロイ・プロパティ・ファイル(たとえば、test.properties)をWARファイル内(次のパス)にバンドルします。

/Web-inf/deployment/

ファイルは、次のような内容となる必要があります。

serviceClass=oracle.webdb.provider.v2.adapter.soapV1.ProviderAdapter
loaderClass=oracle.portal.provider.v2.http.DefaultProviderLoader
showTestPage=true
definition=providers/test/provider.xml
autoReload=true
testPageURI=/htdocs/testpage/TestPage.jsp

問題4

次のエラー・メッセージが表示される場合です。

An error occurred when attempting to call the providers register function.
(WWC-43134)
The provider URL specified may be wrong or the provider is not running.
(WWC-43176)
The following error occurred during the call to Web provider: Class
oracle.portal.provider.v2.render.RenderManager has no set or add method for tag
"createdOn" (WWC-43147)

解決方法4

DefaultProviderを使用している場合は、provider.xmlには要素<createdOn>が含まれます。初期化プロセスでは、XMLを解析するとき、メソッドを含む側の要素である当該のクラスからsetCreatedOnというメソッドを探します。例:

<renderer class="my.local.Renderer">
<createdOn>12-Mar-2001</createdOn>
...
</renderer>

この例では、初期化プロセスではmy.local.Renderer.setCreatedOn()を探します。今回のケースでは、このメソッドが存在せず、このエラーとなりました。

問題5

次のようなエラー・メッセージが表示される場合です。

(WWC-00006)
An unexpected error occurred: User-Defined Exception
(WWC-43000)
wwpro_api_provider_registry.register_provider
An unexpected error occurred: ava.sql.SQLException: Inserted value too large for column:

このエラーは、ポートレットのデータが制限を超過したことを示しています。各ポートレットのデータは4Kに制限されています。次の情報の合計長が、このデータ制限超過の原因です。

- プロバイダ名、表示名、説明

- パラメータ名、表示名、説明

- イベント名、表示名、説明

解決方法5

ポートレットで使用されるデータ量を削減するには、次のいずれかを行います。

- ポートレットのパラメータ名、イベント名、表示名、説明の長さを短くします。

- ポートレットのパラメータとイベントの数を減らします。

B.2.2.4 ポートレットをプロバイダに追加するときのエラー

ポートレットをプロバイダに追加したが、Oracle Portalでプロバイダを表示したときにその新しいポートレットが表示されません。

問題

問題の原因はprovider.xmlの構文エラーにある場合が最も多いですが、更新されたprovider.xmlファイルがなんらかの理由により見つからないことが原因の場合もあります。

解決方法

次の方法を試してみてください。

- provider.xmlを調べます。プロバイダ・タグ内で構文上正しく、ポートレットの開始タグと終了タグがペアで記述されているかどうかを確認します。例:

<provider class="oracle.portal.provider.v2.DefaultProviderDefinition"
session="true">
<portlet class="oracle.portal.provider.v2.DefaultPortletDefinition"
version="1">
<id>1</id>
...
</portlet>
<portlet class="oracle.portal.provider.v2.DefaultPortletDefinition"
version= "1">
<id>2</id>
...
</portlet>
</provider>

- テスト・ページでエラーを確認します。エラーが見つからなければ、プロバイダをリフレッシュします。

- プロバイダのapplication.logでエラーを確認します。

B.2.2.5 ポートレットが存在しない

次のエラー・メッセージが表示される場合です。

Error: The listener returned the following Message: 500 Portlet with id $1 doesn't
exist

問題

初めにページからポートレットを削除しないで、provider.xmlからポートレットを削除しました。ポートレットは、「カスタマイズ」ページに表示されなくなるため、ページから削除できません。

解決方法

ポートレットが含まれるリージョンを削除します。provider.xmlからポートレットを削除するときは、最初にページから削除することを覚えておいてください。

B.2.2.6 ファイルが見つからない

次のエラー・メッセージが表示される場合です。

Request URI:/jpdk/snoop/snoopcustom.jsp Exception: javax.servlet.ServletException:
java.io.FileNotFoundException:
C:\iAS\Apache\Apache\htdocs\jpdk\snoop\snoopcustom.jsp (The system cannot find the
path specified)

問題

JSPポートレットはページに追加できています。しかし、Oracle Portalは、provider.xmlからファイル・システム内のJSPを見つけられません。

解決方法

ファイルの名前と場所、およびprovider.xml内の情報を確認します。

B.2.2.7 XMLパーサー・エラー

XMLパーサーでは、provider.xmlの解析に失敗することがあります。この項では、エラーの原因とその修正方法を説明します。

問題1

次のエラー・メッセージが表示される場合です。

Error: The XML parser encountered an Error, and could not complete the conversion
for portlet id=150, it returned the following message: XML Parsing Error

プロバイダを登録するか、ページにポートレットを表示しようとしましたが、このエラー・メッセージが表示されました。provider.xmlの変更時に1つ以上のタグが破損したため、ファイルを解析できません。

解決方法1

provider.xmlのエラーを確認します。

問題2

次のエラー・メッセージが表示される場合です。

Error: The XML parser encountered an Error, and could not complete the conversion
for portlet id=146, it returned the following message: XSL reference value missing
in XML document.

ポートレットをページに追加するか、プロバイダを登録しようとしましたが、このエラーが表示されました。provider.xmlのポートレット情報が正しくない可能性があります。クラスのロケーションが誤っている可能性もあります。

解決方法2

タグが不足していないか、また、正しい順序になっているかどうかをチェックします。自分のクラス・ファイルが存在し、provider.xmlで正しく指定されているかどうかを確認します。

B.2.2.8 ポートレットを追加するときのエラー

ポートレットをページに追加しようとしたときに、次のエラー・メッセージが表示される場合です。

Error: An unexpected error occurred: ORA-29532: Java call terminated by uncaught
Java exception: Attribute value should start with quote.
(WWC-43000) An unexpected error occurred: Attribute value should start with quote.
at oracle.xml.parser.v2.XMLError.flushErrors(XMLError.java:205)

問題

Oracle Portalがprovider.xmlで問題に遭遇しました。ファイル内の属性が破損している可能性が高いです。

解決方法

provider.xmlのエラーを確認します。

B.2.2.9 コンテンツ・リクエストのタイムアウト

次のエラー・メッセージが表示される場合です。

ERROR TIMEOUT FOR CONTENT=timeout

問題

Webプロバイダは正常に登録できています。ポートレットをページに追加するか、またはページを既存のポートレットでリフレッシュするときに、タイムアウト・エラー・メッセージが表示されました。このエラーは、Oracle PortalがJavaポートレット・リスナーへ接続しようとしたがタイムアウトになったことを示しています。

解決方法

サンプル・ページにアクセスできるかどうかを確認します。

http://host:port/context/providers/servicename

タイムアウト期間を設定します。このためには、次の場所にあるOracle PortalのappConfig.xmlのページ・サーブレットに、次のinitパラメータを追加します。

MW_HOME\user_projects\domains\<DomainName>\config\fmwconfig\servers\WLS_PORTAL\applications\portal\configuration

このappConfig.xmlファイルは、Parallel Page Engine用であることに注意してください。例:

<requesttime>1000</requesttime>
<minTimeout>100</minTimeout>
<stall>500</stall>

appConfig.xmlとその構成パラメータの詳細は、『Oracle Fusion Middleware Oracle Portal管理者ガイド』を参照してください。

また、各プロバイダをOracle Portalに登録するときにタイムアウト値を設定することもできます。プロバイダのタイムアウト値は、効果を持つためには、appConfig.xml内のminTimeoutパラメータ値以上の値にする必要があります。PDK-Javaプロバイダの登録方法は、6.5.5項「Oracle PDK-Javaポートレットの登録と表示」を参照してください。WSRPプロバイダの登録方法は、6.3.4項「JSR 168ポートレットの登録と表示」を参照してください。

B.2.2.10 メッセージ500が返される

次のエラー・メッセージが表示される場合です。

Error: The listener returned the following Message: 500

問題

この汎用メッセージは、Oracle Portalがポートレットを表示しようとしているときに内部サーバー・エラーを受け取ると表示されます。このメッセージは複数の原因に対するものであり、問題の原因はそのうちのいずれか1つです。

解決方法

MW_HOME\user_projects\domains\<DomainName>\servers\WLS_PORTAL\logsにあるWLS_PORTAL-diagnostic.logファイルを確認して、エラーの原因を見つけます。

B.2.2.11 getメソッドを使用するJPSポートレットが動作しない

HTMLフォームはgetまたはpostメソッドを使用して送信できますが、WSRP標準の場合、コンシューマ(ポータル)ではpostメソッドしか使用できません。getメソッドのサポートは、標準に則ってオプション扱いになっています。ポータルのコンシューマはgetメソッドをサポートする必要がないので、ポートレット開発の際はpostメソッドを使用することをお薦めします。

問題

getメソッドを使用するJPSポートレットがあり、このポートレットはOracle Portalで正常に動作しません。getメソッドを使用したフォームは、送信されるときに、操作URL内の問合せ文字列を失います。問合せ文字列は、ポートレットがポータルに戻るために必要で、また、WSRP状態で必要です。

解決方法

getメソッドをpostメソッドと置き換えてください。

B.2.2.12 再デプロイ後に、ポートレットでセッションの期限切れメッセージが表示される

ポートレット・コンテナにポートレットを再度デプロイすると、プロデューサとそのすべてのコンシューマの間で持たれている既存のセッションがすべて失われます。コンシューマが既存のプロデューサ・セッションを再利用しようとする場合、コンシューマが再デプロイ後初めてプロデューサに接続しようとすると、エラー・メッセージが表示されることがあります。

問題

再デプロイ後初めてポートレットにアクセスすると、そのポートレットでエラー・メッセージが表示されます。

Error: Could not get markup. The cookie or session is invalid or there is a runtime exception.

解決方法

プロデューサのセッションを再確立するには、ポータル・ページをリフレッシュします。新しいブラウザ・セッションからポートレットに再アクセスする場合は、このエラー・メッセージは表示されません。自動的に新しいプロデューサ・セッションが確立されるためです。

B.2.3 ポートレット・コードをコンパイルできない

ポートレットのコードをコンパイルしようとすると、コンパイル・エラーが表示されます。

問題

ポートレット開発ライブラリが選択されていません。

解決方法

プロジェクトに対してポートレット開発ライブラリを選択してください。プロジェクトのプロパティを編集し、右側のペインで「プロファイル」>「開発>「ライブラリ」を選択します。ポートレット開発ライブラリが「選択済のライブラリ」リストに含まれていることを確認します。

B.2.4 アプリケーション・サーバーの接続テストに失敗する

Oracle JDeveloperでアプリケーション・サーバー接続テストを実行すると、Connection refused: connectというメッセージが表示されてテストに失敗します。

問題1

WebLogic Serverが実行されていません。

解決方法1

WebLogic Serverを実行するため、ブラウザにhttp://yourhostyourdomain:7001と入力します。

問題2

接続情報が正しくありません。

解決方法2

接続設定ウィザードに指定した接続情報を検証します。

B.2.5 プロバイダ・テスト・ページにエラーが表示される

ブラウザからプロバイダ・テスト・ページにアクセスしようとするとエラーが表示されます。

問題1

provider.xmlの構文が正しくありません。

解決方法1

provider.xmlの構文を修正します。Portal Studio上のドキュメント「PDK-Java XML Provider Definition Tag Reference」を参照してください。アドレスは次のとおりです。

http://www.oracle.com/technology/products/ias/portal/html/javadoc/xml_tag_reference_v2.html

問題2

デプロイ環境に必要なJARファイルがありません。

解決方法2

不足しているクラスのJARファイルを検索します。不足するJARファイルを識別したら、Oracle JDeveloperデプロイ・プロファイル内のアプリケーションのlibディレクトリに追加できます。デプロイ・プロファイルの詳細は、Oracle JDeveloperのオンライン・ヘルプ・システムを参照してください。

B.2.6 Webプロバイダがポートレット・リポジトリに表示されない

OmniportletなどのWebプロバイダが正常に登録され、ナビゲータで表示できても、ポートレット・リポジトリに表示されません。

問題

WebプロバイダではDBPreferenceStoreを使用しますが、data-sources.xmlに格納されているこのデータベース情報が正しくありません。

解決方法

data-sources.xmlの情報を修正します。プロバイダをリフレッシュし、ポートレット・リポジトリのキャッシュを無効にします。

B.2.7 ポートレットがページに表示されない

ポータル・ページにアクセスした際に、ポートレットがページに表示されません。

問題1

プロバイダが停止しています。

解決方法1

ブラウザのアドレス・バーにプロバイダ登録URLを入力し、プロバイダを起動してください。

問題2

プロバイダのセキュリティ・マネージャによって、ポートレットの表示が拒否されています。

解決方法2

プロバイダ定義ファイル(provider.xml)をチェックし、セキュリティ・マネージャが定義されていれば削除またはコメントアウトします。

問題3

ポートレットの「アクセス」ページで定義されたポートレットの実行権限を、ユーザーが持っていない可能性があります。

解決方法3

ポートレットの権限を確認し、ユーザーまたはユーザーの所属するグループが実行アクセス権限を持っていない場合は、権限を付与します。ポートレットは、アクセス権限をプロバイダから継承することがあります。Oracle Portalのナビゲータを使用してポートレットのプロバイダを検索し、そのアクセス権限を確認してから、ポートレットにドリルダウンしてそのアクセス権限を確認します。

問題4

ポートレットを再デプロイした後、それを表示しようとしたときにエラーが発生します。

解決方法4

B.2.2.12項「再デプロイ後に、ポートレットでセッションの期限切れメッセージが表示される」を参照してください。

B.2.8 最初は表示されたポートレットがその後ページに表示されない

ポータル・ページにアクセスした際、最初はページにポートレットが表示されますが、その後表示しようとするとエラー・メッセージが表示されます。

問題

プロバイダのセッション情報が正しくありません。

解決方法

プロバイダがセッションを使用しているかどうかをチェックします。使用している場合は、プロバイダ登録情報を編集し、次のようにセッション対応の登録になるようにします。

Login Frequency: Once per User Sessions

また、provider.xmlの<session>がtrueに設定されていることを確認する必要もあります。

B.3 OmniPortletの問題

この項では、OmniPortletの使用中に発生する可能性のある問題のトラブルシューティングに役立つ情報を提供します。

OmniPortletの実行中に発生したエラーを確認する方法は、次のとおりです。

- WLS_PORTAL.logファイルを開きます。

MW_HOME\user_projects\domains\<DomainName>\servers\WLS_PORTAL\logs

- HTMLソースを表示し(たとえば、Microsoft Internet Explorerで「表示」>「ソース」を選択する)、HTMLにコメントとして埋め込まれたエラーを検索します。

OmniPortletプロバイダのロギング・レベルを変更する手順は、次のとおりです。

- web.xmlファイルを開き、oracle.portal.log.LogLevelのcontext-param値を1から8の値(8はdebugに該当)に変更します。web.xmlファイルは次の場所にあります。

MW_HOME\user_projects\domains\<DomainName>\servers\WLS_PORTAL\tmp\_WL_user\portalTools_11.1.1.1.0\kjdcke\war\WEB-INF\web.xml

発生する可能性が高いOmniPortletエラーとその解決方法は次のとおりです。

- B.3.1項「OmniPortletから指定されたURLにアクセスできない」

- B.3.2項「ポートレット・コンテンツがリフレッシュされない」

B.3.1 OmniPortletから指定されたURLにアクセスできない

OmniPortletにエラーが表示されるか、または正しいコンテンツが表示されません。

問題1

URLがアクティブではありません。

解決方法1

ブラウザのアドレス・バーに直接URLを入力し、それが有効かどうかテストします。

問題2

サイトを表示するためにプロキシ・サーバーが必要な場合、プロキシ設定が無効です。この場合、次のようなメッセージが表示されることがあります。

Failed to open specified URL.Cannot open the URL specified because of connection timeout.

解決方法2

プロキシ設定が有効かどうかチェックします。これには、OmniPortletのプロバイダ・テスト・ページでHTTPプロキシ設定に対する「編集」をクリックします。

問題3

OmniPortlet timed outというメッセージがOmniPortletに表示されます。

解決方法3

次のいずれかのタスクを定義します。

1. サイトを表示するためにプロキシ・サーバーが必要な場合は、「解決方法2」を参照してください。

2. URLリクエストの処理に時間がかかる場合は(実行時間の長い問合せを実行するリクエストなど)、OmniPortletのprovider.xmlファイルでタイムアウト値(秒数)を延長してください。このファイルは次の場所にあります。

MW_HOME\user_projects\domains\<DomainName>\servers\WLS_PORTAL\tmp\_WL_user\portalTools_11.1.1.1.0\1pwj8k\war\WEB-INF\providers\omniPortlet

タイムアウト値を変更する場合は、次の処理も必要です。

- 中間層をバウンスします。

- 使用中のプロバイダを登録しているOracle Portalインスタンスのプロバイダ登録タイムアウト値を延長します。

問題4

HTTP認証が必要な場合で、ユーザー名およびパスワードの情報がないか、または無効の場合は、次のエラー・メッセージが表示されます。

指定されたURLに接続中に認証に失敗しました。正しいユーザー名とパスワードを入力してください。

解決方法4

保護データ(Webクリッピング)・リポジトリ設定を行うには、OmniPortletのプロバイダ・テスト・ページで「編集」をクリックします。「ソース」タブの「接続の編集」をクリックし、「接続情報」ページで有効なユーザー名とパスワードを入力します。接続情報を入力するには、すでに保護データ・リポジトリが構成されている必要があります。構成を行うには、OmniPortletのプロバイダ・テスト・ページで「編集」をクリックします。

問題5

証明書のあるHTTPSサイトのURLを開こうとし、証明書が有効ではないと認識されると、次のエラー・メッセージがポートレットに表示されます。

指定したURLへのHTTPS接続でSSLハンドシェイクに失敗しました。証明書ファイルを増やす必要があります。

解決方法5

『Oracle Fusion Middleware Oracle Portal管理者ガイド』を参照してください。

問題6

プロキシ・サーバーに認証が必要な場合で、ユーザー名およびパスワードの情報がないか、または無効の場合は、次のエラー・メッセージが表示されます。

ユーザー・プロキシ・ログイン情報が無効か、ありません。

解決方法6

プロキシ・サーバーのユーザー名とパスワードが有効かどうかチェックします。詳細は、B.4.5項「ファイアウォール外でクリップしたときのHTTPエラー・コード407」を参照してください。

B.3.2 ポートレット・コンテンツがリフレッシュされない

「デフォルトの編集」ページでポートレットのプロパティを変更した後、ポートレットのコンテンツがリフレッシュされません。

問題1

Oracle Webキャッシュの無効化が正しく構成されていません。

解決方法1

『Oracle Fusion Middleware Oracle Portal管理者ガイド』のI.2.1.3項「キャッシュの構成(PDKのみ)」を参照してください。

問題2

ポートレットがパーソナライズされています。

解決方法2

B.3.3「「デフォルトの編集」への変更がパーソナライズしたポートレットに反映されない」を参照してください。

B.3.3 「デフォルトの編集」への変更がパーソナライズしたポートレットに反映されない

実行時に「パーソナライズ」リンクからポートレットをパーソナライズした場合に、パーソナライズしたポートレットに新しいプロパティ値が反映されません。

問題

ポートレットをパーソナライズすると、パーソナライズされたオブジェクト・ファイルの完全なコピーが作成されます。すべてのプロパティが複製されるため、その後の「デフォルトの編集」を使用した変更は、パーソナライズされたポートレットには反映されません。

解決方法

最新の変更内容がポートレットに反映されるようにするには、「デフォルトの編集」を使用して変更した後に「パーソナライズ」を再度クリックし、「デフォルトに戻す」オプションを選択します。

B.4 Webクリッピングの問題

この項では、Webクリッピング・プロバイダまたはWebクリッピング・スタジオの使用中に発生する可能性のある次の問題のトラブルシューティングに役立つ情報を提供します。

- B.4.1項「ロギング・レベルの設定」

- B.4.2項「エラー・メッセージの確認」

- B.4.3項「テスト・ページを使用したプロバイダの状態の確認」

- B.4.4項「クリッピング用Webサイトへの接続の問題」

- B.4.5項「ファイアウォール外でクリップしたときのHTTPエラー・コード407」

- B.4.6項「ページをクリップできない」

- B.4.7項「クリッピング内のイメージが取得されない」

- B.4.8項「URLベースのポートレットの移行に伴う問題を解決する」

B.4.1 ロギング・レベルの設定

デフォルトでは、Webクリッピングのロギング・レベルはレベル3に設定されています。このレベルでは、構成、重大なエラーおよび警告に関する情報が提供されます。このレベルは、日常の操作にあわせたレベルです。デバッグに役立つ情報を表示するには、ロギング・レベルを8に設定します。

ロギング・レベルを設定するには、次の場所にあるweb.xmlファイルを編集します。

MW_HOME\user_projects\domains\<DomainName>\servers\WLS_PORTAL\tmp\_WL_user\portalTools_11.1.1.1.0\kjdcke\war\WEB-INF\web.xml

レベルを8に設定してデバッグ情報を表示するには、次に示すように、パラメータoracle.portal.log.LogLevelの値を設定します。

<context-param>
<param-name>oracle.portal.log.LogLevel</param-name>
<param-value>8</param-value>
</context-param>

変更した後は、Webアプリケーションを再起動します。

B.4.2 エラー・メッセージの確認

テスト・ページへのアクセス時やWebクリッピング・ポートレットの実行時に発生したエラーは、次のファイルに書き込まれます。

MW_HOME\user_projects\domains\<DomainName>\servers\WLS_PORTAL\logs\WLS_PORTAL.log

B.4.3 テスト・ページを使用したプロバイダの状態の確認

Webクリッピング・プロバイダのテスト・ページを使用すると、プロバイダが適切に機能しているかどうかを判断できます。このテスト・ページにアクセスするには、次の場所にあるPortalツール・アプリケーションの初期画面で「Webクリッピング・プロバイダ」をクリックします。

http://host:port/portalTools

「プロバイダ・テスト・ページ: Webクリッピング」が表示されます。ここでは、次の情報が提供されます。

- Webクリッピング・ポートレットに関するポートレット情報。Webクリッピング・プロバイダには、ポートレットが1つのみ含まれます。

- プロバイダ初期化パラメータおよび値。

- 構成を編集するページへのリンクを含めた、プロバイダの状態。

テスト・ページの使用方法の詳細は、『Oracle Fusion Middleware Oracle Portal管理者ガイド』の「Webクリッピングの管理」を参照してください。

B.4.4 クリッピング用Webサイトへの接続の問題

クリッピングを含むWebサイトへの接続の作成または保持で問題が発生しました。

問題1

Webクリッピング・スタジオを使用してWebサイトにアクセスできない場合は、正しくないURLを使用している可能性があります。

解決方法1

URLが正しいことを確認するには、クリップの前に、クリップするURLをブラウザでテストします。また、URLがプロバイダの中間層からアクセスが可能なかどうかをテストします。

問題2

ファイアウォール外のHTTPサーバーに接続するときにプロキシ・サーバーを使用する環境では、Webサイトにブラウズしようとすると、接続がタイムアウトします。

解決方法2

プロキシ・サーバーが正しく構成されているかどうかを確認します。

プロキシ・サーバーを構成するには、Webクリッピング・プロバイダのテスト・ページに移動します(B.4.3項「テスト・ページを使用したプロバイダの状態の確認」を参照)。Webクリッピング・プロバイダのテスト・ページで、「HTTPプロキシ」行の「アクション」列にある「編集」をクリックします。「プロバイダの編集」ページで、HTTPプロキシの「HTTPプロキシ・ホスト」および「HTTPプロキシ・ポート」を指定します。

ファイアウォール内側のサーバーにアクセスするには、「この文字で始まるドメインにプロキシを使用しない」を選択してURLを入力し、ファイアウォールを通過する必要がないドメイン名のリストを指定できます。新規の設定を有効にするために、管理サーバーを再起動する必要はありません。

プロキシ・サーバーの構成方法の詳細は、『Oracle Fusion Middleware Oracle Portal管理者ガイド』の「Webクリッピングの管理」を参照してください。

問題3

構成にロード・バランサが含まれていて、Webクリッピング・ポートレットにクリップを追加しているときに接続の作成または保持に問題が発生します。

解決方法3

構成が正しく設定されていません。この問題を解決するには、次のようにします。

- 複数のOracle WebLogic Serverインスタンスが1つのロード・バランサの背後に設定されている場合は、Webクリッピング・リポジトリとHTTPプロキシを、すべてのOracle WebLogic Serverインスタンスに対して同一になるように設定してから、Oracle WebLogic Serverインスタンスをロード・バランサに結合する必要があります。
Webクリッピングには定義があり、この定義は、Oracle DatabaseサーバーがホスティングするWebクリッピング・リポジトリに永続的に格納される必要があります。複数の中間層の環境では、すべてのOracle WebLogic Serverのインスタンスは、同一のリポジトリに定義を格納する必要があります。

- ロード・バランサは、セッション対応である必要があります。セッション対応でない場合、最初のリクエストは接続しますが、後続のリクエストは異なるインスタンスにルーティングされる可能性があり、失敗します。

ロード・バランサを使用した構成方法の詳細は、『Oracle Fusion Middleware Oracle Portal管理者ガイド』の「詳細構成の実行」を参照してください。

問題4

リバース・プロキシを使用しても、接続できません。

解決方法4

リバース・プロキシ・サーバーが正しく構成されているかどうかを確認します。リバース・プロキシの構成方法の詳細は、『Oracle Fusion Middleware Oracle Portal管理者ガイド』の「詳細構成の実行」を参照してください。

問題5

接続できず、エラー・ログには、拒否されているデータベースへのログオンに関するメッセージが含まれています。(エラー・ログの詳細は、B.4.1項「ロギング・レベルの設定」を参照してください。)

解決方法5

インフラストラクチャ・データベースのPORTALスキーマ・パスワードが、手動で変更され、Oracle Internet Directoryに格納されているパスワードと一致していない可能性があります。パスワードの設定方法の詳細は、『Oracle Fusion Middleware Oracle Internet Directory管理者ガイド』を参照してください。

B.4.5 ファイアウォール外でクリップしたときのHTTPエラー・コード407

プロキシ・サーバーがプロキシ認証用に構成されていて、ファイアウォールの外側にあるページをクリップすると、HTTPエラー・コード407が表示されます。

問題

プロキシ・サーバーはプロキシ認証用に構成されているが、プロキシ認証は構成していません。

解決方法

プロキシ認証を手動で構成する必要があります。Webクリッピングでは、グローバルなプロキシ認証とユーザーごとの認証の両方がサポートされます。プロキシ・サーバーのレルムを指定し、すべてのユーザーが指定されたユーザー名とパスワードで自動的にログインするか、各ユーザーが個別のユーザー名とパスワードでログインするか、またはすべてのユーザーが指定されたユーザー名とパスワードでログインするかを指定できます。プロキシ認証の構成方法の詳細は、『Oracle Fusion Middleware Oracle Portal管理者ガイド 』の「Webクリッピングの管理」を参照してください。

B.4.6 ページをクリップできない

Webサイトに接続できますが、ページをクリップできません。

問題

そのページがIFrameで過密になっている可能性があります。

解決方法

ページ・ソースに注意しながら、ブラウザにページを表示します。ページにIFrameが含まれている場合は、そのIFrameのsrc属性が示すURLを使用してWebクリッピング・スタジオでブラウズを開始します。

B.4.7 クリッピング内のイメージが取得されない

Webクリッピング内にイメージがその他のクリッピングとともに取得されません。

問題

イメージはリンク(IMGタグのsrc属性を使用)として扱われるため、クリップされたサイトにあるイメージは、元のサイトから直接供給されます。クリッピングの作成時にプロキシ設定を有効にすることが、イメージで必要な場合は、ブラウザのプロキシ設定を無効にすることで、クリッピング内でのイメージの表示が禁止されます。

解決方法

ブラウザのプロキシ設定を有効にします。

B.4.8 URLベースのポートレットの移行に伴う問題を解決する

provider.xmlファイルに格納されているURLベースのポートレットを、Webクリッピング・ポートレットに移行できます。この項では、ポートレットをWebクリッピング・ポートレットに移行するときに発生する問題のトラブルシューティング方法を説明します。移行プロセス自体の詳細は5.6項「URLベースのポートレットからの移行」を参照してください。

B.4.8.1 移行ツールを実行したときのファイルが見つからない例外

移行ツールを実行したときに、次の例外が発生した場合です。

Exception in thread "main" java.io.FileNotFoundException:
/wrongpath/somservice.properties (No such file or directory)
at java.io.FileInputStream.open(Native Method)
at java.io.FileInputStream.<init>(FileInputStream.java:103)
at oracle.webdb.wcs.client.urlservices.UrlServicesMigrator.importService
(UrlServicesMigrator.java:631)
at oracle.webdb.wcs.client.urlservices.UrlServicesMigrator.main
(UrlServicesMigrator.java:724)
at oracle.webdb.wcs.WcWebdbMain.main(WcWebdbMain.java:60)

問題

URLベースのポートレット・サービスまたはWebクリッピング・ポートレット・サービスのデプロイ・プロパティ・ファイル用に指定したファイルが存在しません。

解決方法

引数リストにある両方のサービス・デプロイ・プロパティ・ファイルのパスが正しい場所を指しているか確認します。

B.4.8.2 移行ツールを実行したときのNULLポインタの例外

移行ツールを実行したときに、次の例外が発生した場合です。

Exception in thread "main" java.lang.NullPointerException
at java.util.Hashtable.put(Hashtable.java:375)
at java.util.Properties.setProperty(Properties.java:97)
at oracle.webdb.wcs.client.urlservices.UrlServicesMigrator.setRepository
(UrlServicesMigrator.java:415)
at oracle.webdb.wcs.client.urlservices.UrlServicesMigrator.main
(UrlServicesMigrator.java:733)
at oracle.webdb.wcs.WcWebdbMain.main(WcWebdbMain.java:58)

問題

リポジトリ設定がWebクリッピング・プロバイダ用に構成されていません。

解決方法

移行ツールを実行する前に従う必要がある手順が5.6.1項「移行の準備」にありますので、参照してください。

B.4.8.3 ターゲットのprovider.xmlがすでに移行されているエラー

移行ツールを実行したときに、次の例外が発生した場合です。

Error: Target provider.xml is already migrated.

問題

URLベースのポートレット・サービス・デプロイ・プロパティ・ファイルから参照されたprovider.xmlファイルは、すでに移行されています。provider.xmlファイルで指定されたプロバイダ定義クラスは、すでにWcProviderDefinitionにあります。

解決方法

移行を再実行する場合は、デプロイ・プロパティ・ファイルとWEB-INF/providersの下のディレクトリ名全体の両方にあるサービスの名前を変更してから、移行を再実行してください。

B.4.8.4 クラスを使用してprovider.xmlを移行できないエラー

移行ツールを実行したときに、次の例外が発生した場合です。

Error: Can't migrate provider.xml with class <someclass>

問題

URLベースのポートレット・サービス・デプロイ・プロパティ・ファイルから参照されたprovider.xmlファイルには、URLベースのポートレットで使用されたクラス名と一致しないプロバイダ・クラス名が含まれています。具体的に言えば、このファイルで指定されたプロバイダ・クラス名は、oracle.portal.provider.v2.http.URLProviderDefinitionではありません。移行ツールはURLベースのポートレットのプロバイダ定義を移行するためのもので、その他のプロバイダ定義用ではありません。URLベースのポートレットのプロバイダ定義にサブクラスがあるクラスでも、正しく移行されません。

解決方法

このサービスは移行できません。

B.5 関連情報

Oracle MetaLink(http://metalink.oracle.com)に、この他の問題解決方法が掲載されています。問題の解決方法が見つからない場合は、オラクル社カスタマ・サポート・センターに問い合せてください。

関連項目:

「Oracle Portal Release Notes」。Oracle Technology Networkから入手できます。

C プロファイル・アイテムと属性のマッピング

ユーザーIDへのアクセスが必要なポートレット機能を開発する場合、通常、Oracle PortalおよびOracle Internet Directoryの属性とWSRPのuserProfileItemsをマップする必要があります。Oracle Portalでは、これらの属性は静的であり、構成できないことに注意してください。この付録の表では、異なる属性間の対応を示します。

C.1 userProfileItemsと属性のマッピング

表C-1は、userProfileItemsとOracle Internet DirectoryおよびOracle Portal属性のマッピングを示しています。

注意:

Oracle Internet Directory属性がhomePostalAddressのような複雑な文字列を保持している場合は、必要なコンポーネント文字列に解析されます。デリミタがドル記号($)であると仮定します。たとえば、Oracle Internet DirectoryでhomePostalAddressの値が次のとおりであるとします。

123 Main St$$$Smallville$NY$10001

Oracle Portalプロファイル属性では、この文字列は次のように解析されます。

- 123 Main Stが、HOME_ADDR1となります。

- Smallvilleが、HOME_CITYとなります。

- NYが、HOME_STATEとなります。

- 10001が、HOME_ZIPとなります。

表C-1 userProfileItemsのマッピング

Oracle Portalプロファイル属性

Oracle Internet Directory属性

WSRP userProfileItems

FIRST_NAME

givenName

name/given

LAST_NAME

sn

name/family

MIDDLE_NAME

middleName

name/middle

KNOWN_AS

displayName

name/nickname

DATE_OF_BIRTH

orclDateOfBirth

bDate

ORGANIZATION

o

employerInfo/employer

TITLE

title

employerInfo/jobtitle

HOME_ADDR1

homePostalAddress

homeInfo/postal/name

HOME_ADDR2

homeInfo/postal/street

HOME_ADDR3

homeInfo/postal/organization

HOME_CITY

homeInfo/postal/city

HOME_STATE

homeInfo/postal/stateprov

HOME_ZIP

homeInfo/postal/postalcode

HOME_COUNTRY

homeInfo/postal/country

HOME_PHONE

homePhone

homeInfo/telecom/telephone/number

OFFICE_ADDR1

street

businessInfo/postal/name

OFFICE_ADDR2

businessInfo/postal/street

OFFICE_ADDR3

businessInfo/postal/organization

OFFICE_CITY

l

businessInfo/postal/city

OFFICE_STATE

st

businessInfo/postal/stateprov

OFFICE_ZIP

postalCode

businessInfo/postal/postalcode

OFFICE_COUNTRY

c

businessInfo/postal/country

WORK_PHONE

telephoneNumber

businessInfo/telecom/telephone/number

FAX

facsimileTelephoneNumber

businessInfo/telecom/fax/number

MOBILE_PHONE

mobile

businessInfo/telecom/mobile/number

EMAIL

mail

businessInfo/online/email

D 手動によるPDK-Javaプロバイダのパッケージ化およびデプロイ

この付録では、PDK-Javaプロバイダの実装を、Oracle WebLogic Serverやその他のJ2EEアプリケーション・サーバー上にデプロイするのに適した、移植可能なフォーマットに、手動でパッケージ化する方法を説明します。また、パッケージ化した結果のEARファイルをOracle WebLogic Server環境にデプロイし、その後1つ以上のOracle Portalインスタンスに登録する方法も説明します。

注意:

通常は、Oracle JDeveloperに用意されているツールを使用してプロバイダをパッケージ化およびデプロイすることをお薦めします。ただし、なんらかの理由でプロバイダを手動でパッケージ化およびデプロイする必要がある場合に備えて、参照できる情報をこの付録で提供しておきます。

- D.1項「概要」

- D.2項「プロバイダのパッケージ化およびデプロイ」

D.1 概要

プロバイダのパッケージ化およびデプロイに進む前に、次の基本的な概念を理解する必要があります。

- D.1.1項「WARファイルとEARファイル」

- D.1.2項「サービス識別子」

D.1.1 WARファイルとEARファイル

WARファイルとEARファイルは、Oracle WebLogic ServerのようなJ2EEアプリケーション・サーバーにアプリケーションをデプロイするのに使用します。WARファイルとEARファイルは、アプリケーションを実行するのに必要なコンポーネントのすべてを1つのファイルにカプセル化したものです。これらのファイルにより、アプリケーションのデプロイが非常に簡単で整合性がとれたものとなり、アプリケーションを開発からテストへ、テストから製品へと移行するときにエラーが発生する可能性が削減されます。

- WARファイルは、Webアプリケーションを表し、Webアプリケーションのすべてのコンポーネントを含みます(Javaのライブラリやクラス、サーブレットの定義やパラメータ設定、JSPファイル、静的HTMLファイルおよびその他の必要なリソースを含む)。

- EARファイルは、エンタープライズ・アプリケーションを表します。

D.1.2 サービス識別子

PDK-Javaでは、1つのアダプタ・サーブレットの下に複数のプロバイダをデプロイできます。これらのプロバイダは、サービス識別子によって識別されます。新しいプロバイダをデプロイする場合は、プロバイダにサービス識別子を割り当て、プロバイダWARファイルの作成時にそのサービス識別子を使用する必要があります。サービスのこの名前は、ファイルservice_id.propertiesを検索するのに使用されます。このファイルは、テスト・ページの表示の有無など、プロバイダの特性を定義したものです。

たとえば、次のURLとurn:sampleというサービス識別子を使用して、PDK-Javaサンプル・プロバイダを登録できます。

http://mycompany.com/jpdk/providers

あるいは、次の形式のURLを使用することもできます。

http://mycompany.com/jpdk/providers/sample

すなわち、プロバイダ名(sample)をPDK-Javaサンプル・プロバイダのURLに追加します。この場合、プロバイダの登録時には「サービスID」フィールドは空白のままにします。

複数のポータルが同じプロバイダを共有している場合は、サービス識別子を個別に指定できます。各ポータルを異なるサービス識別子に登録することによって、コンシューマごとに個別にプロバイダのプロパティを指定できます。

プロバイダをデプロイしたら、正しいサービス識別子を使用してプロバイダをOracle Portalに登録する必要があります。これにより、リクエストが正しいプロバイダにルーティングされます。アダプタ・サーブレットがサービス識別子のないリクエストを受信した場合、そのリクエストはデフォルトのプロバイダに渡されます。

注意:

サービス識別子が既知でない場合は、プロバイダのテスト・ページをチェックするか、プロバイダの管理者に問い合せてください。連携されたPortalアダプタを使用している場合、URLはプロバイダではなくアダプタを指すので、このフィールドに値を入力する必要があります。この場合、サービス識別子はurn:の後にデータベース・プロバイダの名前が続く形式となります。

D.2 プロバイダのパッケージ化およびデプロイ

次の項に、手動でプロバイダをパッケージ化およびデプロイする際に実行する必要がある手順を示します。

- D.2.1項「プロバイダのパッケージ化」

- D.2.2項「Fusion Middlewareコントロールを使用したEARファイルのデプロイ」

- D.2.3項「デプロイのテスト」

- D.2.4項「デプロイ・プロパティの設定」

- D.2.5項「プロバイダの保護」

- D.2.6項「プロバイダの登録」

D.2.1 プロバイダのパッケージ化

この項の手順では、手動でWARファイルをパッケージ化する方法を説明します。WARファイルをアセンブルするユーティリティの中に使い慣れているものがある場合は、それを使用してWARファイルをアセンブルしてください。

- D.2.1.1項「ディレクトリの準備」

- D.2.1.2項「デフォルト・サービスの指定」

- D.2.1.3項「WARファイルの作成」

- D.2.1.4項「EARファイルの作成」

D.2.1.1 ディレクトリの準備

WARファイルを作成する前に、次の手順を実行する必要があります。

1. 必要なファイルを収集できる作業ディレクトリを作成します。

2. /pdk/jpdk/v2/template.warにあるtemplate.warファイルを作業ディレクトリに抽出します。ファイル・パスも抽出してください。

3. プロバイダで追加のJARファイルが必要な場合は、それをWEB-INF/libディレクトリに追加します。

4. JARファイルに含まれていない追加のJavaクラスがプロバイダで必要とされる場合は、そのJavaクラスをWEB-INF/classesディレクトリに追加します。クラス・ファイルは、JavaクラスのJavaパッケージ名に対応するディレクトリ構造に保存してください。

5. 作業ディレクトリに静的HTMLファイル、JSPおよびイメージを追加します。これらのファイルの編成に必要であれば、サブディレクトリを作成します。サブディレクトリは、HTMLファイルまたはJSPファイルにアクセスするのに必要なパスの一部となります。

6. providersディレクトリの下に自分のプロバイダ用のサブディレクトリを作成します。

7. _default.propertiesファイルをservice_name.propertiesにコピーし、プロバイダの構成を反映するように編集します。

8. WEB-INF/deploymentフォルダにあるprovider_name.propertiesファイルで、definition値を次のように設定します。

definition=providers/provider_dir_you_created/provider.xml

9. 作成したばかりのサブディレクトリにプロバイダ定義ファイルを配置します。

10. _default.propertiesを、デフォルト・プロバイダの構成設定を反映するように編集します。デフォルト・プロバイダへのアクセスは、リクエストにサービス識別子が指定されていない場合に行われます。この手順の詳細は、D.2.1.2「デフォルト・サービスの指定」を参照してください。

11. コンテンツのレンダリングにサーブレットを使用する場合は、WEB-INF/web.xmlを編集して、サーブレットを事前定義済のサーブレットの一覧に追加します。PDK-Javaが必要とするサーブレットのエントリを削除しないように注意してください。

D.2.1.2 デフォルト・サービスの指定

デフォルト・サービスは、サービス名を含まない任意のリクエストを受信するプロバイダです。デフォルト・プロバイダは、WARファイルのデプロイ・ディレクトリ内の_default.propertiesファイルを編集することによって指定します。

定義エントリを編集して、デフォルト・プロバイダを表すプロバイダ定義ファイルを指すようにします。パスは、ファイル・システム内でのファイルの物理的な位置ではなく、WARファイル内のWEB-INFディレクトリからの相対パスとします。

_default.propertiesファイルは、たとえば次のようになります。

serviceClass=oracle.webdb.provider.v2.adapter.soapV1.ProviderAdapter
loaderClass=oracle.portal.provider.v2.http.DefaultProviderLoader
showTestPage=true
definition=providers/sample/provider.xml
autoReload=true

D.2.1.3 WARファイルの作成

WARファイルの内容を指定したら、次に、WARファイル自体を作成できます。WARファイルを作成する手順は、次のとおりです。

1. D.2.1.1項「ディレクトリの準備」で作成した作業ディレクトリの内容を圧縮します(このとき、サブディレクトリのパスは含めますが作業ディレクトリのパス自体は含めません)。

2. 圧縮後のファイル名をわかりやすい名前に変更し、拡張子を.warに変更します。

D.2.1.4 EARファイルの作成

EARファイルを手動で作成する手順は、次のとおりです。

1. EARファイルを作成するために、別の作業ディレクトリを作成します。

2. /pdk/jpdk/v2/template.earにあるtemplate.earファイルを作業ディレクトリに抽出します。ファイル・パスも抽出してください。

3. テンプレートEARファイルに含まれていたMETA-INF/application.xmlファイルを開きます。次のようになっているはずです。

<?xml version "1.0">
<!DOCTYPE application PUBLIC "-//Sun Microsystems, Inc.
//DTD J2EE Application 1.3//EN"
"http://java.sun.com/j2ee/dtds/application_1_3.dtd">
<application>
<display-name>Display Name of the Application</display-name>
<description>Description of the application</description>
<module>
<web>
<web-uri>yourwarfile.war</web-uri>
<context-root>/</context-root>
</web>
</module>
</application>

表D-1に、application.xmlの要素を示して、説明します。

表D-1 application.xmlの要素

要素

説明

<display-name>

アプリケーションの名前です。

<description>

アプリケーションとその機能の説明です。

<web-uri>

WARファイルの名前です。

<context-root>

デフォルトで自分のアプリケーションにマップするための接頭辞です(たとえば、/myapp)。

4. ファイルapplication.xmlを、名前変更せずに、同じ位置に上書き保存します。

5. 前に作成したWARファイルを自分の作業ディレクトリにコピーします。これはサブディレクトリ内ではなく、作業ディレクトリの直下に配置します。

6. 作業ディレクトリの内容を圧縮します(このとき、サブディレクトリのパスは含めますが、作業ディレクトリのパス自体は含めません)。

7. 圧縮後のファイル名をわかりやすい名前に変更し、拡張子を.earに変更します。

D.2.2 Fusion Middlewareコントロールを使用したEARファイルのデプロイ

Fusion Middlewareコントロールを使用して、EARファイルをWebLogic Managed Server (WLS_PORTAL)にデプロイできます。EARファイルをデプロイするには、次の手順を実行します。

1. Oracle Fusion Middlewareコントロールを起動し、PDK-Javaを構成したPortalインスタンス(たとえば、WLS_PORTAL)のホーム・ページにナビゲートします。

2. WebLogic Serverのメニューから、「アプリケーションのデプロイ」、「デプロイ」の順に選択します。
「アーカイブの選択」ページが表示されます。

3. 「アーカイブ」または「展開ディレクトリ」セクションでは、以下のいずれかを選択できます。

- アーカイブはブラウザが稼働しているマシンに存在します。そして、アーカイブの場所を入力するか「参照」をクリックしてアーカイブ・ファイルを探します。

- アーカイブまたは展開済ディレクトリはEnterprise Managerが稼働しているサーバーに存在します。そして、アーカイブの場所を入力するか「参照」をクリックしてアーカイブ・ファイルを探します。

4. 「続行」をクリックします。WebモジュールのURLマッピングが表示されます。マッピングは、デフォルトではapplication.xmlに指定されているコンテキスト・ルート(たとえば、/myapp)ですが、デプロイされている他のアプリケーションのコンテキスト・ルートとの衝突を避けるために変更できます。

5. 「デプロイ・プラン」セクションでは、以下のいずれかを選択できます。

- 新規デプロイ・プランを自動的に作成します。

- デプロイ・プランはこのWebブラウザが稼働しているマシンに存在します。 : このオプションを選択した場合は、デプロイ・プランへのパスを入力します。

- デプロイ・プランはEnterprise Managerが稼働しているサーバーに存在します。: このオプションを選択する場合、プランのパスを入力してください。

6. 「次へ」をクリックします。
「ターゲットの選択」ページが表示されます。

7. アプリケーションをデプロイする先のターゲットを選択します。管理サーバー、管理対象サーバー、クラスタが表示されます。1つのクラスタ、クラスタ内の1つ以上の管理対象サーバー、またはクラスタ内に存在しない管理対象サーバーを選択できます。ターゲットのリストに管理サーバーが表示されますが、アプリケーションを管理サーバーにデプロイしないでください。管理サーバーは、Oracle WebLogic Server管理コンソールのような管理アプリケーションのみを意図しています。

8. 「次へ」をクリックします。
「アプリケーション属性」ページが表示されます。

9. 「アプリケーション属性」セクションで、「アプリケーション名」にアプリケーション名を入力します。

10. 「Webモジュール」セクションの「コンテキスト・ルート」セクションで、Webモジュールのapplication.xmlファイルにコンテキスト・ルートが構成されていない場合は、アプリケーションのコンテキスト・ルートを指定できます。コンテキスト・ルートは、WebモジュールのURIです。Webサービスを含むそれぞれのWebモジュールまたはEJBモジュールがコンテキスト・ルートを持つことができます。

11. アプリケーションのadf-config.xmlファイル・アーカイブにMDS構成が含まれる場合、「ターゲット・メタデータ・リポジトリ」セクションが表示されます。これを使用して、このアプリケーションのリポジトリとパーティションを選択できます。

- リポジトリを変更するには、「リポジトリ名」の横にあるアイコンをクリックします。「メタデータ・リポジトリ」ダイアログ・ボックスで、リポジトリを選択して「OK」をクリックします。

- パーティションを変更するには、「パーティション名」にパーティション名を入力します。

12. 「配布」セクションでは、以下のいずれかを選択できます。

- 配布してアプリケーションを起動(すべてのリクエストに対応)

- 配布して管理モードでアプリケーションを起動(管理リクエストのみに対応)

- 配布のみ

13. 「次へ」をクリックします。
デプロイ・ウィザード、デプロイ設定ページが表示されます。

14. このページでは、アプリケーションをデプロイする前に一般的なタスクを実行したり、デプロイ・プランを編集してディスクに保存することができます。以下のことができます。

- Webモジュールの構成

- アプリケーションのセキュリティ構成

15. デプロイ・プランの拡張
デプロイ・プランを編集して保存することもできます。

16. 「デプロイ」をクリックします。
Application Server Controlに処理メッセージが表示されます。

17. デプロイが完了したら、「閉じる」をクリックします。

D.2.3 デプロイのテスト

プロバイダのデプロイをテストするには、URLが次の形式であるプロバイダ・テスト・ページにアクセスします。

http://host:port/context_root/providers

説明:

hostおよびportは、ターゲットOracle WebLogic ServerインスタンスのHTTPリスナーのホスト名とポート番号です。Oracle Web CacheがインストールされたOracle Application Serverのインストールでは、portはOracle Web Cacheリスナー・ポート(たとえば、8090)である必要があります。Oracle WebLogic Serverのインストールでは、デフォルトのHTTPポート番号は8888です。

context_rootは、デプロイ時にプロバイダWebアプリケーションにマップしたURIパスの接頭辞(たとえば、/myapp)です。dcmctlを使用した手動によるデプロイの場合は、application.xmlに指定したデフォルトのURIパスの接頭辞です。

例:

http://my.host.com:8090/newProvider/providers

.propertiesファイルにshowTestPage=trueが指定されている場合は、デフォルト・プロバイダ用の見慣れたテスト・ページが表示されます。特定のプロバイダ・サービス用のテスト・ページを表示するには、URLにサービス名を追加します。例:

http://my.host.com:8090/newProvider/providers/myService

D.2.4 デプロイ・プロパティの設定

PDK-Javaでは、JNDI変数を使用して多くのデプロイ・プロパティを指定できます。表D-2に、これらの変数をリストして、説明します。

表D-2 プロバイダのデプロイ用JNDI変数

変数

説明

oracle/portal/provider/global/log/logLevel

PDK-Javaによって使用され、すべてのプロバイダに適用されるロギング・レベル(0-8)です。

oracle/portal/service_name/showTestPage

プロバイダのテスト・ページにアクセスできるかどうかを指定するブール・フラグです。デフォルト値はtrueです。

oracle/portal/service_name/maxTimeDifference

プロバイダのHMAC時間差です。

oracle/portal/service_name/definition

プロバイダの定義ファイル(provider.xml)の場所です。

oracle/portal/service_name/autoReload

ブール型の自動リロード・フラグです。デフォルト値はtrueです。

oracle/portal/service_name/sharedKey

HMAC共有キーです。デフォルト値はありません。

oracle/portal/service_name/rootDirectory

プロバイダのカスタマイズの場所です。デフォルト値はありません。

変数の設定

表D-2にリストした変数の値は、他のJNDI変数と同じように設定できます。JNDI変数の設定方法は、7.2.4.2項「JNDI変数値の設定」を参照してください。

D.2.5 プロバイダの保護

本番環境でPDK-Javaフレームワークを使用するときは、プロバイダを保護する必要があります。プロバイダの保護方法は、7.2.7項「ポートレットのセキュリティの実装」および『Oracle Fusion Middleware Oracle Portal管理者ガイド』を参照してください。

D.2.6 プロバイダの登録

プロバイダは、デプロイと検証が終了したら、他のプロバイダと同じように登録できます。プロバイダの登録方法は、6.5.5項「Oracle PDK-Javaポートレットの登録と表示」を参照してください。

E Oracle Portalプロバイダ・テスト・スイート

Oracle Portalプロバイダ・テスト・スイートは、Oracle Portalをインストールすることなく、またはプロバイダ・マシンからインターネットにアクセスすることなく、健全性テスト、パフォーマンス・テストおよび単体テストを行います。このテスト・スイートでは、次の2種類のユーティリティが利用できます。

- E.1項「プロバイダ・テスト・ページ」

- E.2項「テスト・ハーネス」

Oracle Portalプロバイダ・テスト・スイートは、Oracle Technology Network (OTN)の「Oracle Portal Developer Kit (PDK)」ページからダウンロードできます。

http://www.oracle.com/technology/products/ias/portal/pdk.html

「Oracle Portlet Developer Kit (PDK)」ホーム・ページから、「Download the PDK-Java TestSuite」を選択します。

E.1 プロバイダ・テスト・ページ

プロバイダ・テスト・ページには、プロバイダに対する基本的な健全性テストが用意されています。ここには、ポートレット、サーブレット初期化引数およびptlshareライブラリとpdkjavaライブラリのバージョン番号がリストされます。プロバイダ・テスト・ページは、Webプロバイダを最も簡単にテストできるユーティリティです。テスト・ページには、Oracle WebLogic Serverにエンタープライズ・アプリケーションまたはWebアプリケーションをデプロイした後、URLでアクセスします。ブラウザから次のURLにアクセスすることで、Webプロバイダをテストします。

http://server:port/application_name/providers/provider_name

テスト・サンプルとして、PDK-Javaにはサンプルのアプリケーションとポートレットが含まれています。このアプリケーションはWARファイル内にカプセル化されており、WARファイルはさらにEARファイル内にカプセル化されています。アプリケーションをデプロイすると、Oracle WebLogic Serverによってファイルが抽出され、次の場所にディレクトリ構造が作成され、そこにサンプルのポートレットが格納されます。

MW_HOME\user_projects\domains\<DomainName>\servers\WLS_PORTAL\tmp\_WL_user\jpdk

このプロバイダのテスト・ページを表示するには、次のURLを使用します。

http://server:port/jpdk/providers/sample

テスト・ページにアクセスすると、SOAPサーブレットによってXMLプロバイダ定義(provider.xml)が検証され、対応するプロバイダが正しく構築されているかどうかが確認されます。この検証は、プロバイダをOracle Portalに登録する前に、プロバイダのデプロイに関する問題をデバッグするのに使用できます。WebアプリケーションのWLSへのデプロイに成功すると、テスト・ページに成功メッセージが表示されます。

テスト・ページは、JNDI変数oracle/portal/provider/provider_name/showTestPageをtrueまたはfalseに設定することで、表示または非表示にできます。プロバイダがテストし終わり稼働状態となったら、テスト・ページへのアクセスを制限できます。JNDI変数の取得方法および設定方法は、7.2.4項「JNDI変数の使用」を参照してください。

E.2 テスト・ハーネス

テスト・ハーネスは、Oracle Portalのインスタンスにアクセスすることなく、プロバイダの単体テストおよびパフォーマンス・テストを行うためのコマンドライン・ユーティリティです。テスト・ハーネスは、ターゲットのWebプロバイダにHTTPリクエストを送信し、レスポンスを分析用に記録します。レスポンスは、XMLファイルにログとして記録されます。パフォーマンス統計は、分析のために別のファイルにログとして記録されます。

テスト・ハーネスは、次のように非常に柔軟性に富んでいます。

- ユーザー独自のテスト定義を作成します。ハーネスは、テスト定義内の情報に基づいて、プロバイダにリクエストを送信します。テスト定義ファイルはXML形式で、ターゲットWebプロバイダに送信するリクエスト・インスタンスをリストしたものです。

- プロバイダによって返された情報は、理解および分析が容易なように、標準のXMLファイルに格納されます。

- Webプロバイダのロード・テストが実施できます。

E.2.1 テスト定義ファイル

テスト定義ファイルは、特定のテスト用のリクエスト・インスタンスをリストするXMLファイルです。テスト定義ファイル内で、リクエスト・インスタンスを複数のリクエスト・グループに細分することもできます。テスト定義ファイルにリクエスト・インスタンスの詳細を含めたり、インスタンスの詳細を定義したリクエスト・ライブラリXMLファイルを参照することができます。

テスト定義ファイルには、リクエスト・インスタンス以外にも、ターゲットWebプロバイダのホストおよびポートに関する情報や、テスト定義ファイルの送信先となるプリプロセッサも指定できます。プリプロセッサを使用すると、テスト・ハーネス内での実行時にアプリケーション固有ロジックをリクエスト・インスタンスに追加できます。たとえば、プリプロセッサでは、ターゲットWebプロバイダに送信されるSOAPメッセージ内のXMLの妥当性をチェックできます。テスト・ハーネスには、次の3つのプリプロセッサが組み込まれています。

- Oracle Portalプリプロセッサ

- 検証ベースのキャッシュ・プリプロセッサ

- Hashed Message Authentication Checksum (HMAC)プリプロセッサ

次のテスト定義ファイルのサンプルで、ファイルの形式とコンテンツを示します。

<?xml version="1.0" encoding="ISO-8859-1"?>
<?testDefinition version="0.1"?>
<testDefinition>
<defaultHost>machine.name.com</defaultHost>
<defaultPort>80</defaultPort>
<defaultPath>/jpdk/providers/sample</defaultPath>
<property name="portletId" value="1"/>
<preProcessorDefinitions>
<preProcessor
class="oracle.webdb.testharness.preprocessor.PortalPreProcessor">
<name>portal</name>
</preProcessor>
<preProcessor class="oracle.webdb.testharness.preprocessor.HMACPreProcessor">
<name>hmac</name>
<sharedKey>1234567890aBcDeFgHiJ</sharedKey>
</preProcessor>
</preProcessorDefinitions>
<requestGroup id="register">
<description>Carries out necessary registrations</description>
<cycles>1</cycles>
<threads>1</threads> -- increase the number to load test the Web provider.
<requestInstance id="register_provider">
<libraryId>ptl902</libraryId>
<definitionId>registerProvider</definitionId>
<runs>1</runs>
</requestInstance>
<requestInstance id="register_portlet">
<libraryId>ptl902</libraryId>
<definitionId>registerPortlet</definitionId>
<runs>1</runs>
</requestInstance>
</requestGroup>
<requestGroup id="show">
<description>Carries out work necessary to show the portlet</description>
...
...
</requestGroup>
...
</testDefinition>

E.2.2 runTestコマンド

runTestコマンドは、指定されたテスト定義を使用して、指定されたオプションでテスト・ハーネスを起動します。

runTest options test_definition

表E-1に、runTestのコマンド・オプションをリストし、これらのオプションについて説明します。

表E-1 runTestのオプション

オプション

説明

-n testname

指定された名前をこの実行に付けます。デフォルトでは日時名になります。

-g groupId

このテストで実行されるテスト定義ファイル内のリクエスト・グループの識別子のカンマ区切りリストです。すべてのグループを実行するには、--all-groupsと指定します。

-p perfLogFile

パフォーマンス・ログ・ファイルの名前です。デフォルトではテスト名になります。パフォーマンス・テストを無効にするには、--no-perfを使用します。

-l resLogFile

レスポンス・ログ・ファイルの名前です。デフォルトではテスト名になります。

-v resLogLevel

レスポンスのロギング(MIN | HEADERS | ALL)レベルです。デフォルトはALLです。

-c csvFile

レスポンス・データのCSVファイルの名前です。デフォルトではこのファイルは生成されません。

-s ctlFile

レスポンス・データのctlファイルの名前です。デフォルトではこのファイルは生成されません。

--no-perf

パフォーマンス・データのすべてのロギングをオフに切り替えます。

--all-groups

テスト定義内のすべてのグループを実行します。

-verbose

詳細情報ログを作成します。

E.2.3 テスト・ハーネスを使用したテストの実行

テスト・ハーネスを使用してWebプロバイダをテストする手順は、次のとおりです。

1. pdktestsuite.zipファイルを使用しやすい場所に抽出します。この操作により、pdk\testsuite\pdktestというディレクトリが作成され、ここにすべてのテスト・ハーネス・ファイルが抽出されます。

2. PDKTEST_HOMEという環境変数を、前述の手順で作成した場所を指すように設定します。たとえば、Dドライブに抽出した場合は、D:\pdk\testsuite\pdktestという名前のディレクトリが作成されているはずです。PDKTEST_HOMEの値をD:\pdk\testsuite\pdktestに設定します。テスト・ハーネスによって実行可能なスクリプトがbinディレクトリに提供されます。

3. E.2.1項「テスト定義ファイル」に示したようなテスト定義ファイルを作成します。

4. E.2.2項「runTestコマンド」で説明したようにrunTestコマンドを起動します。

F コンテンツ管理のAPIおよびビュー

この付録では、サポートされているOracle Portalコンテンツ管理のAPIおよびビューをリストします。内容は、次のとおりです。

- F.1項「サポートされているAPI」

- F.2項「セキュア・ビュー」

F.1 サポートされているAPI

この項では、コンテンツ管理タスクの実行に利用できるAPIの概要について説明します。

様々なパッケージのコンテンツの詳細は、Portal Centerの『Oracle Portal PL/SQL API Reference』を参照してください。

http://portalcenter.oracle.com

「Portal Focus Areas」セクションで「Portlet Development」をクリックし、次に、「APIs and References」セクションで「PL/SQL API Reference」をクリックします。

F.1.1 WWSBR_APIパッケージ

このパッケージには、MDS RepositoryのPortalスキーマにあるコンテンツをアクセスおよび操作するためのAPIが含まれています。これらのAPIを使用して、次の操作を実行できます。

- ページ、カテゴリ、アイテムなどのポータル・オブジェクトの作成、編集および削除

- アイテムおよびページのコピーと移動

- アイテムのチェックインおよびチェックアウト

- 保留中のアイテムの承認または拒否

F.1.2 WWSRC_APIパッケージ

このパッケージには、MDS Repositoryでコンテンツを検索するためのAPIが含まれています。これらのAPIを使用して、次の操作を実行できます。

- アイテム、ページ、カテゴリおよびパースペクティブを検索します。

- 特定の属性値に基づく検索結果をフィルタ処理します。

- XML文書として検索結果を返します。

F.1.3 WWSEC_APIパッケージ

このパッケージには、Oracle Portalのセキュリティ管理用のAPIが含まれています。これらのAPIを使用して、次の操作を実行できます。

- ユーザーのメンテナンス(ユーザー・プロファイル・エントリの作成および削除、Portalアクセスのアクティブ化、ユーザー・プロパティの更新、その他の関連タスク)

- グループのメンテナンス(グループの作成、アクティブ化、更新および削除、その他の関連タスク)

- アクセスの制御(ユーザー権限またはグループ権限の付与、チェック、コピー、更新および削除、その他の関連タスク)

F.1.4 WWCTX_APIパッケージ

このパッケージには、セッション・コンテキストへのアクセスを可能にするためのAPIが含まれています。このAPIには、特定ユーザーのセッション・コンテキストの管理に必要なメソッドが用意されています。

セッションは、ユーザーがポータルにアクセスする時点で確立されます。最初のアクセスの際に作成されるのはパブリック・セッションです。これはユーザーのログイン後、認証済セッションに変換され、ユーザーがログアウトするまで存続します。また、古いセッションは、ポータルによって定期的にクリーン・アップされます。

F.1.5 WWPRO_API_INVALIDATIONパッケージ

このパッケージには、Oracle Web Cacheにキャッシュされているコンテンツを無効にするためのAPIが含まれています。このAPIを使用するのは、コードによってコンテンツを変更したときに、その変更内容をすぐにユーザーに表示する必要がある場合です。たとえば、ページにアイテムを追加するコード内から、キャッシュを無効にするAPIをコールする必要が生じることがあります。

F.2 セキュア・ビュー

wwsbr_api_viewsのビューにより、リリース間で変更される定義について気にすることなく、安心してMDS RepositoryのPortalスキーマに対するカスタム問合せを作成できます。表F-1に、現在サポートされているビューをリストします。

表F-1 セキュアなコンテンツ・リポジトリ・ビュー

表示

説明

WWSBR_ALL_CATEGORIES

すべてのカテゴリを表示します。

WWSBR_ALL_CONTENT_AREAS

すべてのページ・グループを表示します。

WWSBR_ALL_FOLDER_REGIONS

現行ユーザーが参照できるページにあるすべてのページ・リージョンを表示します。

WWSBR_ALL_FOLDERS

現行ユーザーが「表示」以上の権限を持つページを表示します。

WWSBR_ALL_ITEMS

現行ユーザーが参照できるアイテムを表示します。

WWSBR_ALL_NAVIGATION_BARS

現行ユーザーが参照できるすべてのナビゲーション・ページをリストします。

WWSBR_ALL_PERSPECTIVES

すべてのパースペクティブを表示します。

WWSBR_ALL_STYLES

すべてのスタイルを表示します。

WWSBR_APPROVER

すべてのページ・グループ承認ステップの承認者を表示します。

WWSBR_ATTRIBUTES

すべての属性を表示します。

WWSBR_CONTENT_AREA_APPROVAL

ページ・グループの承認定義を表示します。

WWSBR_CONTENT_AREA_ITEM_TYPES

どのアイテム・タイプがどのページ・グループで使用可能かを表示します。

WWSBR_FOLDER_ATTRIBUTES

現行ユーザーが参照できるページに関連付けられている属性を表示します。

WWSBR_FOLDER_PERSPECTIVES

現行ユーザーが参照できるページに関連付けられているパースペクティブを表示します。

WWSBR_FOLDER_TYPE_ATTRIBUTES

各ページ・タイプ内で使用可能な属性を表示します。

WWSBR_FOLDER_TYPES

すべてのページ・タイプを表示します。

WWSBR_ITEM_APPROVAL

承認を経由するすべてのアイテムのアイテム承認情報を表示します。

WWSBR_ITEM_ATTRIBUTES

現行ユーザーが参照できるアイテムに関連付けられている属性および属性値を表示します。

WWSBR_ITEM_PERSPECTIVES

現行ユーザーが参照できるアイテムに関連付けられているパースペクティブを表示します。

WWSBR_ITEM_TYPE_ATTRIBUTES

各アイテム・タイプ内で使用可能な属性を表示します。

WWSBR_ITEM_TYPES

すべてのアイテム・タイプを表示します。

WWSBR_SUBSCRIPTION

ポータル・ページとアイテムに対するユーザー・サブスクリプションを表示します。

WWSBR_USER_FOLDERS

現行ユーザーが「管理」以上の権限を持つページをリストします。

WWSBR_USER_PAGES

現行ユーザーが「管理」以上の権限を持つページをリストします。

注意:

次の表では、アスタリスク(*)はその列がビューの主キーの一部であることを示します。

F.2.1 WWSBR_ALL_CATEGORIES

表F-2に、WWSBR_ALL_CATEGORIESビューの列をリストします。このビューには、すべてのカテゴリが表示されます。

表F-2 WWSBR_ALL_CATEGORIES

列

NULL

データ型

説明

注意

ID*

NOT NULL

NUMBER

カテゴリのID。

CAID*

NOT NULL

NUMBER

カテゴリのページ・グループID。

WWSBR_ALL_CONTENT_AREAS.IDへの外部キー。

PARENTID

NUMBER

親カテゴリのID。

カテゴリに親がない場合は0(ゼロ)

LANGUAGE*

NOT NULL

VARCHAR2(30)

言語コード。

NAME

VARCHAR2(60)

カテゴリの内部名。親カテゴリ内で一意です。

DISPLAY_NAME

NOT NULL

VARCHAR2(240)

カテゴリの表示名またはタイトル。

F.2.2 WWSBR_ALL_CONTENT_AREAS

表F-3に、WWSBR_ALL_CONTENT_AREASビューの列をリストします。このビューには、すべてのページ・グループが表示されます。このビューには、現行ユーザーの権限に関係なく、リポジトリのすべてのページ・グループが表示されます。

注意:

このビューの行を一意に識別する別の方法は、NAMEおよびLANGUAGE列を使用することです。

表F-3 WWSBR_ALL_CONTENT_AREAS

列

NULL

データ型

説明

注意

ID*

NOT NULL

NUMBER

ページ・グループのID。

LANGUAGE*

NOT NULL

VARCHAR2(30)

言語コード。

NAME

NOT NULL

VARCHAR2(60)

ページ・グループの内部名

DISPLAY_NAME

VARCHAR2(256)

ページ・グループの表示名またはタイトル

DEFAULT_LANGUAGE

NOT NULL

VARCHAR2(30)

ページ・グループのデフォルト言語の言語コード

F.2.3 WWSBR_ALL_FOLDER_REGIONS

表F-4に、WWSBR_ALL_FOLDER_REGIONSビューの列をリストします。このビューには、現行ユーザーが参照可能なページにあるすべてのページ・リージョンが表示されます。

表F-4 WWSBR_ALL_FOLDER_REGIONS

列

NULL

データ型

説明

注意

ID*

NUMBER(38)

リージョンのID。

DISPLAY_NAME*

VARCHAR2(4000)

リージョンの表示名またはタイトル。

LANGUAGE

VARCHAR(7)

言語コード。

FOLDER_ID

NUMBER(38)

リージョンが含まれるページのID。

次のものに対する外部キー:

- WWSBR_ALL_FOLDERS.ID

- WSBR_USER_FOLDERS.ID

FOLDER_CAID

NUMBER(38)

リージョンが含まれるページのページ・グループID。

次のものに対する外部キー:

- WWSBR_ALL_FOLDERS.CAID

- WWSBR_USER_FOLDERS.CAID

PARENT_ID

NUMBER(38)

リージョンがネストしている場合、親リージョンのID。

TYPE

VARCHAR2(30)

リージョンのタイプ。

有効な値は次のとおりです。

- NONE - 未定義

- TAB - タブ・リージョン

- SUBPAGE - サブページ・リージョン

- ITEM - アイテム・リージョン

- PORTLET - ポートレット・リージョン

SEQ

NUMBER

親リージョン内でのリージョンの順序。

ALLOW_CONTENT

NUMBER

リージョンへのコンテンツの追加が可能かどうかを示します。

有効な値は次のとおりです。

- 0 - コンテンツの追加は不可

- 1 - コンテンツの追加は可能

F.2.4 WWSBR_ALL_FOLDERS

表F-5に、WWSBR_ALL_FOLDERSビューの列をリストします。このビューには、現行ユーザーが「表示」以上の権限を持つページが表示されます。

表F-5 WWSBR_ALL_FOLDERS

列

NULL

データ型

説明

注意

ID*

NOT NULL

NUMBER

ページ・グループ内のページの一意識別子。

CAID*

NOT NULL

NUMBER

ページ・グループのID。

WWSBR_ALL_CONTENT_AREAS.IDへの外部キー。

LANGUAGE*

NOT NULL

VARCHAR2(30)

言語コード。

PARENT_ID

NUMBER

親ページのID。

ページ・グループのルート・ページの場合は0(ゼロ)。

NAME

NOT NULL

VARCHAR2(60)

ページの内部名。

親ページ内で一意である必要があります。

DISPLAY_NAME

NOT NULL

VARCHAR2(256)

ページの表示名またはタイトル。

CATEGORY_ID

NUMBER

ページに割り当てられたカテゴリのID。

WWSBR_ALL_CATEGORIES.IDへの外部キー。

CATEGORY_SITEID

NUMBER

ページに割り当てられたカテゴリのページ・グループID。

WWSBR_ALL_CATEGORIES.CAIDへの外部キー。

DESCRIPTION

VARCHAR2(2000)

ページの説明。

TYPE_ID

NOT NULL

NUMBER

ページ・タイプのID。

WWSBR_FOLDER_TYPES.IDへの外部キー。

TYPE_SITEID

NOT NULL

NUMBER

ページ・タイプのページ・グループID。

WWSBR_FOLDER_TYPES.CAIDへの外部キー。

BASE_TYPE_ID

NOT NULL

NUMBER

基本ページ・タイプのID。

WWSBR_FOLDER_TYPES.IS_BASE_FOLDER_TYPE=1であるWWSBR_FOLDER_TYPES.IDへの外部キー。

IS_PORTLET

NOT NULL

NUMBER(1)

ページがポートレットとして公開されているかどうかを示します。

有効な値は次のとおりです。

- 0 - ポートレットではない

- 1 - ポートレット

IS_CACHING_ON

VARCHAR2

非推奨。この列は下位互換性の目的でのみ保持されています。

CACHE_MODE

NUMBER(1)

ページのキャッシュ・モード。

有効な値は次のとおりです。

- 2 - キャッシュしない

- 1 - ページ定義のみをキャッシュ

- 0 - ページ定義とコンテンツをx分間キャッシュ

- 4 - システム・レベルでのみページ定義をキャッシュ

- 3 - ページの定義およびコンテンツをシステム・レベルでx分間キャッシュ

SUB_FOLDER_SEQUENCE

NUMBER

親ページのサブページ・リージョンでのページの順序。

DISPLAY_IN_PARENT_FOLDER

NOT NULL

NUMBER(1)

ページが親ページのサブページ・リージョンに表示されるかどうかを示します。

ITEMVERSIONING

VARCHAR2(30)

ページのアイテム・バージョニングのレベルを判別します。

有効な値は次のとおりです。

- versionnone - バージョニングなし

- versionsimple - シンプル・バージョニング

- versionaudit - 監査バージョニング

STYLE_ID

NOT NULL

NUMBER

ページによって使用されるスタイルのID。

WWSBR_ALL_STYLES.IDへの外部キー。

STYLE_CAID

NOT NULL

NUMBER

ページによって使用されるスタイルのページ・グループID。

WWSBR_ALL_STYLES.CAIDへの外部キー。

URL_VALUE

VARCHAR2(4000)

URLタイプのページのURL値。

SEARCH_VALUE

VARCHAR2(2000)

非推奨。この列は下位互換性の目的でのみ保持されています。

PLSQL_VALUE

VARCHAR2(2000)

PL/SQLページのPL/SQLの値。

IMAGE

VARCHAR2(350)

ページに関連付けられたイメージの一意の名前。

ドキュメント表のNAME列に一致します。

TITLE_IMAGE_NAME

VARCHAR2

非推奨。この列は下位互換性の目的でのみ保持されています。

ROLLOVER_IMAGE_NAME

VARCHAR2(350)

ページに関連付けられた反転イメージの一意の名前。

ドキュメント表のNAME列に一致します。

BANNER_IMAGE_NAME

VARCHAR2

非推奨。この列は下位互換性の目的でのみ保持されています。

NAVIGATION_BAR_ID

VARCHAR2

非推奨。この列は下位互換性の目的でのみ保持されています。

NAVIGATION_BAR_CAID

VARCHAR2

非推奨。この列は下位互換性の目的でのみ保持されています。

IS_PUBLIC

NOT NULL

NUMBER(1)

ページがパブリック・ユーザーから参照可能であることを示します。

有効な値は次のとおりです。

- 0 - 非公開

- 1 - 公開

ITEM_LEVEL_SECURITY

NOT NULL

NUMBER(1)

アイテム・レベル・セキュリティがページに対して有効になっているかどうかを示します。

有効な値は次のとおりです。

- 0 - ILSが無効

- 1 - ILSが有効

DISPLAY_FULL_SCREEN

VARCHAR2

非推奨。この列は下位互換性の目的でのみ保持されています。

PLSQL_FOLDER_EXECUTOR

VARCHAR2(30)

PL/SQLタイプのページの場合、PL/SQLコードの実行に使用されるデータベース・スキーマ。

CREATEDATE

DATE

ページの作成日付。

CREATOR

VARCHAR2(256)

ページ作成者のユーザー名。

UPDATEDATE

DATE

ページの最後の更新日付。

UPDATOR

VARCHAR2(256)

最後のページ更新者のユーザー名。

F.2.5 WWSBR_ALL_ITEMS

表F-6に、WWSBR_ALL_ITEMSビューの列をリストします。このビューには、現行ユーザーが参照可能なアイテムが表示されます。

このビューの使用例は、10.3.4項「アイテムIDの検索」を参照してください。

表F-6 WWSBR_ALL_ITEMS

列

NULL

データ型

説明

注意

MASTERID

NOT NULL

NUMBER

アイテムのマスターID。

アイテムのすべてのバージョンと翻訳は同じマスターIDを持ちます。

ID*

NOT NULL

NUMBER

アイテムのID。

アイテムの各バージョンは新しいIDを受け取ります。翻訳と承認が有効な場合は、同一のIDに対して複数の行が存在することがあります。

CAID*

NOT NULL

NUMBER

アイテムのページ・グループID。

次のものに対する外部キー:

- WWSBR_ALL_FOLDERS.CAID

- WWSBR_USER_FOLDERS.CAID

- WWSBR_ALL_CONTENT_AREAS.ID

LANGUAGE*

NOT NULL

VARCHAR2(30)

言語コード。

IS_CURRENT_VERSION*

NOT NULL

NUMBER(1)

アイテムが現行バージョンであるかどうかを示します。

有効な値は次のとおりです。

- 0 - 非現行バージョン

- 1 - 現行バージョン

FOLDER_ID

NOT NULL

NUMBER

アイテムが含まれるページのID。

次のものに対する外部キー:

- WWSBR_ALL_FOLDERS.ID

- WWSBR_USER_FOLDERS.ID

- WWSBR_ALL_FOLDER_REGIONS.FOLDER_ID

FOLDER_REGION_ID

NOT NULL

NUMBER

アイテムが含まれるリージョンのID。

WWSBR_ALL_FOLDER_REGIONS.IDへの外部キー。

NAME

NOT NULL

VARCHAR2(256)

アイテムの内部名。

この名前はシステム生成のGUID値で、代替IDとして使用できます。この名前はパスに基づいたURLでも使用されます。

DISPLAY_NAME

VARCHAR2(256)

アイテムの表示名またはタイトル。

ITEMTYPE

NOT NULL

VARCHAR2(30)

BASEFILE、BASETEXT、BASEURLなどの基本アイテム・タイプ。

SUBTYPE

VARCHAR2(40)

アイテム・タイプのID。

WWSBR_ITEM_TYPES.IDへの外部キー。

SUBTYPE_CAID

NUMBER

アイテム・タイプのページ・グループID。

WWSBR_ITEM_TYPES.CAIDへの外部キー。

PARENT_ITEM_ID

NUMBER

アイテムがサブアイテムである場合、親アイテムのID。

アイテムがサブアイテムでない場合、0(ゼロ)。

CATEGORY_ID

NUMBER

アイテムに割り当てられたカテゴリのID。

WWSBR_ALL_CATEGORIES.IDへの外部キー。

CATEGORY_CAID

NUMBER

アイテムに割り当てられたカテゴリのページ・グループID。

WWSBR_ALL_CATEGORIES.CAIDへの外部キー。

AUTHOR

VARCHAR2(50)

アイテムの作成者。

DESCRIPTION

VARCHAR2(2000)

アイテムの説明。

PUBLISH_DATE

NOT NULL

DATE

アイテムの公開日付。

EXPIREMODE

VARCHAR2(90)

アイテムの有効期限モード。

有効な値は次のとおりです。

- 'PERMANENT' - アイテムは失効しません。

- 'NUMBER' - アイテムはCREATEDATEからEXPIRENUMBER日で失効します。

- 'DATE' - アイテムはEXPIREDATEに失効します。

EXPIRENUMBER

NUMBER

アイテムが失効する、CREATEDATEからの日数。

EXPIREMODE = 'NUMBER'の場合にのみ有効です。

EXPIREDATE

DATE

アイテムが失効する日付。

EXPIREMODE = 'DATE'の場合にのみ有効です。

IMAGE

VARCHAR2(350)

アイテムに関連付けられたイメージ。

この値には、参照(たとえば、ファイル・システムまたはコンテンツ・リポジトリに格納されているイメージのパス)、またはドキュメント表のNAME列に一致する一意のドキュメント名を指定できます。

KEYWORDS

VARCHAR2(2000)

アイテムのキーワード。

URL

VARCHAR2(4000)

URLタイプ・アイテムのURL。

FILENAME

VARCHAR2(350)

ファイル・タイプ・アイテムに関連付けられたファイルの一意の名前。

ドキュメント表のNAME列に一致します。

TEXT

CLOB

テキスト・タイプ・アイテムのテキスト。

FOLDER_LINK_ID

NUMBER

ページ・リンク・タイプ・アイテムのページID。

次のものに対する外部キー:

- WWSBR_ALL_FOLDERS.ID

- WWSBR_USER_FOLDERS.ID

FOLDER_LINK_CAID

NUMBER

ページ・リンク・タイプ・アイテムのページ・グループID。

次のものに対する外部キー:

- WWSBR_ALL_FOLDERS.CAID

- WWSBR_USER_FOLDERS.CAID

ACTIVE*

NOT NULL

NUMBER(1)

アイテムのアクティブ・ステータスを示します。

有効な値は次のとおりです。

- 1 - アクティブ

- 2 - 新規の現行バージョンとしての承認を保留中

- 3 - 新規の非現行バージョンとしての承認を保留中

- 0 - 承認を保留中

- -1 - 削除済

- -7 - 却下

- -9 - 却下後削除済

CAN_BE_CHECKEDOUT

NUMBER(1)

アイテムがチェックアウトできるかどうかを示します。

有効な値は次のとおりです。

- 0 - チェックアウト不可

- 1 - チェックアウト可

IS_ITEM_CHECKEDOUT

NUMBER(1)

アイテムがチェックアウトされているかどうかを示します。

有効な値は次のとおりです。

- 0 - アイテムはチェックアウトされていません。

- 1 - アイテムはチェックアウトされています。

CHECKER_USERNAME

VARCHAR2(256)

アイテムをチェックアウトしたユーザーのユーザー名。

CHECKOUT_DATE

DATE

アイテムをチェックアウトした日付。

FULLSCREEN

NOT NULL

NUMBER(1)

リンクとして表示されるアイテムのレンダリング動作を示します。

有効な値は次のとおりです。

- 0 - リンクをクリックすると、アイテムが新しいブラウザ・ウィンドウに表示されます。

- 1 - リンクをクリックすると、アイテムが同じブラウザ・ウィンドウに表示されます。

INPLACE

NOT NULL

NUMBER(1)

テキストまたはPL/SQLアイテムのレンダリング動作を示します。

有効な値は次のとおりです。

- 0 - アイテムのリンクが表示されます。リンクのレンダリング動作は、FULLSCREEN列の値に応じて異なります。

- 1 - アイテムはリージョン内の確定位置にレンダリングされます。

CREATEDATE

NOT NULL

DATE

アイテムの作成日付。

CREATOR

NOT NULL

VARCHAR2(256)

アイテム作成者のユーザー名。

UPDATEDATE

DATE

アイテムの最後の更新日付。

UPDATOR

VARCHAR2(256)

最後のアイテム更新者のユーザー名。

SECURITY

VARCHAR2(25)

アイテムに対してセキュリティが設定されているかどうかを示します。

有効な値は次のとおりです。

- item - ページに対してILSが有効になっており、アイテム・レベルでセキュリティが設定されています。

- folder - ページ・レベルでセキュリティが設定されています。

VISIBLE

NOT NULL

NUMBER(1)

アイテムが非表示かどうかを示します。

有効な値は次のとおりです。

- 0 - アイテムは非表示です。

- 1 - アイテムは表示されます。

SEQUENCE

NOT NULL

NUMBER

グループ化がない場合はアイテムの標準の順序。

CATEGORY_SEQUENCE

NOT NULL

NUMBER

アイテムがカテゴリ別にグループ化されているときのアイテムの順序。

AUTHOR_SEQUENCE

NOT NULL

NUMBER

アイテムが作成者別にグループ化されているときのアイテムの順序。

CREATE_DATE_SEQUENCE

NOT NULL

NUMBER

アイテムが作成日別にグループ化されているときのアイテムの順序。

ITEMTYPE_SEQUENCE

NOT NULL

NUMBER

アイテムがアイテム・タイプ別にグループ化されているときのアイテムの順序。

F.2.6 WWSBR_ALL_NAVIGATION_BARS

表F-7に、WWSBR_ALL_NAVIGATION_BARSビューの列をリストします。このビューには、現行ユーザーが参照可能なすべてのナビゲーション・ページが表示されます。

注意:

このビューの行を一意に識別する別の方法は、NAME、CAIDおよびLANGUAGE列を使用することです。

表F-7 WWSBR_ALL_NAVIGATION_BARS

列

NULL

データ型

説明

注意

ID*

NOT NULL

NUMBER

ナビゲーション・ページのID。

CAID*

NOT NULL

NUMBER

ナビゲーション・ページのページ・グループID。

WWSBR_ALL_CONTENT_AREAS.IDへの外部キー。

LANGUAGE*

NOT NULL

VARCHAR2(30)

言語コード。

NAME

NOT NULL

VARCHAR2(60)

ナビゲーション・ページの内部名。

ページ・グループ内で一意です。

DISPLAY_NAME

NOT NULL

VARCHAR2(256)

ナビゲーション・ページの表示名またはタイトル。

STYLE_ID

NOT NULL

NUMBER

ナビゲーション・ページによって使用されるスタイルのID。

WWSBR_ALL_STYLES.IDへの外部キー。

STYLE_CAID

NOT NULL

NUMBER

ナビゲーション・ページによって使用されるスタイルのページ・グループID。

WWSBR_ALL_STYLES.CAIDへの外部キー。

IS_PORTLET

NOT NULL

NUMBER(1)

ページがポートレットとして公開されているかどうかを示します。

有効な値は次のとおりです。

- 0 - ポートレットではない

- 1 - ポートレット

ALIGNMENT

VARCHAR2

非推奨。この列は下位互換性の目的で保持されています。

F.2.7 WWSBR_ALL_PERSPECTIVES

表F-8に、WWSBR_ALL_PERSPECTIVESビューの列をリストします。このビューには、すべてのパースペクティブが表示されます。

表F-8 WWSBR_ALL_PERSPECTIVES

列

NULL

データ型

説明

注意

ID*

NOT NULL

NUMBER

パースペクティブのID

CAID*

NOT NULL

NUMBER

パースペクティブのページ・グループID

WWSBR_ALL_CONTENT_AREAS.IDへの外部キー。

PARENTID

NUMBER

親パースペクティブのID

パースペクティブに親がない場合は0(ゼロ)。

LANGUAGE*

NOT NULL

VARCHAR2(30)

言語コード。

NAME

VARCHAR2(60)

パースペクティブの内部名

親パースペクティブ内で一意です。

DISPLAY_NAME

NOT NULL

VARCHAR2(240)

パースペクティブの表示名またはタイトル

F.2.8 WWSBR_ALL_STYLES

表F-9に、WWSBR_ALL_STYLESビューの列をリストします。このビューにはすべてのスタイルが表示されます。

注意:

このビューの行を一意に識別する別の方法は、NAME、CAIDおよびLANGUAGE列を使用することです。

表F-9 WWSBR_ALL_STYLES

列

NULL

データ型

説明

注意

ID*

NOT NULL

NUMBER

スタイルのID

CAID*

NOT NULL

NUMBER

スタイルのページ・グループID

WWSBR_ALL_CONTENT_AREAS.IDへの外部キー。

LANGUAGE*

NOT NULL

VARCHAR2(30)

言語コード。

NAME

NOT NULL

VARCHAR2(65)

スタイルの内部名

ページ・グループ内で一意です。

DISPLAY_NAME

VARCHAR2(350)

スタイルの表示名またはタイトル

F.2.9 WWSBR_APPROVER

表F-10に、WWSBR_APPROVERビューの列をリストします。このビューには、すべてのページ・グループ承認ステップの承認者が表示されます。STEP_ID列は、WWSBR_CONTENT_AREA_APPROVALビューのSTEP_ID列に対応します。各ステップで1人以上の承認者を指定できます。承認者にはユーザーまたはグループを指定できます。この情報はAPPROVER_TYPE列に格納されます。

表F-10 WWSBR_APPROVER

列

NULL

データ型

説明

注意

ID

NOT NULL

NUMBER

内部IDで、各行で一意です。

WWSBR_CONTENT_AREA_APPROVAL.IDへの外部キー。

STEP_ID*

NOT NULL

NUMBER

承認プロセスのシーケンシャルなステップID。

APPROVER_ID*

NOT NULL

NUMBER

承認者のユーザーID。

APPROVER_TYPE*

NOT NULL

VARCHAR2(10)

承認者のタイプ。

有効な値は次のとおりです。

- USER - 承認者はユーザーです。

- GROUP - 承認者はグループです。

F.2.10 WWSBR_ATTRIBUTES

表F-11に、WWSBR_ATTRIBUTESビューの列をリストします。このビューはすべての属性を表示します。

注意:

このビューの行を一意に識別する別の方法は、NAME、CAIDおよびLANGUAGE列を使用することです。

表F-11 WWSBR_ATTRIBUTES

列

NULL

データ型

説明

注意

ID*

NOT NULL

NUMBER

属性のID。

CAID*

NOT NULL

NUMBER

属性のページ・グループID。

WWSBR_ALL_CONTENT_AREAS.IDへの外部キー。

LANGUAGE*

NOT NULL

VARCHAR2(30)

言語コード。

NAME

NOT NULL

VARCHAR2(256)

属性の内部名。

代替キーとして機能します(ページ・グループ内で一意)。

DISPLAY_NAME

VARCHAR2(256)

属性の表示名またはタイトル。

IS_BASE_ATTRIBUTE

NOT NULL

NUMBER(1)

属性が基本属性であることを示します。

有効な値は次のとおりです。

- 0 - 基本属性以外

- 1 - 基本属性

DATA_TYPE

NOT NULL

VARCHAR2(30)

属性のデータ型。

LENGTH

NUMBER(5)

属性の長さ。

IS_TRANSLATABLE

NOT NULL

NUBMER(1)

属性が翻訳可能であることを示します。つまり、様々な値を翻訳ごとに格納できるということです。属性が翻訳不可能の場合は、すべての翻訳に共通の値が格納されます。

有効な値は次のとおりです。

- 0 - 翻訳不可能

- 1 - 翻訳可能

F.2.11 WWSBR_CONTENT_AREA_APPROVAL

表F-12に、WWSBR_CONTENT_AREA_APPROVALビューの列をリストします。このビューには、ページまたはページ・グループの承認定義が表示されます。各承認定義には、承認プロセスで定義されたxステップに対応するx行があります。各ステップの承認者を判別するには、WWSBR_APPROVERビューを参照してください。

表F-12 WWSBR_CONTENT_AREA_APPROVAL

列

NULL

データ型

説明

注意

ID*

NOT NULL

NUMBER

承認プロセスのID。

STEP_ID

NUMBER

承認プロセスのステップのID。

CAID

NOT NULL

NUMBER

承認プロセスの定義の対象となるページ・グループのID。

FOLDER_ID

NUMBER

承認プロセスの定義の対象となるページのID。

ALL_OR_ANY

VARCHAR2(10)

すべての承認者が公開予定のアイテムを承認する必要があるのか、または1人の承認者のみかを示します。

有効な値は次のとおりです。

- ALL - すべての承認者がアイテムを承認する必要があります。

- ANY - アイテムを承認する必要があるのは1人の承認者のみです。

PARALLEL_OR_SERIAL

VARCHAR2(10)

すべての承認者に、同時に通知するか、または順々に通知するかを示します。

有効な値は次のとおりです。

- P - すべての承認者に同時に通知します。

- S - 承認者に順々に通知します。

F.2.12 WWSBR_CONTENT_AREA_ITEM_TYPES

表F-13に、WWSBR_CONTENT_AREA_ITEM_TYPESビューの列をリストします。このビューには、どのページ・グループでどのアイテム・タイプを使用可能かが表示されます。アイテム・タイプは、アイテムのページ・グループ内で使用可能でない場合は、アイテムに割り当てられません。

表F-13 WWSBR_CONTENT_AREA_ITEM_TYPES

列

NULL

データ型

説明

注意

CAID*

NOT NULL

NUMBER

ページ・グループのID。

WWSBR_ALL_CONTENT_AREAS.IDへの外部キー。

ITEM_TYPE_ID*

NOT NULL

NUMBER

アイテム・タイプのID。

WWSBR_ITEM_TYPES.IDへの外部キー。

ITEM_TYPE_CAID*

NOT NULL

NUMBER

アイテム・タイプのページ・グループID。

WWSBR_ITEM_TYPES.CAIDへの外部キー。

F.2.13 WWSBR_FOLDER_ATTRIBUTES

表F-14に、WWSBR_FOLDER_ATTRIBUTESビューの列をリストします。このビューには、現行ユーザーが参照可能なページに関連付けられた属性が表示されます。

表F-14 WWSBR_FOLDER_ATTRIBUTES

列

NULL

データ型

説明

注意

FOLDER_CAID*

NOT NULL

NUMBER

ページのページ・グループID。

次のものに対する外部キー:

- WWSBR_ALL_FOLDERS.CAID

- WWSBR_USER_FOLDERS.CAID

FOLDER_ID*

NOT NULL

NUMBER

ページのID。

次のものに対する外部キー:

- WWSBR_ALL_FOLDERS.ID

- WWSBR_USER_FOLDERS.ID

ATTRIBUTE_ID*

NUMBER

属性のID。

WWSBR_ATTRIBUTES.IDへの外部キー。

ATTRIBUTE_CAID*

NUMBER

属性のページ・グループID。

WWSBR_ATTRIBUTES.CAIDへの外部キー。

LANGUAGE*

NOT NULL

VARCHAR2(30)

言語コード。

次のものに対する外部キー:

- WWSBR_ALL_FOLDERS.LANGUAGE

- WWSBR_USER_FOLDERS.LANGUAGE

- WWSBR_ATTRIBUTES.LANGUAGE

VALUETYPE

NOT NULL

VARCHAR2(30)

属性のデータ型。

VALUE

VARCHAR2(2000)

属性の値

F.2.14 WWSBR_FOLDER_PERSPECTIVES

表F-15に、WWSBR_FOLDER_PERSPECTIVESビューの列をリストします。このビューには、現行ユーザーが参照可能なページに関連付けられたパースペクティブが表示されます。

表F-15 WWSBR_FOLDER_PERSPECTIVES

列

NULL

データ型

説明

注意

FOLDER_CAID*

NOT NULL

NUMBER

ページのページ・グループのID

次のものに対する外部キー:

- WWSBR_ALL_FOLDERS.CAID

- WWSBR_USER_FOLDERS.CAID

FOLDER_ID*

NOT NULL

NUMBER

ページのページ・グループID

次のものに対する外部キー:

- WWSBR_ALL_FOLDERS.CAID

- WWSBR_USER_FOLDERS.CAID

PERSPECTIVE_ID*

NOT NULL

NUMBER

パースペクティブのID

WWSBR_ALL_PERSPECTIVES.IDへの外部キー

PERSPECTIVE_CAID*

NOT NULL

NUMBER

パースペクティブのページ・グループID

WWSBR_ALL_PERSPECTIVES.CAIDへの外部キー

PERSPECTIVE_NAME

VARCHAR2(60)

パースペクティブの内部名

WWSBR_ALL_PERSPECTIVES.NAMEへの外部キー

F.2.15 WWSBR_FOLDER_TYPE_ATTRIBUTES

表F-16に、WWSBR_FOLDER_TYPE_ATTRIBUTESビューの列をリストします。このビューには、各ページ・タイプ内で使用可能な属性が表示されます。

注意:

このビューの行を一意に識別する別の方法は、FOLDER_TYPE_ID、FOLDER_TYPE_CAID、ATTRIBUTE_IDおよびATTRIBUTE_CAID列を使用することです。

表F-16 WWSBR_FOLDER_TYPE_ATTRIBUTES

列

NULL

データ型

説明

注意

ID*

NOT NULL

NUMBER

ページ・タイプ属性行のID

CAID*

NOT NULL

NUMBER

ページ・グループID。

WWSBR_ALL_CONTENT_AREAS.IDへの外部キー。

LANGUAGE*

NOT NULL

VARCHAR2(30)

言語コード。

FOLDER_TYPE_ID

NOT NULL

NUMBER

フォルダ・タイプのID

WWSBR_FOLDER_TYPES.IDへの外部キー。

FOLDER_TYPE_CAID

NOT NULL

NUMBER

ページ・タイプのページ・グループID。

WWSBR_FOLDER_TYPES.CAIDへの外部キー。

ATTRIBUTE_ID

NOT NULL

NUMBER

属性のID。

WWSBR_ATTRIBUTES.IDへの外部キー。

ATTRIBUTE_CAID

NOT NULL

NUMBER

属性のページ・グループID。

WWSBR_ATTRIBUTES.CAIDへの外部キー。

DEFAULT_VALUE

VARCHAR2(2000)

属性のデフォルト値。

属性のベース型に関係なくデフォルト値は常にVARCHAR2として格納されます。

F.2.16 WWSBR_FOLDER_TYPES

表F-17に、WWSBR_FOLDER_TYPESビューの列をリストします。このビューには、すべてのページ・タイプが表示されます。

注意:

このビューの行を一意に識別する別の方法は、NAME、CAIDおよびLANGUAGE列を使用することです。

表F-17 WWSBR_FOLDER_TYPES

列

NULL

データ型

説明

注意

ID*

NOT NULL

NUMBER

ページ・タイプのID。

CAID*

NOT NULL

NUMBER

ページ・タイプのページ・グループID。

WWSBR_ALL_CONTENT_AREAS.IDへの外部キー。

LANGUAGE*

NOT NULL

VARCHAR2(30)

言語コード。

NAME

VARCHAR2(30)

ページ・タイプの内部名。

代替キーとして機能します(ページ・グループ内で一意)。

DISPLAY_NAME

VARCHAR2(256)

ページ・タイプの表示名またはタイトル。

DESCRIPTION

VARCHAR2(2000)

ページ・タイプの説明。

IS_BASE_FOLDER_TYPE

NOT NULL

NUMBER

アイテムが基本ページ・タイプであることを示します。

有効な値は次のとおりです。

- 0 - 基本ページ・タイプ以外

- 1 - 基本ページ・タイプ

BASE_FOLDER_TYPE_ID

NUMBER

このページ・タイプの基本ページ・タイプのID。

F.2.17 WWSBR_ITEM_APPROVAL

表F-18に、WWSBR_ITEM_APPROVALビューの列をリストします。このビューには、承認を経由するすべてのアイテムのアイテム承認情報が表示されます。このビューは、次のような情報の検索に使用できます。

- 承認経路でのアイテムxの場所

- アイテムxの現在のレビューア

- アイテムxを却下した承認者

このビューを使用すると、保留中のアイテムに関する情報以外に、承認日、コメント、承認者など、承認に関する詳細を問い合せることができます。

表F-18 WWSBR_ITEM_APPROVAL

列

NULL

データ型

説明

注意

ID*

NOT NULL

NUMBER

内部ID

APPROVAL_INSTANCE_ID

NOT NULL

NUMBER

内部ID

ITEM_ID

NOT NULL

NUMBER

承認が保留中のアイテムのID

CAID

NOT NULL

NUMBER

承認が保留中のアイテムが含まれるページ・グループのID

LANGUAGE

NOT NULL

VARCHAR2(30)

言語コード。

FOLDER_ID

NUMBER

承認が保留中のアイテムがあるページのID

STEP_ID

NUMBER

アイテムの承認が必要となるステップのID

APPROVAL_ID

NUMBER

アイテムの承認プロセスのID

WWSBR_CONTENT_AREA_APPROVAL.IDへの外部キー。

CURRENT_APPROVER_ID

NOT NULL

NUMBER

承認ステップの承認者のID

ANYの承認ステップの場合、この値は承認ステップのすべての行で同一です。ALLの承認ステップの場合、この値はAPPROVER_IDと同じになります。

CURRENT_APPROVER_TYPE

VARCHAR2(10)

現在の承認者のタイプ

有効な値は次のとおりです。

- USER - 承認者はユーザーです。

- GROUP - 承認者はグループです。

APPROVAL_DATE

DATE

アイテムの承認日付

APPROVER_ID

NUMBER

承認者のID

承認者のユーザー名を取得するには、wwsec_api.user_nameを使用します。

APPROVER_COMMENT

VARCHAR2(4000)

承認または却下時に指定されたコメント

STATUS

NOT NULL

NUMBER(1)

アイテムのステータス

有効な値は次のとおりです。

- 1 - アクティブ

- 2 - 新規の現行バージョンとしての承認を保留中

- 3 - 新規の非現行バージョンとしての承認を保留中

- 9 - 下書き

- 0 - 承認を保留中

- -1 - 削除済

- -7 - 却下

- -9 - 却下後削除済

SUBMITTER

VARCHAR2(256)

承認の対象となるアイテムを送信するユーザーのID

VALUE1

VARCHAR2(256)

未使用。

F.2.18 WWSBR_ITEM_ATTRIBUTES

表F-19に、WWSBR_ITEM_ATTRIBUTESビューの列をリストします。このビューには、現行ユーザーが参照可能なアイテムに関連付けられた属性および属性値が表示されます。

表F-19 WWSBR_ITEM_ATTRIBUTES

列

NULL

データ型

説明

注意

ITEM_CAID

NOT NULL

NUMBER

アイテムのページ・グループID。

WWSBR_ALL_ITEMS.CAIDへの外部キー

ITEM_MASTERID

NOT NULL

NUMBER

アイテムのマスターID。

WWSBR_ALL_ITEMS.MASTERIDへの外部キー

ATTRIBUTE_ID

NUMBER

属性のID。

WWSBR_ATTRIBUTES.IDへの外部キー。

ATTRIBUTE_CAID

NUMBER

属性のページ・グループID。

WWSBR_ATTRIBUTES.CAIDへの外部キー。

LANGUAGE

NOT NULL

VARCHAR2(30)

言語コード。

WWSBR_ALL_ITEMS.LANGUAGEへの外部キー

VALUETYPE

NOT NULL

VARCHAR2(30)

属性の日付型

VALUE

VARCHAR2(4000)

属性の値

F.2.19 WWSBR_ITEM_PERSPECTIVES

表F-20に、WWSBR_ITEM_PERSPECTIVESビューの列をリストします。このビューには、現行ユーザーが参照可能なアイテムに関連付けられたパースペクティブが表示されます。

表F-20 WWSBR_ITEM_PERSPECTIVES

列

NULL

データ型

説明

注意

ITEM_CAID*

NOT NULL

NUMBER

アイテムのページ・グループID。

WWSBR_ALL_ITEMS.CAIDへの外部キー

ITEM_ID*

NOT NULL

NUMBER

アイテムのID。

WWSBR_ALL_ITEMS.IDへの外部キー

ITEM_MASTERID*

NUMBER

アイテムのマスターID。

WWSBR_ALL_ITEMS.MASTERIDへの外部キー

PERSPECTIVE_ID*

NOT NULL

NUMBER

パースペクティブのID

WWSBR_ALL_PERSPECTIVES.IDへの外部キー

PERSPECTIVE_CAID*

NOT NULL

NUMBER

パースペクティブのページ・グループID

WWSBR_ALL_PERSPECTIVES.CAIDへの外部キー

PERSPECTIVE_NAME

VARCHAR2(60)

パースペクティブの内部名

WWSBR_ALL_PERSPECTIVES.NAMEへの外部キー

F.2.20 WWSBR_ITEM_TYPE_ATTRIBUTES

表F-21に、WWSBR_ITEM_TYPE_ATTRIBUTESビューの列をリストします。このビューには、各アイテム・タイプ内で使用可能な属性が表示されます。

注意:

このビューの行を一意に識別する別の方法は、ITEM_TYPE_ID、ITEM_TYPE_CAID、ATTRIBUTE_IDおよびATTRIBUTE_CAID列を使用することです。

表F-21 WWSBR_ITEM_TYPE_ATTRIBUTES

列

NULL

データ型

説明

注意

ID*

NOT NULL

NUMBER

アイテム・タイプ属性行のID。

CAID*

NOT NULL

NUMBER

ページ・グループID。

WWSBR_ALL_CONTENT_AREAS.IDへの外部キー。

LANGUAGE*

NOT NULL

VARCHAR2(30)

言語コード。

ITEM_TYPE_ID

NOT NULL

NUMBER

アイテム・タイプのID。

WWSBR_ITEM_TYPES.IDへの外部キー。

ITEM_TYPE_CAID

NOT NULL

NUMBER

アイテム・タイプのページ・グループID。

WWSBR_ITEM_TYPES.CAIDへの外部キー。

ATTRIBUTE_ID

NOT NULL

NUMBER

属性のID。

WWSBR_ATTRIBUTES.IDへの外部キー。

ATTRIBUTE_CAID

NOT NULL

NUMBER

属性のページ・グループID。

WWSBR_ATTRIBUTES.CAIDへの外部キー。

HIDDEN_ATTRIBUTE

NOT NULL

NUMBER(1)

属性を非表示にするかどうかを示します。

この列は特定の組込みアイテム・タイプに使用され、ユーザーの使用を意図したものではありません。

有効な値は次のとおりです。

- 0 - 非表示

- 1 - 表示

DEFAULT_VALUE

VARCHAR2(2000)

属性のデフォルト値。

属性のベース型に関係なくデフォルト値は常にVARCHAR2として格納されます。

F.2.21 WWSBR_ITEM_TYPES

表F-22に、WWSBR_ITEM_TYPESビューの列をリストします。このビューには、すべてのアイテム・タイプを表示します。

注意:

このビューの行を一意に識別する別の方法は、NAME、CAIDおよびLANGUAGE列を使用することです。

表F-22 WWSBR_ITEM_TYPES

列

NULL

データ型

説明

注意

ID*

NOT NULL

NUMBER

アイテム・タイプのID。

CAID*

NOT NULL

NUMBER

アイテム・タイプのページ・グループID。

WWSBR_ALL_CONTENT_AREAS.IDへの外部キー。

LANGUAGE*

NOT NULL

VARCHAR2(30)

言語コード。

NAME

VARCHAR2(30)

アイテム・タイプの内部名。

代替キーとして機能します(ページ・グループ内で一意)。

DISPLAY_NAME

VARCHAR2(256)

アイテム・タイプの表示名またはタイトル。

DESCRIPTION

VARCHAR2(2000)

アイテム・タイプの説明。

IS_BASE_ITEM_TYPE

NOT NULL

NUMBER

アイテムが基本アイテム・タイプであることを示します。

基本以外のアイテム・タイプのみがアイテムに割当て可能。

有効な値は次のとおりです。

- 0 - 基本アイテム・タイプ以外

- 1 - 基本アイテム・タイプ

BASE_ITEM_TYPE_ID

NUMBER

このアイテム・タイプのベースとなる基本アイテム・タイプのID。

F.2.22 WWSBR_SUBSCRIPTION

表F-23に、WWSBR_SUBSCRIPTIONビューの列をリストします。このビューには、ポータル・ページおよびアイテムに対するユーザー・サブスクリプションが表示されます。

表F-23 WWSBR_SUBSCRIPTION

列

NULL

データ型

説明

注意

ID*

NOT NULL

NUMBER

内部ID

OBJECT_CONTEXT_ID

NOT NULL

NUMBER

サブスクライブされるオブジェクトが属しているページ・グループのID

FOLDER_ID

NOT NULL

NUMBER

サブスクライブされるオブジェクトが属しているページのID

OBJECT_ID

NUMBER

サブスクライブされるアイテムのID

ページ・サブスクリプションの場合、この値はNULLです。

GROUP_ID

NUMBER

未使用。

RECIPIENT_ID

NOT NULL

NUMBER

オブジェクトにサブスクライブするユーザーまたはグループのID

RECIPIENT_TYPE

VARCHAR2(10)

未使用。

F.2.23 WWSBR_USER_FOLDERS

表F-24に、WWSBR_USER_FOLDERSビューの列をリストします。このビューには、現行ユーザーが「管理」以上の権限を持つページが表示されます。

表F-24 WWSBR_USER_FOLDERS

列

NULL

データ型

説明

注意

ID*

NOT NULL

NUMBER

ページ・グループ内のページの一意識別子。

CAID*

NOT NULL

NUMBER

ページ・グループのID。

WWSBR_ALL_CONTENT_AREAS.IDへの外部キー。

LANGUAGE*

NOT NULL

VARCHAR2(30)

言語コード。

PARENT_ID

NUMBER

親ページのID。

ページ・グループのルート・ページの場合は0(ゼロ)。

NAME

NOT NULL

VARCHAR2(60)

ページの内部名。

親ページ内で一意である必要があります。

DISPLAY_NAME

NOT NULL

VARCHAR2(256)

ページの表示名またはタイトル。

CATEGORY_ID

NUMBER

ページに割り当てられたカテゴリのID。

WWSBR_ALL_CATEGORIES.IDへの外部キー。

CATEGORY_CAID

NUMBER

ページに割り当てられたカテゴリのページ・グループID。

WWSBR_ALL_CATEGORIES.CAIDへの外部キー。

DESCRIPTION

VARCHAR2(2000)

ページの説明。

TYPE_ID

NOT NULL

NUMBER

ページ・タイプのID。

WWSBR_FOLDER_TYPES.IDへの外部キー。

TYPE_CAID

NOT NULL

NUMBER

ページ・タイプのページ・グループID。

WWSBR_FOLDER_TYPES.CAIDへの外部キー。

BASE_TYPE_ID

NOT NULL

NUMBER

基本ページ・タイプのID。

WWSBR_FOLDER_TYPES.IS_BASE_FOLDER_TYPE=1であるWWSBR_FOLDER_TYPES.IDへの外部キー。

IS_PORTLET

NOT NULL

NUMBER(1)

ページがポートレットとして公開されているかどうかを示します。

有効な値は次のとおりです。

- 0 - ポートレットではない

- 1: ポートレット

IS_CACHING_ON

VARCHAR2

非推奨。この列は下位互換性の目的でのみ保持されています。

CACHE_MODE

NUMBER(1)

ページのキャッシュ・モード。

有効な値は次のとおりです。

- 2 - キャッシュしない

- 1 - ページ定義のみをキャッシュ

- 0 - ページ定義とコンテンツをx分間キャッシュ

- 4 - システム・レベルでのみページ定義をキャッシュ

- 3 - ページの定義およびコンテンツをシステム・レベルでx分間キャッシュ

SUB_FOLDER_SEQUENCE

NUMBER

親ページのサブページ・リージョンでのページの順序。

DISPLAY_IN_PARENT_FOLDER

NOT NULL

NUMBER(1)

ページが親ページのサブページ・リージョンに表示されるかどうかを示します。

ITEMVERSIONING

VARCHAR2(30)

ページのアイテム・バージョニングのレベルを判別します。

有効な値は次のとおりです。

- versionnone - バージョニングなし

- versionsimple - シンプル・バージョニング

- versionaudit - 監査バージョニング

STYLE_ID

NOT NULL

NUMBER

ページによって使用されるスタイルのID。

WWSBR_ALL_STYLES.IDへの外部キー。

STYLE_CAID

NOT NULL

NUMBER

ページによって使用されるスタイルのページ・グループID。

WWSBR_ALL_STYLES.CAIDへの外部キー。

URL_VALUE

VARCHAR2(4000)

URLタイプのページのURL値。

SEARCH_VALUE

VARCHAR2(2000)

非推奨。この列は下位互換性の目的でのみ保持されています。

PLSQL_VALUE

VARCHAR2(2000)

PL/SQLページのPL/SQLの値。

IMAGE

VARCHAR2(350)

ページに関連付けられたイメージの一意の名前。

ドキュメント表のNAME列に一致します。

TITLE_IMAGE_NAME

VARCHAR2

非推奨。この列は下位互換性の目的でのみ保持されています。

ROLLOVER_IMAGE_NAME

VARCHAR2(350)

ページに関連付けられた反転イメージの一意の名前。

ドキュメント表のNAME列に一致します。

BANNER_IMAGE_NAME

VARCHAR2

非推奨。この列は下位互換性の目的でのみ保持されています。

.

NAVIGATION_BAR_ID

VARCHAR2

非推奨。この列は下位互換性の目的でのみ保持されています。

NAVIGATION_BAR_CAID

VARCHAR2

非推奨。この列は下位互換性の目的でのみ保持されています。

IS_PUBLIC

NOT NULL

NUMBER(1)

ページがパブリック・ユーザーから参照可能であることを示します。

有効な値は次のとおりです。

- 0 - 非公開

- 1 - 公開

ITEM_LEVEL_SECURITY

NOT NULL

NUMBER(1)

アイテム・レベル・セキュリティがページに対して有効になっているかどうかを示します。

有効な値は次のとおりです。

- 0 - ILSが無効

- 1 - ILSが有効

DISPLAY_FULL_SCREEN

VARCHAR2

非推奨。この列は下位互換性の目的でのみ保持されています。

PLSQL_FOLDER_EXECUTOR

VARCHAR2(30)

PL/SQLタイプのページの場合、PL/SQLコードの実行に使用されるデータベース・スキーマ。

CREATEDATE

DATE

ページの作成日付。

CREATOR

VARCHAR2(256)

ページ作成者のユーザー名。

UPDATEDATE

DATE

ページの最後の更新日付。

UPDATOR

VARCHAR2(256)

最後のページ更新者のユーザー名。

F.2.24 WWSBR_USER_PAGES

表F-25に、WWSBR_USER_PAGESビューの列をリストします。このビューには、現行ユーザーが「管理」以上の権限を持つページが表示されます。このビューは、wwsbr_api.modify_folder APIとともに使用され、WWSBR_USER_FOLDERSビューより多くの列が含まれます。

表F-25 WWSBR_USER_PAGES

列

NULL

データ型

説明

注意

GUID

NOT NULL

RAW(32)

ページのグローバル一意ID。

ID

NOT NULL

NUMBER

ページのID。

SITEID

NOT NULL

NUMBER

ページのページ・グループID。

LANGUAGE

NOT NULL

VARCHAR2(30)

言語コード。

PARENTID

NUMBER

親ページのID。

NAME

NOT NULL

VARCHAR2(60)

ページの名前。

この名前はパスに基づくURLで使用されます。

TITLE

NOT NULL

VARCHAR(256)

ページの表示名またはタイトル。

SETTINGSSETID

NOT NULL

NUMBER

ページによって使用されるスタイルのID。

SETTINGSSETSITEID

NOT NULL

NUMBER

ページによって使用されるスタイルのページ・グループID。

ISPUBLIC

NOT NULL

NUMBER(1)

ページがパブリック・ユーザーから参照可能であることを示します。

有効な値は次のとおりです。

- 0 - 非公開

- 1 - 公開

IMAGE

VARCHAR2(350)

6001.JPGなど、ページに関連付けられたイメージの一意のドキュメント名。

ROLLOVERIMAGE

VARCHAR2(350)

6001.JPGなど、ページに関連付けられた反転イメージ、またはタブのアクティブでないタブ・イメージの、一意のドキュメント名。

TITLEIMAGE

VARCHAR2(350)

6001.JPGなど、タブのアクティブなタブ・イメージの一意のドキュメント名。

LEADER

VARCHAR2(256)

ページ連絡先の電子メール・アドレス。

DESCRIPTION

VARCHAR2(2000)

ページの説明。

PRODUCTION

NUMBER(1)

未使用。

CREATEDATE

DATE

ページの作成日付。

CREATOR

VARCHAR2 (256)

ページ作成者のユーザー名。

UPDATEDATE

DATE

ページの最後の更新日付。

UPDATOR

VARCHAR2(256)

最後のページ更新者のユーザー名。

PUBLISHDATE

DATE

未使用。

ICON

VARCHAR2(256)

未使用。

CTXTXT

VARCHAR2(1)

内部的に検索で使用。

HAVEITEMSECURITY

NOT NULL

NUMBER(1)

アイテム・レベル・セキュリティがページに対して有効になっているかどうかを示します。

有効な値は次のとおりです。

- 0 - ILSが無効

- 1 - ILSが有効

ITEMVERSIONING

VARCHAR2(30)

ページのアイテム・バージョニングのレベルを示します。

有効な値は次のとおりです。

- versionnone - バージョニングなし

- versionsimple - シンプル・バージョニング

- versionaudit - 監査バージョニング

TOPICID

NUMBER

ページに割り当てられたカテゴリのID。

TOPIC_SITEID

NUMBER

ページに割り当てられたカテゴリのページ・グループID。

VALUE

VARCHAR2(2000)

PL/SQLページの場合、PL/SQLコード。

JSPページの場合、JSPソースのドキュメント名。JSPページでは、この値は変更しないでください。

TYPE

NOT NULL

NUMBER

ページのページ・タイプID。

TYPE_SITEID

NOT NULL

NUMBER

ページのページ・タイプのページ・グループID。

BASE_TYPE

NOT NULL

NUMBER

基本ページ・タイプのID。

IS_PORTLET

NOT NULL

NUMBER(1)

ページがポートレットとして公開されているかどうかを示します。

有効な値は次のとおりです。

- 0 - ポートレットではない

- 1 - ポートレット

QUOTA

VARCHAR2(5)

未使用。

SYSPRIV_NAME

NOT NULL

VARCHAR2(200)

ページがアクセス設定を継承するルート・ページ。

PLSQL_EXECUTOR

VARCHAR2(30)

PL/SQLタイプのページの場合、PL/SQLコードの実行に使用されるデータベース・スキーマ。

有効な値は次のとおりです。

- $PUBLIC$

- $CREATOR$

- <データベース・ユーザー名>

KEYWORDS

VARCHAR2(2000)

ページのキーワード。

IS_READY

NUMBER(1)

ページの作成が完了していることを示します。

有効な値は次のとおりです。

- 1 - ページは作成完了済

INHERIT_PRIV

VARCHAR2(200)

このページが権限を継承するページ。

次の形式を使用します。

<page group id>/<page id>

CACHE_MODE

NUMBER(1)

ページのキャッシュ・モード。

有効な値は次のとおりです。

- 2 - キャッシュしない

- 1 - ページ定義のみをキャッシュ

- 0 - ページ定義とコンテンツをx分間キャッシュ

- 4 - システム・レベルでのみページ定義をキャッシュ

- 3 - ページの定義およびコンテンツをシステム・レベルでx分間キャッシュ

CACHE_EXPIRES

NUMBER(38)

分単位のキャッシュ期間。

TEMPLATE_ID

NUMBER(38)

ページがベースとするテンプレートのID。

TEMPLATE_SITEID

NUMBER(38)

ページがベースとするテンプレートのページ・グループID。

ALLOW_PAGE_STYLE

NUMBER(1)

テンプレートに対して、ページで別のスタイルを使用できるかどうかを示します。

有効な値は次のとおりです。

- 1 - ページで別のスタイルを使用可能

ALLOW_PAGE_ACL

NUMBER(!)

テンプレートに対して、ページで様々なアクセス設定を持てるかどうかを示します。

有効な値は次のとおりです。

- 1 - ページで様々なアクセス設定を使用可能

DAV_ID

NOT NULL

VARCHAR2(60)

DAV_LOCK_TOKEN

VARCHAR2(36)

IS_TEMPLATE

NOT NULL

NUMBER(1)

ページがテンプレートであることを示します。

有効な値は次のとおりです。

- 1 - テンプレート

INIT_JSPFILE

VARCHAR2(256)

JSPページの場合、ページのJSPソースがJARまたはWARファイルのときの初期JSPファイル。

UI_TEMPLATE_ID

NUMBER(38)

HTMLページ・スキンのID。

TEMPLATE_ISPUBLIC

NOT NULL

NUMBER(1)

テンプレートが使用可能かどうかを示します。

有効な値は次のとおりです。

- 1 - テンプレートは使用可能

CONTAINER_ID

NOT NULL

NUMBER

コンテナ・ページのID。

DEFAULT_ITEM_REGION_ID

NUMBER

ページのデフォルトのアイテム・リージョンのID。

DEFAULT_PORTLET_REGION_ID

NUMBER

ページのデフォルトのポートレット・リージョンのID。

ITEMTYPE_INHERIT_FLAGS

NUMBER(1)

WebDAVの場合、デフォルトのアイテム・タイプが親ページから継承されているかどうかを示します。

有効な値は次のとおりです。

- 7 - すべてのアイテム・タイプを親ページから継承

- 0 - すべてのタイプをこのページ上で指定

REGFILE_ITEMTYPE

RAW(32)

WebDAVの場合、標準ファイルのデフォルト・アイテム・タイプのGUID。

ZIPFILE_ITEMTYPE

RAW(32)

WebDAVの場合、ZIPファイルのデフォルト・アイテム・タイプのGUID。

IMAGEFILE_ITEMTYPE

RAW(32)

WebDAVの場合、イメージ・ファイルのデフォルト・アイテム・タイプのGUID。

DISPLAYINPARENT

NOT NULL

NUMBER(1)

ページが親ページのサブページ・リージョンに表示されるかどうかを示します。

有効な値は次のとおりです。

- 1 - 親ページのサブページ・リージョンにページを表示

SEQ

NUMBER

親ページのサブページ・リージョンでのページの順序。

ALPHABETICAL_SORT

NOT NULL

NUMBER(1)

サブページがアルファベット順に表示されることを示します。

有効な値は次のとおりです。

- 1 - アルファベット順にサブページを表示

IS_ITEM_PAGE

NUMBER(1)

テンプレートがアイテム(アイテムのプレースホルダ・アイテム付き)用であることを示します。

有効な値は次のとおりです。

- 1 - アイテム・テンプレート

ITEM_PAGE_ID

NUMBER(38)

アイテム・テンプレートのID。

ITEM_PAGE_SITE_ID

NUMBER(28)

アイテム・テンプレートのページ・グループID。

ITEM_PAGE_TABSTRING

VARCHAR2(512)

アイテム・テンプレートのタブ文字列。

次の形式を使用します。

<tab name>:<sub tab name>:...:<sub tab name>

INHERIT_ITEM_PAGE

NUMBER(1)

アイテム・テンプレート専用で、アイテムが親ページのアイテム・テンプレートを継承することを示します。

有効な値は次のとおりです。

- 1 - 親ページのアイテム・テンプレートを継承

ALLOW_ITEM_PAGE_OVERRIDE

NUMBER(1)

アイテム・テンプレート専用で、アイテムが独自のアイテム・テンプレートを持てることを示します。

有効な値は次のとおりです。

- 1 - ページ上のアイテムに独自のアイテム・テンプレートを使用可能

HAS_INPLACE_ITEM

NOT NULL

NUMBER(1)

ページまたはタブにプレースホルダ・アイテムがあるかどうかを示します。

有効な値は次のとおりです。

- 1 - プレースホルダ・アイテムあり

TIMEOUT

NUMBER

ポートレットをフェッチするために使用される制限時間(秒単位)。

LAST_ITEM_TEMPLATE_ASSIGNMENT

DATE

トリガーによって設定されます。

G コンテンツ管理イベント・フレームワークのイベント

この付録では、Oracle Portalのアクションとそれによって生成されるCMEFイベントをリストして説明します。内容は、次のとおりです。

- G.1項「アイテムのアクションおよびイベント」

- G.2項「ページのアクションおよびイベント」

- G.3項「タブのアクションおよびイベント」

- G.4項「ページ・グループのアクションおよびイベント」

- G.5項「属性のアクションおよびイベント」

- G.6項「アイテム・タイプのアクションおよびイベント」

- G.7項「ページ・タイプのアクションおよびイベント」

- G.8項「カテゴリのアクションおよびイベント」

- G.9項「パースペクティブのアクションおよびイベント」

- G.10項「テンプレートのアクションおよびイベント」

G.1 アイテムのアクションおよびイベント

表G-1に、アイテムの追加および更新時に実行されるアクションと、それらのアクションによって呼び出されるイベントをリストします。

表G-1 アイテムの追加および編集

説明

アクション

イベント

状態

オブジェクト・クラス

アイテムを追加し、即座に公開します。

ADD_ITEM

INSERT

PUBLISHED

ITEM

アイテムを追加しますが、将来公開するように設定します。

ADD_ITEM

INSERT

NOT_PUBLISHED

ITEM

ポートレット・インスタンスを追加します。

ADD_ITEM

INSERT

PUBLISHED

ITEM

アイテムを更新しますが、アイテムの状態は変更しません(つまり、公開または非公開のままです)。

EDIT_ITEM

UPDATE

GENERAL

ITEM

当初、後で公開するように設定していたアイテムを編集し、今公開するように選択します。

EDIT_ITEM

UPDATE

PUBLISHED

ITEM

公開対象アイテムを更新し、将来公開するように設定します。

EDIT_ITEM

UPDATE

UNPUBLISHED

ITEM

期限切れアイテムを更新し、そのアイテムの期限切れを無効にします。

EDIT_ITEM

UPDATE

PUBLISHED

ITEM

アイテムを非表示にします。

HIDE_ITEM

UPDATE

UNPUBLISHED

ITEM

非表示だったアイテムを表示します。

SHOW_ITEM

UPDATE

PUBLISHED

ITEM

アイテムを期限切れにします。

EXPIRE_ITEM

UPDATE

UNPUBLISHED

ITEM

アイテムの期限切れを無効にします。

UNEXPIRE_ITEM

UPDATE

PUBLISHED

ITEM

アイテムをチェックアウトします。

CHECK_OUT_ITEM

UPDATE

CHECKED_OUT

ITEM

アイテムをチェックインします。

CHECK_IN_ITEM

UPDATE

CHECKED_IN

ITEM

表G-2に、アイテムのコピーおよび移動時に実行されるアクションと、それらのアクションによって呼び出されるイベントをリストします。

表G-2 アイテムのコピーおよび移動

説明

アクション

イベント

状態

オブジェクト・クラス

アイテムをコピーします - コピーされたアイテムは公開状態になります。

COPY_ITEM

INSERT

PUBLISHED

ITEM

アイテムをコピーします - コピーされたアイテムは非公開状態になります。

COPY_ITEM

INSERT

NOT_PUBLISHED

ITEM

アイテムを移動します(ページ内、別のページ、別のページ・グループのいずれか) - アイテムは公開状態になります。

MOVE_ITEM

DELETE

PURGED

ITEM

--

MOVE_ITEM

INSERT

PUBLISHED

ITEM

アイテムを移動します(ページ内、別のページ、別のページ・グループのいずれか) - アイテムは非公開状態になります。

MOVE_ITEM

DELETE

PURGED

ITEM

--

MOVE_ITEM

INSERT

NOT_PUBLISHED

ITEM

表G-3に、アイテムの削除およびリストア時に実行されるアクションと、それらのアクションによって呼び出されるイベントをリストします。

表G-3 アイテムの削除およびリストア

説明

アクション

イベント

状態

オブジェクト・クラス

削除されるアイテムを保持するよう設定されたページ・グループでアイテムを削除します。

DELETE_ITEM

DELETE

MARKED_FOR_DELETE

ITEM

削除されるアイテムを保持するよう設定されていないページ・グループでアイテムを削除します。

DELETE_ITEM

DELETE

PURGED

ITEM

非公開状態のアイテムの削除を元に戻します(アイテムを非表示または期限切れにするか、あるいは将来公開するように設定するかのいずれかです)。

UNDELETE_ITEM

UPDATE

NOT_PUBLISHED

ITEM

公開状態のアイテムの削除を元に戻します。

UNDELETE_ITEM

UPDATE

PUBLISHED

ITEM

表G-4に、アイテムの権限の定義時に実行されるアクションと、それらのアクションによって呼び出されるイベントをリストします。

表G-4 アイテムの権限の定義

説明

アクション

イベント

状態

オブジェクト・クラス

アイテム・レベルのアクセス権限を指定します。

SPECIFY_ITEM_ACL

UPDATE

GENERAL

ITEM

アイテムのACLにユーザーを追加します。

ADD_ITEM_ACL

UPDATE

GENERAL

ITEM

アイテムに対するユーザーの権限を更新します。

UPDATE_ITEM_ACL

UPDATE

GENERAL

ITEM

アイテムのACLからユーザーを削除します。

DELETE_ITEM_ACL

UPDATE

GENERAL

ITEM

親ページからのセキュリティの継承を選択します。

INHERIT_ITEM_ACL

UPDATE

GENERAL

ITEM

表G-5に、アイテム・バージョンの処理時に実行されるアクションと、それらのアクションによって呼び出されるイベントをリストします。

表G-5 アイテムのバージョニング

説明

アクション

イベント

状態

オブジェクト・クラス

アイテムの新規バージョンを追加し、それを現行バージョンに設定します。

ADD_ITEM_VERSION

INSERT

PUBLISHED

ITEM

アイテムの新規バージョンを追加しますが、現行バージョンには設定しません。

ADD_ITEM_VERSION

INSERT

NOT_PUBLISHED

ITEM

削除されるアイテムを保持するよう設定されたページ・グループで、アイテムのバージョンを削除します。

DELETE_ITEM_VERSION

DELETE

MARKED_FOR_DELETE

ITEM

削除されるアイテムを保持するよう設定されていないサイトで、アイテムのバージョンを削除します。

DELETE_ITEM_VERSION

DELETE

PURGED

ITEM

アイテムの現行バージョンを変更します(旧現行バージョンと新現行バージョンは公開状態です)。

SWITCH_ITEM_VERSION

UPDATE

UNPUBLISHED

ITEM

--

SWITCH_ITEM_VERSION

UPDATE

PUBLISHED

ITEM

アイテムの現行バージョンを変更します(旧現行バージョンと新現行バージョンは非公開状態です)。

SWITCH_ITEM_VERSION

UPDATE

GENERAL

ITEM

--

SWITCH_ITEM_VERSION

UPDATE

NOT_PUBLISHED

ITEM

アイテムの現行バージョンを変更します(旧現行バージョンは公開状態で、新現行バージョンは非公開状態です)。

SWITCH_ITEM_VERSION

UPDATE

UNPUBLISHED

ITEM

--

SWITCH_ITEM_VERSION

UPDATE

NOT_PUBLISHED

ITEM

アイテムの現行バージョンを変更します(旧現行バージョンは非公開状態で、新現行バージョンは公開状態です)。

SWITCH_ITEM_VERSION

UPDATE

GENERAL

ITEM

--

SWITCH_ITEM_VERSION

UPDATE

PUBLISHED

ITEM

表G-6に、アイテムの承認処理時に実行されるアクションと、それらのアクションによって呼び出されるイベントをリストします。

表G-6 アイテムの承認

説明

アクション

イベント

状態

オブジェクト・クラス

保留モードでアイテムを追加します。

SUBMIT_ITEM_FOR_APPROVAL

INSERT

NOT_PUBLISHED

ITEM

下書きモードでアイテムを追加します。

ADD_DRAFT_ITEM

INSERT

NOT_PUBLISHED

ITEM

承認者が保留中のアイテムを編集します。

EDIT_ITEM_BY_APPROVER

UPDATE

GENERAL

ITEM

アイテムを承認しますが、次の承認者では保留中となる承認です。

APPROVE_ITEM_STEP

UPDATE

GENERAL

ITEM

すべての承認者がアイテムを承認します(承認されたアイテムは公開されていた現行バージョンを上書きします)。

APPROVE_ITEM

UPDATE

PUBLISHED

ITEM

すべての承認者がアイテムを承認します(承認されたアイテムが新しい現行バージョンになります)。

APPROVE_ITEM

INSERT

PUBLISHED

ITEM

--

APPROVE_ITEM

UPDATE

UNPUBLISHED

ITEM

すべての承認者がアイテムを承認します(承認されたアイテムが新規バージョンになりますが、現行バージョンにはなりません)。

APPROVE_ITEM

INSERT

NOT_PUBLISHED

ITEM

アイテムを更新し、承認用に送信します。

SUBMIT_ITEM_FOR_APPROVAL

UPDATE

NOT_PUBLISHED

ITEM

アイテムを却下します。

REJECT_ITEM

UPDATE

GENERAL

ITEM

却下されたアイテムを承認用に再送信します。

SUBMIT_ITEM_FOR_APPROVAL

UPDATE

GENERAL

ITEM

下書きアイテムを更新します(作成者、説明などの属性を更新します)。

EDIT_DRAFT_ITEM

UPDATE

GENERAL

ITEM

下書きアイテムを更新します(アイテムを将来公開するように公開日付を更新します)。

EDIT_DRAFT_ITEM

UPDATE

UNPUBLISHED

ITEM

下書きアイテムを更新します(アイテムを即時公開するように公開日付を更新します)。

EDIT_DRAFT_ITEM

UPDATE

PUBLISHED

ITEM

下書きアイテムを承認用に再送信します。

SUBMIT_ITEM_FOR_APPROVAL

UPDATE

NOT_PUBLISHED

ITEM

下書きアイテムが有効になっているページにアイテムをコピーします。

COPY_DRAFT_ITEM

INSERT

NOT_PUBLISHED

ITEM

アイテムをページにコピーし、承認用に再送信します。

SUBMIT_ITEM_FOR_APPROVAL

INSERT

NOT_PUBLISHED

ITEM

G.2 ページのアクションおよびイベント

表G-7に、ページの追加および編集時に実行されるアクションと、それらのアクションによって呼び出されるイベントをリストします。

表G-7 ページの追加および編集

説明

アクション

イベント

状態

オブジェクト・クラス

ページを作成します - 2つのメッセージがあり、1つは追加ページへのもの、もう1つはデフォルト・ナビゲーション・ページのポートレット・インスタンスへのものです。

ADD_PAGE

INSERT

PUBLISHED

PAGE

--

ADD_ITEM

INSERT

PUBLISHED

ITEM

テンプレートに基づいてページを作成します。テンプレートには、アイテムとポートレットが1つずつ含まれています。

ADD_PAGE

INSERT

PUBLISHED

PAGE

--

ADD_ITEM

INSERT

PUBLISHED

ITEM

--

DELETE_PAGE脚注1

DELETE

PURGED

PAGE

--

ADD_PAGE

INSERT

PUBLISHED

PAGE

--

ADD_ITEM

INSERT

PUBLISHED

ITEM

--

ADD_ITEM

INSERT

PUBLISHED

ITEM

ページの名前を変更します。ルート・ページの名前を変更した場合は2つのメッセージがあり、1つはページへのもの、もう1つはページ・グループへのものです。

RENAME_PAGE

UPDATE

GENERAL

PAGE

ページ・プロパティ(説明など)を更新します。

EDIT_PAGE

UPDATE

GENERAL

PAGE

ページをコピーします(ページには、ポートレット・インスタンスとアイテムが1つずつ含まれています)。

ADD_PAGE

INSERT

PUBLISHED

PAGE

--

COPY_ITEM

INSERT

PUBLISHED

ITEM

--

COPY_ITEM

INSERT

PUBLISHED

ITEM

ページを別の親の下に移動します。

MOVE_PAGE

DELETE

PURGED

PAGE

--

MOVE_PAGE

INSERT

PUBLISHED

PAGE

ページを翻訳します。

EDIT_PAGE

UPDATE

GENERAL

PAGE

--

EDIT_PAGE

INSERT脚注2

PUBLISHED

PAGE

--

EDIT_PAGE

UPDATE

GENERAL

PAGE

ページに対してバージョニングを有効または無効にします。

EDIT_PAGE

UPDATE

GENERAL

PAGE

脚注1 ページ設計者がウィザードを処理していくと、デフォルト・ナビゲーション・ページを含むページが作成されます。ただし、テンプレートに基づいてページを作成することが確認され次第、このページは削除され、かわりに(テンプレートに基づく)新しいページが作成されます。

脚注2 最初の更新はデフォルト言語用で、後の更新は現行の翻訳用です。当該のメッセージは現行の翻訳用であるINSERTについてです。

表G-8に、ページの削除時に実行されるアクションと、それらのアクションによって呼び出されるイベントをリストします。

表G-8 ページの削除

説明

アクション

イベント

状態

オブジェクト・クラス

ページを削除します(ページにサブページがある場合は、削除された各サブページについてのメッセージがログに記録されます。ただし、削除されたアイテムについてのメッセージはログに記録されません)。

DELETE_PAGE

DELETE

PURGED

PAGE

表G-9に、ページの権限の定義時に実行されるアクションと、それらのアクションによって呼び出されるイベントをリストします。

表G-9 ページの権限の定義

説明

アクション

イベント

状態

オブジェクト・クラス

ページに対してILSを有効または無効にします。

UPDATE_PAGE_ACL

UPDATE

GENERAL

PAGE

--

UPDATE_PAGE_ILS

UPDATE

GENERAL

PAGE

ページをパブリック・ユーザーに表示します。

UPDATE_PAGE_ACL

UPDATE

GENERAL

PAGE

--

UPDATE_PAGE_PUBLIC_SETTING

UPDATE

GENERAL

PAGE

ページのACLにユーザーを追加します。

ADD_PAGE_ACL

UPDATE

GENERAL

PAGE

ページのACLからユーザーを削除します。

DELETE_PAGE_ACL

UPDATE

GENERAL

PAGE

ページのACLでユーザーの権限を変更します。

UPDATE_PAGE_ACL

UPDATE

GENERAL

PAGE

その親からACLを継承するようにページを設定します。

INHERIT_PAGE_ACL

UPDATE

GENERAL

PAGE

ページ・レベルでACLを指定します(ページはその親からACLを継承しません)。

UPDATE_PAGE_ACL

UPDATE

GENERAL

PAGE

--

SPECIFY_PAGE_ACL

UPDATE

GENERAL

PAGE

G.3 タブのアクションおよびイベント

表G-10に、タブの追加および編集時に実行されるアクションと、それらのアクションによって呼び出されるイベントをリストします。

表G-10 タブの追加および編集

説明

アクション

イベント

状態

オブジェクト・クラス

タブを追加します。

ADD_PAGE

INSERT

PUBLISHED

PAGE

--

ADD_ITEM

INSERT

PUBLISHED

ITEM

アイテムが2つあるリージョンにタブを追加します。

ADD_PAGE

INSERT

PUBLISHED

PAGE

--

ADD_ITEM

INSERT

PUBLISHED

ITEM

--

DELETE_ITEM脚注1

DELETE

PURGED

ITEM

--

ADD_ITEM

INSERT

PUBLISHED

ITEM

--

DELETE_ITEM

DELETE

PURGED

ITEM

--

ADD_ITEM

INSERT

PUBLISHED

ITEM

タブを非表示にします。

HIDE_ITEM

UPDATE

UNPUBLISHED

ITEM

非表示タブを表示にします。

SHOW_ITEM

UPDATE

PUBLISHED

ITEM

タブを削除します。

DELETE_PAGE

DELETE

PURGED

PAGE

--

DELETE_ITEM

DELETE

PURGED

ITEM

タブの名前を変更します。

RENAME_PAGE

UPDATE

GENERAL

PAGE

タブ・プロパティ(たとえば、表示名)を更新します。

EDIT_PAGE

UPDATE

GENERAL

PAGE

脚注1 元のページのアイテムは追加されたタブに移動されます。すなわち、アイテムは最初に元のページから削除されて新しいタブに追加されます。

G.4 ページ・グループのアクションおよびイベント

表G-11に、ページ・グループの追加および編集時に実行されるアクションと、それらのアクションによって呼び出されるイベントをリストします。

表G-11 ページ・グループの追加および編集

説明

アクション

イベント

状態

オブジェクト・クラス

ページ・グループを追加します。

ADD_PAGE_GROUP

INSERT

GENERAL

PAGE_GROUP

ページ・グループの名前を変更します。

RENAME_PAGE_GROUP

UPDATE

GENERAL

PAGE_GROUP

表G-12に、ページ・グループの削除およびパージ時に実行されるアクションと、それらのアクションによって呼び出されるイベントをリストします。

表G-12 ページ・グループの削除およびパージ

説明

アクション

イベント

状態

オブジェクト・クラス

ページ・グループを削除します。アイテムまたはサブページについてのメッセージはログに記録されません。

DELETE_PAGE_GROUP

DELETE

PURGED

PAGE_GROUP

削除したアイテムをページ・グループからパージします(アイテムごとに1つのメッセージと実際のパージ操作に1つのメッセージ)。

DELETE_ITEM

DELETE

PURGED

ITEM

--

PURGE_DELETED_ITEM

DELETE

PURGED

PAGE_GROUP

期限切れアイテムをページ・グループからパージします(アイテムごとに1つのメッセージと実際のパージ操作に1つのメッセージ)。

DELETE_ITEM

DELETE

PURGED

ITEM

--

DELETE_ITEM

DELETE

PURGED

ITEM

--

PURGE_EXPIRED_ITEM

DELETE

PURGED

PAGE_GROUP

ページ・グループ・レベルで削除されるアイテムを保持しないことを選択します。したがって、既存の保持されている削除済アイテムがすべてパージされます(アイテムごとに1つのメッセージと実際のパージ操作に1つのメッセージ)。

DELETE_ITEM

DELETE

PURGED

ITEM

--

PURGE_DELETED_ITEM

DELETE

PURGED

PAGE_GROUP

表G-13に、ページ・グループの権限の定義時に実行されるアクションと、それらのアクションによって呼び出されるイベントをリストします。

表G-13 ページ・グループの権限の定義

説明

アクション

イベント

状態

オブジェクト・クラス

ページ・グループのACLにユーザーを追加します。

ADD_PAGE_GROUP_ACL

UPDATE

GENERAL

PAGE_GROUP

ページ・グループのACLでユーザーの権限を変更します。

UPDATE_PAGE_GROUP_ACL

UPDATE

GENERAL

PAGE_GROUP

ページ・グループのACLからユーザーを削除します。

DELETE_PAGE_GROUP_ACL

UPDATE

GENERAL

PAGE_GROUP

表G-14に、ページ・グループの翻訳のインストール時に実行されるアクションと、それらのアクションによって呼び出されるイベントをリストします。

表G-14 ページ・グループの翻訳

説明

アクション

イベント

状態

オブジェクト・クラス

翻訳をインストールします。

TRANSLATE_PAGE

INSERT

PUBLISHED

PAGE

G.5 属性のアクションおよびイベント

表G-15に、属性の処理時に実行されるアクションと、それらのアクションによって呼び出されるイベントをリストします。

表G-15 属性

説明

アクション

イベント

状態

オブジェクト・クラス

属性を追加します。属性のデータ型は、STATEフィールドに、たとえばDATA_TYPE_TEXTとして格納されます。

ADD_ATTRIBUTE

INSERT

DATA_TYPE_TEXT

ATTRIBUTE

属性を更新します。

EDIT_ATTRIBUTE

UPDATE

DATA_TYPE_TEXT

ATTRIBUTE

属性を昇格します(その属性を使用するアイテムの数に関係なくメッセージは同じです)。

MOVE_ATTRIBUTE

UPDATE

GENERAL

ATTRIBUTE

属性を削除します(その属性を使用するアイテムがあってもメッセージは同じです)。

DELETE_ATTRIBUTE

DELETE

DATA_TYPE_TEXT

ATTRIBUTE

G.6 アイテム・タイプのアクションおよびイベント

表G-16に、アイテム・タイプの処理時に実行されるアクションと、それらのアクションによって呼び出されるイベントをリストします。

表G-16 アイテム・タイプ

説明

アクション

イベント

状態

オブジェクト・クラス

カスタム・アイテム・タイプを作成します。

ADD_ITEM_TYPE

INSERT

GENERAL

ITEM_TYPE

アイテム・タイプを編集し、「メイン」タブで変更を行います(名前を編集した場合は別のメッセージが生成されます。次の行の説明を参照してください)。

EDIT_ITEM_TYPE

UPDATE

MAIN_TAB

ITEM_TYPE

アイテム・タイプの名前を変更します。

RENAME_ITEM_TYPE

UPDATE

MAIN_TAB

ITEM_TYPE

属性をアイテム・タイプに関連付けます。

EDIT_ITEM_TYPE

UPDATE

ATTRIBUTES_TAB

ITEM_TYPE

属性をアイテム・タイプから切り離します。

DETACH_ATTRIBUTE

UPDATE

ATTRIBUTES_TAB

ITEM_TYPE

属性のデフォルト値を更新します。

EDIT_ITEM_TYPE

UPDATE

ATTRIBUTES_TAB

ITEM_TYPE

プロシージャをアイテム・タイプに関連付けます。

EDIT_ITEM_TYPE

UPDATE

PROCEDURES_TAB

ITEM_TYPE

アイテム・タイプに関連付けられたプロシージャを編集し、新しいパラメータを追加します。

EDIT_ITEM_TYPE

UPDATE

PROCEDURES_TAB

ITEM_TYPE

アイテム・タイプを昇格します。

MOVE_ITEM_TYPE

UPDATE

GENERAL

ITEM_TYPE

アイテム・タイプを削除します(そのアイテム・タイプに基づくアイテムがある場合でもメッセージは同じです)。

DELETE_ITEM_TYPE

DELETE

PURGED

ITEM_TYPE

G.7 ページ・タイプのアクションおよびイベント

表G-17に、ページ・タイプの処理時に実行されるアクションと、それらのアクションによって呼び出されるイベントをリストします。

表G-17 ページ・タイプ

説明

アクション

イベント

状態

オブジェクト・クラス

カスタム・ページ・タイプを作成します。

ADD_PAGE_TYPE

INSERT

GENERAL

PAGE_TYPE

ページ・タイプを編集し、「メイン」タブで変更を行います(名前を編集した場合は別のメッセージが生成されます。次の行の説明を参照してください)。

EDIT_PAGE_TYPE

UPDATE

MAIN_TAB

PAGE_TYPE

ページ・タイプの名前を変更します。

RENAME_PAGE_TYPE

UPDATE

MAIN_TAB

PAGE_TYPE

属性をページ・タイプに関連付けます。

EDIT_PAGE_TYPE

UPDATE

ATTRIBUTES_TAB

PAGE_TYPE

属性のデフォルト値を追加します。

EDIT_PAGE_TYPE

UPDATE

ATTRIBUTES_TAB

PAGE_TYPE

属性をページ・タイプから切り離します。

DETACH_ATTRIBUTE

UPDATE

ATTRIBUTES_TAB

PAGE_TYPE

プロシージャをページ・タイプに関連付けます。

EDIT_PAGE_TYPE

UPDATE

PROCEDURES_TAB

PAGE_TYPE

ページ・タイプに関連付けられたプロシージャを編集し、新しいパラメータを追加します。

EDIT_PAGE_TYPE

UPDATE

PROCEDURES_TAB

PAGE_TYPE

ページ・タイプを昇格します。

MOVE_PAGE_TYPE

UPDATE

GENERAL

PAGE_TYPE

ページ・タイプを削除します。

DELETE_PAGE_TYPE

DELETE

PURGED

PAGE_TYPE

G.8 カテゴリのアクションおよびイベント

表G-18に、カテゴリの処理時に実行されるアクションと、それらのアクションによって呼び出されるイベントをリストします。

表G-18 カテゴリ

説明

アクション

イベント

状態

オブジェクト・クラス

カテゴリを追加します。

ADD_CATEGORY

INSERT

GENERAL

CATEGORY

カテゴリの名前を変更します。

RENAME_CATEGORY

UPDATE

GENERAL

CATEGORY

--

RENAME_PAGE

UPDATE

GENERAL

PAGE

カテゴリを編集し、「メイン」タブで変更を行います。

EDIT_CATEGORY

UPDATE

GENERAL

CATEGORY

イメージをカテゴリに関連付けます。

EDIT_CATEGORY_IMAGE

UPDATE

GENERAL

CATEGORY

イメージをカテゴリから切り離します。

DELETE_CATEGORY_IMAGE

UPDATE

GENERAL

CATEGORY

カテゴリを昇格します。

MOVE_CATEGORY

UPDATE

GENERAL

CATEGORY

カテゴリを削除します。

DELETE_CATEGORY

DELETE

GENERAL

CATEGORY

G.9 パースペクティブのアクションおよびイベント

表G-19に、パースペクティブの処理時に実行されるアクションと、それらのアクションによって呼び出されるイベントをリストします。

表G-19 パースペクティブ

説明

アクション

イベント

状態

オブジェクト・クラス

パースペクティブを追加します。

ADD_PERSPECTIVE

INSERT

GENERAL

PERSPECTIVE

パースペクティブの名前を変更します。

RENAME_PERSPECTIVE

UPDATE

GENERAL

PERSPECTIVE

--

RENAME_PAGE

UPDATE

GENERAL

PAGE

パースペクティブを編集し、「メイン」タブで変更を行います。

EDIT_PERSPECTIVE

UPDATE

GENERAL

PERSPECTIVE

イメージをパースペクティブに付加します。

EDIT_PERSPECTIVE_IMAGE

UPDATE

GENERAL

PERSPECTIVE

イメージをパースペクティブから切り離します。

DELETE_PERSPECTIVE_IMAGE

UPDATE

GENERAL

PERSPECTIVE

パースペクティブを昇格します。

MOVE_PERSPECTIVE

UPDATE

GENERAL

PERSPECTIVE

パースペクティブを削除します。

DELETE_PERSPECTIVE

DELETE

GENERAL

PERSPECTIVE

G.10 テンプレートのアクションおよびイベント

表G-20に、テンプレートの処理時に実行されるアクションと、それらのアクションによって呼び出されるイベントをリストします。

表G-20 テンプレート

説明

アクション

イベント

状態

オブジェクト・クラス

テンプレートに基づくページを作成します。脚注1

ADD_PAGE

INSERT

PUBLISHED

PAGE

--

ADD_ITEM

INSERT

PUBLISHED

ITEM

--

DELETE_PAGE

DELETE

PURGED

PAGE

--

ADD_PAGE

INSERT

PUBLISHED

PAGE

--

ADD_ITEM

INSERT

PUBLISHED

ITEM

--

ADD_ITEM

INSERT

PUBLISHED

ITEM

テンプレートを使用するようページを編集します。その結果、コンテンツがリージョンから削除されます。

DELETE_ITEM

DELETE

PURGED

ITEM

--

EDIT_PAGE

UPDATE

GENERAL

PAGE

--

ADD_ITEM

INSERT

PUBLISHED

ITEM

--

ADD_ITEM

INSERT

PUBLISHED

ITEM

アイテムをテンプレートに追加します。テンプレートに追加されたこのアイテム自体へのメッセージがあります。その後は、テンプレートに基づくページ上でこのアイテムがレプリケートされるたびに追加のメッセージがあります。

ADD_ITEM

INSERT

PUBLISHED

ITEM

アイテムをテンプレートから削除します。テンプレートから削除されたこのアイテム自体へのメッセージがあります。その後は、テンプレートに基づくページ上でこのアイテムが削除されるたびに(別のページIDおよびページ・グループIDとともに)追加メッセージがあります。

DELETE_ITEM

DELETE

PURGED

ITEM

ページをテンプレートから切り離します。記載されているように、テンプレート上にあったアイテムとポートレットごとに1つ以上のメッセージが生成されます。

COPY_ITEM

INSERT

PUBLISHED

ITEM

1つ以上のページがベースとしているテンプレートを削除します。脚注2

DELETE_PAGE

DELETE

PURGED

PAGE

--

COPY_ITEM

INSERT

PUBLISHED

ITEM

--

COPY_ITEM

INSERT

PUBLISHED

ITEM

--

DELETE_ITEM

DELETE

PURGED

ITEM

--

COPY_ITEM

INSERT

PUBLISHED

ITEM

脚注1 最初の2つの挿入はページ作成用です。次の削除は、テンプレートの添付時にページを削除するために実行されます。次の挿入はテンプレートに基づく新しいページ用です。次の2つのアイテム挿入は、テンプレートからのアイテム・レプリケーション用です。テンプレート上のアイテムおよびポートレットごとに挿入イベントがあります。

脚注2 削除イベントは、実際のテンプレートの削除用です。最初の2つの挿入は、テンプレートに基づくページ上のレプリケート・アイテムがコピーされるときです。テンプレート上のアイテムごとに挿入メッセージがあります。次の削除および挿入イベントは、テンプレートに基づくページ上の非レプリケート・アイテム用です。ページ上の非レプリケート・アイテムごとに削除および対応する挿入イベントがあります。

用語集

情報モード

ポートレット表示モードの1つ。ポートレットの著作権、バージョンおよび作成者に関する情報が表示されます。

アクセス制御リスト

「ACL」を参照してください。

ACL

アクセス制御リスト。オブジェクトに対する特定のアクセスを許可されたグループおよびユーザーのリスト。

アクション

CMEFのコンテキストでは、(Oracle Portalユーザー・インタフェース、WebDAV、PL/SQL APIなどを使用した)ポータルでイベントが発生した場合にアクションが起こります。ポータル・トリガーであるCMEFイベント内でのアクションにより、Oracle PortalではWWSBR_EVENT_Qキューに対してメッセージが書き込まれます。サブスクライバは、メッセージの消費およびメッセージの内容に対応するアクションの実行が可能。

アドイン

「拡張機能」を参照してください。

拡張検索

ユーザーが次のことを実行できるようにする検索エンジン。

- 検索文字列内にある任意の文字列またはすべての文字列が含まれるコンテンツを検索します。

- 選択したページ・グループ、またはすべてのページ・グループを検索します。

- 検索の範囲を、特定のページ、カテゴリ、パースペクティブ、アイテム・タイプまたは属性に制限します。

Oracle Textがインストールされて有効になっている場合は、すべてのテキスト属性、ドキュメントのコンテンツそのもの、URLが検索されます。Oracle Textがインストールされていない場合は、次のメタデータが検索されます。アイテム属性(表示名、説明、キーワード、作成者)、ページ属性(表示名、説明、キーワード)、カテゴリ/パースペクティブ属性(表示名、説明)。

Oracle Textがインストールされて有効になっている場合は、拡張検索を使用して、近接、同音語およびファジー検索も実行できます。

「検索ポートレット」も参照してください。「基本検索」および「カスタム検索」と対比してください。

API

Application Program Interface。アプリケーション側でポートレット、ページまたはページ・グループなどのポータル・オブジェクト上のサービスを起動するときに使用する一連の公開済のデータ構造と関数。Oracle PortalのAPIは、OTNの「Oracle Portal Developer Kit (PDK)」ページから入手可能なPDKを介して公開されます。

http://www.oracle.com/technology/products/ias/portal/pdk.html

アプリケーション

INTERNAL: 廃止された用語。ポートレット・ビルダーで構築されたポートレットのプロバイダの参照には使用しません。かわりに、データベース・プロバイダを使用します。

Application Program Interface

「API」を参照してください。

アプリケーション・サービス・プロバイダ

「ASP」を参照してください。

承認通知

コンテンツの承認が必要なユーザーがアイテムを作成または更新したことを示す通知ポートレット内のメッセージ。特定のページ・グループまたはページに関連した承認通知の受信者(承認者)は、承認プロセスで指定されます。承認者は、対象のアイテムを承認または却下することによって通知に応答します。

承認プロセス

公開前に承認が必要なコンテンツを確認するユーザー(またはグループ)を決定する1つ以上の手順。承認プロセス内の各手順には1人以上の承認者が必要です。承認者へのルーティングは、順次(一度に1人ずつ)または並行(一度に全員)して実行できます。各手順は、任意の1人のメンバーまたはすべてのメンバーによるレスポンス(承認または却下のいずれか)を必要とするように定義できます。1つの手順で必要な数のレスポンスを受信すると、プロセスは次の手順に進みます。アイテムが却下されるか、または最終手順に達してドキュメントが承認されると、プロセスは終了します。

承認者

公開前に承認が必要なコンテンツを確認するユーザーとして、グループ・メンバーシップを介して明示的または暗黙的にページ・グループまたはページの承認プロセスで指定されるユーザー。承認者は、このようなコンテンツの承認または却下を選択できます。

ASP

アプリケーション・サービス・プロバイダ。アプリケーションのリモート・ホスティングであり、アプリケーションの実行に必要なハードウェア、ソフトウェアおよびその他のリソースを管理および運用するサービス。

属性

アイテムまたはページに関する情報(またはメタデータ)を格納するポータル・オブジェクト。作成日、有効期限日または作成者などがあります。ページ・グループ管理者はカスタム属性を作成し、アイテム・タイプおよびページ・タイプの機能を拡張できます。たとえば、「表示名」はファイルの基本属性だが、そのファイルが機密であるかどうかを示すチェック・ボックスはカスタム属性です。カスタム属性は、検索可能な一意の識別子をアイテムに割り当てるために役立ちます。

認証されたユーザー

ポータルにログインしたユーザー。デフォルトでは、認証されたユーザーは、ページなどの特定のポータル・オブジェクトにアクセスし、そのユーザーに付与された権限に基づいて操作を実行できます。

パブリック・コンテンツにのみアクセスできる「パブリック・ユーザー」と対比してください。

認可

メッセージを送信したり、リクエストを行うためのセキュリティ制約の評価。認可では特定の基準(認証および制限)を使用して、リクエストを許可するかどうかを決定します。

権限を持ったユーザー

「認証されたユーザー」を参照してください。

バナー

「リージョン・バナー」を参照してください。「ナビゲーション・ページ」も参照してください。

基本属性

「属性」を参照してください。

基本アイテム・タイプ

「アイテム・タイプ」を参照してください。

基となるページ・タイプ

「ページ・タイプ」を参照してください。

基本検索

ユーザーが特定の検索文字列を含むコンテンツを検索できるようにする検索エンジン。

Oracle Textがインストールされて有効になっている場合は、すべてのテキスト属性、ドキュメントのコンテンツそのもの、URLが検索されます。Oracle Textがインストールされていない場合は、次のメタデータが検索されます。アイテム属性(表示名、説明、キーワード、作成者)、ページ属性(表示名、説明、キーワード)、カテゴリ/パースペクティブ属性(表示名、説明)。

「検索ポートレット」も参照してください。「拡張検索」および「カスタム検索」と対比してください。

基本検索ボックス・アイテム

他のユーザーが基本検索を実行できるように、ユーザーがページに追加できるナビゲーション・アイテム。この検索ボックスでは、すべてのページ・グループまたはページ・グループの特定サブセットの検索を開始できます。

バッチ・ジョブ

Oracle Portalのバッチ・ジョブ機能を使用して、ポートレット・ビルダーのポートレットをバックグラウンドで実行するプロセス。エンド・ユーザーは、ポートレットのパーソナライズ・フォームにあるオプションを選択して、ポートレットをバッチ・モードで実行できます。ポートレットが大量のデータに基づいている場合、ポートレットにデータの行が多数表示される場合、またはジョブの実行に長時間かかる可能性がある場合は、バッチ処理が役立ちます。

バインド変数

SQL文の変数。SQL文が正しく実行されるためには、有効な値または値のアドレスに置き換えられる必要があります。バインド変数(deptなど)の代表的な用途としては、ポートレットのパーソナライズ・フォームへのパラメータ入力フィールドの表示があります。入力フィールドで、エンド・ユーザーはポートレットに表示されるデータを選択できます。

ブックマーク

「お気に入り」を参照してください。

ブレッドクラム

「ページ・パス・アイテム」を参照してください。

「ビルダー」ページ

「「Portalビルダー」ページ」を参照してください。

一括ロード

「Zipファイル・アイテム」を参照してください。

キャッシュ

頻繁にアクセスされる情報(通常はWebページやOracle Portal内のポートレットなど)を簡単にアクセスできる場所に格納し、コンテンツが頻繁に生成されるのを回避するための操作。たとえば、Oracle Web Cacheは、動的に生成されたポートレットをメモリー内に格納し、指定のポートレットがリクエストされたときにPPEに提供します。この記憶域を使用すると、バックエンド・データベースや他のWebサイトへの接続が行われないため、リクエストの処理にかかる合計時間が短縮されます。

「有効期限ベースのキャッシュ」、「無効化ベースのキャッシュ」、「システム・レベルのキャッシュ」、「ユーザー・レベルのキャッシュ」および「有効化ベースのキャッシュ」も参照してください。

カレンダ

SQL問合せの結果をカレンダ形式で表示する、ポートレット・ビルダーを使用して作成されたポートレット。

コール・インタフェース

コール・インタフェースには、ポートレット・ビルダーのポートレットが最初に作成されたとき、または最後に編集されたときに選択された引数が表示されます。

カテゴリ

ページ・グループ内のページ、アイテムおよびポートレットをグループ化または分類するために使用する事前定義済の属性。カテゴリは、ユーザーがアイテムまたはページの用途を理解する際に役立ちます。たとえば、旅行に関するページ・グループには、地図、スナップ写真、ホテル・ガイドなどのカテゴリを設定できます。個々のアイテムまたはページに割り当てることができるカテゴリは1つのみです。

「パースペクティブ」も参照してください。

チャート

SQL問合せの結果を棒グラフ、円グラフまたは折れ線グラフなどのグラフ(チャート)として表示する、ポートレット・ビルダーを使用して作成されたポートレット。棒グラフは表またはビューの2つ以上の列に基づきます。1つの列がチャートの各バーを表し、もう1つの列がチャートの各バーのサイズを計算します。

チェックアウト/チェックイン

他のユーザーが同じアイテムを編集できないように、アイテムをチェックアウトしてロックするためのメカニズム。これにより、ユーザーが互いに変更を上書きできないようになります。ユーザーがアイテムの編集後、そのアイテムをチェックインしてリリースすると、再び他のユーザーがそのアイテムを編集できるようになります。

子オブジェクト

階層の一部であるオブジェクト。たとえば、サブページ、サブカテゴリおよびサブパースペクティブは、それぞれページ、カテゴリおよびパースペクティブの子オブジェクトです。

「マニフェスト」も参照してください。

子ページ

Oracleインスタント・ポータルで、トップ・レベル・ページの下に作成されるページ。子ページは、これらが属すトップ・レベル・ページの左側にあるナビゲーション領域に並んで表示されます。通常、トップ・レベル・ページの主要テーマの構成要素になっています。適切な権限がある場合、ナビゲーション領域にある子ページを追加、削除、再配置または編集できます。

CHTML

コンパクトHTML。小型端末用に設計されたHTML勧告のサブセット。

分類

ユーザーが検索中にコンテンツを簡単に特定できるように、カテゴリおよびパースペクティブを使用してページまたはアイテムのコンテンツが分類されます。

「カテゴリ」および「パースペクティブ」も参照してください。

CLOB

キャラクタ・ラージ・オブジェクト。ラージ・オブジェクト(LOB)データ型の1つで、データベースの文字セットに対応する文字データで構成された値を持ちます。Oracle Text検索エンジンにより、索引付けおよび検索が可能。

クラスタ

相互に関係があり、しばしば結合される表をディスク上の同じ領域に格納するために使用するデータベース・オブジェクト。

CMEF

コンテンツ管理イベント・フレームワーク。事前定義済ポータルのイベントに対しプログラム的なフックを追加することで、Oracle Portalのコンテンツ管理イベント機能を拡張可能にする機能。イベントはフレームワークにより、Oracle Streamsアドバンスト・キューイング(AQ)のキューにパブリッシュされます。これによって、サード・パーティによるイベントへのサブスクライブおよびAPIを使用したポータル機能の拡張が可能。CMEFをポートレットのイベント機能と混同しないこと。

CMEFイベント

ポータル内のアクションにより、対応するCMEFイベントがトリガーされます。開発者はCMEFイベントに応答するコードを記述可能。

コミュニティ

「Portalコミュニティ」を参照してください。

コンパクトHTML

「CHTML」を参照してください。

コンテンツ領域

Oracleインスタント・ポータルで、画面の右側にある、ページのアイテム(つまりコンテンツ)が表示される領域。

コンテンツ作成者

ページにアイテムを追加するための適切な権限を持つユーザー。適切なページ権限には、「コンテンツの管理」および「承認付きアイテムの管理」が含まれます。適切なアイテム権限には、「管理」、「編集」および「表示」が含まれます。

コンテンツ・アイテム・タイプ

ページにアップロードされているアイテムの実際のコンテンツ(ドキュメント、テキスト、イメージなど)を分類するための手段。

次の組込みコンテンツ・アイテム・タイプがあります。

- ファイル・アイテムおよびシンプル・ファイル・アイテム

- テキスト・アイテムおよびシンプル・テキスト・アイテム

- URLアイテムおよびシンプルURLアイテム

- イメージ・アイテムおよびシンプル・イメージ・アイテム

- イメージ・マップ・アイテム

- PL/SQLアイテムおよびシンプルPL/SQLアイテム

- ページ・リンク・アイテムおよびシンプル・ページ・リンク・アイテム

- Zipファイル・アイテム

「アイテム・タイプ」も参照してください。「ナビゲーション・アイテム・タイプ」と対比してください。

コンテンツ管理イベント・フレームワーク

「CMEF」を参照してください。

コンテンツ・リポジトリ

特定のポータル・インスタンスに関連付けられたコンテンツとメタデータが含まれるOracle Metadata Repository内のOracle Portalスキーマ。

「コントリビュート」権限

Oracleインスタント・ポータルのページ上の権限レベルで、ユーザーはページ上でアイテムを追加、編集、移動または削除できます。「コントリビュート」権限を持つユーザーは、すべての「表示」権限も持ちます。

CSS

カスケード・スタイル・シート。フォント、色および間隔調整などのスタイルをWebドキュメントに追加するための簡単なメカニズム。

現行バージョン

ページに表示されているアイテムのバージョン。現行バージョンは必ずしもアイテムの最新バージョンではありません。

「バージョニング」も参照してください。

カスタム属性

「属性」を参照してください。

カスタム・アイテム・タイプ

「アイテム・タイプ」を参照してください。

カスタム・ページ・タイプ

「ページ・タイプ」を参照してください。

カスタム・プロバイダ

顧客固有のコンテンツまたはアプリケーションにアクセスするポートレットを作成および管理できるようにするプロバイダのタイプ。Oracle Portalでは、宣言的またはプログラム的にカスタム・ポートレットを作成できます。

カスタム検索

Oracle Metadata RepositoryのOracle Portalスキーマに格納された情報に対し、ユーザーが様々な検索を定義できるようにする検索エンジン。カスタム検索ポートレットのデフォルト値を編集すると、特定の検索要件を満たす一意の検索フォームおよび検索結果ページを定義することや、事前定義済の検索基準に基づいて検索を実行して結果を戻すポートレットを構成することが可能。

Oracle Textがインストールされて有効になっている場合は、すべてのテキスト属性、ドキュメントのコンテンツそのもの、URLが検索されます。Oracle Textがインストールされていない場合は、次のメタデータが検索されます。アイテム属性(表示名、説明、キーワード、作成者)、ページ属性(表示名、説明、キーワード)、カテゴリ/パースペクティブ属性(表示名、説明)。

「検索ポートレット」も参照してください。「拡張検索」および「基本検索」と対比してください。

DAD

データベース・アクセス記述子。HTTPリクエストを実行するためにアプリケーションがOracleデータベースに接続する方法を指定する一連の値。DADに含まれる情報には、ユーザー名(スキーマおよび権限も指定する)、パスワード、接続文字列、エラー・ログ・ファイル、標準エラー・メッセージ、グローバリゼーション・サポート・パラメータ(言語、日付書式、日付言語、通貨など)があります。

データベース・アクセス記述子

「DAD」を参照してください。

データベース管理者

「DBA」を参照してください。

データベース・オブジェクト

「オブジェクト」を参照してください。

データベース・プロバイダ

PL/SQLストアド・プロシージャとして作成されたプロバイダのタイプ。データベースに属するポートレットを作成するために使用されます。データベース・プロバイダの例として、フォーム、レポートおよびチャートのポートレットを提供するためにポートレット・ビルダーを使用して構築されたプロバイダがあります。

「Webプロバイダ」と対比してください。

データ・ポートレット

データをスプレッドシート形式で表示する、ポートレット・ビルダーを使用して作成されたポートレット。

DAV

「WebDAV」を参照してください。

DBA

データベース管理者。DBAグループに所属するユーザー。デフォルトでは、DBAグループのメンバーはすべてのOracle Portal製品ページにアクセスでき、すべてのページ、ページ・グループ、データベース・プロバイダおよび管理に対する管理権限を持っています。

デフォルト言語

ページ・グループが最初に作成されたときの言語。ページ・グループの作成後、ページ・グループに翻訳を追加すると、ユーザーがコンテンツを別の言語で追加できます。

デフォルト・サブスクライバ

Oracle Portalと一緒にインストールされる基本サブスクライバ。

非武装地帯

「DMZ」を参照してください。

デキュー

Oracle Streams AQのキューからCMEFメッセージを取得する操作。

「エンキュー」と対比してください。

開発者

他のユーザーが自分のページに含めるためのポートレットを構築するユーザー。Oracle Portalの機能を拡張するためにAPIを重点的に利用し、アドバイスまたはヒントを求めてPortal Knowledge Exchangeまたはフォーラムを頻繁に参照します。

Developer Services

「Portal Developer Services」を参照してください。

DIP

Directory Integration Platform。様々なディレクトリおよびディレクトリ対応アプリケーションを同期化するために、Oracle Internet Directoryによって提供されるプロビジョニング・プラットフォーム。

ダイレクト・アクセスURL

廃止された用語。「パス・ベースのURL」を参照してください。

ディレクトリ情報ツリー

「DIT」を参照してください。

ディレクトリ統合プラットフォーム

「DIP」を参照してください。

表示名

Oracle Portal全体で使用されるオブジェクトの外部名。ナビゲータ、ページおよびページ・エディタなどで使用されます。オブジェクトがポートレットとして公開されると、表示名はポートレット・リポジトリでポートレットのタイトルとして使用されます。

識別名

「DN」を参照してください。

DIT

ディレクトリ情報ツリー。エントリのDNで構成されるOracle Internet Directory内のツリー形式の階層構造。

DN

識別名。Oracle Internet Directory内のディレクトリ・エントリの一意名。親エントリの個々の名前がすべて、下からルートに向かって順に結合された形で構成されています。したがって、DNによってディレクトリの階層内のエントリの位置が正確にわかります。この階層は、ディレクトリ情報ツリー(DIT)によって表されます。

DMZ

非武装地帯。企業のプライベート・ネットワークと外部のパブリック・ネットワークとの間に中立地帯として挿入されたコンピュータ・ホストまたは小規模ネットワーク。これによって、企業データが格納されているサーバーに外部のユーザーが直接アクセスするのを防ぎます。DMZはファイアウォールにおけるより安全な手法(オプション)であり、プロキシ・サーバーとしても効果的に動作します。(この用語は、1950年代初頭に、国連警察軍によって北朝鮮と韓国との間に設定された地理的な緩衝地帯に由来。)

文書管理

「チェックアウト/チェックイン」を参照してください。

下書きアイテム

ページに追加されているが、承認を求めて送信されていないアイテム。表示モードでは、下書きアイテムは作成者にのみ表示されます。下書きアイテムを承認向けに送付する準備が整うと、作成者は下書きアイテムを送信できます。この時点で、承認プロセスがトリガーされます。下書きアイテムをページに追加できるのは、ページ・グループに対して承認が有効である場合のみです。

永続URL

アイテムを一意に識別するためにアイテムのグローバル一意識別子(GUID)を使用するURL。アイテムのGUIDは変わらないため、アイテムの編集、名前の変更、移動、別のポータル・インスタンスへのインポートが行われても永続URLは有効です。

「パス・ベースのURL」と対比してください。

動的ページ

ページに動的コンテンツを表示する、ポートレット・ビルダーを使用して作成されたポートレット。動的ページ・ウィザードを使用すると、ページを作成するためのHTMLコード内に1つ以上のPL/SQLブロックを指定できます。このコードはエンド・ユーザーがページをリクエストするたびに実行されます。

動的URL

問合せ文字列(1つ以上のパラメータおよび?や&)を含むURL。

「パス・ベースのURL」と対比してください。

Edge Side Includes

「ESI」を参照してください。

デフォルト編集モード

オプションのポートレット表示モード。管理者がすべてのユーザーに対するポートレットのデフォルトを設定できるようにします。

「編集モード」と対比してください。

編集モード

1. ページ編集: 編集モードでは、適切な権限を持つ認証されたユーザーが、ページ・プロパティの設定、そのページに対するポートレットおよびアイテムの追加、変更または削除を実行できます。編集モードに切り替えるには、ページ上の「編集」リンクをクリックします。編集モードには、グラフィカル・ビュー、レイアウト・ビューおよびリスト・ビューの3つのビューがあります。
「モバイル・プレビュー・モード」および「保留中のアイテム・プレビュー・モード」も参照してください。

2. ポートレット: ユーザーごと、インスタンスごとにポートレットのパーソナライズを可能にする、オプションのポートレット表示モード。
「デフォルト編集モード」と対比してください。

3. Oracleインスタント・ポータル: 表示モードと反対のモード。編集モードのハンドル・バーをクリックすると、編集ツールバー、「アイテムの追加」および「ページの追加」ボタンが表示されるため、このページは編集モードと呼ばれます。この状態でのみ、このページに対して処理を行うことができます。

編集モードのハンドル・バー

Oracleインスタント・ポータルで、編集ツールバーを表示するためにクリックするグレーのアイコン。編集ツールバーが表示されている場合、このページは編集モードです。このページの表示権限を持つユーザーには、編集モードのハンドル・バーは表示されません。

電子メール・アイテム

Oracleインスタント・ポータルで、黄色い封筒(および必要に応じてページ上のタイトル)によって示されるアイテム。ユーザーが封筒をクリックすると、電子メール・エディタが起動され、空白の電子メールが表示されます。この電子メールには、アイテムの作成者によって指定されたアドレスが事前に移入されています。

エンキュー

Oracle Streams AQのキューにメッセージをパブリッシュする操作。

「デキュー」と対比してください。

Oracle Enterprise Manager

Oracle Enterprise Managerは、Oracle Fusion Middlewareのコンポーネントで、管理者がOracle Fusion Middlewareのサービスを一元的に管理できるようにします。たとえば、管理者はOracle Enterprise Managerを使用して、HTTPサービス、PPE、Oracleデータベース、プロバイダおよびOracle Ultra Searchなどの、Oracle Portalインスタンスを構成するサービスを監視できます。

企業ポータル

関連する企業情報源へのパーソナライズされたアクセスを提供する共通の総合的な入り口。企業ポータルでは、パブリックなインターネットで利用できるリソースのビューをサイト訪問者がパーソナライズできます。

ESI

Edge Side Includes。HTMLフラグメントによりページの部分的なキャッシュ(PPC)を可能にするマークアップ言語。

イベント

ポータル内の操作により、対応するイベントがトリガーされます。ページ設計者は、イベントの発生時に実行される処理を指定できます。たとえば、特定のイベントが発生したときに、現在のページをリロードし、この新しくロードされたページにパラメータを渡すように指定できます。

イベント・サーブレット

イベント対応ポートレットへのアクセス時に動的なページ・ナビゲーションを可能にするためのOracle Portalの機能を実装します。PPEと同じコンテナ内で実行されます。

拡張可能リッチ・テキスト・アイテム

Oracleインスタント・ポータルで、ページ上のスペースを確保しておくために使用されるテキスト・アイテム・タイプ。表示モードでは、拡張可能リッチ・テキスト・アイテムは白い封筒、タイトルおよびサマリーによって示されます。ユーザーが封筒をクリックすると、アイテムが開き、このアイテムに関連付けられているテキストが表示されます。アイテムの全テキストが常に表示される「リッチ・テキスト・アイテム」と対比してください。拡張可能リッチ・テキスト・アイテムとリッチ・テキスト・アイテムには両方とも、イメージ、ハイパーリンク、表および任意の有効なHTMLコードを記載できます。

有効期限

アイテムの期限が切れるまでの日数、または期限が切れる正確な日付。アイテムの期限が切れた後は、そのアイテムまたはページの所有者とページ・グループ管理者のみが編集モードでそのアイテムを表示できます。期限切れアイテムは、すべての期限切れアイテムのシステム・パージ時にデータベースから削除されます。

有効期限ベースのキャッシュ

保持期間を使用して、アイテムがキャッシュ内で有効である期間を指定するキャッシュ方法。この期間が経過すると、更新が必要になります。保持期間を経過してからアイテムに対するリクエストが発生したとき、そのアイテムはキャッシュ内で更新されます。

Oracle Web Cacheは、有効期限ベースのキャッシュと無効化ベースのキャッシュの両方を使用します。Oracle Web Cache内に保存されたデータは、無効化されるか期限切れになるまで、有効であるとみなされます。たとえば、完全に組み立てられたページに有効期限ベースのキャッシュが指定されている場合、ページ・コンテンツは、指定された保持期間内は、再生成が必要になるまではキャッシュ内で有効であり続けます。

「無効化ベースのキャッシュ」および「有効化ベースのキャッシュ」も参照してください。

失効通知

ユーザーまたはグループに自動的に送信され、ページ上のアイテムの有効期限が近いことを示すメッセージ。この通知は、ページ・グループ管理者によって設定されます。

明示オブジェクト

ナビゲータまたは一括操作からエクスポートの対象として明示的に選択されたオブジェクト。

「マニフェスト」および「参照しているオブジェクト」も参照してください。

エクスポート

単一のOracle Portalインスタンスのページ・グループ、ページ、ポートレットなどのコンテンツを含む一連のファイル(トランスポート・セット)を作成する方法。このファイル・セットは、別のOracle Fusion Middlewareインスタンスにインポートできます。

eXtensible Markup Language

「XML」を参照してください。

拡張機能

Oracle JDeveloperの機能を拡張するJavaクラス。たとえば、PDKには、Oracle JDeveloperを使用したポートレットの開発を支援する拡張機能が用意されています。

外部アプリケーション

通常は「外部アプリケーション」ポートレットから起動される、Oracle Portal外部のアプリケーション。各外部アプリケーションはポータル管理者よって定義されるため、ユーザーはユーザー名とパスワード情報を指定するのみです。入力したユーザー名とパスワードは、Oracle Application Server Single Sign-Onでその後の認証要求時に使用されます。

外部オブジェクト

明示オブジェクトの外部依存物であるオブジェクト。外部オブジェクトによって、明示オブジェクトはターゲットのポータル上で機能するようになります。

「マニフェスト」も参照してください。

お気に入り

頻繁に参照されるURLに簡単にアクセスできるようにする「お気に入り」ポートレット内のハイパーリンク。URLは会社のファイアウォールの内側でも外側でもかまいません。認証されたユーザーは、自分が頻繁にアクセスするURLのセットで「お気に入り」ポートレットをパーソナライズできます。

「お気に入りコンテンツ」領域

Oracleインスタント・ポータルのホーム・ページの領域で、ユーザーのお気に入りコンテンツが表示されます。この領域のアイテムを選択するには、アイテムの横にある家に似たアイコンをクリックします。「お気に入りコンテンツ」領域はユーザーごとに異なります。

お気に入りグループ

通常は論理的に関連のあるお気に入り(およびお気に入りグループ)の集合。

連携されたPortalアダプタ

「FPA」を参照してください。

ファイル・アイテム

ユーザーがページに追加できるアイテムのタイプ。ユーザーがファイル・アイテムをページに追加すると、ファイルがOracle Metadata RepositoryのOracle Portalスキーマにアップロードされ、ハイパーリンクとしてページに表示されます。ユーザーが表示名のリンクをクリックすると、ファイル・タイプとブラウザの構成に応じて、そのファイルがユーザーのコンピュータにダウンロードされるか、またはユーザーのWebブラウザに表示されます。

Oracleインスタント・ポータルで、ファイル・アイテムは、上部に赤いアスタリスクがある長方形(および必要に応じてタイトルとサマリー)によって示されます。ユーザーがアイコンをクリックすると、アイテムに関連付けられたファイルが新しいブラウザ・ウィンドウに表示されます。

ファイアウォール

一連のコンピュータやネットワークを外部の攻撃から保護するための媒介として機能するシステム(ハードウェアまたはソフトウェア)。外部からローカル・エリア・ネットワーク上のコンピュータへのアクセスを規制し、ローカル・エリア・ネットワーク内から外部コンピュータへのアクセスを規制します。ファイアウォールには、リクエストを転送してあたかもファイアウォール・マシンから送信されたかのように見せるプロキシ・サーバーとして機能する方法、あるいはリクエストを検査して疑わしいものを排除する方法があります。

フォーム

トランザクションにおいて1つ以上のデータベース表、ビューまたはプロシージャへのインタフェースとなる、ポートレット・ビルダーを使用して作成されたポートレット。たとえば、ポートレット・ビルダーを使用して、人事データベースに新入社員情報を入力するためのフォームを作成できます。

「マスター・ディテール・フォーム」も参照してください。

FPA

連携されたPortalアダプタ。JavaおよびPL/SQLで書かれたポータル・インスタンス内のモジュールであり、Webプロバイダ宛のSOAPメッセージを受信し、そのSOAPを解析し、メッセージをPL/SQLプロシージャ・コールとしてデータベース・プロバイダに送信します。つまり、連携されたPortalアダプタによってデータベース・プロバイダがWebプロバイダとまったく同じように動作するようになり、ユーザーは複数のデータベース・サーバーにデータベース・プロバイダを配布できるようになります。すべてのリモート・プロバイダがWebプロバイダとして扱われ、ユーザーからはその実装(データベースまたはWeb)はわかりません。最も一般的な使用方法は、1つのポータル・インスタンスが所有するデータベース・プロバイダ(ページ・グループも含む)を他のポータル・インスタンス間で共有することです。

フレーム・ドライバ

2つのフレームに分割されたWebページで構成される、ポートレット・ビルダーを使用して作成されたポートレット。ドライビング・フレームには、2番目の(ターゲット)フレームのコンテンツを決定するSQL問合せが含まれます。

全画面モード

ポートレット表示モードのオプションの1つ。他のポートレットとページを共有しているときに、ポートレットにより多くのコンテンツが表示されるようにします。

ファンクション

指定された一連の操作を実行して値を戻すPL/SQLサブプログラム。通常、ファンクションは、大規模なアプリケーションの範囲内で特定のタスクを実行するために作成された小さいコードのブロック。

エンド・ユーザーは、ページ内でPL/SQLアイテムまたはカスタム・アイテムのタイトルをクリックしてファンクションを実行します。

要旨

題材全体を最もよく表現するいくつかの段落からなる、Oracle Textのサマリー。このようなサマリーを使用すると、テキストの主要な内容に目を通したり、テキストの題材で興味のあるものにアクセスできます。

グローバル権限

あるタイプのオブジェクトすべてに対する一定レベルのアクセス権をユーザーまたはグループに付与する権限。たとえば、Web設計者グループにすべてのスタイルに対する管理権限を付与できます。

ユーザー/ロール

別のユーザーによってオブジェクトに対する権限を付与されるユーザー。

グラフィカル・ビュー

ページ上の実際の位置にページ・コンテンツをレンダリングするページ編集ビュー。グラフィカル・ビューを使用すると、編集時に最終的なページと同じようにページとアイテムを表示できます。

「レイアウト・ビュー」および「リスト・ビュー」と対比してください。

グループ

たとえば、人事や会計などのように、通常、共通のニーズまたは利害を共有するOracle Portalユーザーの集合。グループにより、オブジェクト(ページやポートレットなど)に対するアクセス権を複数のユーザーに同時に付与することが容易になります。また、グループを使用して複数のユーザー・ロールを実装できます。これを行うには、ロール関連の権限をグループに割り当て、ユーザーをこのロールに追加します。Oracle Internet Directoryよって、Oracle Portalグループのメンバーシップが追跡されます。

グループの所有者

グループに対してメンバーの追加や削除を行う権限、またはグループ自体を削除する権限を持ったユーザー。グループには複数の所有者を設定できます。

HA

高可用性。シングル・ポイント障害を排除してサービスの停止をゼロまたは最小限にとどめることにより、ビジネスの目的を達成するために必要な可用性をアプリケーションに持たせることができる、ソリューション一式が持つ性能。

Handheld Device Markup Language

「HDML」を参照してください。

HDML

Handheld Device Markup Language。画面の小さい携帯端末向けに、ハイパーテキストに似たマークアップ・コンテンツおよびアプリケーションを定義するための単純な言語。

ヘルプ・モード

ポートレット表示モードのオプションの1つ。ポートレットの機能の使用方法に関する情報を表示します。

階層

自己参照型の表またはビューからのデータを表示する、ポートレット・ビルダーを使用して作成されたポートレット。表内では少なくとも2つの列が再帰的な関係を共有している必要があります。階層には最大3レベルを含めることができ、組織チャート内の従業員などのデータや、Webサイト内のメニュー間の階層関係を表示できます。

ホーム・ページ

Oracle Portal内で定義されるページで、通常はユーザーがログインしたとき、またはスマート・リンク・アイテムの「ホーム」をクリックしたときに表示されます。パブリック・ユーザーの場合、ポータル管理者がこのページを選択します。認証されたユーザーは自分自身で選択できます。ポータル管理者がモバイル・ページ設計を有効にすると、ポータルがモバイル機器からアクセスされたときに表示するモバイル用ホーム・ページを別に指定できます。

ホスティング・サイト

「ストライプ」を参照してください。

HTML

Hyper Text Markup Language。ハイパーテキスト・ドキュメントをエンコードするための書式。テキスト、グラフィックス、プログラムへの参照および別のハイパーテキスト・ドキュメントを含めることができます。

HTMLコンテンツ・レイアウト

アイテム・レベルの置換タグを使用して個々のリージョンの書式設定スキームを定義するHTMLテンプレートのタイプ。HTMLコンテンツ・レイアウトは、リージョンのアイテムまたはポートレットごとに繰り返し使用されます。

「HTMLページ・スキン」と対比してください。

HTMLページ・スキン

ページ・レベルの置換タグを使用してページ・コンテンツを取り囲んでいる領域の外観を制御するHTMLテンプレートのタイプ。HTMLページ・スキンはページまたはPortalテンプレートに適用できます。

「HTMLコンテンツ・レイアウト」と対比してください。

HTMLテンプレート

ページまたはリージョンのコンテンツを折り返す、独自のHTMLコードを使用して構築されたポータル・オブジェクト。HTMLテンプレートは、Oracle Portalウィザードまたは任意のサード・パーティのHTMLエディタを使用して作成できます。

「HTMLコンテンツ・レイアウト」および「HTMLページ・スキン」も参照してください。「Portalテンプレート」と対比してください。

HTTP

Hyper Text Transfer Protocol。メッセージの書式設定と送信を行い、各種のコマンドに応じてWebサーバーおよびブラウザが実行する必要のあるアクションを決定するために、Webで使用される基本的な方式(プロトコル)。HTTPは、通常はOracle WebLogic Serverとクライアントとの間で使用されるプロトコルです。

Hyper Text Markup Language

「HTML」を参照してください。

Hyper Text Transfer Protocol

「HTTP」を参照してください。

IDE

統合開発環境。エディタ、デバッガ、スクリーン・ペインタ、オブジェクト・ブラウザなどを含むビジュアル・ツール。

ILS

アイテム・レベル・セキュリティ。特定のページ上のアイテムへのアクセスを詳細に制御するメカニズム。ILSによって、アイテム管理者は、ユーザーおよびグループに、ページ・レベルの権限に優先する明示的なアイテムのアクセス権限を付与できるようになります。

イメージ・アイテム

ユーザーがページに追加できるアイテムのタイプ。JPEG、GIFまたはPNG形式のイメージを追加できます。

Oracleインスタント・ポータルで、リッチ・テキスト・アイテムまたは拡張可能リッチ・テキスト・アイテムの一部として追加されるイメージと異なり、イメージ・アイテムは各ページ専用として設計されています。イメージ・アイテムは「アイテムの追加」アイコンで追加され、テキスト・アイテムの一部にするイメージは「イメージの挿入」ウィンドウから追加されます。

イメージ・マップ・アイテム

ユーザーがページに追加できるアイテムのタイプ。イメージ・マップは、クリックすると他のURLにリンクするホットスポットが付いた単一のイメージ。たとえば、各大陸がその大陸に関する詳細情報へのハイパーリンクとなっている世界地図のイメージ・マップを作成できます。

インポート

コンテンツとオブジェクト(ページ・グループ、ページおよびポートレットなど)をOracle Portalインスタンスにトランスポートする方法。たとえば、あるOracle Portalインスタンスのページ、関連付けられたスタイル、およびそのコンテンツを別のインスタンスにインポートできます。

索引

表に関連付けられたオプションの体系。表の行を迅速に検索し、(オプションで)個々の行が一意であることを保証するために使用されます。

インプレース編集

Oracleインスタント・ポータルで、アイテムまたはページをその場で追加する機能。これらのオブジェクトを余所で作成してからページまたはポータルに追加するのとは対照的。

統合開発環境

「IDE」を参照してください。

内部イメージ名

ポータルにアップロードされたイメージを識別するために使用する名前。アップロードされたイメージをポータル内で再使用するには、その内部名を参照します。

内部プロバイダ

ページ・グループ・オブジェクト(ページ、ナビゲーション・ページなど)をOracle Portalのインスタンス内で使用できるようにするプロバイダのタイプ。

無効化ベースのキャッシュ

アイテムを明示的に無効化するまでキャッシュ内に存続させるキャッシュ方法。キャッシュ内のアイテムの無効化が必要になるのは、たとえば、ユーザーがアイテムを更新した場合です。無効化されたアイテムに対するリクエストが次に発生したときに、そのアイテムはキャッシュ内で更新されます。

Oracle Web Cacheは、有効期限ベースのキャッシュと無効化ベースのキャッシュの両方を使用します。Oracle Web Cache内に保存されたデータは、無効化されるか期限切れになるまで、有効であるとみなされます。Oracle Web Cache内にキャッシュされた情報が不正確になったときは、無効化する必要があります。たとえば、Oracle Web Cache内に保存されたページ・メタデータは、ページ設計者がページの構造を変更したとき、またはユーザーの権限が変わったときに無効化されます。同様に、ポートレット・インスタンスはエンド・ユーザーによってパーソナライズされたときは常に無効化されます。

「有効期限ベースのキャッシュ」および「有効化ベースのキャッシュ」も参照してください。

アイテム

1. ページ上のアイテム・リージョンにあるコンテンツの個々の要素(テキスト、ハイパーリンク、イメージなど)。適切な権限レベルを持つユーザーが、アイテムをページに追加できます。アイテムのコンテンツとメタデータは、Oracle Metadata RepositoryのOracle Portalスキーマ内に格納されます。アイテムは、アイテム・リージョンに定義されたレイアウト、スタイルおよび属性表示に従って、ページ上にレンダリングされます。
「アイテム・タイプ」も参照してください。

2. Oracleインスタント・ポータルでは、コンテンツをページに追加する方法。使用可能なアイテム・タイプには、リッチ・テキスト・アイテム、拡張可能リッチ・テキスト・アイテム、ファイル・アイテム、URLアイテム、電子メール・アイテムおよびイメージ・アイテムがあります。

アイテムID

アイテムのコンテンツへのローカルなデータベース参照ID。アイテムIDの値は、アイテムをPL/SQLプロシージャに渡すためにカスタム・アイテム・タイプ内で使用されます。ファンクションはアイテムIDを使用してアイテムのコンテンツにアクセスします。

アイテム・レベル・セキュリティ

「ILS」を参照してください。

アイテム・メタデータ

アイテムの属性または格納されている情報。

アイテム・プレースホルダ・アイテム

ユーザーがページに追加できるアイテムのタイプ。アイテム・プレースホルダは、アイテムのPortalテンプレートを使用するアイテムのコンテンツが表示される場所をテンプレート・コンテンツのその他の部分からの相対位置で示します。

アイテム・タイプ

アイテムのコンテンツとアイテムについて格納される属性(メタデータ)を定義するオブジェクト。Oracle Portalに含まれる基本のアイテム・タイプは、コンテンツ・アイテム・タイプとナビゲーション・アイテム・タイプに分類されます。

カスタム・アイテム・タイプは、基本のアイテム・タイプに用意されている機能を拡張し、アイテムに関する追加属性情報を格納するために、ページ・グループ管理者によって作成されるアイテム・タイプ。

アイテムのバージョニング

「バージョニング」を参照してください。

J2EE

Java 2 Platform Enterprise Edition。アプリケーション開発者が複数層からなるサーバー中心の企業レベル・アプリケーションを開発、デプロイおよび管理するためのプラットフォーム。J2EEプラットフォームは、複数層からなる分散アプリケーション・モデル、統合されたXMLベースのデータ交換、統合セキュリティ・モデル、および柔軟なトランザクション制御を提供します。独自のJ2EEポートレットを作成して、それをWebプロバイダを通じて公開できます。

「Oracle WebLogic Server」も参照してください。

J2SE

Java 2 Platform Standard Edition。アプリケーション開発者がJavaのアプレットおよびアプリケーションを、パーソナル・コンピュータやワークステーションなどのデスクトップ・クライアント・プラットフォーム上で開発、デプロイおよび管理するためのプラットフォーム。J2SEはAPI標準を定義するのみでなく、エンタープライズ・アプリケーションのデプロイも指定するため、アプリケーション・サーバーの管理者は、J2SEサーバーの機種に関係なく、アプリケーションをデプロイできます。

Java 2 Platform Enterprise Edition

「J2EE」を参照してください。

Java 2 Platform Standard Edition

「J2SE」を参照してください。

JavaScript

Netscape社が開発したスクリプト言語。静的なHTMLに動的な動作を導入するポートレットを生成できます。ポートレット・ビルダーでは、JavaScriptを使用して、フォームおよびパーソナライズ・フォーム内の入力フィールドを検証するルーチンを作成できます。さらに、フォーム上の入力フィールドとボタンに対応するJavaScriptイベント・ハンドラを作成することもできます。

Java Specification Request

「JSR 168」を参照してください。

JavaServer Pages

「JSP」を参照してください。

JSP

JavaServer Pages。Webページに対して簡単なプログラムによるインタフェースを提供するサーブレットの拡張機能。JSPは、専用のタグとWebやアプリケーション・サーバー上で実行される埋込みJavaコードが含まれたHTMLページです。HTMLページに動的機能を与えます。それらは最初にリクエストされたときに実際にサーブレットにコンパイルされ、サーブレット・コンテナ内で稼働します。

「JSPタグ」も参照してください。

JSR 168

Java Specification Request (JSR) 168。Javaを使用して標準ベースのポートレットを構築するための一連のAPIを定義します。この仕様に準拠して構築されたポートレットは、ポータルにローカルにレンダリングするか、またはWSRPコンテナにデプロイしてリモートでレンダリングできます。詳細は、http://jcp.org/en/jsr/detail?id=168を参照してください。

JSPタグ

JSPに埋め込んでJavaコードを囲むためのタグ。JSPタグでは<jsp:構文が使用され、JSP内のアクション要素はXML要素と同様にbeginタグとendタグで囲まれます。

キーワード

ユーザーが検索中に簡単にページまたはアイテムを発見できるように、ページまたはアイテムに関する追加情報を提供するための属性。

レイアウト・ビュー

ページ上のリージョンを追加、配置および削除できるようにするページ編集ビュー。さらに、このビュー内でコンテンツの非表示、表示、削除または移動を行うことができます。

「グラフィカル・ビュー」および「リスト・ビュー」と対比してください。

LBR

ロード・バランス・ルーター。Webリクエストを多数のサーバーに分散させる非常に高速なネットワーク・デバイス。ポータル・ユーザーに単一の公開アドレスを提供し、ユーザーが各リクエストを特定の中間層サーバーに送信せずに済むようにします。

LDAP

Lightweight Directory Access Protocol。ユーザーおよびグループのプロファイル情報を表し、これらにアクセスするための標準。

レベル

モバイル・ページに構造を提供するため、およびモバイル機器の小型画面に表示されるコンテンツの量を制限するための方法として使用されるオブジェクト。ユーザーは、モバイル・ページのレベルをドリルダウンして、詳細なコンテンツを表示します。

ライブラリ

1つ以上のPL/SQLまたはJavaプログラム・ユニットの集合。ライブラリは、複数のアプリケーションで同時に参照できます。

Lightweight Directory Access Protocol

「LDAP」を参照してください。

リンク・モード

ポートレット表示モードのオプションの1つ。携帯電話などのモバイル機器上にポートレットがレンダリングされるようにします。

リスト・ビュー

すべてのページ・コンテンツのリストが表示され、複数のオブジェクトに対して操作(削除、移動、コピーなど)を実行できるオプションが用意されたページ編集ビュー。

「グラフィカル・ビュー」および「レイアウト・ビュー」と対比してください。

オブジェクトのリスト・アイテム

オブジェクト(ページやパースペクティブなど)をドロップダウン・リストまたはリンク(関連イメージを付けて、または付けずに)としてリストするためにユーザーがページに追加できるナビゲーション・アイテムのタイプ。

値リスト

「LOV」を参照してください。

ロード・バランス・ルーター

「LBR」を参照してください。

ローカル・プロバイダ・グループ

Oracle Portalのインスタンス内で定義されたプロバイダの集合。プロバイダ・グループを使用すると、Oracle Portalのあるインスタンス内に定義または登録されたプロバイダを別のOracle Portalインスタンスと簡単に共有できるようになります。

「プロバイダ・グループ」も参照してください。「リモート・プロバイダ・グループ」と対比してください。

ロック

1. 編集中のポートレット・ビルダー・ポートレットに自動的に適用される設定。この設定によって、他のユーザーはそのポートレットを編集できなくなります。

2. WebDAVでは、他のユーザーがファイルを編集できないようにする操作。WebDAVクライアント内でファイルをロックすると、ポータル内の対応するアイテムがチェックアウトされます。

ログイン/ログアウト・リンク・アイテム

ユーザーがページに追加できるナビゲーション・アイテムのタイプ。他のユーザーがポータルにログインまたはポータルからログアウトできるようにします。

LOV

値リスト。開発者がフォーム内の入力フィールドに選択可能な値を追加できる、ポートレット・ビルダーを使用して作成されたポートレット同じ値リストを、コンボ・ボックス、ラジオ・ボタン、チェック・ボックスなどの様々な形式で表示できます。

「管理」権限

Oracleインスタント・ポータルのページ上の権限レベルで、ユーザーはトップ・レベル・ページとそのすべての子ページを編集、移動または削除できます。ポータルのホーム・ページの「管理」権限を持つユーザーは、そのポータルの管理者とみなされます。「管理」権限を持つユーザーは、すべての「コントリビュート」および「表示」権限も持ちます。

マニフェスト

トランスポート・セット内のオブジェクトおよびその依存物のリスト。また、インポート・モードの詳細な制御を提供します。

マスター・ディテール・フォーム

単一のHTMLページ内に、マスター表の行と複数のディテール行を表示する、ポートレット・ビルダーを使用して作成されたポートレット。マスター行の値によって、問合せ、更新、挿入および削除用に表示されるディテール行が決まります。

「フォーム」も参照してください。

マスター・アイテムID

アイテムの全バージョンに共通である、アイテムの識別子。

メニュー

エンド・ユーザーがクリックして他のメニュー、他のポートレット・ビルダー・ポートレットまたはURLに移動できるオプションが含まれたWebページを表示する、ポートレット・ビルダーを使用して作成されたポートレット。

メッセージ・ペイロード

イベント、イベント・タイプ(INSERT、UPDATEまたはDELETE)およびイベント状態をトリガーするポータル・アクションなどのCMEFイベントの詳細を提供します。

メタデータ

データを記述するデータ。たとえば、アイテム属性には、表示名、説明および作成者などのアイテム・メタデータが格納されます。

中間層

Oracle Fusion Middlewareアーキテクチャの一部分。HTTPユーザー・リクエストを適切なPortalデータベースまたはプロバイダに転送することによって処理し、Portalページを組み立て、Portalコンテンツのキャッシュを管理します。

MIMEタイプ

Multipurpose Internet Mail Extensionタイプ。メッセージのコンテンツを記述するためにインターネット上で使用されるメッセージの書式。MIMEは、配信されるコンテンツのタイプを記述するためにHTTPサーバーによって使用されます。

モバイル・ページ

ページ設計者が携帯電話などのモバイル機器専用のページを作成できるようにするページのタイプ。

モバイル・プレビュー・モード

モバイル機器上でページがどのように表示されるかをプレビュー可能なプレビュー・モード。

モバイルXML

「Oracle Application Server Wireless XML」を参照してください。

Model-View-Controller

「MVC」を参照してください。

mod_weblogic

Oracle HTTP ServerとOracle WebLogic Server間の通信を管理するOracle HTTP Serverのモジュール。

mod_plsql

Oracle HTTP Serverからのデータベース接続を処理するOracle HTTP Serverのモジュール。PL/SQLデータベース・プロシージャで、Webブラウザ内に表示できる書式設定されたデータとHTMLコードが含まれたHTTPレスポンスを生成できるようにします。

MVC

多くの場合、同じデータの複数のビューを保持する機能を必要とするアプリケーションによって使用される標準的な設計パターン。MVCパターンを使用するには、データを保持するモデル、データのすべてまたは一部を表示するビュー、モデルまたはビューに影響するイベントを処理するコントローラという3つのカテゴリのいずれかに各オブジェクトを整然と分類することが重要です。この分類により、複数のビューおよびコントローラが同じモデルとインタフェースをとれるようになります。ポートレットなどの以前は存在しなかった新しいタイプのビューおよびコントローラでも、モデルの設計を変更せずにモデルとインタフェースをとることができます。

ナビゲーション領域

Oracleインスタント・ポータルで、検索ボックスとページの子ページのリストが表示された、ページの左側にある領域。

ナビゲーション・アイテム・タイプ

ポータル固有のファンクションへのナビゲーションとアクセスを提供する手段。

次の組込みナビゲーション・アイテム・タイプがあります。

- スマート・リンク・アイテム

- スマート・テキスト・アイテム

- ログイン/ログアウト・リンク・アイテム

- 基本検索ボックス・アイテム

- オブジェクトのリスト・アイテム

- オブジェクト・マップ・リンク・アイテム

- ページ・パス・アイテム

- ページ・ファンクション・アイテム

「アイテム・タイプ」も参照してください。「コンテンツ・アイテム・タイプ」と対比してください。

ナビゲーション・ページ

ページ・グループ内の特別な用途のページ。通常は、ナビゲーション・バーやバナーなどの標準的なユーザー・インタフェース効果を実装するために、他のページまたはPortalテンプレートに埋め込まれます。ポータル内のナビゲーション用にナビゲーション・アイテム・タイプが含まれることが多いです。

ナビゲータ

オブジェクトを検索し、Oracle Portalと対話するための機能。ページ・グループ、プロバイダおよびデータベース・オブジェクトなど、ユーザーが権限を持っているオブジェクトへのアクセスを提供します。

「新規コンテンツ」領域

Oracleインスタント・ポータルのホーム・ページの領域で、過去24時間の間にポータルに追加されたコンテンツが収集されます。

デフォルト以外のサブスクライバ

ASPによってホスティングされたOracle Portal上にストライプを所有するサブスクライバ。

オブジェクト

1. Portalオブジェクト: ページ・グループ、ポートレット、ページまたはスタイルなどの構造。

2. データベース・オブジェクト: 表、プロシージャまたはトリガーなどのOracleデータベース構造。Oracle PortalのウィザードまたはOracleデータベース・コマンドを使用して作成できます。

オブジェクト・マップ・リンク・アイテム

ユーザーがページに追加できるナビゲーション・アイテムのタイプ。ポータル内で使用可能なオブジェクトのマップを表示します。

OEM

「Oracle Enterprise Manager」を参照してください。

OID

「Oracle Internet Directory」を参照してください。

OmniPortlet

スプレッドシート、XMLおよびWebサービスのデータを、表、チャート、ニュース、箇条書き、フォーム・レイアウトとして表示できるポートレットを提供するWebプロバイダ。

Oracle Metadata Repository

Fusion Middlewareコンポーネント(Oracle Portalを含む)およびインフラストラクチャの他の部分で使用されるスキーマとビジネス・ロジックが含まれたOracleデータベース。

Oracle Portalでは、Oracle Metadata Repository内のスキーマを使用して、ポータル・インスタンスに関連付けられたコンテンツとメタデータを格納および管理します。コンテンツ・リポジトリと呼ばれることもあります。

Oracle Portal

Oracle Fussion Middlewareのコンポーネント。企業クラスのポータルを開発、デプロイ、管理および構成するために使用されます。Oracle Portalにはポータル構築用のフレームワークとセルフサービスの公開機能が組み込まれており、ポータル内でアクセスされる情報の作成と管理が可能。

Oracle Portal Developer Kit

「PDK」を参照してください。

Oracle Application Server Single Sign-On

Oracle Fussion Middlewareのコンポーネント。ユーザーが単一のユーザー名とパスワードを使用してOracle Fusion Middleware製品群のすべての機能、および他のWebアプリケーションにログインできるようにします。Oracle Portalは、パートナ・アプリケーションとしてOracle Application Server Single Sign-Onに統合されており、認証をこれに委託します。

Oracle Web Cache

Oracle Fussion Middlewareのコンポーネント。頻繁に使用されるWebサイトのパフォーマンス、スケーラビリティおよび可用性を向上させます。頻繁にアクセスされるURLをメモリー内に格納することによって、Oracle Web Cacheでは、Webサーバー上でこのようなURLに対するリクエストを繰り返し処理する必要がなくなります。Oracle Web Cacheは無効化ベースのキャッシュを使用し、パフォーマンスの向上のためにOracle Portalと統合されています。

「ポータル・キャッシュ」も参照してください。

Oracle Application Server Wireless

Portalのコンポーネント。情報およびアプリケーションをモバイル機器に配信するために使用します。Oracle Application Server Wirelessを使用すると、Webページ、カスタムJavaアプリケーション、XMLベースのアプリケーションをはじめとする様々な種類のコンテンツを使用するカスタムのポータル・サイトを作成できます。Oracle Application Server Wirelessで作成したサイトでは、これらの多様な情報にモバイル機器からアクセスでき、表示先の機種ごとにコンテンツを書きなおす必要はありません。

Oracle Application Server Wireless XML

Oracle PortalとOracle Application Server Wirelessとの通信に使用する、デバイスに依存しないマークアップ言語。

Oracle Portal

「Oracle Portal」を参照してください。

Oracle Portal Verification Service

(旧Portal Studio)。ポータル開発者のニーズに対応するように設計された、Portal Center(http://www.oracle.com/technology/products/ias/portal)の主要サイト。開発者は、Oracle Portalをインストールしなくても、WebまたはWSRPプロバイダとして公開したリモート・ポートレットをこのサイトでテストおよび表示できます。開発者のポートレットがそのサーバー上にあり、インターネット経由でアクセス可能である必要があります。

Oracle Enterprise Manager

「Oracle Enterprise Manager」を参照してください。

Oracle HTTP Server

Oracle Fusion MiddlewareのWebサーバー・コンポーネントであり、Apache Webサーバーのテクノロジに基づいて構築され、HTTPリクエストを処理するために使用されます。中間層のうち、WebとOracle Portal間のリクエストを処理する部分。Oracle HTTP Serverの拡張機能では、Javaサーブレット、JSP、Perl、PL/SQLおよびCGIアプリケーションがサポートされます。

Oracleインスタント・ポータル

小規模のユーザー・グループのコンテンツを共有および交換するための場所を提供する製品。OracleAS Portalをベースに構築されています。

Oracleインスタント・ポータル管理者

ポータル全体に対するすべての権限を持つユーザー。ポータルのホーム・ページの「管理」権限を持つユーザーは、そのポータルのOracleインスタント・ポータル管理者だとみなされます。インストール・プロセス中に作成されたPORTALおよびORCLADMINユーザーは、すべてのポータルのOracleインスタント・ポータル管理者です。Oracleインスタント・ポータル管理者のみが、バナーまたはスタイルの変更、ユーザーの管理および新しいトップ・レベル・ページの作成を行うことができます。

Oracle Internet Directory

Oracle Portalのユーザー資格証明とグループ・メンバーシップを格納するためのリポジトリ。デフォルトでは、分散しているユーザーおよびネットワーク・リソースについてのOracle Internet Directory情報と照らしあわせて、Oracle Application Server Single Sign-Onがユーザー資格証明を認証します。Oracle Internet Directoryによって、LDAPバージョン3に、Oracleデータベースの高度なパフォーマンス、スケーラビリティ、堅牢性および可用性が取り込まれます。

Oracle JDeveloper

Oracle JDeveloperは、Java、XMLおよびSQLの最新の業界規格を使用してアプリケーションおよびWebサービスを構築するための統合開発環境(IDE)です。開発者は、Oracle JDeveloperを使用してJavaポートレットを作成できます。

Oracle PartnerNetwork Solutions Catalog

(http://solutions.oracle.com/) Oracle Partnerの提携製品/サービスに関する情報の集合。Solutions Catalogには、Oracle Portalに関連する製品およびサービスを提供するパートナに関する情報が掲載されています。

Oracle Streamsアドバンスト・キューイング

Oracle Streamsアドバンスト・キューイング(AQ)は、データベースの統合的なメッセージ・キュー機能を提供します。Oracle Streams上で構築され、Oracleデータベースの機能を活用し、メッセージの永続的な格納、異なるコンピュータやデータベース上のキュー間のメッセージ伝播、Oracle Net ServicesおよびHTTPを使用したメッセージ転送などが可能です。

Oracle Technology Network

「OTN」を参照してください。

Oracle Text

Oracle9i以上の機能であり、Oracleリポジトリ内に格納されたコンテンツに対する拡張検索サービスを提供します。Oracle Portalに完全に統合されており、Oracle Metadata RepositoryのOracle Portalスキーマ内で管理されているコンテンツの全文検索を実行する機能をユーザーに提供します。また、検索結果を要旨別およびテーマ別に自動的にグループ化して分類する機能も提供します。

Oracle Ultra Search

Oracle Textをベースとしたアプリケーション。データベース、ファイル・システム、Webサーバー、電子メール・リストのアーカイブなど、種類の異なる複数のリポジトリのクローリング、索引作成および統合検索が可能。

「検索ポートレット」と対比してください。

Oracle WebLogic Server

スケーラビリティのある企業向けのJava Platform、Enterprise Edition (Java EE)アプリケーション・サーバー。WebLogic Server (WLS)のインフラストラクチャは、さまざまなタイプの分散アプリケーションのデプロイをサポートしており、SOA(サービス指向アーキテクチャ)に基づいたアプリケーションの構築の基盤として理想的です。SOAは、アプリケーション・サービスの再利用を最大限にすることを目的とした設計方法です。

Sun社のJava EE 5.0仕様のWebLogic Serverの完全な実装は、データベースやメッセージング・サービス、外部のエンタープライズ・システムへの接続など広範なサービスにアクセス可能な分散Javaアプリケーションを作成するための標準APIセットを提供します。エンド・ユーザーのクライアントは、Webブラウザ・クライアントまたはJavaクライアントを使用して、これらのアプリケーションにアクセスします。

Oracle Workflow

Oracle Workflowを使用すれば、あらゆる種類の情報を、容易に変更可能なビジネス・ルールに従って社外および社内のユーザーにルーティングするなど、ビジネス・プロセスの自動化および持続的な改良が可能になります。

OTN

Oracle Technology Network。オンラインのOracleテクニカル・コミュニティ。Oracleに基づくアプリケーションを構築するための多様な技術上のリソースを提供します。OTNには、http://www.oracle.com/technology/からアクセスできます。

上書きモード

「インポートの置換モード」を参照してください。

パッケージ

PL/SQL仕様と本体で構成されるデータベース・オブジェクト。仕様には、他のプログラム・ユニットから参照できるデータ型とサブプログラムが含まれています。本体には、パッケージの実際の実装が含まれています。

ページ

ポートレットとアイテムを含むPortalオブジェクト。表示のたびに、ページ用に選択されたポートレットおよびレイアウトに従って動的に組み立てられ、書式設定されます。

「ページ・タイプ」も参照してください。

ページ設計者

ページに対する「管理」権限を持ったユーザー(ページ管理者とも呼ばれる)。この権限を持つユーザーは、ページに対するすべての処理を実行し、そのページの下にサブページを作成できます。ページ設計者は、ページ・レイアウト(リージョンの構成)の設計、および他のユーザーへのページ権限の割当て(どのユーザーがページにコンテンツを追加できるかの決定など)を行うことがあります。

ページがテンプレートに基づいている場合は、そのページに対してページ設計者が制御できる範囲が制限されることがあります。

ページ・ファンクション・アイテム

ユーザーがページに追加できるナビゲーション・アイテムのタイプ。ページ・ファンクションは、ユーザーがカスタム・ページ・タイプに追加できるプロシージャ・コール。現在のページに関連付けられたページ・ファンクションがない場合、ページ・ファンクション・アイテムは表示されません。

ページ・グループ

ページ、スタイル、ナビゲーション・ページおよびパースペクティブなどの関連するポータル・オブジェクトをグループ化してプロパティを設定するポータル・オブジェクト。ページ・グループには通常、コンテンツを編成するためのページとサブページの階層が含まれています。

ページ・グループ管理者

ページ・グループ全体に対するすべての権限を持つユーザー。ページ・グループを設定して管理し、ページ所有者を指定して分類を作成します。ページ・グループ内のすべてのページを表示および管理することもできます。

ページ・グループ・マップ

ポータル内のすべてのページ・グループの階層的な編成で、ユーザーがページ・グループ内の個別のページにアクセスできるようにします。ページ・グループ・マップは各ユーザーに対して個別に作成され、そのユーザーが表示したり編集することが承認されているページのみが表示されます。

ページ・グループ割当て

「割当て制限」を参照してください。

ページ・リンク・アイテム

ユーザーがページに追加できるアイテムのタイプ。ハイパーリンクを使用して、ポータル内の別のページへのルートを提供します。ユーザーが表示名のリンクをクリックすると、このアイテムが参照しているページがユーザーのブラウザに表示されます。

ページ管理者

「ページ設計者」を参照してください。

ページ・メタデータ

ページに関して格納される情報、つまり属性。ページのレイアウトとキャッシュを設定するためにOracle Portalによって使用されます。

ページ・パス・アイテム

ユーザーがページに追加できるナビゲーション・アイテムのタイプ。ページ・パスは、ページの参照名の連鎖。ページ・パス(ブレッドクラムとも呼ばれる)によって、完全なディレクトリ・パスが記述されます。

ページ・ツールバー

ページの編集モードで、ページの最上部に表示されるリンク。これを使用して、ページの様々な側面の編集、編集ビューの切換え(グラフィカル・ビューからレイアウト・ビューになど)、ページ・グループのプロパティの編集などを行うことができます。

ページ・タイプ

ページのコンテンツとページについて格納される情報を定義するポータル・オブジェクト。Oracle Portalに含まれる基本のページ・タイプには、標準ページ、モバイル・ページ、PL/SQLページ、JSPおよびURLページがあります。カスタム・ページ・タイプは、基本のページ・タイプに用意されている機能を拡張し、ページに関する追加情報を格納するために、ページ・グループ管理者によって作成されるページ・タイプ。

Parallel Page Engine

「PPE」を参照してください。

パラメータ

ページとポートレットの間、またはポートレット間で渡される値。

ページ・パラメータは、ページ設計者によって作成されるページ・レベルのパラメータであり、その値はポートレット・パラメータにマップできます。

ポートレット・パラメータは、プロバイダによって宣言されます。ページ設計者は、ページ・パラメータをポートレット・パラメータにマップします。PPEがプロバイダからのポートレットをリクエストすると、ポートレットで宣言され、ページ・パラメータにマップされたポートレット・パラメータのみが送信されます。

パラメータ入力フィールド

Oracle Portalポートレットに渡される値をエンド・ユーザーが入力できる、パーソナライズ・フォーム上のフィールド。

ページの部分的なキャッシュ

「PPC」を参照してください。

パートナ・アプリケーション

Oracle Application Server Single Sign-Onに認証を委託したアプリケーション。OracleAS Single Sign-On Serverに登録されたユーザーは、1つのログイン・ページを使用して、複数のパートナ・アプリケーションにログインできます。特定のセッションで、ユーザーがOracleAS Single Sign-On Serverによって認証された後は、別のパートナ・アプリケーションにアクセスするために再びログインする必要はありません。

パスの別名

「パス・ベースのURL」を参照してください。

パス・ベースのURL

パス・ベースのURLは、ポータルを介して特定のオブジェクトに到達するまでのパスを識別します。これは読みやすいURLだが、ポータル・オブジェクトの名前が含まれるため、パス内のオブジェクト名が変更されると無効になります。

たとえば、ページ・グループMyPageGroupのトップ・レベル・ページ(サンプルのページ)にアクセスするためのパス・ベースのURLは、次のとおりです。

http://mymachine.mycompany.com:5000/portal/page/mydad/MyPageGroup/sample_page

「永続URL」と対比してください。

PDK

Oracle Portal Developer Kit。Oracle Portalを使用してWebコンテンツとアプリケーションを構築および統合するための開発用フレームワーク。ポータルの開発を簡略化する際に役立つツールキット、サンプルおよび技術記事が含まれています。既存のJavaサーブレット、JSP、URLでアクセス可能なコンテンツおよびWebサービスを使用して、それらをポートレットにすることができます。一般的には、外部の開発者とベンダーが、ポートレットとサービスを作成するために使用します。PDKは、開発者に最新のツールとテクニックを提供するために、Portal Center(http://portalcenter.oracle.com/)で定期的に更新されます。

「PDK-Java」、「PDK-PL/SQL」および「PDK-URL Services」も参照してください。

PDK-Java

Javaでポートレットを実装し、ポータル機能を追加するためのツールキット。既存のJavaサーブレット、JSPおよびWebサービスを宣言によってポートレットにするために使用します。

「PDK」も参照してください。「PDK-PL/SQL」と対比してください。

PDK-PL/SQL

PL/SQLプログラマがPL/SQL APIを使用して簡単にポートレットを作成、拡張できるようにする一連の記事、サンプルおよびサービス。

「PDK」も参照してください。「PDK-Java」と対比してください。

PDK-URL Services

保護されたパブリックなWebコンテンツを宣言によってポートレットにするユーティリティ。これらのサービスは、ターゲットURLへのパラメータの動的な受渡し、コンテンツのクリッピングとリフォーマッティング、フォーム・ベースの認証またはBasic認証を必要とするアプリケーションへのOracle Application Server Single Sign-Onの提供を行います。また、これらのサービスによって、開発者は任意の言語で作成された任意のアプリケーションを使用して、簡単に統合ポートレットを作成できるようになります。PDK-URL Servicesは、アプリケーションのURLを取得してそのコンテンツを解析し、PDK-Javaフレームワークを使用してポートレットを作成します。

「PDK」も参照してください。

保留中の承認の監視

自分が管理しているページ・グループ内の保留中の承認をリストできるようにするポートレット。承認者別、日付別、ページ・グループ別または送信者別に、保留中の承認をリストできます。

保留中のアイテム・プレビュー・モード

承認待ちのアイテムを表示できるプレビュー・モード。このモードを使用すると、コンテンツ作成者は追加したがまだ承認されていないアイテムをプレビューでき、承認者はアイテムを承認または却下する前にそれをプレビューできます。

「編集モード」も参照してください。

パーソナライズ・フォーム

ポートレット・ビルダー・ポートレットに渡す値の入力をエンド・ユーザーに求めるページ。パーソナライズ・フォームが作成されている場合、エンド・ユーザーがポートレットの「パーソナライズ」リンクをクリックすると、ポートレットのパーソナライズ・フォームが表示されます。

個人用ページ

認証されたユーザーが個人的なコンテンツを格納し、それを他のユーザーと共有できるOracle Portal内の領域。ポータル管理者は、ユーザー・アカウントを作成するときに、そのユーザーのための個人用ページの作成を選択できます。

パースペクティブ

複数のカテゴリにまたがる、アイテムのグループ化。パースペクティブを使用すると、特定のアイテムに関心のある人々が誰かという観点から、コンテンツを分類できます。たとえば、世界中の様々な観光地へのリンクを追加し、休暇の種類についてのアイテムに「北欧ファンのための休暇」、「古代ロマンの旅」、「冒険者向けの極限の旅」などのパースペクティブを割り当てることができます。パースペクティブ属性を含むアイテム・タイプを使用してコンテンツを公開するユーザーは、パースペクティブに値を指定しなくても、1つまたは複数の値を指定してもかまいません。

「カテゴリ」と対比してください。

PL/SQLアイテム

ユーザーがページに追加できるアイテムのタイプ。PL/SQLアイテムには、1ブロックのPL/SQLコードが含まれています。ユーザーがこのアイテムをクリックすると、そのコードが実行されます。結果は、ユーザーのブラウザに表示されます。PL/SQLアイテムは、ページに直接表示することもできます。

PL/SQLファンクション

「ファンクション」を参照してください。

PL/SQLページ

ページのタイプ。PL/SQLページには、そのページがレンダリングされるときにHTMLを生成するPL/SQLコードが含まれています。

プラグイン

「拡張機能」を参照してください。

投票

ユーザーから情報を引き出すために使用する一連の質問。

「サーベイ」および「テスト」と対比してください。

ポータル

Webベース・アプリケーションとの対話および個別のユーザーまたはユーザーのクラスに関連する情報のパーソナライズされた単一のポイントを提供する共通インタフェース(つまり、Webページ)。Oracle Portalを使用して構築されたポータルは、ページ・グループ内で管理されるページで構成され、ページにはポートレットとアイテムが含まれます。

ポータル管理者

Oracle Portal内で最高レベルの権限を持ったユーザー。ポータル管理者は、プライベートとマークされたページおよびデータベース・プロバイダも含め、Oracle Portal内のすべてのオブジェクトを表示および変更できます。(唯一の例外はグループ。ポータル管理者はPORTAL_ADMINISTRATORSおよびPORTAL_PUBLISHERSグループを変更できますが、その他のグループはグループの所有者に指定されていないかぎり変更できません。)

「Portalビルダー」ページ

開発および管理用のポートレットが含まれた事前定義済のページ。ポータル・オブジェクトおよびサービスの構築および管理に使用します。

ポータル・キャッシュ

有効化ベースのキャッシュを使用するオブジェクトのキャッシュ・エントリを格納するメカニズム。さらに、オブジェクトが有効化ベースのキャッシュと無効化ベースのキャッシュの両方を使用している場合は、メモリー・ベースのOracle Web Cacheに対するバックアップとしても機能します。

Portalカタログ

「Oracle PartnerNetwork Solutions Catalog」を参照してください。

Portal Center

(http://portalcenter.oracle.com/) Oracle Portalに関するあらゆる情報を検索できるWebサイト。頻繁に更新され、常に最新の製品情報があります。また、Portal Developer ServicesおよびOracle Portal Verification Serviceのホームです。このWebサイトには、製品に関するすべての情報(ドキュメントやデモも含む)があり、Oracle Portalの専門知識を入手できます。

Portalコミュニティ

Oracle Portalに関する情報を発表および交換するための、人的ネットワーク。このコミュニティには、Oracle Portalを使用するすべての人々が含まれます。Portal関連の情報を共有するためにPortal Knowledge Exchangeを活用し、Portal Developer Servicesを利用できます。

Portal DBプロバイダ

「データベース・プロバイダ」を参照してください。

Portal Developer Kit

「PDK」を参照してください。

Portal Developer Services

Oracle Portalの専門知識を発表および交換するための、人的ネットワーク。このプログラムは、Portal Center(http://portalcenter.oracle.com/)を介してオンラインのテスト・ツールも提供します。また、ニュースレター、サーベイおよびPortal Knowledge Exchangeを通じて製品チームや他のポータル開発者と対話できます。

「Portalコミュニティ」も参照してください。

Portal Knowledge Exchange

Portal Developer Servicesのメンバーが、ホワイトペーパー、テクニックおよびポートレットをPortalコミュニティ内の他のメンバーと共有できる、セルフサービスのWebサイト。メンバーが提供する情報にはランク付けも可能なため、最も役に立つ情報を簡単に検索できます。

ポータル・ページ

「ページ」を参照してください。

ポータル・リポジトリ

「Oracle Metadata Repository」を参照してください。

Portalサービス

Oracle Portalインスタンスで動作する一連のサービスで、ポータル・ページを組み立て、ポータルおよびページ・メタデータにアクセスするために使用されます。Parallel Page Engine (PPE)は、ポータル・ページを組み立てるPortalサービスの1つです。mod_plsqlによって以前提供されていたその他のサービスもPortalサービスに組み込まれています。

ポータル・セッション

ブラウザとOracle Portalの対話の期間。最初のアクセスから、ログオフ、ブラウザ・ウィンドウの終了、または(非アクティブな状態が一定期間経過した後の)セッションの期限切れまでの間。

Portalスマート・リンク・アイテム

「スマート・リンク・アイテム」を参照してください。

Portalスマート・テキスト・アイテム

「スマート・テキスト・アイテム」を参照してください。

Portal Studio

「Oracle Portal Verification Service」を参照してください。

Portalテンプレート

ページおよびアイテムに対して特定のレイアウト、色、フォントおよび背景を適用するウィザードを使用して宣言によって構築されたポータル・オブジェクト。Portalテンプレートは、ナビゲーション・ページ、標準ページ、および標準ページ・タイプをベースとしたカスタム・ページ・タイプのページで使用できます。また、Portalテンプレートは、テキスト・アイテム、PL/SQLアイテム、URLアイテム、およびMIMEタイプがtext/htmlまたはtext/plainであるすべてのファイル・アイテムでも使用できます。

「HTMLテンプレート」と対比してください。

ポートレット

通常はWebコンテンツの一部を表示する、再使用可能なプラガブルWebコンポーネント。ポートレットはポータル・ページの基本的な構築要素です。ポートレット・ビルダーを使用すると、独自のポートレットを簡単に作成できます。Oracle Portalには、プログラムによってポートレットを構築し、任意の種類のWebコンテンツを組み込むための方法も複数用意されています。ポートレットは、Java、JSP、Javaサーブレット、PL/SQL、Perl、ASPなどの様々なテクノロジを使用して実装可能。PDKには、Oracle Portalが提供する標準的なポートレット開発オプションがすべて含まれています。

ポートレット・ビルダー

ポートレット構築ウィザードの集合。これらのウィザードには、Portalナビゲータの「プロバイダ」タブを使用してアクセスできます。これらのウィザードは、チャート、フォーム、レポート、カレンダおよび値リストの構築に使用できます。

ポートレット・インスタンス

特定のページに配置されたポートレット。

ポートレット・プロバイダ

「プロバイダ」を参照してください。

ポートレット公開者

ポータル・オブジェクト(ページまたはそれ以外)を、ページに含めることができるようにポートレットとして公開できるユーザー。

ポートレット・レコード

実装スタイルや表示モード(PL/SQL)など、ポートレットに関する詳細情報が含まれたプログラムの構造。

ポートレット・リポジトリ

ローカル・プロバイダおよび登録されたすべてのリモート・プロバイダのポートレットが含まれた特別なページ・グループ。プロバイダを登録すると、プロバイダとそのポートレットがポートレット・リポジトリに追加されます。

PPC

ページの部分的なキャッシュ。Oracle Web CacheによってHTMLドキュメントのフラグメントを個別にキャッシュおよび管理可能にする機能。テンプレート・ページにEdge Side Includes(ESI)マークアップ・タグを使用することによってHTMLフラグメントを取得および挿入するようにOracle Web Cacheに指示します。フラグメント自体は、細分化されたテキストまたはその他のオブジェクトが含まれているHTMLファイル。

PPE

Parallel Page Engine。Portalおよびサービス・ページ・リクエスト内で実行される、マルチスレッド・サーブレット・エンジン。PPEは、ページ・メタデータを読み取り、ポートレット・コンテンツを取得するためにプロバイダをコールし、プロバイダのレスポンスを受け取って、リクエストされたページを指定されたページ・レイアウトで組み立てます。Parallel Page EngineはPortalサービスの一部で、Oracle Fusion Middlewareの中間層で実行されます。

簡潔なURL

「パス・ベースのURL」を参照してください。

プレビュー・モード

ポートレット表示モードのオプションの1つ。ユーザーがポートレットをページに追加する前にプレビューできるようにします。

主キー

データベース表内の1つ以上の列を組み合せたもので、表内の行を一意に識別します。

権限

Oracle Portalで、操作を実行する権利。グローバルな権限(ユーザーまたはグループ・プロファイルで設定)と特定のオブジェクト専用の権限(通常はオブジェクトの「アクセス」タブで設定)があります。アプリケーションを構築するときに、データベース・オブジェクト、共有ポートレット、ポートレットおよびアプリケーションに対してもアクセス権が付与されます。

プロデューサ

「プロバイダ」を参照してください。

プロファイル

パスワード、ユーザーIDおよび権限など、Oracle Portalのユーザーまたはグループに関して格納される情報。

プロパティ・シート

アイテムの属性またはページのプロパティのサマリーが表示される組込み属性。

プロバイダ

Oracle Portalとポートレット間の通信リンク。プロバイダには、Webプロバイダとデータベース・プロバイダの2種類があります。Webプロバイダはネットワーク上のどこにあってもよく、アクセスにはSOAPが使用されます。Webプロバイダは、任意のWebテクノロジを使用して実装できます。PDK-JavaとPDK-URL Servicesを使用して、独自のWebプロバイダを構築できます。データベース・プロバイダはOracleデータベース内にあり、データ集約型の操作の実行中にポートレットを管理します。

プロバイダはポートレットのコンテナとして機能し、各ポートレットはプロバイダを通じてOracle Portalと通信します。プロバイダは、それ自体に含まれているポートレットも管理します。

プロバイダ定義

宣言的、XMLベースの構成ファイル(provider.xml)。Webプロバイダ、そのポートレット、およびポートレット内に表示されるコンテンツの場所を記述します。この構成ファイルは、プロバイダとそのポートレットの動作も記述します。

プロバイダ・グループ

プロバイダ・グループ・サービスによって定義された、Webプロバイダの論理的な集合。ポータル管理者は、ポータルで使用するプロバイダ・グループを登録できます。登録すると、グループ内の各プロバイダを登録する処理が容易になります。この結果、Webプロバイダを作成する組織はプロバイダの登録の詳細を公開できるようになり、任意のOracle Portalインスタンスへの自動登録が容易になります。ポータル管理者に提供する必要がある情報は、プロバイダ・グループの名前と位置のみです。

「ローカル・プロバイダ・グループ」および「リモート・プロバイダ・グループ」も参照してください。

プロバイダ・レコード

ポートレットについて指定された情報が含まれた、データベース・プロバイダから戻されるレコード。

プロキシ・サーバー

プロキシ・サーバーは、一般にネットワーク・ファイアウォール上に位置し、ファイアウォール内部のクライアントがWebリソースにアクセスできるようにします。クライアントからのすべてのリクエストは、接続先サーバーに直接送られるのではなく、プロキシ・サーバーに送られます。プロキシ・サーバーは接続先サーバーにリクエストを転送し、受信した情報をクライアントに返します。プロキシ・サーバーはサイトでのすべてのWebトラフィックを、単一のセキュアなポートを通して送ります。これにより、組織はWebアクセスを許可する一方で内部マシンへのインターネット・アクセスを防ぎ、セキュアなファイアウォールを作成できます。

パブリック・ページ

パブリック・ユーザー(Oracle Portalにログインしていないユーザー)が表示できる、ページ・グループ内のページ。ページ設計者またはページ・グループ管理者は、ページをパブリックとして明示的に指定する必要があります。

パブリック・ユーザー

Oracle Portalにアクセスできるが、ログインしていないユーザー。ユーザーが初めてOracle Portalにアクセスするときは、ログインできるかどうかに関係なく、パブリック・ユーザーとしてアクセスします。パブリック・ユーザーは、パブリックとして指定されたすべてのページを表示できますが、そのコンテンツをパーソナライズまたは編集したり、なんらかのアクセス制御があるページを表示することはできません。

「認証されたユーザー」と対比してください。

パージ

「システム・パージ」を参照してください。

問合せ

データベース内の1つ以上の表またはビューから取得するデータを指定するSQL SELECT文。

キュー

CMEFなどのメッセージ・システムによってメッセージの格納に使用される概念的な格納単位。

割当て制限

アップロードされたドキュメントを格納するために、ページ・グループ内またはOracle Metadata RepositoryのOracle Portalスキーマ内に用意される容量。

最近使用したオブジェクト

最近表示または編集された、ページやポートレットなどのポータル・オブジェクト。認証されたユーザーごとに、最近アクセスしたn個のオブジェクトへのリンクを提供する専用の「最近使用したオブジェクト」ポートレットがあります。

参照しているオブジェクト

明示オブジェクトが直接または間接的に参照しているオブジェクト。

「マニフェスト」も参照してください。

参照パス

ページ上のポートレット・インスタンスを一意に識別するパス。参照パスは、パラメータを特定のページの個別のポートレットに設定するために使用できます。

リージョン

標準ページ上の切り分けられた区域。ページ・レイアウトを定義し、ページ・コンテンツ(ポートレットとアイテム)を定義し、リージョン内に表示されるコンテンツのスタイルと属性を制御するために使用します。標準ページには、1つ以上のリージョンを含めることができます。リージョンは、別のリージョンの上、下または横に作成できます。

次のタイプのリージョンを作成できます。

- 未定義リージョン。特定のタイプが割り当てられていないリージョン。

- アイテム・リージョン。テキスト、イメージ、ファイルなどのアイテムを追加できるリージョン。

- ポートレット・リージョン。ポートレットを含めることができるリージョン。

- サブページ・リンク・リージョン。現在のページのサブページのリストを表示できるリージョン。

- タブ・リージョン。タブを含めることができるリージョン。

リージョン・バナー

ポータル・ページのリージョンに表示される、タイトルが付いた色付きの水平バー。バナーは、ページの視覚的な流れを分断し、関連アイテムをグループ化してその下に表示します。

リモート・データベース

接続文字列またはデータベース・リンクを通じてネットワークを介してアクセスできる別個のマシンで実行されるデータベース。

リモート・プロバイダ・グループ

Oracle Portalのローカル・インスタンス外で定義されたプロバイダの集合。

「プロバイダ・グループ」を参照してください。「ローカル・プロバイダ・グループ」と対比してください。

インポートの置換モード

インポートのモード。このオプションを選択すると、オブジェクトがターゲットに存在する場合は、そのオブジェクトが置き換えられます。オブジェクトが存在しない場合は、作成されます。このオプションを選択しないと、オブジェクトがターゲットに存在する場合は、そのオブジェクトが参照されます。オブジェクトがターゲットに存在しない場合は、作成されます。

レポート

SQL問合せの結果を表形式で表示する、ポートレット・ビルダーを使用して作成されたポートレット。

再使用モード

「インポートの置換モード」を参照してください。

リッチ・テキスト・エディタ

コンテンツ作成者がテキスト・アイテムに簡単に書式を設定できるようにするWYSIWIGエディタ。

リッチ・テキスト・アイテム

小さなテキスト・ブロック用として設計された、Oracleインスタント・ポータルで使用可能なアイテムの1つ。「リッチ・テキスト・アイテム」は、ページ上にそのタイトル、サマリーおよび全テキストが表示されます。ユーザーがアイコンをクリックするまでテキストが表示されない「拡張可能リッチ・テキスト・アイテム」と対比してください。拡張可能リッチ・テキスト・アイテムとリッチ・テキスト・アイテムには両方とも、イメージ、ハイパーリンク、表および任意の有効なHTMLコードを記載できます。

ルート・ページ

ページ・グループ内のページ階層のトップ・レベル。ページ・グループ内の他のすべてのサブページが含まれます。ページ・グループのホーム・ページとも呼ばれます。

ルーティング方法

承認プロセスを編成するためのメカニズム。Oracle Portalには、次の3つの承認ルーティング方法が用意されています。

- 全員、並行。この方法を選択すると、Oracle Portalによって、手順内の受信者全員に一度に承認が送信されます。アイテム承認が次の手順に移動する前に、すべての受信者が承認に対して応答する必要があります。

- 全員、順次。この方法を選択すると、Oracle Portalによって、手順内の受信者に、指定された順序で一度に1人ずつ承認が送信されます。アイテム承認が次の手順に移動する前に、すべての受信者が承認に対して応答する必要があります。

- 1人、並行。この方法を選択すると、Oracle Portalによって、手順内の受信者全員に一度に承認が送信されます。ただし、アイテム承認が次の手順に移動する前に、受信者の1人のみが承認に対して応答する必要があります。

行

表内の値のセット。たとえば、SCOTT.EMP表内の1人の従業員を表す値のセットなど。

保存された検索

検索基準を単一の名前の下に保存するためのメカニズム。この機能により、検索基準を手動で再入力するかわりに、保存した検索名を選択することによって、検索を簡単に繰り返すことができます。基本検索、拡張検索またはカスタム検索の結果を保存できます。保存された検索ポートレットには、ページ・グループ内のすべての保存された検索のリストが表示されます。

スキーマ

表、ビュー、順序、ストアド・プロシージャ、シノニム、索引、クラスタおよびデータベース・リンクなどの論理構造からなる、データベース・オブジェクトの集合。スキーマは、これを制御するユーザーの名前を含みます。

検索ポートレット

Oracle Metadata RepositoryのOracle Portalスキーマ内のページおよびコンテンツをユーザーが検索できるようにするポートレット。ユーザーは、CONTAINS、GREATER THAN、LESS THAN、EQUAL TOなどの演算子を使用して、テキスト文字列、カテゴリ、パースペクティブおよび属性に基づいた検索を実行することもできます。

「Oracle Ultra Search」と対比してください。

セキュア・ビュー

リリース間で変更がないことが保証されているコンテンツ・リポジトリ内のデータのビュー。コンテンツ・リポジトリに格納されたドキュメントやアイテム上のデータの問合せに使用し、その問合せがOracle Portalの今後のリリースでも利用可能であることを確認します。

自己登録

ログイン・ポートレット内のリンクを通じて、ユーザーが自分用の新しいアカウントを作成できるようにするメカニズム。

順序

表の行に対して自動的に番号を生成するために使用するデータベース・オブジェクト。

サーブレット

通常はWebサーバー上で実行されるJavaプログラムで、Webサーバーの機能を拡張します。HTTPサーブレットは、クライアントのHTTPリクエストを受け取り、(データベースの問合せなどによって)動的コンテンツを生成し、HTTPレスポンスを返します。

セッション

「ポータル・セッション」を参照してください。

共有オブジェクト

個人用ページ、ナビゲーション・ページ、スタイル、Portalテンプレート、パースペクティブ、カテゴリまたはカスタム・タイプなどの、ページ・グループ間で共有できるポータル・オブジェクト。

共有ポートレット

その他のポートレット・ビルダー・ポートレット間で共有される、ポートレット・ビルダーによって作成されたポートレット。各共有ポートレットは、複数のページに同じパーソナライズ設定で表示できます。

共有画面モード

ポートレットの本体がレンダリングされるポートレット表示モード。各ポートレットには、少なくとも共有画面モードが必要です。

表示モード

ポートレットをコールして情報を表示する方法。次のような方法があります。

- 共有画面モード

- 編集モード

- デフォルト編集モード

- プレビュー・モード

- ヘルプ・モード

- 情報モード

- リンク・モード

- 全画面モード

シンプル・ファイル・アイテム

ファイル・アイテムと同じだが、属性がファイル・アイテムより少ないため、より短時間で簡単に作成できます。

シンプル・イメージ・アイテム

イメージ・アイテムと同じだが、属性がイメージ・アイテムより少ないため、より短時間で簡単に作成できます。

Simple Object Access Protocol

「SOAP」を参照してください。

シンプル・ページ・リンク・アイテム

ページ・リンク・アイテムと同じだが、属性がページ・リンク・アイテムより少ないため、より短時間で簡単に作成できます。

シンプルPL/SQLアイテム

PL/SQLアイテムと同じだが、属性がPL/SQLアイテムより少ないため、より短時間で簡単に作成できます。

シンプル・テキスト・アイテム

テキスト・アイテムと同じだが、属性がテキスト・アイテムより少ないため、より短時間で簡単に作成できます。

シンプルURLアイテム

URLアイテムと同じだが、属性がURLアイテムより少ないため、より短時間で簡単に作成できます。

シングル・サインオン

「Oracle Application Server Single Sign-On」を参照してください。

スマート・リンク・アイテム

自己構成型のナビゲーション・アイテムのタイプ。たとえば、「ホーム」スマート・リンクをナビゲーション・ページに追加した場合、ユーザーが「ホーム」リンクをクリックすると、自動的にそのユーザーのホーム・ページに移動します。

スマート・テキスト・アイテム

自己構成型のナビゲーション・アイテムのタイプ。たとえば、「現在の日付」スマート・テキスト・アイテムをナビゲーション・ページに追加した場合、現在の日付がサーバーから自動的に取得されるため、複雑なコーディングで指定する必要はありません。

スナップショット

リモート・データベース内のマスター表と呼ばれる1つ以上の表に対する問合せの結果を含む表。

スナップショット・ログ

スナップショットのマスター表と関連付けられた表であり、マスター表の変更を追跡します。

SOAP

Simple Object Access Protocol。非集中型の分散環境内で情報を交換するための、XMLベースの軽量プロトコル。SOAPでは、リモート・プロシージャ・コール(RPC)やメッセージ指向型の情報交換をはじめとする様々なスタイルの情報交換がサポートされます。RPCスタイルの情報交換では、リクエスト/レスポンス型の処理が可能であり、エンドポイントでプロシージャ指向のメッセージを受け取り、それに関連するレスポンス・メッセージが返されます。メッセージ指向型の情報交換では、メッセージを送っても送信側が迅速なレスポンスを期待したり待機しない可能性がある、ビジネス関連などのドキュメントの交換を必要とする企業やアプリケーションをサポートします。

SSLアクセラレータ・カード

通常のSSLソフトウェアよりもかなり高速にトラフィックを処理するハードウェア・デバイス。

「LBR」も参照してください。

SSO

「Oracle Application Server Single Sign-On」を参照してください。

標準ページ

アイテムおよびポートレットの格納および管理に使用するページのタイプ。

状態

CMEFのコンテキストでは、イベント状態はイベントに関する追加情報を提供します。それによって開発者は、特定の状態でポータル・アクションがイベントをトリガーした場合に、サブスクライバの動作を適切に判断できます。

ストアド・プロシージャ

データベース内に格納された一連のPL/SQLプロシージャ。

ストライプ

特定のサブスクライバに割り当てられた仮想プライベート・ポータル上のセキュアなスライス。

構成済UIテンプレート

ポートレット・ビルダー・ポートレットのルック・アンド・フィールを制御し、スタンドアロン・モードで実行される共有ポートレット。構成済UIテンプレートによって、このテンプレートを使用する各ポートレットに関して同じ位置に同じイメージとテキストが表示されます。

「ユーザー・インタフェース(UI)テンプレート」を参照してください。「非構成済UIテンプレート」と対比してください。

Struts

MVCの設計パターンに基づくJavaサーブレット・アプリケーション用の開発フレームワーク。

スタイル

ページおよびリージョンの色とフォントを制御する一連の値とパラメータ。スタイルの設定には、フォント・スタイル、サイズ、色、位置および背景色が含まれます。スタイルは、特定のページ・グループ用に作成することも、複数のページ・グループ内のページで使用される共有オブジェクトとして作成することもできます。

サブカテゴリ

別の(親)カテゴリの下の階層に存在するカテゴリ。これにより、関連性の強いカテゴリをグループ化できます。

サブアイテム

別の(親)アイテムの下の階層に存在するアイテム。これにより、関連性の強いアイテムをグループ化できます。たとえば、特定のHTMLファイル・アイテムで使用するスプレッドシートを、そのHTMLファイル・アイテムのサブアイテムとして追加できます。

サブページ

別の(親)ページの下の階層に存在するページ。ページ・グループ内の各ページは、ルート・ページを除きすべてサブページ。

サブパースペクティブ

別の(親)パースペクティブの下の階層に存在するパースペクティブ。これにより、関連性の強いパースペクティブをグループ化できます。

サブスクライバ

CMEFのコンテキストでは、サブスクライバはWWSBR_EVENT_Qのキューからのメッセージを消費し、メッセージに基づいたアクションを実行します。

ホスティングされたポータルのコンテキストでは、サブスクライバは、ASPと契約し、ホスティングされたOracle Portal上のストライプを受け取る企業。

承認申請通知

エンド・ユーザーが特定のページまたはアイテムをサブスクライブするための方法。そのページまたはアイテムが更新されると、通知ポートレット経由で通知されます。ページ設計者は、ユーザーがページをサブスクライブできるように「承認申請」のPortalスマート・リンク・アイテムを含め、ユーザーがアイテムをサブスクライブできるように承認申請属性を表示する必要があります。さらに、ページ・グループ管理者はページ・グループに対して承認と通知を有効にする必要があります。

置換タグ

タイトル、見出しおよび他の要素をテンプレートに動的に埋め込むために、HTMLテンプレートおよび非構成済UIテンプレート内で使用される特殊なポータル・タグ。

サーベイ

ユーザーから情報を引き出すために使用する一連の質問。サーベイでは、特定の質問に対する回答に応じてユーザーをサーベイの様々なセクションに振り分けることができます。

「投票」および「テスト」と対比してください。

シノニム

表またはビューに割り当てられた追加の名前。後で参照のために使用できます。

システム・レベルのキャッシュ

すべてのユーザーについてアイテムの単一コピーがキャッシュ(中間層上)に置かれるキャッシュ方法。このため、このようなアイテムはユーザー固有にはできません。すべてのユーザーに対して当該アイテムの同じコンテンツが表示されます。

「ユーザー・レベルのキャッシュ」と対比してください。

システム・パージ

Oracle Metadata RepositoryのOracle Portalスキーマから、ページ・グループ内で削除または失効とマークされたすべてのアイテムを削除するプロセス。システム・パージは、ページ・グループ管理者またはポータル管理者によって実行されます。

タブ

ページで利用可能な実際の面積を効果的に2倍(3倍、4倍など)にして、ページに表示できるコンテンツ量を増やすために使用するページ上の領域。また、タブによって、対象となる分野、組織、特定のロールなどに共通するコンテンツをグループ化できます。

表

リレーショナル・データベース内の基本的な記憶域構造。

表領域

データベース内の領域の割当て。

テンプレート

「HTMLテンプレート」、「Portalテンプレート」または「ユーザー・インタフェース(UI)テンプレート」を参照してください。

一時表領域

表の行のソートなどの操作で一時的な表セグメントを作成するために使用する、データベース内の領域の割当て。

テスト

特定の対象についてのユーザーの理解度を査定するために使用する一連の質問。質問の正解を提供し、各質問の配点を割り当てることができます。記述式の回答も手動で採点できます。

「投票」および「サーベイ」と対比してください。

テキスト・アイテム

ユーザーがページに追加できるアイテムのタイプ。テキスト・アイテムを作成するときには、アイテム・ウィザード内に最大32KBのテキストを入力します。入力したテキスト・ブロックは、Oracle Metadata RepositoryのOracle Portalスキーマ内に格納されます。

テーマ

Oracle Textによって生成される、ドキュメントを説明するスナップショット。特定の語句を含むドキュメントを検索するのではなく、対象がドキュメント内で明確に言及されていない場合でも、ユーザーはOracle Textを使用して、一定の対象についてドキュメントを検索できます。

タイトル

「表示名」を参照してください。

トップ・レベル・ページ

ポータルのタブセット内の1つのタブによって示されるOracleインスタント・ポータルのページの1つ。1つ以上の子ページが含まれます。トップ・レベル・ページに適用されたページ権限は、そのすべての子ページにも適用されます。

翻訳

別の言語でレンダリングされたページ・グループ。ページ・グループ管理者が翻訳を作成すると、コンテンツ作成者はその言語のコンテンツを追加できます。ページ・グループ・ユーザーも、言語をサポートされる言語の1つに設定することで、翻訳されたコンテンツを表示できます。

トランスポート・セット

エクスポートまたはインポート用のポータル・オブジェクトの集合。複数のページ・グループと複数のページなど、特定タイプのオブジェクトを複数含めることができます。

トリガー

表に関連付けられたデータベース・オブジェクト。1つ以上の指定されたイベントの前または後に実行されます。

Ultra Search

「Oracle Ultra Search」を参照してください。

Uniform Resource Locator

「URL」を参照してください。

非構成済UIテンプレート

コンテンツとHTMLコードを挿入してポートレット・ビルダー・ポートレットのルック・アンド・フィールを制御するために使用する共有ポートレット。HTMLコードをベースとし、実行時に、タイトル、見出しおよびページを構成する他の要素を動的に埋め込みます。

「置換タグ」および「ユーザー・インタフェース(UI)テンプレート」も参照してください。「構成済UIテンプレート」と対比してください。

URL

Uniform Resource Locator。インターネット経由で使用可能なリソースの場所を示す簡潔な文字列。WebクライアントがOracle WebLogic Serverへのリクエストをエンコードするために使用する形式でもあります。

URLアイテム

ユーザーがページに追加できるアイテムのタイプ。URLアイテムは、クリックされたときに、別のWebページへの経路を提供します。ユーザーがURLアイテムの表示名をクリックすると、そのURLが参照しているWebページが表示されます。

Oracleインスタント・ポータルで、URLアイテムは、ページ上で地球(および必要に応じてタイトルとサマリー)によって示されます。ユーザーが地球をクリックすると、アイテムに指定されている場所が新しいブラウザ・ウィンドウに表示されます。

URLページ

URLで指定された別のWebページへのルートを提供するページのタイプ。ユーザーがページ・リンクをクリックすると、そのリンクが参照しているWebページが表示されます。

URLポートレット

URLによって指定されたWebページのコンテンツを表示する、ポートレット・ビルダーを使用して作成されたポートレット。

ユーザー・インタフェース(UI)テンプレート(user interface (UI) template)

フル・ページ表示モードでのポートレット・ビルダー・ポートレットのルック・アンド・フィールを制御する共有ポートレット。ポートレットの構築中にUIテンプレートを選択すると、そのポートレットが表示されるページのタイトル、タイトルの背景、別のWebページへのリンク、および背景色とイメージが自動的に選択されます。

「構成済UIテンプレート」および「非構成済UIテンプレート」も参照してください。「HTMLテンプレート」および「Portalテンプレート」と対比してください。

ユーザー・レベルのキャッシュ

ユーザーごとにアイテムのコピーがキャッシュ(中間層上)に置かれるキャッシュ方法。このため、ユーザーには同じアイテムの異なるコンテンツが表示されます。

「システム・レベルのキャッシュ」と対比してください。

有効化ベースのキャッシュ

妥当性チェックを使用してキャッシュ・アイテムがまだ有効であるかどうかを確認するキャッシュ方法。これは、ポータル・キャッシュによって使用されるキャッシュ方法。ポータル・キャッシュ内のアイテムが使用される前に、PPEは、ポータル・リポジトリ、またはコンテンツの送信元のプロバイダにアクセスして、キャッシュされたアイテムがまだ有効かどうかを判断します。

「有効期限ベースのキャッシュ」および「無効化ベースのキャッシュ」と対比してください。

バージョニング

あるアイテムの複数のバージョンがOracle Metadata RepositoryのOracle Portalスキーマ内に同時に存在できるようにするメカニズム。この機能は、ドキュメントについてバージョンの変更を追跡する場合、または必要に応じて前のバージョンに戻す場合に役立ちます。

ビュー

仮想的な表であり、その行はデータベース内に実際には存在しないが、データベース内に物理的に格納された表に基づいています。

表示モード

実行時のページ表示。

「編集モード」と対比してください。

「表示」権限

Oracleインスタント・ポータルのページ上の権限レベルで、ユーザーはページ上のコンテンツを表示できます。すべてのユーザーがページをナビゲートし、ホーム・ページの「お気に入りコンテンツ」領域のアイテムを選択し、コンテンツを検索できます。

仮想プライベート・データベース

「VPD」を参照してください。

仮想プライベート・ポータル

同じポータル・インスタンス内で複数の会社または組織を安全にホスティングするための機能。

VPD

仮想プライベート・データベース。Oracleデータベースを活用して顧客をホスティングするASP向けの機能。基本的には、すべての顧客に対して1つの物理データベース・インスタンスを使用しますが、各顧客にとっては、独自のデータベースを所有しているように見えます。ユーザーは自分に関係のない情報を見ることができず、顧客は完全に分離されます。作業の大部分はデータベース・レベルで行われるため、中核となるアプリケーションで実施する変更はわずかであるか、またはまったく必要ありません。VPDの実装には基本的に次の2つの手順が必要であり、最初にコンテキスト列(会社名など)をすべてのデータベース表に追加し、次に、各表への問合せをログイン・ユーザーのコンテキストに基づいて制限するポリシーを実装します。VPDでは、この方法を使用して安全性の高い完全なサブスクライバの分離を提供します。

WAP

Wireless Application Protocol。ワイヤレス・ネットワークを使用するアプリケーションとサービスを開発するための、オープンな一連のグローバル・プロトコル。

Web Cache

「Oracle Web Cache」を参照してください。

Webクリッピング

ページ設計者がWebコンテンツを収集して単一のポータルに集約できるようにする機能。大規模な組織に散在している多数の様々なWebサイトのコンテンツを統合するために使用できます。

WebDAV

Web-based Distributed Authoring and Versioning。分散オーサリングおよびバージョニングをサポートする、HTTP 1.1のプロトコル拡張。WebDAVを使用すると、インターネットを透過的な読取りおよび書込みメディアとして利用できるようになります。つまり、コンテンツのチェックアウト、編集およびURLアドレスへのチェックインが可能となります。

Web Services for Remote Portlets

「WSRP」を参照してください。

Webプロバイダ

Oracle PortalによってHTTPリクエストを介してコールされ、HTML、XMLまたはWSRPのポートレット・コンテンツを戻すエンティティ。Webプロバイダは、特定のアプリケーション環境(Java、ASP、Perlなど)内で定義され、Oracle Portal外部のアプリケーションとして実行される、1つ以上のポートレットのプロキシとして機能します。Webプロバイダは、Webアクセス可能な情報源に特に適しています。

「プロバイダ」も参照してください。「データベース・プロバイダ」と対比してください。

Webサーバー

Webページを配信するプログラム。

Wireless Application Protocol

「WAP」を参照してください。

Wireless Markup Language

「WML」を参照してください。

ワイヤレス・ポータル

携帯電話などのモバイル機器からアクセス可能なポータル。

「Oracle Application Server Wireless」も参照してください。

ウィザード

プロセス全体を順を追ってユーザーに示すグラフィカル・インタフェース。Oracle Portalでは、データベース・プロバイダ、ポートレット、データベース・オブジェクト、ページ、ページ・グループおよびアイテムの作成にウィザードが使用されます。

WML

Wireless Markup Language。携帯端末向けにハイパーリンクに似たコンテンツとアプリケーションを定義するために使用する、XMLベースのマークアップ言語。

WSRP

Web Services for Remote Portlets (WSRP)。ユーザーを対象とした視覚的なWebサービスを、ポータルまたは他の中間Webアプリケーションにプラグ・アンド・プレイできるようにするWebサービスの標準。その標準性により、特定の言語(JSR 168、.NET、Perlなど)をベースとする標準対応のコンテナと任意のWSRPポータル間の相互運用が可能です。このため、WSRP対応のコンテナにデプロイされたポートレットは、その言語に関係なく、この標準をサポートするあらゆるポータル上にレンダリングできます。

XML

Extensible Markup Language。SGML構文のサブセットを使用してデータを記述するためのオープン標準。

XMLポートレット

XMLコードの実行結果を表示するOracle Portalポートレット。このポートレットを作成するには、XMLコードまたはXMLコードを指すURLを指定します。

XSL

eXtensible Stylesheet Language。スタイルシート内で使用される言語で、XMLドキュメントを変換、すなわちレンダリングします。

Zipファイル・アイテム

ユーザーがページに追加できるアイテムのタイプ。Zipファイル・アイテムによって、1回の操作で多数のファイルをアップロードできるようになります。このアイテムを使用して、ファイル・システムまたはWebサイトのコンテンツをOracle Metadata RepositoryのOracle Portalスキーマに移行できます。ZipファイルをOracle Portalにアップロードし、その後アップロードしたファイルを解凍すると、各ディレクトリについてページが作成され、各ファイルについてアイテムが作成されます。このアイテムは、ターゲット・ページに公開されます。

索引
A B C D E F G H I J L M N O P Q R S T U V W X

A

情報モード, 6.1.1.7

アクセス制御リスト

「ACL」を参照

ACL, 7.2.7.4

ポートレット権限, 7.2.7.4

権限, 7.2.7.4

プロバイダ権限, 7.2.7.4

add_category API, 12.3 add_content_area API, 12.1 add_folder API, 12.2 add_item API, 12.4, 12.4 add_item_ils_privileges API, 15.3.1 add_item_post_upload API, 12.4 add_perspective API, 12.3 ADF, 7.3.3 Apache Struts

ポートレットの作成, 7.3.2

概要, 7.3.1.2

API, 1.4.7

アクセスの提供, 9.3

サポート対象, 9.2, F.1

wwctx_api.get_nls_language, 9.5.2, 14.2

wwctx_api.set_context, 10.1

wwctx_api.set_nls_language, 14.3

wwpro_invalidation_api.execute_cache_invalidation, 9.4.3

wwsbr_api.add_category, 12.3

wwsbr_api.add_content_area, 12.1

wwsbr_api.add_folder, 12.2

wwsbr_api.add_item, 12.4, 12.4

wwsbr_api.add_item_ils_privileges, 15.3.1

wwsbr_api.add_item_post_upload, 12.4

wwsbr_api.add_perspective, 12.3

wwsbr_api.approve, 16.7

wwsbr_api.check_in_item, 11.2.3

wwsbr_api.check_out_item, 11.2.3

wwsbr_api.clear_cmef_context, 9.4.5

wwsbr_api.copy_folder, 11.4.2

wwsbr_api.copy_item, 11.4.1

wwsbr_api.delete_folder, 11.5.2

wwsbr_api.delete_ils_privilege, 15.3.2

wwsbr_api.delete_item, 11.5.1

wwsbr_api.enable_ils_for_item, 15.3

wwsbr_api.inherit_folder_privileges, 15.3.3

wwsbr_api.modify_folder, 11.1

wwsbr_api.modify_item, 11.2.2

p_addnewversion, 11.2.4

wwsbr_api.modify_item_post_upload, 12.4 wwsbr_api.move_category, 11.3.3 wwsbr_api.move_folder, 11.3.2 wwsbr_api.move_item, 11.3.1 wwsbr_api.move_perspective, 11.3.3 wwsbr_api.reject, 16.7 wwsbr_api.set_attribute, 11.2.1 wwsbr_api.undelete_item, 11.5.1 wwsbr_api.upload_blob, 12.4 wwsec_api.grantee_list, 15.1 wwsec_api.remove_group_acl, 15.2.2 wwsec_api.remove_user_acl, 15.2.2 wwsec_api.set_group_acl, 15.2.1 wwsec_api.set_user_acl, 15.2.1 wwsrc_api.get_all_items_xml, 13.4.3 wwsrc_api.get_item_xml, 13.4.4 wwsrc_api.item_search, 13.1 wwsrc_api.page_search, 13.2 wwsrc_api.specify_attributes, 13.3 Application Development Framework, 7.3.3 application.log, B.2.1 approve API, 16.7 属性

イベント, G.5

検索, 13.3

アイテムの設定, 11.2.1

値, 11.2.1

認証されているコンテンツ

シングル・サインオンおよび, 1.4.3, 5.1, 5.3

認証, 7.2.7.2.1

ポートレット・ビルダーの比較, 2.18

外部アプリケーション, 7.2.7.3.2

メッセージ, 7.2.7.7

なし, 7.2.7.3.3

パートナ・アプリケーション, 7.2.7.3.1

プロキシ

Webクリッピングおよび, B.4.5

サーバー, 7.2.7.2.3 シングル・サインオン, 7.2.7.3 認証, 7.2.7.2.2

B

BACK_LINK, 7.2.3.3.1

基本属性

値, 11.2.1

ベスト・プラクティス

情報モード, 6.1.1.7

共有画面モードでのCSS, 6.1.1.1.2

デフォルト編集モード, 6.1.1.3.1

編集モード, 6.1.1.2.1

エラー処理PL/SQL, 8.9.1

イベント処理PL/SQL, 8.10.1

Javaポートレット, 6.1

ヘルプ・モード, 6.1.1.6

共有画面モードでのHTML, 6.1.1.1.1

リンク・モード, 6.1.1.8

ナビゲーション, 6.1.2

PL/SQLプロシージャおよびファンクション, 8.1.2

プレビュー・モード, 6.1.1.4

セキュリティPL/SQL, 8.7.1

ブラウズ

Webクリッピングおよび, 5.2.2

C

キャッシュ, 7.2.9

アクティブ化, 7.2.9.2

追加, 7.2.9.3, 7.2.9.4, 7.2.9.5

有効期限ベース, 2.5, 7.2.9

有効期限ベースのPL/SQL, 8.8.4

無効化ポート, 7.2.9.4.2

無効化ベース, 2.5, 7.2.9

無効化ベースのPL/SQL, 8.8.5

手動によるキャッシュの無効化, 7.2.9.4.4

PL/SQL, 8.8

無効化ベースのキャッシュで使用するプロバイダ・サーブレット, 7.2.9.4.1

無効化ベースのキャッシュで使用するprovider.xml, 7.2.9.4.3

スタイル, 2.5

システム・レベル, 2.5

ユーザー・レベル, 2.5

有効化ベース, 2.5, 7.2.9

有効化ベースのPL/SQL, 8.8.3

カテゴリ

アイテムへの適用, 16.3.7.2.4

作成, 12.3

イベント, G.8

文字セット

Webクリッピングおよび, 5.1, 5.7

文字で区切られた値

スプレッドシートに基づいたポートレットの構築, 4.3

チャート・ポートレット

比較, 2.11

check_in_item API, 11.2.3 check_out_item API, 11.2.3 暗号マネージャ, 7.2.8.3.6 clear_cmef_context API, 9.4.5 セクションのクリッピング, 5.2.2 CMEF

概要, 16.1

カテゴリの適用, 16.3.7.2.4

パースペクティブの適用, 16.3.7.2.4

アイテムの承認, 16.3.7.2.3

ページの作成, 16.3.7.1.1

サブスクライバの作成, 16.3.1

アイテムの承認, 16.3.7.2.1

ページの削除, 16.3.7.1.4

アイテムの削除, 16.3.7.2.5

メッセージのデキュー, 16.2.2.3

CMEFイベントの有効化, 16.3.3

メッセージのエンキュー, 16.2.1

外部ワークフローの例, 16.8

例のインストール, 16.4

アイテムの承認, 16.3.7.2.2

アイテム通知の例, 16.6

アイテム検証の例, 16.7

メッセージのリスニング, 16.2.4

メッセージ・ペイロード, 16.3.6

ポータル・オブジェクトのイベント・ロギングの例, 16.5

サブスクライバの登録, 16.2.2.1, 16.3.2

サブスクライバの実行, 16.3.5

ページ・グループACLの更新, 16.3.7.1.3

ページACLの更新, 16.3.7.1.2

通信

HTTPS, 7.2.7.8

セキュリティ, 7.2.7.2.3

接続情報

OmniPortlet, 3.2.2.2

接続の問題

Webクリッピング, B.4.4

constructResourceURL, 6.1.2.1.4 コンテンツ

ページへの追加, 5.2

インラインでのレンダリング, 2.10

コンテンツ管理イベント・フレームワーク

「CMEF」を参照

コンテキスト

セッションの設定, 10.1

コンテキスト情報

PL/SQLへのアクセス, 8.6

ファクション・コールPL/SQL, 8.6.1

wwctx_apiパッケージを使用して取得, 8.6.2

Cookie

Webクリッピングおよび, 5.7

copy_folder API, 11.4.2 copy_item API, 11.4.1 CSS

共有画面モードのガイドライン, 6.1.1.1.2

カスタマイズ

PL/SQLセッション・ストアの実装, 8.4.2

PL/SQLのプリファレンス・ストア, 8.4.1

カスタマイズ

トランスポート, 7.2.8

カスタマイズ

「表示」ページ, 7.2.2.3

D

データ

フィルタリング, 3.2.3

データ・ソース

データのフィルタリング, 3.2.3

スプレッドシートの使用, 3.2.2.3

Webサービスの使用, 3.2.2.6

既存のWebページの使用, 3.2.2.7

SQLの使用, 3.2.2.4

ポートレットでの使用, 3.2.1

XMLの使用, 3.2.2.5

データベース・プロバイダ, 2.4.3, 2.4.3 DBA Studio, 16.2.2.2 DBMS_AQADM.ADD_SUBSCRIBERプロシージャ, 16.2.2.1 DBMS_AQADM.REMOVE_SUBSCRIBERプロシージャ, 16.2.2.1 DBMS_AQ.DEQUEUEプロシージャ, 16.2.2.3

CONSUMER_NAMEパラメータ, 16.2.2.3

DEQUEUE_MODEパラメータ, 16.2.2.3

NAVIGATIONパラメータ, 16.2.2.3

DBMS_AQ.LISTENプロシージャ, 16.2.4 デバッグ情報

Webクリッピングおよび, B.4.1

delete_folder API, 11.5.2 delete_ils_privilege API, 15.3.2 delete_item API, 11.5.1 デプロイ

プロパティ, D.2.4

テスト, D.2.3

PDK-Javaポートレット用のWARファイル, 6.5.4

デプロイ・プラン

自動的に作成, D.2.2

デキュー, 16.2.2.3 DESIGN_LINK, 7.2.3.3.1 その場で開発するポートレット, 2.7 その場で開発するポートレット, 2.1 DeviceClassヘッダー, 8.12

E

EARファイル, D.1.1

手動による作成, D.2.1.4

手動によるデプロイ, D.2.2

デフォルト編集モード, 3.2.6, 6.1.1.3 「デフォルトの編集」ページ, 7.2.2.2 編集モード, 6.1.1.2 「編集」ページ, 7.2.2.2 enable_ils_for_item API, 15.3 暗号化

例, 7.2.8.3.6

トランスポート, 7.2.8.3.4

メッセージ, 7.2.7.2.3

エンキュー, 16.2.1 エラー処理

PL/SQL, 8.9

エラー・メッセージ

Webクリッピング, B.4.2

エラー

Webクリッピングおよび, B.4.1, B.4.5

イベント処理

PL/SQL, 8.10

EVENT_LINK, 7.2.3.3.1 イベント, 7.2.3

ポートレットへの追加, 3.2.7

属性, G.5

カテゴリ, G.8

ポートレット・パラメータによる構成, 4.6

CMEFの有効化, 16.3.3

provider.xmlに生成されたコード, 7.2.3.4

アイテム・タイプ, G.6

アイテム, G.1

ページ・グループ, G.4

ページ・タイプ, G.7

ページ, G.2

パースペクティブ, G.9

送信, 7.2.3.4

タブ, G.3

テンプレート, G.10

OmniPortletでの使用, 3.3

例

スプレッドシートでのOmniPortletの構築, 4.3

WebサービスでのOmniPortletの構築, 4.2, 4.7

既存のWebページでのOmniPortletの構築, 4.5

XMLデータ・ソースでのOmniPortletの構築, 4.4

ポートレット・パラメータおよびイベントの構成, 4.6

CMEF向けインストール, 16.4

OmniPortlet, 4

HTMLレイアウトの使用, 4.7

execute_cache_invalidation API, 9.4.3 期限切れ

ポートレット・コンテンツ, 5.2.3

有効期限フィールド

Webクリッピングおよび, 5.2.3

有効期限ベースのキャッシュ, 2.5 エクスポート

参照, 7.2.8.3.5

参照による例, 7.2.8.3.7

カスタマイズ, 7.2.8

暗号化, 7.2.8.3.4

暗号化の例, 7.2.8.3.6

例, 7.2.8.2

JNDI変数, 7.2.8.3.2

ロギング・インタフェース, 7.2.8.1

プログラミング・インタフェース, 7.2.8.1

通信の保護, 7.2.8.3.1

セキュリティ, 7.2.8.3

exportData, 7.2.8.1, 7.2.8.1, 7.2.8.1 外部アプリケーション

認証, 7.2.7.3.2

Webクリッピングおよび, 1.4.3, 5.1, 5.3

外部リンク, 6.1.2.1.3

F

ファイルが見つからない, B.2.2.6

ファイル

ファイル・アイテムの作成, 12.4

アップロード, 12.4

フォーム

URLタイプによる構築, 7.2.3.3.3

Webクリッピングおよび, 5.2.3, 5.4.3

全画面モード, 6.1.1.5 ファジー・マッチング

Webクリッピング, 1.4.3, 5.1

G

ジェネレータ

PL/SQL, 8.2

getメソッド

JPSポートレットへの変換, B.2.2.11

get_all_items_xml API, 13.4.3 get_item_xml API, 13.4.4 get_nls_language API, 9.5.2, 14.2 grantee_list API, 15.1 ガイドライン

情報モード, 6.1.1.7

共有画面モードでのCSS, 6.1.1.1.2

デフォルト編集モード, 6.1.1.3.1

編集モード, 6.1.1.2.1

エラー処理PL/SQL, 8.9.1

イベント処理PL/SQL, 8.10.1

ヘルプ・モード, 6.1.1.6

共有画面モードでのHTML, 6.1.1.1.1

リンク・モード, 6.1.1.8

モバイル, PL/SQL, 6.1.4, 8.1.3

ナビゲーション, 6.1.2

プレビュー・モード, 6.1.1.4

セキュリティPL/SQL, 8.7.1

H

ヘルプ・モード, 6.1.1.6

HTML

共有画面モードのガイドライン, 6.1.1.1.1

HTMLレイアウト

OmniPortletでの使用, 4.7

htmlFormHiddenFields, 7.2.3.3.3 HTTPエラー・コード407

Webクリッピングおよび, B.4.5

httpd.conf, 7.2.7.6 HTTPS, 7.2.7.8

構成, 7.2.7.8

I

ID

検索, 10.3

ILS, 15.3

権限の定義, 15.3.1

アイテムの有効化, 15.3

ページの有効化, 15.3

イメージ

Webクリッピングのクリップ, B.4.7

リソース・プロキシ, 6.1.2.1.4

インポート

参照, 7.2.8.3.5

参照による例, 7.2.8.3.7

カスタマイズ, 7.2.8

暗号化, 7.2.8.3.4

暗号化の例, 7.2.8.3.6

JNDI変数, 7.2.8.3.2

ロギング・インタフェース, 7.2.8.1

プログラミング・インタフェース, 7.2.8.1

通信の保護, 7.2.8.3.1

セキュリティ, 7.2.8.3

importData, 7.2.8.1, 7.2.8.1, 7.2.8.1 inherit_folder_privileges API, 15.3.3 インライン・レンダリング, 2.10

Webクリッピングおよび, 1.4.3, 5.1

入力パラメータ

Webクリッピングおよび, 5.2.3, 5.4.3

内部リンク, 6.1.2.1.4 国際化

Webクリッピングおよび, 5.1

ポートレット内リンク, 6.1.2.1.1

URLパラメータ, 7.2.3.3.1

無効化ベースのキャッシュ, 2.5 ISO-8859-1文字セット, 5.7 アイテムID

検索, 10.3.4

アイテム・レベル・セキュリティ

「ILS」を参照

アイテム・タイプ

イベント, G.6

item_search API, 13.1 アイテム

カテゴリの適用, 16.3.7.2.4

パースペクティブの適用, 16.3.7.2.4

承認, 16.3.7.2.2

承認, 12.6, 16.3.7.2.3

アップロードされたファイルとの関連付け, 12.4

チェックイン, 11.2.3

チェックアウト, 11.2.3

コピー, 11.4.1

作成, 12.4, 16.3.7.2.1

ファイル・アイテムの作成, 12.4

権限の定義, 15.3.1

削除, 11.5.1, 16.3.7.2.5

編集, 11.2.2

ILSの有効化, 15.3

イベント, G.1

移動, 11.3.1

新規バージョン, 11.2.4

却下, 12.6

検索, 13.1

特定の属性の検索, 13.3

セキュリティ, 15.3

属性の設定, 11.2.1

パースペクティブの設定, 12.5

翻訳, 14.5

J

J2EEアプリケーション・サーバー, 2.4

Java Community Process, 2.2.3

Javaポートレット仕様

「JPS」を参照

Javaポートレット

外部アプリケーションに対する認証, 2.18.3

キャッシュ・スタイル, 2.5.2

コンテンツの取得, 2.9.3

チャート作成, 2.11.3

他のポートレット・ビルダーとの比較, 2.1

開発ツール, 2.6.2

イベント・サポート, 2.14.1

必要な専門知識, 2.3.3

ガイドライン, 6.1

多言語サポート, 2.16.1

ページ区切りサポート, 2.17.3

パラメータ・サポート, 2.13.2

コンテンツのインラインでのレンダリング, 2.10.3

セキュリティ, 2.15.2

用途適性, 2.2.3

ユーザー・インタフェース, 2.8.3

JavaScript

Webクリッピングおよび, 5.7

JNDI, 7.2.4

変数の宣言, 7.2.4.1

デプロイ・プロパティ, D.2.4

エクスポート, 7.2.8.3.2

インポート, 7.2.8.3.2

変数の取得, 7.2.4.3

変数値の設定, 7.2.4.2

変数の命名規則, 7.2.4.1.2

変数型, 7.2.4.1.1

PDK-Javaに用意された変数, 7.2.4.3

JPS, 6.2

ポートレットの作成, 6.3.1

ポートレットのデプロイ, 6.3.3

ポートレットのパーソナライズ, 7.1.1

JSR-168, 2.1

L

言語

アイテム, 14.5

セッションの設定, 14.3

文字列のロードPL/SQL, 8.11.2.1

文字列の取得PL/SQL, 8.11.2.2

言語サポート

「複数言語ポートレット」を参照

レイアウト

箇条書き, 3.2.5.4

チャート, 3.2.5.2

フォーム, 3.2.5.5

ニュース, 3.2.5.3

OmniPortlet, 3.2.5

表, 3.2.5.1

LDAP

「Oracle Internet Directory」を参照

制限

Webクリッピングおよび, 5.7

リンク・モード, 6.1.1.8

モバイルPL/SQLポートレット, 8.12

リンク

URLパラメータによる構築, 7.2.3.3.2

ポートレット, 6.1.2.1

ロード・バランサ

Webクリッピングおよび, B.4.4

ロギング

application.log, B.2.1

プロバイダ・レベル, B.2.1

Webクリッピング・ファイル, B.4.2

Webクリッピング・レベル, B.4.1

LOGIN_LINK, 7.2.3.3.1 拒否されたログオンのメッセージ

Webクリッピングおよび, B.4.4

M

マトリックス, ポートレット・テクノロジ, 2

メッセージ・ペイロード, 16.3.6

メッセージ

500, B.2.2.5, B.2.2.10

認証, 7.2.7.7

デキュー, 16.2.2.3

暗号化, 7.2.7.2.3

エンキュー, 16.2.1

リスニング, 16.2.4

移行

プリファレンス・ストア, 7.2.2

MIMEタイプ

モバイル・ポートレットの設定, 8.12

MLS

「複数言語ポートレット」を参照

モバイル

構成データへのアクセス, 7.2.10.1

デバイス・タイプの決定, 8.12

PL/SQLのDeviceClassヘッダー, 8.12

PL/SQLのリンク・モード, 8.12

ナビゲーション, 7.2.10.2

PL/SQLのガイドライン, 6.1.4, 8.1.3

ポートレット, PDK-Java, 7.2.10

ポートレット, PL/SQL, 8.12

mod_osso

Webクリッピングおよび, 5.7

モード

デフォルト編集, 3.2.6

モード

概要, 6.1.1.7

レンダリングの追加, 7.2.1

編集, 6.1.1.2

デフォルトの編集, 6.1.1.3

全画面, 6.1.1.5

ヘルプ, 6.1.1.6

リンク, 6.1.1.8

表示モードのリスト, 6.1.1

プレビュー, 6.1.1.4

共有画面, 6.1.1.1

modify_folder API, 11.1 modify_item API, 11.2.2

p_addnewversion, 11.2.4

modify_item_post_upload API, 12.4 move_category API, 11.3.3 move_folder API, 11.3.2 move_item API, 11.3.1 move_perspective API, 11.3.3 多言語

PL/SQLポートレット, 8.11

多言語ポートレット

比較, 2.16

provider.xml, 7.2.11.2.2

リソース・バンドル, 7.2.11.2.1

レンダラの更新, 7.2.11.2.1

N

ナビゲーション

ポートレット内での実装, 7.2.3.3.4

リンクAPI, 7.2.3.3.2

Webクリッピング, 1.4.3, 5.1

Javaポートレット, 6.1.2

NLS

「複数言語ポートレット」を参照

Webクリッピングおよび, 5.1

O

OmniPortlet, 1.4.4

ページへの追加, 4.1

外部アプリケーションに対する認証, 2.18.2

スプレッドシートに基づく構築, 4.3

既存のWebページに基づく構築, 4.5

XMLデータ・ソースに基づく構築, 4.4

文字で区切られた値に基づく構築, 4.3

箇条書きレイアウト, 3.2.5.4

キャッシュ・スタイル, 2.5.1

コンテンツの取得, 2.9.2

チャート・レイアウト, 3.2.5.2

チャート作成, 2.11.2

他のポートレット・ビルダーとの比較, 2.1

ポートレット・パラメータおよびイベントの構成, 4.6

接続情報, 3.2.2.2

定義, 3.1

開発ツール, 2.6.1

イベント・サポート, 2.14.1

「イベント」タブ, 3.2.7

例, 4

必要な専門知識, 2.3.2

「フィルタ」タブ, 3.2.3

データのフィルタリング, 3.2.3

フォーム・レイアウト, 3.2.5.5

HTMLレイアウトの例, 4.7

「レイアウト」タブ, 3.2.5

多言語サポート, 2.16.1

ニュース・レイアウト, 3.2.5.3

ページ区切りサポート, 2.17.2

パラメータ・サポート, 2.13.1

プロキシ認証, 3.2.2.1

コンテンツのインラインでのレンダリング, 2.10.2

セキュリティ, 2.15.1

「ソース」タブ, 3.2.2

スプレッドシートの例, 4.3

表レイアウト, 3.2.5.1

トラブルシューティング, B.3

「タイプ」タブ, 3.2.1

用途適性, 2.2.2

データ・ソースの使用, 3.2.1

ウィザードの使用, 3.2

「表示」タブ, 3.2.4

Webページの例, 4.5

Webサービスの例, 4.2, 4.7

XMLの例, 4.4

Oracle Diagnostics and Tuning Pack, 16.2.2.2 Oracle Enterprise Manager

DBA Studio, 16.2.2.2

Oracle Internet Directory, 7.2.7.9 Oracle JDeveloper

JPSポートレットのデプロイ, 6.3.3

PDK-Javaポートレットのデプロイ, 6.5.4

WARファイルのデプロイ, 6.5.4

Oracle Streamsアドバンスト・キューイング

およびCMEF, 16.2

Oracle strutsポートレット, 7.3.1.3 OracleASメタデータ・リポジトリ, 9.1 OracleAS Portal

リポジトリ, 2.4.4

データ・ソースの使用, 3.2.1

OracleAS Portalページ

Webクリッピングおよび, 5.7

OracleAS Web Cache

無効化ポート, 7.2.9.4.2, 7.2.9.4.3

無効化ベースのキャッシュ, 2.5

P

パッケージ

PL/SQLを使用したポートレットの実装, 8.3.1

PL/SQLを使用したプロバイダの実装, 8.3.2

ページ

部分的なリフレッシュ, 7.2.3.3.4

ページ設計者, 定義, はじめに ページ・グループ

作成, 12.1

CMEFイベントの有効化, 16.3.3

イベント, G.4

すべてを検索, 13.1

特定して検索, 13.2

ACLの更新, 16.3.7.1.3

ページ管理者

「ページ設計者」を参照

ページ・メタデータ, 2.4.4 ページ・パラメータ, 2.12 ページ・タイプ

イベント, G.7

PAGE_LINK, 7.2.3.3.1 page_search API, 13.2 ページ

コピー, 11.4.2

作成, 12.2, 16.3.7.1.1

アイテムの作成, 12.4

ファイル・アイテムの作成, 12.4

削除, 11.5.2, 16.3.7.1.4

編集, 11.1

ILSの有効化, 15.3

イベント, G.2

移動, 11.3.2

検索, 13.2

パースペクティブの設定, 12.5

ACLの更新, 16.3.7.1.2

ポートレットでのページ区切りサポート, 比較, 2.17 Parallel Page Engine (PPE), 2.4.4 パラメータ, 7.2.3

追加, 7.2.3.2

URLによるリンクの構築, 7.2.3.3.2

ポートレット・パラメータおよびイベントの構成, 4.6

provider.xmlに生成されたコード, 7.2.3.2

PL/SQLのパブリック・パラメータのマッピング, 8.5.2

PL/SQLのページ・パラメータの引渡し, 8.5.2

PL/SQLのプライベート・パラメータの引渡し, 8.5.1

PL/SQL, 8.5

PL/SQLの修飾パラメータ, 8.5.1

値の取得PL/SQL, 8.5.3

種類, 2.12

PL/SQLの非修飾パラメータ, 8.5.1

OmniPortletでの使用, 3.3

Webクリッピングおよび, 5.2.3, 5.4.3

パラメータとイベント

OmniPortletでの使用, 3.3

パートナ・アプリケーション, 7.2.7.3.1 PDK, 1.4.7 PDK-Java, 6.4

他のポートレット・ビルダーとの比較, 2.1

ポートレットのデプロイ, 6.5.4

JNDI変数, 7.2.4.3

プロバイダの手動によるパッケージ, D

ポートレットのパーソナライズ, 7.2.2

ポートレット・ウィザード, 6.5.1

レンダリング・モード, 7.2.1

ポートレットとプロバイダのテスト, 6.5.3

PDK-PL/SQL

他のポートレット・ビルダーとの比較, 2.1

保留中のアイテム

承認, 12.6

却下, 12.6

パフォーマンス

キャッシュ, 7.2.9

PL/SQLのキャッシュ, 8.8

個人用ページ

Webクリッピングおよび, 5.4.1

パーソナライズ

ウィザードで生成されたコード, 7.2.2.2.1

「編集」ページと「デフォルトの編集」ページ, 7.2.2.2

JPSポートレット, 7.1.1

生成されたコードの変更, 7.2.2.2.2

PDK-Javaポートレット, 7.2.2

コンテンツのパーソナライズ

Webクリッピング, 5.4.1, 5.4.3

パースペクティブ

アイテムへの適用, 16.3.7.2.4

作成, 12.3

イベント, G.9

アイテムの設定, 12.5

ページの設定, 12.5

PL/SQL

コンテキスト情報へのアクセス, 8.6

ポートレットの構築, 8.3

キャッシュ, 8.8

エラー処理, 8.9

イベント処理, 8.10

ジェネレータ, 8.2

ポートレット・パッケージの実装, 8.3.1

プロバイダ・パッケージの実装, 8.3.2

パラメータ, 8.5

プリファレンス・ストア, 8.4.1

生成されたポートレットの公開, 8.2.3

推奨されるプロシージャおよびファンクション, 8.1.2

ジェネレータの実行, 8.2.2

セキュリティ, 8.7

セッション・ストア, 8.4.2

starterプロバイダ・サンプル, 8.3

ジェネレータのXML, 8.2.1

PL/SQLポートレット

外部アプリケーションに対する認証, 2.18.4

構築に必要な専門知識, 2.3.5

キャッシュ・スタイル, 2.5.3

コンテンツの取得, 2.9.4

チャート作成, 2.11.5

他のポートレット・ビルダーとの比較, 2.1

開発ツール, 2.6.3

イベント・サポート, 2.14.2

モバイルのガイドライン, 6.1.4, 8.1.3

多言語サポート, 2.16.1

ページ区切りサポート, 2.17.3

パラメータ・サポート, 2.13.2

コンテンツのインラインでのレンダリング, 2.10.5

セキュリティ, 2.15.4

用途適性, 2.2.5

ユーザー・インタフェース, 2.8.3

ポータル開発者, 定義, はじめに ポータル・リンク, 6.1.2.1.2 Portalスキーマ

パスワードおよびWebクリッピング, B.4.4

Portalツール

OmniPortlet, 3.1

ポータル

概要, 1.1

データ・ソースの使用, 3.2.1

ポートレット

リフレッシュ, 7.2.3.3.4

ポートレット・ビルダー

キャッシュ・スタイル, 2.5.1

チャート作成, 2.11.4

他のポートレット・ビルダーとの比較, 2.1

開発ツール, 2.6.1

イベント・サポート, 2.14.2

必要な専門知識, 2.3.4

多言語サポート, 2.16.2

ページ区切りサポート, 2.17.4

パラメータ・サポート, 2.13.1

コンテンツのインラインでのレンダリング, 2.10.4

セキュリティ, 2.15.3

用途適性, 2.2.4

ポートレット開発者,定義, はじめに ポートレット・パラメータ

構成, 4.6

ポートレット・ウィザード

パーソナライズ用に生成されたコード, 7.2.2.2.1

生成されたコードの変更, 7.2.2.2.2

PDK-Java, 6.5.1

PortletDefintion, 7.2.8.1 PortletInstance, 7.2.8.1 PortletRenderer, 7.2.2 ポートレット

ヘッダーとフッターの追加, 3.2.4

イベントの追加, 3.2.7

PL/SQLを使用した構築, 8.3

箇条書きレイアウト, 3.2.5.4

キャッシュ, PL/SQL, 8.8

レイアウトの変更, 3.2.5

表示オプションの変更, 3.2.4

チャート・レイアウト, 3.2.5.2

コンテキスト情報PL/SQL, 8.6

Strutsポートレットの作成, 7.3.2

JPS準拠ポートレットの作成, 6.3.1

カスタマイズのエクスポート, 7.2.8

定義, 1.2

JPS準拠ポートレットのデプロイ, 6.3.3

PDK-Java準拠ポートレットのデプロイ, 6.5.4

デプロイ, 2.4

開発ツール, 2.6

エラー処理PL/SQL, 8.9

イベント処理PL/SQL, 8.10

カスタマイズのエクスポート, 7.2.8

機能と特性, 2

フォーム・レイアウト, 3.2.5.5

ガイドライン, Java, 6.1

ガイドライン, PL/SQL

ベスト・プラクティス, 8.1

ナビゲーションの実装, 7.2.3.3.4 Java, 6, 7 Java標準, 2.1 リンク, 6.1.2.1 モバイルのガイドライン, 6.1.4, 8.1.3 モバイル, PDK-Java, 7.2.10 モバイル, PL/SQL, 8.12 モードのリスト, 6.1.1 多言語, 7.2.11 多言語のためのPL/SQL, 8.11 リンクへのナビゲーションAPI, 7.2.3.3.2 ニュース・レイアウト, 3.2.5.3 表示されない, B.2.7 OmniPortlet, 1.4.4 複雑な設定が不要, 1.4.1 パッケージ, PL/SQL, 8.3.1 PDK-Java, 6.5.1 JPSのパーソナライズ, 7.1.1 PDK-Javaのパーソナライズ, 7.2.2 PL/SQL, 8 PL/SQLパラメータ, 8.5 ポートレット・ビルダー, 1.4.5 権限, 7.2.7.4 プロバイダ, 2.4 生成されたポートレットの公開, 8.2.3 レコード, PL/SQLのモバイル対応, 8.12 セキュリティ, 7.2.7 セキュリティ・マネージャ, 7.2.7.5 セキュリティPL/SQL, 8.7 表レイアウト, 3.2.5.1 テクノロジ, 2 PDK-Javaのテスト, 6.5.3 URLタイプ, 7.2.3.3.1 Webクリッピング, 1.4.3 Webソース, 1.2 プリファレンス・ストア, 7.2.2

PL/SQLでの作成およびアクセス, 8.4.1.2

移行ユーティリティ, 7.2.2

PL/SQL, 8.4.1

PrefStoreTransporter, 7.2.8.3.7 プレビュー・モード, 6.1.1.4 プライベート・ポートレット・パラメータ, 2.12 権限, 7.2.7.4

アイテムの定義, 15.3.1

ポートレット, 7.2.7.4

プロバイダ, 7.2.7.4

取得, 15.1

プロパティ

Webクリッピング・ポートレット, 5.2.3, 5.4.3

provider_record, 8.13.2 ProviderInstance, 7.2.8.1 プロバイダ

アーキテクチャ, 2.4.4

データベース・プロバイダ, 2.4.3

ロギング・レベル, B.2.1

手動によるパッケージ, D

パッケージ, PL/SQL, 8.3.2

ポートレットのデプロイ, 2.4

権限, 7.2.7.4

JPSの登録, 6.3.4

PDK-Javaの登録, 6.5.5

プログラムによる登録, 8.13

登録, 2.4.5

runTest, E.2.2

無効化ベースのキャッシュのサーブレット, 7.2.9.4.1

テスト・ハーネス, E.2

テスト・ページ, E.1

provider.xml

無効化ベースのキャッシュのアクティブ化, 7.2.9.4.3

イベント, 7.2.3.4

多言語, 7.2.11.2.2

パラメータ, 7.2.3.2

ポートレットのリソース・バンドル, 7.2.11.2.2

設定情報, 7.2.2.4

ポートレットのリソース・バンドル, 7.2.11.2.2

セッション, 7.2.6.2

レンダリング・モードの更新, 7.2.1.3

provsyns.sqlスクリプト, 9.3 プロキシ認証

OmniPortlet, 3.2.2.1

URLベースのポートレットおよび, 5.6.5

Webクリッピングおよび, 1.4.3, 5.1, B.4.5

プロキシ・サーバーの設定

Webクリッピングおよび, B.4.4

プロキシ, リソース, 6.1.2.1.4 パブリック・ポートレット・パラメータ, 2.12

Q

キュー

サブスクライバの登録, 16.2.2.1

WWSBR_EVENT_ERR_Q, 16.2.3

WWSBR_EVENT_Q, 16.2.1

R

リフレッシュ

部分的なページ, 7.2.3.3.4

登録

JPSポートレット, 6.3.4

PDK-Javaポートレット, 6.5.5

プログラムによるプロバイダの登録, 8.13

トラブルシューティング, B.2.2.3

reject API, 16.7 remove_group_acl API, 15.2.2 remove_user_acl API, 15.2.2 レンダリング・モード, 7.2.1

provider.xmlの更新, 7.2.1.3

リソース

プロキシ, 6.1.2.1.4

リソース・バンドル, 7.2.11.2.1

レンダラの更新, 7.2.11.2.1

リソース・リンク, 6.1.2.1.4 リソース・プロキシ

Webクリッピングおよび, B.4.4

runTest, E.2.2

S

検索

すべてのページ・グループ, 13.1

アイテム, 13.1

結果の制限, 13.2

ページ, 13.2

特定の属性, 13.3

特定のページ・グループ, 13.2

セクション

Webクリッピングおよび, 5.2.2

セキュア・コンテンツ・リポジトリ・ビュー, 9.2.1, F.2 セキュリティ, 7.2.7

認証, 7.2.7.2.1

認証, 7.2.7.2.2

PL/SQLでのコーディング, 8.7.2

通信, 7.2.7.2.3

機能, 7.2.7.2

エクスポート, 7.2.8.3

インポート, 7.2.8.3

トランスポート通信, 7.2.8.3.1

PL/SQLのガイドライン, 8.7.1

PL/SQLの実装, 8.7

マネージャ, 7.2.7.5

メッセージ認証, 7.2.7.7

サーバー, 7.2.7.6

サービス

デフォルト, D.2.1.2

識別子, D.1.2

名前, D.1.2

セッション

コンテキスト, 10.1

言語, 14.3

セッション情報, 7.2.6

有効なセッションのチェック, 7.2.6.2

provider.xmlで有効にする, 7.2.6.2

記憶域の実装, 7.2.6.2

セッション・ストア

PL/SQLでの作成およびアクセス, 8.4.2

PL/SQL, 8.4.2

set_attribute API, 11.2.1 set_context API, 10.1 set_group_acl API, 15.2.1 set_nls_language API, 14.3 set_user_acl API, 15.2.1 共有画面モード, 6.1.1.1 表示モード

リスト, 6.1.1

「表示」ページ, 7.2.2.3 Simple Object Access Protocol (SOAP), 2.4 シングル・サインオン

Webクリッピングおよび, 1.4.3, 5.1, 5.3

シングル・サインオン, 7.2.7.3

ポートレット・ビルダーの比較, 2.18

外部アプリケーション, 2.18, 7.2.7.3.2

パートナ・アプリケーション, 7.2.7.3.1

SOAP, 2.4 specify_attributes API, 13.3 スプレッドシート

スプレッドシートに基づいたポートレットの構築, 4.3

OmniPortletの構築, 4.3

データ・ソースとして使用, 3.2.2.3

SQL

データ・ソースとして使用, 3.2.2.4

SSL, 7.2.7.8

構成, 7.2.7.8

starterプロバイダ・サンプル, 8.3 状態

Webクリッピングの確認, B.4.3

文字列

言語のロードPL/SQL, 8.11.2.1

言語の取得PL/SQL, 8.11.2.2

Struts

JDeveloperでポートレットを構築, 7.3

ポートレットの作成, 7.3.2

OracleAS Portalとの統合, 7.3.1.3

概要, 7.3.1.2

サブスクライバ

作成, 16.3.1

外部ワークフローの例, 16.8.3.4

アイテム通知の例, 16.6

アイテム検証の例, 16.7

ポータル・オブジェクトのイベント・ロギングの例, 16.5

登録, 16.2.2.1, 16.3.2

実行, 16.3.5

サポートされているAPI, 9.2 サポートされているビュー, 9.2.1, F.2

T

タブ

イベント, G.3

テクノロジ, ポートレット, 2 テンプレート

イベント, G.10

用語, 9.2.2 テスト・ハーネス, E.2 テスト・ページ

プロバイダ, E.1

Webクリッピング, B.4.3

テスト

PDK-Javaのポートレットとプロバイダ, 6.5.3

「タイムアウト」フィールド

Webクリッピングおよび, 5.2.3

タイムアウト

トラブルシューティング, B.2.2.9

翻訳

作成, 14.5

トランスポート

参照, 7.2.8.3.5

参照による例, 7.2.8.3.7

カスタマイズ, 7.2.8

暗号化, 7.2.8.3.4

暗号化の例, 7.2.8.3.6

例, 7.2.8.2

JNDI変数, 7.2.8.3.2

ロギング・インタフェース, 7.2.8.1

プログラミング・インタフェース, 7.2.8.1

通信の保護, 7.2.8.3.1

セキュリティ, 7.2.8.3

トラブルシューティング

ページへのポートレットの追加, B.2.2.8

プロバイダへのポートレットの追加, B.2.2.4

インストールおよびデプロイ, B.2.2

javaポートレット, B.2

OmniPortlet, B.3

ポートレットをコンパイルできない, B.2.3

ポートレットが表示されない, B.2.7

登録, B.2.2.3

template.ear, B.2.2.2

タイムアウト, B.2.2.9

Webクリッピング, B.4

XMLパーサー, B.2.2.7

U

undelete_item API, 11.5.1

upload_blob API, 12.4

「URLリライト」フィールド

Webクリッピングおよび, 5.2.3

URLベースのポートレット

Webクリッピングへの移行, 1.4.3, 5.1

URL

フォーム, 7.2.3.3.3

Webクリッピングへの指定, 5.2.2, 5.3

ポートレットのタイプ, 7.2.3.3.1

UrlUtils.constructLink, 7.2.3.3.2 ユーザー

ページ設計者, はじめに

ポータル開発者, はじめに

ポートレット開発者, はじめに

UTF-8文字セット

Webクリッピングおよび, 5.1

V

有効化ベースのキャッシュ, 2.5

変数

JNDIの宣言, 7.2.4.1

JNDI, 7.2.4

JNDIの命名規則, 7.2.4.1.2

PDK-Javaに用意されたJNDI, 7.2.4.3

JNDI型, 7.2.4.1.1

JNDI変数の取得, 7.2.4.3

JNDIの値の設定, 7.2.4.2

バージョン

新規, 11.2.4

表示モード, 6.1.1.1 ビュー

アクセスの提供, 9.3

サポート対象, 9.2.1, F.2

WWSBR_ALL_CATEGORIES, F.2.1

WWSBR_ALL_CONTENT_AREAS, F.2.2

WWSBR_ALL_FOLDER_REGIONS, F.2.3

WWSBR_ALL_FOLDERS, F.2.4

WWSBR_ALL_ITEMS, 10.3.4, F.2.5

WWSBR_ALL_NAVIGATION_BARS, F.2.6

WWSBR_ALL_PERSPECTIVES, F.2.7

WWSBR_ALL_STYLES, F.2.8

WWSBR_APPROVER, F.2.9

WWSBR_ATTRIBUTES, F.2.10

WWSBR_CONTENT_AREA_APPROVAL, F.2.11

WWSBR_CONTENT_AREA_ITEM_TYPES, F.2.12

WWSBR_FOLDER_ATTRIBUTES, F.2.13

WWSBR_FOLDER_PERSPECTIVES, F.2.14

WWSBR_FOLDER_TYPE_ATTRIBUTES, F.2.15

WWSBR_FOLDER_TYPES, F.2.16

WWSBR_ITEM_APPROVAL, F.2.17

WWSBR_ITEM_ATTRIBUTES, F.2.18

WWSBR_ITEM_PERSPECTIVES, F.2.19

WWSBR_ITEM_TYPE_ATTRIBUTES, F.2.20

WWSBR_ITEM_TYPES, F.2.21

WWSBR_SUBSCRIPTION, F.2.22

WWSBR_USER_FOLDERS, F.2.23

WWSBR_USER_PAGES, F.2.24

W

WARファイル, D.1.1

手動による作成, D.2.1.3

PDK-Java, 6.5.4

Webクリッピング

外部アプリケーションに対する認証, 2.18.1

キャッシュ・スタイル, 2.5.1

コンテンツの取得, 2.9.1

チャート作成, 2.11.1

他のポートレット・ビルダーとの比較, 2.1

接続の問題, B.4.4

開発ツール, 2.6.1

イベント・サポート, 2.14.1

必要な専門知識, 2.3.1

ファイアウォールおよび, B.4.4

フォームおよび, 5.2.3, 5.4.3

制限, 5.7

ロード・バランサおよび, B.4.4

ロギング・レベルおよび, B.4.1

多言語サポート, 2.16.1

パラメータ・サポート, 2.13.1

個人用ページおよび, 5.4.1

プロキシ認証, B.4.5

プロキシ・サーバーおよび, B.4.4

コンテンツのインラインでのレンダリング, 2.10.1

リバース・プロキシおよび, B.4.4

検索, 5.4.2

セキュリティ, 2.15.1

テスト・ページ, B.4.3

トラブルシューティング, B.4

用途適性, 2.2.1

ユーザー・インタフェース, 2.8.1

Webクリッピング・ポートレット, 1.4.3, 5

追加, 5.2

プロパティ, 5.2.3, 5.4.3

Webクリッピング・プロバイダ, 5 Webクリッピング・スタジオ

使用, 5.2.2

Webコンテンツ

ページへの追加, 5.2

ブラウズ, 5.2.2

期限切れ, 5.2.3

再利用, 1.4.3, 5.1

指定, 5.2.2, 5.3

タイムアウト値, 5.2.3

Webページ

既存のWebページに基づくポートレットの構築, 4.5

OmniPortletの構築, 4.5

データ・ソースとして使用, 3.2.2.7

Webプロバイダ, 2.4.1 Webサービス

OmniPortletの構築, 4.2, 4.7

データ・ソースとして使用, 3.2.2.6

Web Services for Remote Portlets

「WSRP」を参照

Webソース, 1.2 web.xmlファイル

Webクリッピング, B.4.4

WSRP, 2.1, 2.4, 6.2 WSRPプロデューサ, 2.4.2 wwctx_api

コンテキスト情報, 8.6.2

WWCTX_APIパッケージ

get_nls_language API, 9.5.2, 14.2

set_context API, 10.1

set_nls_language API, 14.3

WWPRO_API_INVALIDATIONパッケージ

execute_cache_invalidation API, 9.4.3

wwpro_api_provider_registry.register_provider, 8.13.3 WWSBR_ALL_CATEGORIESビュー, F.2.1 WWSBR_ALL_CONTENT_AREASビュー, F.2.2 WWSBR_ALL_FOLDER_REGIONSビュー, F.2.3 WWSBR_ALL_FOLDERSビュー, F.2.4 WWSBR_ALL_ITEMSビュー, 10.3.4, F.2.5 WWSBR_ALL_NAVIGATION_BARSビュー, F.2.6 WWSBR_ALL_PERSPECTIVESビュー, F.2.7 WWSBR_ALL_STYLESビュー, F.2.8 WWSBR_APIパッケージ

add_category API, 12.3

add_content_area API, 12.1

add_folder API, 12.2

add_item API, 12.4, 12.4

add_item_ils_privileges API, 15.3.1

add_item_post_upload API, 12.4

add_perspective API, 12.3

approve API, 16.7

check_in_item API, 11.2.3

check_out_item API, 11.2.3

clear_cmef_context API, 9.4.5

copy_folder API, 11.4.2

copy_item API, 11.4.1

delete_folder API, 11.5.2

delete_ils_privilege API, 15.3.2

delete_item API, 11.5.1

enable_ils_for_item API, 15.3

inherit_folder_privileges API, 15.3.3

modify_folder API, 11.1

modify_item API, 11.2.2

p_addnewversion, 11.2.4

modify_item_post_upload API, 12.4 move_category API, 11.3.3 move_folder API, 11.3.2 move_item API, 11.3.1 move_perspective API, 11.3.3 reject API, 16.7 set_attribute API, 11.2.1 undelete_item API, 11.5.1 upload_blob API, 12.4 WWSBR_APPROVERビュー, F.2.9 WWSBR_ATTRIBUTESビュー, F.2.10 WWSBR_CONTENT_AREA_APPROVALビュー, F.2.11 WWSBR_CONTENT_AREA_ITEM_TYPESビュー, F.2.12 WWSBR_EVENT_ERR_Qキュー, 16.2.3 WWSBR_EVENT_Qキュー

デキュー, 16.2.2.3

エンキュー, 16.2.1

WWSBR_FOLDER_ATTRIBUTESビュー, F.2.13 WWSBR_FOLDER_PERSPECTIVESビュー, F.2.14 WWSBR_FOLDER_TYPE_ATTRIBUTESビュー, F.2.15 WWSBR_FOLDER_TYPESビュー, F.2.16 WWSBR_ITEM_APPROVALビュー, F.2.17 WWSBR_ITEM_ATTRIBUTESビュー, F.2.18 WWSBR_ITEM_PERSPECTIVESビュー, F.2.19 WWSBR_ITEM_TYPE_ATTRIBUTESビュー, F.2.20 WWSBR_ITEM_TYPESビュー, F.2.21 WWSBR_SUBSCRIPTIONビュー, F.2.22 WWSBR_USER_FOLDERSビュー, F.2.23 WWSBR_USER_PAGESビュー, F.2.24 WWSEC_APIパッケージ

grantee_list API, 15.1

remove_group_acl API, 15.2.2

remove_user_acl API, 15.2.2

set_group_acl API, 15.2.1

set_user_acl API, 15.2.1

WWSRC_APIパッケージ

get_all_items_xml API, 13.4.3

get_item_xml API, 13.4.4

item_search API, 13.1

page_search API, 13.2

specify_attributes API, 13.3

X

XML

XMLに基づいたポートレットの構築, 4.4

OmniPortletの構築, 4.4

PL/SQLジェネレータ, 8.2.1

トラブルシューティング, B.2.2.7

データ・ソースとして使用, 3.2.2.5

XMLプロバイダ定義

「provider.xml」を参照

オラクル社の法律上の注意点について

コピーライトについて

Copyright © 1994-2014, Oracle and/or its affiliates.All rights reserved.

商標と登録商標について

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の登録商標です。

ライセンス制約の保証と結果的に生じる損害の免責

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

保証免責

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

制限付権利

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

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）、その他の対策を講じることは使用者の責任となります。このソフトウェアもしくはハードウェアを危険が伴うアプリケーションで使用したことに起因して損害が発生しても、オラクル社およびその関連会社は一切の責任を負いかねます。

第三者のコンテンツ、製品、サービスに対する免責事項

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

ドラフトのアルファ版およびベータ版ドキュメントについて

このドキュメントが試作版の場合:

このドキュメントは試作版であり、デモおよび暫定使用のみを目的としたものです。このソフトウェアを使用するハードウェアに限定するものではありません。オラクル社およびその関連会社は、このドキュメントに関して一切の責任を負わず、いかなる保証もいたしません。また、このドキュメントを使用したことによって損失、費用、あるいは損害が発生しても、一切の責任を負いかねます。