概述
屏幕增强(Screen Exits)是客户出口中非常重要的增强,也是使用非常多的增强(相比来讲,菜单增强用得就比较少)。
屏幕增强是指SAP在标准程序的屏幕上预留了子屏幕区域(Subscreen Area),用户可创建自己的子屏幕(Screen of type subscreen)来显示在屏幕区域中。
实现原理
首先是在SAP标准程序的屏幕中调用增强屏幕。如上图所示,关键语句为:CALL CUSTOMER-SUBSCREEN。其中abcd为屏幕区域,SAPLXAAA表示用户增强的函数组的主程序,1234为子屏幕号。
用户只需要在函数族SAPLXAAA中创建屏幕号为1234的子屏幕即可。但同时需要考虑的重要问题便是主程序与子屏幕之间的数据交换问题:主程序的数据需要传递给子屏幕,同时子屏幕输入的数据需要传回给主程序。SAP通过函数组的全局变量来实现数据交换,如下:
1)传递数据到子屏幕
主程序在调用子屏幕前,使用语句CALL CUSTOMER-FUNCTION调用一个函数组SAPLXAAA中的函数(该函数实际就是一个功能出口)。这样即可将需要传递给子屏幕的数据传递到函数组的全局变量中。因为子屏幕也是创建在该函数组中,因此可以使用该函数组的全局变量。
2)从子屏幕传回数据
同样的,在调用子屏幕后主程序使用语句CALL CUSTOMER-FUNCTION调用一个函数组SAPLXAAA中的另一个函数,将函数组中的全局变量数据返回给主程序。当然在此之前,子屏幕需要把相应的数据放到函数组的全局变量中。
因此,通常情况下若某个增强带有屏幕增强,那么它也同时会带着两个相应的功能增强:一个用于从主程序传递数据到子屏幕,一个用户从子屏幕传回数据到主程序。
实例
以下以PM模块中维护计划的客户屏幕增强(IPRM0003)为例,说明屏幕增强的实现原理和实现过程:
1)SMOD查看增强:
可以看到该增强中有屏幕增强。同时还带有两个功能增强EXIT_SAPLIWP3_001和EXIT_SAPLIWP3_002,这两个功能增强的作用即用于数据传递。
其中功能增强各字段的含义:
- SAPLIWP3:表示发起调用子屏幕的程序,即维护计划的程序
- 8027:发起调用的屏幕
- CUSSSCR1:发起调用的屏幕的子屏幕区域
- SAPLXPRM:需要实现的子屏幕应在的函数组
- 0100:需要实现的子屏幕的屏幕号
2)CMOD创建项目:
3)实现功能出口:
实现功能出口EXIT_SAPLIWP3_001,将数据传递到函数组中:
MOVE-CORRESPONDING STCI_MPOS_IMP TO STCI_MPOS.
实现功能出口EXIT_SAPLIWP3_002,将数据传回主程序:
MOVE-CORRESPONDING STCI_MPOS TO STCI_MPOS_EXP.
4)实现屏幕:
在函数组XPRM中创建一个编号为0100的子屏幕:
5)激活项目:
(6)查看增强效果:
在维修计划界面,可以看到新增的屏幕:
其他说明
1)对于从主程序传递数据到函数组的函数,其输入参数除了业务数据之外,通常还会有执行动作(新增、修改、删除)的信息。实现增强屏幕时,应该根据该信息来确定屏幕字段是否可输入的属性。(使用事务代码来确定屏幕中的显示属性是不可取的方式)
2)在很多的涉及屏幕增强的增强中,都会提供多个屏幕增强。通常在后台可以配置需要显示哪个子屏幕。但也有特殊的情况,是使用从主程序传递数据到函数组的函数来返回需要调用的屏幕;这种情况在后台配置时使用的都是同一个屏幕编码。比如PM模块的设备屏幕增强就是如此,其数据传递函数中需要返回子屏幕号: