动态创建子类的对象

2020-09-15 19:20发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)你好 我是Abap的新手,我想...

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


你好

我是Abap的新手,我想创建一个像控制器这样的父类,以及两个像模型一样的子类。

当我尝试创建动态类的对象来调用该方法时,我找不到解决方法。

这是我的代码示例,我知道我错过了一些事情。

*方法set_all_data。

DATA(方法名称)= | SET_ {组件->名称} |。

调用方法me->(方法名称)//
PARAMETER-TABLE参数。

*

当我通过名称class时,我想用me->代替该类的动态对象。

我希望任何人都能帮助我。

最佳

 CLASS lcl_controller定义
 *    上市
     创建公共。
   公共部分。

     方法构造函数
       导入model_name TYPE seoclsname。

     方法set_all_data
              导入model_name TYPE seoclsname可选
                        it_table TYPE数据可选。

     方法get_all_data。


   受保护的部分。
   专用部分。
     CLASS-DATA:lo_model类型REF TO对象,
                 lv_model TYPE seoclsname,
                 lt_table TYPE REF TO数据。

 ENDCLASS。



 类别lcl_controller的实现。

   METHOD构造函数。

     me-> lv_model = model_name。

 终结法。

   方法set_all_data。

     数据:struct_descr类型参考cl_abap_structdescr,
           参数TYPE abap_parmbind,
           参数TYPE abap_parmbind_tab。



     struct_descr = CAST cl_abap_structdescr(cl_abap_datadescr => describe_by_data(it_table))。



     环回struct_descr-> components引用到DATA(component)。

       清除参数。

       尝试。



           将ASSIGN COMPONENT组件->结构名称it_table转换为FIELD-SYMBOL()。

           如果sy-subrc = 0。

             参数名称=组件->名称。

             parameter-kind = cl_abap_objectdescr =>返回。

             将的引用获取到参数值中。



             INSERT参数INTO TABLE参数。

             DATA(方法名称)= | SET_ {组件->名称} |。



             呼叫方法me->(method_name)

               PARAMETER-TABLE参数。

           万一。



         捕获cx_sy_dyn_call_error INTO DATA(exc_ref)。

           DATA(exc_text)= exc_ref-> get_text()。

           消息exc_text类型" I"。

       ENDTRY。

     结局。

   终结法。



   方法get_all_data。



   终结法。



 ENDCLASS。



 CLASS model_one定义

   从lcl_controller继承。



   公共部分。

     类型:t_model的开始,

              名称TYPE字符串,
              secondname TYPE字符串,
            t_model的结尾。
     数据:wa_model TYPE t_model。

     方法构造函数。
     方法set_name
       IMPORTING!name TYPE字符串。

     方法get_name
       返回值(名称)TYPE字符串。

     方法set_secondname
       IMPORTING!secondname TYPE字符串。

     方法get_secondname
       返回值(第二名)TYPE字符串。
 ENDCLASS。



 CLASS model_one IMPLEMENTATION。
  METHOD构造函数。
     super-> constructor()。
  终结法。

   方法set_name。
     me-> wa_model-name =名称。
   终结法。

   方法get_name。
     名称= me-> wa_model-name。
   终结法。

   方法set_secondname。
     me-> wa_model-secondname =第二名。
   终结法。


   方法get_secondname。
     secondname =我-> wa_model-secondname。
   终结法。
 ENDCLASS。



 CLASS model_two DEFINITION
     从lcl_controller继承。
   公共部分。

     类型:开始于t_model_two,
              名称TYPE字符串,
              secondname TYPE字符串,
            t_model_two的结尾。
     数据:wa_model_two类型t_model_two。




  方法构造函数。

     方法set_name
       IMPORTING!name TYPE字符串。

     方法get_name
       返回值(名称)TYPE字符串。

     方法set_secondname
       IMPORTING!secondname TYPE字符串。

     方法get_secondname
       返回值(第二名)TYPE字符串。

 ENDCLASS。

 CLASS model_two IMPLEMENTATION。

   METHOD构造函数。
     super-> constructor()。
  终结法。
   方法set_name。
     me-> wa_model_two-name =名称。
   终结法。
   方法get_name。
     名称= me-> wa_model_two-name。
   终结法。

   方法set_secondname。
     me-> wa_model_two-secondname =第二名。
   终结法。

   方法get_secondname。
     secondname =我-> wa_model_two-secondname。
   终结法。
 ENDCLASS。


 类型:tt_model的开始,
          名称TYPE字符串,
          secondname TYPE字符串,
        tt_model的结尾。
 数据:lt_model类型tt_model。
 lt_model-name ='JHON'。
 lt_model-secondname ='PETER'。

 选择开始。


   DATA(lo_controller)=新的lcl_controller(model_name ='MODEL_ONE')。

   lo_controller-> set_all_data(it_table = lt_model)。