CT04创建特征后,对于值得选项,SAP支持四种方式。其中功能模块可以调用ABAP函数对值进行检查校验,这就对特征值的选择和输入提供了很大的拓展可能。
CT04-值-功能模块
输入需要用到的函数,以上图为例,ZPP_TEST1需要为开发设置的函数名称,及SE37能直接编辑的函数。
所有输入的值,会调用输入的函数,进行值校验,所以ZPP_TEST1这个函数是对输入值进行校验的,函数入参和出参如下:
入参
出参
其中CHARACT_NO和CHARACT是特征的特性,具体可以参照表CABN,这里不做过多阐述。
入参的VALUE为用户的输入值,出参的VALUE_EX为函数的返回值,及调用的这个函数可以对输入值进行一系列逻辑处理后,返回一个值。
为便于理解,我们举一个最简单的例子:公司默认宽是2,该特征是面积,要求用户输长。
那么ZPP_TEST1就可以写成:
FUNCTION ZPP_TEST1. *"---------------------------------------------------------------------- *"*"本地接口: *" IMPORTING *" REFERENCE(CHARACT_NO) LIKE CABN-ATINN *" REFERENCE(CHARACT) LIKE CABN-ATNAM *" REFERENCE(VALUE) LIKE CAWN-ATWRT *" EXPORTING *" REFERENCE(VALUE_EX) TYPE CAWN-ATWRT *" EXCEPTIONS *" NOT_FOUND *"---------------------------------------------------------------------- value_ex = value*2. ENDFUNCTION.其中VALUE为输入的长,VALUE_EX为返回的面积,函数里写逻辑 面积 = 长*宽。
OK,这是校验函数。
同时,SAP在代码层面还写死了,输入的函数+'_F4'为搜索帮助函数,输入的函数+'_DC'为值描述函数。
在本例中,另外写一个函数ZPP_TEST1_F4,作为搜索帮助的函数,能够显示可以选择的函数。
入参和出参就不贴图了,直接附上代码:
FUNCTION zpp_test1_f4. *"---------------------------------------------------------------------- *"*"本地接口: *" IMPORTING *" REFERENCE(CHARACT_NO) TYPE CABN-ATINN *" REFERENCE(CHARACT) TYPE CABN-ATNAM *" VALUE(DISPLAY) DEFAULT 'X' *" REFERENCE(ADDITIONAL_VALUES) TYPE CABN-ATSON *" REFERENCE(MULTIPLE_VALUES) TYPE RCTMV-ATLIS *" REFERENCE(LANGUAGE) TYPE SY-LANGU *" REFERENCE(DISPLAY_WITH_LANGUAGE) *" EXPORTING *" REFERENCE(VALUE_EX) TYPE CAWN-ATWRT *" TABLES *" VALUES STRUCTURE RCTVALUES再写一个函数ZPP_TEST1_DC,作为值描述的函数,能够根据输入的值,返回值的描述。
FUNCTION zpp_test1_dc . *"---------------------------------------------------------------------- *"*"本地接口: *" IMPORTING *" REFERENCE(CHARACT_NO) TYPE CABN-ATINN *" REFERENCE(CHARACT) TYPE CABN-ATNAM *" REFERENCE(VALUE) TYPE CAWN-ATWRT *" REFERENCE(LANGUAGE) TYPE SY-LANGU *" EXPORTING *" REFERENCE(DESCRIPTION) TYPE CAWNT-ATWTB *" EXCEPTIONS *" NOT_FOUND *"----------------------------------------------------------------------以上两个为SAP在代码层面直接写死的情况,需按规则描述,感兴趣的小伙伴可以DEBUG查一下。
对ZPP_TEST1_F4函数需要注意:因为搜索帮助的显示通常是一个表结构,双击后返回值是读表的第一个值,所以需要清空表保留需要的值或者插入把选择值写到表的第一行,这是开发层面需要考虑的问题。
参考链接:Entering a Function Module - SAP Documentation