Oracle® Fusion Middleware Oracle WebCenter PortalおよびOracle JDeveloperでのポータルの開発 11gリリース1 (11.1.1.8.3) E49666-03 |
|
前 |
次 |
この章では、コンポーザの特定の拡張構成を実行し、エンド・ユーザーの操作性を向上する方法を説明します。
この章の内容は、次のとおりです。
Show Detail Frame
コンポーネントのファセットを使用して、Show Detail Frame
コンポーネントのカスタム・アクションを定義して表示できます。たとえば、アプリケーションが提供するサービスのリストがShow Detail Frame
に含まれている場合、様々なサービスの詳細を含むタスク・フローを開くカスタム・アクション(Show Detailed Information
)を追加できます。
Show Detail Frame
コンポーネントがサポートしているファセットの詳細は、第B.1.5項「Show Detail Frameコンポーネント」を参照してください。
Oracle JDeveloperは、「構造」ウィンドウにShow Detail Frame
コンポーネントで使用可能なすべてのファセットを表示しますが、UIコンポーネントを含むもののみがアクティブで表示されます。
Show Detail Frameファセットを追加するには、次の手順を実行します:
「構造」ウィンドウでShow Detail Frame
コンポーネントを右クリックし、「ファセット - 詳細フレームの表示」を選択して、このオプションの右側に表示される矢印をクリックします。
サポートされているファセットのリストから追加するファセットを選択します。
注意: ファセット名の隣のチェック・マークは、ファセットがすでに |
そのファセットのf:facet
要素はページに挿入されます。
設計要件に応じてファセットにコンポーネントを追加します。
Show Detail Frame
ファセットの作成と使用をエンド・ツー・エンドで示した例は、第20.2項「ファセットを使用したShow Detail Frameコンポーネントでのカスタム・アクションの有効化: 例」を参照してください。
Panel Customizable
コンポーネントを備えたJSPXページ(Page1
)があるとします。Panel Customizable
内にShow Detail Frame
コンポーネント(showDetailFrame1
)があります。Show Detail Frame
内にADFタスク・フローがあります。Panel Customizable
には、他に2つのShow Detail Frame
コンポーネントがあり、一方はshowDetailFrame1
の上、他方は下にあります。タスク・フローは、2つのOutput Text
コンポーネントをページに表示します。
Additional Actions
ファセットをShow Detail Frame
コンポーネントで構成して、「処理」メニューに「上へ移動」アクションと「下へ移動」アクションとともに「カスタマイズ」アクションを表示できます。実行時、「カスタマイズ」アクションを使用すると、ユーザーはOutput Text
コンポーネントのテキストをカスタマイズできます。この項では、この結果を得るための手順を説明します。次のサブセクションが含まれます:
ADFタスク・フローを作成するには:
「ファイル」メニューから「新規」を選択します。
「新規」ダイアログで、「Web層」ノードの下の「JSF」を選択し、アイテムの下の「ADFタスク・フロー」を選択します。
「OK」をクリックします。
「タスク・フローの作成」ダイアログで「OK」をクリックし、デフォルト値を受け入れてタスク・フロー定義ファイルを作成します。
コンポーネント・パレットの「ADFタスク・フロー」タグ・ライブラリから、2つのビュー要素(view1とview2)をタスク・フロー定義ファイルにドロップします。
「制御フロー・ケース」をview1
からview2
にドロップします。
最初のビュー要素をクリックし、次に2番目のビュー要素をクリックして制御フロー・ラインを描きます。
この制御フロー・ケースにnext
という名前を付けます。
同様に、「制御フロー・ケース」をview2
からview1
にドロップして戻し、これにprev
という名前を付けます。
BackingBean.java
というバッキングBeanを作成し、2つの変数view1
とview2
の値を含めます。
view1
とview2
は、それぞれinitialValue1
とinitialValue2
を使用して初期化されます。Beanのコードが、次の例に示すとおりであることを確認します。
package view; public class BackingBean { public BackingBean() { } private String view2 ="initial Value1"; private String view1 = "initial Value2"; public void setView2(String view2) { this.view2 = view2; } public String getView2() { return view2; } public void setView1(String view1) { this.view1 = view1; } public String getView1() { return view1; } }
タスク・フロー定義ファイルで、view1をダブルクリックし、その要素にページ・フラグメント(view1.jsff
)を作成します。
Panel Group Layoutおよび2つのOutput Textコンポーネントをview1.jsff
に追加します。
最初のOutput Text
コンポーネントのValue
を#{backingBean.view1}
に指定し、2番目のOutput Text
コンポーネントのValue
を#{backingBean.view2}
に指定します。
view1.jsff
を保存して閉じます。
タスク・フロー定義ファイルで、view2をダブルクリックし、その要素のページ・フラグメント(view2.jsff
)を作成します。
Output Textコンポーネントを1つだけview2.jsff
に追加し、Value
を#{backingBean.view2}
に指定します。
view2.jsff
を保存して閉じます。
追加のアクション・ファセットを組み込むには:
Panel Customizable
コンポーネントおよびネストされたShow Detail Frame
コンポーネントを備えているJSPXページ(Page1.jspx
)を作成します。
さらに2つのShow Detail Frame
コンポーネントを既存のShow Detail Frame
コンポーネントの上下に追加します。
3つのShow Detail Frame
コンポーネントを追加する目的は、「上へ移動」
アクションと「下へ移動」
アクションを最初のShow Detail Frame
コンポーネント(showDetailFrame1
)の追加アクションとともに表示できるようにすることです。
前の手順で作成したタスク・フロー定義ファイルをshowDetailFrame1
内に追加します。
「構造」ウィンドウで最初のShow Detail Frame
を右クリックし、「ファセット - 詳細フレームの表示」を選択します。
このオプションの右にある矢印をクリックし、サポートされているファセットのリストから「追加のアクション」を選択します。
そのファセットのf:facet-additionalActions
要素はページに挿入されます。
Panel Group Layoutを「追加のアクション」
ファセット内に追加し、ButtonコンポーネントをPanel Group Layout
コンポーネント内に追加します。
Button
のText
属性をCustomize
に設定し、customize
をAction
値として指定します。
構造ナビゲータのページは図20-1に示すように表示されます。
ページを保存します。
リダイレクト・ページを作成するには:
Page2.jspx
というJSPXページを作成し、2つのInput Textコンポーネントおよび1つのButtonコンポーネントを追加します。
最初のInput Text
コンポーネントのValue
を#{backingBean.view2}
に指定し、2番目のInput Text
コンポーネントのValue
属性を#{backingBean.view1}
に設定します。
バッキングBeanに関してInput Text
コンポーネントを追加する目的は、ユーザーの入力をBeanに渡し、これがPage1.jspx
のOutput Text
コンポーネントで反映できるようにすることです。
Button
コンポーネントで、Text
属性をOK
に設定し、back
をAction
値として指定します。
ページを保存します。
ナビゲーション・ルールを定義することによって2つのページ間を切り替えることができます。
ページ間のナビゲーション・ルールを定義するには:
アプリケーション・ナビゲータのプロジェクトのWEB-INFフォルダの下で、faces-config.xmlファイルをダブルクリックしてこれを開きます。
「概要」タブをクリックして、概要モードでファイルを表示します。
「マネージドBean」セクションの「追加」アイコンをクリックします。
「マネージドBeanの作成」ダイアログで、backingBean
を名前として指定します。
「クラス名」フィールドで、その隣の「参照」ボタンをクリックし、前に作成したBackingBean
Javaクラスを参照します。「OK」をクリックします。
「OK」をクリックします。
「有効範囲」リストで、「セッション」を選択し「OK」をクリックします。
ページ上の「ナビゲーション・ルール」タブを選択します。
「ビュー(自)」表で、Page1.jspxを選択します。
「ナビゲーション・ケース」の下で、「ビューID(至)」列でPage2.jspx、「結果(自)」列で「カスタマイズ」、「リダイレクト」列で「true」を選択します。
「ビュー(自)」表で、Page2.jspxを選択します。
「ナビゲーション・ケース」の下で、「ビューID(至)」列でPage1.jspx、「結果(自)」列で「戻る」、「リダイレクト」列で「true」を選択します。
「ソース」ビューで、これらのエントリが次のように表示されます。
<managed-bean> <managed-bean-name>backingBean</managed-bean-name> <managed-bean-class>view.BackingBean</managed-bean-class> <managed-bean-scope>session</managed-bean-scope> </managed-bean> <navigation-rule> <from-view-id>/Page1.jspx</from-view-id> <navigation-case> <from-outcome>customize</from-outcome> <to-view-id>/Page2.jspx</to-view-id> <redirect/> </navigation-case> </navigation-rule> <navigation-rule> <from-view-id>/Page2.jspx</from-view-id> <navigation-case> <from-outcome>back</from-outcome> <to-view-id>/Page1.jspx</to-view-id> <redirect/> </navigation-case> </navigation-rule>
ファイルを保存します。
タスク・フローをShow Detail Frame
コンポーネントに含めることによって、これをカスタマイズできます。Show Detail Frame
コンポーネントには、コンポーネントを再配置、表示または非表示にする特定のデフォルトのアクションが用意されています。さらに、カスタム・アクションを定義して、実行時にタスク・フロー内で目的のナビゲーション・フローをトリガーできます。タスク・フローでカスタム・アクションを有効にできる方法は2つあります。
カスタム・アクションがShow Detail Frame
コンポーネントの「処理」メニューに表示されるように、タスク・フローでカスタム・アクションを直接有効にします。
カスタム・アクションがShow Detail Frame
コンポーネントの「処理」メニューに表示されるように、タスク・フローを囲んでいるShow Detail Frame
コンポーネントでカスタム・アクションを有効にします。
この項では、両方のアプローチについて説明します。次のサブセクションが含まれます:
タスク・フローを自己完結にし、アプリケーション・レベルで定義されたグローバル・カスタム・アクションを継承する必要がない場合、この項の手順を実行します。ネストされた<customActions>
要素を持つ<customComps-config>
セクションをadf-settings.xml
ファイルで構成することによって、タスク・フローでカスタム・アクションを定義できます。adf-settings.xml
ファイルで指定された追加カスタム・アクションは、このタスク・フローを囲むShow Detail Frame
コンポーネントに表示されます。
通常、タスク・フローはパッケージ化されADFライブラリとしてデプロイされます。タスク・フローのカスタム・アクションを含むadf-settings.xml
ファイルを作成すると、このファイルもADFライブラリでパッケージ化されます。
タスク・フローでカスタム・アクションを有効にするには:
adf-settings.xml
ファイルが存在していない場合、このファイルをプロジェクトのWebコンテキスト・ルート(たとえば、APPLICATION_ROOT
/Portal/src/META-INF
ディレクトリ)の下のMETA-INF
ディレクトリに作成します。
「ファイル」メニューから「新規」を選択します。
「新規ギャラリ」ダイアログで、「一般」を展開し、「XML」、「XML文書」の順に選択します。
「OK」をクリックします。
ファイルにadf-settings.xml
という名前を付けます。
ファイルで<custComps-config>
セクションをネストされた<customActions>
要素とともに追加します。
Show Detail Frame
の「処理」メニューにカスタム・アクションとして表示する内部タスク・フローのアクションそれぞれに<customAction>
要素を1つ追加します。
<customActions>
要素の下に任意の数のカスタム・アクションを追加できます。
例20-1に、<customAction>
エントリを備えたadf-settings.xml
ファイルのコードを示します。
例20-1 adf-settings.xmlファイルのcustComps-configセクション
<cust:custComps-config xmlns="http://xmlns.oracle.com/adf/faces/customizable/config"> <customActions> <customAction action="next" location="chrome" rendered="true" icon="/adf/webcenter/editheader_ena.png" text="Next" taskFlowId="/WEB-INF/task-flow-definition.xml#task-flow-definition" shortDesc="next"/> <customAction action="prev" location="chrome" rendered="true" icon="/adf/webcenter/editheader_ena.png" text="Previous" taskFlowId="/WEB-INF/task-flow-definition.xml#task-flow-definition" shortDesc="prev"/> </customActions> </cust:custComps-config>
カスタム・アクションの定義は、タスク・フロー・レベルの設定で使用するtaskFlowId
属性を除いて、タスク・フロー・レベルとアプリケーション・レベルで似ています。この属性は、カスタム・アクションを定義する必要があるタスク・フローを識別するために使用されます。ADFライブラリには複数のタスク・フローが存在する場合があるため、カスタム・アクションをレンダリングする必要があるタスク・フローを識別する際にこの属性は役に立ちます。
注意:
|
adf-settings.xml
ファイルを保存します。
囲んでいるShow Detail Frame
コンポーネントでタスク・フローのカスタム・アクションを定義できます。これらのアクションが実行時に起動されると、タスク・フローで目的のナビゲーション・フローがトリガーされます。たとえば、ターゲットのタスク・フロー・フラグメントがShow Detail Frame
内ではなく別個のブラウザ・ウィンドウで開くことを指定するShow Detail Frame
でカスタム・アクションを定義できます。
Custom Action
コンポーネントをページのShow Detail Frame
コンポーネントの子として追加することによって、Show Detail Frame
コンポーネントでカスタム・アクションを指定できます。この方法で定義されたカスタム・アクションは、このカスタム・アクションを子として持っているShow Detail Frame
インスタンスでのみ使用できます。または、アプリケーションのadf-config.xmlファイル
でカスタム・アクションを指定できます。この方法で定義されたカスタム・アクションは、アプリケーションのすべてのShow Detail Frame
インスタンスで使用できます。
この項では、Show Detail Frame
でのカスタム・アクションの定義について説明します。次のサブセクションが含まれます:
Custom Action
コンポーネントを使用して特定のShow Detail Frame
コンポーネントのインスタンスでカスタム・アクションを定義します。Custom Action
コンポーネントはコンポーザ・タグ・ライブラリにあります。カスタム・アクションは、Show Detail Frame
を含むページのJSPXページ定義ファイルに格納されます。
インスタンス・レベルでカスタム・アクションを定義するには:
コンポーネント・パレットで、「コンポーザ」を選択します。
Custom Actionをドラッグし、これをShow Detail Frame
コンポーネント内のページ上でaf:region
要素の下にドロップします。
Show Detail Frame
の「処理」メニューにカスタム・アクションとして表示する内部タスク・フローのアクションそれぞれにCustom Action
コンポーネントを1つ追加します。
注意:
|
第B.1項「コンポーザ・コンポーネントのプロパティ」の表B-9を参照してCustom Action
の属性を定義します。
各Custom Action
のaction
属性には、関連するタスク・フローの適切なADFcの結果を移入してください。コードは、例20-2に示すようになります。
例20-2 カスタム・アクションのコード
<cust:showDetailFrame text="showDetailFrame 1" id="sdf1"> <af:region value="#{bindings.taskflowdefinition1.regionModel}" id="r1"/> <cust:customAction action="navigatefromview1" id="ca1" location="both" icon="/Logo1.JPG" text="View1 Action" shortDesc="Custom View1 Action"/> <cust:customAction action="navigatefromview2" location="both" id="ca2" icon="/Logo2.JPG" text="View2 Action" shortDesc="Custom View2 Action"/> </cust:showDetailFrame>
注意: タスク・フローのADFc結果のすべてに対してカスタム・アクションを追加できますが、表示するタスク・フローのビューに応じて、いくつかのカスタム・アクションを実行時に使用できるか、どのカスタム・アクションも使用できません。 対応するタスク・フローのアクションなしでカスタム・アクションを定義すると、そのカスタム・アクションは実行時に |
関連項目: 『Oracle Fusion Middleware Oracle Application Development Framework Fusion開発者ガイド』のタスク・フローの作成に関する項 |
保存してページを実行します。
実行時、Show Detail Frame
の「処理」メニューから処理を選択すると、関連する制御フロー・ルールがトリガーされ、ターゲットのタスク・フロー・フラグメントがレンダリングされます。
グローバル・レベルでカスタム・アクションを定義することは、そのカスタム・アクションをアプリケーションのすべてのShow Detail Frame
インスタンスで使用可能にすることを意味します。グローバル・レベルのカスタム・アクションはアプリケーションのすべてのShow Detail Frame
コンポーネントで使用可能ですが、実行時にShow Detail Frame
のヘッダーにはタスク・フローの現在のビューのADFc結果に対応するカスタム・アクションのみが表示されます。
グローバル・レベルのカスタム・アクションは、アプリケーションのadf-config.xml
ファイルで定義します。
グローバル・レベルでカスタム・アクションを定義するには:
アプリケーションのadf-config.xml
ファイルを開きます。これは、「アプリケーション・リソース」パネルの「ディスクリプタ」の下のADF META-INF
フォルダにあります。
例20-3に示すように、各アクションに対してネストされた<customAction>
タグを備えた<customActions>
要素を使用してカスタム・アクションを定義します。
ヒント: ページ編集モードにのみカスタム・アクションをレンダリングするために、 |
例20-3 adf-config.xmlファイルのカスタム・アクション定義
<cust:adf-config-child xmlns="http://xmlns.oracle.com/adf/faces/customizable/config"> <enableSecurity value="true" /> <customActions> <cust:customAction action="forward" displayName="Move Forward" location="menu" rendered="true" icon="/move_forward.png"/> <cust:customAction action="backward" tooltip="Move Backward" location="chrome" rendered="true" icon="/move_backward.png"/> </customActions> </cust:adf-config-child>
注意:
|
adf-config.xml
ファイルを保存します。
カスタム・アクションの定義の詳細は、第20.3.4項「タスク・フローを囲んでいるShow Detail Frameでカスタム・アクションを有効にする方法: 例」を参照してください。
グローバル・レベルのカスタム・アクションとインスタンス・レベルのカスタム・アクションの間の競合の解決
各カスタム・アクションは、そのaction
属性の値によって一意に識別されます。グローバル・レベルとインスタンス・レベルで同じaction
属性値を持つカスタム・アクションを定義した場合、他の属性値に応じて実行時にこれらのカスタム・アクションがどのように起動されるか関して競合が発生する場合があります。このような場合、Show Detail Frame
のinheritGlobalActions
属性が他のカスタム・アクション属性(action
属性以外)の動作を次のように定義します。
注意:
|
inheritGlobalActions=true
またはinheritGlobalActions
(デフォルトはfalse
)の値を指定しなかった場合、カスタム・アクション属性の動作は次のようになります。
グローバル・レベルとインスタンス・レベルでカスタム・アクション属性を定義した場合、インスタンス・レベルで指定した属性値が使用されます。
カスタム・アクション属性をインスタンス・レベルでのみ定義した場合、その属性値が使用されます。
カスタム・アクション属性をグローバル・レベルでのみ定義した場合、その値は無視され、デフォルト値が使用されます。
inheritGlobalActions=true
の場合、カスタム・アクション属性の動作は次のようになります。
カスタム・アクション属性をインスタンス・レベルで定義した場合、同じ属性がグローバル・レベルで指定されているかどうかにかかわらず、その値が使用されます。
カスタム・アクション属性をグローバル・レベルでのみ定義した場合、その値が使用されます。
カスタム・アクション属性をグローバル・レベルでもインスタンス・レベルでも定義しなかった場合、属性のデフォルト値が使用されます。
アプリケーション・ページを設計した後、アプリケーションを本番環境にデプロイする必要があります。詳細は、第7章「Portal Frameworkアプリケーションのデプロイおよびテスト」を参照してください。
注意: 開発環境のページで実行する実行時カスタマイズは、アプリケーションをターゲット・サーバーにデプロイするときに引き継がれません。 |
カスタム・アクションは通常、ターゲットのタスク・フロー・ビューをShow Detail Frame
コンポーネント内の所定の場所に表示します。ただし、カスタム・アクションを定義して、別個のブラウザ・ウィンドウにタスク・フロー・ビューを表示できます。
別個のブラウザ・ウィンドウにタスク・フロー・ビューを表示するには、そのビューに対応するカスタム・アクションのタスク・フロー定義ファイルおよびaction
属性において、そのビューの制御フロー・ルールに接頭辞dialog:
を付ける必要があります。次の例にaction
属性の定義を示します。
<cust:customAction action="dialog:Next" id="ca1" location="both" icon="/move_forward.png" text="Next Action" shortDesc="Next Action"/>
ポップアップ・ウィンドウでのプロパティの設定
タスク・フロー・リージョン内のコマンド・コンポーネントに対して、useWindow
、windowEmbedStyle
、windowHeight
、windowWidth
およびreturnListener
の各属性を使用して、デフォルトの動作を指定できます。コマンド・コンポーネントは、使用できるこのような属性が他にも存在する場合があります。戻りリスナーを指定した場合、ダイアログを閉じるときに特定アクション・イベントがコールされ、次のナビゲーションの結果が決定されます。デフォルトでは、この設定がないと、ダミーのRich Command Link
コンポーネントが作成され、タスク・フロー・アクションをトリガーします。
コマンド・コンポーネントでリスナーを定義する場合、カスタム・アクションを構成してこのコンポーネントのアクション・イベントをコールする必要もあります。カスタム・アクション定義(グローバル・レベルとインスタンス・レベル)のactionComponent
属性では、アクション・イベントのキューに入る必要があるコマンド・コンポーネントのIDを指定できます。actionComponent
属性が指定された場合、Show Detail Frame
コンポーネントは、このコンポーネントのアクション・イベントをキューに入れます。このコマンド・コンポーネントはタスク・フロー内部にあるため、いつでもその属性値を変更できます。
例
タスク・フローをShow Detail Frame
コンポーネント内に含め、このタスク・フローのナビゲーションの結果に対応するSimple Edit
カスタム・アクションを定義した例について考えてみます。タスク・フロー内のCommand Button
コンポーネントは、Simple Edit
カスタム・アクションをクリックすると300x200
のサイズのモード付きインライン・ポップアップを起動するように構成されています。戻りリスナーは、ポップアップが閉じると必ずコールされるようにコマンド・コンポーネントで構成されています。
リージョン内のCommand Buttonコンポーネントのソース・コードは次のとおりです。
<af:commandButton text="dialog:simpleEditPoup" id="SDFCustomActionCmd_simpleEditPoup" action="dialog:simpleEditPoup" useWindow="true" windowEmbedStyle="inlineDocument" windowWidth="300" windowHeight="200" windowModalityType="applicationModal" returnListener="#{pageFlowScope.recentPagesBean.refreshMainView}" visible="false"/>
例20-4に、adf-config.xml
ファイルでカスタム・アクションを定義して、タスク・フローの結果に対応するグローバル・カスタム・アクションを指定する方法を示します。Command Button
コンポーネントのIDは、カスタム・アクションのactionComponent
属性に対して指定されます。
例20-4 adf-config.xmlファイルで定義されたグローバル・カスタム・アクション
<customizableComponentsSecurity xmlns="http://xmlns.oracle.com/adf/faces/customizable/config"> <enableSecurity value="true"/> <customActions> <customAction action="dialog:simpleEditPoup" text="Simple Edit" shortDesc="Simple Edit" location="menu" rendered="#{!changeModeBean.inEditMode}" icon="/adf/pe/images/editproperties_ena.png" actionComponent="SDFCustomActionCmd_simpleEditPoup"/> </customActions> </customizableComponentsSecurity>
例20-5に、コンポーザ・タグ・ライブラリからJSPXページにCustom Action
コンポーネントを追加して、タスク・フローの結果に対応するインスタンス・レベルのカスタム・アクションを指定する方法を示します。Command Button
コンポーネントのIDは、カスタム・アクションのactionComponent
属性に対して指定されます。
例20-5 JSPXページで定義されたインスタンス・レベルのカスタム・アクション
<cust:showDetailFrame id="sdf_for_RecentPagesTF1" text="Recent Pages" stretchContent="false" showResizer="never"> <af:region id="RecentPagesTF1" value="#{bindings.regionBinding1.regionModel}"/> <cust:customAction action="dialog:simpleEditPoup" text="My Simple Edit" shortDesc="Simple Edit" location="menu" rendered="#{!changeModeBean.inEditMode}" icon="/adf/pe/images/editproperties_ena.png" actionComponent="SDFCustomActionCmd_simpleEditPoup"/> </cust:showDetailFrame>
注意: ポップアップ・ダイアログで起動されるカスタム・アクションは、新しいリクエストとしてサーバーに送信されます。コンポーザのサンドボックスを使用していて、ページ編集モードで操作している場合、このリクエストはコードをサーブレット・フィルタに追加することによって表示モードで起動され、新しいサンドボックスはこのページで作成されません。 |
adf-settings.xml
ファイルで構成したカスタム・アクションは、adf-config.xml
ファイルで構成したカスタム・アクションとマージされ、選択したタスク・フローの現在のビューと関係のあるすべてのアクションが親のShow Detail Frame
コンポーネントの「処理」メニューに表示されます。
グローバル・レベルでカスタム・アクションを有効にした場合、これらのカスタム・アクションが子のタスク・フローの現在のビューのナビゲーション結果に対応する場合、Show Detail Frame
のヘッダーにこれらのカスタム・アクションが表示されます。
action
属性値に接頭辞dialog:
を付けると、タスク・フローのターゲット・ビューが別個のブラウザ・ウィンドウに開きます。
この例では、アプリケーションにタスク・フロー(customactions
)が含まれていて、Show Detail Frame
内にあるものとします。このタスク・フローには、3つのビュー要素(view_gadget
、edit_settings
およびabout_gadget
)と3つの関連制御フロー・ルール(ViewGadget
、EditSettings
およびAboutGadget
)が含まれています。目的は、カスタム・アクションを定義して、制御フロー・ルールをShow Detail Frame
コンポーネントの「処理」メニューのアクションとして使用できるようにすることです。
この例では、制御フロー・ルールは、ユーザーが3つのビュー間をナビゲートして行き来できるように追加されています。各ビュー要素には、同じ名前の関連ページ・フラグメントがあります。
view_gadget.jsff
フラグメントには、Panel Stretch Layout
コンポーネントがあります。このコンポーネントのcenterファセットには、Value
属性がView Gadget
に設定されているActive Output Text
コンポーネントが移入されます。
edit_settings.jsff
フラグメントには、Panel Stretch Layout
コンポーネントがあります。このコンポーネントのcenterファセットには、Value
属性がEdit Gadget Settings
に設定されているActive Output Text
コンポーネントが移入されます。
about_gadget.jsff
フラグメントには、Panel Stretch Layout
コンポーネントがあります。このコンポーネントのcenterファセットには、Value
属性がAbout This Gadget
に設定されているActive Output Text
コンポーネントが移入されます。
タスク・フローでカスタム・アクションを有効にするには:
customactions
タスク・フローをカスタマイズ可能ページ(MyPage.jspx
)のShow Detail Frame
コンポーネント内に配置します。
カスタマイズ可能ページの作成の詳細は、第18.1.1項「カスタマイズ可能ページの作成方法」を参照してください。
Custom Action
コンポーネントをコンポーザ・タグ・ライブラリからShow Detail Frame
コンポーネントの子として追加し、Action
属性およびText
属性をそれぞれViewGadget
およびView Gadget
に設定します。
さらに2つのCustom Action
コンポーネントをShow Detail Frame
に追加します。
最初のコンポーネントのAction
属性およびText
属性をそれぞれEditSettings
およびEdit Settings
に設定します。
2番目のコンポーネントのAction
属性およびText
属性をそれぞれAboutGadget
およびAbout Gadget
に設定します。
MyPage.jspx
を保存して実行します。
view_gadget
ページ・フラグメントは、ページの(My Gadgetという名前の)Show Detail Frame
コンポーネントにレンダリングされます。「処理」メニューには、「About Gadget」オプションおよび「Edit Settings」オプションが表示されます。「About Gadget」をクリックして、about_gadget
フラグメントにナビゲートします。「処理」メニューには他の2つのフラグメントのナビゲーション・ルールが表示されることに注意してください(図20-4)。
図20-4 タスク・フローを囲んでいるShow Detail Frameのカスタム・アクション
この実際の動作を確認するには、Oracle Technology Network (OTN)のOracle WebCenter Suite 11gのデモとサンプルのページにある、Composer Custom Actionsサンプル・アプリケーションComposerCustomActions.jws
をご覧ください。
コンポーザの「構造」ビューのコンポーネント・ナビゲータには、図20-5に示すように、タスク・フローにズーム・インし、そのページまたはフラグメントのコンポーネントを表示するオプションが用意されています。
ユーザーは、ズーム・インし、ページまたはフラグメントを編集し、タスク・フローからズーム・アウトしてそのタスク・フローを含むページにナビゲートして戻ることができます。タスク・フロー名の隣に表示される「タスク・フローの編集」リンクおよび「閉じる」リンクに加えて、図20-6に示すように、タスク・フロー名の隣にカスタム・アクションも表示するようにアプリケーションを構成できます。
この項では、コンポーネント・ナビゲータでタスク・フローのカスタム・アクションを有効にする手順を説明します。次の項が含まれます:
コンポーネント・ナビゲータでタスク・フローに対するカスタム・アクションを表示するには、カスタム・アクションの動作を定義するJava Beanを作成し、このBeanをタスク・フローを含むアプリケーション・ページからコールする必要があります。この項では、これを行う手順を詳細に説明します。次のサブセクションが含まれます:
まず、ユーザーに提供するカスタム・アクションを決定し、ユーザーがそのカスタム・アクションを選択したときに実装されるロジックを含むJava Beanを作成する必要があります。この項では、カスタム・アクションをクリックするとユーザーにメッセージを表示する単純なロジックを実装する手順を説明します。サンプルのBeanには、カスタム・リンクとともに「閉じる」リンクと「タスク・フローの編集」リンクを表示するコードも含まれています。
Java Beanを作成するには:
「ファイル」メニューから「新規」を選択します。
「新規ギャラリ」ダイアログで、「一般」を開き、「Java」、「Javaクラス」の順に選択して、「OK」をクリックします。
「Javaクラスの作成」ダイアログで、「名前」フィールドにBackingBean
と入力し、「OK」をクリックします。
「ソース」ビューにBackingBean.java
ファイルが表示されます。
次のように必要なライブラリをインポートします。
import javax.faces.application.FacesMessage; import javax.faces.context.FacesContext; import javax.faces.event.ActionEvent; import oracle.adf.view.page.editor.sourceview.ComponentInfo;
次のコードを追加します。
public class BackingBean { public BackingBean() { } public void action(ActionEvent actionEvent) { FacesContext context = FacesContext.getCurrentInstance(); context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Sample message to test whether the custom action works.", null)); } public boolean isRendered() { return ComponentInfo.isRegion(); } public String getZoomText() { return ComponentInfo.isRootNode() ? "Close" : "Edit Task Flow"; } }
このロジックでは、ユーザーがタスク・フロー・リージョンに対するカスタム・アクション・リンクをクリックすると、定義したサンプル・メッセージが表示されます。
isRegion()
APIを使用して、カスタム・アクション・リンクがページのタスク・フロー・リージョンに対してのみ表示されていることを確認します。isRootNode()
APIを使用して、「タスク・フローの編集」リンクまたは「閉じる」リンクがタスク・フローのルート・コンポーネントに対して表示されていることを確認します。
Beanを保存します。
この項では、コンポーザでユーザーに表示するカスタム・アクションを含むJSPXページを作成する手順を説明します。
JSPXページを作成するには:
アプリケーション・プロジェクトで、customList.jspx
というJSPXファイルを作成します。
「ファイル」メニューから「新規」を選択します。
「新規ギャラリ」ダイアログで、「Web層」を展開し、「JSF」、「JSFページ」の順に選択します。
ページの名前を入力し、「OK」をクリックします。
次のサンプル・ページに示すように、Output Text
、Command Link
などのコンポーネントを使用してカスタム・アクションUIを設計します。
<?xml version='1.0' encoding='UTF-8'?>
<jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" version="2.1"
xmlns:f="http://java.sun.com/jsf/core"
xmlns:h="http://java.sun.com/jsf/html"
xmlns:af="http://xmlns.oracle.com/adf/faces/rich">
<jsp:directive.page contentType="text/html;charset=UTF-8"/>
<af:componentDef var="attrs" componentVar="component">
<af:panelGroupLayout id="dc_pgl1" rendered="#{backingBean.rendered}">
<af:outputText value="[" id="dc_ot1"/>
<af:commandLink text="Test" id="dc_cl1"
actionListener="#{backingBean.action}"
binding="#{backingBean.customLink}"/>
<af:outputText value="]" id="dc_ot2"/>
</af:panelGroupLayout>
</af:componentDef>
</jsp:root>
このサンプルでは、Test
というカスタム・アクションを作成します。このアクションのactionListener
属性およびbinding
属性は、前に作成したBackingBean
にバインドされます。
デフォルトの「タスク・フローの編集」オプションおよび「閉じる」オプションもタスク・フローの隣に表示するには、次の例に示すように、zoom
というファセットを定義する必要があります。
<af:xmlContent> <component xmlns="http://xmlns.oracle.com/adf/faces/rich/component"> <facet> <facet-name>zoom</facet-name> </facet> </component> </af:xmlContent>
次の例に示すように、ページ・コンテンツにzoom
ファセットを含めます。
<af:outputText value="[" id="dc_ot3"/> <af:facetRef facetName="zoom"/> <af:outputText value="]" id="dc_ot4"/>
customLink.jspx
ページのソースは次のとおりです。
<?xml version='1.0' encoding='UTF-8'?> <jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" version="2.1" xmlns:f="http://java.sun.com/jsf/core" xmlns:h="http://java.sun.com/jsf/html" xmlns:af="http://xmlns.oracle.com/adf/faces/rich"> <jsp:directive.page contentType="text/html;charset=UTF-8"/> <af:componentDef var="attrs" componentVar="component"> <af:panelGroupLayout id="dc_pgl1" rendered="#{backingBean.rendered}"> <af:outputText value="[" id="dc_ot1"/> <af:commandLink text="Test" id="dc_cl1" actionListener="#{backingBean.action}" binding="#{backingBean.customLink}"/> <af:outputText value="]" id="dc_ot2"/> <af:outputText value="[" id="dc_ot3"/> <af:facetRef facetName="zoom"/> <af:outputText value="]" id="dc_ot4"/> </af:panelGroupLayout> <af:xmlContent> <component xmlns="http://xmlns.oracle.com/adf/faces/rich/component"> <facet> <facet-name>zoom</facet-name> </facet> </component> </af:xmlContent> </af:componentDef> </jsp:root>
JSPXページを保存します。
タスク・フローを含む単純なJSPXページ(MyPage
.jspx
)があるとします。ページのソースを次の例に示します。
<?xml version='1.0' encoding='UTF-8'?> <jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" version="2.1" xmlns:f="http://java.sun.com/jsf/core" xmlns:h="http://java.sun.com/jsf/html" xmlns:af="http://xmlns.oracle.com/adf/faces/rich" xmlns:pe="http://xmlns.oracle.com/adf/pageeditor" xmlns:cust="http://xmlns.oracle.com/adf/faces/customizable"> <jsp:directive.page contentType="text/html;charset=UTF-8"/> <f:view> <af:document id="d1"> <af:form id="f1"> <af:panelStretchLayout topHeight="50px" id="psl1"> <f:facet name="top"> <pe:changeModeLink id="cml1"/> </f:facet> <f:facet name="center"> <!-- id="af_one_column_header_stretched" --> <pe:pageCustomizable id="pageCustomizable1"> <cust:panelCustomizable id="panelCustomizable1" layout="scroll"> <af:region value="#{bindings.taskflowdefinition1.regionModel}" id="r1"/> </cust:panelCustomizable> <f:facet name="editor"> <pe:pageEditorPanel id="pep1"/> </f:facet> </pe:pageCustomizable> </f:facet> </af:panelStretchLayout> </af:form> </af:document> </f:view> </jsp:root>
タスク・フロー(taskflowdefinition1
)には、次のview.jsff
フラグメントが含まれています。
<?xml version='1.0' encoding='UTF-8'?> <jsp:root xmlns:jsp="http://java.sun.com/JSP/Page" version="2.1" xmlns:af="http://xmlns.oracle.com/adf/faces/rich"> <af:panelGroupLayout layout="scroll" id="pgl1"> <af:commandButton text="commandButton 1" id="cb1"/> <af:commandButton text="commandButton 2" id="cb2"/> </af:panelGroupLayout> </jsp:root>
作成したカスタム・アクションを表示するには、コンポーザ内からcustomLink.jspx
ページがコールされるようにする必要があります。Page Customizable
コンポーネントのsourceViewNodeAction
属性を使用して、このカスタム・アクションを含むJSPXページを参照します。
Page Customizable
タグが、ページ・ソースに次のように表示されます。
<pe:pageCustomizable id="pageCustomizable1" sourceViewNodeAction="/customLink.jspx">
sourceViewNodeAction
属性は、JSPXファイルの名前、またはJSPXファイル名として評価されるEL値を取ることができます。
ブラウザに対してMyPage.jspx
を実行し、コンポーザの「構造」ビューでページを開くと、コンポーネント・ナビゲータは、ページの各タスク・フロー・インスタンスの隣に「テスト」リンクおよび「タスク・フローの編集」リンクを表示します。
通常、ユーザーは、ページで「編集」リンクまたはボタンをクリックしてページ編集モードに入ります。アプリケーションを構成して、キーボード・ショートカットを使用してページ編集モードにユーザーが入ることができるようにできます。さらに、アプリケーションを構成して、ショートカット・キーを使用して他のイベントを実行できます。この項では、コンポーザに対してキーボード・ショートカットを有効にして、そのショートカット・キーのイベント・ハンドラを構成する方法を説明します。次のサブセクションが含まれます:
<pe:mode-switch-key>
要素をアプリケーションのadf-config.xml
ファイルに追加することによって、ページ編集モードへのリンクなしのエントリを構成できます。<pe:mode-switch-key>
要素を設定するときに構成されたデフォルトのキーボード・ショートカットは[Ctrl]+[Shift]+[E]です。ユーザーはこのキー・シーケンスを使用して、ページの表示モードと編集モードを切り替えられます。ただし、
<pe:key-sequence>
プロパティを追加することによって選択したキーを構成できます。
<pe:mode-switch-key>
プロパティを追加するには:
アプリケーションのadf-config.xml
ファイルを開きます。これは、「アプリケーション・リソース」パネルの「ディスクリプタ」
の下のADF META-INF
フォルダにあります。
例20-6に示すように、<pe:mode-switch-key>
プロパティを追加し、その値をtrue
に設定します。この例は、ショートカット値がCtrl+E
である<pe:key-sequence>
プロパティを示します。
ファイルを保存します。
次の例に示すように、<pe:mode-switch-handler>
要素を使用して、ショートカット・キーを使用したときにトリガーされる必要があるイベントを指定します。
<pe:mode-switch-key>
<pe:enabled>true</pe:enabled>
<pe:mode-switch-handler>#{PageEditorBean.handleModeSwitch}</pe:mode-switch-handler>
</pe:mode-switch-key>
ここで、次のサンプルで示すように、handleModeSwitch
はModeChangeEvent
メソッドを使用し、2つのモード間を切り替えるロジックを提供します。
public void handleModeSwitch(ModeChangeEvent editMode) { // Your implementation to handle mode change goes here }
ユーザーは、構成したショートカットを使用してアプリケーション・ページにアクセスし、編集モードに入れます。
コンポーザには、タスク・フローのイベントをコンテキストに即して関連付ける方法が用意されています。コンテキスト・イベントをアクション・ハンドラと関連付け、プロデューサでイベントがトリガーされたときにプロデューサ・コンポーネントからコンシューマ・コンポーネントに値を渡すことができます。
実行時に使用可能なイベントの場合、設計時にイベント機能をタスク・フローに組み込む必要があります。イベント対応のタスク・フローをカスタマイズ可能ページに追加すると、各タスク・フローの「コンポーネント・プロパティ」ダイアログに「イベント」タブが組み込まれ、ここで関連付けアクティビティの多くが行われます。イベント機能の組込みの詳細は、『Oracle Fusion Middleware Oracle Application Development Framework Fusion開発者ガイド』のコンテキスト・イベントの作成に関する項を参照してください。
ページで「編集」ボタンまたはリンクをクリックしてユーザーがコンポーザを起動すると、ページはデフォルトでは「コンテンツの追加」ビューまたは「デザイン」ビューで開きます。ビジネスで必要な場合、デフォルトでコンポーザの「構造」ビューで表示するようにアプリケーション・ページを構成できます。
Page Customizable
コンポーネントのEdit Mode view
属性を使用して、編集モードのデフォルトのページ・ビューを指定できます。
「構造」ビューにデフォルトでページを開くには:
JDeveloperでJSPXページを開きます。
構造ナビゲータでPage Customizableコンポーネントを選択します。
プロパティ・インスペクタで、Edit Mode View属性のドロップダウン・リストをクリックして、「ソース」を選択します。
注意: 選択したユーザーのみ「構造」ビューでページを開くために、 |
ページを保存します。
「構造」ビューの位置とサイズの設定
デフォルトでは、「構造」ビューのコンポーネント・ナビゲータは、ページの右側に表示され、そのデフォルトの幅は200ピクセルです。Page Customizable
コンポーネントでsourceViewPosition
属性およびsourceViewSize
属性をそれぞれ使用して、コンポーネント・ナビゲータに対して別の位置またはサイズを指定できます。これらの属性の詳細は、第B.1.1項「Page Customizableコンポーネント」を参照してください。
デフォルトでは、コンポーザ対応ページで「構造」ビューは有効になっています。タスク・フロー、ポートレットおよびレイアウトの各コンポーネントを除くページ・コンポーネントをユーザーが編集できないようにする場合、「構造」ビューを無効にできます。この項では方法について説明します。次のサブセクションが含まれます:
アプリケーションのadf-config.xml
ファイルで<pe:enable-source-view>
エントリをfalse
に設定して「構造」ビューを無効にできます。
「構造」ビューを無効にするには:
アプリケーションのadf-config.xml
ファイルを開きます。これは、「アプリケーション・リソース」パネルの「ディスクリプタ」
の下のADF META-INF
フォルダにあります。
例20-7に示すように、enable-source-view
プロパティを追加し、その値をfalse
に設定します。
ファイルを保存します。
ユーザーがページ編集モードに切り替えると、図20-7に示すように、ページは「コンテンツの追加」ビューまたは「デザイン」ビューにレンダリングされ、「構造」ビューはユーザーに表示されません。
アプリケーションのadf-config.xml
ファイルで<pe:enable-zoom>
プロパティをfalse
に設定することによって、アプリケーションでタスク・フローにズーム・インする機能を無効にできます。
タスク・フローのズーム機能を無効にするには:
「アプリケーション・リソース」パネルの「ディスクリプタ」
の下のADF META-INF
フォルダにあるadf-config.xml
ファイルを開きます。
例20-8に示すように、<pe:enable-zoom>
プロパティを追加し、その値をfalse
に設定します。
ファイルを保存します。
タスク・フローにズーム・インする機能はアプリケーション全体で無効になります。
次のいずれかの方法を使用して、コンポーネントのヘッダーおよびコンテンツに様々なスタイルを適用することによって、コンポーザ・コンポーネントのルック・アンド・フィールを変更できます。
スタイル・セレクタを使用してスキンを構築し、そのスキンをPortal Frameworkアプリケーションに適用します。スタイル・セレクタおよびスキンの詳細は、『Oracle Fusion Middleware Oracle Application Development Framework Webユーザー・インタフェース開発者ガイド』の「スタイルとスキンを使用した外観のカスタマイズ」の章を参照してください。
プロパティ・インスペクタを介して、JDeveloperのスタイル・プロパティを使用して、スタイル情報を指定します。詳細は、「contentStyleプロパティおよびinlineStyleプロパティの理解」を参照してください。
注意: JDeveloperのスタイル・プロパティは、スキンCSSからのスタイル情報をオーバーライドします。ただし、JDeveloperを使用してスタイル・プロパティを定義する場合、このスタイルは選択したコンポーネントのみのスタイルをオーバーライドし、子コンポーネントはスキンで指定されたスタイルを使用し続けます。 |
スタイル関連のプロパティinlineStyle
およびstyleClass
を変更して、設計時にPage Customizable
、Panel Customizable
、Layout Customizable
およびShow Detail Frame
の各コンポーネントのルック・アンド・フィールを調整できます。
Show Detail Frame
コンポーネントには、別の関連スタイル・プロパティ(contentStyle
)があり、これはコンポーネント内のコンテンツのスタイルを定義します。styleClass
プロパティでは、スキンから別のスタイルを選択でき、一方inlineStyle
プロパティおよびcontentStyle
プロパティは、コンポーネントのその特定のインスタンスのアプリケーション・スキンで指定された対応するスタイルをオーバーライドします。
inlineStyle
プロパティはstyleClass
をオーバーライドします。また、コンポーネント・インスタンスで設定されたプロパティは、コンポーネントのそのインスタンスのみに影響します。アプリケーション内のその他のコンポーネント・インスタンスは影響を受けません。
注意:
|
contentStyleプロパティおよびinlineStyleプロパティの理解
スタイル・プロパティのinlineStyle
とcontentStyle
は、サポートする属性のタイプが類似しています。これらのプロパティの違いは、影響の範囲です。inlineStyle
がコンポーネント全体のスタイル情報を提供するのに対し、contentStyle
はコンポーネント・コンテンツのスタイル情報のみを提供します。contentStyle
プロパティはShow Detail Frame
コンポーネントで使用できますがPanel Customizable
コンポーネントでは使用できません。
inlineStyle
プロパティは、CSSをコンポーネントのルート、つまり最上位のDOM要素に適用します。これは、スキンから色、フォントなどを選択する子要素のスタイルをオーバーライドしません。たとえば、コンポーネント・ヘッダーがスキニングされた場合、inlineStyle
を設定してもコンポーネント・ヘッダーには影響しません。contentStyle
は、コンポーネントのコンテンツ部分を囲むDOM要素にCSSを適用します。Show Detail Frame
では、コンテンツはヘッダーの下の領域のことです。
コンポーネント・コンテンツでは、contentStyle
に指定した値が、inlineStyle
に指定した値よりも優先されます。また、コンポーネント・インスタンスでは、contentStyle
は、親コンポーネント(Panel Customizable
コンポーネント内でネストされたポートレットなど)のinlineStyle
値とcontentStyle
値のいずれにも優先されます。
図20-8 プロパティ・インスペクタでのcontentStyleおよびinlineStyleのスタイルの定義
セッション間でユーザー・カスタマイズおよびアプリケーション・カスタマイズを永続するには、アプリケーションを構成して変更の永続性フレームワークを使用する必要があります。コンポーザ・コンポーネントをカスタマイズ可能ページに追加すると、コンポーザは、アプリケーションを構成してComposerChangeManager
を使用し、実行時にページに対して行われた変更が適切に永続されます。この項では、コンポーザ対応ページを含む新しいPortal Frameworkアプリケーションでのデフォルト変更マネージャ構成について説明します。
コンポーザ・コンポーネントをアプリケーション・ページに初めて追加するとき、コンポーザは次のことを行い、変更の永続性を有効にします。
CHANGE_PERSISTENCE
コンテキスト・パラメータをweb.xml
ファイルに追加し、その値をComposerChangeManager
に設定します。このコンテキスト・パラメータは、次の例に示すように、永続性を処理するために使用されるChangeManager
クラスを登録します。
<context-param> <param-name>org.apache.myfaces.trinidad.CHANGE_PERSISTENCE</param-name> <param-value>oracle.adf.view.page.editor.change.ComposerChangeManager</param-value> </context-param>
adf-config.xml
ファイルのpersistent-change-manager
要素をMDSDocumentChangeManager
に設定します。コンポーザは、adf-faces-config
セクション内のMDSDocumentChangeManager
を次のように構成します。
<adf-faces-config xmlns="http://xmlns.oracle.com/adf/faces/config"> <persistent-change-manager> <persistent-change-manager-class> oracle.adf.view.rich.change.MDSDocumentChangeManager </persistent-change-manager-class> </persistent-change-manager> . . . </adf-faces-config>
ファイルのtaglib-config
セクションは、次の例に示すように、デフォルトで永続されるコンポーネントのタグおよび属性をリストします。
<adf-faces-config xmlns="http://xmlns.oracle.com/adf/faces/config"> ... <taglib-config> <taglib uri="http://xmlns.oracle.com/adf/faces/customizable"> <tag name="showDetailFrame"> <persist-operations>all</persist-operations> <attribute name="expansionMode"> <persist-changes>true</persist-changes> </attribute> <attribute name="contentStyle"> <persist-changes>true</persist-changes> </attribute> </tag> <tag name="panelCustomizable"> <persist-operations>all</persist-operations> </tag> </taglib> <taglib uri="http://xmlns.oracle.com/adf/pageeditor"> <tag name="layoutCustomizable"> <persist-operations>all</persist-operations> <attribute name="type"> <persist-changes>true</persist-changes> </attribute> </tag> </taglib> </taglib-config> </adf-faces-config>
さらに、このセクションでその他のタグおよび属性を定義してpersist-changes
属性をtrue
に設定することによって、そのタグおよび属性の変更の永続性を有効にできます。詳細は、第22.4.1項「コンポーネント・レベルでの変更の永続性の定義方法」を参照してください。
操作と属性への変更を永続化する場合は、persist-operations
属性を含めて、値をall
に設定します。persist-operations
属性がタグに含まれる場合、タグが子の追加、移動、並べ替えおよび削除、ファセットの追加および削除などの変更を永続化します。
暗黙的に永続化されるADF Facesコンポーネントおよび属性のリストは、『Oracle Fusion Middleware Oracle Application Development Framework Fusion開発者ガイド』の「ユーザーによる実行時カスタマイズの許可」の章を参照してください。
ComposerChangeManager
ChangeManager
クラスは、エンド・ユーザーによって実行されたアプリケーション・カスタマイズを永続するために必要です。ComposerChangeManager
は、セッション内およびセッション間(MDSへ)の両方の変更の永続性を処理します。これは、次のようにユーザーの変更を適切な変更マネージャに委任します。
表示モードの変更は、FilteredPersistenceChangeManager
にルーティングされ、暗黙的カスタマイズ(列のサイズ変更やヘッダーの折りたたみなど)がアプリケーションのadf-config.xml
ファイルで構成されたフィルタ・ルールに応じて動作するようにします。
編集モードの変更は、MDSDocumentChangeManager
にルーティングされ、暗黙的カスタマイズと明示的カスタマイズの両方が常に永続され、セッション間で使用できるようにします。
注意: コンポーザ・コンポーネントをアプリケーション・ページに追加するとき、(「プロジェクト・プロパティ」ダイアログの)セッションの期間のカスタマイズを有効にするオプションは無効になっています。これは、コンポーザ対応のアプリケーション・ページがセッション間で(MDSへ)永続される必要があるためです。 |
コンポーザで編集されたコンポーネント・プロパティは、現在の言語でのみ使用できます。たとえばタスク・フローをページに追加する場合、コンポーザで入力するタスク・フロー・タイトルは現在の言語でのみ使用可能です。そのため、別のロケールのユーザーには、そのようなプロパティの翻訳された値が表示されません。実行時に編集されたコンポーネント・プロパティの言語サポートを提供するために、現在コンポーザは、文字列値を取ることができるコンポーネント表示オプションのリソース文字列を編集するオプションをユーザーに提供しています。これは、JDeveloperのADF Facesが提供するリソース文字列エディタ機能に似ています。コンポーザでリソース文字列に行われた変更は、アプリケーションで他のリソース・バンドルとともに翻訳される、オーバーライドバンドルに保存されます。翻訳されたものは、アプリケーションにインポートされて戻されます。こうして、ユーザーは自身の言語でプロパティ値を表示できます。
注意: コンポーザは、実行時に約500のリソース文字列の作成をサポートします。この数を超えると、アプリケーションのパフォーマンスは低下します。 |
この項では、リソース文字列の編集を可能にするための手順について説明します。次の項が含まれます:
実行時、文字列値を取ることができるコンポーネント表示オプションでは、プロパティ・フィールドの隣の「編集」メニューは、「テキスト・リソースの選択」オプションを提供します。このオプションをクリックするとリソース文字列エディタが開き、既存のリソースの検索、リソース・キーの編集または削除および新しいリソース・キー/値のペアの追加を行うオプションが提供されます。実行時のリソース文字列の編集の詳細は、第16.5.7項「リソース文字列の編集」を参照してください。
コンポーザでリソース文字列に対して行った変更は、アプリケーション・オーバーライド・バンドルに保存されます。バンドルは翻訳に送られ、翻訳されたバージョンがアプリケーションに戻されます。こうして、ユーザーは自身の言語でプロパティ値を表示できます。
ComposerOverrideBundle.xlf
は、コンポーザ・ライブラリにパッケージされている空のXLIFFファイルです。このバンドルは、設計時にコンポーザ・コンポーネントをページに追加するときにアプリケーションで使用できるようになります。実行時、コンポーザはこのバンドルを内部的に使用し、リソース文字列の編集時にアプリケーションのオーバーライドバンドルからの読取りおよびこれへの書込みを行います。
新しいプロパティ値および更新されたプロパティ値は、オーバーライドバンドルに保存されます。ユーザーは、作成または変更される各文字列のキー、値および説明を指定する必要があります。アプリケーションで行われるすべてのリソース文字列の変更は、単一のオーバーライドバンドルに保存されます。様々なレイヤーで行われた実行時の変更を区別するために、キー値にはMDSレイヤー名および値が接頭辞として付けられ、RT_<
MDSレイヤー名
><
MDSレイヤー値
>_
キー名
のフォーマットである必要があります。たとえば、RT_sitewebcenter_WELCOME_MESSAGE
となります。選択したプロパティに対して、ユーザーは、任意のMDSレイヤーで作成したリソース文字列を検索および使用できます。ただし、編集できるのは、同じMDSレイヤーで作成されたリソース文字列のみです。オーバーライドバンドルの検索に加えて、ユーザーは、設計時にJSPXページで作成されて使用された文字列も検索できます。内部的に、コンポーザは、JSPXファイルでc:set
タグを使用して定義したすべてのリソース・バンドルを検索します。
英語でのリソース文字列の実行時の変更は、デフォルトのアプリケーションオーバーライドバンドルに保存されます。ユーザーは、言語を変更し、その言語でリソース文字列を作成または編集できます。ユーザーがリソース文字列を書き込む言語それぞれに対して個別のオーバーライドバンドルが作成され、ファイル名にはその言語のイニシャルが接尾辞として付けられます。たとえば、Application1
でフランス語で編集されたリソース文字列は、Application1OverrideBundle_fr.xlf
という名前のバンドルに保存されます。
リソース文字列エディタの現在の制限
コンポーザは、実行時に約500のリソース文字列の作成をサポートします。この数値を超えると、アプリケーションのパフォーマンスが低下します
リソース文字列エディタの検索条件では、大文字と小文字が区別されます。
検索文字列の説明を検索するには、ユーザーは検索条件に完全な文字列値を指定する必要があります。
JDeveloperの「プロパティ・バンドル」または「リスト・リソース・バンドル」で作成されたエントリの文字列説明は、リソース文字列エディタには表示されません。
リソース文字列を編集するオプションは、「パラメータ」タブと「イベント」タブのプロパティには無効です。
ADFリソースのEL値がページ・パラメータ、タスク・フロー パラメータ、ポートレット・パラメータなどのページ定義パラメータで参照される場合、バインドしているELは空の値を返します。ユーザーは、ページ定義パラメータでADFリソースのEL値を参照しないようにする必要があります。
アプリケーションでリソース文字列の編集を有効にするには、アプリケーションのadf-config.xml
ファイルの<pe:page-editor-config>
セクションに<pe:resource-string-editor>
要素を次のように追加する必要があります。
<pe:page-editor-config> <pe:resource-string-editor> <pe:enabled>true</pe:enabled> </pe:resource-string-editor> </pe:page-editor-config>
編集するページ、ユーザー、ロールなどの特定の条件に基づいてリソース文字列を選択的に有効にする場合、enabled
属性にEL値を使用できます。
アプリケーションでリソース文字列の編集を有効にする場合、オーバーライド・バンドルoracle.adf.view.page.editor.resource.ComposerOverrideBundle.xlf
を使用するようにアプリケーションを構成する必要があります(まだ使用されていない場合)。このオーバーライド・バンドルは、pageeditor.jar
ファイルに含まれており、実行時にユーザーがリソース文字列を作成または編集するときに、アプリケーションのオーバーライド・バンドルに対する読取りおよび書込みに使用されます。
オーバーライドバンドルを構成するには:
JDeveloperでアプリケーションを開きます。
「アプリケーション」メニューから、「アプリケーション・プロパティ」を選択します。
「アプリケーション・プロパティ」ダイアログの左パネルの「リソース・バンドル」を選択します。
「バンドル」セクションにoracle.adf.view.page.editor.resource.ComposerOverrideBundle.xlf
が表示されていない場合は、「追加」ボタンをクリックしてバンドルを追加します。
「リソース・バンドルの選択」ダイアログの「ファイル名」フィールドに、oracle.adf.view.page.editor.resource.ComposerOverrideBundle.xlf
と入力して、「開く」をクリックします。
「アプリケーション・プロパティ」ダイアログで、「オーバーライド済」チェック・ボックスを選択します(図20-9)。
こうすることによって、実行時にユーザーがファイルを使用できます。
「OK」をクリックします。
この項の手順を繰り返し、アプリケーションの任意のリソース・バンドルを実行時にユーザーに表示します。
注意: 実行時の読取りおよび書込みの操作に関してリソース・バンドルにアクセスできるようにするには、「アプリケーションのプロパティ」ダイアログでそのバンドルの「オーバーライド」オプションを選択している必要があります。 実行時に、プロパティ・バンドル、リスト・リソース・バンドルおよびXLIFFリソース・バンドルにアクセスできるようにすることができます。 |
文字列を取るプロパティの隣の「編集」アイコンをユーザーがクリックすると、「テキスト・リソースの選択」オプションが使用可能になります。このオプションをクリックすると、リソース文字列エディタが開き、そこでユーザーはリソース文字列を作成、変更または削除できます。詳細は、第16.5.7項「リソース文字列の編集」を参照してください。
この項では、コンポーザの拡張構成の実行時に発生する可能性のある問題のトラブルシューティングに役立つ情報を提供します。
ロギングの構成の詳細は、「コンポーザのADFロギングの構成」を参照してください。
問題
グローバルまたはインスタンス・レベルのCustom Action
を追加しました。ただし、これはchromeまたはShow Detail Frame
の「アクション」メニューのいずれにも表示されません。
解決方法
次の点を確認してください。
Show Detail Frame
の最初の子は、af:region
である必要があります。
タスク・フローに現在表示されているビューは、カスタム
・アクション
の処理と一致するそのタスク・フロー定義ファイルの結果を含む必要があります。
この処理に接頭辞dialog:
がある場合、タスク・フロー定義の結果にも同じ接頭辞がある必要があります。
詳細は、第20.3.2項「タスク・フローを囲んでいるShow Detail Frameでカスタム・アクションを有効にする方法」を参照してください。
問題
コンポーザがADFアプリケーション・ページで動作しません。Oracle WebCenter Portalのリソース・カタログまたは「コンポーネント・プロパティ」ダイアログを使用すると、エラーがログに報告されます。カスタマイズは、まったく保存されません。オブジェクトはカタログから追加されません。
解決方法
コンポーザは、MDSDocumentChangeManager
およびComposerChangeManager
と互換性があります。web.xml
ファイルのCHANGE_PERSISTENCE
コンテキスト・パラメータをこれらのいずれかに設定する必要があります。次の例に、CHANGE_PERSISTENCEをMDSDocumentChangeManager
に設定する方法を示します。
<context-param> <param-name>org.apache.myfaces.trinidad.CHANGE_PERSISTENCE</param-name> <param-value>oracle.adf.view.rich.change.MDSDocumentChangeManager</param-value> </context-param>
コンポーザを構成するとき、CHANGE_PERSISTENCE
の値がoracle.adf.view.page.editor.change.ComposerChangeManager
に変更されます。