Вы находитесь на странице: 1из 3

method IF_GENIL_APPL_INTLAY~MODIFY_OBJECTS. **TRY. *CALL METHOD SUPER->IF_GENIL_APPL_INTLAY~MODIFY_OBJECTS * EXPORTING * IV_ROOT_LIST = * IV_RETURN_ROOT_LIST = ** IMPORTING ** ET_CHANGED_OBJECTS = * . **ENDTRY.

DATA lr_object TYPE REF TO if_genil_cont_root_object. DATA lr_child_list TYPE REF TO if_genil_container_objectlist. DATA lr_child TYPE REF TO if_genil_container_object. DATA lv_key TYPE ZDE_G4_PRODUCT_ID. DATA lv_mode TYPE crmt_delta. DATA lv_mode_child TYPE crmt_delta. DATA ls_changed_data LIKE LINE OF gt_pro_cat. DATA lr_msg TYPE REF TO cl_crm_genil_global_mess_cont. DATA ls_changed_object LIKE LINE OF et_changed_objects. DATA ls_changed_child_data LIKE LINE OF gt_pro_cat_item. DATA: lv_props_obj TYPE REF TO if_genil_obj_attr_properties. DATA lt_changed_attr TYPE crmt_attr_name_tab. DATA ls_changed_attr LIKE LINE OF lt_changed_attr. DATA ls_pro_cat LIKE LINE OF gt_pro_cat. DATA lv_item_no TYPE char10. DATA lv_key_child TYPE char10. FIELD-SYMBOLS <fs> LIKE LINE OF gt_pro_cat. FIELD-SYMBOLS <fs_child> LIKE LINE OF gt_pro_cat_item. FIELD-SYMBOLS : <name> TYPE name_komp, <old> TYPE simple, <new> TYPE simple. CALL METHOD iv_root_list->get_first RECEIVING rv_result = lr_object. WHILE lr_object IS BOUND. CALL METHOD lr_object->get_key IMPORTING es_key = lv_key. lv_mode = lr_object->get_delta_flag( ). if lv_mode IS INITIAL. CALL METHOD LR_OBJECT->GET_CHILDREN EXPORTING IV_AS_COPY = 'X' RECEIVING RV_RESULT = lr_child_list. CALL METHOD lr_child_list->get_first RECEIVING rv_result = lr_child. lv_props_obj = lr_child->get_attr_props_obj( ). lv_mode_child = lr_child->get_delta_flag( ). if lv_mode_child = 'N'. SELECT MAX( item_no ) FROM zg4_pcat_items INTO lv_item_no. elseif lv_mode_child = 'M' or lv_mode_child = 'C' or lv_mode_child = 'D'.

CALL METHOD lv_props_obj->get_name_tab_4_property EXPORTING iv_property = if_genil_obj_attr_properties=>modified IMPORTING et_names = lt_changed_attr. CALL METHOD lr_child->get_key IMPORTING es_key = lv_key_child. READ TABLE gt_pro_cat_item ASSIGNING <fs_child> WITH KEY item_no = lv_ke y_child. endif. else. lv_props_obj = lr_object->get_attr_props_obj( ). * which attributes were modified? CALL METHOD lv_props_obj->get_name_tab_4_property EXPORTING iv_property = if_genil_obj_attr_properties=>modified IMPORTING et_names = lt_changed_attr. lr_msg = lr_object->get_global_message_container( ). " Update group data READ TABLE gt_pro_cat ASSIGNING <fs> WITH KEY PRODUCT_CAT_ID = lv_key. ENDIF. if <fs> IS ASSIGNED. CASE lv_mode. WHEN 'M' OR 'C'. CALL METHOD lr_object->get_attributes IMPORTING es_attributes = ls_changed_data. LOOP AT lt_changed_attr ASSIGNING <name>. ASSIGN COMPONENT <name> OF STRUCTURE <fs> to <old>. ASSIGN COMPONENT <name> OF STRUCTURE ls_changed_data to <new>. if <old> IS ASSIGNED AND <new> IS ASSIGNED. <old> = <new>. ENDIF. ENDLOOP. <fs>-mode = 'C'. CALL METHOD cl_crm_genil_container_tools=>build_object_id EXPORTING is_object_key = lv_key RECEIVING rv_result = ls_changed_object-object_id. * * ** ** * * * INSERT ls_changed_object INTO TABLE et_changed_objects. IF <fs> IS ASSIGNED. LOOP AT lt_changed_attr INTO <name>. lv_name = ls_changed_attr. ASSIGN COMPONENT <name> OF STRUCTURE ls_changed_data TO <fs>. ENDLOOP.

ENDIF. ENDCASE. ELSE. CASE lv_mode_child. WHEN 'N'. CALL METHOD lr_child->get_attributes IMPORTING es_attributes = ls_changed_child_data. MOVE-CORRESPONDING ls_changed_child_data to gs_pro_cat_item. lv_item_no = lv_item_no + 1. CALL FUNCTION 'CONVERSION_EXIT_ALPHA_INPUT' EXPORTING INPUT = lv_item_no IMPORTING OUTPUT = lv_item_no. gs_pro_cat_item-item_no = lv_item_no. gs_pro_cat_item-created_by = sy-uname. gs_pro_cat_item-created_on = sy-datum. CLEAR gs_pro_cat. READ TABLE gt_pro_cat INTO gs_pro_cat WITH KEY product_cat_id = lv_key

. if sy-subrc = 0. gs_pro_cat_item-product_guid = gs_pro_cat-product_guid. gs_pro_cat_item-product_cat_id = lv_key. endif. gs_pro_cat_item-mode = 'N'. append gs_pro_cat_item to gt_pro_cat_item . CLEAR: lv_key, lv_key_child. WHEN 'M' or 'C'. CALL METHOD lr_child->get_attributes IMPORTING es_attributes = ls_changed_child_data. LOOP AT lt_changed_attr ASSIGNING <name>. ASSIGN COMPONENT <name> OF STRUCTURE <fs_child> to <old>. ASSIGN COMPONENT <name> OF STRUCTURE ls_changed_child_data to <new>. if <old> IS ASSIGNED AND <new> IS ASSIGNED. <old> = <new>. ENDIF. ENDLOOP. <fs_child>-mode = 'M'. CALL METHOD cl_crm_genil_container_tools=>build_object_id EXPORTING is_object_key = lv_key_child RECEIVING rv_result = ls_changed_object-object_id. INSERT ls_changed_object INTO TABLE et_changed_objects. WHEN 'D'. append <fs_child> to GT_PRO_CAT_ITEM_del. DELETE TABLE gt_pro_cat_item FROM <fs_child>. ENDCASE. lr_child = lr_child_list->get_next( ). ENDIF. lr_object = iv_root_list->get_next( ). ENDWHILE. endmethod.

Вам также может понравиться