Fusion Middleware Oracle WebCenter WSRP Producer for .NET開発ガイド

11g リリース1(11.1.1.6.0)

B69391-01(原本部品番号:E14117-05)

目次

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

はじめに

- 対象読者

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

- 関連ドキュメント

- 表記規則

1 Oracle WebCenter WSRP Producer for .NETの概要

- 1.1 Oracle WebCenter WSRP Producer for .NETについて

- 1.2 その他のドキュメント

2 Oracle WebCenter WSRP Producer for .NET構成ファイルの理解

- 2.1 ポートレット・ノード

- 2.2 ポートレット・コンテンツ変換ルールセット

- 2.2.1 カスタム・ルールの作成

3 必要なスクリプト・ファイルの管理

- 3.1 必要なスクリプト・ファイルの管理

4 セキュリティ・オプションの構成

- 4.1 WS-Security (WSS)の構成

- 4.1.1 WSDLの構成

- 4.1.2 Web.configの構成

- 4.2 SSLの構成

5 一般的な開発シナリオの実装

- 5.1 ポートレットとしてのWebパーツの追加

- 5.2 ASP.NET AJAXコントロールを備えたWebパーツの追加

- 5.2.1 .NET Frameworkの外側のAJAXの管理

- 5.3 ASP.NETアプリケーションの追加

- 5.4 ヘルプ・ページの追加

- 5.5 マークアップ変換の使用方法

- 5.5.1 テキストの変換

- 5.5.2 カスタム・ルールセットの作成

- 5.6 ポートレット・スタイルの使用方法

- 5.7 JavaScriptを使用したポートレット間通信の使用方法

- 5.8 ユーザー・プロファイル・データの追加

- 5.9 セキュリティ・トークンの設定

- 5.9.1 Webパーツでのトークンの表示

- 5.9.2 デフォルトのSAMLCredentialMapperV2を使用したOracle WebLogic Portal

- 5.9.3 カスタム署名鍵を使用したOracle WebLogic Portal

- 5.9.4 Oracle WebLogic Portal用のUNT

- 5.9.5 Oracle WebCenter Portal用のSAML

- 5.9.6 Oracle WebCenter Portal用のUNT

- 5.10 Oracle WebCenter Portal機能の使用方法

- 5.10.1 Oracle WebCenter Portalのカスタマイズの使用方法

- 5.10.2 Oracle WebCenter Portalパラメータの使用方法

Oracle® Fusion Middleware

Oracle WebCenter WSRP Producer for .NET開発ガイド

11g リリース1(11.1.1.6.0)

B69391-01(原本部品番号:E14117-05)

2011年11月

Oracle Fusion Middleware Oracle WebCenter WSRP Producer for .NET開発ガイド, 11g リリース1 (11.1.1.6.0)

B69391-01

Copyright © 2010, 2011, Oracle and/or its affiliates.All rights reserved.

原本著者:  Jennifer Shipman

原本協力者:  Promila Chitkara

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

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

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

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およびJavaはOracle およびその関連企業の登録商標です。その他の名称は、それぞれの所有者の商標または登録商標です。

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

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

はじめに

WebCenter WSRP Producer for .NET開発ガイドでは、Oracle WebCenter WSRP Producer for .NETを使用したポートレットの作成方法を詳しく説明しています。

対象読者

このドキュメントは、Oracle WebCenter WSRP Producer for .NETを使用してWSRPポートレットを作成するOracle WebCenter Portal開発者を対象としています。

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

オラクル社のアクセシビリティへの取組みの詳細は、Oracle Accessibility ProgramのWebサイトhttp://www.oracle.com/pls/topic/lookup?ctx=acc&id=docaccを参照してください。

Oracleサポートへのアクセス

Oracleのお客様は、My Oracle Supportにアクセスして電子サポートを受けることができます。詳細は、http://www.oracle.com/pls/topic/lookup?ctx=acc&id=infoまたはhttp://www.oracle.com/pls/topic/lookup?ctx=acc&id=trs (聴覚障害者向け)を参照してください。

関連ドキュメント

詳細は、次のドキュメントを参照してください。

- Oracle Fusion Middleware Oracle WebCenter WSRP Producer for .NETインストレーションおよびアップグレード・ガイド

- リリース・ノート

表記規則

このマニュアルでは次の表記規則を使用します。

規則

意味

太字

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

イタリック体

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

固定幅フォント

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

1 Oracle WebCenter WSRP Producer for .NETの概要

この章では、Oracle WebCenter WSRP Producer for .NETの概要について説明します。

1.1 Oracle WebCenter WSRP Producer for .NETについて

OASIS WSRP (Web Services for Remote Portlets) Technical Committeeは、ポータルなどの仲介サービスを集約することによって、使用するプレゼンテーション指向のWebサービスの標準化に取り組んでいます。詳細は、次のOASIS WSRPサイトを参照してください。http://www.oasis-open.org/committees/wsrp/

Oracle WebCenter WSRP Producer for .NETは、.NETアプリケーションおよびWebパーツをWSRP 1.0または2.0ポートレットとして表示するライブラリのコレクションです。このリリースは、AJAXなどの最新の.NET 3.5機能をサポートし、開発者は、.NET WSRPフレームワークでコードを作成しないで、.NETでコードを作成できます。

1.2 その他のドキュメント

次に示すその他のドキュメントが使用できます。

リソース

説明

インストレーション・ガイド

このガイドでは、前提条件(必要なソフトウェアなど)、およびOracle WebCenter WSRP Producer for .NETのインストールとアップグレードの手順について説明します。

リリース・ノート

リリース・ノートでは、リリースにおける新しい機能、対応済の問題および既知の問題に関する情報について説明します。

WSRP 1.0の仕様

http://www.oasis-open.org/committees/download.php/3343/oasis-200304-wsrp-specification-1.0.pdf

WSRP 2.0の仕様

http://docs.oasis-open.org/wsrp/v2/wsrp-2.0-spec.html

2 Oracle WebCenter WSRP Producer for .NET構成ファイルの理解

この章では、Oracle WebCenter WSRP Producer for .NET構成ファイル(wsrp-producer.xml)の内容について説明します。

Webパーツまたは.NETアプリケーションをWSRPポートレットとして設定することは、wsrp-producer.xml構成ファイルが適切に作成されるまで完了しません。このファイルについて理解することが重要です。

<installdir>\wsrpdefaultにインストールされているwsrp-producer.xmlファイルを開いて参照します。

- 第2.1項「ポートレット・ノード」

- 第2.2項「ポートレット・コンテンツ変換ルールセット」

2.1 ポートレット・ノード

ポートレットとして公開する各Webパーツまたは各.NET Webアプリケーションは、専用の<portlet>ノードを持つ必要があります。ポートレットには、次の要素を含めることができます。

- ポートレット・ハンドル: <handle>は、ポートレットを一意に特定する文字列である必要があります。このポートレット・プロパティには英数字をお薦めします。

- サポートされているロケール: <supported-locale>は、サポートされているロケールのカンマ区切りリストである必要があります。通常のフォーマットは[2 char language code] "-" [2 char country code] (en-USなど)です。この情報は、登録時にWSRPコンシューマ・ポータルに送信されます。これらの値は、タイトルや説明など、ポートレットのコア・プロパティのローカリゼーションも行います。

- ローカライズされたポートレット情報: <description>、<display-name>、<title>および<short-title>プロパティは、指定された"lang"属性値に従ってローカライズされます。各値は、description、displayName、titleおよびshortTitleという対応するWSRP値のLocalizedStringとして返されます。これらのプロパティの詳細は、WSRPの仕様のPortletDescriptionタイプを参照してください。

- サポートされているモード: <supports>要素は、いくつかのサブ要素を含んでいます。

- ポートレット・モード: <portlet-modes>要素は、関連するWSRPポートレット・モードのURL (通常は相対パス)を定義します。Oracle WebCenter WSRP Producer for .NETは、次のようにポートレット・モードを処理します。

表2-1 ポートレット・モード

ポートレット・モード

アクション

wsrp:view

ポートレットを表示します。

wsrp:edit

ポートレット・エディタを表示します。

wsrp:help

ヘルプ用のWebページを表示します。

wsrp:preview

このモードは、wsrp:viewと同様に処理されます。

urn:javax:portlet:mode:custom:edit_defaults

このWSRPカスタム・モードは、Oracle WebCenter Portalのカスタマイズ用です。

このリストに載っていないモードは、wsrp:viewモードのように処理されます。各ポートレット・モードの例は、次に続く項を参照してください。

- MIMEタイプ: <mime-type>要素は、ポートレットによってサポートされているMIMEタイプを定義します。すべてのMIMEタイプがサポートされている場合は、"*"を渡します。この設定の詳細は、WSRPの仕様のMarkupTypeタイプを参照してください。

- ユーザー・プロファイル情報: <user-profile>要素を使用すると、ポートレットで使用する<profile-item>要素にユーザー・プロファイル情報を定義できます。この要素の使用方法に関する詳細は、第5.8項「ユーザー・プロファイル・データの追加」を参照してください。

- ポートレット・コンテンツ変換: <RuleSetRef>セクションを使用すると、既存の変換ルール(ポートレット・ノードの外部で定義されます)とポートレットを関連付けることができます。関連付けられた<RuleSet>要素で定義されたIDを使用します。カンマ区切り文字列中に適切な順序でIDを配置することで、複数のルールセットを参照できます。独自の変換ルールを追加するには、<RewriterConfig>要素を追加し、<Rules>要素に定義されている同じ構造に従います。次の例に示すとおり、既存のルールはカスタム・ルールと組み合せることができます。

<RuleSetRef>Default</RuleSetRef>
<RewriterConfig>
<Rules>
<RewriterRule>
<LookFor>test.csv</LookFor>
<ChangeTo>download.csv</ChangeTo>
<ChangeToAbsolute>false</ChangeToAbsolute>
<ApplyTo>*</ApplyTo>
<MakeResource>false</MakeResource>
</RewriterRule>
</Rules>
</RewriterConfig >

注意:
カスタム・ルールが既存のルールセットと組み合せられている場合、カスタム・ルールは、すべての参照ルールセットの後にリストの順序で適用されます。

前述の例ではポートレットは、デフォルトのルールセットに関連付けられたすべてのルールを適用し、「test.csv」を「download.csv」で置き換えます。

ルールセットの詳細は、次の項を参照してください。

2.2 ポートレット・コンテンツ変換ルールセット

Oracle WebCenter WSRP Producer for .NETでは正規表現を使用して、相対URLを絶対URLに、また、必要に応じてWSRPコンシューマを通してプロキシ処理されたURLに変換します。特定の変換ルールは、<RuleSet>要素にあるwsrp-producer.xmlファイル内で定義され、各ポートレット内で参照されます。ルールセットは、マークアップ変換ルールのグループをまとめるための方法です。

デフォルトでは、hrefを変換し、WSRPリソースとしてプロキシ設定する単一のデフォルト・ルールセットがあり、"src" URL参照(イメージおよびJavaScript)は変換されますが、プロキシ設定は行われません。様々な変換設定を使用するには、次に説明するとおり、新しいルールセットを作成します。ポートレット内でのルールセットの使用例の詳細は、第5.5項「マークアップ変換の使用方法」を参照してください。

注意:
デフォルト・ルールセットを変更しないことを強くお薦めします。

2.2.1 カスタム・ルールの作成

前の項で説明したとおり、カスタム・ルールは、<RuleSet>要素内のポートレット・ノードの内側または外側で定義できます。同じルールを使用する必要がある一連のポートレットがある場合、ルールセットは非常に有用になります。ポートレットごとにURL変換ルールをコピーするかわりに、単一のルールセットを作成し、各ポートレットのIDを参照できます。<RewriterConfig>要素の構文ルールは、両方の場所で同じです。(ルールが個別のポートレット・ノードの内側で定義されている場合、<RuleSet>要素は省略されます。)

<RewriterConfig>要素は、次の表の要素を使用して変換ルールを定義する<RewriterRule>要素を含んでいる<Rules>要素を含んでいます。

表2-2 変換ルールの要素

要素

値/説明

<LookFor>

