当前位置: 首页 > news >正文

ABAP+记录一个BDC的BUG修改过程

问题背景:

业务顾问反馈在使用BDC 进行MEQ1进行供应商配额时,由于以前录屏时用例只有3行数据,导致现在有5行数据的时候,代码仍然只获取了3行数据进行录入,现在需要更改代码,使其按照实际情况自动调整行数。

解决记录:

首先根据业务顾问提供的出错的案例,进行问题复刻,将CALL事务代码的时候,模式的值IM_MODE调整为A,就可以将屏幕一步一步点开进行调试。

下面是调试的界面

数据填充结束的时候,我们可以看到下面这里本应该有5条,但是现在只有3条,那应该就是这里的问题,一般情况下,像这种填充表格的时候数据被重复覆盖,大概率是表格的行数在赋值时重复了,这时候一般可以直接从BDCDATA入手。

在调试时看一下BDCDATA的数据,这里我导出来了,放一个截图,从下图可以看到,这个数字02出现了很多次,应该是它的问题,我们将其依次在debug的时候改成02、03、04、05,再进行调试。

调试结果如下,发现数据从3条成功变成了5条,那么数据就可以这样修改:

下面放一个赋值的思维,这样填写就可以根据数据行数进行行数累加了:

这样就修改完了。

后续思考:

其实这是一个比较偷懒的改法,一点都没有动脑,直接改变了原有的逻辑。因为我在看代码的时候,发现上一个开发者在02旁边写了一句话“两条以上的记录,点击新增,在第二行里录入信息”,其实是表明他是考虑到多行输入数据的情况的,只是出了差错,每次新填的数据将原有的第2行进行覆盖了。这是因为在BDC录屏时,如果上下拉动进度条或者滑动鼠标滚轮,都是需要记录的,但是滑动鼠标滚轮时不生成记录代码,必须改为上下拉动进度条。这里少了拉动进度条的代码,所以每个02都会覆盖原有的数据,如果加上拉动进度条的代码,就可以保证每个02都是新增,因为我不擅长添加拉动进度条的代码,所以,我老老实实添加的代表数字的代码。

好吧,最后的最后,我还是又按照原来开发的意思修改了代码,在代码原有的基础上更改了代码,加上了拉动进度条的代码BDC_OKCODE = NL,就是拉动进度条的意思,原有代码的BDC_OKCODE是/00,是回车的意思,现在修改成=NL,就可以了。业务顾问测试后也是可以的,可恶,我写了这么多代码,那就还是把以前的代码放进来做个纪念吧

     以前的代码:

   ELSE. " 两条以上的记录,点击新增,在第二行里录入信息
*          CHANGE BY GYX D20250630,两条以上数据按照编号依次新增 START-------
**          PERFORM BDC_DYNPRO      USING 'SAPDM06Q' '0215'.
**          PERFORM BDC_FIELD       USING 'BDC_CURSOR'
**                                        'EQUP-QUOTE(02)'.
**          PERFORM BDC_FIELD       USING 'BDC_OKCODE'
**                                        '/00'.
**          PERFORM BDC_FIELD       USING 'EQUP-BESKZ(02)'
**                                        W_DATA-BESKZ.
**          PERFORM BDC_FIELD       USING 'RM06Q-SOBIN(02)'
**                                        W_DATA-ESOBS.
**          PERFORM BDC_FIELD       USING 'EQUP-LIFNR(02)'
**                                        W_DATA-LIFNR.
**          WRITE W_DATA-QUOTE TO LC_QUOTE.
**          PERFORM BDC_FIELD       USING 'EQUP-QUOTE(02)'
**                                        LC_QUOTE.
**
**          "最小批量尺寸
**          WRITE W_DATA-MINLS TO L_STR.
**          PERFORM BDC_FIELD       USING 'EQUP-MINLS(02)'
**                                        L_STR.PERFORM BDC_DYNPRO      USING 'SAPDM06Q' '0215'.DATA(GV_FIELD) =  'EQUP-QUOTE(' && LV_NUM && ')'.PERFORM BDC_FIELD       USING 'BDC_CURSOR'GV_FIELD."'EQUP-QUOTE(02)'.PERFORM BDC_FIELD       USING 'BDC_OKCODE''/00'.GV_FIELD =  'EQUP-BESKZ(' && LV_NUM && ')'.PERFORM BDC_FIELD       USING   GV_FIELD"'EQUP-BESKZ(02)'W_DATA-BESKZ.GV_FIELD =  'RM06Q-SOBIN(' && LV_NUM && ')'.PERFORM BDC_FIELD       USING GV_FIELD"'RM06Q-SOBIN(02)'W_DATA-ESOBS.GV_FIELD =  'EQUP-LIFNR(' && LV_NUM && ')'.PERFORM BDC_FIELD       USING GV_FIELD"'EQUP-LIFNR(02)'W_DATA-LIFNR.WRITE W_DATA-QUOTE TO LC_QUOTE.GV_FIELD =  'EQUP-QUOTE(' && LV_NUM && ')'.PERFORM BDC_FIELD       USING GV_FIELD"'EQUP-QUOTE(02)'LC_QUOTE."最小批量尺寸WRITE W_DATA-MINLS TO L_STR.GV_FIELD =  'EQUP-MINLS(' && LV_NUM && ')'.PERFORM BDC_FIELD       USING GV_FIELD"'EQUP-MINLS(02)'L_STR.*          CHANGE BY GYX D20250630,两条以上数据按照编号依次新增 END------

http://www.lqws.cn/news/606745.html

相关文章:

  • moodle升级(4.5到5.0)
  • 数据结构学习之栈
  • 计算机视觉---视觉伺服控制
  • mac mini m4安装node.js@16以下版本方法
  • nignx+Tomcat+NFS负载均衡加共享储存服务脚本
  • 重塑智能体决策路径:深入理解 ReAct 框架
  • 使用OpenCV训练自有模型的实践
  • 金融安全生命线:用AWS EventBridge和CloudTrail构建主动式入侵检测系统
  • Chrome 下载文件时总是提示“已阻止不安全的下载”的解决方案
  • VR制作公司业务范围
  • 【NumPy第二期:深入学习NumPy:切片、索引与数组操作进阶】
  • Java类加载机制及关于时序数据库IoTDB排查
  • 阿里云AppFlow AI助手打造智能搜索摘要新体验
  • 01背包问题[经典][动态规划]
  • RT Thread Studio修改堆区大小的方法
  • pytorch学习-9.多分类问题
  • 第8章网络协议-NAT
  • 微信小程序入门实例_____打造你的专属单词速记小程序
  • 开源 | V3.1.1慧知开源重卡运营充电桩平台 - 重卡运营充电桩平台管理解决方案;企业级完整代码 多租户、模拟器、多运营商、多小程序;
  • Qt 5.9 XML文件写入指南
  • React Native 安卓、苹果、鸿蒙5.0 三端适配方案:条件编译 + 平台适配层
  • 如何设置电脑定时休眠?操作指南详解
  • 前端面试专栏-主流框架:16. vue工程化配置(Vite、Webpack)
  • 哪款即时通讯服务稳定性靠谱?18家对比
  • 虚拟 SD 卡 MBR 与分区表结构深度解析:基于 QEMU 生成的 2G RAW 镜像
  • 解决 Cannot create Swift scratch context
  • WPF学习笔记(21)ListBox、ListView与控件模板
  • minio详细教程丨如何3分钟搭建minio
  • 操作系统考试大题-处理机调度算法-详解-1
  • Ollama最新快速上手指南:从安装到精通本地AI模型部署