版权声明:本文为博主汪子熙原创文章,未经博主允许不得转载。 https://cloud.tencent.com/developer/article/1439724
关于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>.