Web Dynpro for ABAP 之 Web Dynpro Window Web Dynpro Application
Web Dynpro Window
?? 上兩節(jié)的簡(jiǎn)單的應(yīng)用程序例子只包含了一個(gè)view在一個(gè)web dynpro 部件(component)中。本文中開始將介紹一個(gè)包含通過導(dǎo)航鏈接的2個(gè)view的程序。本節(jié)和下節(jié)將介紹一個(gè)部件里面的兩個(gè)views之間的通訊。
????? ??每個(gè)Web dynpro部件包含至少一個(gè)web dynpro 窗體(web dynpro window)。當(dāng)web 程序嵌入到了窗體中,所有的views將被顯示出來。窗體通過abap工作臺(tái)的窗體編輯器(window editor)編輯。所需要的導(dǎo)航在窗體里面單獨(dú)的views能夠被創(chuàng)建起來。
???????? ??
??? Web Dynpro窗體包括了所有被顯示的窗體的結(jié)構(gòu),也是通過接口view連接到Web Dynpro程序的。
????????
???????? Web Dynpro窗體的高級(jí)功能(Advanced Functions of Web Dynpro Windows)
??? Window Controller and Window Plugs
每個(gè)Web Dynpro窗體包含一個(gè)控制器,這個(gè)控制器包含context, methods,outbound plugs,inbound plugs。我們可以用插件建立交叉部件(cross-component)的導(dǎo)航。
在一個(gè)簡(jiǎn)單的程序中,導(dǎo)航的起始點(diǎn)是從啟動(dòng)一個(gè)View開始的。它是在設(shè)計(jì)的時(shí)候創(chuàng)建的。通過窗體樹的context菜單已經(jīng)在窗體編輯器創(chuàng)建。在一個(gè)比較復(fù)雜的程序中,用到的inbound plug的事件處理器方法能夠動(dòng)態(tài)的判斷哪個(gè)view首先被顯示出來。
?
?
?? Interface View
???????? 每個(gè)window會(huì)自動(dòng)創(chuàng)建出一個(gè)帶有獨(dú)自名字的接口名字。它定義了windows的交叉部件接口。當(dāng)接口標(biāo)識(shí)設(shè)置后,Window的Inbound plugs和outbound plugs會(huì)被拷貝到對(duì)應(yīng)的接口view.在window中,事件處理都自動(dòng)實(shí)現(xiàn)了。接口view的插件(plugs)能夠用來做交叉部件導(dǎo)航。Inbound plugs用來連接到Web Dynpro應(yīng)用。
?
?
?
?
兩個(gè)Views之間的交互(Navigation Between Two Views)
???????? 在一個(gè)window里面的views通過導(dǎo)航(navigation links)能夠被互相連接。當(dāng)用戶調(diào)用了個(gè)Web Dynpro程序,在屏幕上首先出來的是起始view. 我們可以觸發(fā)一個(gè)特殊的動(dòng)作,例如點(diǎn)擊按鈕從而觸發(fā)導(dǎo)航(navigation). 按順序,現(xiàn)在在屏幕上出現(xiàn)的vIew消失,第二個(gè)view在屏幕上顯示出來。
??? 為了在兩個(gè)views之間建立導(dǎo)航,必須為第一個(gè)view創(chuàng)建inbound plugs和另一個(gè)view創(chuàng)建outbound plug. Plug總是訪問一個(gè)view和從一個(gè)view退出的連接點(diǎn)。
????????
Outbound plugs和inbound plugs有不同的屬性。
?
Outbound Plugs
???????? Outbound plugs總是下一個(gè)導(dǎo)航的開始。他們可以在View controller的任何方法中被調(diào)用,如下:
??? WD_THIS->FIRE_MY_OUTBOUND_PLG().
WD_THIS屬性總是View controller的接口IF_<MY_VIEW>的自引用。每次我們?yōu)檫@個(gè)view創(chuàng)建一個(gè)outbound plug. 方法FIRE_<MY_OUTBOUND_PLUG>_PLG將被加到這個(gè)接口。
提示:如果我們?yōu)?/span>View_1創(chuàng)建了out1,out2,out3三個(gè)outbound plugs,在接口IF_VIEW_1里面就會(huì)相應(yīng)的創(chuàng)建出FIRE_OUT1_PLG, FIRE_OUT2_PLG,FIRE_OUT3_PLG三個(gè)方法對(duì)應(yīng)創(chuàng)建。
??? 注意:outbound plug屬于view的controller,不會(huì)包含引起導(dǎo)向目標(biāo)的信息。他要連接到的下一個(gè)view的inbound plug是通過在窗體布局中創(chuàng)建導(dǎo)航鏈接實(shí)現(xiàn)的。
???
?
傳輸參數(shù)(Passing Parameters)
???????? 通過調(diào)用方法FIRE_<MY_OUTBOUND>傳輸參數(shù)。通過在參數(shù)表的‘Outbound Plugs’頁簽輸入。
?
???????? 下面的例子,參數(shù)Editable被添加到了方法體FIRE_<MY_OUTBOUND>_PLG中。參數(shù)類型WDY_BOOLEAN的取值為X(true)或者space(false),所以方法調(diào)用可以寫成:
?WD_THIS->FIRE_MY_OUTBOUND_PLG(EDITABLE = ‘X’ ).
?或者
WD_THIS->FIRE_MY_OUTBOUND_PLG(EDITABLE = ‘X’ ).
?
?Inbound Plugs
Web Dynpro window的inbound plugs總是被先前創(chuàng)建的連接直接調(diào)用。這個(gè)先前創(chuàng)建的連接起源于outbound plug. 當(dāng)一個(gè)inbound plug被調(diào)用時(shí),和這個(gè)inbound plug唯一相關(guān)聯(lián)的事件處理方法被調(diào)用,這個(gè)方法是在inbound plug創(chuàng)建起來的時(shí)候被view controller自動(dòng)創(chuàng)建起來的。此方法在‘Methods’頁簽中。通常命名規(guī)則為HANDLEMY_INBOUND_PLUG:
幫助:當(dāng)有一個(gè)inbound plug IN1,則有一個(gè)對(duì)應(yīng)的事件處理方法HANDLEIN1被創(chuàng)建。
?
事件處理方法剛開始是空的,可以通過讓程序員寫入代碼實(shí)現(xiàn)功能,從技術(shù)角度看,這個(gè)事件處理方法和其他的沒有什么不同之處。
?
Evaluating Parameters
?? Inbound plug的事件處理方法可以從outbound plug的事件處理方法FIRE_<MY_OUTBOUND>_PLG中接受參數(shù)。同樣名字的參數(shù)需要添加到inbound plug的事件處理方法上。
提示:如果參數(shù)EDITABLE通過outbound plug傳輸過來,參數(shù)editable必須添加到事件方法簽名,分配給inbound plug讀取。
這個(gè)參數(shù)就會(huì)被事件處理方法知曉,并且能夠讀取。
????? 注意:inbound plug的事件處理器用來處理新的view的新增的信息。不是用來傳輸應(yīng)用數(shù)據(jù)和調(diào)用應(yīng)用邏輯。
?
Example for Navigation with Parameter Transfer
???????? 第一個(gè)view中, outbound plug在action的事件處理器中被調(diào)用,并且傳輸參數(shù)Editable = ‘X’. 則下一個(gè)通過navigation link被連接的view包含一個(gè)能夠被編輯的元素,因?yàn)閭鬏斶^來的Editable的值為’X’.
?
在第一個(gè)view的事件處理器中調(diào)用outbound plug OUT
???????? 在view的outbound plug ‘ out’被創(chuàng)建的同時(shí), 類型為WDY_BOOLEAN的參數(shù)EDITABLE同時(shí)被創(chuàng)建。在運(yùn)行時(shí)通過下面的方法傳輸參數(shù)EDITABLE的值。
???????? WD_THIS->FIRE_OUT_PLG( EDITABLE = ‘X’ ).
?
在第二個(gè)view的Inbound ?Plug ?IN 的事件處理HANDLEIN 中使用參數(shù)
???????? 每個(gè)UI元素包含’enable’ 屬性,這個(gè)參數(shù)能夠把這個(gè)元素的功能設(shè)置為可用和關(guān)閉狀態(tài)。在view設(shè)計(jì)的屬性表中,這個(gè)元素的這個(gè)屬性沒有被選中,這個(gè)元素雖然仍會(huì)顯示在屏幕中,但是輸入,選擇,做其他任何的用戶交互是不可用的。因?yàn)檫@個(gè)元素的屬性是不可用狀態(tài)(新加的UI元素的這個(gè)屬性默認(rèn)設(shè)置是可用的)。程序員可以在運(yùn)行時(shí)有兩種選擇去指定UI元素的這個(gè)行為:
?
?
l?在view設(shè)計(jì)器中,enabled 屬性能夠在設(shè)計(jì)的時(shí)候通過屬性表設(shè)置中點(diǎn)擊復(fù)選框靜態(tài)的指定。當(dāng)相應(yīng)的view被調(diào)用時(shí),UI 元素總是保持設(shè)計(jì)時(shí)的屬性不變。
l?Enbaled屬性也可以通過綁定到context節(jié)點(diǎn)上的包含的類型WDY_BOOLEAN的值上。這個(gè)值在運(yùn)行時(shí)傳輸。所以這個(gè)UI元素對(duì)于所有的函數(shù)可用,或者只可以顯示,取決于在程序中的指定。
?
下面的例子中,將演示第二種情況:
第二個(gè)view的context包含的節(jié)點(diǎn)除了應(yīng)用數(shù)據(jù)外,還有一個(gè)節(jié)點(diǎn)用來為這個(gè)view的一個(gè)或者多個(gè)UI元素指定’enabled’屬性值。此例中,節(jié)點(diǎn)名字叫做’STATUS’, 并且包含了一個(gè)類型為WDY_BOOLEAN的屬性ENABLED.這個(gè)值的設(shè)置是通過第二個(gè)view事件處理方法 HANDLEIN來實(shí)現(xiàn)的。
???????? Method HANDEIN.
?????????????????? Data: l_context_node type ref to if_wd_context_node.
??????? L_context_noe = wd_context->get_child_node(‘STATUS’).
??????? L_context_node->set_attribute( name = ‘ENABLE’ value = EDITABLE ).
??? Endmethod.
?? ?傳過來的參數(shù)變量值用來指定context節(jié)點(diǎn)的屬性, 接口的方法IF_WD_CONTEXT_NODE用在了事件處理方法中。這種情況下,SET_ATTRIBUTE方法被調(diào)用,屬性’ENABLED’設(shè)置成值EDITABLE.
?現(xiàn)在context節(jié)點(diǎn)的ENABLED屬性被設(shè)置成’X’,這個(gè)值是通過先前的view的方法WD_THIS->FIRE_OUT_PLG(EDITABLE = ‘X’)傳輸過來的。
?
結(jié)果(Result)
???????? 如果屬性’ENABLED’的屬性值設(shè)置為’X’,含有enabled ?屬性并且綁定到了屬性EANBLED 的UI 元素的所有功能都可以使用。當(dāng)FIRE_OUT_PLG傳輸了參數(shù) ’ ’,接下來的view的inbound plug的事件處理的屬性ENABLED同樣設(shè)置為值’ ’, UI元素的只是顯示在屏幕上,他們的功能均不能夠使用。
?
?
?
?
?
?
?
?
?
?
Web Dynpro Application
Window的另一個(gè)非常重要的工作就是建立view組結(jié)構(gòu)和URL之間的關(guān)聯(lián),其中這個(gè)URL可以被用戶調(diào)用。Window同時(shí)也是通過Web dynpro應(yīng)用程序被用戶調(diào)用的單位。通常,同一時(shí)間只有一個(gè)view顯示在屏幕上。最簡(jiǎn)單的例子,Web Dynpro應(yīng)用程序調(diào)用指定的view作為window里面起始的默認(rèn)view。用戶可以從第一個(gè)view導(dǎo)航進(jìn)去下一個(gè)view。
Web Dynpro應(yīng)用程序在ABAP工作臺(tái)的對(duì)象列表中是個(gè)獨(dú)立的對(duì)象。
Web Dynpro窗體和Web Dynpro應(yīng)用程序之間的連接是建立在window的接口view上的.準(zhǔn)確的說,一個(gè)interface view是自動(dòng)分配給一個(gè)部件的每個(gè)window,默認(rèn)的,這個(gè)接口view包含了個(gè)默認(rèn)的plug.
?? 我們可以通過abap工作臺(tái)顯示每個(gè)接口view.
?? 接口view不僅僅連接應(yīng)用程序和window,他們的plugs還有許多功能。作為component接口的一部分,他們同樣也用來進(jìn)行多個(gè)components之間的交流。
?? 接口view?(interface view)
總結(jié)
以上是生活随笔為你收集整理的Web Dynpro for ABAP 之 Web Dynpro Window Web Dynpro Application的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ABAP程序中的七大危险漏洞
- 下一篇: Abap DELETE - duplic