abap - 功能模块中的可选参数?

标签 abap function-module

我有一个 ABAP-OO 类,我想在方法 foo() 中调用一个函数模块。有两种情况(A 和 B)我必须使用方法 foo()。假设案例 A 是默认的,并且使用需要这样的功能模块:

METHOD foo.
  CALL FUNCTION 'A_FUNCTION'
    EXPORTING
      required_param_x = something
      required_param_y = something_else.
      " optional_param = " i am commented out and only need for case B
ENDMETHOD.

案例 B “很特殊”,还需要设置上面的 optional_param。我目前的情况是有第二种方法:
METHOD foo_b_case.
  CALL FUNCTION 'A_FUNCTION'
    EXPORTING
      required_param_x = something
      required_param_y = something_else
      optional_param = case_b_stuff.
ENDMETHOD.

当然,这是非常多余的。如上所示,我的现实生活中的编码也更加复杂。我的问题是,我怎样才能摆脱这种方法 foo_b_case( ) 并使 foo( ) 适合这两种情况?

可以说,我将参数“case_b_stuff”设为可选,并在每种情况下传递它。如果“case_b_stuff”是初始值,ABAP 如何处理“optional_param”?

最佳答案

要动态选择功能模块的参数,请查看 PARAMETER-TABLE关键词。不幸的是,这不适用于 RFC 调用,但对于本地调用,您可以将它与 IS SUPPLIED 一起使用健康)状况。

IF case_b_stuff IS SUPPLIED.
  "add the parameter to the table to be included in PARAMETER-TABLE call
ENDIF.
CALL FUNCTION 'A_FUNCTION'
  PARAMETER-TABLE
    lt_parameter
  EXCEPTION-TABLE
    lt_exception.

这样你就可以只有一个 foo方法。这种方法的主体是否整洁,是另一个问题。这都是因为 ABAP 不允许像在 Java 或 C++ 中那样重载方法名称。

关于abap - 功能模块中的可选参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26775278/

相关文章:

abap - 如何测试仅存在于远程系统中的RFC模块?

http-post - 调用 HTTP_POST 时发生错误请求错误?

oracle - 所有条目选择的 max_blocking_factor 和索引提示

dynamic - RFC_READ_TABLE 示例将数据转换回表

oop - 从 OOP 的角度来看,在接口(interface)中声明类型/属性是否正确?

import - 手动功能模块传输到另一个系统现有功能组?

asynchronous - 在不使用函数模块调用的情况下启动新线程

database - ABAP数据簇是如何存储在数据库中的?

abap - 什么是 : TYPE, TYPES、TYPE-POOL、TYPE-POOLS 和类型组?

abap - 通过功能模块调用逻辑数据库?