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

  1. 如果维护了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的原创文章,请关注公众号"汪子熙":

展开阅读全文

Python数据分析与挖掘

01-08
92讲视频课+16大项目实战+源码+¥800元课程礼包+讲师社群1V1答疑+社群闭门分享会=99元   为什么学习数据分析?       人工智能、大数据时代有什么技能是可以运用在各种行业的?数据分析就是。       从海量数据中获得别人看不见的信息,创业者可以通过数据分析来优化产品,营销人员可以通过数据分析改进营销策略,产品经理可以通过数据分析洞察用户习惯,金融从业者可以通过数据分析规避投资风险,程序员可以通过数据分析进一步挖掘出数据价值,它和编程一样,本质上也是一个工具,通过数据来对现实事物进行分析和识别的能力。不管你从事什么行业,掌握了数据分析能力,往往在其岗位上更有竞争力。    本课程共包含五大模块: 一、先导篇: 通过分析数据分析师的一天,让学员了解全面了解成为一个数据分析师的所有必修功法,对数据分析师不在迷惑。   二、基础篇: 围绕Python基础语法介绍、数据预处理、数据可视化以及数据分析与挖掘......这些核心技能模块展开,帮助你快速而全面的掌握和了解成为一个数据分析师的所有必修功法。   三、数据采集篇: 通过网络爬虫实战解决数据分析的必经之路:数据从何来的问题,讲解常见的爬虫套路并利用三大实战帮助学员扎实数据采集能力,避免没有数据可分析的尴尬。   四、分析工具篇: 讲解数据分析避不开的科学计算库Numpy、数据分析工具Pandas及常见可视化工具Matplotlib。   五、算法篇: 算法是数据分析的精华,课程精选10大算法,包括分类、聚类、预测3大类型,每个算法都从原理和案例两个角度学习,让你不仅能用起来,了解原理,还能知道为什么这么做。
©️2020 CSDN 皮肤主题: 深蓝海洋 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值