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

COOIS/COOISPI选择条件定制:从界面增强到数据传递的完整实践

1. 在输入界面增加选择条件

做过SAP开发的朋友都知道,COOIS/COOISPI报表是生产模块最常用的标准报表之一。但标准功能的选择条件往往不能满足实际业务需求,比如最近我就遇到一个需求:生产部门需要按工艺路线和成本中心筛选订单。这时候就需要对标准报表进行增强开发。

具体操作是在程序IOCTOPSL中找到增强点ioctopsl_04。这个增强点位于静态包含程序SES_IOCTOPSL中。我通常会创建一个自定义BADI实现ZBADI_COOISPI来处理这个增强。这里有个小技巧:在增强代码中,除了添加新字段外,最好同时考虑字段的校验逻辑。比如工艺路线字段需要检查是否属于当前工厂。

ENHANCEMENT 1 ZBADI_COOISPI. "active version DATA: ls_selopt TYPE rsdsselopt. IF screen-group1 = 'Z01'. "自定义字段组 CASE screen-name. WHEN 'ZROUTE'. "工艺路线字段 PERFORM validate_route USING screen. ENDCASE. ENDIF. ENDENHANCEMENT.

2. 新增选择字段文本设置

字段加上了,但用户看到的还是技术字段名,这显然不友好。我们需要在程序PPIO_ENTRY中设置字段文本。这里有个容易踩的坑:文本设置必须与后续步骤中的字段ID完全一致,否则会导致字段显示异常。

实际操作中,我会在SE63事务码中维护文本符号,然后在PPIO_ENTRY程序中引用。建议把新增字段的文本都集中维护在一个自定义Include中,方便后续维护。比如:

* 在ZCOOIS_TEXT_INCLUDE中定义 DATA: BEGIN OF gt_sel_text OCCURS 0, fieldname TYPE fieldname, text(40) TYPE c, END OF gt_sel_text. gt_sel_text-fieldname = 'ZROUTE'. gt_sel_text-text = TEXT-z01. "工艺路线 APPEND gt_sel_text.

3. 设置新增字段显示控制

字段不是加了就能自动显示的,还需要在IOCTOPSL程序的另一个增强点ehp603_ppio_ent_at_scr_out_02中控制显示逻辑。这里我建议使用新的BADI实现ZBADI_COOISPI_01,与之前的增强分开管理。

实际项目中我发现,字段显示往往需要根据用户权限或组织架构动态控制。比如成本中心字段可能只对财务部门可见。这时可以在增强代码中加入权限检查:

METHOD if_ex_ehp603_ppio_ent~at_scr_output. LOOP AT screen. CASE screen-name. WHEN 'ZKOSTL'. "成本中心字段 IF NOT has_authority('ZCOOIS_KOSTL'). screen-active = 0. MODIFY screen. ENDIF. ENDCASE. ENDLOOP. ENDMETHOD.

4. 取数程序中选择条件字段定义

现在来到核心部分——在取数程序中定义选择条件字段。这里涉及两个关键程序:LCOISSELECTTOP和SAPDBIOC。我建议先在LCOISSELECTTOP的增强点LCOISSELECTTOP_01中定义字段结构,然后在SAPDBIOC的增强点SAPDBIOC_01中映射到数据库字段。

有个重要细节:字段类型必须与数据库表字段完全匹配。比如工艺路线在MARC表中是CHAR10类型,那么增强中也必须使用相同类型。我曾经因为类型不匹配导致数据筛选失效,排查了半天才发现问题。

* LCOISSELECTTOP增强 TYPES: BEGIN OF zcoois_selopt, zroute TYPE plnfl, "工艺路线 zkostl TYPE kostl, "成本中心 END OF zcoois_selopt. DATA: gs_zcoois_selopt TYPE zcoois_selopt.

5. 条件数据传递增强点

数据传递主要在LCOISSELECTU03程序的函数COIS_SELECT_PARAMETERS_SET中完成。这里有两个关键FORM:reset_parameters和fill_parameters。前者用于初始化参数,后者用于传递实际值。

我遇到的一个典型问题是:自定义字段的值在界面输入后没有传递到查询条件中。后来发现需要在fill_parameters中显式地将屏幕字段值赋给选择参数:

FORM fill_parameters. * 标准代码... "增强部分 IF sy-tcode = 'COOIS'. gs_zcoois_selopt-zroute = ioctopsl-zroute. gs_zcoois_selopt-zkostl = ioctopsl-zkostl. ENDIF. ENDFORM.

