BDC和SET PARAMETER和用户参数

今天遇到一个问题,说是一个RFC接口,在DEV和QAS怎么测试都是好用的,在PRD通过SE37测试好用,但是通过外部系统调用就报错。

看了一下程序,接口功能很简单,寥寥几行代码,通过BDC的方式,调用KO01创建内部订单。

26ac6f256aa589e1af3e7cbe04acf918.jpeg

首先使用ZILOG看调用日志,看返回时候的参数,如下图:

31e204785675869b0849040c0951ec4a.jpeg

BDC返回的错误很常见:没有屏幕 XXXXXX NNNN 的批输入数据。就是说有屏幕在录屏的时候没有出现,但是在实际BDC执行中出现了,程序没有考虑到这个屏幕会出现,BDCDATA流程中没有这个SCREEN,所以报错了。

看样子是似乎是某个窗口没有录上。

我对KO01不熟悉,就手工做了一下,然后跟程序中的BDC流程对比,发现并没有未记录的SCREEN,而且DEV和QAS测试也都正常,看来事情没有那么简单。于是怀疑是不是接口用户权限不够,去看了下,用户类型为C,SAP_ALL权限,看来不是权限问题。

后来想到会不会是像MIRO那样,在第一次执行事务码的时候会弹出一个SCREEN让输入公司代码,这样:

a43484266d1e46067d3a3bf3b8ce753a.png

我对KO01不熟悉,旁边又没有模块顾问可以问,但是我在前台做KO01的时候是没有弹出任何窗口的,应该也不像是这个情况,为此我还是退出GUI重新登录了一下,也还是没有出现弹出的窗口。

这下子有点陷入僵局了a718950817a78120423e9e7cb76143c9.png

再捋一下:

一般这种弹出窗口的逻辑是首先GET PARAMETER ID 'XXX',如果获取不到数据,就弹出窗口,如果获取到了,就不再弹出了。

所以现在只有两个解释,一个是不需要弹出窗口,另一个就是在GET PARAMETER的获取到值了。

GET PARAMETER能获取到值一般有三个方法,一个是程序里面写SET PARAMETER,第二个是SCREEN的元素勾上了SET/GET而自动赋值,第三个就是在用户的主数据里面维护了这个PARAMETER ID。前两个明显不满足,所以去SU3看看有没有可能的参数。

53d062d1f4853ccf3f5f9c690ba5fe6c.jpeg

果然有一个可疑的,先拿掉再去做KO01试试。

果然,KO01弹出窗口要求输入控制范围了:

aa5b20d14bee7586f8503c2b082d2573.png

到这儿问题就水落石出了,原因就是所有用来做SE37测试的用户,以及DEV、QAS的接口用户都维护了CAC参数,KO01的时候不需要弹出窗口,而PRD的接口用户没有维护,BDC需要有针对弹出窗口的逻辑,但是程序中没有,所以就报错了。开发人员对KO01不熟悉,不知道会需要控制范围,就导致了这个错误非常的隐蔽。

知道了错误的原因解决起来就很好办了,要么给PRD接口用户维护上这个参数,要么改一下程序,在BDC的CALL TRANSACTION之前加上一句:

e82b0d08a36ecf92e805aa3ecd5ef044.png

欧了。

91b8f79df697f32696631ff5d799d627.jpeg

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值