SAP CRM WebClient UI的on_new_focus應該怎麼理解

i042416發表於2020-02-15

# 問題

我在做練習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.

這是一個比較典型的例子:

SAP CRM WebClient UI的on_new_focus應該怎麼理解

你的疑問,我猜你是對這個例子裡面直接call event handler,而不是在程式碼裡面用raise event觸發它,對吧?


你可以在connect_nodes和create_produom兩個方法裡面設定一個斷點,當你在ui上建立一個新的product時候,後者會先觸發,此時前者還未執行,因此new focus的event還未register。

而後者觸發的原因正是這個程式碼裡面manual call event handler的地方:

SAP CRM WebClient UI的on_new_focus應該怎麼理解

為什麼要加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。

SAP CRM WebClient UI的on_new_focus應該怎麼理解

2743 register了2818的new focus事件

SAP CRM WebClient UI的on_new_focus應該怎麼理解

這裡2818 拋了new focus的事件,

SAP CRM WebClient UI的on_new_focus應該怎麼理解

2743 收到事件,處理:

SAP CRM WebClient UI的on_new_focus應該怎麼理解

你把你highlight的22~25註釋掉會有什麼問題?我在product的例子裡在debugger裡面跳過這行,然後再執行下去,似乎沒問題。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/24475491/viewspace-2675663/,如需轉載,請註明出處,否則將追究法律責任。

相關文章