BDC和SET PARAMETER和用户参数

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

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

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

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

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

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

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

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

这下子有点陷入僵局了。

再捋一下:

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

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

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

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

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

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


(职场责编:拓荒牛 )
2026年03月12日 04:11[查看原文]