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