通過代碼擷取AM的執行個體

來源:互聯網
上載者:User

Oracle {
function onclick()
{
tagshow(event)
}
}">ADF提供的ADF BC為我們的{
function onclick()
{
tagshow(event)
}
}">開發提供了極大的便利,其提供的聲明式開發方式可以滿足大部分{
function onclick()
{
tagshow(event)
}
}">業務需求,但有時我們可能需要在{
function onclick()
{
tagshow(event)
}
}">代碼中擷取AM的{
function onclick()
{
tagshow(event)
}
}">執行個體,完成一些特殊邏輯的處理,在ViewController中使用代碼擷取AM的執行個體的方式有如下幾種:

 

 1)基於AM的Configration建立
使用Configuration.createRootApplicationModule({
function onclick()
{
tagshow(event)
}
}">serviceDefinition, serviceConfig)代碼進行建立,接收的兩個參數分別為:
   serviceDefinition: AM的package路徑,例如"hand.hadf.common.model.services.HadfFrameworkAM"
   serviceConfig:使用AM中配置的Configuration的名稱"HadfFrameworkAMLocal"

 

範例程式碼:

……<br /> private String serviceDefinition = "hand.hadf.arpt.model.services.ArptAM";<br /> private String serviceConfig = "ArptAMLocal";<br /> private static ArptAM arptAM;<br /> ……<br /> /**<br /> * 擷取AM執行個體<br /> */<br /> private ArptAM getArptService() {<br /> ArptAM service =<br /> (ArptAM)Configuration.createRootApplicationModule(serviceDefinition,<br /> serviceConfig);<br /> return service;<br /> }<br /> ……

 

2)通過BindingContext擷取
在BindingContext中可以直接擷取當前DataBinding.cpx中{
function onclick()
{
tagshow(event)
}
}">定義的DataControl,使用BindingContext對象的findDataSource方法,但需注意的是,此處的findDataSource方法的參數為DataBinding.cpx中註冊的dataControlUsages的對應的BC4JDataControl的id,例如:
<dataControlUsages>
    <BC4JDataControl id="HadfFrameworkAMDataControl" Package="hand.hadf.common.model.services"
                     FactoryClass="{
function onclick()
{
tagshow(event)
}
}">oracle.adf.model.bc4j.DataControlFactoryImpl" SupportsTransactions="true"
                     SupportsFindMode="true" SupportsRangesize="true" SupportsResetState="true"
                     SupportsSortCollection="true" Configuration="HadfFrameworkAMLocal" syncMode="Immediate"
                     xmlns="http://xmlns.oracle.com/adfm/datacontrol"/>
  </dataControlUsages>
在通過BindingContext{
function onclick()
{
tagshow(event)
}
}">查詢DataControl從而擷取其DataProvider的時候,需要使用如下方法擷取AM的執行個體BindingContext.getDataSource("").getDataProvider();
需要特別注意的是,如果在同一個{
function onclick()
{
tagshow(event)
}
}">應用中包含多個DataBinding,在使用該方法尋找DataControl的時候如果直接按id進行尋找可能會報錯,原因是在同一個應用中,如果包含多個DataBinding,那麼在應用啟動部署時會將這些DataBinding的全部put到當前應用的相關配置中
<BindingContext><put>[39] BindingContext.put(JmxDataControl@adfmeta_oracle_sysman_emai_adf_DataBindings_cpx,oracle.adf.model.binding.DCDataControlReference )
<BindingContext><put>[40] BindingContext.put( ADFConnectionsPageDef,oracle.adf.model.binding.DCBindingContainerReference )
<BindingContext><put>[41] BindingContext.put( BC4JConfigPageDef,oracle.adf.model.binding.DCBindingContainerReference )
<BindingContext><put>[45] BindingContext.put(HadfFrameworkAMDataControl@hand_hadf_common_view_DataBindings_cpx,oracle.adf.model.binding.DCDataControlReference )
<BindingContext><put>[46] BindingContext.put( hand_hadf_common_view_indexPageDef,oracle.adf.model.binding.DCBindingContainerReference )
然而在尋找該id對應的DataControl時就無法知曉是從哪個DataBinding中擷取,在擷取時就會報錯,{
function onclick()
{
tagshow(event)
}
}">解決該問題的方法就是在尋找DataControl時,在調用findDataSource("")方法時,將對應的DataBinding的Key傳進去。

範例程式碼:
……<br /> HadfFrameworkAM hadfFrameworkAM = (HadfFrameworkAM)BindingContext.getDataSource("HadfFrameworkAMDataControl@hand_hadf_common_view_DataBindings_cpx").getDataProvider()<br /> …… 

 

3)通過DCBindingContainer擷取
通過{
tagshow(event)
}">頁面定義{
tagshow(event)
}">檔案(PageDef)在DataBinding.cpx中定義的對應id,尋找該PageDef的DCBindingContainder,再從該Container中調用getDataControl().getDataProvider()方法擷取對應的AM執行個體。由於該方法是從DCBindingContainer中擷取,因此不會出現2)中提到的問題。

範例程式碼:
……<br /> private static synchronized HadfFrameworkAM getHadfAMInstance() {<br /> BindingContext bindingContext =<br /> (BindingContext)JSFUtils.getExpressionValue("#{data}");<br /> DCBindingContainer container =<br /> bindingContext.findBindingContainer(bindingContainerName);<br /> Object dataProvider = container.getDataControl().getDataProvider();<br /> if (dataProvider == null) {<br /> container.refresh(DCBindingContainer.PREPARE_MODEL);<br /> dataProvider = container.getDataControl().getDataProvider();<br /> }<br /> HadfFrameworkAM hadfFrameworkAM = (HadfFrameworkAM)dataProvider;<br /> return hadfFrameworkAM;<br /> }<br /> ……

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

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.