首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >声明BAdi的动态调用?

声明BAdi的动态调用?
EN

Stack Overflow用户
提问于 2021-10-02 21:32:48
回答 1查看 580关注 0票数 1

我想为BAdI实现定义一个对象,它不会以声明中的名称初始化BAdI。

我不想要的示例

代码语言:javascript
复制
DATA l_split_badi TYPE REF TO fieb_get_bank_stmts_x.

问题1 :我想要类似于

代码语言:javascript
复制
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_baseGET BADI l_split_badi TYPE ('FIEB_GET_BANK_STMTS_X')的解决方案之后,下面的CALL BADI l_split_badi->split行会出现相同的语法错误:

代码语言:javascript
复制
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.
EN

回答 1

Stack Overflow用户

发布于 2021-10-02 22:24:16

问题1

对于BAdIs,它是增强点的一部分(通过事务代码BAdI显示SE18,您就会知道),您不能使用CREATE OBJECT,而是使用具有动态变体的:

代码语言:javascript
复制
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中。必须使用的动态变体。

代码语言:javascript
复制
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.
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69420423

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档