SAP 功能模块介绍、语法及使用

举报
雨绸缪 发表于 2023/05/29 16:50:28 2023/05/29
【摘要】 什么是功能模块功能模块构成了 SAP 系统的主要部分,因为多年来 SAP 一直使用它们模块化代码,允许代码重用,首先由他们自己和他们的开发人员重用,然后由客户重用。功能模块是指在功能组中定义的特定过程,可以从任何其他 ABAP 程序中调用。功能组充当许多功能模块的容器,这些功能模块在逻辑上属于一起,例如,人力资源工资系统的功能模块将被放在一个功能组中。SAP 系统有数千个可用于程序的功能模...

什么是功能模块

功能模块构成了 SAP 系统的主要部分,因为多年来 SAP 一直使用它们模块化代码,允许代码重用,首先由他们自己和他们的开发人员重用,然后由客户重用。

功能模块是指在功能组中定义的特定过程,可以从任何其他 ABAP 程序中调用。功能组充当许多功能模块的容器,这些功能模块在逻辑上属于一起,例如,人力资源工资系统的功能模块将被放在一个功能组中。SAP 系统有数千个可用于程序的功能模块,因此如果您在系统中搜索,通常可能会找到您可能被要求编码的任务的预先存在的模块。

要查看如何创建功能模块,必须查看功能构建器。这是通过系统最开始的菜单,通过 SAP 菜单 -> 工具 -> ABAP 工作台 -> 开发 找到,如图:

image.png

也可以直接通过事务代码直接找到函数构建器,事务代码为 SE37

image.png

功能模块–组件

不用在这里输入全名,而是用通配符键入功能模块名称的一部分,以演示搜索功能模块的方式。键入*bupa*,然后按F4 键(跟 BP 相关的功能模块)。搜索结果将显示在新窗口中:

image.png

功能模块显示在蓝色背景的线条中,它们的功能组显示在上面的粉色线条中。如果您想进一步查看功能组 BUD0 ,可以使用对象导航器屏幕(se80)。该屏幕实际上可以使用屏幕左侧的菜单来导航 SAP 系统中保存的许多对象,不仅是功能模块,还有程序等。在这里,我们可以看到功能组 BUD0 中保存的功能模块(和其他对象)的列表:

image.png

随便选择一个函数模块点进去,例如 BUA_BUPA_ADRC_GET,让我们开看一下功能模块都有哪些组件:

  1. 源代码

image.png

功能模块与自定义代码

比如,当我们想要获取供应商银行的数据,一开始我们学习的时候可能会使用这样的语句:

*&---------------------------------------------------------------------*  
*& 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.

运行,输入需要查询的供应商编号,点击运行测试,可以看到这个界面:

image.png

运行成功后,可以看到如下查询结果界面:

image.png

image.png

image.png

当然,如果利用功能模块,可以搜索并查看 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 运行该模块,可以进入测试功能模块的初始屏幕界面:

image.png

也能得到供应商的相应银行信息:

image.png

其实 SAP 封装了很多常见的功能模块 BAPI,在需要的时候,使用这种方式比直接写 SQL 来的直接和方便。

调用功能模块的语法结构

以下面是调用函数语句的语法。

CALL FUNCTION 'F'
    [exporting   p1 = v1 ... ]
    [importing   p2 = v2 ... ]
    [changing    p3 = v3 ... ]
    [tables      p4 = it ... ]
    [exceptions  x1 = n      ]
    [others = n].

这个结构中有几个点比较重要:

  • F 是功能模块名称。
  • p1p4 是功能模块接口中定义的参数名称。
  • v1v3 是在调用程序中定义的变量或字段字符串名称。
  • it 它是在调用程序中定义的内部表。
  • n 是任何整数字符; n 不能是变量。
  • x1 是函数模块中引发的异常名称。

以下几点适用:

  • 所有添加都是可选的。
  • 调用函数是一条语句。不要在参数或异常名称后放置句点或逗号。
  • 功能模块名称必须以大写形式编码。如果它以小写形式编码,则将找不到该函数并导致一个简短的转储。

使用 CALL FUNCTION 语句将控制转移到功能模块并指定参数。图 19.9 说明了参数是如何传递到功能模块和从功能模块接收的。

f19-9.gif

调用函数 CALL FUNCTION 语句的一些细节和规则。首先,EXPORTSIMPORTS 是从程序的角度看的。被调用函数导出的值会被导入到函数模块,函数模块导出的值会被导入到调用函数语句。

在赋值运算符(=)的左边是函数模块接口中定义的参数名称列表,右边是调用程序内部定义的变量。导出后的赋值从右到左进行,导入后的赋值从左到右进行。更改和表格后的赋值是双向的。在调用之前,赋值是从右到左进行的。返回时,返回值从左到右进行赋值。

以上图为例,当调用函数模块 Z_XXX 时,变量 v1 的值被分配给参数 p1,变量 v2 的值被分配给 p2。然后控制转移到函数模块。返回时,p3 的值被分配给 v3

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。