在运行时访问Super类的受保护属性

2020-08-27 08:37发布

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

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


您好,ALl

标准FM之一具有返回错误消息的类。 此类中的属性为Protected。 因此,我将此FM复制到自定义FM。 由于保护了类属性,因此我创建了一个Sub类,并将此标准类指定为Super类,并选择了继承。 在运行时,我能够将错误消息放入Super类,但无法将其移入子类。 你能帮忙吗?

标准班级:

lo_mapping-> exec_mapping_in()。

lo_mapping-> mo_message-> mt_message。 " Mt_message是我要使用的受保护属性。

我创建了自定义类:

数据:lo_sub类型参考ycl_replace_inherit。

如何将超类数据移至自定义类并使用受保护的属性?

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

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


您好,ALl

标准FM之一具有返回错误消息的类。 此类中的属性为Protected。 因此,我将此FM复制到自定义FM。 由于保护了类属性,因此我创建了一个Sub类,并将此标准类指定为Super类,并选择了继承。 在运行时,我能够将错误消息放入Super类,但无法将其移入子类。 你能帮忙吗?

标准班级:

lo_mapping-> exec_mapping_in()。

lo_mapping-> mo_message-> mt_message。 " Mt_message是我要使用的受保护属性。

我创建了自定义类:

数据:lo_sub类型参考ycl_replace_inherit。

如何将超类数据移至自定义类并使用受保护的属性?

付费偷看设置
发送
7条回答
灬番茄
1楼-- · 2020-08-27 09:00

请不要复制标准对象,这几乎总是一种不好的做法,因为您将与软件升级不同步。

相反,使用"增强框架"通常是更好的做法。

使用增强框架,您可以添加公共方法来访问私有或受保护的成员。 如果要避免将来升级时出现编译错误,请避免在自定义成员ZZ之前使用新的标准方法来产生冲突名称,并避免由于删除或更改了标准成员而导致的错误,请执行以下操作:

 将(ASTRIBUTENAME)指定为FIELD-SYMBOL()。
 如果sy-subrc = 0。
   结果= <属性>。
 万一。

 尝试。
 通话方式('METHODNAME')...
 捕获cx_root。
 ...
 ENDTRY。
DafaDDDa
2楼-- · 2020-08-27 09:05

确定。 您建议使用新方法来增强标准类并使用它。

Violet凡
3楼-- · 2020-08-27 08:54

没有确切的代码会有点困难。

但是您可以尝试使用此方法( 您想在Abap单元中测试受保护的方法)

将your_class定义类延迟。

将the_super_class定义类本地朋友your_class

...

Alawn_Xu
4楼-- · 2020-08-27 09:06

Phanindra Annaparthi

只需替换/scwm/cl_mapin_id_replace 带有子类的代码将不起作用,因为 mo_message 隐藏了属性。 lo_mapping-> mo_message 的解释是什么? 它不具有某种获取消息的getter方法吗?

您是否使用其他方法来解决此问题? 复制标准代码确实应该是最后的选择...

此外,使用COMMENT函数对其他人的响应做出反应,而ANSWER仅用于发布解决方案。

Cikesha
5楼-- · 2020-08-27 09:07

让我说出完整的逻辑。

数据:
     lo_mapping类型参考/scwm/cl_mapin_id_replace。
   BREAK-POINT ID/scwm/erpintegration。
   通话功能'/SCWM/QRFC_ENQUEUE'
     例外情况
       ex_error = 1。
   如果sy-subrc <> 0。
     消息e141(/scwm/l3)出现ex_error。
   万一。
 *将更新任务设置为本地以允许重新处理QRFC
 /scwm/cl_mapin => set_update_handling()。
   创建对象lo_mapping
     出口
       is_bapi_header_data = header_data" #EC ENHOK
       iv_bapi_sender_system =发送者系统
       is_bapi_techn_control = techn_control
       is_bapi_header_data_spl = header_data_spl
       is_bapi_header_control_spl = header_control_spl
       it_bapi_header_partner = header_partner []
       it_bapi_header_partner_addr = header_partner_addr []
       it_bapi_header_deadlines = header_deadlines []
       it_bapi_item_data = item_data []" #EC ENHOK
       it_bapi_item_org = item_org []
       it_bapi_item_stock_trans = item_stock_trans []
       it_bapi_item_coding_block = item_coding_block []
       it_bapi_itm_ref_purchase_order = item_ref_purchase_order []
       it_bapi_item_ref_qty = item_ref_quantity []
       it_bapi_item_serial_no = item_serial_no []
       it_bapi_item_data_spl = item_data_spl []
       it_bapi_text_header = text_header []
       it_bapi_text_lines = text_lines []
       it_bapi_handling_unit_header = handling_unit_header []
       it_bapi_handling_unit_item = processing_unit_item []
       it_bapi_handling_unit_serno = processing_unit_serno []
       it_bapi_extension1 = extension1 []
       it_bapi_extension2 = extension2 []
       it_bapi_return =返回[]
       it_bapi_tokenreference =令牌引用[]
       it_bapi_handling_unit_header_c = handling_unit_header_cross []
       it_bapi_hu_identifiers = handling_unit_identifiers []
       it_handling_unit_header_epc = processing_unit_header_epc []
       it_handling_unit_item_epc = processing_unit_items_epc []
       it_handling_unit_item_cwm = cwm_hu_item []
       it_bapi_item_data_cwm = cwm_item_data []
       it_bapi_item_reference_wmd = item_reference_wmd []。
 *开始映射-----------------------------------------------  -------- *
   lo_mapping-> exec_mapping_in()。
 *检查提交控制----------------------------------------------  -*
   通话功能'/SCWM/COMMIT_CONTROL'
     出口
       io_message = lo_mapping-> mo_message
     例外情况
       ex_error = 1
       ex_enqueue = 2
       其他= 3。

 现在可以访问lo_mapping-> mo_messsage-> mt_message。  mt_message受保护。

 标准FM;/SCWM/INB_DELIVERY_REPLACE进行测试。 您无需输入也可以执行。
SAP砖家
6楼-- · 2020-08-27 08:50

感谢大家的快速响应。 除了复制FM becoz之外,我没有其他选择,这些消息最后已清除。 我也无法创建隐式增强。

此l o_mapping-> mo_message没有正确的方法来获取此数据。 此数据仅在属性中。

一周热门 更多>