将内表值传给ABAP功能模块

700 阅读2分钟

介绍

如何将内部表传递给函数模块遵循与将内部表传递给子例程相同的规则。有两种方法:

  • 通过接口的 tables 部分。这相当于通过 perform 语句的 tables 加法传递它

  • 通过接口的 importingchanging 部分。第一个相当于 perform 语句上的 using ,最后一个相当于 changing 对 perform

若要返回源自函数模块的内部表,请使用下列方法之一:

  • 接口的 tables 部分
  • 接口的 exporting 部分

通过 TABLES 参数传递内部表

如果使用接口的 tables 部分,则可以将内部表与标题行一起传递。如果它没有标题行,它将自动在函数模块中获取一个标题行。 tables 参数始终通过引用传递。

要使用此方法,请从“函数库初始屏幕”中选择“表参数/异常接口”单选按钮,然后按“更改”按钮。您将看到“表参数/异常”屏幕。在屏幕上半部分的“表参数”列下,键入内部表参数的名称。

如果内部表是结构化类型,则可以在“引用结构”列中键入 DDIC 结构的名称。此处只能输入 DDIC 结构名称。如果未在此处指定 DDIC 结构,则无法访问函数模块中内部表的任何组件。这样做会导致语法错误。

如果内部表不是结构化类型,则可以改为在“引用类型”列中输入 ABAP/4 数据类型。

TABLE 可以导入和导出的内表。内表的内容从调用程序转移到功能模块。功能模块可以改变内部表的内容,然后将其送回给调用程序。表总是通过引用来分配。

通过导出/导入和更改传递内部表

如果使用接口的 exporting / importing 或 changing 部分,则只能传递内部表的正文。但是,接口的这些部分使您能够选择是按值(默认值)还是按引用传递内部表体。使用此方法时,必须在“引用类型”列中指定 table 。

CALL FUNCTION 'CONVERT_IBAN_2_BANK_ACCOUNT'
      EXPORTING
        i_iban             = wa_tiban-iban
      IMPORTING
        e_bank_account     = lv_bank_account
        e_bank_control_key = lv_control_key
        e_bank_country     = lv_bank_country
        e_bank_number      = lv_bank_number
      EXCEPTIONS
        no_conversion      = 1
        OTHERS             = 2.

例如,调用函数模块 GUI_DOWNLOAD,将一个内部表格的内容保存到当前演示服务器上的一个文件中。函数模块的名称被指定为一个字符字面,这是静态参数分配中最常见的规范类型。

CONSTANTS path TYPE string VALUE `c:\temp\`.  
  
DATA: line     TYPE c LENGTH 80,  
      text_tab LIKE STANDARD TABLE OF line,  
      fleng    TYPE i.  
  
...  
  
CALL FUNCTION 'GUI_DOWNLOAD'  
  EXPORTING  
    filename         = path && `text.txt`  
    filetype         = 'ASC'  
  IMPORTING  
    filelength       = fleng  
  TABLES  
    data_tab         = text_tab  
  EXCEPTIONS  
    file_write_error = 1  
    invalid_type     = 2  
    no_authority     = 3  
    unknown_error    = 4  
    OTHERS           = 10.  
  
CASE sy-subrc.  
  WHEN 1.  
    ...  
  ...  
ENDCASE.