天天看點

SAP CRM get_children 方法裡面參數 iv_as_copy 有什麼用?Rule of thumb:

lv_children = iv_account->get_children( iv_as_copy = abap_true ). 的參數啥意思

lo_children = iv_account->get_relation( iv_relation_name =

iv_as_copy = abap_false ).
           

解釋沒太看懂

There is one special thing you need to know on the parameter IV_AS_COPY of GET_CHILDREN. It has

only effect on the iterator GET_FIRST etc. of the container list you will receive back. If set to true the

iterator will iterate only on the children inside the container list when it was created. If the parameter is

set to false the iterator will take into account children that are added to the container (or which are deleted

from it) after the container list was get. It is a misunderstanding that you get a copy of the content of the

container if you use this parameter. Knowing this you now have the knowledge going through the

relations of your model getting a separate nested container for every 1:n relation.

Rule of thumb:

(1) iv_as_copy = true => you get a snapshot (preffered)

(2) iv_as_copy = false => list gets updated; use only if you want to keep the list; has negative impact on

performance/memory consumption

其實對于做過debug的developer,看了文檔裡對這個參數的解釋後了解就會更加深刻。但是的确剛剛接觸的developer看了解釋可能仍然似懂非懂。

這個參數關鍵起作用的地方就在container object list的構造函數裡:

如果你使用iv_as_copy = true得到一個container object list,那麼這個container object list A 隻是目前parent container object的children的一個snapshot,今後parent container object 如果有新的children加進來之後,新的child不會反映到你得到的snapshot A去,因為technical上講,你的snapshot并沒有注冊 parent container object的CHILD_ADDED event,因為不會被通知到。

舉一個例子:

我在從Account navigate 到AccountAddress的地方加一段代碼,分别存儲兩種方式得到的account address container object list,這個時候還沒有真正取Account address,是以兩個container object list裡面都隻有一個dummy的entry,is_handle = X

我建立一個Address,然後save

因為目前的Account DB裡面有50個address,我又在目前session裡面添加了1個,是以iv_as_copy = false的有51個item,而snapshot仍然隻有1個dummy的。

本文來自雲栖社群合作夥伴“汪子熙”,了解相關資訊可以關注微信公衆号"汪子熙"。