Jerry的SAP One Order框架重构的几版代码

时间:2022-06-22
本文章向大家介绍Jerry的SAP One Order框架重构的几版代码,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

版权声明:本文为博主汪子熙原创文章,未经博主允许不得转载。 https://jerry.blog.csdn.net/article/details/87894832

关于SAP One Order重构的介绍,请参考我的文章:

Hello World, S/4HANA for Customer Management 1.0

我的第一版:

FIELD-SYMBOLS: <global_to_insert> TYPE ANY TABLE,
                              <global_to_update> TYPE ANY TABLE,
                              <global_to_delete> TYPE ANY TABLE.
LOOP AT it_header_guid_to_save INTO iv_single_header_guid.
      lt_supported_component = get_component_by_guid( iv_single_header_guid).
      LOOP AT lt_supported_component INTO ls_supported_component.
             lv_convert_class = get_conv_class_by_comp( ls_supported_component-name).
             CHECK lv_convert_class IS NOT  INITIAL.
             CALL METHOD lo_convertor->convert_1o_to_s4
                  EXPORTING
                       iv_ref_guid     =  iv_single_header_guid
                       iv_ref_kind     = 'A'
             CHANGING
                     ct_to_insert     = <global_to_insert>
                     ct_to_update   = <global_to_update>
                     ct_to_delete    = <global_to_delete>.
     ENDLOOP.
ENDLOOP.
CALL FUNCTION 'CRM_SRVO_H_UPDATE_DU' IN UPDATE TASK
      EXPORTING
        it_to_insert   = <global_to_insert>
        it_to_update = <global_to_update>
        it_to_delete  = <global_to_delete>.

和首席架构师Carsten讨论后的第二版:

FIELD-SYMBOLS: <global_to_insert> TYPE ANY TABLE,
                              <global_to_update> TYPE ANY TABLE,
                              <global_to_delete> TYPE ANY TABLE.
LOOP AT it_header_guid_to_save INTO iv_single_header_guid.
      lt_supported_component = get_component_by_guid( iv_single_header_guid).
      LOOP AT lt_supported_component INTO ls_supported_component.
             lv_convert_class = get_conv_class_by_comp( ls_supported_component-name).
             CHECK lv_convert_class IS NOT  INITIAL.
             CALL METHOD lo_convertor->convert_1o_to_s4
                  EXPORTING
                       iv_ref_guid     =  iv_single_header_guid
                       iv_ref_kind     = 'A'
             CHANGING
                       cs_workarea   = ls_local_change.
             CALL METHOD merge_local_change_2_global
                 EXPORTING
                      is_local_change  = ls_local_change
                 CHANGING
                     ct_to_insert     = <global_to_insert>
                     ct_to_update   = <global_to_update>
                     ct_to_delete    = <global_to_delete>.
     ENDLOOP.
ENDLOOP.
CALL FUNCTION 'CRM_SRVO_H_UPDATE_DU' IN UPDATE TASK
      EXPORTING
        it_to_insert =   <global_to_insert>
        it_to_update = <global_to_update>
        it_to_delete =  <global_to_delete>.

2017年5月15号的第三版,非常接近最终版了:

FIELD-SYMBOLS: <global_to_insert> TYPE ANY TABLE,
                              <global_to_update> TYPE ANY TABLE,
                              <global_to_delete> TYPE ANY TABLE.
LOOP AT it_header_guid_to_save INTO iv_single_header_guid.
      lt_supported_component = get_component_by_guid( iv_single_header_guid).
      LOOP AT lt_supported_component INTO ls_supported_component.
             lv_convert_class = get_conv_class_by_comp( ls_supported_component-name).
             CHECK lv_convert_class IS NOT  INITIAL.
             CALL METHOD lo_convertor->convert_1o_to_s4
                  EXPORTING
                       iv_ref_guid     =  iv_single_header_guid
                       iv_ref_kind     = 'A'
             CHANGING
                       cs_workarea   = ls_whole_header_change. ---- new header work area!!!
     ENDLOOP.
     CASE mv_header_change_mode.
           WHEN ‘A’.
                 INSERT ls_whole_header_change INTO TABLE <global_to_insert>.
           WHEN ‘B’.
                  INSERT ls_whole_header_change INTO TABLE <global_to_update>.
          WHEN ‘D’.
                 INSERT ls_whole_header_change INTO TABLE <global_to_delete>.
     ENDCASE.
ENDLOOP.
CALL FUNCTION 'CRM_SRVO_H_UPDATE_DU' IN UPDATE TASK
      EXPORTING
        it_to_insert =   <global_to_insert>
        it_to_update = <global_to_update>
        it_to_delete =  <global_to_delete>.