AG9 Service order创建好之后,要自动通过middleware传其他系统去 disable
Sent: 2017年1月19日 13:28
Transaction的status profile上可以配這么一個(gè)東西: 但是我們現(xiàn)在的ZSRV上沒有配任何status profile… 這個(gè)to be distributed即使設(shè)成Forbidden一樣會(huì)發(fā), 下圖是我測試的status profile,配在AG9的ZSRV上。代碼里寫的是如果status是for postprocessing I1143就不發(fā),我沒有在代碼里看到檢測 to be distributed 的地方。
如果你們可以成功重現(xiàn)不讓One order通過middleware 往outbound queue發(fā)數(shù)據(jù),麻煩告訴我詳細(xì)操作步驟。
iv_no_bdoc_send
lv_send_bdoc
現(xiàn)在差異就是:
- 配了status profile,訂單能編輯
- Status profile為空,則不能編輯
Status profile為空,點(diǎn)Edit后Error message 是在這個(gè)IF里拋得。只要order的狀態(tài)帶有transferring,則報(bào)error message
配了status profile時(shí),order save后狀態(tài)是I 1002, E 0001, 不含transferring狀態(tài),所以不報(bào)錯(cuò)。
沒配PROFILE, 則save后狀態(tài)如下,包含I1054 transferring,所以報(bào)錯(cuò)。
所以問題根源就是搞清楚報(bào)錯(cuò)order時(shí),這個(gè)status遷移是怎么實(shí)現(xiàn)的。
Service order transaction type若不維護(hù)任何status profile,則save之后無法編輯,點(diǎn)edit 時(shí)報(bào)error message
One order在edit button點(diǎn)擊時(shí)會(huì)check order是否含有transferring狀態(tài),如果有,報(bào)error message
n 兩種情況下,save order時(shí)系統(tǒng)都會(huì)試圖去給order設(shè)置transferring狀態(tài),但是只有第一種情況會(huì)設(shè)置成功。
第二種情況,因?yàn)閟tatus profile里forbidden flag(后臺(tái)value:3)的存在,
檢測程序里檢測到這個(gè)3,就會(huì)拒絕修改,所以order狀態(tài)不會(huì)變成transferring,所以UI能edit
有兩種solution disable這個(gè)行為:(1) CRM_ORDER_SAVE call line 56行的CRM_ORDER_SAVE_OW時(shí),IV_NO_BDOC_SEND沒有指定value,所以傳進(jìn)來的是默認(rèn)值A(chǔ)BAP_FALSE,
這里我們強(qiáng)制改成TRUE, 就會(huì)破壞要上傳的那三個(gè)條件的第一個(gè),導(dǎo)致不會(huì)進(jìn)入上傳的分支。
(2) 如果只是想disable 某種特定transaction type的document,call這個(gè)function module:
CRM_ORDER_SET_NO_BDOC_SEND_OW, 輸入order的guid,會(huì)添加一行entry到GT_NO_BDOC_SEND里,
這樣會(huì)破壞IF判斷里中間那個(gè)條件,也能實(shí)現(xiàn)不上傳的目的。
條件2少截一張圖:
條件2: LV_SEND_BDOC = TRUE
讀這個(gè)global的internal table,如果讀不到,置為TRUE,AG9上讀不到,所以為true,這個(gè)條件也滿足了。
line 325的function module會(huì)負(fù)責(zé)通過outbound queue往外發(fā),
只有當(dāng)line 321的IF里的三個(gè)條件同時(shí)滿足才會(huì)進(jìn)入:
條件1: IV_NO_BDOC_SEND = FALSE, AG9上這個(gè)參數(shù)用的默認(rèn)參數(shù)false,滿足
條件2: LV_SEND_BDOC = TRUE
讀這個(gè)global的internal table,如果讀不到,置為TRUE,AG9上讀不到,所以為true,這個(gè)條件也滿足了。
條件3: LV_SKIP_ASYNCRONOUS_FUNCTION = INITIAL
如果該order的狀態(tài)置為POST PROCESSING, 則該變量值為true,但是AG9上我們的status是open,所以這個(gè)條件也滿足
三個(gè)條件同時(shí)滿足,所以通過middleware里往outbound queue發(fā)數(shù)據(jù)。
如何避免這個(gè)行為?根據(jù)代碼分析,破壞IF里三個(gè)條件任意一個(gè)即可。通過debug可知破壞第二個(gè)條件最容易。
要獲取更多Jerry的原創(chuàng)文章,請(qǐng)關(guān)注公眾號(hào)"汪子熙":
總結(jié)
以上是生活随笔為你收集整理的AG9 Service order创建好之后,要自动通过middleware传其他系统去 disable的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 腾讯 QQ Windows 全新架构版
- 下一篇: different behavior i