SAP 功能模块介绍、语法及使用
什么是功能模块
功能模块构成了 SAP 系统的主要部分,因为多年来 SAP 一直使用它们模块化代码,允许代码重用,首先由他们自己和他们的开发人员重用,然后由客户重用。
功能模块是指在功能组中定义的特定过程,可以从任何其他 ABAP 程序中调用。功能组充当许多功能模块的容器,这些功能模块在逻辑上属于一起,例如,人力资源工资系统的功能模块将被放在一个功能组中。SAP 系统有数千个可用于程序的功能模块,因此如果您在系统中搜索,通常可能会找到您可能被要求编码的任务的预先存在的模块。
要查看如何创建功能模块,必须查看功能构建器。这是通过系统最开始的菜单,通过 SAP 菜单 -> 工具 -> ABAP 工作台 -> 开发
找到,如图:
也可以直接通过事务代码直接找到函数构建器,事务代码为 SE37
:
功能模块–组件
不用在这里输入全名,而是用通配符键入功能模块名称的一部分,以演示搜索功能模块的方式。键入*bupa*
,然后按F4 键(跟 BP 相关的功能模块)。搜索结果将显示在新窗口中:
功能模块显示在蓝色背景的线条中,它们的功能组显示在上面的粉色线条中。如果您想进一步查看功能组 BUD0
,可以使用对象导航器屏幕(se80
)。该屏幕实际上可以使用屏幕左侧的菜单来导航 SAP
系统中保存的许多对象,不仅是功能模块,还有程序等。在这里,我们可以看到功能组 BUD0
中保存的功能模块(和其他对象)的列表:
随便选择一个函数模块点进去,例如 BUA_BUPA_ADRC_GET
,让我们开看一下功能模块都有哪些组件:
- 源代码
功能模块与自定义代码
比如,当我们想要获取供应商银行的数据,一开始我们学习的时候可能会使用这样的语句:
*&---------------------------------------------------------------------*
*& Report zget_bp_bank
*&---------------------------------------------------------------------*
*&
*&---------------------------------------------------------------------*
REPORT zget_bp_bank.
TABLES: but0bk.
DATA: ls_but0bk LIKE but0bk,
lt_but0bk LIKE TABLE OF ls_but0bk.
*DATA: gv_lifnr TYPE but0bk-partner.
CLEAR ls_but0bk.
REFRESH lt_but0bk.
SELECT-OPTIONS: gv_lifnr FOR but0bk-partner.
SELECT * FROM but0bk INTO CORRESPONDING FIELDS OF TABLE lt_but0bk WHERE partner = gv_lifnr.
CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
EXPORTING
i_structure_name = 'but0bk'
TABLES
t_outtab = lt_but0bk
EXCEPTIONS
program_error = 1
OTHERS = 2.
IF sy-subrc <> 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
运行,输入需要查询的供应商编号,点击运行测试,可以看到这个界面:
运行成功后,可以看到如下查询结果界面:
当然,如果利用功能模块,可以搜索并查看 BUP_BUPA_BUT0BK_GET
的源码,也是实现了相同的功能:
FUNCTION bapi_bupa_bankdetails_get .
*"----------------------------------------------------------------------
*"*"Lokale Schnittstelle:
*" IMPORTING
*" VALUE(BUSINESSPARTNER) LIKE BAPIBUS1006_HEAD-BPARTNER
*" VALUE(VALID_DATE) LIKE BAPIBUS1006_VALIDITY-VALID_DATE DEFAULT
*" SY-DATLO
*" TABLES
*" BANKDETAILS STRUCTURE BAPIBUS1006_BANKDETAILS OPTIONAL
*" RETURN STRUCTURE BAPIRET2 OPTIONAL
*"----------------------------------------------------------------------
*------ Lokale Datendeklarationen --------------------------------------
DATA: lt_return LIKE bapiret2 OCCURS 0 WITH HEADER LINE.
*------ Vorgangsprüfung ------------------------------------------------
CALL FUNCTION 'BUPA_ACT_ANALYZE_FOR_BAPI'
EXPORTING
iv_bp_number = businesspartner
iv_activity = 'READ'
TABLES
ct_results = lt_return.
LOOP AT lt_return WHERE type CA 'AE'.
EXIT.
ENDLOOP.
*------ Internen Funktionsbaustein aufrufen, wenn Rückgabe aus ---------
*------ Vorgangsprüfung weder Messagetyp E od. A ---------
IF lt_return IS INITIAL.
CALL FUNCTION 'BUPA_BANKDETAILS_GET'
EXPORTING
iv_partner = businesspartner
iv_valid_date = valid_date
TABLES
et_bankdetails = bankdetails
et_return = return.
ENDIF.
*------ Ergebnis der Vergangsprüfung an Return-Parameter anhängen ------
LOOP AT lt_return.
COLLECT lt_return INTO return.
ENDLOOP.
ENDFUNCTION.
如果直接 F8
运行该模块,可以进入测试功能模块的初始屏幕界面:
也能得到供应商的相应银行信息:
其实 SAP 封装了很多常见的功能模块 BAPI,在需要的时候,使用这种方式比直接写 SQL 来的直接和方便。
调用功能模块的语法结构
以下面是调用函数语句的语法。
CALL FUNCTION 'F'
[exporting p1 = v1 ... ]
[importing p2 = v2 ... ]
[changing p3 = v3 ... ]
[tables p4 = it ... ]
[exceptions x1 = n ]
[others = n].
这个结构中有几个点比较重要:
F
是功能模块名称。p1
到p4
是功能模块接口中定义的参数名称。v1
到v3
是在调用程序中定义的变量或字段字符串名称。it
它是在调用程序中定义的内部表。- n 是任何整数字符;
n
不能是变量。 x1
是函数模块中引发的异常名称。
以下几点适用:
- 所有添加都是可选的。
- 调用函数是一条语句。不要在参数或异常名称后放置句点或逗号。
- 功能模块名称必须以大写形式编码。如果它以小写形式编码,则将找不到该函数并导致一个简短的转储。
使用 CALL FUNCTION
语句将控制转移到功能模块并指定参数。图 19.9 说明了参数是如何传递到功能模块和从功能模块接收的。
调用函数 CALL FUNCTION
语句的一些细节和规则。首先,EXPORTS
和 IMPORTS
是从程序的角度看的。被调用函数导出的值会被导入到函数模块,函数模块导出的值会被导入到调用函数语句。
在赋值运算符(=
)的左边是函数模块接口中定义的参数名称列表,右边是调用程序内部定义的变量。导出后的赋值从右到左进行,导入后的赋值从左到右进行。更改和表格后的赋值是双向的。在调用之前,赋值是从右到左进行的。返回时,返回值从左到右进行赋值。
以上图为例,当调用函数模块 Z_XXX
时,变量 v1
的值被分配给参数 p1
,变量 v2
的值被分配给 p2
。然后控制转移到函数模块。返回时,p3
的值被分配给 v3
。
- 点赞
- 收藏
- 关注作者
评论(0)