6. 取数程序取数增强点

数据最终是在DBIOC_FILL_IOMAMO_TAB程序的fill_iomamo_tab子例程中被查询的。这里需要修改标准程序来加入新的筛选条件。注意:直接修改标准程序有风险,建议使用隐式增强点。

我通常的做法是先在标准代码中找到合适的位置(通常是在主要查询条件之后),然后添加自定义逻辑。比如要按工艺路线筛选:

* 在fill_iomamo_tab中找到合适位置 IF gs_zcoois_selopt-zroute IS NOT INITIAL. DELETE ct_iomamo WHERE route NE gs_zcoois_selopt-zroute. ENDIF.

7. 解决F4帮助报错问题

新增字段经常需要F4帮助功能。但在COOISPI中直接调用标准F4函数可能会报错,特别是在函数组SAPLCOMC的程序LCOMCTOP中。这是因为标准程序没有考虑自定义字段的情况。

解决方案是在调用F4帮助前检查字段类型。如果是自定义字段,走自定义逻辑;否则调用标准函数。比如:

MODULE zf4_help INPUT. CASE screen-name. WHEN 'ZROUTE'. PERFORM f4_for_route USING screen-name. WHEN OTHERS. PERFORM standard_f4_help USING screen-name. ENDCASE. ENDMODULE.

8. 新选择条件的最终显示

所有开发完成后,还需要确保新增条件在COOISPI界面正确显示。这里要注意字段的排列顺序和分组逻辑。我建议参考标准字段的分组方式,将相关字段放在同一区域。

一个实用的技巧是使用屏幕修改器(Screen Painter)调整字段位置,而不是完全依赖代码控制。这样可以在不修改程序的情况下调整布局。

http://www.jsqmd.com/news/1088533/

相关文章:

  • 湛江高口碑黄金铂金回收白银回收实体老店排行 5 家靠谱门店电话地址全收录
  • TeXstudio 暗色主题 2.0:从界面到代码区的完整护眼配置方案
  • 性能测试实战:从核心概念到瓶颈定位的完整工程思维
  • HDLBits 实战解析:从基础门电路到组合逻辑设计
  • AI从业者的四根思维支柱:从概念骨架到跨模态对齐
  • UI自动化测试核心实践:元素定位与智能等待策略详解
  • K8s 生产集群排障实战:Pod 驱逐与资源争用的底层逻辑
  • 优化后端接口响应时间的5个实用技巧
  • DeepSeek LeetCode 3430. 最多 K 个元素的子数组的最值之和 Java实现
  • AI赋能JMeter性能测试:从脚本生成到智能优化的实践指南
  • 使用JMeter对RabbitMQ进行压力测试实战指南
  • 微信数据库密钥提取:Sharp-dumpkey工具原理与实战指南
  • openeuler/pkgship高级技巧:如何利用依赖图谱优化软件包更新与删除
  • Universal x86 Tuning Utility:开源硬件调优解决方案的技术实现与应用指南
  • Three.js 模型热力图教程
  • LVGL实战指南:打造个性化嵌入式日历界面
  • 浮空全域透视动向·自愈专网直抵指挥 穿云夜视广域感知与立体管控融合指挥系统技术方案
  • Web文件上传安全:从漏洞原理到纵深防御实战指南
  • 基于STM32F407ZGT6与蓝牙的简易机械臂控制系统设计与实现
  • NCMDump:三步解锁网易云音乐加密文件,让音乐真正属于你
  • Java国密SM2集成:解决BouncyCastle“未知曲线”报错全攻略
  • Chromatic:如何像专业安全研究员一样调试和修改任意Chromium应用?
  • Blender3mfFormat插件:3D打印工作流的终极解决方案
  • 揭秘QQ聊天记录隐藏的密钥:全平台数据库解密技术深度解析
  • 从原理到代码:深入理解RSA加密算法及其Python实现
  • 盲波束成形技术与BORN算法在无线通信中的应用
  • 如何用DDrawCompat让Windows 10/11上的DirectX老游戏重获新生:技术原理与实战指南
  • [ 实战篇 ] 手把手教你激活谷歌HackBar (附疑难排查)
  • 3步打造极简高效Windows右键菜单:ContextMenuManager终极管理指南
  • Lenovo Legion Toolkit:拯救者笔记本性能调校终极指南