动态方法调用区分大小写
Dynamic method call is case-sensitive
最小工作示例:
CLASS lcl_some_class DEFINITION. ""// <-- this is obviously lower case
PUBLIC SECTION.
CLASS-METHODS some_static_method. ""// <-- this is obviously lower case
PROTECTED SECTION.
PRIVATE SECTION.
ENDCLASS.
CLASS lcl_some_class IMPLEMENTATION.
METHOD some_static_method.
" nothing
ENDMETHOD.
ENDCLASS.
END-OF-SELECTION.
DATA: lc_class_name_upper TYPE string VALUE 'LCL_SOME_CLASS',
lc_class_name_lower TYPE string VALUE 'lcl_some_class',
lc_method_name_upper TYPE string VALUE 'SOME_STATIC_METHOD',
lc_method_name_lower TYPE string VALUE 'some_static_method'.
CALL METHOD LCL_SOME_CLASS=>SOME_STATIC_METHOD. ""ok
CALL METHOD (lc_class_name_upper)=>(lc_method_name_upper). ""ok
CALL METHOD lcl_some_class=>SOME_STATIC_METHOD. ""ok
CALL METHOD (lc_class_name_lower)=>(lc_method_name_upper). ""failure
CALL METHOD LCL_SOME_CLASS=>some_static_method. ""ok
CALL METHOD (lc_class_name_upper)=>(lc_method_name_lower). ""failure
CALL METHOD lCl_SoMe_ClAsS=>sOmE_sTaTiC_mEtHoD. ""ok
我希望带有注释“失败”的行的行为与上面的相应行完全一样:不区分大小写。但相反,它们失败并显示以下消息之一:
CX_SY_DYN_CALL_ILLEGAL_CLASS / DYN_CALL_METH_CLASS_NOT_FOUND
en: The class could not be found during the dynamic method call.
de: Die Klasse beim dynamischen Methodenaufruf konnte nicht gefunden werden.
CX_SY_DYN_CALL_ILLEGAL_METHOD / DYN_CALL_METH_NOT_FOUND
en: The method could not be found during the dynamic call.
de: Die Methode konnte beim dynamischen Aufruf nicht gefunden werden.
有没有办法使动态调用大小写-在中敏感(除了明显的将字符串转换为大写)?
CALL METHOD - dynamic_meth 的官方 ABAP 文档很简单,关于 (class_name)=>(meth_name)
和 (class_name)=>meth
:
class_name expects a character-like field that must contain the name of a class in uppercase letters when the statement is executed
我没有看到任何使内核将名称本身转换为大写的解决方案。
注意:我不明白为什么在进行动态调用之前将自己的名称转换为大写会出现问题。
最小工作示例:
CLASS lcl_some_class DEFINITION. ""// <-- this is obviously lower case
PUBLIC SECTION.
CLASS-METHODS some_static_method. ""// <-- this is obviously lower case
PROTECTED SECTION.
PRIVATE SECTION.
ENDCLASS.
CLASS lcl_some_class IMPLEMENTATION.
METHOD some_static_method.
" nothing
ENDMETHOD.
ENDCLASS.
END-OF-SELECTION.
DATA: lc_class_name_upper TYPE string VALUE 'LCL_SOME_CLASS',
lc_class_name_lower TYPE string VALUE 'lcl_some_class',
lc_method_name_upper TYPE string VALUE 'SOME_STATIC_METHOD',
lc_method_name_lower TYPE string VALUE 'some_static_method'.
CALL METHOD LCL_SOME_CLASS=>SOME_STATIC_METHOD. ""ok
CALL METHOD (lc_class_name_upper)=>(lc_method_name_upper). ""ok
CALL METHOD lcl_some_class=>SOME_STATIC_METHOD. ""ok
CALL METHOD (lc_class_name_lower)=>(lc_method_name_upper). ""failure
CALL METHOD LCL_SOME_CLASS=>some_static_method. ""ok
CALL METHOD (lc_class_name_upper)=>(lc_method_name_lower). ""failure
CALL METHOD lCl_SoMe_ClAsS=>sOmE_sTaTiC_mEtHoD. ""ok
我希望带有注释“失败”的行的行为与上面的相应行完全一样:不区分大小写。但相反,它们失败并显示以下消息之一:
CX_SY_DYN_CALL_ILLEGAL_CLASS / DYN_CALL_METH_CLASS_NOT_FOUND
en: The class could not be found during the dynamic method call.
de: Die Klasse beim dynamischen Methodenaufruf konnte nicht gefunden werden.
CX_SY_DYN_CALL_ILLEGAL_METHOD / DYN_CALL_METH_NOT_FOUND
en: The method could not be found during the dynamic call.
de: Die Methode konnte beim dynamischen Aufruf nicht gefunden werden.
有没有办法使动态调用大小写-在中敏感(除了明显的将字符串转换为大写)?
CALL METHOD - dynamic_meth 的官方 ABAP 文档很简单,关于 (class_name)=>(meth_name)
和 (class_name)=>meth
:
class_name expects a character-like field that must contain the name of a class in uppercase letters when the statement is executed
我没有看到任何使内核将名称本身转换为大写的解决方案。
注意:我不明白为什么在进行动态调用之前将自己的名称转换为大写会出现问题。