目次
Financial Management SDKはコンシューマ・プログラムによるOracle Hyperion Financial Management Servicesへのアクセスを可能にする、オブジェクト指向のJavaインタフェースです。これによってコンシューマはHFMアプリケーションを作成して開くことや、ロード、抽出、問合せや、メタデータおよびデータのプログラム的な更新などの各種の操作を実行できます。
Financial Management SDKはすべてJavaで記述されており、TCP/IPプロトコルを使用してHFMサーバーと通信します。Oracle JDeveloperを使用して開発された例が提供されます。
Oracle Hyperion Financial ManagementユーザーはFinancial Management SDKを使用して、ユースケースを解決するためのカスタム・ページを開発できます。これは、Financial Managementに求められる機能が、Financial Managementでは直接提供されていないシナリオで有用です。カスタム・ページはユーザーが使用可能などのJ2EEテクノロジでも開発できます。Oracle ADFで開発されたカスタマイズ・ページの例もこのドキュメントで示されます。Oracle® Fusion Middleware Fusio開発者ガイドfor Oracleを参照してください。また、JDeveloperおよびADFのチュートリアルも参照してください。
SDKを使用してFinancial Managementのカスタム・ページを開発するには、ユーザーがJavaおよびJ2EEテクノロジを習得している必要があります。前提条件:
1. JavaおよびJ2EEテクノロジの習得。
2. Oracle JDeveloper 11gバージョン11.1.1.7.1 (このリンクからダウンロード)。Oracle Supportからダウンロードできるパッチ16964825および19358784を適用します。他のIDEを使用することもできます。JDeveloperのサンプル/例のみが用意されています。
SDKリファレンスの完全版をOTNで入手できます - HFM Javadocを参照してください。
注意: SDKパッケージおよびクラスには、Financial Managementの内部使用のために定義されたpublicクラスおよびメソッドも含まれています。これらはリファレンス・ガイドで相応にドキュメント化されています。これらのAPIの使用は非推奨で、今後のバージョンでサポートされない可能性もあります。
SDK DEMO: サンプル・アプリケーションはSDKDEMOというFinancial Managementアプリケーションを作成し、アプリケーションを開き、メタデータをロードしてからシナリオおよびエンティティのメンバーを表示します。
デモ・サンプル・ファイルは、Financial Management SDKとともにEPM_ORACLE_HOME\products\FinancialManagement\CustomizationSampleの下にインストールされます。
配布されるファイル:
HFMSDKSamples.zip
サンプル・アプリケーションで使用されたプロファイル、セキュリティおよびメタデータ・ファイルも、JDeveloperアプリケーションの一部として含まれます。
HFM SDKデモ・アプリケーションでは次の共有ライブラリが参照されることが必要です。
1. epm-shared-libraries - EPMコンフィグレータによってデプロイされ、すべてのHFMサーバーをターゲットとしています。HFMに必要です。
2. epm-hfm-libraries - EPMコンフィグレータによってデプロイされ、すべてのHFMサーバーをターゲットとしています。HFMへのアクセスに必要です。アクセスをFinancial Managementに付与するプライマリAPIです。
3. epm-thrift-libraries - EPMコンフィグレータによってデプロイされ、すべてのHFMサーバーをターゲットとしています。HFMへのアクセスに必要です。Financial ManagementサーバーへのTCP/IP通信を提供します。
USER=admin
PASSWORD=password
CLUSTER=Cluster
カスタマイズ・サンプル・ファイルはHFM Web階層コンポーネントとともに次の場所にインストールされます。
EPM_ORACLE_HOME\products\FinancialManagement\CustomizationSample
配布されるファイル:
HFMCustomizations.zip
zip内のファイル構造:
上位レベル・ディレクトリ:
.adf - META-INFディレクトリ内にadf-config.xmlを含む
Build - build.xml (アプリケーション構築のためのantファイル)を含む
src - META-INFディレクトリ内にweblogic-application.xmlを含む
Web - Webアプリケーション・ファイルのディレクトリ
Webアプリケーション内の上位レベル・ディレクトリ:
adfmsrc - adfm.xml (adfおよびDataBindings.cpx用のconfigファイル)を含む
build - build.xml (プロジェクト構築用のantファイル)
public_html - Webアプリケーション・コンテンツ
src - Beansおよびビジネス・ロジック・レイヤー用のJavaソース・コード
Financial Managementのカスタム・ページ・フレームワークはFinancial Managementのリンクを活用します。リンクはタブやブラウザ・ウィンドウに表示できます。リンクのモジュールはユーザーのアプリケーションをインライン・フレーム内に表示します。Financial Managementはフレームをインスタンス化して、ユーザーの外部でカスタマイズされてデプロイされたページにリクエストをポストします。
ポスト・リクエストで、HFMは呼出しアプリケーション名、アプリケーションが稼働しているサーバー/クラスタ、SSOトークン、リクエスト・タイプ、および外部メンバー・セレクタへのコールバック用URLを決定します。リクエスト・タイプはユーザーがアプリケーションを初期化しているのか、(タブが閉じたときに)アプリケーションを閉じているのかを示します。カスタム・アプリケーションはHFMからのポスト・リクエスト内の情報を使用して、そのアプリケーション・セッションを作成します。セッションが確立された後、ユーザーはHFM Javaオブジェクト・モデルを使用してWebサービスがHFMにコールバックするようにできます。
HFMカスタム・ページでは次の共有ライブラリが参照されることが必要です。
1. adf.oracle.domain - EPMコンフィグレータによってデプロイされ、すべてのHFMサーバーをターゲットとしています。共通adfファイルに必要です。
2. epm-shared-libraries - EPMコンフィグレータによってデプロイされ、すべてのHFMサーバーをターゲットとしています。HFMに必要です。
3. epm-hfm-libraries - EPMコンフィグレータによってデプロイされ、すべてのHFMサーバーをターゲットとしています。HFMへのアクセスに必要です。アクセスをFinancial Managementに付与するプライマリAPIです。
epm-thrift-libraries - EPMコンフィグレータによってデプロイされ、すべてのHFMサーバーをターゲットとしています。HFMへのアクセスに必要です。Financial ManagementサーバーへのTCP/IP通信を提供します。
ライブラリ・リファレンスはear\META-INF\weblogic-application.xml内のweblogic-application.xmlで入手できます。
カスタムWebアプリケーションをJDeveloperまたは統合Weblogic Serverで実行するには、追加パラメータの–Depm.oracle.instanceがenvインスタンス・ホームと同じになるように指定する必要があります。通常、この変数は次のとおりです。C:\Oracle\Middleware\user_projects\epmsystem1
サンプルWebアプリケーションにはBaseServletFilterの実装もあります。このフィルタはユーザー・セッションでポスト・パラメータをキャッシュします。このキャッシュ操作は、ウィンドウIDおよび制御状態パラメータをURLに追加する一方、初期リクエストがHTTPリダイレクトに従うために必須です。このリダイレクトの際、POSTパラメータが消失します。
フィルタとマッピングはweb.xmlで指定する必要があります。
<filter>
<filter-name>BaseServletFilter</filter-name>
<filter-class>
oracle.epm.fm.ui.customization.servlets.BaseServletFilter
</filter-class>
</filter>
<filter-mapping>
<filter-name>BaseServletFilter</filter-name>
<url-pattern>/faces/customization/*</url-pattern>
<dispatcher>FORWARD</dispatcher>
<dispatcher>REQUEST</dispatcher>
</filter-mapping>
開発したUIページの構造に従ってマッピングを更新します。
メッセージとキャプションは、ブラウザ・プリファレンスに従ってユーザー言語で表示できます。HFMカスタムUIはXLFファイルを使用してリソースを処理できます。ロケールはADFUtil::getLocaleメソッドでADF Facesコンテキストに対して取得されます。正しいメッセージを取得するため、ユーザーはADFUtil::getMessage(String msg, String... params)メソッドにアクセスできます。msgパラメータはWebBundle_XX.xlf (XXはes、enなどのロケールです)に対するキーの名前です。ファイル内のキーは次のように定義できます。
<trans-unit id="ERROR_USER_PARAM">
<source>
There was an error getting the user parameter '{0}'.
Please inspect the logs for more details.
</source>
<target/>
</trans-unit>
キーにはJava (サーバー)側でアクセスできます。
String msg = ADFUtil.getMessage("ERROR_USER_PARAM ", “SSOTOKEN”);
クライアント側のjspx/jsffファイルでは次のようにアクセスできます。
<c:set var="webBundle"
value="#{adfBundle
['oracle.epm.fm.ui.customization.resources.WebBundle']}"/>
<af:outputText id="ot1" value="#{webBundle.REQUESTED_APPLICATION}/>
ロケール用のバンドルのXLFでキーが宣言されていない場合、値のデフォルトは英語バンドルです。この動作はWeb.jprプロジェクトのリソース・バンドルセクションで規定されています。
サンプル・アプリケーションはODLロギングを活用します。WebアプリケーションがJDeveloper (統合WebLogic Server内)で開始されたときに、次のパラメータを起動パラメータとして指定する必要があります。
-Djava.util.logging.config.class=oracle.core.ojdl.logging.LoggingConfiguration
-Doracle.core.ojdl.logging.config.file=logging.xml
ロギング構成(logging.xml)がBuildプロジェクト内にあり、ここではALL ODLロギング・レベルがoracle.FMCUSTADFパッケージ名でプログラム的に確立されたすべてのロガーに対してロギングされることが規定されています。さらに、すべてのロギングが${domain.home}/servers/${weblogic.Name}/logs/hfm/oracle-epm-fm-cust.logに送信されます。
ユーザーは各Javaクラス内で次のように宣言する必要があります。
private static ODLLogger logger = ODLLogger.getODLLogger(
Constants.ADF_LOGGER_NAME + "." +
Constants.<SOME_UNIQUE_DEFINED_VARIABLE> + "." +
<JAVA_CLASS>.class.getName());
その後、ロガーは次のように使用できます。
logger.log(Level.FINEST, "ENTER");
サンプルのカスタマイズ・アプリケーションには、POV情報を表示するための共通で使用されるコンポーネントが含まれます。タスクフローはサンプル・アプリケーションの一部として実装されます。タスクフローではPOVBarData構造がPOVバーの外観および機能を示すことが求められます。アプリケーションは次に初期ポスト・リクエストで渡されたメンバー・セレクタURLを活用して、ディメンションがPOVバーで選択されたときにメンバー・セレクタを表示します。メンバー・セレクタはポスト・リクエストもインライン・フレームに使用するため、カスタム・アプリケーションはHFMメンバー・セレクタで予想されるポスト・リクエスト・パラメータの移入を担当します。
メンバー・セレクタに必要なパラメータ:
· SSOトークン
· アプリケーション名
· クラスタ
· 現在選択されているメンバーのスライス文字列(A#Sales.S#Actual形式)
· ディメンションの選択および可視性の動作を制御するためのディメンションXML。ディメンションXMLは次のような形式です。
<Dimensions>
<Dimension
name=’Account’
type=’Account’
listSelectable=’false’
listSelected=’’/>
<Dimension
name=’Custom1’
type=’Custom’
listSelectable=’false’
listSelected=’’/>
</Dimensions>
さらにカスタム・アプリケーションは、何かが選択または変更されたかどうか判断するための、メンバー・セレクタからのコールバックjavascriptメソッドの実装を担当します。
POVバーはカスタム・ページでタスクフローとして表示できます。jspxページでは、次の内容を追加する必要があります。
<af:panelGroupLayout id="pgpov" layout="horizontal">
<af:region value="#{bindings.POVBartaskflow1.regionModel}"
id="regpov"
clientComponent="true"/>
</af:panelGroupLayout>
af:regionはタスクフローのADF UIコンポーネントであり、pgpovというpanelGroupLayoutに埋め込む必要があります。これは、POVBarの一部のページ・リフレッシュを行うために必要です。リージョンをregpovという名前に変更して、関連付けられたclientComponentを作成する必要があります。POVBartaskflow1のjspxページ定義でバインディングを次のように定義します。
<taskFlow id="POVBartaskflow1"
taskFlowId="/WEB-INF/oracle/epm/fm/ui/customization/taskflows/povbar/POVBar-
task-flow.xml#POVBar-task-flow"
activation="deferred"
xmlns="http://xmlns.oracle.com/adf/controller/binding">
<parameters>
<parameter id="CallbackBean" value="#{viewScope.SampleBean}"/>
</parameters>
</taskFlow>
このコードはPOVBartaskflow1というタスクフローがaf:regionとしてjspxファイルで使用できることを示しています。呼び出されるタスクフローはPOVBar-task-flow.xmlです。また、SampleBeanというCallbackBeanの指定が必要なことも示しています。これは通常、adfc-config.xmlファイルで観察されるルート管理対象Beanビューです。このbeanは、メンバー・セレクタを使用してPOVBarに対する変更が行われると通知されます。beanのBaseBean::handleCallbackFromPOVBarは新規データとともに呼び出されます。beanは次にそれに応答しますが、POVBarのPPRはその時点までにすでに行われています。
POVBarタスクフローはPOVBarBeanタイプのpageFlowScope beanも定義します。タスクフローはPOVBar.jsffページのみを開きます。
POVBar.jsffページはaf:iteratorを活用して、POVBarDataから反復してPOVBarをaf:commandImageLinksのグループ(panelGroupLayout)として表示します。これは、メンバー・セレクタを起動するためにPOVBar内の各コンポーネントをクリックできることを意味します。反復に使用される実際のデータ構造はList<POVBarItem>として定義されます。POVBarItemsはPOVBarBean::getPovBarItems()メソッドを使用して、POVBarBean内のPOVBarDataから抽出されます。POVBarItemは表示されるディメンションの名前、表示されるそのディメンションのメンバーの名前、および関連付けられたディメンション・タイプのアイコンを定義します。
POVBarItem/commandImageLinkをクリックすると、POVBarData::launchMemberSelectorメソッドが呼び出されます。このメソッドは実質的に、af:popupダイアログ・ボックス内部でaf:inlineFrame経由で外部メンバー・セレクタを起動することを担当します。これは次のように実施されます。このメソッドは最初にADFUtil::findComponentNearメソッドを活用してPOVBar.jsffでaf:popupコンポーネントを検索して、ポップアップを表示します。ポップアップにはダイアログが単一のaf:inlineFrameコンポーネントとともに含まれます。HFMがカスタム・アプリケーションを呼び出す方法と同様に、inlineFrameは内部jspxページを活用してリクエストを外部メンバー・セレクタのHFMにPOSTして戻します。これが行われるのは、リクエスト・パラメータをURL問合せパラメータとしてポストすることを避けるためであり、これはinlineFramesがこのようなリクエストを行う唯一のネイティブ手段です。インライン・フレームは内部リクエストを/faces/oracle/epm/fm/ui/customization/memberselector/memberSelector.jspxに対して行います。再度、HFMが固有の内部jspxページを呼び出す方法と同様に、ランダムに生成されたUUIDがセッション・マップへのキーとして使用され、memberSelector.jspxによって送信される必要があるすべてのPOSTパラメータが格納されます。このUUID値はHFMCUSTKEY URL問合せパラメータとして格納されます。セッションにはUUIDに対応するHashMap値が含まれます。このHashMapにはPOSTパラメータが含まれます。これにはssoToken、appName、クラスタ、paramValue (スライス文字列)、リクエスト・パラメータ(POVBarDataのディメンションn xml)と、外部メンバー・セレクタへのPOSTリクエストを行うためのURLが含まれます。このURLはカスタム・アプリケーションへの初期呼出しでHFMから渡され、対応するエントリのフィルタ・クラスにキャッシュされます。このコードの部分がPOVBarBean::getQueryParams()メソッドで行われます。
memberSelector jspxファイルは、f:view beforePhase属性の一部として最初にMemberSelectorBean::initメソッドへの呼出しを行います。MemberSelectorBeanはadfc-config xmlでリクエスト・スコープbeanとして定義されます。initメソッドは、リクエスト・パラメータHFMCUSTKEYで指定されたUUIDキーを使用してセッションから単純にPOSTパラメータ・マップを抽出します。
次に、javascriptへの呼出しを行い、メンバー・セレクタからのコールバックがiframeに戻るダイレクトjavascriptによって行われることを示す追加パラメータ(extcaller=fcm)とともに、上で指定したPOSTパラメータによってExternalMemberSelectorへプログラム的にPOSTします。メンバー・セレクタは次のように表示されます。
ユーザーが「取消し」をクリックすると、HFMでは親フレームがmemberSelectorCanceledというjavascriptメソッドを実装することが予測されます。このメソッドはPOVBar.jsffで実装されます。ADFイベントがポップアップ内で‘handleMemberSelectorCancel’へのjavascriptのキューに入れられます。ポップアップはこのためにaf:serverListenerを実装し、これは次にPOVBarBean::handleMemberSelectorCancel()メソッドを呼び出します。このメソッドがaf:popupを閉じます。
ユーザーが「OK」をクリックすると、HFMでは親iframeがhfmSelectorReturnというjavascriptメソッドを実装することが予測され、これはPOVBar内の新規の値が含まれるパラメータとして文字列XMLを取得します。上記のXMLは次のように定義されています。
<Dimensions>
<Dimension name=’Account’ val=’Expense;Margin’/>
<Dimension name=’Scenario’ val=’Actual’/>
<Dimension name=’Entity’ val=’Stamford’/>
</Dimensions>
これは次にhfmSelectorReturnメソッドをPOVBar,jsffで呼び出します。javascriptメソッドは‘handleMemberSelectorOK’のADFイベントをaf:popupでキューに入れて、xmlのクライアント属性をmemberSelectorXmlに設定します。af:popupはこのためにaf:serverListenerを実装し、これは次にPOVBarBean::handleMemberSelectorOkを呼び出します。このメソッドはクライアント属性xmlを抽出して、それによってPOVBarDataを更新します。POVBarData::updateメソッドは、DOMパーサーを使用してxmlを解析することでこれを行います。次にPOVBarがPPRされ、コールバックBaseBeanのhandleCallbackFromPOVBarメソッドが呼び出されます。最後に、ポップアップが閉じられます。
メッセージがロケール・リソース・バンドルから取得された後、この情報を示すダイアログ・ボックスの表示が必要な場合があります。デフォルトではADFUtilクラスが、メッセージがエラー・メッセージであるという前提で、これらのメッセージを表示する手段を提供します。このためのメソッドはADFUtil::showErrorDialog(String msg)です。実質的にはFacesMessageがこの実行のために利用されます。最初のエラー・メッセージのみが表示されます。現在のエラー・メッセージが表示される場合、このメッセージを使用してメッセージを追加しようとしても無視されます。
イメージは、ADFのデフォルトのWebコンテンツJDeveloperディレクトリ内のWeb\public_html\imagesディレクトリに格納されます。したがって、イメージを表示する必要がある場合は次のように実行できます。
<af:image id="imgscen"
source="/images/scenario.png"
shortDesc="Scenario Dimension"/>
例外はすべてHFMCustomizationExceptionから導出する必要があります。これは、例外がアプリケーションによって捕捉された、または処理されることを示します。これは、例外を発生時点で1回だけ記録することが通例であるため、例外がすでに記録済であることを意味します。ただし、管理対象Beanのすべてのルート・アクセス時点で、例外のチェックが必須です。例外がHFMCustomizationExceptionタイプの場合、エラー・ダイアログ・ボックスの表示のみが必要とされます。それ以外では、未処理の例外が発生した場合、最初に例外を記録してからエラー・ダイアログ・ボックスを表示することが最適です。
例として、Webサービスの呼出しが失敗した場合は次の処理が行われます。
try {
// Code for business logic
} catch(HFMException ex) {
Log exception
Throw new HFMCustomizationException(ex);
}
そして管理対象Beanのpublicメソッドで、これはクライアント側のjspx/jsffファイルでアクセスされ、次の処理が発生します。
try {
Code for business logic
} catch(HFMCustomizationException ex) {
Display error dialog
} catch (Throwable ex) {
Log the exception
Display error dialog
}
カスタムUIページはセッションに関連したサーバー上のリソースのクリーンアップも担当します。カスタム・モジュールが含まれるHFMタブが閉じると、OnCloseイベントがブラウザからトリガーされます。
カスタム・アプリケーションはこのイベントおよびリソースのクリーンアップの処理の両方をJava WebLogic、ならびにHFM Appサーバー上のセッションで、作成されたアプリケーション・セッションのクローズも含めて担当します。アプリケーションがこの処理を行わない場合、アプリケーション・セッションはタイムアウトになったときに閉じられます。
inlineFrameが置かれてカスタム・アプリケーションを表示しているHFMタブが閉じると、カスタム・アプリケーションのwindow.onunloadイベントがトリガーされます。この時点で、最低限でもアプリケーション・セッションのクローズが求められます。イベントを捕捉するため、カスタム・アプリケーションのメインjspxページではwindow.onunloadメソッドの実装が必要です。common.jsファイルにはこのメソッドの動作中の実装があります。jspxにこのファイルが次のように含まれる必要があります。
<af:resource type="javascript" source="/oracle/epm/fm/ui/customization/js/common.js"/>
javascriptメソッドは内部URLのcustomization/cleanUp.jspに対する内部AJAX POSTリクエストを行い、アプリケーション・セッションIDをポスト・パラメータとしてそれに渡します。アプリケーション・セッションが取得される方法は、‘clnbtn1’という名前のcommandButtonが存在し、これにはこの情報が含まれるappSessionIdというクライアント属性があると、javascriptが仮定することです。したがって、ルートjspxページに次のコードが含まれる必要があります。
<af:commandButton id="clnbtn1" text="test" visible="false" clientComponent="true">
<af:clientAttribute name="appSessionId"
value="#{viewScope.SampleBean.appSessionId}"/>
</af:commandButton>
SampleBeanはBaseBeanから導出するため、appSessionIdが、フィルタ内の格納されたセッション・マップから抽出されて、使用できます。
AJAX POSTリクエストは、IE6+およびFireFox2+と互換性があるXmlHttpRequestオブジェクトを使用して行われます。実際のリクエストはcleanUp.jspファイルによって処理されません。かわりに、HttpServletから導出されるCleanUpServlet.javaによって処理されます。これは、そのURLへのリクエストを処理するサーブレットを次のように示すことで、web.xmlファイル内に記述されます。
<servlet>
<servlet-name>CleanUpServlet</servlet-name>
<servlet-class>oracle.epm.fm.ui.customization.servlets.CleanUpServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>CleanUpServlet</servlet-name>
<url-pattern>/customization/cleanUp.jsp</url-pattern>
</servlet-mapping>
サーブレットのdoPost(HttpServletRequest req, HttpServletResponse resp)メソッドが、サーブレットに対してPOSTリクエストが行われるときに呼び出されます。これはアプリケーション・セッションIDを‘appSessionId’というポスト・マスターから抽出して、ApplicationOM::closeWebSessionを呼び出してappsessionを閉じるためのwebserviceコールを行います。
ビルド・プロジェクトはカスタマイズ・アプリケーション・コードのコンパイルと、HFMにデプロイするためのルートdistディレクトリ内のHFMCustomizationApplication.earファイルの作成に使用されます。earファイルはOJDeployを使用して、HFMCustomization.jwsファイル内のデプロイメント構成を活用するearファイルを作成します。build_all.xmlファイルはプロジェクトのビルドに使用されます。次のターゲットを使用できます。
1. clean - ルートdistディレクトリとDOMAIN_HOME内のlogging.xmlファイルを削除します
2. init - ルートdistディレクトリを作成し、logging.xmlをDOMAIN_HOMEにコピーします
3. web - webのbuild.xml ‘all’ターゲットを呼び出します。これは続いて次の内部ターゲットを呼び出します。
a. clean - Web/classesおよびWeb/distディレクトリを削除します
b. init - Web/classesおよびWeb/distディレクトリを作成します
c. deploy - コードをコンパイルし、ojdeployおよびWeb.jpr内のデプロイメント・プロファイルを使用してHFMCustomizationWeb.warを作成します。
4. Deploy - ojdeployおよびHFMCustomization.jwsファイル内のアプリケーション・デプロイメント構成を使用して、HFMCustomizationApplication.earファイルをコンパイルして作成します。
5. All – 他のすべてのターゲットを順序どおりに呼び出します。
build.xmlは2つのプロパティ・ファイルを使用してすべての環境変数を定義します。
build_all.propertiesファイルは、ORACLEインストール、WebLogic URL、ユーザー名およびパスワードの場所の決定に使用されます。
${jdev.middleware}/wlserver_10.3/.product.propertiesファイルは、logging.xmlをコピーするための${DOMAIN_HOME}などのDOMAIN固有の環境変数を示すために使用されます。
logging.xmlファイルもこの場所にあり、変更が可能です。
サンプル・アプリケーション(sample.jspx)は、カスタム・アプリケーションの設計方法のデモンストレーションに使用されます。サンプルPOVバーの表示が活用されて、ディメンションおよびその情報の簡潔な表が表示されます。カスタム・アプリケーションの開発者は、新規モジュールのためにフロー全体を利用して開始できます。sample.jspxの実行時の表示例のスナップショットを次に示します。これを表示するには、ユーザーはhttp://<hostname>:19000/ hfmcustadf /faces/customization/sample/sample.jspxへのリンクを作成する必要があります。
カスタムUIを使用するWebアプリケーションは、別個のアプリケーションとしてWebLogicサーバーにデプロイする必要があります。JDeveloperはearファイルを生成します。.earファイルまたは.warファイルを使用できます。
アプリケーションへのアクセスを試行するURLはすべてWebサーバー経由でルーティングする必要があるため、アプリケーションがデプロイされた後、ユーザーがプロキシWebサーバー(OHS/IIS)を示す必要があります。
リンクを作成するには、ユーザーがドキュメント・マネージャに移動してドキュメントを作成する必要があります。このドキュメントはリンク・タイプになります。ドキュメントが表示される際、カスタム・モジュールを設定するオプションがあります。ユーザーはこのオプションを選択する必要があります。このオプションを選択した後、システムによってタブ内でリンクが開かれ、SSOトークンが送信されます。
1. JDeveloperからHFMCustomization.jwsを開きます。このファイルはEPM_ORACLE_HOME内にあります。
2. HFM UIがインストールされているマシンと同じマシンで開発中であることを確認します。
3. Webプロジェクトを右クリックして、「ライブラリとクラスパス」に移動します。Epm_hfm_web.jar、Epm.jarおよびEpm_pdf.jarの各ファイルがあることを確認します。ない場合は、EPM_ORACLE_HOME内のこれらのjarファイルの正しい場所を示す必要があります。EPM_ORACLE_HOMEに関連する上記のjarの正しいパス: common\jlib\11.1.2.0
4. ビルド・プロジェクトでbuild_all.propertiesを開きます。すべてのプロパティ・キーがユーザーの場所を示すことを確認します。次の項目の変更が必要な場合があります。
· jdev.middleware (ユーザーのJDeveloperインストールの場所)
· oracle.middleware (ユーザーのEPM_ORACLE_HOMEのルート)
· weblogicユーザー名、パスワード(WebLogicで作成された統合ドメインにカスタムWebアプリケーションをデプロイする場合のみ必須)
· adminurl, hfm.webserviceの場所
· hfmcustomization.homedir (ユーザーのjwsファイルの場所)
5. ビルド・プロジェクトでlogging.xmlを開いて、そのログの場所が正しいことを確認します。ユーザーはデフォルトの場所を使用できます。
6. カスタム・ページへのエントリ・ポイントとなる新規のメインjspxファイルを作成します。sample.jspxファイルをガイドとして使用します。このファイルはcustomizationコンテキスト・ディレクトリ内に存在する必要があります。例として、sample.jspxファイルはcustomization/sampleディレクトリ内に存在します。別のディレクトリをcustomizationディレクトリの下に作成して、jspxファイルをそこに保存することができます。web.xml内のBaseServletFilterマッピングは/faces/customization/*に関連するすべてのリクエストを処理するため、必ずこれがcustomizationディレクトリ内にあるようにしてください。そうでない場合は、ユーザー領域への受信リクエストを処理するために、web.xmlで別のマッピングを作成して独自のBaseServletFilterクラスを導出する必要があります。
7. jspxファイルでは、Web Serviceの呼出しなどの処理を行うために、関連付けられた管理対象Beanが必要な場合があります。標準のJavaクラス・ファイルを使用して管理対象Beanを作成し、BaseBeanクラスからそれを導出します。oracle.epm.fm.customization.beansパッケージの下へのBeanの組込みを、新規パッケージをその中で作成することで試行します。このBeanを忘れずにadfc-config.xmlファイル(デフォルトの無制限タスクフロー)に組み込んでください。Beanのビュー・スコープを作ることを提案されます。SampleBeanをガイドとして使用できます。
8. java側ではADFUtilファイルを使用して、エラー・ダイアログ・ボックスの表示やリソース文字列からのメッセージの取得などができます。文字列の追加が必要な場合は、WebBundle_XX.xlfファイルに追加する必要があります。HFMCustomizationExceptionクラスを活用して有効な例外をスローできます。
9. ルートjspxファイル内に正しいクリーンアップ・コードを含めます。デフォルトで、アプリケーション・セッションが削除されます。これは次のコードを含めることで実行します。
<af:resource type="javascript" source="/oracle/epm/fm/ui/customization/js/common.js"/>
これによってcommon.jsファイルが含まれ、これはデフォルトのwindow.onunloadイベントを上書きします。つまり、タブがHFMで閉じられると、このメソッドが呼び出されます。メソッドは次にCleanUpServlet.javaへのAJAXコールを行い、BaseServletFilterで作成された作成済アプリケーション・セッションが閉じられます。このAJAX POSTリクエストを発生させるには、次のコードをルートjspxにも追加することが必要になります。
<af:commandButton id="clnbtn1" text="test" visible="false" clientComponent="true">
<af:clientAttribute name="appSessionId"
value="#{viewScope.SampleBean.appSessionId}"/>
</af:commandButton>
これは、JavaScriptがclnbtn1というコンポーネントを探して、セッションのクライアント属性の取得を試みるためです。より包括的なクリーンアップ・コードが求められる場合は、最初にCleanUpServlet.javaクラスから導出する新規サーブレットを作成することが必要になります。ユーザーは次にdoPostメソッドを上書きする必要があります。このクラスはCleanUpServletが行われる方法と同様に、web.xmlでサーブレットとして登録する必要があります。これは次のコードを追加することで行われます。
<servlet>
<servlet-name>CleanUpServlet</servlet-name>
<servlet-class>oracle.epm.fm.ui.customization.servlets.CleanUpServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>CleanUpServlet</servlet-name>
<url-pattern>/customization/cleanUp.jsp</url-pattern>
</servlet-mapping>
servlet-mappingは、サーブレットをリダイレクトするためにAJAXコールが行われる必要がある宛先の相対URLを示します。したがって、ユーザーは新規jspにコールをルーティングするためにwindow.onunloadメソッドを調整する必要があります。リクエストjspにポストする情報がさらにある場合は、その情報をclnbtn1上の追加clientAttributeとして組み込む必要があります。onunloadメソッドが呼び出され、ADFコンテキストが破棄されて、Bean内のその情報にアクセスできる手段がなくなるまで、この情報はclientAttributeである必要があります。
10. entry/root jspxでPOVBarを表示する機能が求められ、メンバー・セレクタを使用してメンバーを変更する機能がある場合は、ユーザーが次のようにPOVBarタスク・フローをページに組み込むことが必要になります。
最初に次のコードをjspxページに含めます。
<af:panelGroupLayout id="pgpov" layout="horizontal">
<af:region value="#{bindings.POVBartaskflow1.regionModel}" id="regpov"
clientComponent="true"/>
</af:panelGroupLayout>
jspx pageDefファイルで、POVBartaskflow1のバインディングを次のように定義します。
<taskFlow id="POVBartaskflow1"
taskFlowId="/WEB-INF/oracle/epm/fm/ui/customization/taskflows/povbar/POVBar-
task-flow.xml#POVBar-task-flow" activation="deferred"
xmlns="http://xmlns.oracle.com/adf/controller/binding">
<parameters>
<parameter id="CallbackBean" value="#{viewScope.SampleBean}"/>
</parameters>
</taskFlow>
これはPOVBar-taskflow.xmlをユーザーのjspxファイル内の場所にドラッグすることで実施できます。タスクフローではコンポーネント名についてPPRに想定されるため、panelGroupLayoutはpgpov、af:regionはregpovと名付けるようにしてください。タスクフロー内に渡すことができるオプションのパラメータが存在するので注意してください。このパラメータはPOVBarDataと呼ばれ、POVBarDataタイプを使用してPOVBarのコンテンツを記述します。POVBarDataタイプは表示するディメンションを制限するだけでなく、その初期値を規定します。これが指定されない場合、POVBarタスクフローはユーザーのバックグラウンドPOVにデフォルトで設定されます。パラメータはjspx pageDefファイルで次のように追加できます。
<parameter id=”POVBarData” value=”#{viewScope.SampleBean.povBarData}”/>
この例は、adfc-config.xmlで定義されているSampleBeanというviewScope beanと、POVBarDataを戻すbean内のgetPOVBarDataというメソッドがあることが想定されています。
11. アプリケーションが完了したら、ルートjspxページをデバッグすることでテストできます。jspxを右クリックして、「デバッグ」を選択します。このプロセスではコードがコンパイルされ、抽出されたearがJDeveloperのデフォルトWebLogicサーバーにデプロイされます。
12. もう1つの方法として、ユーザーはアプリケーションを、HFMが存在する本稼働WebLogicサーバーにデプロイできます。これは最初にbuild_all.xmlターゲット‘all’を実行して行われます。HFMCustomizationApplication.earファイルがdistディレクトリにデプロイされます。ユーザーはWebLogic管理コンソールからearファイルを手動でデプロイする必要があります。HFMがデプロイされており、HFMが使用する共有ライブラリがすべてデプロイされる、同じWebLogicにこれをデプロイすることをお薦めします。さらに、HFMのデプロイメント構成を再現することが最適です。
13. アプリケーションへのアクセスを試行するURLはすべてWebサーバー経由でルーティングされるため、アプリケーションがデプロイされた後、ユーザーがプロキシWebサーバー(OHS/IIS)を示す必要があります。
a. $EPM_ORACLE_INSTANCE\httpConfig\ohs\config\OHS\ohs_componentのOHS構成ディレクトリに移動します。例:
エントリをmod_wl_ohs.confファイルに追加します。最初に次のエントリを追加します。
RedirectMatch 301 ^/hfmcustadf$ /hfmcustadf/
さらに次のエントリを追加します。
<LocationMatch ^/hfmcustadf/>
SetHandler weblogic-handler
WeblogicCluster hostname:7363
</LocationMatch>
OHSポートが19000であると仮定しましょう。
b. Webサーバーを使用してIIS ifを構成する手順:
i. ファウンデーション・サーバーで、EOI\httpConfig\VirtualHostsディレクトリを開きます。
ii. HFMディレクトリをコピーして貼り付けます。
iii. コンテキスト名に一致するように新規ディレクトリの名前を変更します(例: hfmcustadf)。
iv. ディレクトリ内で、iisproxy.iniを編集して次のプロパティを変更します。
1. WLForwardパス - コンテキスト・パスに一致させるため(例: hfmcustadf)
2. WebLogicHost/WeblogicCluster - hfmcustadfがデプロイされるホスト。HFMADFが実行中のすべてのサーバー上でカスタムWebアプリケーションは稼働するため、ほとんどの場合、このプロパティを変更する必要はありません。
3. WebLogicPort – WebLogicが実行中のポート番号。WebLogicClusterが使用されている場合、クラスタの一部であるためポートは不要です。
c. IIS管理ページを開いて、アプリケーションの次の詳細を編集します。
i. 別名 - カスタムadfコンテキストと同じ名前(例: hfmcustadf)
ii. 物理パス - 手順bで作成した新規ディレクトリを示す
iii. ApplicationPool — hfmadfAppPoolを使用
14. HFMドキュメント・マネージャ・モジュールから、リンクを作成して「カスタム・リンク」オプションを選択します。デフォルトではこれによって、リンクが同じページ内で開かれ、SSOトークン・オプションが含まれることが選択されます。リンクについて、/hfmcustadf /faces/customization/newsampledir/MyNewSample.jspxなどの相対パスを使用します。絶対パスの使用を選択することもできますが、ブラウザ・セキュリティ・チェックにつながってページがインラインで表示されない可能性があります。絶対URLを使用する場合は、 リンクをインラインで開くオプションを選択解除します。
15. アプリケーションをダブルクリックすると、インライン・フレームにアプリケーションが表示されます。注意: インライン・フレームが使用されるため、URLに対するセキュリティはブラウザで制限しないでください。