Oracle WebCenter Framework WebCenterアプリケーションの構築 - ステップ・バイ・ステップ 10g(10.1.3.2.0) E05617-02 |
|
この章では、ポートレット、ADF Facesコンポーネントおよびページ上のこれらのアイテム間のインタラクティビティで構成されている新しいページ(図7-1を参照)をアプリケーション用に構築する方法について説明します。
注意 このページ上に要素を作成するには、第2章「ポートレットの構築」で説明した手順に従ってプロデューサを登録し、第4章「コンテンツ・リポジトリの設定」の説明に従ってコンテンツ・リポジトリを設定しておく必要があります。 |
この章の内容は次のとおりです。
コンポーネントを追加するページの構築を始めます。この項では、ページを作成し、サンプル・ファイルに用意されているテンプレートを適用します。
SRMyAcme
と入力します。
「WEB-INF」
→「template」
の順にフォルダを開きます。
SRDemoTemplate.jspx
ファイルのソース・コードを選択してコピーし、新しいSRMyAcme.jspx
ページの既存のコードを置き換えます。
SRMyAcme.jspx
ページのソースで次の行を探します。
<af:panelPage title="#{res['_PAGE_NAME_.pageTitle']}">
この行を次の行で置き換えます。
<af:panelPage title="#{res['SRMyAcmePage.pageTitle']}">
UIResources.properties
ファイルを開きます。このファイルは、「UserInterface」→「アプリケーション・ソース」→「oracle.srdemo.view」→「resources」の下にあります。
# ============================================================================== # Resource Bundle Strings for new WebCenter version of SRDemo # ============================================================================== # WC_SRMyAcmePage SRMyAcmePage.pageTitle=My Acme
この章の後の手順で、「My Acme」ページに対してService Request Historyポートレットを作成します。OmniPortletを使用してこのポートレットを構築しますが、そのためには、まず、OmniPortletプロデューサを登録する必要があります。また、第2章「ポートレットの構築」で作成したPDK-Javaポートレット(SRStatus)をページに追加しますが、第2章の手順に従った場合はすでにSRStatusポートレットはデプロイおよび登録されています。
OmniPortletプロデューサを登録するには、次のようにします。
OmniPortlet Producer
と入力し、「次へ」をクリックします。
http://localhost:6688/portalTools/omniPortlet/providers/omniPortlet
ポートレットおよびコンテンツをSRMyAcme.jspx
ページに組み込むには、特定のカスタマイズ可能レイアウト・コンポーネントを追加して、これらのポートレットおよびコンテンツをユーザーに表示する方法を定義できるようにする必要があります。
SRMyAcme.jspx
ページの「構造」ペインには、af:panelPage
コンポーネントが表示されます(図7-5を参照)。
次のコンポーネントを、このPanelPage
コンポーネント内に追加します。
PanelCustomizable
コンポーネントPanelCustomizable
コンポーネントをPanelPage
コンポーネント内に追加して、子コンポーネントを表示/非表示にできるようにします。
そのためには、「カスタマイズ可能コンポーネント・コア」ライブラリから「PanelCustomizable」を選択し、「構造」ペインのaf:panelPage
コンポーネントの上にドラッグします。Layout
をhorizontal
に設定します。図7-6は、「構造」ペインでのcust:panelCustomizable
コンポーネントの位置を示しています。
ShowDetailFrame
コンポーネントShowDetailFrame
コンポーネントをPanelCustomizable
コンポーネント内に追加して、コンテンツの表示レベルのカスタマイズができるようにします。たとえば、コンテンツの表示を移動、最小化または最大化するオプションを提供します。
そのためには、「カスタマイズ可能コンポーネント・コア」ライブラリから「ShowDetailFrame」を選択し、「構造」ペインのcust:panelCustomizable
コンポーネントの上にドラッグします。Text
をMy Service Requests
に設定します。
図7-7は、「構造」ペインでのcust:showDetailFrame
を示しています。
SelectOneChoice
コンポーネントSelectOneChoice
コンポーネントをこのShowDetailFrame
コンポーネント内に追加して、表示する必要があるサービス・リクエストのステータスを選択できるようにします。
そのためには、「ADF Faces Core」ライブラリから「SelectOneChoice」を選択し、「構造」ペインのcust:showDetailFrame
コンポーネントの上にドラッグします。表示された「SelectOneChoiceの挿入」ダイアログ・ボックスで、該当するタブをクリックし、いくつかの属性の値を次のように設定します。
Label
: Status
Value
: Open
AutoSubmit
: true
Binding
: #{backing_app_SRMyAcme.statusPicker}
Id
: statusPicker
図7-8は、「構造」ペインでのaf:selectOneChoice
コンポーネントを示しています。
SelectItem
コンポーネント3つのSelectItem
コンポーネントをSelectOneChoice
コンポーネント内に追加して、SelectOneChoice
コンポーネントの下にオプションとして表示されるコンポーネントを組み込みます。
SelectItem
コンポーネントを追加するには、「ADF Faces Core」ライブラリから「SelectItem」を選択し、「構造」ペインのaf:selectOneChoice
コンポーネントの上にドラッグします。
新しいコンポーネントごとに、いくつかの属性の値を次のように設定します。
1つ目のSelectItem
コンポーネント:
2つ目のSelectItem
コンポーネント:
3つ目のSelectItem
コンポーネント:
図7-9は、「構造」ペインでのSelectItem
コンポーネントを示しています。
PanelHorizontal
コンポーネントPanelHorizontal
コンポーネントをPanelPage
コンポーネント内に追加して、子要素を水平に配置します。
そのためには、「ADF Faces Core」コンポーネント・ライブラリから「PanelHorizontal」を選択し、「構造」ペインのaf:panelPage
コンポーネントの上にドラッグします。「構造」ペインのcust:panelCustomizable
コンポーネントの下に位置するようにします(図7-10を参照)。
ObjectSpacer
コンポーネントObjectSpacer
コンポーネント(高さを30
、幅を10
に設定)をPanelHorizontal
コンポーネントの下に追加して、レイアウト内のコンポーネント間に固定幅のスペースを挿入します。
そのためには、「ADF Faces Core」コンポーネント・ライブラリから「ObjectSpacer」を選択し、「構造」ペインのaf:panelPage
コンポーネントの上にドラッグします。「構造」ペインのaf:panelHorizontal
コンポーネントの下に位置するようにします(図7-11を参照)。次の属性を設定します。
ShowOneTab
コンポーネントShowOneTab
をPanelPage
コンポーネント内に追加して、ShowDetailItem
コンポーネントによって定義される一連のアイテムを組み込みます。
そのためには、「ADF Faces Core」コンポーネント・ライブラリから「ShowOneTab」を選択し、「構造」ペインのaf:panelPage
コンポーネントの上にドラッグします。「構造」ペインのaf:objectSpacer
コンポーネントの下に位置するようにします。次に、ShowOneTabを選択し、Position
プロパティをabove
に設定します。
ShowDetailItem
コンポーネント4つのShowDetailItem
コンポーネントをShowOneTab
コンポーネント内に追加して、ShowOneTab
コンポーネント内にタブとして表示されるコンポーネントを組み込みます。
これらのShowDetailItem
コンポーネントのText
プロパティを、SR Information
、Product Information
、Schedule On-Site Service
、My Current Contracts
にそれぞれ設定します。後で、4つのコンポーネントをこれらのShowDetailItem
コンポーネント内に追加します。
ShowDetailItem
を追加するには、「ADF Faces Core」コンポーネント・ライブラリから「ShowDetailItem」を選択し、「構造」ペインのaf:showOneTab
コンポーネントの上にドラッグします。図7-12は、「構造」ペインでの4つのaf:showDetailItem
子コンポーネントがあるaf:showOneTab
コンポーネントを示しています。
PanelHorizontal
コンポーネントPanelHorizontal
コンポーネントを、SR Information
というShowDetailItem
コンポーネント内に追加して、子要素を水平に配置します。
そのためには、「ADF Faces Core」コンポーネント・ライブラリから「PanelHorizontal」を選択し、「構造」ペインのcust:showDetailItem component - SR Information
コンポーネントの上にドラッグします。
後で、OmniPortletおよびOracle Java PDKポートレットをこのコンポーネント内に追加し、サービス・リクエストの履歴およびステータスをそれぞれ表示できるようにします。
PanelCustomizable
コンポーネントを、Product Information
というShowDetailItem
コンポーネント内に追加します。Layout
をhorizontal
に設定します。図7-13は、「構造」ペインでの新しいcust:panelCustomizable
コンポーネントを示しています。図7-14に、これらのコンポーネントがSRMyAcme.jspx
の「構造」ペインにどのように表示されるかを示します。
この章の次の手順では、これらのカスタマイズ・コンポーネント内にポートレットおよびコンテンツを追加する方法について説明します。
特定のステータスであるサービス・リクエストのリストを表示するには、TopLinkおよびEJBセッションBeanに基づいたADF読取り専用表を追加する必要があります。ユーザーがこの表のサービス・リクエスト番号をクリックすると、そのサービス・リクエストの履歴およびステータスがページ下部のポートレットに表示されます。
サービス・リクエストを表示するADF表を追加するには、次の手順を実行します。
showDetailFrame
コンポーネントの上にドラッグします。
statusParam
パラメータの「値」フィールドに、${"Open"}
と入力します。これで、サービス・リクエストのステータスはOpenとハードコーディングされます。後で、動的な値を指定します。
「表の列の編集」ダイアログ・ボックスが表示されます。
すべてのオープン・サービス・リクエストが表に表示されます。
<methodIterator id="findServiceRequestByStatusIter" Binds="findServiceRequestByStatus.result" DataControl="SRPublicFacade" RangeSize="4" BeanClass="oracle.srdemo.model.entities.ServiceRequest"/>
前の項で、ステータスをOpen
とハードコーディングしました。その結果、オープン・サービス・リクエストのリストの表示しかできません。今度は、ハードコーディングされたこの値ではなく、エンド・ユーザーがサービス・リクエストのステータスをリストから選択できるようにするコンポーネントを追加します。この項では、ステータスの選択に使用できるリストを追加し、選択されたステータスであるサービス・リクエストをすべて表示する方法を示します。そのためには、次の手順を実行します。
${(backing_app_SRMyAcme.statusPicker.value == null) ? "Open" : backing_app_SRMyAcme.statusPicker.value}
partialTrigger
プロパティをstatusPicker
に設定します。そのためには、ページ上の表コンポーネントを選択します。リストから、「statusPicker」を選択します。
この項の手順では、OmniPortletを使用して、サービス・リクエストの履歴を表示するポートレットを作成する方法を示します。OmniPortletを使用して、サービス・リクエストの履歴を表示するポートレットを作成するには、次の手順を実行します。
「panelHorizontal」
コンポーネント(「SR Information」タブ上にある)の上にドラッグします。
select svr_id, to_char(svh_date, 'Dy, Mon DD, YYYY') created_on, notes, svh_type, users.first_name || ' ' || users.last_name createdby from service_histories, users where svr_id = substr ('##Param1##', 1, 3) and users.user_id = service_histories.created_by order by line_no
104
を指定し、「表示」タブが表示されるまで「次へ」をクリックします。
表7-1 Service Request History OmniPortlet用のレイアウト設定
列ラベル | 列 | 表示内容 |
---|---|---|
ID |
SVR_ID |
Hidden |
Comments |
NOTES |
Text |
Created by |
CREATEDBY |
Text |
Created on |
CREATED_ON |
Text |
Comment type |
SVH_TYPE |
Text |
第2章「ポートレットの構築」で、サービス・リクエストIDを指定すると、特定のサービス・リクエストの現行ステータスが表示されるポートレットを作成しました。この項では、そのポートレットを「MyAcme」ページに追加します。
Service Request Statusポートレットをページに追加するには、次のようにします。
第2章「ポートレットの構築」で登録したプロデューサはSRStatusProducerです。このプロデューサは、
ヒント
http://
host
:
port
/SRStatusPortlet/providers
にあります。
「panelHorizontal」
コンポーネントのすでに追加したService Request History Portletの直下にドラッグします。
コンポーネントおよびポートレットをすべてページに追加したので、1つに連結してページ上にインタラクティビティを作成します。この項では、顧客または技術者(あるいはその両方)がページ上の表から選択した各サービス・リクエストのステータスおよび履歴を表示できるように、ページを設定します。また、部分ページ・リフレッシュを使用してコンポーネントを1つに連結し、ページ全体をリフレッシュしなくてもエンド・ユーザーがその情報を表示できるようにします。
この手順では、次の連結を実行します。
OmniPortletは、これまでの手順で行ったカスタマイズに基づいてサービス・リクエストの履歴を表示できますが、ここでは、ユーザーが表で行った選択に基づいてポートレットに履歴を表示させます。OmniPortletは、表から情報を受け取り、その情報を使用して特定のサービス・リクエストの履歴を表示できます。
commandLink
を表のproblemDescription列に追加します。 コンポーネント・パレットで、「ADF Faces Core」の下の「commandLink」を選択し、「構造」ペインの3つ目のaf
列内のoutputText
の上にドラッグします。
outputText
を削除します。
commandLink
のプロパティを次のように設定します。
commandLink1_action()
メソッドとして入力します。このメソッドは、「アプリケーション・ソース」→「oracle.srdemo.view」→「backing.app.SRMyAcme.java」の下にあるbacking.app.SRMyServiceRequests.java
クラス内にあります。public String commandLink1_action() { FacesContext context = FacesContext.getCurrentInstance(); context.getExternalContext().getSessionMap().put("serviceID", (Integer)outputText1.getValue()); return "setCurrentRowWithKey"; }
import javax.faces.context.FacesContext;
${sessionScope.serviceID}
<parameters/>
このタグを次のコードで置き換え、serviceID
というページ・パラメータを設定します。
<parameters> <parameter id="pageParam" value="${sessionScope.serviceID}"/> </parameters>
Service Request StatusポートレットとService Request Historyポートレットではいずれも、サービス・リクエストIDをパラメータとして受け取ることを想定しています。そして、そのIDで識別される特定のサービス・リクエストのステータスまたは履歴を表示します。サービス・リクエストIDが、ページ上部の表で選択されたサービス・リクエストのIDになるように設定します。
Service RequestポートレットをService Request表に連結するには、次のようにします。
${sessionScope.serviceID}
に設定します。
${sessionScope.serviceID}
に設定します。
この項の手順では、JSR 168ポートレットをページ上に表示する方法を示します。ここでは、
第2章「ポートレットの構築」で作成したProduct Detailsポートレットを追加します。「Product Information」タブのpanelCustomizable
コンポーネント内に、次のとおり追加します。
第2章「ポートレットの構築」で登録したプロデューサはProductDetailsPortletです。このプロデューサは、
ヒント
http://
host
:
port
/ProductDetailsPortlet/portlets/wsrp1?WSDL
にあります。
panelHorizontal
コンポーネントの上にドラッグします。
この項の手順では、フォルダの内容をページ上に表示する方法を示します。「Product Information」タブのpanelCustomizable
コンポーネント内に、次のとおり追加します。
panelBox
をpanelCustomizable
に追加します。
アクション・バインディング・エディタが表示されます。
path
パラメータの「値」フィールドに、/manuals
と入力します。
type
パラメータの「値」フィールドは空のままにしておきます。
ツリー・バインディング・エディタが表示されます。
<af:panelBox> <af:tree value="#{bindings.getItems1.treeModel}" var="node"> <f:facet name="nodeStamp"> <af:outputText value="#{node}"/> </f:facet> </af:tree> </af:panelBox>
<f:facet>
タグの中にドラッグします。
facetName
属性を#{node.currentRow.dataProvider.primaryType}
に設定します。
nt:file
というファセットを1つと、nt:folder
というファセットを1つ作成します。そのためには、「Switcher」を右クリックし、「af:switcherの中に挿入」→「JSF Core」→「ファセット」の順に選択します。
nt:folder
には、生成された出力テキストを使用します。 nt:file
について、goLink
およびobjectImage
を作成します。
<af:switcher facetName="#{node.primaryType}"> <f:facet name="nt:file"> <h:panelGroup> <af:objectImage source="/images/file.gif"/> <af:goLink text="#{node.name}" destination="#{node.URI}" targetFrame="_blank"/> </h:panelGroup> </f:facet> <f:facet name="nt:folder"> <af:outputText value="#{node.name}"/> </f:facet> </af:switcher>
index.html
を実行します。
Schedule On-Site Servicesポートレットを使用すると、アプリケーションでサービス・リクエストを作成した後、製品についてオンサイト・サービスをスケジュールできます。リクエストのサービスIDを指定し、適当な日時または自分で選んだ技術者を選択して、技術者が指定の場所に来て、問題に対処するようにスケジュールできます。
この項の内容は次のとおりです。
Webクリッピング・プロデューサを登録するには、次のようにします。
必要に応じて、「次へ」をクリックする前に「次回にこのページを表示しない」を選択し、このウィザードの次回以降の使用時に「ようこそ」ページが表示されないようにします。「ようこそ」ページは、ウィザードの前回使用時にスキップするオプションが選択されると、表示されません。
WebClipping Producer
と入力します。この名前は、アプリケーション内で一意である必要があります。文字、数字およびアンダースコアのみを使用してください。
http://localhost:6688/portalTools/webClipping/providers/webClipping
オンサイトWebクリッピング・サービスを追加するには、次の手順を実行します。
SRMyAcme.jspx
ファイルをまだ開いていない場合は、アプリケーション・ナビゲータで「SRMyAcme.jspx」
ファイルを右クリックし、ポップアップ・メニューから「開く」を選択します。
「Schedule On-Site Service」
という「showDetailItem」
コンポーネントの上にドラッグします。
「SRMyAcme.jspx」
ファイルを右クリックし、ポップアップ・メニューから「実行」を選択します。埋込みOC4Jサーバーが起動し、デフォルトのブラウザが起動してWebクリッピング・ポートレットが表示されます。結果のページで、WebCenterアプリケーションで公開するWebページを選択します。次に、Webクリッピング・スタジオを使用して、組み込むためのWebページのセクションを選択します。
この項では、ACME Technician Assignment System外部アプリケーションからの情報をWebクリッピング・ポートレットに表示する方法を示します。この外部アプリケーションは、OC4Jインスタンスにデプロイされ、SRDemoアプリケーションの一部として使用できます。この外部アプリケーションを使用して、製品に対するオンサイト・サービスをリクエストできます。
この項の手順を実行する前に、ページに対して適切な権限を付与する必要があります。権限の付与の手順は、「手順13: 「My Acme」ページへのセキュリティの適用」を参照してください。
ACME Technician Assignment SystemアプリケーションをWebクリッピング・ポートレットに表示するには、次の手順を実行します。
「Webクリッピングの検索」ページが表示されます。
http://host:port/ExternalApp/preConfirmation.jsp?date=Tue,%2010:00am&technician=Peter
SRDemoアプリケーションをダウンロードしたシステムのホスト名およびポート番号を指定します。
指定したページがWebクリッピング・スタジオに表示されます(図7-15を参照)。
Next Available Time
と指定し、「次へ」をクリックします。
図7-17に、Webクリッピング・ポートに追加されたコンテンツを示します。
このポートレットを使用して、ユーザーは製品に対するオンサイト・サービスをスケジュールできます。
この項の手順では、ページに最新契約コンポーネントを追加する方法を示します。
panelBox
にドラッグします。
「表の列の編集」ダイアログ・ボックスが表示されます。
app_SRMyAcmePageDef.xml
)のexecutables
の下で、IDがgetItemster
のmethodIteratorタグを複製し、例7-7に示すようにコードを変更します。<methodIterator id="getContractsIter" Binds="getContracts.result" DataControl="SRContentRepository" RangeSize="10" BeanClass="SRContentRepository.getItems_return"/>
Bindings
の下で、IDがgetItems
の<methodAction>
を複製し、例7-8に示すようにコードを変更します。<methodAction id="getContracts" InstanceName="SRContentRepository" DataControl="SRContentRepository" MethodName="getItems" RequiresUpdateModel="true" Action="999" ReturnName="SRContentRepository.methodResults.SRContentRepository_ getContracts_result"> <NamedData NDName="path" NDValue="/contracts/${userInfo.userName}" NDType="java.lang.String"/> <NamedData NDName="type" NDType="java.lang.String"/> </methodAction>
<table id="getItems2"...
を探し、<table id="getItems2" IterBinding="getContractsIter">
に変更します。
#{row.name}
をoutputTextからGoLinkのtext属性にコピーします。
#{row.URI}
とします。
_blank
とします。
ページの認可ポリシーは、ページ定義ファイルに対して定義されます。認可エディタは、ローカル・システムのJAZNファイルからエンタープライズ・ロールを読み取るのに使用します。このエディタを使用すると、特定のリソース(ページ、メソッド、イテレータ、属性など)に対して設定できるアクションを定義できます。このエディタは、ポリシー・ストアに権限を書き込み、様々なロールに対してきめ細やかなJAAS権限の宣言定義を可能にします。また、疑似ロールanybodyに権限を付与するパブリック・ページの定義にも使用されます。
次の手順を実行して、SRMyAcme.jpsx
ページに対する権限を設定します。
anyone
に、Customize権限をmanager
に、Personalize権限をtechnician
にそれぞれ付与します(図7-18を参照)。SRMyAcme.jspx
ページでは、技術者と管理者のみが「On-Site Service」タブおよびProduct Detailsポートレットを表示できるようにします。この項では、適切な権限を持つユーザーがページにアクセスしているときにのみレンダリングされるように、これらのコンポーネントを設定する方法について説明します。
「On-Site Service」タブおよびProduct Detailsポートレットにセキュリティを適用するには、次の手順を実行します。
「SRMyAcme.jspx」
ページを開きます。
Rendered
プロパティを次の値に設定します。
#{authNLink.authenticated && bindings.permissionInfo['app_SRMyAcmePageDef'].allowsPersonalize}
「SRMyAcme.jspx」
ページの「On-Site Service」タブを選択します。
Rendered
プロパティを次の値に設定します。
#{authNLink.authenticated && bindings.permissionInfo['app_SRMyAcmePageDef'].allowsPersonalize}
この章では、各種コンポーネントをページに追加し、タブおよびサブタブに編成する方法について学びました。また、ページおよび各コンポーネントにセキュリティを適用する方法についても学びました。
|
![]() Copyright © 2007 Oracle Corporation. All Rights Reserved. |
|