Oracle® Fusion Middleware Oracle WebCenter WSRP Producer for .NET開発ガイド 11gリリース1 (11.1.1.7.0) B69391-03 |
|
前 |
この章では、一般的な開発シナリオ用の手順を追ったチュートリアルを示します。
この章の内容は次のとおりです。
デフォルトでは、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
)を参照してください。
Visual Studio Webアプリケーション・プロジェクトを開き、TestPreferences.ascx
というWebユーザー・コントロールを作成します。
ヒント: Visual Studioプロジェクトは、Webサイト・プロジェクトではなく、Webアプリケーション・プロジェクトであり、プロジェクト・タイプがVisual C#である必要があります。 |
lblStringPref
、lblBooleanPref
およびlblEnumPref
という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
続行する前に、コードがコンパイルされることをテストします。
installdir
\wsrpdefault\portlets
の下にある既存の\ASPNET_AJAX_sample
フォルダのコピーを作成し、名前をTestPreferences
に変更します。
Simple_DateTime.ascx
ファイルを、手順1から3で作成したTestPreferences.ascx
ファイルに置き換えます。
コンパイルされたアセンブリを、Visual Studioプロジェクトからinstalldir
\wsrpdefault\bin
フォルダにコピーします。
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>
次のようにして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>
「スタート」→「プログラム」→「Oracle WebCenter WSRP Producer for .NET」→「WSRP 2.0 WSDL」のショートカットにあるWSDL URLでWSRPコンシューマを指すことによって、Oracle WebCenter WSRP Producer for .NETを登録します。(WSRPプロデューサWSDLの登録方法の詳細は、WSRPコンシューマ・ポータルの製品ドキュメントを参照してください)。
これで、ポートレットがWSRPコンシューマで使用可能になります。ポートレットをテストします。
ポートレットをポータルに追加します。TestPreferences.ascx
ファイルのプリファレンスに設定されているデフォルト値を示す3つのラベルが表示されます。
WSRPコンシューマ・ポータルのドキュメントに従って、プリファレンス・エディタにアクセスします。独自のWebパーツ・エディタ・ゾーンを.NETに追加する場合に表示されるものと同じプリファレンス・エディタが表示されます。プリファレンスを変更して 「閉じる」をクリックし、ラベルが変更されていることを確認します。
ポータルからログアウトして、再びポータルにログインします。変更したプリファレンス値が維持されます。
Oracle WebCenter WSRP Producer for .NETの主要な機能は、ASP.NET AJAXを使用して表示されるコントロールのサポートです。
このチュートリアルでは、前の項の例から始めます。手順の大半は、ASP.NET AJAX機能を使用するようにASP.NET Webパーツを設定するために必要な標準的なタスクです。ASP.NET AJAXスクリプト・マネージャおよび更新パネルの設定方法の詳細は、Microsoft社のドキュメントを参照してください。
第5.1項「ポートレットとしてのWebパーツの追加」で作成したプロジェクトを開きます。
Visual Studioツールボックスの「AJAX Extensions」から、Script ManagerおよびUpdate Panelを追加します。
UpdatePanelの内側にラベル、テキスト・ボックスおよびボタンを追加します。
UpdatePanelの外側にラベル、テキスト・ボックスおよびボタンを追加します。完了したら、ソース・ビューは次のようになります。
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="TestPreferences.ascx.cs" Inherits="TestPref.TestPreferences" %> <%@ Register Assembly="System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" Namespace="System.Web.UI" TagPrefix="asp" %> <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>
テキスト・ボックス・エントリがラベルに表示されるように、ページ・ロード・メソッドを変更します。ページ・ロード・メソッドのソース・コードは、次のようになります
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; }
続行する前に、コードがコンパイルされることをテストします。(コントロールが動作することをテストするために、Visual StudioプロジェクトのASPXページにコントロールを登録することもできます。詳細は、Visual Studioのドキュメントを参照してください)。
テキスト・エディタでTestPreferences.ascx
ファイルを開き、asp:ScriptManager
コントロールを削除します。Oracle WebCenter WSRP Producer for .NETは、ScriptManagerを登録するASP.NETマスター・ページを参照し、ASP.NETでは、1つのアプリケーションに対して複数のScriptManagerは許可されません。詳細は、マスター・ページおよびScriptManagerに関するMicrosoft社のドキュメントを参照してください。
続行する前に、コードがコンパイルされることをテストします。
installdir
\wsrpdefault\portlets\TestPreferences.ascx
ファイルを最新バージョンのファイルに置き換えます。
installdir
\wsrpdefault\bin
フォルダ内のコンパイル済アセンブリを置き換えます。
ポータルに戻ってポートレットをリフレッシュし、ポートレットの機能を再びテストします。
ASP.NET 3.5 AJAXコントロールを使用するのではなく、XMLHttpRequests
を直接制御する必要がある場合があります。これを行うには、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がある場合など)。これを行うには、handle 問合せ文字列引数を、wsrp-producer.xml 内のポートレットに付与したハンドルを参照するターゲットURLに追加します。この例では、非表示のURLが変更されるように、ハンドルはTestPreferences になります。
<a id="hiddenposturl" href="AjaxPostDestination.aspx?handle=TestPreferences" visible="false" ></a> 返されるコンテンツ・タイプが |
<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リクエストのように)を含むことができないことです。
第5.1項「ポートレットとしてのWebパーツの追加」で作成した例と同じディレクトリに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
などの問合せ文字列パラメータはリクエストに追加できないため、これを一意にする方法はありません。
続行する前に、コードがコンパイルされることをテストします。
installdir
\wsrpdefault\portlets\TestPreferences\UserControl\TestPreferences.ascx
ファイルを最新バージョンのファイルに置き換えます。
installdir
\wsrpdefault\bin
フォルダ内のコンパイル済アセンブリを置き換えます。
AjaxPostDestination.aspx
ファイルをinstalldir
\wsrpdefault\portlets\TestPreferences
にコピーします。
ポータルに戻って、ポートレットが存在するページをリフレッシュします。これでポートレットには、4つのペットが一覧表示されたリストボックスが表示されます。ペット名をクリックすると、ポートレットの下部にペットの選択が表示されます。
要約すると、ASP.NET 3.5 AJAXコントロールを使用しないでコード内でXMLHttpRequestを使用するには、次のルールに従います。
XMLHttpRequest
のターゲットURLを、表示されていないアンカー・タグ内にhref
として配置し(または、表示されていない入力フィールドなどの他の場所を使用し)、次にXMLHttpRequest
で送信するターゲットURLとしてそのhref
の値を取得します。
ポートレット・コンテンツ変換ルールセットによって変換されるAJAXリクエストからのレスポンスが必要な場合(たとえば、URLをWSRPコンシューマによってプロキシ処理する場合など)、handle
問合せ文字列引数を、wsrp-producer.xml
内のポートレットに付与したハンドルを参照するターゲットURLに追加します。ルールセットの詳細は、第2.2項「ポートレット・コンテンツ変換ルールセット」を参照してください。
querystring
パラメータを、データのポスト方法として使用しないでください。POSTパラメータのみを使用してください。
リクエストがキャッシュされないように、ターゲット・ページのキャッシュをオフにします。
ポートレットがプリファレンスを使用しない場合、Oracle WebCenter WSRP Producer for .NETを使用すると、WSRPを備えたASP.NETアプリケーションを表示することができます。このチュートリアルでは、ASP.NET WebフォームをOracle WebCenter WSRP Producer for .NETに追加します。
非常に単純な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>
testASPX
フォルダがinstalldir
\wsrpdefault\portlets
の下に存在しない場合、これを作成します。
作成したtest.aspxファイルをtestASPX
フォルダにコピーします。
次のようにして、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>
testASPX
というポートレット・ハンドルを備えた新しい<portlet>
エントリを、wsrp-producer.xml
に作成します。Webフォームはプリファレンスをサポートしていないため、wsrp:edit
の<portlet-mode>
要素を削除します。
wsrp:view
の<portlet-mode>
要素は次のようになります。
<portlet-mode> <name>wsrp:view</name> <url>/portlets/testASPX/test.aspx</url> </portlet-mode>
新しいtestASPX
ポートレットをポータルに追加します。Hello World
が表示されます。
前述の例では、C#コードは直接ファイル内に配置しました。コードビハインドの.cs
ファイルを使用する場合、単にこのコードを、installdir
\wsrpdefault
の下の\App_Code
サブフォルダに追加するか、またはコンパイル済C#アセンブリを installdir
\wsrpdefault\bin
に追加し、アセンブリまたはクラスを参照するようにASPXファイル内の<%@ Page
ディレクティブを変更します。
ポートレットのヘルプ・ファイルを追加するには、単にヘルプ・ページのHTMLファイルを作成し、ヘルプ・ファイルを指す、wsrp:help
という名前の新しい<portlet-mode>
要素を追加します。たとえば、testASPX
ディレクトリに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
ページが表示されます。
Oracle WebCenter WSRP Producer for .NETでは、マークアップ変換を実装して、ブラウザに表示される前にURLおよび他の静的コンテンツを変更できます。
この項の内容は次のとおりです。
このチュートリアルでは、第5.3項「ASP.NETアプリケーションの追加」のHello World
テキストがHello New World
と読めるように変更する簡易例を示します。
テキスト・エディタでinstalldir
\wsrpdefault\wsrp-producer.xml
ファイルを開きます。
ハンドル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項「ポートレット・コンテンツ変換ルールセット」を参照してください。
testASPX
ポートレットを含んでいるポータル・ページをリフレッシュします。これでポートレットには、Hello New World
が表示されます。
このチュートリアルでは、ASP.NET AJAXコントロールの追加時に.NET Frameworkによって生成されるWebResource.axd
ファイルおよびScriptResource.axd
ファイルをプロキシ処理するように、第5.2項「ASP.NET AJAXコントロールを備えたWebパーツの追加」のポートレットを変更することによって、カスタムURL変換を示します(wsrp-producer.xml
ファイルの上部で定義されるデフォルトのルールセットによって、.NET Frameworkによって生成されるWebリソース・ファイル(*.axd
)へのURLは絶対になりますが、WSRPリソースとしてのプロキシ処理は行われません。.axd
ファイルをプロキシ処理する実際的な理由は、WSRPコンシューマ・ポータル・ユーザーが内部ネットワークのURLにアクセスできないシナリオです)。
テキスト・エディタでinstalldir
\wsrpdefault\wsrp-producer.xml
ファイルを開きます。
デフォルトのルールセット全体(<RuleSet id="Default">
)をコピーし、id
の名前をaxdproxy
に変更します。
新しいルールセット内で1番目の<RewriterRule>
を検索します。<ApplyTo>
要素内に、, .axd
を追加します。
2番目および4番目の<RewriterRule>
要素を検索し、それぞれの下の<ApplyTo>
要素から,.axd
を削除します。
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>
ハンドルTestPreferences
を備えた<portlet>
ノードに移動し、新しいaxdproxy
ルールセット(<RuleSetRef>axdproxy</RuleSetRef>
)を参照するように<RuleSetRef>
要素を変更します(存在する場合)。<RuleSetRef>
要素が存在しない場合は、これを追加します。
変更内容をwsrp-producer.xml
に保存します。
TestPreferences
ポートレットを含んでいるポータル・ページをリフレッシュします。これで.axd
を備えたすべてのURLは、WSRPコンシューマ・ポータルによってプロキシ処理されます。これを確認するには、DOM検査ツールを使用して.axd
ファイルを検索します。これらのファイルは、WSRPコンシューマ・ポータルへのURLで始まるURLエンコード済値に変換されます。これらのURLと、プロキシ処理されていないURLを比較するには、ポートレットの<RuleSetRef>
を単にDefault
に切り替えます。
Oracle WebCenter WSRP Producer for .NETでは、スキンおよびテーマを適用するための特別な手順を必要としません。スタイル、テーマおよびスキンの管理は、.NET Frameworkに委任されます。たとえば、特定のOracle WebCenter Portalテーマを適用するには、ソースの.css
ファイルを\App_Themes
フォルダに単に配置し、標準の.NETルールに従って、目的のスタイルを単一コントロール、単一ポートレットまたはポートレット・セットに適用します。
この簡易なチュートリアルでは、組込みのASP.NET機能を使用して、すべてのポートレット内のすべてのラベルにスタイルを適用する方法を示します。詳細は、ASP.NETのテーマおよびスキンに関するMicrosoft社のドキュメントを参照してください。
installdir
\wsrpdefault\App_Themes
にフォルダを作成し、MyTheme
と名前を付けます。
次の行を含む新しいファイルを作成します。
<asp:Label runat="server" ForeColor="white" BackColor="green" />
ファイルにmy.skin
と名前を付けて、\MyTheme
フォルダに保存します。
テキスト・エディタでinstalldir
\wsrpdefault\Web.config
ファイルを開きます。
<pages>
要素を検索し、次の属性theme="MyTheme"
を追加します。これにより、すべてのASP.NETページは、App_Themes\MyTheme
フォルダで定義されているテーマを使用します。
ラベルを含んでいるポートレット(たとえば、前のチュートリアルのポートレットなど)を表示し、背景色が緑であることに注意します。
ポートレット間でデータを渡す最も直接的な方法は、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要素)、詳細ポートレットを検索して、非表示のフィールドに値を書き込みます。このコードの最も重要な部分は、ポートレットを一意に識別するsrc
属性内のテキストに基づいて、ポートレットを含むiFrame
を検索することによって、どのように2番目のポートレットを特定するかということです。(この例では、ポートレットが配置されるフォルダ名DetailPage
が一意の識別子です。)
次に、詳細ポートレットを作成します。
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を使用してこれらのコントロールをポートレットとして表示します。
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>
installdir
\wsrpdefault\portlets\MasterList\UserControl
フォルダを作成し、作成したMasterList.ascx
ファイルをこのフォルダにコピーします。
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>
installdir
\wsrpdefault\portlets\DetailPage\UserControl
フォルダを作成し、作成したDetailPage.ascx
ファイルをこのフォルダにコピーします。
テキスト・エディタで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>
「スタート」→「プログラム」→「Oracle WebCenter WSRP Producer for .NET」→「WSRP 2.0 WSDL」のショートカットにあるWSDL URLでWSRPコンシューマを指すことによって、Oracle WebCenter WSRP Producer for .NETを登録します。(WSRPプロデューサWSDLの登録方法の詳細は、WSRPコンシューマ・ポータルの製品ドキュメントを参照してください)。
HousingType
ポートレットおよびHousingDetail
ポートレット(これらはwsrp-producer.xml
ファイルで定義されている名前です)をポータルの単一ページに追加します。1つのポートレットでハウジング・タイプをクリックすると、ハウジング・タイプに関する詳細情報が別のポートレットに表示されます。
このチュートリアルでは、ポートレット間通信機能をポートレットに追加するための簡単な1つの方法を示します。
このチュートリアルでは、ユーザー・プロファイル・データを使用するWebパーツを作成します。Webパーツは、System.Web.UI.WebControls.WebParts.WebPart
から継承されるクラスとして作成されます。Webユーザー・コントロールを作成して、同じ機能を実行することもできます。両方のオプションに関する詳細は、Microsoft社のドキュメントを参照してください。
重要: この注意は、WSRPの仕様で定義されているプリファレンスを使用するWSRPコンシューマにとって非常に重要です(Oracle WebCenter Portalを含む)。ASP.NETは、プロファイル・プロパティの1レベルのみのネストをサポートしていますが(プロパティは <group name="businessInfo_online"> <add name="email" defaultValue="John.Doe@acme.com"/> </group> この問題は、ASP.NETと同じ単一レベルのネスト・ルールに従うため、Oracle WebLogic Portalには該当しません。 |
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); } } }
参照をSystem.Core
に追加して、コードがコンパイルされるのを確認します。
ソリューション・エクスプローラでソリューションを右クリックし、「参照の追加」を選択します。
「.NET」タブをクリックして、System.Coreまでスクロールします。
ヒント: リスト全体をロードする場合、リストをクリックし、System.Core と入力すると、リストをスクロールしないで項目を選択できます。 |
「OK」をクリックして、新しい参照を受け入れます。
このコードをコンパイルしてTestUserProfile
というアセンブリにし、このアセンブリをinstalldir
\wsrpdefault\bin
にコピーします。
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 プロファイル・プロパティは作成できません。 |
installdir
\wsrpdefault\portlets
の下にTestUserProfile
というフォルダを作成します。
default.aspx
ファイルを、installdir
\wsrpdefault\portlets\ASPNET_AJAX_sample
から新しいTestUserProfile
フォルダにコピーします。
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>
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>
これで、ポートレットがWSRPコンシューマで使用可能になります。(第5.1項「ポートレットとしてのWebパーツの追加」で説明したとおり、すでにOracle WebCenter WSRP Producer for .NETを登録しているはずです)。ポートレットをポータルに追加します。Web.Config
のプロファイル・プロパティのデフォルト値を示す2つのラベルができます。
ポータルのドキュメントに従って、電子メール・プリファレンスを送信するようにWSRPコンシューマを構成します。
Oracle WebLogic Portalの場合、次の手順を使用します。(デフォルトのWLP Data Syncは、GroupSpace
というPropertySet
を持ち、このPropertySet
のプロパティの1つはemail
と呼ばれます。)
Oracle WebLogic Portal管理コンソールにログインします。
「ユーザー、グループおよびロール」→「ユーザー管理」を選択します。
Webパーツをテストするために使用してきたユーザーをクリックします。
「ユーザー・プロファイル」タブをクリックします。
ドロップダウン・メニューから、「GroupSpace」PropertySet
を選択します。(このPropertySet
が存在しない場合、GroupSpace
という新しいPropertySet
を作成し、これにemail
というSingle, Unrestricted
プロパティを移入します。)
email
プロパティの値を入力します。
編集したユーザーでOracle WebLogic Portalにログインし、UserProfile
Webパーツ・ポートレットを表示して変更内容を確認します。
デフォルトでは、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
サブフォルダにあるファイルを参照してください。
この項では、数多くの方法でセキュリティ・トークンにアクセスする方法を示すいくつかのチュートリアルを提供します。
このチュートリアルでは、セキュリティ・トークンを表示する単純なWebパーツを作成します。作成されたWebパーツは汎用的なので、どのタイプのwsse:security
トークンの参照にも使用できます(Oracle WebLogic PortalのSAMLまたはOracle WebCenter PortalのUNTを含む)。Webパーツは、System.Web.UI.WebControls.WebParts.WebPart
から継承されるクラスとして作成されます(Webユーザー・コントロールを使用して同じ機能を提供できます)。
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); } }
参照をSystem.web
に追加して、コードがコンパイルされるのを確認します。
ソリューション・エクスプローラでソリューションを右クリックし、「参照の追加」を選択します。
「.NET」タブをクリックして、System.webまでスクロールします。
ヒント: リスト全体をロードする場合、リストをクリックし、System.web と入力すると、リストをスクロールしないで項目を選択できます。 |
「OK」をクリックして、新しい参照を受け入れます。
このコードをコンパイルして、ViewSecurityToken
というアセンブリにします。
アセンブリをinstalldir
\wsrpdefault\bin
にコピーします。
installdir
\wsrpdefault\portlets
の下にViewSecurityToken
というフォルダを作成します。
default.aspx
ファイルを、installdir
\wsrpdefault\portlets\ASPNET_AJAX_sample
から新しいViewSecurityToken
フォルダにコピーします。
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>
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>
これで、ポートレットがWSRPコンシューマで使用可能になります。(第5.1項「ポートレットとしてのWebパーツの追加」で説明したとおり、すでにOracle WebCenter WSRP Producer for .NETを登録しているはずです)。ポートレットをポータルに追加します。SAMLトークンまたはUNTトークンを設定していないと想定した場合、ポートレットを表示すると、「セキュリティ・トークン使用不可」
が表示されます。
Oracle WebCenter WSRP Producer for .NETは、デフォルトでSAMLトークンをリクエストするように構成されています。Oracle WebLogic Portalは、このバージョンのOracle WebCenter WSRP Producer for .NETにデフォルトで準拠しているSAML資格証明マッパー・バージョン(SAMLCredentialMapperV2)を使用して設定されています。このチュートリアルでは、Oracle WebLogic PortalのSAMLトークンを表示する方法を示します。
Oracle WebLogic PortalをホスティングしているOracle WebLogic Serverにログインします。
「セキュリティ・レルム」→「myrealm」→「プロバイダ」→「資格証明マッピング」の順に移動します。
「SAMLCredentialMapper」をクリックします。(説明には「Security Assertion Markup Language v1.1」
が含まれ、バージョンは「2.0」
になります)。
「プロバイダ固有」タブをクリックし、「署名鍵別名」がwsrpconsumerrsa
であることに注意することによって、これがデフォルトの設定であることを確認します。
「管理」タブをクリックした後、「rp_00001」という「リライイング・パーティ」リンクをクリックします。
「有効」と「アサーションの署名」の両方がtrue
であることを確認します(両方ともデフォルトではtrue
です)。
「Keyinfoを含める」を選択します。
「保存」をクリックします。
Oracle WebLogic Serverを再起動します(WebLogic Serverが再起動は必要がないと示している場合でも)。
Oracle WebLogic Portalにログインし、第5.9.1項「Webパーツでのトークンの表示」で作成したポートレットを表示します。ポートレットには、加工していないSAMLセキュリティ・トークンが表示されます。
前の項では、デフォルトの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を含めます。
このチュートリアルでは、ユーザー名とパスワードを使用してOracle WebLogic PortalのUNTトークンを表示する方法を示します。最初の2つの手順では、登録されたときにOracle WebCenter WSRP Producer for .NETが、ユーザー名およびパスワードを使用してUNTをリクエストするように設定し、残りの手順では、ユーザー名とパスワードを使用してUNTトークンを送信するようにOracle WebLogic Portalを構成します。
テキスト・エディタでinstalldir
\wsrpdefault\wsdl\2.0\WSRPService.wsdl
ファイルを開きます。
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>
テキスト・エディタでinstalldir
\wsrpdefault\wsdl\2.0\wsrp_v1_bindings.wsdl
ファイルを開きます。
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\2.0\WSRPService.wsdl でUNTに定義されているwsp:Policy の#Idです。 |
Oracle WebLogic PortalをホスティングしているOracle WebLogic Serverにログインします。
「セキュリティ・レルム」→「myrealm」→「資格証明マッピング」の順に移動します。
「新規」をクリックし、マークアップ・エンドポイントを指す設定を入力します。次のもの以外はデフォルトのままにします。
プロトコル: http
リモート・ホスト: host_name
(myproducer.mycompany.com
など)
リモート・ポート: host_port
(8678
など)
パス: /wsrpdefault/wsdl/2.0/WSRPBaseService.asmx
(これはURL内のホストおよびポートの後のパスです。パスは/
で始めてください。)
「次」をクリックする前に、値が正しいことを確認します。http://
host_name
:
host_port
/wsrpdefault/wsdl/2.0/WSRPBaseService.asmx
からレスポンスが返されます。
「次」をクリックします。
ユーザー情報を入力します。
ローカル・ユーザー: Oracle WebLogic Serverに登録されているユーザー。たとえばweblogic
ユーザー。
リモート・ユーザー: testuser
。ローカル・ユーザーのログイン時にプロデューサに送信されるユーザー。
リモート・パスワード: testpassword
。ローカル・ユーザーのログイン時にプロデューサに送信されるパスワード
「終了」をクリックします。
Oracle WebLogic Serverを再起動します(WebLogic Serverが再起動は必要がないと示している場合でも)。
新しい名前でOracle WebLogic Portalにプロデューサを登録して、ポートレットが、SAMLトークンのかわりにUNTトークンを求めるようにします。
Oracle WebLogic Portal管理コンソールにログインし、第5.9.1項「Webパーツでのトークンの表示」で登録したポートレットを削除します。
管理コンソールで、1番目のポートレットを登録するために使用したWSRPService.wsdl
を指す、新しいWSRPプロデューサを作成します。
同じポートレットを再び追加します。
資格証明マッパーに入力したローカル・ユーザーとしてOracle WebLogic Portalにログインし、ポートレットを表示します。ポートレットには、加工されていないUNTセキュリティ・トークンが表示されます。
いくつかのSAMLトークン・プロファイルが、Oracle WebLogic Portalによってサポートされています。Oracle WebCenter WSRP Producer for .NETは、すべてのWSS 1.0オプションをサポートしていますが、WSS 1.1はサポートしていません。このチュートリアルでは、Oracle WebLogic Portalによって提供されているデフォルトに最も似ている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パーツでのトークンの表示」はすでに終了しています。
java keytool
を使用して、Oracle WebCenter Portalホスト・マシン上で秘密鍵のペアを作成します。鍵アルゴリズムをrsa
に、鍵サイズを1024
に設定します。
次に例を示します。
keytool -genkeypair -keystore mykeystore.jks -storepass mykeystorepass -keyalg RSA -keysize 1024 -alias wckey -keypass wckeypass -dname "cn=spaces,dc=example,dc=com" -validity 360
鍵ペアの生成の詳細は、Oracle WebCenter PortalまたはJavaのドキュメントを参照してください。
Enterprise Managerで、「新規ポートレット・プロデューサの追加」ページに移動し、「WSRPプロデューサ」を選択します。
第5.9.1項「Webパーツでのトークンの表示」で使用した同じWSDLにURLを入力します。
「セキュリティ」セクションで、トークン・プロファイル「メッセージ整合性付きWSS 1.0 SAMLトークン」を選択します。
「カスタム」オプションを選択し、「発行者名」を定義します。これには任意の名前を指定できます。
「デフォルト・ユーザー」(weblogic
など)を指定します。
keytool
で鍵を生成するために使用した値に基づいて、ページの「キーストア」セクションに値を入力します。(暗号化鍵の値は空のままにします。暗号化は使用されないため必要ないためです)。
ストア・パス: -keystore
に指定した値を使用します。
パスワード: -storepass
に指定した値を使用します。
署名鍵の別名: -keyalias
に指定した値を使用します。
署名鍵のパスワード: -keypass
に指定した値を使用します。
プロデューサが登録されたら、ViewSecurityToken
ポートレットをWebCenter Portalポータルに追加します。WebCenter Portalに(非匿名で)ログインしている場合、ポートレットにはSAMLトークンが表示され、ユーザー名は「アサーション」に入れられます。
メッセージ保護付きのSAMLに関する注意: WSS 1.0 SAML(メッセージ保護あり)を使用する場合は、Windows証明書ストアで秘密鍵を作成し、公開鍵証明書をWebCenter Portalホスト・マシン上のJavaキーストアにインポートする必要があります。証明書をインポートしたら、keytool importコマンドで受信者の別名として使用したkeyalias を入力します。このようにして、インポートされた証明書は、プロデューサへのメッセージの暗号化に使用されます。
Windows証明書ストアを管理するプロセスは、次の項(第5.9.6項「Oracle WebCenter Portal用のUNT」)で説明されています。「WSS 1.0ユーザー名トークン(パスワードあり)」のかわりに「メッセージ保護付きWSS 1.0 SAMLトークン」を選択する必要がある点以外、SAMLの場合の手順と同様です。 |
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プロデューサのセキュリティ設定に関するWebCenter Portalドキュメントを参照してください。
このチュートリアルでは、Enterprise Managerでこのトークン・プロファイルを設定するプロセスについて説明します。WLSTを使用してWSRPプロデューサを登録する場合、プロデューサを、USERNAME_WITH_PASSWORD
トークン・タイプに、および次に説明するEnterprise Managerの設定に対応した他の引数に登録します。チュートリアルの第5.9.1項「Webパーツでのトークンの表示」はすでに終了しています。
Oracle WebCenter WSRP Producer for .NETをホスティングしているWindowsマシンのWindows証明書ストアに、秘密鍵を追加します。次の手順では、LocalMachineのTrustedPeopleストアおよびLocalMachineのPersonalストアに秘密鍵を作成する方法を示しています。Windows証明書ストアの詳細は、Microsoft社のドキュメントを参照してください。
makecert.exe
ツールを検索します。このツールがない場合は、Microsoft Windows SDK for Windowsおよび.NET Framework 3.5 SP1をダウンロードします。
makecert.exe
のPATHの依存関係が使用可能なコマンド・ウィンドウを開きます。Visual Studio 2008がある場合は、「スタート」メニューからVisual Studio 2008コマンド・プロンプトを起動できます。Windows SDKがある場合は、「スタート」メニューの「Microsoft Windows SDK」フォルダからコマンド・シェルを起動できます。
アルゴリズムがsha1
に設定された証明書を作成します。
makecert.exe -a sha1 -n CN=DotNetWSRPProducer -sr LocalMachine -ss My -sky exchange -sk DotNetWSRPProducer
鍵証明書を、Windows証明書ストアのTrustedPeopleストアおよびPersonalストアにインポートします。makecert.exe
を実行したときと同じコマンド・ウィンドウを使用して、certmgr.exe
を実行します。次に例を示します。
certmgr.exe -add -c -n DotNetWSRPProducer -s -r LocalMachine My -s -r LocalMachine TrustedPeople
Oracle WebCenter WSRP Producer for .NETを実行しているIISアプリケーション用のASP.NETプロセスを実行しているユーザーに証明書に対するセキュリティ権限を付与します(デフォルトでは、これはネットワーク・サービス・ユーザーです)。
管理者バージョンのWSE 2.0 SP3をインストールした場合は、「スタート」メニューから使用可能なX509証明書ツールを使用し、適切なストアから証明書を開いて鍵ファイルのプロパティを表示し、ネットワーク・サービスがフル・コントロールになっていることを確認します。
X509証明書ツールがない場合は、%SystemDrive%\ProgramData\Microsoft\Crypto\RSA\MachineKeys
に移動し、最新のファイルを見つけ(これらはシステム・ファイルのため、隠しファイルを表示するようにWindows Explorerを構成する必要があります)、ネットワーク・サービス・ユーザーにフル・コントロールを付与することによって、作成した証明書に適切な権限を設定できます。
ストア内で証明書を検索します。
コマンド・ラインからmmc.exe
を起動します。
メニュー・バーから、「ファイル」→「スナップインの追加と削除」を選択します。
「証明書」を選択します。
「追加」をクリックします。
「コンピュータ アカウント」を選択します(LocalMachineの内容を表示します)。
「OK」をクリックします。
左側で証明書リストを展開します。
ストアの「個人」セクションに移動し、追加した証明書を検索します。
証明書をエクスポートします。
証明書を右クリックし、「すべてのタスク」→「エクスポート」の順に選択します。
ウィザードで、DERエンコード・バイナリとして(DERはjava keytool
で好まれるX509形式です)、好きなファイル名(dnaakey.der
など)を付けて公開鍵をエクスポートします。
java keytool
を使用して、Oracle WebCenter Portalホスト・マシン上で秘密鍵のペアを作成します。鍵アルゴリズムをrsa
に、鍵サイズを1024
に設定します。次に例を示します。
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
第5.9.5項「Oracle WebCenter Portal用のSAML」をすでに終了している場合は、同じ鍵をこのチュートリアルで使用します。鍵のペアの生成に関する詳細は、WebCenter PortalまたはJavaのドキュメントを参照してください。
.der
ファイルをWebCenter Portalサーバーにコピーし、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
Enterprise Managerで、「新規ポートレット・プロデューサの追加」ページに移動し、「WSRPプロデューサ」を選択します。
第5.9.1項「Webパーツでのトークンの表示」で使用した同じWSDLにURLを入力します。
「セキュリティ」セクションで、トークン・プロファイル「WSS 1.0ユーザー名トークン(パスワードあり)」を選択します。
「カスタム」オプションを選択します。
「関連付けられている外部アプリケーション」セクションで、「新規作成」を選択します。新しい外部アプリケーションを作成できる新しいページが表示されます。アプリケーションに名前を付け、「OK」をクリックします。これにより、WebCenter Portalは、WSRPプロデューサ・ポートレットに渡すログイン資格証明を入力するようにエンド・ユーザーに求めるように指示されます。
「新規ポートレット・プロデューサの追加」ページに戻ったら、keytool
で鍵を生成するために使用した値に基づいて、ページの「キーストア」セクションに値を入力します。(暗号化鍵の値は空のままにします。暗号化は使用されないため必要ないためです)。
ストア・パス: -keystore
に指定した値を使用します。
パスワード: -storepass
に指定した値を使用します。
署名鍵の別名: -alias
(これは、キーストアを生成中に指定された別名です。)
署名鍵のパスワード: -keypass
(これは、キーストアを生成中に指定された別名のパスワードです。)
受信者の別名: -alias
(この値は、鍵の生成時ではなく証明書のインポート(手順6)時に使用した値です。)
プロデューサが登録されたら、ViewSecurityToken
ポートレットをWebCenter Portalポータルに追加します。初めてポートレットを表示すると、「ログイン情報の更新」リンクが表示されます。このリンクをクリックし、ユーザー名およびパスワードを入力します。これは、ユーザー名とパスワード・トークン(UNT)にあるポートレットに送信されるユーザー名とパスワードになります。この情報を入力すると、ポートレットには、入力したユーザー名とパスワードとともにトークンが表示されます。
次の機能は、特にOracle WebCenter Portal用に含まれています。これらの機能はWSRP標準に基づいているため、どのWSRPコンシューマにも適用できる可能性があります。
この項の内容は次のとおりです。
このチュートリアルでは、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ポータルに追加し、コンポーザで「カスタマイズ」オプション(レンチ・アイコン)を選択します。
WSRP 2.0の仕様で定義されているnavigationalParameters
を使用して、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
メソッドの下部に追加します。
System.Collections.Generic.Dictionary<string, string> ParameterCollection = HttpContext.Current.Items["NavigationalParameters"] as System.Collections.Generic.Dictionary<string, string>; lblParameter1.Text = ParameterCollection["TestParameter1"]; lblParameter2.Text = ParameterCollection["TestParameter2"];
コードがコンパイルされることをテストします。特に、System.Collections.Genericが
参照されていることを確認します。
App_Code
ディレクトリの下にあるTestPreferences.ascx
とTestPreferences.ascx.cs
(およびdesigner .cs
ファイル(いずれかを作成した場合))を更新します。
installdir
\wsrpdefault\portlets\TestPreferences.ascx
ファイルを最新バージョンのファイルに置き換えます。
コンパイルされたアセンブリを、Visual Studioプロジェクトからinstalldir
\wsrpdefault\bin
フォルダにコピーします。
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ポータル・ページで、コンポーザを開きます。
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> |