OAF 架構中的 MDS 是什麼? OAPageContext & OAWebBean 是什麼?,oafoapagecontext

來源:互聯網
上載者:User

OAF 架構中的 MDS 是什麼? OAPageContext & OAWebBean 是什麼?,oafoapagecontext

原文地址: http://oracle.anilpassi.com/mds-in-oa-framework-what-exactly-it-is-2.html


我們知道 "MDS" 是 "MetaData Service" 的縮寫; 我們也知道 MDS 跟 OAF 架構中頁面顯示有某種關係. 讓我們來理解一下 MDS 的基礎知識.

Meta: 在技術領域裡面, meta 表示"字典". 想象一下, 一個網頁被分解成許多很小的單元( 單元格, 按鈕, 選項框...). 這些小單元被儲存在資料庫中的一個字典( 表 )裡面. 當把這些單元組合起來, 就變成一個在瀏覽器中顯示的網頁.

Data: 那些字典片段( meta pieces) 並不是以二進位檔案的方式儲存的, 而是儲存在資料庫表中. 這些表的首碼是 "jdr", 比如 JDR_ATTRIBUTES, JDR_ATTRIBUTES_TRANS, JDR_COMPONENTS 和 JDR_PATHS. 所有的欄位/地區/組件( field/region/component) 的定義和關係, 都儲存在這些 JDR 的表中. 當你請求一個頁面的時候, OAF 架構就會從資料庫裡面讀取這些資料. 頁面的結構就是從這些 MetaData 重構出來的.

Service: MetaData 可以作為一個服務使用. 所有的資料都存在 JDR 表中, 但是所有的這些資料都必須重新串連, 所有的欄位, 地區, 按鈕都必須以有意義的方式組成頁面. 所以可以說, MDS 提供了一項服務, 來儲存/重構網頁頁面. MDS 服務重新把零碎的頁面組件組合成有意義的頁面.

在 jDeveloper 中, 當我們在建立一個頁面和地區, 看起來似乎是在建立一個 XML 檔案. 在OAF 架構中, 頁面定義是用 XML 檔案來儲存的嗎?

實際上頁面定義是儲存在 JDR 表中的, 並不是以 XML 檔案儲存體. 但是 MDS 提供了一個 API 介面, 用來把 JDR 表資料轉化成 XML 描述性檔案.

因此這裡有兩種形式:

1. 當我們設計頁面的時候, 我們把頁面的定義以 XML 格式儲存在檔案系統裡面. 當我們部署伺服器/系統的時候, 我們就需要把這些 XML 格式的檔案匯入到 JDR 表中. OAF 架構提供了匯入工具 import:

例如用下面的的命令把 RcvBarCodeLovRN.xml 匯入到資料庫

C:\Oracle\p9879989\jdevbin\oaext\bin\import C:\Oracle\p17888411\jdevhome\jdev\myprojects\oracle\apps\po\rcv\lov\webui\RcvBarCodeLovRN.xml -rootdir C:\Oracle\p17888411\jdevhome\jdev\myprojects -username apps -password apps -dbconnection erik-lnx.oracle.com:1522:VID

select * from JDR_COMPONENTS where comp_id = 'SecTxnQtyColRN';


2. 當使用者要顯示一個頁面的時候, OAF 架構做了下面的事情:

第一步. OAF 架構向 MDS 請求頁面定義, 這會被緩衝( 第一次開啟頁面會比較慢, 以後會比較快).
第二步. MDS 引擎向 OAF 架構返回一個 XML 檔案
第三步. XML 檔案中的每一個節點/組件( mode/component) 會被轉化成一個 webBean 對象.

比方說有個頁面, 結構如下:
    Region-Main
        field1
        Region-Child
            Button
            
在這個樣本中, OAF 架構將會執行個體化4 個 webBean 對象, 每一個對象都代表了一個組件(field/button/region...). 每一個 webBean 對象都有一些方法比如: setRendered(), setRequired(), getRequired() 等等.
第四步. 這些 webBean 對象不僅被一個個建立出來, 而且他們之間是相互嵌套的, 嵌套的順序跟頁面定義時一樣. 因此頁面組件的父-子關係被保留下來.
第五步. 頁面準備好之後, OAF 架構會調用 MDS 頁面的控制器 controller( CO.class). 當 CO 中的processRequest() 方法執行完畢之後, 使用者就可以看到頁面了.

到現在為止, OAF 已經顯示了 web page, 下面會發生什麼呢?

在回答這個問題之前, 我們先回顧一下之前的步驟. 讓我們回顧一下怎樣定義這個頁面的. 在OAF 中, 當我們定義一個頁面的時候, 有兩個關鍵步驟:
1. 為 page 定義一個 CO/controller
2. 定義一個 AM/application module 並附加到這個頁面上.
當一個頁面在瀏覽器中顯示時, 會發生下面的事情:
a. 架構會在記憶體中, 根據 MDS 給出的 XML 檔案建立一個 webBean 的層級關係, 用來表示頁面的結構.
b. 建立一個 ApplicationModule 對象. 我們可以重新擷取這個 AM 對象來管理頁面的資料庫狀態.
c. CO 中的processRequest() 方法執行.

執行processRequest() 方法會傳遞哪些參數呢?
OAPageContext
OAWebBean

OAPageContext 參數有什麼用處?
1. 使用 oaPageContext.getParameter() 和 oaPageContext.putParameter() 來設定擷取和設定欄位( field) 的值.
2. 重新導向頁面到當前頁面或者其他頁面. 比如, oaPageContext.forwardImmediatelyToCurrentPage() 重新導向到當前頁面, oaPageContext.sendRedirect(newPage) 導向到其他頁面.
3. 擷取 AM: oaPageContext.getRootApplicationModule(), 因為 AM 已經被附加到頁面上了.
4. 寫 debug 資訊: oaPageContext.writeDiagnostics().
5. 從 FND 訊息字典中擷取資訊: oaPageContext.getMessage().

OAWebBean 參數有什麼用?
我們知道 webBean 對象表示了頁面中的結構/層次關係. 因此用這個參數, 我們可以操作這個頁面結構中的所有組件. 一旦我們獲得了組件的對象( field bean or button bean), 我們就可以在 runtime 的時候用 setRendered() 等等方法來改變頁面的行為.
例如:
1. OAWebBean lastName = oaWebBean.findIndexedChildRecursive("personLastName");
2. 擷取一個地區的對象: OAStackLayoutBean oaStackLayoutBean = (OAStackLayoutBean) oaWebBean.findIndexedChildRecursive("stackRegionName");
3. 如上面兩點所示, findIndexedChildRecursive() 方法返回的對象可以被映射到對應的 bean 對象.

問題集錦:
現在有一個頁面, 裡面的地區是嵌套的, 每一個地區都有自己的 CO/controller. 當頁面出來的時候, 每一個 CO 中的 processRequest() 方法都會被執行嗎?

回答: 會的. 內部地區的 CO 會先執行, 然後執行外部地區的 CO. 這很常見, 當你在首頁面中添加一個公用地區( shared region) 的時候, 每一個公用地區都可能有自己的 CO.

MDS 頁面定義會被緩衝嗎?
回答: 會的. 因此當在資料庫中 update 了MDS, 就要重啟 weblogic 伺服器.
但是這對用 jDeveloper 測試頁面不適用, jDeveloper 會先找本地的 XML 檔案/本地MDS, 只有當本地檔案系統找不到, 架構才會從資料庫中去找頁面定義.

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.