我想为BAdI实现定义一个对象,它不会以声明中的名称初始化BAdI。
我不想要的示例:
DATA l_split_badi TYPE REF TO fieb_get_bank_stmts_x.问题1 :我想要类似于
DATA l_split_badi TYPE REF TO object.
lv_class_name = 'fieb_get_bank_stmts_x'.
create object l_split_badi type (lv_class_name).如果我像上面那样声明,我会得到以下语法错误:
"L_SPLIT_BADI“在这里不是有效的BAdI句柄。
我需要执行这种实现的原因是,当将更改请求导入到具有较旧版本的系统时,导入失败是因为使用TYPE REF TO进行BAdI声明(因为系统中不存在BAdI )。
我的想法是使用动态声明,以避免在导入更改请求时进行预检查。
任何想法都欢迎!感谢大家!
编辑问题2:在Sandra提出使用DATA l_split_badi TYPE REF TO cl_badi_base和GET BADI l_split_badi TYPE ('FIEB_GET_BANK_STMTS_X')的解决方案之后,下面的CALL BADI l_split_badi->split行会出现相同的语法错误:
CALL BADI l_split_badi->split
EXPORTING
i_string = lv_cont
IMPORTING
et_string = lt_xml_string
EXCEPTIONS
split_not_possible = 1
wrong_format = 2.发布于 2021-10-02 22:24:16
问题1
对于BAdIs,它是增强点的一部分(通过事务代码BAdI显示SE18,您就会知道),您不能使用CREATE OBJECT,而是使用具有动态变体的:
DATA badi TYPE REF TO cl_badi_base.
TRY.
GET BADI badi TYPE ('FIEB_GET_BANK_STMTS_X')...
CATCH cx_badi_unknown_error INTO DATA(lx).
" The BAdI doesn't exist, handle the case...
ENDTRY.编辑:注意实例声明引用的是CL_BADI_BASE,它是所有BAdI定义的超类。
问题2
静态调用方法SPLIT无效,因为SPLIT不存在于CL_BADI_BASE中。必须使用的动态变体。
CALL BADI l_split_badi->('SPLIT')
EXPORTING
i_string = lv_cont
IMPORTING
et_string = lt_xml_string
EXCEPTIONS
split_not_possible = 1
wrong_format = 2.https://stackoverflow.com/questions/69420423
复制相似问题