BDC 和 SETPARAMETER 和用户参数

作者:ABAP老白 约 4 分钟阅读 更新日期:2025-03-02 1 年前更新 标签:ABAP, 开发
BDC 和 SETPARAMETER 和用户参数 - 封面图
BDC 和 SETPARAMETER 和用户参数 - 封面图

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

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

BDC 和 SETPARAMETER 和用户参数 - 封面图
BDC 和 SETPARAMETER 和用户参数 - 封面图

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

BDC 和 SETPARAMETER 和用户参数 - 封面图
BDC 和 SETPARAMETER 和用户参数 - 封面图

BDC返回的错误很常见:没有屏幕 XXXXXX NNNN

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

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

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

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

BDC 和 SETPARAMETER 和用户参数 - 封面图
BDC 和 SETPARAMETER 和用户参数 - 封面图

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

这下子有点陷入僵局了

BDC 和 SETPARAMETER 和用户参数 - 封面图
BDC 和 SETPARAMETER 和用户参数 - 封面图

再捋一下:

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

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

GET PARAMETER能获取到值一般有三个方法,一个是程序里面写SET

PARAMETER,第二个是SCREEN的元素勾上了SET/GET而自动赋值,第三个就是在用户的主数据里面维护了这个PARAMETER

ID。前两个明显不满足,所以去SU3看看有没有可能的参数。

BDC 和 SETPARAMETER 和用户参数 - 封面图
BDC 和 SETPARAMETER 和用户参数 - 封面图

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

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

BDC 和 SETPARAMETER 和用户参数 - 封面图
BDC 和 SETPARAMETER 和用户参数 - 封面图

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

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

BDC 和 SETPARAMETER 和用户参数 - 封面图
BDC 和 SETPARAMETER 和用户参数 - 封面图

欧了。

BDC 和 SETPARAMETER 和用户参数 - 封面图
BDC 和 SETPARAMETER 和用户参数 - 封面图
ABAP老白

关于作者:ABAP老白

企业信息化与 SAP 技术顾问,长期专注 SAP ABAP、FI/CO、MM、SD 等模块的技术分享与实战经验总结。查看更多介绍

来源说明:本文内容由「BDC和SETPARAMETER和用户参数.md」整理生成,仅用于内部技术分享与学习交流。