具有参数REF TO接口的动态CREATE OBJECT。

2020-08-26 07:39发布

点击此处---> 群内免费提供SAP练习系统(在群公告中)加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)我正在尝试动态调用类的构造函数,...

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

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


我正在尝试动态调用类的构造函数,其中参数是引用接口的。 但是,我一直在获取转储DYN_CALL_METH_PARAM_TYPE,CX_SY_DYN_CALL_ILLEGAL_TYPE。

试图将当前参数传递给类"/img/UI2/CL_FLP_CONT_MGR"的方法" CONSTRUCTOR"的形式参数" IO_MESSAGING"。 这导致类型冲突。

我尝试使用RTTS,CREATE DATA dat TYPE REF TO(类名),但遇到相同的错误。 任何人都有如何使它工作的想法。 演示此问题的示例代码如下。 它在754,s4hana系统上运行。

数据lt_tile_tm_combination类型/ui2/if_flp_cont_mgr => tt_tile_tm_combination_sorted。
 数据lo_flp_cont_mgr TYPE REF TO对象。/ui2/if_flp_cont_mgr。
 DATA lo_catalog_api类型引用对象。/ui2/if_fdm_catalog_api。
 DATA lo_messaging TYPE REF TO对象。/ui2/if_fcm_messaging。
 数据lx_root类型参考cx_root。
 尝试。
     创建对象lo_catalog_api类型('/UI2/CL_FDM_CATALOG_API')
       出口
         iv_scope ='CUST'"或'CONF'
         iv_use_cache = abap_true。
   捕获cx_root INTO lx_root。
     消息lx_root TYPE'E'。
 ENDTRY。
 创建对象lo_messaging TYPE('/UI2/CL_FCM_MESSAGING')。
 创建对象lo_flp_cont_mgr TYPE('/UI2/CL_FLP_CONT_MGR')"/img/ui2/cl_flp_cont_mgr
   出口
     iv_scope ='CUST'
     io_catalog_api = lo_catalog_api"对/​​UI2/IF_FDM_CATALOG_API的类型引用
     io_messaging = lo_messaging。  " TYPE REF TO/UI2/IF_FCM_MESSAGING
 调用方法lo_flp_cont_mgr->('/UI2/IF_FLP_CONTR_MGR〜GET_ALL_TILES_TMS')
     接收rt_tile_tm_combination = lt_tile_tm_combination。
 
4条回答
clever101
2020-08-26 08:03

问题是您正在使用类型为 object 的通用引用变量来访问您的实例 创建并将它们传递给构造函数会导致类型冲突,因为在运行时会检查变量的静态类型。 为什么要避免使用接口类型,是否有特定原因? 这样应该可以正常工作:

 DATA lt_tile_tm_combination TYPE/ui2/if_flp_cont_mgr => tt_tile_tm_combination_sorted。
 数据lo_flp_cont_mgr类型参考/ui2/if_flp_cont_mgr。
 数据lo_catalog_api类型参考/ui2/if_fdm_catalog_api。
 数据lo_messaging类型参考/ui2/if_fcm_messaging。
 数据lx_root类型参考cx_root。

 尝试。
     创建对象lo_catalog_api类型('/UI2/CL_FDM_CATALOG_API')
       出口
         iv_scope ='CUST'"或'CONF'
         iv_use_cache = abap_true。
   捕获cx_root INTO lx_root。
     消息lx_root TYPE'E'。
 ENDTRY。
 创建对象lo_messaging TYPE('/UI2/CL_FCM_MESSAGING')。
 创建对象lo_flp_cont_mgr类型('/UI2/CL_FLP_CONT_MGR')
   出口
     iv_scope ='CUST'
     io_catalog_api = lo_catalog_api
     io_messaging = lo_messaging。

 lt_tile_tm_combination = lo_flp_cont_mgr-> get_all_tiles_tms()。
 

如果出于某种原因不能更改变量类型,则其他选项是应用CAST运算符:

创建对象lo_flp_cont_mgr TYPE('/UI2/CL_FLP_CONT_MGR')
   出口
     iv_scope ='CUST'
     io_catalog_api = CAST/ui2/if_fdm_catalog_api(lo_catalog_api)
     io_messaging = CAST/ui2/if_fcm_messaging(lo_messaging)。

 lt_tile_tm_combination = CAST/ui2/if_flp_cont_mgr(lo_flp_cont_mgr)-> get_all_tiles_tms()。
 

一周热门 更多>