SAP ABAP 函数模块

函数模块(Function Modules)是 SAP 系统的主要组成部分,因为多年来,SAP 一直使用函数模块对代码进行模块化,可以使得代码由其自身、开发人员以及客户重用。

函数模块是包含一组具有导入和导出参数的可重用语句的子程序。与 Include 程序不同,函数模块可以独立执行。SAP 系统包含几个预定义的功能模块,可以从任何 ABAP 程序调用这些模块。功能组充当逻辑上属于一起的多个函数模块的容器。例如,HR 工资系统的函数模块将放在一个函数组中。

要了解如何创建函数模块,必须研究函数生成器(Function Builder)。您可以找到事务代码为 SE37 的函数生成器。只需键入带有通配符的函数模块名称的一部分,即可演示搜索函数模块的方法。输入amount,然后按 F4 键。

搜索结果将显示在新窗口中。函数模块以蓝色背景的线条显示,其功能组以粉色线条显示。您可以使用对象导航器屏幕(事务 SE80)进一步查看函数组 ISOC。您可以看到函数模块列表以及函数组中保存的其他对象。让我们参考一下函数模块 Spill_AMOUNT。此函数模块可以将数字转换为文字。


创建新程序

  • 步骤 1 - 转到事务 SE38 并创建一个名为 Z_SPELLAMOUNT 的新程序。

  • 步骤 2 - 输入一些代码,以便设置参数,在其中输入值并传递给函数模块。此处的文本元素 text-001 读取 'Enter a Value'。

  • 步骤 3 - 要为此编写代码,请使用 CTRL+F6。之后,将出现一个窗口,其中 CALL FUNCTION(调用函数)是列表中的第一个选项。在文本框中输入 spell_amount然后单击continue 按钮。

  • 步骤 4 - 一些代码是自动生成的。但我们需要增强 IF 语句,以包含一个代码,写入消息,"The function module returned a value of: sy-subrc",并添加 ELSE 语句,以便在函数模块成功时写出正确的结果。这里,必须设置一个新变量来保存函数模块返回的值。我们将其称为 'result'。

    代码如下:

  1. REPORT Z_SPELLAMOUNT.
  2. data result like SPELL.
  3. selection-screen begin of line.
  4. selection-screen comment 1(15) text-001.
  5. parameter num_1 Type I.
  6. selection-screen end of line.
  7. CALL FUNCTION 'SPELL_AMOUNT'
  8. EXPORTING
  9. AMOUNT = num_1
  10. IMPORTING
  11. IN_WORDS = result.
  12. IF SY-SUBRC <> 0.
  13. Write: 'Value returned is:', SY-SUBRC.
  14. else.
  15. Write: 'Amount in words is:', result-word.
  16. ENDIF.
  • 步骤 5 - 函数模块返回的变量叫 IN_WORDS。程序中设置相应的变量叫做 result。通过使用 LIKE 语句来定义 IN_WORDS 的结构叫做 SPELL

  • 步骤 6 - 保存、激活和执行程序。输入如下图所示的值,然后按 F8 键:

    结果如下:

  1. Spelling the Amount
  2. Amount in words is:
  3. FIVE THOUSAND SIX HUNDRED EIGHTY