
Transaction的status profile上可以配這麼一個東西:
但是我們現在的ZSRV上沒有配任何status profile… 這個to be distributed即使設成Forbidden一樣會發, 下圖是我測試的status profile
代碼裡寫的是如果status是for postprocessing I1143就不發,我沒有在代碼裡看到檢測 to be distributed 的地方。
如果你們可以成功重制不讓One order通過middleware 往outbound queue發資料,麻煩告訴我詳細操作步驟。
iv_no_bdoc_send
lv_send_bdoc
現在差異就是:
配了status profile,訂單能編輯
Status profile為空,則不能編輯
Status profile為空,點Edit後Error message 是在這個IF裡抛得。隻要order的狀态帶有transferring,則報error message
配了status profile時,order save後狀态是I 1002, E 0001, 不含transferring狀态,是以不報錯。
沒配PROFILE, 則save後狀态如下,包含I1054 transferring,是以報錯。
是以問題根源就是搞清楚報錯order時,這個status遷移是怎麼實作的。
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)的存在,
檢測程式裡檢測到這個3,就會拒絕修改,是以order狀态不會變成transferring,是以UI能edit
有兩種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判斷裡中間那個條件,也能實作不上傳的目的。
條件2少截一張圖:
條件2: LV_SEND_BDOC = TRUE
讀這個global的internal table,如果讀不到,置為TRUE,AG9上讀不到,是以為true,這個條件也滿足了。
line 325的function module會負責通過outbound queue往外發,
隻有當line 321的IF裡的三個條件同時滿足才會進入:
條件1: IV_NO_BDOC_SEND = FALSE, AG9上這個參數用的預設參數false,滿足
條件3: LV_SKIP_ASYNCRONOUS_FUNCTION = INITIAL
如果該order的狀态置為POST PROCESSING, 則該變量值為true,但是AG9上我們的status是open,是以這個條件也滿足
三個條件同時滿足,是以通過middleware裡往outbound queue發資料。