SAP CRM WebClient UI的on_new_focus应该怎么理解
問題
我在做練習(xí)16時(第3步的e,f),發(fā)現(xiàn)有一句這樣的描述:
Double click on method CONNECT_NODES.Make Value node ‘Competitors’
dependent from BTAdminH.
METHOD connect_nodes.
DATA: coll_wrapper TYPE REF TO cl_bsp_wd_collection_wrapper.
coll_wrapper = btadminh->get_collection_wrapper( ).
SET HANDLER me->competitors->on_new_focus FOR coll_wrapper ACTIVATION
iv_activate.
ENDMETHOD.
這種所謂的dependent關(guān)系我在debug時發(fā)現(xiàn)沒發(fā)生任何的實(shí)際效果,按理說這里設(shè)置了handler為on_new_focus應(yīng)該通過raise event來調(diào)用,但是其最后是通過直接調(diào)用方法名來調(diào)用的。你是怎么理解的?以及這里的所謂dependent有什么特別的應(yīng)用場景么?
回答
UI上兩個field放到同一個header view,比如product ID和product description( 相同level),但是他們綁的Genil mode里面的field卻不是相同level,而是存在父子關(guān)系。
這種情況下需要用到connect_nodes. 目的是parent node發(fā)生變化時,自動刷新child node,確保ui上顯示的兩個field的value是正確的。
總之,如果UI上同一level的field來自不同的UI component context node,這些context node對應(yīng)綁定到的Genil mode里面的node之間存在父子關(guān)系,則UI component context node里面所有的child context node都應(yīng)該實(shí)現(xiàn)on_new_focus.
這是一個比較典型的例子:
你的疑問,我猜你是對這個例子里面直接call event handler,而不是在代碼里面用raise event觸發(fā)它,對吧?
你可以在connect_nodes和create_produom兩個方法里面設(shè)置一個斷點(diǎn),當(dāng)你在ui上創(chuàng)建一個新的product時候,后者會先觸發(fā),此時前者還未執(zhí)行,因此new focus的event還未register。
而后者觸發(fā)的原因正是這個代碼里面manual call event handler的地方:
為什么要加21行呢?其實(shí)這就牽涉到model node和value node的區(qū)別。在product creation scenario里面,我們期望user在ui上的輸入沒有任何錯誤之后,才會真正走完4個level,最后在DB創(chuàng)建product。那么在ui 輸入通過validation之前,所有ui輸入都是存在value node里,然后當(dāng)ui的輸入通過validation 這一時間點(diǎn)之后,由value node轉(zhuǎn)成model node。
2743 register了2818的new focus事件
這里2818 拋了new focus的事件,
2743 收到事件,處理:
你把你highlight的22~25注釋掉會有什么問題?我在product的例子里在debugger里面跳過這行,然后再執(zhí)行下去,似乎沒問題。
要獲取更多Jerry的原創(chuàng)文章,請關(guān)注公眾號"汪子熙":
總結(jié)
以上是生活随笔為你收集整理的SAP CRM WebClient UI的on_new_focus应该怎么理解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 人猿相揖别 (生物学术语)
- 下一篇: SAP CRM WebClient UI