必須。テキストまたは正規表現、あるいはその両方を使用して、検索するURLを定義します。たとえば、<LookFor>(activeSrc\":\")([^\"]+)</LookFor>は、トランスフォーマが、置換のために"activeSrc":"./test/foo/bar.js"や"activeSrc":"test2/bas.html"のようなURLを探すことを示しています。

<LookFor>は、<RewriterRule>要素の中で1番目の要素にする必要があります。

<ChangeToAbsolute>

必須。trueに設定されている場合は、<LookFor>要素で識別された任意のURLを絶対URLに変換します。(WSRPコンシューマを通してプロキシ処理したときに相対URLは意味をなさないため、通常、URLに対して実行する変換は、URLを絶対URLにします。)

<MakeResource>

必須。trueに設定されている場合は、URLはWSRPコンシューマによってプロキシ処理されます。保護するリソースにとってこれが重要である一方、WSRPコンシューマはURLを書き換える必要があり、ブラウザ・キャッシングを使用することができないため、このオプションを大量に適用すると、パフォーマンスに大きな悪影響を及ぼすことがあります。プロキシ処理をするURLのみを含めるようにするには、<ApplyTo>を使用します。

<ApplyTo>

キーワードのカンマ区切りリストを使用して、変換されてプロキシ処理されるURLを限定します。(<ChangeToAbsolute>がルールに含まれている場合、<LookFor>要素によって返されるすべてのURLは絶対URLに変換されます。)

<ChangeTo>

<LookFor>要素によって返されるテキストを、用意されているテキストに変更します。(これはURL変換には使用されませんが、<RewriterRule>要素を使用してポートレット内の任意のテキストを変更でき、また、正規表現を含めることができます。)たとえば、次のエントリは、myhostからのトラフィックをmyhost.mycompany.comにリダイレクトします。

<RewriterRule>
<LookFor>myhost[\:]*[0-9]* </LookFor>
<ChangeTo>myhost.mycompany.com</ChangeTo>
</RewriterRule>

3 必要なスクリプト・ファイルの管理

この章では、Oracle WebCenter WSRP Producer for .NETスクリプト・ファイル(jquery-1.3.2.min.jsとmsPortletResizeHelper.js)について説明します。

3.1 必要なスクリプト・ファイルの管理

Oracle WebCenter WSRP Producer for .NETは、jquery-1.3.2.min.jsとmsPortletResizeHelper.jsという2つのファイルを使用します。デフォルトでは、これらのファイルはWSRPリソースに作成されます。他のJavaScriptファイルとは異なり、ポートレット・コンテンツ変換ルールセット(第2.2項「ポートレット・コンテンツ変換ルールセット」で説明)は、これらのファイルには適用されません。JavaScriptのブラウザ・キャッシュを利用するには、これらの必要なスクリプトを、ApacheなどのWebサーバーに配置します。

デフォルトの動作をオーバーライドするには、次の例3-1に示すとおり、jQueryExternalURLとmsResizeHelperExternalURLという.NETアプリケーション設定キーを、Oracle WebCenter WSRP Producer for .NETのWeb.configファイルに追加します。

Example 3-1 .NETアプリケーション設定キー

<appSettings>
<add key="jQueryExternalURL" value="http://myhost.mycompany.com/path/jquery-1.3.2.min.js"/>
<add key="msResizeHelperExternalURL" value="http://myhost.mycompany.com/path/msPortletResizeHelper.js"/>
</appSettings>

4 セキュリティ・オプションの構成

WSRPの仕様は、どのセキュリティ技術を使用する必要があるかを規定していませんが、メッセージレベルのセキュリティを使用する者にはWS-Security標準を使用することを薦めています。仕様はトランスポートレベルのセキュリティについて説明していますが、プロデューサのWSDLは、HTTPSサービス・エントリ・ポイント用のポートを宣言することのみを求めています。この章では、Oracle WebCenter WSRP Producer for .NETによってサポートされているセキュリティ・オプションについて説明します。

- 第4.1項「WS-Security (WSS)の構成」

- 第4.2項「SSLの構成」

4.1 WS-Security (WSS)の構成

Oracle WebCenter WSRP Producer for .NETは、SAMLとユーザー名トークン(UNT)という2つのタイプのWS-Securityトークン・プロファイルをサポートしています。WS-Security標準の詳細は、OASIS WS-Securityサイトhttp://www.oasis-open.org/committees/wss/を参照してください。

4.1.1 WSDLの構成

WSSポリシー情報を含んでいる2つのWSDLファイルがあります。

- WSRP 1.0: wsrp_v1_bindings.wsdlおよびWSRPService.wsdl (<installdir>\wsrpdefault\wsdl\1.0)

- WSRP 2.0: wsrp-2.0-bindings.wsdlおよびWSRPService.wsdl (<installdir>\wsrpdefault\wsdl\2.0)

WSRPService.wsdlファイルは、次のものをルート要素<wsdl:definitions>の子として、<wsdl:service>要素の前に含む必要があります。

例4-1 SAML

<wsp:UsingPolicy wsdl:Required="true" />
<wsp:Policy s1:Id="SAMLAuth.xml">
<wsp:All>
<wssp:Identity>
<wssp:SupportedTokens>
<wssp:SecurityToken TokenType="http://docs.oasis-open.org/wss/2004/01/oasis-2004-01-saml-token-profile-1.0#SAMLAssertionID">
<wssp:Claims>
<wssp:ConfirmationMethod>sender-vouches</wssp:ConfirmationMethod>
</wssp:Claims>
</wssp:SecurityToken>
</wssp:SupportedTokens>
</wssp:Identity>
</wsp:All>
</wsp:Policy>

例4-2 UNT

<wsp:UsingPolicy wsdl:Required="true" />
<wsp:Policy s1:Id="UNTAuth.xml">
<wsp:All>
<wssp:Identity>
<wssp:SupportedTokens>
<wssp:SecurityToken TokenType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#UsernameToken">
<wssp:UsePassword Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText"/>
</wssp:SecurityToken>
</wssp:SupportedTokens>
</wssp:Identity>
</wsp:All>
</wsp:Policy>

UsingPolicyは"required"に設定する必要があります。そうしないと、特定のWSRPコンシューマ(Oracle WebLogic Portalなど)は、セキュリティ・ポリシーを守らなくなります。Policyノードは、標準のWS-Securityポリシー要素で、ここでSAML v1.1 sender-vouchesの確認が定義されます。詳細は、WS-Securityの仕様を参照してください。

WSDLの構成について注意するうえで最も重要な点は、ポリシーのId属性です。これは、wsrp*bindings.wsdlファイル内で参照される必要があります。wsrp_v1_bindings.wsdlまたはwsrp-2.0-bindings.wsdlファイルを開き、getMarkupおよびperformBlockingInteractionという名前を持った<wsdl:input>要素を見つけます。これらのセクションでは、使用するポリシーを参照する必要があります。たとえば、WSRPService内のポリシーのIdが"SAMLAuth.xml"の場合、wsrp*bindings.wsdl内のポリシー参照は、次のようになります。

<wsp:Policy xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy">
<wsp:PolicyReference URI="#SAMLAuth.xml"/>
</wsp:Policy>

(WSRPService.wsdl内のポリシーのIdが"UNTAuth.xml"の場合、wsrp*bindings.wsdl内のPolicyReference URI値は"#UNTAuth.xml"になります。)

4.1.2 Web.configの構成

Oracle WebCenter WSRP Producer for .NETは、Microsoft Web Services Extensions (WSE) 2.0 SP3を使用しています。この項では、WS-Securityトークンを処理するようにWSEを設定するデフォルトの方法について説明します。WSEおよびセキュリティ・トークンの詳細は、Microsoft社のドキュメント(http://msdn.microsoft.com/en-us/library/ms824677.aspx)を参照してください。

WSEのセキュリティ面は、Web.config内の<microsoft.web.services2>要素の下の<security>のもとで管理されます。

Web.configに定義されているデフォルトのUNTおよびSAMLセキュリティ・トークン・マネージャは、実際には認証を行いません。かわりに、トークンXMLを取り除き、WSRPプロデューサに登録されている個別のポートレットにトークンXMLを提供します。これにより、個別のポートレットは独自の認証および認可方法を実装できます。WSRP SOAPエンドポイントで認証を実装するには、Microsoft社のドキュメントに従って、独自のSecurityTokenManagerを作成します。

注意:
WSEは、Oracle WebCenter Portal WSRP Consumerによって送信されるWSS 1.0セキュリティ・トークンを適切に処理しません。したがって、Oracle WebCenter WSRP Producer for .NETは、リクエスト・フィルタを使用して、暗号化コンテンツを復号化し、署名を検証し、次に暗号化と署名のない変更済のSOAPメッセージをWSEに渡します。Oracle WebCenter Portalから送信されるセキュリティ・トークン用に実装されたデフォルトのリクエスト・フィルタの詳細は、第5章「一般的な開発シナリオの実装」の開発チュートリアルを参照してください。

デフォルトのUNTおよびセキュリティ・トークン・マネージャの詳細は、次の章の第5.9項「セキュリティ・トークンの設定」を参照してください。デフォルトのSecurityTokenManagerのソース・コードは、インストール・ディレクトリの\wsrpdefault\srcフォルダにあります。

4.2 SSLの構成

SSL (一方向または双方向)を設定するには、IISの構成に関するMicrosoft社のドキュメント、およびWSRPコンシューマ・ポータル用に提供されているドキュメントに従います。WSRPService.wsdl内のすべてのエンドポイントURLに"https"を使用します。WSRPリソースの場合、Oracle WebCenter WSRP Producer for .NETは、エンドポイントへのアクセスにいずれを使用したかに応じて、httpまたはhttpsのいずれを使用するかを決定します。

注意:
双方向SSLは、Oracle WebCenter Portalではサポートされていません。

5 一般的な開発シナリオの実装

この章では、一般的な開発シナリオ用の手順を追ったチュートリアルを示します。

- 第5.1項「ポートレットとしてのWebパーツの追加」

- 第5.2項「ASP.NET AJAXコントロールを備えたWebパーツの追加」

- 第5.3項「ASP.NETアプリケーションの追加」

- 第5.4項「ヘルプ・ページの追加」

- 第5.5項「マークアップ変換の使用方法」

- 第5.6項「ポートレット・スタイルの使用方法」

- 第5.7項「JavaScriptを使用したポートレット間通信の使用方法」

- 第5.8項「ユーザー・プロファイル・データの追加」

- 第5.9項「セキュリティ・トークンの設定」

- 第5.10項「Oracle WebCenter Portal機能の使用方法」

5.1 ポートレットとしてのWebパーツの追加

デフォルトでは、ASP.NET Webパーツ・エディタ・ゾーンは、3つの異なるタイプのプリファレンス(パーソナライズと呼びます)をサポートしています。この項では、デフォルト・プリファレンスの操作方法について説明します。Oracle WebCenter WSRP Producer for .NETは、カスタム・パーソナライズ・エディタもサポートしています。

次の例では、手順1から3で、WSRPプロデューサの外部でASP.NETで使用するためにASP.NET Webパーツを作成し、手順5から8で、WebパーツをOracle WebCenter WSRP Producer for .NETに追加します。ユーザー・コントロールからWebパーツを作成する方法の詳細は、Microsoft社のドキュメント(http://msdn.microsoft.com/en-us/magazine/cc300767.aspx)を参照してください。

1. Visual Studio Webアプリケーション・プロジェクトを開き、TestPreferences.ascxというWebユーザー・コントロールを作成します。

2. lblStringPref、lblBooleanPrefおよびlblEnumPrefという3つのラベルを追加します。

3. [Personalizable, WebBrowsable]属性を含む3つのプロパティを作成します。ラベルの表示値を、次のコード例に示すプロパティに合わせます。

protected void Page_Load(object sender, EventArgs e)
{
lblBooleanPref.Text = "Checkbox Pref: " + _boolPref;
lblStringPref.Text = "Text Pref: " + _stringPref;
lblEnumPref.Text = "Dropdown Pref: " + _enumPref;

}
#region Preferences
private string _stringPref = "";
private bool _boolPref = false;

public enum TestEnum
{
ListItem1, ListItem2, ListItem3
}
private TestEnum _enumPref = TestEnum.ListItem2;

[Personalizable, WebBrowsable]
public string TextPref
{
get { return _stringPref; }
set { _stringPref = value; }
}

[Personalizable, WebBrowsable]
public bool CheckboxPref
{
get { return _boolPref; }
set { _boolPref = value; }
}

[Personalizable, WebBrowsable]
public TestEnum DropdownPrefs
{
get { return _enumPref; }
set { _enumPref = value; }
}
#endregion

4. 続行する前に、コードがコンパイルされることをテストします。

5. <installdir>\wsrpdefault\portletsの下にある既存の\ASPNET_AJAX_sampleフォルダのコピーを作成し、名前を"TestPreferences"に変更します。

6. Simple_DateTime.ascxファイルを、手順1から3で作成したTestPreferences.ascxファイルに置き換えます。

7. コンパイルされたアセンブリを、Visual Studioプロジェクトから<installdir>\wsrpdefault\binフォルダにコピーします。

8. <installdir>\wsrpdefault\portlets\TestPreferencesにあるdefault.aspxファイルを更新して、Simple_Date_Timeコントロールのかわりに自分のコントロールを参照させます。結果として得られるコードは、次のようになります。

<%@ Page Language="C#" MasterPageFile="~/portlets/Resources/MasterPages/WSRP.Master" Title="Content Page Test" %>
<%@ Register src= "~/portlets/TestPreferences/UserControl/TestPreferences.ascx" tagname="TestPreferences" tagprefix="uc1" %>
<asp:Content ID="Content1" ContentPlaceHolderID="webpartcontrol" Runat="Server">
<uc1:TestPreferences ID="TestPreferences1" runat="server" />
</asp:Content>

9. 次のようにして<installdir>\wsrpdefault\wsrp-producer.xmlファイルを更新して、ポートレットを含めます。

- 既存の<portlet>要素およびその内容のコピーを作成します。

- ハンドル、表示名、説明、タイトルおよび短いタイトルの各要素を、新しいポートレットの適切な値に変更します。

- <portlet-mode>要素の下の<url>ノードを更新して、ポートレットを指すようにします。

前述の例の場合、<portlet>要素は、次のようになります。

<portlet>
<handle>TestPreferences</handle>
<supported-locale>en,fr</supported-locale>
<descriptions>
<description lang="en">Test Preferences</description>
<description lang="fr">Test Preferences</description>
</descriptions>
<display-names>
<display-name lang="en">Test Preferences</display-name>
<display-name lang="fr">Test Preferences</display-name>
</display-names>
<titles>
<title lang="en">Test Preferences</title>
<title lang="fr">Test Preferences</title>
</titles>
<short-titles>
<short-title lang="en">Test Preferences</short-title>
<short-title lang="fr">Test Preferences</short-title>
</short-titles>
<supports>
<portlet-modes>
<portlet-mode>
<name>wsrp:view</name>
<url>/portlets/TestPreferences/default.aspx</url>
</portlet-mode>
<portlet-mode>
<name>wsrp:edit</name>
<url>/portlets/TestPreferences/default.aspx</url>
</portlet-mode>
</portlet-modes>
<mime-type>text/html</mime-type>
</supports>
<user-profile>
<profile-item>businessInfo/online/email</profile-item>
</user-profile>
</portlet>

10. 「スタート」→「プログラム」→「Oracle WebCenter WSRP Producer for .NET」→「WSRP 1.0 WSDL」のショートカットにあるWSDL URLでWSRPコンシューマを指すことによって、Oracle WebCenter WSRP Producer for .NETを登録します。(WSRPプロデューサWSDLの登録方法の詳細は、WSRPコンシューマ・ポータルの製品ドキュメントを参照してください)。

11. これで、ポートレットがWSRPコンシューマで使用可能になります。ポートレットをテストします。

1. ポートレットをポータルに追加します。TestPreferences.ascxファイルのプリファレンスに設定されているデフォルト値を示す3つのラベルが表示されます。

2. WSRPコンシューマ・ポータルのドキュメントに従って、プリファレンス・エディタにアクセスします。独自のWebパーツ・エディタ・ゾーンを.NETに追加する場合に表示されるものと同じプリファレンス・エディタが表示されます。プリファレンスを変更して「閉じる」をクリックし、ラベルが変更されていることを確認します。

3. ポータルからログアウトして、再びポータルにログインします。変更したプリファレンス値が維持されます。

5.2 ASP.NET AJAXコントロールを備えたWebパーツの追加

Oracle WebCenter WSRP Producer for .NETの主要な機能は、ASP.NET AJAXを使用して表示されるコントロールのサポートです。

このチュートリアルでは、前の項の例から始めます。手順の大半は、ASP.NET AJAX機能を使用するようにASP.NET Webパーツを設定するために必要な標準的なタスクです。ASP.NET AJAXスクリプト・マネージャおよび更新パネルの設定方法の詳細は、Microsoft社のドキュメントを参照してください。

1. 第5.1項「ポートレットとしてのWebパーツの追加」で作成したプロジェクトを開きます。

2. Visual Studioツールボックスの「AJAX Extensions」から、Script ManagerおよびUpdate Panelを追加します。

3. UpdatePanelの内側にラベル、テキスト・ボックスおよびボタンを追加します。

4. UpdatePanelの外側にラベル、テキスト・ボックスおよびボタンを追加します。完了したら、ソース・ビューは次のようになります。

<asp:Label ID="lblStringPref" runat="server" Text="Label"></asp:Label><br />
<asp:Label ID="lblBooleanPref" runat="server" Text="Label"></asp:Label><br />
<asp:Label ID="lblEnumPref" runat="server" Text="Label"></asp:Label><br />
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:TextBox ID="txtAjax" runat="server"></asp:TextBox>
<asp:Button ID="btnAjax" runat="server" Text="PostAJAX" /><br />
<asp:Label ID="lblAjax" runat="server" Text="AJAX post here"></asp:Label>
</ContentTemplate>
</asp:UpdatePanel>
<asp:TextBox ID="txtPostback" runat="server"></asp:TextBox>
<asp:Button ID="btnPostback" runat="server" Text="Postback" /><br />
<asp:Label ID="lblPostback" runat="server" Text="Postback content here"></asp:Label>

5. テキスト・ボックス・エントリがラベルに表示されるように、ページ・ロード・メソッドを変更します。ページ・ロード・メソッドのソース・コードは、次のようになります

protected void Page_Load(object sender, EventArgs e)
{
lblBooleanPref.Text = "Checkbox Pref: " + _boolPref;
lblStringPref.Text = "Text Pref: " + _stringPref;
lblEnumPref.Text = "Dropdown Pref: " + _enumPref;

lblAjax.Text = txtAjax.Text;
lblPostback.Text = txtPostback.Text;
}

6. 続行する前に、コードがコンパイルされることをテストします。(コントロールが動作することをテストするために、Visual Studioプロジェクトのaspxページにコントロールを登録することもできます。詳細は、Visual Studioのドキュメントを参照してください)。

7. <installdir>\wsrpdefault\portlets\TestPreferences.ascxファイルを最新バージョンのファイルに置き換えます。

8. テキスト・エディタでTestPreferences.ascxファイルを開き、asp:ScriptManagerコントロールを削除します。Oracle WebCenter WSRP Producer for .NETは、ScriptManagerを登録するASP.NETマスター・ページを参照し、ASP.NETでは、1つのアプリケーションに対して複数のScriptManagerは許可されません。詳細は、マスター・ページおよびScriptManagerに関するMicrosoft社のドキュメントを参照してください。

9. <installdir>\wsrpdefault\binフォルダ内のコンパイル済アセンブリを置き換えます。

10. ポータルに戻ってポートレットをリフレッシュし、ポートレットの機能を再びテストします。

5.2.1 .NET Frameworkの外側のAJAXの管理

ASP.NET 3.5 AJAXコントロールを使用するのではなく、XMLHttpRequestを直接制御したいと思うときがあります。これを行うには、URLはWSRPプロキシを介して変換されるということに注意する必要があります。このチュートリアルでは、単純なAJAXプロジェクトを動作させるために必要な手順について説明します。

この例は、前の例のコードから始めます。前述の例のasp:Labelの下に、次のコードを追加します。

<!-- Added for simple AJAX sample -->
<br />
<asp:ListBox ID="listBoxPets" runat="server">
<asp:ListItem Text="cat" Value="cat" Selected="True"/>
<asp:ListItem Text="dog" Value="dog" />
<asp:ListItem Text="bird" Value="bird" />
<asp:ListItem Text="fish" Value="fish" />
</asp:ListBox>
<!-- This href URL will be properly transformed by WSRP proxy -->
<a id="hiddenposturl" href="AjaxPostDestination.aspx" visible="false" ></a>
<br />
<!-- Result of selection will be placed here -->
<div id="AjaxResponse"></div>

このコードは、XMLHttpRequestによるデータの送信先となるURLを指すhrefが表示されていない単純なリストボックスを構築します。マークアップ・トランスフォーマがWSRPプロキシのURLを書き換えられるように、このURLはアンカーhref内に配置します。(変換の詳細は、第5.5項「マークアップ変換の使用方法」を参照してください)。

注意:
この例では、レスポンス内で返されるURLはありません。ただし、ポートレット・コンテンツ変換ルールセットによって変換されるAJAXリクエストからのレスポンスが必要になることがあります(WSRPコンシューマによってプロキシ処理するURLがある場合など)。これを行うには、ハンドル問合せ文字列引数を、wsrp-producer.xml内のポートレットに付与したハンドルを参照するターゲットURLに追加します。この例では、ハンドルは"TestPreferences"になり、非表示になっているURLは
<a id="hiddenposturl" href="AjaxPostDestination.aspx?handle=TestPreferences" visible="false" ></a>に変更されます。返されるコンテンツ・タイプがtext/html (この例ではtext/plain)になるようにする必要もあります。そうしないと、特定のWSRPコンシューマは変換済URLを適切にプロキシ処理しません。ルールセットの詳細は、第2.2項「ポートレット・コンテンツ変換ルールセット」を参照してください。

<div>の下に、次のJavaScriptを追加します。

<script language="javascript" type="text/javascript">
var xmlHttp;
/*  Tap into the onchange event so that whenever an item is selected in the
list box, that value is sent to the server.
*/
var selectmenu;
var selectMenus = getElementsByTagNameAndEndingId("select", "listBoxPets");
selectmenu = selectMenus[0];
selectmenu.onchange = function() {
// Prepare the XHR
createXMLHttpRequest();
// Get the selected value
var selectedPet = getSelectedPet();
// get the URL from a hidden argument since this will be transformed.
var hiddenPetURL = getElementsByTagNameAndEndingId("a", "hiddenposturl");
// Prepare the request.
xmlHttp.open("POST", hiddenPetURL, true);
// Assign this to a function that will process the requested items
xmlHttp.onreadystatechange = handleStateChange;
// Important note - If you use application/x-www-form-urlencoded you must include the ;charset=UTF-8 or
// will not work in Firefox 3.x.  Works fine in all versions of IE.
xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8");
// Send the value as post parameters.  This is the suggested methodology
//  using the Oracle WebCenter WSRP Producer for .NET
xmlHttp.send("petselection=" + selectedPet);
}

/*
Standard AJAX method.  This creates the appropriate XMLHttpRequest
(XHR) object, the core of AJAX.
*/
function createXMLHttpRequest() {
if (window.ActiveXObject) {
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
}
else {
xmlHttp = new XMLHttpRequest();
}
}

/*
This function handles the results of the XMLHttpRequest (XHR).
This is part of the standard AJAX methodology of using the onreadystatechange
event of the XHR to manage the results.
*/
function handleStateChange() {
if (xmlHttp.readyState == 4) {
if (xmlHttp.status == 200) {
parseResults();
}
}
}

/*
This helper function grabs the first selection and returns it
*/
function getSelectedPet() {
var result = "";
var options = selectmenu.childNodes;
var option = null;
for (var i = 0; i < options.length; i++) {
option = options[i];
if (option.selected) {
result = option.value;
}
}
return result;
}

/*
Write out the results returned from the XHR POST
*/
function parseResults() {
//var responseDiv = document.getElementById
("WebPartManager1_AjaxWebPart2_PetsServerResponse");
var responseDivs = getElementsByTagNameAndEndingId("div", "AjaxResponse");
var responseDiv = responseDivs[0];
if (responseDiv.hasChildNodes()) {
responseDiv.removeChild(responseDiv.childNodes[0]);
}
var responseText = document.createTextNode(xmlHttp.responseText);
responseDiv.appendChild(responseText);
}

/*
This function returns a list of DOM elements that have the tag name specified
and have an ID that ends in the value supplied.  The reason for this function is
that ASP.NET prepends control ID's with the webpart zone name and this function
provides a handy way of locating the our control of interest.
tagName - DOM tag name to look for (e.g. div, select, p)
endingID - String that the ID of the DOM elements should end with
returns - list of DOM elements that have the tag name and have an id that ends
with value supplied
*/
function getElementsByTagNameAndEndingId(tagName, endingId) {
var tagItems = document.getElementsByTagName(tagName);
var idValue;
var idNode;
var startPos;
var returnElements = new Array(1);  // Typically only one item
var j = 0;
for (i = 0; i < tagItems.length; i++) {
idNode = tagItems.item(i).attributes.getNamedItem("id");
if (idNode != null) {
idValue = idNode.nodeValue;
startPos = idValue.indexOf(endingId);
if (startPos > -1 && endingId == idValue.substring(startPos)) {
returnElements[j] = tagItems.item(i);
j++;
}
}
}
return returnElements;
}

</script>

前述のJavaScriptは、選択したリストボックス項目の値を単に受け取り、これをPOSTパラメータとしてURLに渡し、次にレスポンス・テキストを受け取ってこれをdiv内に配置します。これは最も標準的なAJAXの方法ですが、例外が2つあります。1番目の例外は、URLは表示されていないhrefから取得されるため、WSRPプロキシ処理されたURLに適切に変換されることです。2番目の例外は、URLはWSRPコンシューマによって適切に追加されないため、URLは問合せ文字列パラメータ(ほとんどのAJAXリクエストのように)を含むことができないことです。

test.aspxと同じディレクトリにAjaxPostDestination.aspxという新しいASPXページを作成することによって、AJAXリクエストの送信先のターゲット・ページを作成します。次のコードをファイルに貼り付けます。

<%@ Page Language="C#" AutoEventWireup="true" ValidateRequest="false" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<!-- NOTE that validaterequest is set to false.  This is the only way our hand-rolled AJAX requests will be accepted. -->
<head id="Head1" runat="server">
<title>Untitled Page</title>
<script language="CS" runat="server">
void Page_Load(object sender, System.EventArgs e){}
protected override void Render(HtmlTextWriter writer)
{
// Take over the response writer and send only the results of the selection
// Turn cacheability off so that each request is viewed as "new"
Response.Cache.SetCacheability(HttpCacheability.NoCache);
// For this simple example, just send back plain text.  A more
sophisticated JSON or XML response could be set here.
Response.ContentType = "text/plain";
writer.Write("You selected " + Request.Params["petselection"]);
}
</script>
</head>
<body>
<form id="form1" runat="server">
<div>

</div>
</form>
</body>
</html>

マスター・ページは参照されないことに注意してください。マスター・ページは表示されないため、何の意味もありません。ValidateRequest属性が"false"に設定されていることにも注意してください。フォームが予想どおりにポストされないため(複数のパラメータを持っています)、ASP.NETは、この属性のない検証エラーをスローします。最後に、キャッシュがオフになっていることに注意してください。datetimeなどの問合せ文字列パラメータはリクエストに追加できないため、これを一意にする方法はありません。

ポートレットが存在するページをリフレッシュします。これでポートレットには、4つのペットが一覧表示されたリストボックスが表示されます。ペット名をクリックすると、ポートレットの下部にペットの選択が表示されます。

要約すると、ASP.NET 3.5 AJAXコントロールを使用しないでコード内でXMLHttpRequestを使用するには、次のルールに従います。

- XMLHttpRequestのターゲットURLを、表示されていないアンカー・タグ内にhrefとして配置し(または、表示されていない入力フィールドなどの他の場所を使用し)、次にXMLHttpRequestで送信するターゲットURLとしてそのhrefの値を取得します。

- ポートレット・コンテンツ変換ルールセットによって変換されるAJAXリクエストからのレスポンスが必要な場合(たとえば、URLをWSRPコンシューマによってプロキシ処理する場合など)、ハンドル問合せ文字列引数を、wsrp-producer.xml内のポートレットに付与したハンドルを参照するターゲットURLに追加します。ルールセットの詳細は、第2.2項「ポートレット・コンテンツ変換ルールセット」を参照してください。

- querystringパラメータを、データのポスト方法として使用しないでください。POSTパラメータのみを使用してください。

- リクエストがキャッシュされないように、ターゲット・ページのキャッシュをオフにします。

5.3 ASP.NETアプリケーションの追加

ポートレットがプリファレンスを使用しない場合、Oracle WebCenter WSRP Producer for .NETを使用すると、WSRPを備えたASP.NETアプリケーションを表示することができます。このチュートリアルでは、ASP.NET WebフォームをOracle WebCenter WSRP Producer for .NETに追加します。

1. 非常に単純なASP.NET Webフォームを作成します。たとえば、次のtest.aspxファイルは、ASP.NETラベル・コントロールに"Hello World"を表示します。

<%@ Page Language="C#" AutoEventWireup="true" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<script language="CS" runat="server">
void Page_Load(object sender, System.EventArgs e)
{
this.lblTest.Text = "Hello World";
}
</script>
<title>Untitled Page</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Label ID="lblTest" runat="server" Text=""></asp:Label>
</div>
</form>
</body>
</html>

2. <installdir>\wsrpdefault\portletsの下に"testASPX"というフォルダを作成します。

3. 作成したtest.aspxファイルを新しいフォルダにコピーします。

4. 次のようにして、Oracle WebCenter WSRP Producer for .NETマスター・ページを参照するようにaspxファイルを変更します。

注意:
Oracle WebCenter WSRP Producer for .NETはマスター・ページを使用してコンテンツを表示することを理解することが重要です。次に概略を示すとおり、aspxファイルは、マスター・ページの適切なコンテンツ・プレースホルダを参照する必要があります。

- <head>および<body>の外側にあるすべてのDOM要素を削除します。

- <head>要素を、"wsrphead"で識別されるコンテンツ・プレースホルダに置き換え、<head>要素の必要な子要素を含めます。

<asp:Content ID="ContentHead1" ContentPlaceHolderID="wsrphead" Runat="Server">

- <body>要素および<form>要素を、"Main"で識別されるコンテンツ・プレースホルダに置き換え、<form>要素の必要な子要素を含めます。

<asp:Content ID="ContentBody1" ContentPlaceHolderID="Main" Runat="Server">

たとえば、変更済のtest.aspxファイルは、次のようになります。

<%@ Page Language="C#" MasterPageFile="~/portlets/Resources/MasterPages/WSRP.Master" Title="Content Page Test" %>
<asp:Content ID="ContentHead1" ContentPlaceHolderID="wsrphead" Runat="Server">
<script language="CS" runat="server">
void Page_Load(object sender, System.EventArgs e)
{
this.lblTest.Text = "Hello World";
}
</script>
</asp:Content>
<asp:Content ID="ContentBody1" ContentPlaceHolderID="Main" Runat="Server">
<asp:Label ID="lblTest" runat="server" Text=""></asp:Label>
</asp:Content>

5. "testASPX"というポートレット・ハンドルを備えた新しい<portlet>エントリを、wsrp-producer.xmlに作成します。Webフォームはプリファレンスをサポートしていないため、wsrp:editの<portlet-mode>要素を削除します。

6. 新しい"testASPX"ポートレットをポータルに追加します。"Hello World"が表示されます。

前述の例では、C#コードは直接ファイル内に配置しました。code-behind.csファイルを使用する場合、単にこのコードを、<installdir>\wsrpdefaultの下の\App_Codeサブフォルダに追加するか、またはコンパイル済C#アセンブリを<installdir>\wsrpdefault\binに追加し、アセンブリまたはクラスを参照するように.aspxファイル内の<%@ Pageディレクティブを変更します。

5.4 ヘルプ・ページの追加

ポートレットのヘルプ・ファイルを追加するには、ヘルプ・ファイルを指す、wsrp:helpという名前の新しい<portlet-mode>要素を単に追加します。たとえば、testASPXhelp.htmというヘルプ・ファイルを前の例に追加するには、<portlet-modes>要素は、次のようになります。

<portlet-modes>
<portlet-mode>
<name>wsrp:view</name>
<url>/portlets/TestASPX/test.aspx</url>
</portlet-mode>
<portlet-mode>
<name>wsrp:help</name>
<url>/portlets/TestASPX/testASPXhelp.htm</url>
</portlet-mode>
</portlet-modes>

コンシューマ・ポータル内でポートレットを表示する場合、ポートレットのヘルプ・リンクによってtestASPXhelp.htmページが表示されます。

5.5 マークアップ変換の使用方法

Oracle WebCenter WSRP Producer for .NETでは、マークアップ変換を実装して、ブラウザに表示される前にURLおよび他の静的コンテンツを変更できます。

5.5.1 テキストの変換

このチュートリアルでは、第5.3項「ASP.NETアプリケーションの追加」の"Hello World"テキストが"Hello New World"と読めるように変更する簡易例を示します。

1. テキスト・エディタで<installdir>\wsrpdefault\wsrp-producer.xmlファイルを開きます。

2. ハンドル"TestASPX"を備えた<portlet>ノードに移動し、<RuleSetRef>要素の下に、次のものを追加します。

<RewriterConfig>
<Rules>
<RewriterRule>
<LookFor>Hello World</LookFor>
<ChangeToAbsolute>false</ChangeToAbsolute>
<ChangeTo>Hello New World</ChangeTo>
<ApplyTo>*</ApplyTo>
<MakeResource>false</MakeResource>
</RewriterRule>
</Rules>
</RewriterConfig>

wsrp-producer.xml内のルールセット要素の詳細は、第2.2項「ポートレット・コンテンツ変換ルールセット」を参照してください。

3. testASPXポートレットを含んでいるポータル・ページをリフレッシュします。これでポートレットには、"Hello New World"が表示されます。

5.5.2 カスタム・ルールセットの作成

このチュートリアルでは、ASP.NET AJAXコントロールの追加時に.NET Frameworkによって生成されるWebResource.axdファイルおよびScriptResource.axdファイルをプロキシ処理するように、第5.2項「ASP.NET AJAXコントロールを備えたWebパーツの追加」のポートレットを変更することによって、カスタムURL変換を示します(wsrp-producer.xmlファイルの上部で定義されるDefaultルールセットによって、.NET Frameworkによって生成されるWebリソース・ファイル(*.axd)へのURLは絶対になりますが、WSRPリソースとしてのプロキシ処理は行われません。.axdファイルをプロキシ処理する実際的な理由は、WSRPコンシューマ・ポータル・ユーザーが内部ネットワークのURLにアクセスできないシナリオです)。

1. テキスト・エディタで<installdir>\wsrpdefault\wsrp-producer.xmlファイルを開きます。

2. Defaultルールセット全体(<RuleSet id="Default">)をコピーし、idの名前を"axdproxy"に変更します。

3. 新しいルールセット内で1番目の<RewriterRule>を検索します。<ApplyTo>要素内に、", .axd"を追加します。

4. 2番目および3番目の<RewriterRule>要素を検索し、それぞれの下の<ApplyTo>要素から",.axd"を削除します。

5. 3番目の<RewriterRule> (<LookFor>(src=\")'を備えています)のコピーを作成します。".axd"のみを含むように<ApplyTo>要素を変更し、<MakeResource>をtrueに変更します。
完成したルールセットは、次のようになります。

<RuleSet id="axdproxy">
<RewriterConfig>
<Rules>
<RewriterRule>
<LookFor>(href=\")([^\"]+)</LookFor>
<ChangeToAbsolute>true</ChangeToAbsolute>
<ApplyTo>.aspx,.htm,.html,.axd</ApplyTo>
<MakeResource>true</MakeResource>
</RewriterRule>
<RewriterRule>
<LookFor>(href=\")([^\"]+)</LookFor>
<ChangeToAbsolute>true</ChangeToAbsolute>
<ApplyTo>.css</ApplyTo>
<MakeResource>false</MakeResource>
</RewriterRule>
<RewriterRule>
<LookFor>(src=\")([^\"]+)</LookFor>
<ChangeToAbsolute>true</ChangeToAbsolute>
<ApplyTo>.css,.js,.img,.png,.jpg,.gif</ApplyTo>
<MakeResource>false</MakeResource>
</RewriterRule>
<RewriterRule>
<LookFor>(src=\")([^\"]+)</LookFor>
<ChangeToAbsolute>true</ChangeToAbsolute>
<ApplyTo>.axd</ApplyTo>
<MakeResource>true</MakeResource>
</RewriterRule>
</Rules>
</RewriterConfig>
</RuleSet>

6. ハンドルTestPreferencesを備えた<portlet>ノードに移動し、新しいaxdproxyルールセット(<RuleSetRef>axdproxy</RuleSetRef>)を参照するように<RuleSetRef>要素を変更します。

7. 変更内容をwsrp-producer.xmlに保存します。

8. TestPreferencesポートレットを含んでいるポータル・ページをリフレッシュします。これで.axdを備えたすべてのURLは、WSRPコンシューマ・ポータルによってプロキシ処理されます。これを確認するには、DOM検査ツールを使用して.axdファイルを検索します。これらのファイルは、WSRPコンシューマ・ポータルへのURLで始まるURLエンコード済値に変換されます。これらのURLと、プロキシ処理されていないURLを比較するには、ポートレットの<RuleSetRef>を単に"Default"に切り替えます。

5.6 ポートレット・スタイルの使用方法

Oracle WebCenter WSRP Producer for .NETでは、スキンおよびテーマを適用するための特別な手順を必要としません。スタイル、テーマおよびスキンの管理は、.NET Frameworkに委任されます。たとえば、特定のOracle WebCenter Portalテーマを適用するには、ソースの.cssファイルを\App_Themesフォルダに単に配置し、標準の.NETルールに従って、目的のスタイルを単一コントロール、単一ポートレットまたはポートレット・セットに適用します。

この簡易なチュートリアルでは、組込みのASP.NET機能を使用して、すべてのポートレット内のすべてのラベルにスタイルを適用する方法を示します。詳細は、ASP.NETのテーマおよびスキンに関するMicrosoft社のドキュメントを参照してください。

1. <installdir>\wsrpdefault\App_Themesにフォルダを作成し、"MyTheme"と名前を付けます。

2. 次の行を含んだ新しいファイルを作成します。
<asp:Label runat="server" ForeColor="white" BackColor="green" />

3. ファイルに"my.skin"と名前を付けて、\MyThemeフォルダに保存します。

4. テキスト・エディタで<installdir>\wsrpdefault\Web.configファイルを開きます。

5. <pages>要素を検索し、次の属性theme="MyTheme"を追加します。これにより、すべてのASP.NETページは、"App_Themes\MyTheme"フォルダで定義されているテーマを使用します。

6. ラベルを含んでいるポートレット(たとえば、前のチュートリアルのポートレットなど)を表示し、背景色が緑であることに注意します。

5.7 JavaScriptを使用したポートレット間通信の使用方法

ポートレット間でデータを渡す最も直接的な方法は、JavaScriptを使用することです。このチュートリアルでは、1つのポートレットを、ユーザーが項目を選択するマスター・ポートレットとして使用するという簡単な方法を示します。項目を選択すると、データが別のポートレットに渡され、項目に関する詳細情報が表示されます。

まず、マスター・ポートレットを作成します。Visual StudioでWebアプリケーション・プロジェクトの一環として、新しいWebユーザー・コントロールを作成し、これにMasterList.ascxという名前を付けます。導入を容易にするために、コードを別のファイルに配置しないでください。

ラベルおよびリストボックスを追加しますが、ファイルは空のままにします。ファイルの内容は次のようになります。

<%@ Control Language="C#" AutoEventWireup="true" %>
<asp:Label ID="lblHousingType" runat="server" Text="Select House Type"></asp:Label>
<br/>
<asp:ListBox ID="listBoxHousing" runat="server" Height="80px" Width="171px">
<asp:ListItem>Single Family</asp:ListItem>
<asp:ListItem>Condominium</asp:ListItem>
<asp:ListItem>Cooperative</asp:ListItem>
<asp:ListItem>Tenancy in Common</asp:ListItem>
</asp:ListBox>
<script runat="server">
protected void Page_Load(object sender, EventArgs e)
{
}
</script>

ファイルの下部に次のJavaScriptを追加します。

<script type="text/javascript" language="javascript" >
// Set up an onchange event for listBoxHousing.
//This can also be done by adding onChange attribute to the asp:ListBox
var selectmenu;
var selectMenus = getElementsByTagNameAndEndingId("select", "listBoxHousing");
selectmenu = selectMenus[0];
selectmenu.onchange=function()
{
// Update a hidden field in another portlet.  This is how information will be passed
// From one portlet to another.
var i = selectmenu.selectedIndex;
var text = selectmenu[i].value;
var portletFrame = getFrameFromSrcAttribute(window.parent.document, "DetailPage");
var portletContent = portletFrame.contentWindow;
portletContent.theForm.submitHousingField.value= text;
portletContent.theForm.submit();
}

/*
This function returns a list of DOM elements that have the tag name specified and
have an ID that ends in the value supplied.  The reason for this function is that
ASP.NET prepends control ID's with the webpart zone name and this function
provides a handy way of locating the our control of interest.
tagName - DOM tag name to look for (e.g. div, select, p)
endingID - String that the ID of the DOM elements should end with
returns - list of DOM elements that have the tag name and have an id that ends with value supplied
*/
function getElementsByTagNameAndEndingId(tagName, endingId) {
var tagItems = document.getElementsByTagName(tagName);
var idValue;
var idNode;
var startPos;
var returnElements = new Array(1);  // Typically only one item
var j = 0;
for (i = 0; i < tagItems.length; i++) {
idNode = tagItems.item(i).attributes.getNamedItem("id");
if (idNode != null) {
idValue = idNode.nodeValue;
startPos = idValue.indexOf(endingId);
if (startPos > -1 && endingId == idValue.substring(startPos)) {
returnElements[j] = tagItems.item(i);
j++;
}
}
}
return returnElements;
}
/* This function finds an iframe based on the src element
docSource - document element to search in for frame
srcSearch - string value that should be searched for in an iframe's src field
returns - iframe element
*/
function getFrameFromSrcAttribute(docSource, srcSearch) {
var iFrames = docSource.getElementsByTagName("iframe");
var srcNode;
var srcValue;
var returnFrame;
for (i = 0; i < iFrames.length; i++) {
srcNode = iFrames.item(i).attributes.getNamedItem("src");
if (srcNode != null) {
srcValue = srcNode.nodeValue;
startPos = srcValue.indexOf(srcSearch);
if (srcValue.indexOf(srcSearch) > -1) {
returnFrame = iFrames.item(i);
}
}
}
return returnFrame;
}
</script>

前述のコードは、リストボックスから選択された項目を受け取り(select DOM要素)、"detail"ポートレットを検索して、非表示のフィールドに値を書き込みます。このコードの最も重要な部分は、ポートレットを一意に識別する"src"属性内のテキストに基づいて、ポートレットを含むiframeを検索することによって、どのように2番目のポートレットを特定するかということです。(この例では、ポートレットが配置されるフォルダ名"DetailPage"が一意の識別子です)。

次の手順は、"detail"ポートレットを作成することです。Visual StudioでWebアプリケーション・プロジェクトの一環として、新しいWebユーザー・コントロールを作成し、DetailPage.ascxという名前を付けます。導入を容易にするために、コードを別のファイルに配置しないでください。2つのASP.NETラベルおよび表示されていない1つの入力フィールドを追加します。表示されていないフィールドは、マスター・ポートレットからのデータが配置される場所です。ファイルの内容は次のようになります。

<%@ Control Language="C#" AutoEventWireup="true" %>
<asp:Label ID="lblHousing" runat="server" Text="Housing Type Info:"></asp:Label>
<br/>
<asp:Label ID="lblHousingTypeInfo" runat="server" Text="None selected"></asp:Label>
<!-- Use a hidden field to get data from another portlet -->
<input type="hidden" id="submitHousingField" name="submitHousingField" value=""/>

次のコードをファイルの下部に追加します。

<script runat="server">
protected void Page_Load(object sender, EventArgs e)
{
if (Request.Params != null)
{
if (Request.Params["submitHousingField"] != null)
{
string housingType = Request.Params["submitHousingField"].ToString();
// You'd probably look this up in a database in a real case, but simple switch statement used for simplicity
switch (housingType)
{
case "Single Family":
{
lblHousingTypeInfo.Text = "Single family homes consist of a structure and the land.";
break;
}
case "Condominium":
{
lblHousingTypeInfo.Text = "You own a condo, but the building housing the condominium is maintained by the home owners association.";
break;
}
case "Cooperative":
{
lblHousingTypeInfo.Text = "In a Cooperative, you own shares in the corporation that owns the entire building.";
break;
}
case "Tenancy in Common":
{
lblHousingTypeInfo.Text = "In a TIC, you own a share of the mortgage on the entire building.";
break;
}
default:
{
lblHousingTypeInfo.Text = "Unrecognized housing type selected.";
break;
}
}
}
}
}
</script>

前述のコードは、表示されていない入力フィールドからformパラメータで渡されるものに基づいて、値をラベルに書き込みます。MasterList.ascxファイルを見なおすと、"submitHousingField"という非表示の入力フィールドが移入されています。(実際の実装では詳細なデータは、ハードコードされるのではなく、データベースから取得されます)。

次の一連の手順では、前の手順で作成した2つのWebユーザー・コントロールを設定し、Oracle WebCenter WSRP Producer for .NETを使用してこれらのコントロールをポートレットとして表示します。

1. <installdir>\wsrpdefault\portlets\MasterListフォルダを作成します。次のコードを含んだdefault.aspxという新しいファイルをフォルダに追加します。

<%@ Page Language="C#" MasterPageFile="~/portlets/Resources/MasterPages/WSRP.Master" Title="Content Page Test" %>
<%@ Register src= "~/portlets/MasterList/UserControl/MasterList.ascx" tagname="MasterList" tagprefix="uc1" %>
<asp:Content ID="Content1" ContentPlaceHolderID="webpartcontrol" Runat="Server">
<uc1:MasterList ID="MasterList1" runat="server" />
</asp:Content>

2. <installdir>\wsrpdefault\portlets\MasterList\UserControlフォルダを作成し、作成したMasterList.ascxファイルをこのフォルダにコピーします。

3. <installdir>\wsrpdefault\portlets\DetailPageフォルダを作成します。次のコードを含んだdefault.aspxという新しいファイルをフォルダに追加します。

<%@ Page Language="C#" MasterPageFile="~/portlets/Resources/MasterPages/WSRP.Master" Title="Content Page Test" %>
<%@ Register src= "~/portlets/DetailPage/UserControl/DetailPage.ascx" tagname="DetailPage" tagprefix="uc1" %>
<asp:Content ID="Content1" ContentPlaceHolderID="webpartcontrol" Runat="Server">
<uc1:DetailPage ID="DetailPage1" runat="server" />
</asp:Content>

4. <installdir>\wsrpdefault\portlets\DetailPage\UserControlフォルダを作成し、作成したDetailPage.ascxファイルをこのフォルダにコピーします。

5. テキスト・エディタで<installdir>\wsrpdefault\wsrp-producer.xmlを開き、これに<portlet>要素を追加します。(構成ファイルの詳細は、第3章「必要なスクリプト・ファイルの管理」を参照してください。)

<portlet>
<handle>HousingType</handle>
<supported-locale>en</supported-locale>
<descriptions>
<description lang="en">Housing Type</description>
</descriptions>
<display-names>
<display-name lang="en">Housing Type</display-name>
</display-names>
<titles>
<title lang="en">Housing Type</title>
</titles>
<short-titles>
<short-title lang="en">Housing Type</short-title>
</short-titles>
<supports>
<portlet-modes>
<portlet-mode>
<name>wsrp:view</name>
<url>/portlets/MasterList/default.aspx</url>
</portlet-mode>
</portlet-modes>
<mime-type>text/html</mime-type>
</supports>
</portlet>

<portlet>
<handle>HousingDetail</handle>
<supported-locale>en</supported-locale>
<descriptions>
<description lang="en">Housing Detail</description>
</descriptions>
<display-names>
<display-name lang="en">Housing Detail</display-name>
</display-names>
<titles>
<title lang="en">Housing Detail</title>
</titles>
<short-titles>
<short-title lang="en">Housing Detail</short-title>
</short-titles>
<supports>
<portlet-modes>
<portlet-mode>
<name>wsrp:view</name>
<url>/portlets/DetailPage/default.aspx</url>
</portlet-mode>
</portlet-modes>
<mime-type>text/html</mime-type>
</supports>
</portlet>

6. 「スタート」→「プログラム」→「Oracle WebCenter WSRP Producer for .NET」→「WSRP 1.0 WSDL」のショートカットにあるWSDL URLでWSRPコンシューマを指すことによって、Oracle WebCenter WSRP Producer for .NETを登録します。(WSRPプロデューサWSDLの登録方法の詳細は、WSRPコンシューマ・ポータルの製品ドキュメントを参照してください)。

7. "HousingType"ポートレットおよび"HousingDetail"ポートレット(これらはwsrp-producer.xmlファイルで定義されている名前です)をポータルの単一ページに追加します。1つのポートレットでハウジング・タイプをクリックすると、ハウジング・タイプに関する詳細情報が別のポートレットに表示されます。

このチュートリアルでは、ポートレット間通信機能をポートレットに追加するための簡単な1つの方法を示します。

5.8 ユーザー・プロファイル・データの追加

このチュートリアルでは、ユーザー・プロファイル・データを使用するWebパーツを作成します。Webパーツは、System.Web.UI.WebControls.WebParts.WebPartから継承されるクラスとして作成されます。Webユーザー・コントロールを作成して、同じ機能を実行することもできます。両方のオプションに関する詳細は、Microsoft社のドキュメントを参照してください。

重要:
この注意は、WSRPの仕様で定義されているプリファレンスを使用するWSRPコンシューマにとって非常に重要です(Oracle WebCenter Portalを含む)。
ASP.NETは、プロファイル・プロパティの1レベルのみのネストをサポートしていますが(プロパティは<group>の下でのみネストできます)、仕様に定義されている数多くのUserProfile項目は、数レベルの深さでネストされます。たとえば、WSRPの仕様では、ユーザーのビジネス電子メールは、businessInfo/online/emailとして定義され、ユーザーの家庭用携帯電話の内線は、homeInfo/telecom/mobile/numberとして定義されます。これを説明するために、Oracle WebCenter WSRP Producer for .NETは、ネストされたオブジェクトの置換文字として"_"文字を使用します。これが示されているのは次の手順の中で、ここではbusinessInfo/online/emailは、C#コードではbusinessInfo_online.emailとして処理されますが、Web.configでは次のように参照されます。

<group name="businessInfo_online">
<add name="email" defaultValue="John.Doe@acme.com"/>
</group>

この問題は、ASP.NETと同じ単一レベルのネスト・ルールに従うため、Oracle WebLogic Portalには該当しません。

1. Visual Studioで新しいC#クラスを作成し、次のコードをコピーします。

using System;
using System.Collections.Generic;
using System.Collections;
using System.Linq;
using System.Text;
using System.Configuration;

using System.Web;
using System.Web.Profile;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;

namespace TestUserProfile
{
public class UserProfileWebPart : WebPart
{

Label lblEmailWLP;
Label lblEmailWSRP;
protected override void CreateChildControls()
{

// Create a label and assign a user profile value.  Try the WLP format and then the standard WSRP format.
lblEmailWLP = new Label();
lblEmailWLP.ID = "lblEmailWLP";
lblEmailWLP.Text = "WLP profile email: " + this.Context.Profile["GroupSpace.email"].ToString();
this.Controls.Add(lblEmailWLP);
HtmlGenericControl br1 = new HtmlGenericControl("br");
this.Controls.Add(br1);

lblEmailWSRP = new Label();
lblEmailWSRP.ID = "lblEmailWSRP";
lblEmailWSRP.Text = "WSRP profile email: " + this.Context.Profile["businessInfo_online.email"].ToString();
this.Controls.Add(lblEmailWSRP);
HtmlGenericControl br2 = new HtmlGenericControl("br");
this.Controls.Add(br2);
}
}
}

2. このコードをコンパイルして"TestUserProfile"というアセンブリにし、このアセンブリを<installdir>\wsrpdefault\binにコピーします。

3. <installdir>\wsrpdefault\Web.configを開き、プロパティ・プロファイルを更新して、コードによって参照されているプロパティ・プロファイルが使用されるようにします。C#コードではプロファイル・プロパティは、group.name形式で指定されることに注意してください。
<properties>要素を検索し、これを次のものに置き換えます。

<properties>
<group name="businessInfo_online">
<add name="email" defaultValue="John.Doe@acme.com"/>
</group>
<group name="GroupSpace">
<add name="email" defaultValue="John.Doe@acme.com"/>
</group>
</properties>

注意:
この例を動作させるには、デフォルト値が必要です。Oracle WebCenter Portal、またはWSRPの仕様のUserProfile項目を使用する他のWSRPコンシューマでは、GroupSpace.emailプロパティは使用できません。Oracle WebLogic PortalではUserProfile拡張子を使用して項目を渡すため、ネストされたbusinessInfo/online/emailプロファイル・プロパティは作成できませんでした。

4. <installdir>\wsrpdefault\portletsの下に"TestUserProfile"というフォルダを作成します。

5. default.aspxファイルを、<installdir>\wsrpdefault\portlets\ASPNET_AJAX_sampleから新しい\TestUserProfileフォルダにコピーします。

6. <installdir>\wsrpdefault\portlets\TestPreferences\default.aspxファイルを更新して、Simple_Date_Timeコントロールではなく、新しいTestUserProfileアセンブリを参照するようにします。

- "src"を"assembly"に置き換え、作成したTestUserProfileアセンブリを参照します。

- "tagname"を"namespace"に置き換え、クラスによって使用されるTestUserProfile名前空間を参照します。

- コンテンツ・プレースホルダの下のtagprefixに続く":"の後にクラス名を追加します。

この結果得られるファイルは次のようになります。

<%@ Page Language="C#" MasterPageFile="~/portlets/Resources/MasterPages/WSRP.Master" Title="Content Page Test" %>
<%@ Register assembly="TestUserProfile" namespace="TestUserProfile" tagprefix="uc1" %>
<asp:Content ID="Content1" ContentPlaceHolderID="webpartcontrol" Runat="Server">
<uc1:UserProfileWebPart ID="UserProfileWebPart1" runat="server" />
</asp:Content>

7. <installdir>\wsrpdefault\wsrp-producer.xmlファイルを更新して、ポートレットおよび使用しているプロファイル・プロパティを含めます。

- 既存の<portlet>ノードおよびその内容のコピーを<portlets>要素の下に作成します。

- 新しいポートレットのハンドル、表示名、説明、タイトルおよび短い説明という各要素を更新します。

- 各<portlet-mode>要素の下の<url>ノードを更新して、新しいポートレットを指すようにします。(wsrp:editモードおよびwsrp:helpモードは必要ではありません。)

- ポートレット内で参照されるプロファイル・プロパティを、<user-profile>要素の下の<profile-item>要素に追加します。

完了したら、新しい<portlet>ノードは次のようになります。

<portlet>
<handle>TestUserProfile</handle>
<supported-locale>en,fr</supported-locale>
<descriptions>
<description lang="en">Test UserProfile</description>
<description lang="fr">Test UserProfile</description>
</descriptions>
<display-names>
<display-name lang="en">Test UserProfile</display-name>
<display-name lang="fr">Test UserProfile</display-name>
</display-names>
<titles>
<title lang="en">Test UserProfile</title>
<title lang="fr">Test UserProfile</title>
</titles>
<short-titles>
<short-title lang="en">Test UserProfile</short-title>
<short-title lang="fr">Test UserProfile</short-title>
</short-titles>
<supports>
<portlet-modes>
<portlet-mode>
<name>wsrp:view</name>
<url>/portlets/TestUserProfile/default.aspx</url>
</portlet-mode>
</portlet-modes>
<mime-type>text/html</mime-type>
</supports>
<user-profile>
<profile-item>businessInfo/online/email</profile-item>
<profile-item>GroupSpace/email</profile-item>
</user-profile>
</portlet>

8. これで、ポートレットがWSRPコンシューマで使用可能になります。(第5.1項「ポートレットとしてのWebパーツの追加」で説明したとおり、すでにOracle WebCenter WSRP Producer for .NETを登録しているはずです)。ポートレットをポータルに追加します。Web.Configのプロファイル・プロパティのデフォルト値を示す2つのラベルができます。

9. ポータルのドキュメントに従って、電子メール・プリファレンスを送信するようにWSRPコンシューマを構成します。
Oracle WebLogic Portalの場合、次の手順を使用します。(デフォルトのWLP Data Syncは、"GroupSpace"というPropertySetを持ち、このPropertySetのプロパティの1つは"email"と呼ばれます。)

1. Oracle WebLogic Portal管理コンソールにログインします。

2. 「ユーザー、グループおよびロール」→「ユーザー管理」を選択します。

3. Webパーツをテストするために使用してきたユーザーをクリックします。

4. 「ユーザー・プロファイル」タブをクリックします。

5. ドロップダウン・メニューから「GroupSpace PropertySet」を選択します。(このPropertySetが存在しない場合、"GroupSpace"という新しいPropertySetを作成し、これに"email"という"Single, Unrestricted"プロパティを移入します。)

6. "email"プロパティを編集します(値を入力します)。

7. 編集したユーザーでOracle WebLogic Portalにログインし、UserProfile Webパーツ・ポートレットを表示して変更内容を確認します。

5.9 セキュリティ・トークンの設定

デフォルトでは、Oracle WebCenter WSRP Producer for .NETは、SOAPヘッダーで定義されている<wsse:Security>要素を含むXMLを取り出し、これをHttpContext.Itemsコレクションに入れます。トークンは、ASP.NETリクエストの継続期間中のみ使用可能で、ASP.NETセッションIDによって識別されます。

WS-Securityの仕様ではセキュリティ・トークンの構成を可能にする数多くの可能性のため、Oracle WebCenter WSRP Producer for .NETのインストールには、<installdir>\wsrpdefault\srcにあるデフォルトのセキュリティ実装用のソース・コードが含まれています。デフォルトのSecurityTokenManagerの実装の詳細は、\tokenサブフォルダにあるファイルを参照してください。トークンがデフォルトのSecurityTokenManagerに渡される前に、特にWebCenter Portal WSS 1.0トークンに適用されるデフォルトのリクエスト・フィルタの詳細は、\utilサブフォルダにあるファイルを参照してください。

この項では、数多くの方法でセキュリティ・トークンにアクセスする方法を示すいくつかのチュートリアルを提供します。

- 第5.9.1項「Webパーツでのトークンの表示」

- 第5.9.2項「デフォルトのSAMLCredentialMapperV2を使用したOracle WebLogic Portal」

- 第5.9.3項「カスタム署名鍵を使用したOracle WebLogic Portal」

- 第5.9.4項「Oracle WebLogic Portal用のUNT」

- 第5.9.5項「Oracle WebCenter Portal用のSAML」

- 第5.9.6項「Oracle WebCenter Portal用のUNT」

5.9.1 Webパーツでのトークンの表示

このチュートリアルでは、セキュリティ・トークンを表示する単純なWebパーツを作成します。作成されるWebパーツは十分汎用的なため、(WLPのSAMLやWebCenter PortalのUNTを含め)どのタイプのwsse:securityトークンを調べるためにも使用できます。Webパーツは、System.Web.UI.WebControls.WebParts.WebPartから継承されるクラスとして作成されます(Webユーザー・コントロールを使用して同じ機能を提供できます)。

1. Visual Studioで新しいC#クラスを作成します。参照をWSEアセンブリ・コンポーネントMicrosoft.Web.Services2に追加します(そうしないと、サンプル・コードはコンパイルされません)。次のコードをコピーします。

using System;
using System.Collections.Generic;
using System.Collections;
using System.Text;
using System.Configuration;

using System.Web;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml;

using Microsoft.Web.Services2.Security.Tokens;

namespace SecurityTokenWebPart
{
public class SecurityTokenWebPart : WebPart
{
Label lblSamlHeader;
Label lblUntHeader;
Label lblSecurityHeader;
Label lblSamlToken;
Label lblUntToken;
Label lblSecurityToken;
protected override void CreateChildControls()
{
// Create text label for SAML token
lblSamlHeader = new Label();
lblSamlHeader.ID = "lblSamlHeader";
lblSamlHeader.Text = "SAML token:";
this.Controls.Add(lblSamlHeader);
HtmlGenericControl br1 = new HtmlGenericControl("br");
this.Controls.Add(br1);

// Retrieve the SAML security token associated with this session, if available
lblSamlToken = new Label();
lblSamlToken.ID = "lblSamlToken";
Object item = HttpContext.Current.Items[Page.Session.SessionID + ".SAML_TOKEN"];
if (item != null)
{
lblSamlToken.Text = HttpUtility.HtmlEncode(HttpUtility.UrlDecode(item.ToString()));
}
else
{
lblSamlToken.Text = "SAML token unavailable";
}
this.Controls.Add(lblSamlToken);
HtmlGenericControl br2 = new HtmlGenericControl("br");
this.Controls.Add(br2);

// Create text label for UNT token
lblUntHeader = new Label();
lblUntHeader.ID = "lblUntHeader";
lblUntHeader.Text = "UNT token:";
this.Controls.Add(lblUntHeader);
HtmlGenericControl br3 = new HtmlGenericControl("br");
this.Controls.Add(br3);

// Retrieve the UNT security token associated with this session, if available
lblUntToken = new Label();
lblUntToken.ID = "lblUntToken";
item = HttpContext.Current.Items[Page.Session.SessionID + ".USERNAME_TOKEN"];
if (item != null)
{
lblUntToken.Text = HttpUtility.HtmlEncode(HttpUtility.UrlDecode(item.ToString()));
}
else
{
lblUntToken.Text = "Username token (UNT) unavailable";
}
this.Controls.Add(lblUntToken);
HtmlGenericControl br4 = new HtmlGenericControl("br");
this.Controls.Add(br4);

// Create text label for security tokens
lblSecurityHeader = new Label();
lblSecurityHeader.ID = "lblSecurityHeader";
lblSecurityHeader.Text = "Security token(s):";
this.Controls.Add(lblSecurityHeader);
HtmlGenericControl br5 = new HtmlGenericControl("br");
this.Controls.Add(br5);

// Retrieve all the security tokens associated with this session, if available
lblSecurityToken = new Label();
lblSecurityToken.ID = "lblSecurityToken";
item = HttpContext.Current.Items[Page.Session.SessionID + ".TOKENS"];
if (item != null)
{
SecurityTokenCollection tokens = item as SecurityTokenCollection;
if (tokens.Count > 0)
{
foreach (SecurityToken token in tokens)
{
XmlElement xe = token.GetXml(new XmlDocument());
lblSecurityToken.Text += HttpUtility.HtmlEncode(xe.OuterXml);
}
}
else
{
lblSecurityToken.Text = "Security token unavailable";
}
}
else
{
lblSecurityToken.Text = "Security token unavailable";
}
this.Controls.Add(lblSecurityToken);
}
}

2. このコードをコンパイルして、"ViewSecurityToken"というアセンブリにします。

3. アセンブリを<installdir>\wsrpdefault\binにコピーします。

4. <installdir>\wsrpdefault\portletsの下に"ViewSecurityToken"というフォルダを作成します。

5. default.aspxファイルを、<installdir>\wsrpdefault\portlets\ASPNET_AJAX_sampleから新しい\ViewSecurityTokenフォルダにコピーします。

6. <installdir>\wsrpdefault\portlets\ViewSecurityToken\default.aspxファイルを更新して、Simple_Date_Timeコントロールではなく、新しいTestUserProfileアセンブリを参照するようにします。

- "src"を"assembly"に置き換え、作成したViewSecurityTokenアセンブリを参照します。

- "tagname"を"namespace"に置き換え、クラスによって使用されるSecurityTokenWebPart名前空間を参照します。

- コンテンツ・プレースホルダの下のtagprefixに続く":"の後にクラス名を追加します。

この結果得られるファイルは次のようになります。

<%@ Page Language="C#" MasterPageFile="~/portlets/Resources/MasterPages/WSRP.Master" Title="Content Page Test" %>
<%@ Register assembly="ViewSecurityToken" namespace="SecurityTokenWebPart" tagprefix="uc1" %>
<asp:Content ID="Content1" ContentPlaceHolderID="webpartcontrol" Runat="Server">
<uc1:SecurityTokenWebPart ID="SecurityTokenWebPart1" runat="server" />
</asp:Content>

7. <installdir>\wsrpdefault\wsrp-producer.xmlファイルを更新して、ポートレットを含めます。

- 既存の<portlet>ノードおよびその内容のコピーを<portlets>要素の下に作成します。

- 新しいポートレットのハンドル、表示名、説明、タイトルおよび短い説明という各要素を更新します。

- 各<portlet-mode>要素の下の<url>ノードを更新して、新しいポートレットを指すようにします。(wsrp:editモードおよびwsrp:helpモードは必要ありません。)

完了したら、新しい<portlet>ノードは次のようになります。

<portlet>
<handle>ViewSecurityToken</handle>
<supported-locale>en</supported-locale>
<descriptions>
<description lang="en">View SecurityToken</description>
</descriptions>
<display-names>
<display-name lang="en">View SecurityToken</display-name>
</display-names>
<titles>
<title lang="en">View SecurityToken</title>
</titles>
<short-titles>
<short-title lang="en">View SecurityToken</short-title>
</short-titles>
<supports>
<portlet-modes>
<portlet-mode>
<name>wsrp:view</name>
<url>/portlets/ViewSecurityToken/default.aspx</url>
</portlet-mode>
</portlet-modes>
<mime-type>text/html</mime-type>
</supports>
</portlet>

8. これで、ポートレットがWSRPコンシューマで使用可能になります。(第5.1項「ポートレットとしてのWebパーツの追加」で説明したとおり、すでにOracle WebCenter WSRP Producer for .NETを登録しているはずです)。ポートレットをポータルに追加します。SAMLトークンまたはUNTトークンを設定していないと想定した場合、ポートレットを表示すると、「セキュリティ・トークン使用不可」が表示されます。

5.9.2 デフォルトのSAMLCredentialMapperV2を使用したOracle WebLogic Portal

Oracle WebCenter WSRP Producer for .NETは、デフォルトでSAMLトークンをリクエストするように構成されています。Oracle WebLogic Portalは、このバージョンのOracle WebCenter WSRP Producer for .NETにデフォルトで準拠しているSAML資格証明マッパー・バージョン(SAMLCredentialMapperV2)を使用して設定されています。このチュートリアルでは、Oracle WebLogic PortalのSAMLトークンを表示する方法を示します。

1. Oracle WebLogic PortalをホスティングしているOracle WebLogic Serverにログインします。

2. 「セキュリティ・レルム」→「myrealm」→「プロバイダ」→「資格証明マッピング」の順に選択します。

3. 「SAMLCredentialMapper」をクリックします。(説明には「Security Assertion Markup Language v1.1」が含まれ、バージョンは「2.0」になります)。

4. 「プロバイダ固有」タブをクリックし、「署名鍵別名」が"wsrpconsumerrsa"であることに注意することによって、これがデフォルトの設定であることを確認します。

5. 「管理」タブをクリックした後、「rp_00001」という「リライイング・パーティ」リンクをクリックします。

6. 「有効」と「アサーションの署名」の両方がtrueであることを確認します(両方ともデフォルトではtrueです)。

7. 「Keyinfoを含める」を選択します。

8. 「保存」をクリックします。

9. Oracle WebLogic Serverを再起動します(WLSが再起動は必要がないと示している場合でも)。

10. Oracle WebLogic Portalにログインし、第5.9.1項「Webパーツでのトークンの表示」で作成したポートレットを表示します。ポートレットには、加工していないSAMLセキュリティ・トークンが表示されます。

5.9.3 カスタム署名鍵を使用したOracle WebLogic Portal

前の項では、デフォルトの"wsrpconsumerrsa"署名鍵別名を使用しました。標準的なSAML設定では、独自の秘密鍵を使用してSAMLアサーションを署名します。この項では、Oracle WebCenter WSRP Producer for .NETによって作成されるWSRPプロデューサを説明するためにSAMLアサーションを作成するための、Oracle WebLogic Portalドキュメントで定義されている手順を調整する方法について説明します。

Oracle WebCenter WSRP Producer for .NET用にリライイング・パーティを構成する場合、次のガイドラインに従います。

- "WSS/Sender-Vouches"を使用してリライイング・パーティを作成します。(WSS/Sender-Vouchesを使用するかぎり、Oracle WebLogic Portalのドキュメントのソース・サイトのフェデレーション・サービスに関する説明は無視してかまいません。)

- 「アサーションの署名」および「Keyinfoを含める」が選択されていることを確認します。

- リライイング・パーティがデフォルトの値を使用しない場合(すべてのパーティがこのSAML資格証明マッパーを使用する場合)、WSRPService.wsdlに定義されている.asmxファイルにフルURLを含めます。

5.9.4 Oracle WebLogic Portal用のUNT

このチュートリアルでは、ユーザー名とパスワードを使用してOracle WebLogic PortalのUNTトークンを表示する方法を示します。最初の2つの手順では、登録されたときにOracle WebCenter WSRP Producer for .NETが、ユーザー名およびパスワードを使用してUNTをリクエストするように設定し、残りの手順では、ユーザー名とパスワードを使用してUNTトークンを送信するようにOracle WebLogic Portalを構成します。

1. テキスト・エディタで<installdir>\wsrpdefault\wsdl\1.0\WSRPService.wsdlファイルを開きます。

2. SAMLAuth.xmlを参照するwsp:Policy要素を次のものに置き換えます。

<wsp:Policy s1:Id="UNTAuth.xml">
<wsp:All>
<wssp:Identity>
<wssp:SupportedTokens>
<wssp:SecurityToken
TokenType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#UsernameToken">
<wssp:UsePassword
Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText"/>
</wssp:SecurityToken>
</wssp:SupportedTokens>
</wssp:Identity>
</wsp:All>
</wsp:Policy>

3. テキスト・エディタで<installdir>\wsrpdefault\wsdl\1.0\wsrp_v1_bindings.wsdlファイルを開きます。

4. "SAMLAuth.xml"のすべてのインスタンスを"UNTAuth.xml"に置き換えます。"getMarkup"および"performBlockingInteraction"という名前を持つ<wsdl:input>要素の下に、次のものが表示されます。

<wsp:Policy xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy">
<wsp:PolicyReference URI="#UNTAuth.xml"/>
</wsp:Policy>

注意:
PolicyReference URI値は、<installdir>\wsrpdefault\wsdl\1.0\WSRPService.wsdlでUNTに定義されているwsp:Policyの#Idです。

5. Oracle WebLogic PortalをホスティングしているOracle WebLogic Serverにログインします。

6. 「セキュリティ・レルム」→「myrealm」→「資格証明マッピング」の順に選択します。

7. 「新規」をクリックし、マークアップ・エンドポイントを指す設定を入力します。次のもの以外はデフォルトのままにします。

- 「プロトコル」: http

- 「リモート・ホスト」: <ホスト名> (たとえばmyproducer.mycompany.com)

- 「リモート・ポート」: <ホスト・ポート> (たとえば8678)

- 「パス」: /wsrpdefault/wsdl/1.0/WSRPBaseService.asmx (これはURLにおけるホストおよびポートの後のパスです。パスは"/"で始めてください)。

8. 「次」をクリックする前に、値が正しいことを確認します。http://<host name>:<host port>/wsrpdefault/wsdl/1.0/WSRPBaseService.asmxからレスポンスが返されます。

9. 「次」をクリックします。

10. ユーザー情報を入力します。

- 「ローカル・ユーザー」: <Oracle WebLogic Serverに登録されているユーザー。たとえば"weblogic"ユーザー>

- 「リモート・ユーザー」: testuser <ローカル・ユーザーのログイン時にプロデューサに送信されるユーザー>

- 「リモート・パスワード」: testpassword <ローカル・ユーザーのログイン時にプロデューサに送信されるパスワード>

11. 「終了」をクリックします。

12. Oracle WebLogic Serverを再起動します(WLSが再起動は必要がないと示している場合でも)。

13. 新しい名前でOracle WebLogic Portalにプロデューサを登録して、ポートレットが、SAMLトークンのかわりにUNTトークンを求めるようにします。

1. Oracle WebLogic Portal管理コンソールにログインし、第5.9.1項「Webパーツでのトークンの表示」で登録したポートレットを削除します。

2. 管理コンソールで、1番目のポートレットを登録するために使用したのと同じWSRPService.wsdlを指す、新しいWSRPプロデューサを作成します。

3. 同じポートレットを再び追加します。

4. 資格証明マッパーに入力したローカル・ユーザーを使用してOracle WebLogic Portalにログインし、ポートレットを表示します。ポートレットには、加工されていないUNTセキュリティ・トークンが表示されます。

5.9.5 Oracle WebCenter Portal用のSAML

いくつかのSAMLトークン・プロファイルが、Oracle WebLogic Portalによってサポートされています。Oracle WebCenter WSRP Producer for .NETは、すべてのWSS 1.0オプションをサポートしていますが、WSS 1.1はサポートしていません。このチュートリアルでは、WLPによって提供されているデフォルトに最も似ているSAMLプロファイル(第5.9.3項「カスタム署名鍵を使用したOracle WebLogic Portal」を参照)であるWSS 1.0 SAMLトークン(メッセージIDあり)を使用します。使用可能なセキュリティ・トークン・オプションの詳細は、WSRPプロデューサのセキュリティ設定に関するOracle WebCenter Portalのドキュメントを参照してください。

このチュートリアルでは、Enterprise Managerでこのトークン・プロファイルを設定するプロセスについて説明します。WLSTを使用してWSRPプロデューサを登録する場合、プロデューサを、SAML_TOKEN_WITH_MSG_INTEGRITYトークン・タイプに、および次に説明するEnterprise Managerの設定に対応した他の引数に登録します。チュートリアルの第5.9.1項「Webパーツでのトークンの表示」はすでに終了しているはずです。

1. java keytoolを使用して、Oracle WebCenter Portalホスト・マシン上で秘密鍵のペアを作成します。鍵アルゴリズムを"rsa"に、鍵サイズを1024に設定します。鍵のペアの生成に関するWebCenter PortalまたはJavaのドキュメントを参照してください。(コマンドの例は、C:\Oracle\Middleware\jdk160_20\bin\keytool -genkeypair -keystore C:\Oracle\Middleware\keystores\mykeystore.jks -storepass mykeystorepass -keyalg rsa -keysize 1024 -alias wckey -keypass wckeypassです。)

2. Enterprise Managerで、「新規ポートレット・プロデューサの追加」ページに移動し、「WSRPプロデューサ」を選択します。

3. 第5.9.1項「Webパーツでのトークンの表示」で使用したのと同じWSDLにURLを入力します。

4. 「セキュリティ」セクションで、トークン・プロファイル「メッセージ整合性付きWSS 1.0 SAMLトークン」を選択します。

5. 「カスタム」オプションを選択し、「発行者名」を定義します。これには任意の名前を指定できます。

6. keytoolで鍵を生成するために使用した値に基づいて、ページの「キーストア」セクションに値を入力します。(暗号化鍵の値は空のままにします。暗号化は使用されないため必要ないためです。)

Keystore値

Keytool引数

ストア・パス

-keystore

パスワード

-storepass

署名鍵の別名

-keyalias

署名鍵のパスワード

-keypass

7. プロデューサが登録されたら、ViewSecurityTokenポートレットをWebCenter Portalスペースに追加します。WebCenter Portalに(非匿名で)ログインしている場合、ポートレットにはSAMLトークンが表示され、ユーザー名は「アサーション」に入れられます。

メッセージ保護付きのSAMLに関する注意:
WSS 1.0 SAML(メッセージ保護あり)を使用する場合は、Windows証明書ストアで秘密鍵を作成し、公開鍵証明書をWebCenter Portal: Spacesホスト・マシン上のJavaキーストアにインポートする必要があります。証明書をインポートしたら、keytool importコマンドで受信者の別名として使用したキー別名を入力します。このようにして、インポートされた証明書は、プロデューサへのメッセージの暗号化に使用されます。
Windows証明書ストアを管理するプロセスについては、次の項である第5.9.6項「Oracle WebCenter Portal用のUNT」で説明します。手順はSAMLの場合と同じですが、ただし、「WSS 1.0ユーザー名トークン(パスワードあり)」のかわりに、「WSS 1.0 SAML(メッセージ保護あり)」オプションを選択する必要があります。

5.9.6 Oracle WebCenter Portal用のUNT

Oracle WebCenter Portalでは、2つのユーザー名トークン(UNT)プロファイルがサポートされています。Oracle WebCenter WSRP Producer for .NETは、これらのオプションの両方をサポートしています。このチュートリアルでは、Oracle WebLogic Portalによって提供されているデフォルトに最も似ているUNTプロファイル(第5.9.4項「Oracle WebLogic Portal用のUNT」を参照)であるWSS 1.0ユーザー名トークン(パスワードあり)の操作について説明します。使用可能なセキュリティ・トークン・オプションの詳細は、WSRPプロデューサのセキュリティ設定に関するOracle WebCenter Portalドキュメントを参照してください。

このチュートリアルでは、Enterprise Managerでこのトークン・プロファイルを設定するプロセスについて説明します。WLSTを使用してWSRPプロデューサを登録する場合、プロデューサを、USERNAME_WITH_PASSWORDトークン・タイプに、および次に説明するEnterprise Managerの設定に対応した他の引数に登録します。チュートリアルの第5.9.1項「Webパーツでのトークンの表示」はすでに終了しているはずです。

1. Oracle WebCenter WSRP Producer for .NETをホスティングしているWindowsマシンのWindows証明書ストアに、秘密鍵を追加します。次の手順では、LocalMachineのTrustedPeopleストアおよびLocalMachineのPersonalストアに秘密鍵を作成する方法を示しています。Windows証明書ストアの詳細は、Microsoft社のドキュメントを参照してください。

1. makecert.exeツールを検索します。このツールがない場合は、Microsoft Windows SDK for Windowsおよび.NET Framework 3.5 SP1をダウンロードします。

2. makecert.exeのPATHの依存関係が使用可能なコマンド・ウィンドウを開きます。Visual Studio 2008がある場合は、「スタート」メニューからVisual Studio 2008コマンド・プロンプトを起動できます。Windows SDKがある場合は、「スタート」メニューの「Microsoft Windows SDK」フォルダからコマンド・シェルを起動できます。

3. アルゴリズムがsha1に設定された証明書を作成します。コマンドの例は、makecert.exe -a sha1 -n CN=DotNetWSRPProducer -sr LocalMachine -ss My -sky exchange -sk DotNetWSRPProducerです。

2. 鍵証明書を、Windows証明書ストアのTrustedPeopleストアおよびPersonalストアにインポートします。makecert.exeを実行したのと同じコマンド・ウィンドウを使用して、certmgr.exeを実行します。コマンドの例は、certmgr.exe -add -c -n DotNetWSRPProducer -s -r LocalMachine My -s -r LocalMachine TrustedPeopleです。

3. Oracle WebCenter WSRP Producer for .NETを実行しているIISアプリケーション用のASP.NETプロセスを実行しているユーザーに証明書に対するセキュリティ権限を付与します(デフォルトでは、これはネットワーク・サービス・ユーザーです)。

- 管理者バージョンのWSE 2.0 SP3をインストールした場合は、「スタート」メニューから使用可能なX509証明書ツールを使用し、適切なストアから証明書を開いて鍵ファイルのプロパティを表示し、ネットワーク・サービスがフル・コントロールになっていることを確認します。

- X509証明書ツールがない場合は、%SystemDrive%\ProgramData\Microsoft\Crypto\RSA\MachineKeysに移動し、最新のファイルを見つけ(これらはシステム・ファイルのため、隠しファイルを表示するようにWindows Explorerを構成する必要があります)、ネットワーク・サービス・ユーザーにフル・コントロールを付与することによって、作成した証明書に適切な権限を設定できます。

4. ストア内で証明書を検索します。

1. コマンド・ラインからmmc.exeを起動します。

2. メニュー・バーから、「ファイル」→「スナップインの追加と削除」を選択します。

3. 「証明書」を選択します。

4. 「コンピュータ アカウント」を選択します(LocalMachineの内容を表示します)。

5. ストアの「個人」セクションに移動し、追加した証明書を検索します。

5. 証明書をエクスポートします。

1. 証明書を右クリックし、「すべてのタスク」→「エクスポート...」を選択します。

2. 表示されるウィザードで、DER encoded binaryとして(DERはjava keytoolで好まれるX509形式です)、好きなファイル名(dnaakey.derなど)を付けて公開鍵をエクスポートします。

6. .derファイルをWebCenter Portal: Spacesサーバーにコピーし、java keytoolを使用して鍵をインポートします。コマンドの例は、C:\Oracle\Middleware\jdk160_20\bin\keytool -genkeypair -keystore C:\Oracle\Middleware\keystores\mykeystore.jks -import -storepass mykeystorepass -keyalg rsa -keysize 1024 -alias dnaakey -keypass dnaakeypass -file C:\Oracle\Middleware\keystores\dnaakey.derです。

7. java keytoolを使用して、Oracle WebCenter Portalホスト・マシン上で秘密鍵のペアを作成します。鍵アルゴリズムを"rsa"に、鍵サイズを1024に設定します。第5.9.5項「Oracle WebCenter Portal用のSAML」をすでに終了している場合は、同じ鍵をこのチュートリアルで使用します。鍵のペアの生成に関する詳細は、WebCenter PortalまたはJavaのドキュメントを参照してください。コマンドの例は、C:\Oracle\Middleware\jdk160_20\bin\keytool -genkeypair -keystore C:\Oracle\Middleware\keystores\mykeystore.jks -storepass mykeystorepass -keyalg rsa -keysize 1024 -alias wckey -keypass wckeypassです。

8. Enterprise Managerで、「新規ポートレット・プロデューサの追加」ページに移動し、「WSRPプロデューサ」を選択します。

9. 第5.9.1項「Webパーツでのトークンの表示」で使用した同じWSDLにURLを入力します。

10. 「セキュリティ」セクションで、トークン・プロファイル「WSS 1.0ユーザー名トークン(パスワードあり)」を選択します。

11. 「カスタム」オプションを選択します。

12. 「関連付けられている外部アプリケーション」セクションで、「新規作成」を選択します。新しい外部アプリケーションを作成できる新しいページが表示されます。アプリケーションに名前を付け、「OK」をクリックします。これにより、WebCenter Portalは、WSRPプロデューサ・ポートレットに渡すログイン資格証明を入力するようにエンド・ユーザーに求めるように指示されます。

13. 「新規ポートレット・プロデューサの追加」ページに戻ったら、keytoolで鍵を生成するために使用した値に基づいて、ページの「キーストア」セクションに値を入力します。(暗号化鍵の値は空のままにします。暗号化は使用されないため必要ないためです)。

Keystore値

Keytool引数

ストア・パス

-keystore

パスワード

-storepass

署名鍵の別名

-keyalias

署名鍵のパスワード

-keypass

受信者の別名
(注意: この値は、鍵の生成からではなく、証明書のインポートから来ています(手順6)。)

-keyalias

14. プロデューサが登録されたら、ViewSecurityTokenポートレットをWebCenter Portalスペースに追加します。初めてポートレットを表示すると、「ログイン情報の更新」リンクが表示されます。このリンクをクリックし、ユーザー名およびパスワードを入力します。これは、ユーザー名とパスワード・トークン(UNT)にあるポートレットに送信されるユーザー名とパスワードになります。この情報を入力すると、ポートレットには、入力したユーザー名とパスワードとともにトークンが表示されます。

5.10 Oracle WebCenter Portal機能の使用方法

次の機能は、特にOracle WebCenter Portal用に含まれています。これらの機能はWSRP標準に基づいているため、どのWSRPコンシューマにも適用できる可能性があります。

5.10.1 Oracle WebCenter Portalのカスタマイズの使用方法

このチュートリアルでは、Oracle WebCenter Portalスペースに表示されるWebパーツ用の「カスタマイズ」オプションを有効にする方法を示します。この例は、第5.1項「ポートレットとしてのWebパーツの追加」で説明した"TestPreferences"ポートレットから始まります。

テキスト・エディタで<installdir>\wsrpdefault\wsrp-producer.xmlを開きます。TestPreferencesポートレットを検索し、urn:javax:portlet:mode:custom:edit_defaultsという名前の新しい<portlet-mode>セクションを、<portlet-modes>要素の下に追加します。新しい値を備えた、ポートレットの<supports>要素は、次のようになります。

<supports>
<portlet-modes>
<portlet-mode>
<name>wsrp:view</name>
<url>/portlets/TestPreferences/default.aspx</url>
</portlet-mode>
<portlet-mode>
<name>wsrp:edit</name>
<url>/portlets/TestPreferences/default.aspx</url>
</portlet-mode>
<portlet-mode>
<name>urn:javax:portlet:mode:custom:edit_defaults</name>
<url>/portlets/TestPreferences/default.aspx</url>
</portlet-mode>
</portlet-modes>
<mime-type>text/html</mime-type>
</supports>

TestPreferencesポートレットをWebCenter Portalスペースに追加し、Oracle Composerで「カスタマイズ」オプション(レンチ・アイコン)を選択します。

5.10.2 Oracle WebCenter Portalパラメータの使用方法

WSRP 2.0の仕様で定義されているnavigationalParametersを使用して、Oracle WebCenter Portalパラメータは、WSRP 2.0プロデューサに渡されます。このチュートリアルでは、WebCenter Portalパラメータをポートレットに渡す方法を示します。

Visual Studioで、第5.1項「ポートレットとしてのWebパーツの追加」で作成したTestPreferences.ascx Webユーザー・コントロールを開きます。lblParameter1とlblParameter2という2つのラベルをフォームの下部に追加します。

<br />
<asp:Label ID="lblParameter1" runat="server" Text=""></asp:Label></br>
<asp:Label ID="lblParameter2" runat="server" Text=" "></asp:Label>

次のコードをPage_Loadメソッドの下部に追加します。

Dictionary<string, string> ParameterCollection = HttpContext.Current.Items["NavigationalParameters"] as Dictionary<string, string>;
lblParameter1.Text = ParameterCollection["TestParameter1"];
lblParameter2.Text = ParameterCollection["TestParameter2"];

コードがコンパイルされることをテストします。特に、System.Collections.Genericが参照されていることを確認します。App_Codeディレクトリの下にあるTestPreferences.ascxとTestPreferences.ascx.cs(およびdesigner.csファイル(いずれかを作成した場合))を更新します。

WebCenter Portal WSRPコンシューマにこれらのパラメータの存在を知らせるには、次の手順が必要です。テキスト・エディタで<installdir>\wsrpdefault\wsrp-producer.xmlを開き、TestPreferences <portlet>要素を検索します。<supports>要素の上に、次のXMLを追加します。

<navigational-parameters>
<parameter>
<identifier>TestParameter1</identifier>
</parameter>
<parameter>
<identifier>TestParameter2</identifier>
</parameter>
</navigational-parameters>

識別子名が、前の手順で説明したPage_Loadメソッドのナビゲーショナル・パラメータ・コレクションから取得した名前と一致することに注意してください。

WebCenter Portalページで、WebCenter Portalページ・エディタを開きます。TestPreferencesポートレットを追加し、「編集」ボタンをクリックします。「パラメータ」タブに、定義した2つのパラメータTestParameter1とTestParameter2が表示されます。各パラメータに値を入力し、「適用」をクリックし、「OK」をクリックします。入力した値が、ポートレットの下部に表示されます。

注意:
WebCenter Portal WSRPコンシューマは、navigationalParameterの識別子の部分のみを使用します。ただし、navigationParametersを使用する別のWSRPコンシューマがある場合は、説明、ラベルおよびヒントのローカライズされた値をwsrp-producer.xmlに割り当てることもできます。次に例を示します。

<navigational-parameters>
<parameter>
<identifier>TestParameter1</identifier>
<description>
<parameter-description lang="en">parameter1-en</parameter-description>
<parameter-description lang="fr">parameter1-fr</parameter-description>
</description>
<label>
<parameter-label lang="en">parameter1-label-en</parameter-label>
<parameter-label lang="fr">parameter1-label-fr</parameter-label>
</label>
<hint>
<parameter-hint lang="en">parameter1-hint-en</parameter-hint>
<parameter-hint lang="fr">parameter1-hint-fr</parameter-hint>
</hint>
</parameter>
</navigational-parameters>

Copyright © 2010, 2011, Oracle and/or its affiliates. All rights reserved.