前言
因业务需要,在SAP预留的项目和WBS屏幕增强出口中做增强
1 表结构增强
首先转到SE11,进入项目定义表PROJ,找到预留的增强结构CI_PROJ
有些主表中会预留一些增强结构,以CI_作为开头,如果要做表字段增强可以提前查看一下有没有这个结构,需要注意的是有些CI_开头的表字段是针对多个表的,如果不做确认使用时有可能造成系统dump,做字段增强之前需要确认该增强结构是否只针对该表,如PROJ的增强结构CI_PROJ就是为该表预留的,可以直接使用
找到CI_PROJ结构之后双击新建即可,在其中填入增强的字段
在给增强字段创建数据元素时,需要勾选上更改文档,这样在系统日志表cdhdr和cdpos中才会有修改记录
创建完成增强的结构之后,需要激活时避开用户使用阶段,如果需要同步到生产机尽量选择中午或者半夜的时候,因为在激活期间使用PROJ相关的程序运行会dump掉,激活完成后即可正常使用
2 CMOD创建
转到事务码CMOD,创建项目
在项目->增强分配中填入CNEX0006,这是PS预留的CMOD项目屏幕增强点
双击依次创建功能出口,屏幕出口
3 出口增强
双击出口EXIT_SAPLCJWB_002
点击显示对象列表,在se80的对象列表中找到top包含文件ZXCN1TOP
引入表cnci_proj和cnci_prps,再新建全局变量gv_display用于接收屏幕的显示/编辑状态
回到出口EXIT_SAPLCJWB_002
再双击INCLUDE程序以创建,双击include程序的时候会弹出警告,回车即可创建
此处是进入屏幕流PBO之前调用的function,通过cnci_proj_temp给proj表中ci_proj赋初始值
双击出口EXIT_SAPLCJWB_002,进入屏幕流PAI之后调用的function,通过cnci_proj_temp给proj表中ci_proj回写值
4 出口增强
转到增强组件,选择屏幕0600
选择布局
点击红色框框的按钮
输入CI_PROJ(即增强结构),回车之后将需要前台显示的字段手动勾选上,随后点击确定即可在屏幕上生成相应的字段,达到屏幕字段增强的效果
最后激活屏幕即可
回到屏幕逻辑流部分
根据需要激活相应的模块,可以在PBO控制屏幕字段的输入和展示,比如编辑模式时需要将字段放开,而显示模式则要禁止用户输入
正常只用下面的代码就可以按前台的显示/编辑来控制输入了,如果有特殊控制逻辑就自己把握了
在PAI可以加一些检查前台输入的校验逻辑
5 后台BADI增强
前台在PAI做校验的时候不是很稳妥,有些增强字段是通过bapi传值创建的,就不会走前台的校验逻辑,最稳妥的是在SAP调用创建项目bapi的时候加校验规则
通过查资料找到了在SE19的实施点PROJECTDEF_UPDATE,SAP在前后台创建的时候都会调用该增强实施,所以最好在此处做校验
转到SE19,典型业务加载项
输入增强实施名称
转到AT_SAVE的方法,此处就可以做校验
校验逻辑按项目要求封装到函数里面去了,实际情况可以自己把握
通过DEBUG的方式看了下这个增强实施外面的源码中断方式,发现是通过message 抛异常实现的,这里就抄了下源码的中断方式
7 WBS增强点
WBS的增强跟项目增强几乎一模一样
我把增强的几个点截图一下
PRPS增强点:
CMOD增强点:
CNEX0007
SE19增强点:
WORKBREAKDOWN_UPDATE
屏幕增强有个大佬写的很长很长的word文档,感谢那位大佬手把手写的文档我才能不至于摸石头过河