AG9 Service order创建好之后,要自动通过middleware传其他系统去 disable
Sent: 2017年1月19日 13:28
![](https://user-images.githubusercontent.com/5669954/33001794-1c2ff94a-cdeb-11e7-9914-0043997e1748.png)
![](https://user-images.githubusercontent.com/5669954/33001795-1c60bb98-cdeb-11e7-8e82-6cf27946a6d2.png)
![](https://user-images.githubusercontent.com/5669954/33001796-1c92446a-cdeb-11e7-8413-01ff14711664.png)
代码里写的是如果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)的存在,
![](https://user-images.githubusercontent.com/5669954/33001805-1dbba70a-cdeb-11e7-9d89-9b42784a6dbf.png)
检测程序里检测到这个3,就会拒绝修改,所以order状态不会变成transferring,所以UI能edit
![](https://user-images.githubusercontent.com/5669954/33001806-1ded3c66-cdeb-11e7-8b5d-bca03fedee85.png)
(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里的三个条件同时满足才会进入:
![](https://user-images.githubusercontent.com/5669954/33001790-1bcbb0fc-cdeb-11e7-95dd-1b4db193272b.png)
条件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的原创文章,请关注公众号"汪子熙":
相关文章
- 解决群晖重启后默认证书自动改变的问题
- 7 Papers & Radios | 首个用于工业开发的自动代码生成系统;多模态图像合成与编辑综述
- 银河麒麟服务器系统V10开启root用户自动登录的图文教程
- AI 生成模型五花八门,谁好谁坏?CMU 朱俊彦团队推出首个自动匹配排名系统
- 错误案例分析:自动日期表到底是怎么工作的? | DAX原理
- 不出所料,自动驾驶向ChatGPT下手了!
- 系统重启 后 Docker服务及容器自动启动设置详解程序员
- Linux实现自动登录的实例讲解
- 开启Linux系统自动化:设置开机自动运行脚本(linux开机自动运行脚本)
- Linux系统定时自动重启技巧(linux系统定时重启)
- Linux系统空间自动释放的技巧(linux空间没有释放)
- 如何检测自动生成的电子邮件
- 应对CC攻击的自动防御系统——原理与实现
- 设置VMware随系统开机自动启动并引导虚拟机操作系统(测试成功!So Easy~~~~)
- Linux 系统采用自动校时功能(linux 校时)
- 开启Redis自动上电启动若何达成(如何redis开机自启动)
- 使用Redis提高系统负载自动释放连接数(redis自动释放连接数)
- Redis服务让系统开机自动陪伴(redis服务开机自启)
- autocomplete禁止自动完成功能
- 处理php自动反斜杠的函数代码
- php+ajax做仿百度搜索下拉自动提示框(有实例)
- Window系统下自动备份MySql数据库方法
- JS取request值以及自动执行使用示例