天天看點

AG9 Service order建立好之後,要自動通過middleware傳其他系統去 disable

AG9 Service order建立好之後,要自動通過middleware傳其他系統去 disable

Transaction的status profile上可以配這麼一個東西:

AG9 Service order建立好之後,要自動通過middleware傳其他系統去 disable

但是我們現在的ZSRV上沒有配任何status profile… 這個to be distributed即使設成Forbidden一樣會發, 下圖是我測試的status profile

AG9 Service order建立好之後,要自動通過middleware傳其他系統去 disable

代碼裡寫的是如果status是for postprocessing I1143就不發,我沒有在代碼裡看到檢測 to be distributed 的地方。

如果你們可以成功重制不讓One order通過middleware 往outbound queue發資料,麻煩告訴我詳細操作步驟。

iv_no_bdoc_send

lv_send_bdoc

AG9 Service order建立好之後,要自動通過middleware傳其他系統去 disable

現在差異就是:

配了status profile,訂單能編輯

Status profile為空,則不能編輯

Status profile為空,點Edit後Error message 是在這個IF裡抛得。隻要order的狀态帶有transferring,則報error message

AG9 Service order建立好之後,要自動通過middleware傳其他系統去 disable

配了status profile時,order save後狀态是I 1002, E 0001, 不含transferring狀态,是以不報錯。

AG9 Service order建立好之後,要自動通過middleware傳其他系統去 disable

沒配PROFILE, 則save後狀态如下,包含I1054 transferring,是以報錯。

是以問題根源就是搞清楚報錯order時,這個status遷移是怎麼實作的。

AG9 Service order建立好之後,要自動通過middleware傳其他系統去 disable

Service order transaction type若不維護任何status profile,則save之後無法編輯,點edit 時報error message

如果維護了status profile,能夠編輯

One order在edit button點選時會check order是否含有transferring狀态,如果有,報error message

n 兩種情況下,save order時系統都會試圖去給order設定transferring狀态,但是隻有第一種情況會設定成功。

第二種情況,因為status profile裡forbidden flag(背景value:3)的存在,

AG9 Service order建立好之後,要自動通過middleware傳其他系統去 disable
AG9 Service order建立好之後,要自動通過middleware傳其他系統去 disable

檢測程式裡檢測到這個3,就會拒絕修改,是以order狀态不會變成transferring,是以UI能edit

AG9 Service order建立好之後,要自動通過middleware傳其他系統去 disable

有兩種solution disable這個行為:

(1) CRM_ORDER_SAVE call line 56行的CRM_ORDER_SAVE_OW時,IV_NO_BDOC_SEND沒有指定value,是以傳進來的是預設值ABAP_FALSE,

這裡我們強制改成TRUE, 就會破壞要上傳的那三個條件的第一個,導緻不會進入上傳的分支。

AG9 Service order建立好之後,要自動通過middleware傳其他系統去 disable

(2) 如果隻是想disable 某種特定transaction type的document,call這個function module:

CRM_ORDER_SET_NO_BDOC_SEND_OW, 輸入order的guid,會添加一行entry到GT_NO_BDOC_SEND裡,

這樣會破壞IF判斷裡中間那個條件,也能實作不上傳的目的。

AG9 Service order建立好之後,要自動通過middleware傳其他系統去 disable

條件2少截一張圖:

條件2: LV_SEND_BDOC = TRUE

讀這個global的internal table,如果讀不到,置為TRUE,AG9上讀不到,是以為true,這個條件也滿足了。

AG9 Service order建立好之後,要自動通過middleware傳其他系統去 disable

line 325的function module會負責通過outbound queue往外發,

隻有當line 321的IF裡的三個條件同時滿足才會進入:

AG9 Service order建立好之後,要自動通過middleware傳其他系統去 disable
AG9 Service order建立好之後,要自動通過middleware傳其他系統去 disable

條件1: IV_NO_BDOC_SEND = FALSE, AG9上這個參數用的預設參數false,滿足

條件3: LV_SKIP_ASYNCRONOUS_FUNCTION = INITIAL

如果該order的狀态置為POST PROCESSING, 則該變量值為true,但是AG9上我們的status是open,是以這個條件也滿足

三個條件同時滿足,是以通過middleware裡往outbound queue發資料。

AG9 Service order建立好之後,要自動通過middleware傳其他系統去 disable