AG9 Service order建立好之後,要自動通過middleware傳其他系統去,這個behavior我們現在記錄下來了麼?知道怎麼disable不?
Transaction的status profile上可以配這麼一個東西:
但是我們現在的ZSRV上沒有配任何status profile…
line 325的function module會負責通過outbound queue往外發,
隻有當line 321的IF裡的三個條件同時滿足才會進入:
條件1: IV_NO_BDOC_SEND = FALSE, AG9上這個參數用的預設參數false,滿足
條件2: LV_SEND_BDOC = TRUE
讀這個global的internal table,如果讀不到,置為TRUE,AG9上讀不到,是以為true,這個條件也滿足了。
條件3: LV_SKIP_ASYNCRONOUS_FUNCTION = INITIAL
如果該order的狀态置為POST PROCESSING, 則該變量值為true,但是AG9上我們的status是open,是以這個條件也滿足
三個條件同時滿足,是以通過middleware裡往outbound queue發資料。
如何避免這個行為?根據代碼分析,破壞IF裡三個條件任意一個即可。通過debug可知破壞第二個條件最容易,我正在看相關的配置。
條件2少截一張圖:
有兩種solution disable這個行為:
(1) CRM_ORDER_SAVE call line 56行的CRM_ORDER_SAVE_OW時,IV_NO_BDOC_SEND沒有指定value,是以傳進來的是預設值ABAP_FALSE,
這裡我們強制改成TRUE, 就會破壞要上傳的那三個條件的第一個,導緻不會進入上傳的分支。
(2) 如果隻是想disable 某種特定transaction type的document,call 這個function module:
CRM_ORDER_SET_NO_BDOC_SEND_OW, 輸入order的guid,會添加一行entry到GT_NO_BDOC_SEND裡,
這樣會破壞IF判斷裡中間那個條件,也能實作不上傳的目的。
這兩種技術上都行。
本文來自雲栖社群合作夥伴“汪子熙”,了解相關資訊可以關注微信公衆号"汪子熙"。