原创 无峰 [ ABAP 技巧与实战 ](javascript:void\(0\);)
一
前言
BDC是SAP一种录屏并重复执行的方式,一般用于批量导入数据
基本情况可以参阅文章
> 详见链接 无峰,公众号:ABAP 技巧与实战 [ ABAP基础知识 BDC记录创建单据
> ](https://mp.weixin.qq.com/s?__biz=Mzg4MjA1MjE4NQ==&mid=2247488196&idx=1&sn=41499faec8a2f30a757bfea8d2890a2f&chksm=cf5dcff2f82a46e4d95217b2b369da20a19f1f1596034c2d4a6284cac0015339a91b74486bf5&token=1105767289&lang=zh_CN#rd)
**本文主要介绍BDC的一种特殊执行方式**
二
缘起
BDC虽然很简单,但是因为录制的屏幕严格依赖于环境,配置与主数据的差异都有可能影响BDC的执行过程,因此项目上应该尽量使用SAP提供的BAPI函数处理主数据和单据.
修改销售订单的BAPI函数
BAPI_SALESORDER_CHANGE
看似允许修改销售订单的售达方,但执行的时候总会报错 VPD 006
SAP的官方NOTES给出了说明: 从4.6B开始,售达方不允许通过BAPI修改. (原因没有说明)
VA02前台执行可以修改售达方, 因此BDC就成了修改销售订单售达方的唯一方式
三
问题
但是当使用BDC产生的函数修改销售订单时. 却总不成功, 处理方式改成前台执行时(DISMODE='A)发现,在销售订单修改售达方的过程中,
有个计划行确认的屏幕, 该屏幕在录制的时候并没有出现.
记录时系统提供了一个选项
模拟后台处理(不同于其它选项, 该选项字段没有F1帮助) (如图一)
屏幕中的每个选项都对应于 CALL TRANSACTION 语法中的 OPTIONS FROM (如图二),
界面上的字段帮助可以找到对应的参数,(如图三)
图一
图二
图三
模拟后台执行 在标准事务代码SHDB 中测试执行记录时,也可以勾选
图四
标准处理模式中的4个选项
图五
四
分析
修改销售订单售达方的录屏,生成的函数执行总是报错(缺了计划行屏幕的确认动作), 但是用SHDB测试执行却能通过,(勾选模拟后台执行).
因此尝试跟踪了一下SHDB勾选模拟后台执行对 CALL TRANSATION语句调用的影响.
发现了如下现象, SHDB 测试执行调用 CALL TRANSACTION 语句传递的DISMODE= ‘Q’. 这个值不在该参数的允许范围(如图五).
因此判断,这是一个BDC调用的隐藏参数
五
解决
销售订单修改售达方的录屏生成的函数
Z_SO_CHANGE_KUNNR
,调用时设置DISMODE = ‘Q’ ,完美解决了报错问题.
六
总结
SAP的屏幕处理逻辑中可能会检查某些特定的系统变量,比如SY-BINCT 等. 这些参数会影响屏幕执行逻辑,导致前台执行和后台执行时不一致.
一般情况把记录生成函数,调用该函数时, 会选择后台执行(DISMODE = ‘N’ ),只有分析错误时,会使用 ‘A’或’E’模式执行.
如果记录的时候,勾选了模拟后台执行复选框. 则务必把执行模式调整成 ‘Q’ . 这样执行过程与记录过程更趋于一致,会减少执行报错的情况.
不清楚SAP的DISMODE 的选项中为何没有列出该执行方式, 估计是代码与文档的同步问题吧.
** THE **
** END **
**约定**
如果你对这篇文章感兴趣,请帮忙点赞,在看,分享.
( **如果你真的喜欢这篇文章,请记得回来打个赏,作为支持我继续下去的动力,这是一个正反馈过程.
越多的人打赏,作者越有动力分享,读者就能享受更多的福利.毕竟打赏的金额富不了我,穷不了你,却能支持这个公众号长久发文.** )
syjf1976
sharry_xlp
Yannick_Duan
申请进入公众号讨论群提问或者参与话题讨论