将内部表传递给功能模块

举报
雨绸缪 发表于 2023/06/30 19:06:08 2023/06/30
【摘要】 将内部表传递给函数模块遵循与将内部表传递给子例程相同的规则。有两种方法:通过接口的 tables 部分。这相当于通过 perform 语句的 tables 加法传递它通过接口的 importing 或 changing 部分。第一个相当于 perform 语句上的 using ,最后一个相当于 changing 对 perform若要返回源自函数模块的内部表,请使用下列方法之一:接口的 ta...

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

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

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

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

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

通过 TABLES 参数传递内部表

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

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

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

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

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

如果使用接口的 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.

调用语法

CALL FUNCTION [PARAMETER-TABLE ptab] [EXCEPTION-TABLE etab]. :通过特殊的内部表 ptab 和 etab 将实际参数分配给功能模块的形式参数,并将值返回给非基于类的异常。

使用参数

PARAMETER-TABLE:用于为被调用函数模块的所有形参分配实参。 ptab 表的数据类型需要参照类型池 ABAP 的表类型 abap_func_parmbind_tab 或行类型 abap_func_parmbind 创建,类型为排序表。 列名称和种类构成了表 ptab 的唯一键。当语句 CALL FUNCTION 被执行时,对于每个非可选的形式参数,表格必须只包含一行。 对于每个可选的形式参数,这一行都是可选的。 表参数列表:

  • NAME:函数模块的参数名称,类型 char30

  • KIND:类型为 i,形式参数的类型。 kind 必须包含类型池 ABAP 的以下常量之一的值,如果从调用者角度指定的类型与形参的实际类型不匹配,则会引发可捕获异常

    • abap_func_exporting:for input parameters value 10
    • abap_func_importing:for output parameters value 20
    • abap_func_tables:for table parameters value 30
    • abap_func_changing:for input/output parameters value 40
  • VALUE:定义类型为REF TO data,作为指向实际参数的指针。 value 中的引用变量所指向的数据对象被分配给 name 中指定的形参。如果该引用变量类型与 FM 实际参数变量类型不一致,则引发异常 CX_SY_DYN_CALL_ILLEGAL_TYPE

  • EXCEPTION-TABLE:用于将返回值分配给未标记为异常类的被调用功能模块的异常。 etab 参照类型池 ABAP 的表类型 abap_func_excpbind_tab 或行类型 abap_func_excpbind 创建散列表。 当执行语句 CALL FUNCTION 时,该表可以为功能模块的每个非基于类的异常只包含一行。 表参数列表:

  • NAME: 对于相应异常的名称,或 error_message,或以大写字母指定 OTHERS,,类型 char30

  • VALUE:类型为 i ,处理 name 中指定的异常后在 sy-subrc 中可用的数值

  • MESSAGE:定义类型为 REF TO data

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

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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