我有一个 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/