【ABAP】动态调用function

DATA:lv_req  TYPE REF TO data,
       lv_resp TYPE REF TO data.

  FIELD-SYMBOLS:<fs_req>   TYPE any,
                <fs_resp>  TYPE any,
                <fs_value> TYPE any.

“可在此维护相关function名称
  SELECT SINGLE * FROM ztif_prog WHERE cid = @sscrfields-ucomm INTO @DATA(gs_tab).
  IF gs_tab IS INITIAL .
    MESSAGE '请维护表 ztif_prog' TYPE 'E'.
  ELSE.
    SELECT * FROM fupararef WHERE funcname = @gs_tab-fun INTO TABLE @DATA(gt_fconf).
    TRY.
        LOOP AT gt_fconf INTO DATA(gs_fconf).
          IF gs_fconf-parameter = 'INPUT'.
            CREATE DATA lv_req TYPE (gs_fconf-structure).
            ASSIGN lv_req->* TO <fs_req>.
          ENDIF.
          IF gs_fconf-parameter = 'OUTPUT'.
            CREATE DATA lv_req TYPE (gs_fconf-structure).
            ASSIGN lv_resp->* TO <fs_resp>.
          ENDIF.
        ENDLOOP.

        CALL FUNCTION gs_fconf-funcname
          EXPORTING
            i_req  = <fs_req>
          IMPORTING
            o_resp = <fs_resp>.
      CATCH cx_root.

    ENDTRY.
  ENDIF.

ABAP 中,可以使用 Function Module 和 Function Module Name 来实现动态调用函数。下面是具体步骤: 1. 定义一个 Function Module Name 变量来存储要调用的函数名。 ``` DATA: lv_function_name TYPE rs38l_fnam. ``` 2. 使用 ASSIGN 语句将 Function Module Name 分配给一个 FIELD-SYMBOLS 变量。 ``` FIELD-SYMBOLS: <fs_function_module> TYPE any. ASSIGN (lv_function_name) TO <fs_function_module>. ``` 3. 使用 FUNCTION MODULE 语句调用函数模块,并将输入参数传递给函数。 ``` CALL FUNCTION lv_function_name EXPORTING p_input = ls_input IMPORTING p_output = ls_output. ``` 例如,以下代码演示了如何动态调用函数: ``` DATA: lv_function_name TYPE rs38l_fnam, ls_input TYPE zinput, ls_output TYPE zoutput. FIELD-SYMBOLS: <fs_function_module> TYPE any, <fs_input> TYPE any, <fs_output> TYPE any. * 获取函数名和输入参数 lv_function_name = 'Z_FUNCTION_MODULE'. ls_input = ... "设置输入参数 * 动态调用函数模块 ASSIGN (lv_function_name) TO <fs_function_module>. ASSIGN ls_input TO <fs_input>. CALL FUNCTION <fs_function_module> EXPORTING p_input = <fs_input> IMPORTING p_output = <fs_output>. * 获取输出参数 ASSIGN ls_output TO <fs_output>. ``` 在上面的代码中,我们首先定义了一个 Function Module Name 变量 lv_function_name 和输入参数 ls_input。然后,我们使用 ASSIGN 语句将 Function Module Name 分配给 FIELD-SYMBOLS 变量 <fs_function_module>,并将输入参数分配给 FIELD-SYMBOLS 变量 <fs_input>。 最后,使用 CALL FUNCTION 语句动态调用函数模块,并将输入参数传递给函数。然后,获取输出参数并将其分配给 FIELD-SYMBOLS 变量 <fs_output>。 希望这可以回答您的问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值