日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

AG9 Service order创建好之后,要自动通过middleware传其他系统去 disable

發布時間:2023/12/19 windows 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 AG9 Service order创建好之后,要自动通过middleware传其他系统去 disable 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Sent: 2017年1月19日 13:28

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

代碼里寫的是如果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,滿足

    條件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可知破壞第二個條件最容易。
    要獲取更多Jerry的原創文章,請關注公眾號"汪子熙":

    總結

    以上是生活随笔為你收集整理的AG9 Service order创建好之后,要自动通过middleware传其他系统去 disable的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。