REPORT ZHANA_PRODUCT_READ_COMPLETE.PARAMETER: prd_id TYPE comm_product-product_id OBLIGATORY.CALL FUNCTION 'ZCRM_PRODUCT_GET_ALL_DATA'EXPORTINGiv_product_id = prd_id.FUNCTION zcrm_product_get_all_data.
*"----------------------------------------------------------------------
*"*"Local Interface:
*" IMPORTING
*" REFERENCE(IV_PRODUCT_ID) TYPE COMM_PRODUCT-PRODUCT_ID
*"----------------------------------------------------------------------DATA: lt_product_assigned TYPE STANDARD TABLE OF comm_prprdcatr,ls_product_assigned LIKE LINE OF lt_product_assigned,lt_cate_set_rel TYPE comt_prcat_frag_rel_tab,ls_settype TYPE comt_settype_ext,ls_cate_sel_rel LIKE LINE OF lt_cate_set_rel,lr_old TYPE REF TO data,lv_set_guid TYPE comt_frg_guid,lr_new TYPE REF TO data,lr_data TYPE REF TO data,params TYPE TABLE OF rfc_funint,ptab TYPE abap_func_parmbind_tab,ptab_line TYPE abap_func_parmbind,etab TYPE abap_func_excpbind_tab,etab_line TYPE abap_func_excpbind,ls_params LIKE LINE OF params,nametab TYPE TABLE OF x031l,ls_nametab LIKE LINE OF nametab,ls_product TYPE comm_product,lr_tabdescr TYPE REF TO cl_abap_tabledescr.FIELD-SYMBOLS: <data> TYPE any,<field> TYPE any,<struc> TYPE any,<line> TYPE any,<table> TYPE ANY TABLE.SELECT SINGLE product_id product_guid INTO ls_product FROM comm_product WHERE product_id = iv_product_id.IF sy-subrc <> 0.WRITE:/ 'Cannot find product with ID: ' , iv_product_id COLOR COL_NEGATIVE INTENSIFIED ON.RETURN.ENDIF.CALL METHOD cl_com_product_org_type=>comc_pr_org_link_read_allIMPORTINGet_pr_org_rel = lt_rel_metaEXCEPTIONSnot_found = 1OTHERS = 2.SELECT * INTO TABLE lt_product_assigned FROM comm_prprdcatr WHERE product_guid = ls_product-product_guid.LOOP AT lt_product_assigned INTO ls_product_assigned.CALL FUNCTION 'COM_PRCAT_FRAG_REL_READ'EXPORTINGiv_category_guid = ls_product_assigned-category_guidIMPORTINGet_prcat_frag_rel = lt_cate_set_relEXCEPTIONSwrong_call = 1OTHERS = 2.ASSERT sy-subrc = 0.PERFORM add_settype CHANGING lt_cate_set_rel.LOOP AT lt_cate_set_rel INTO ls_cate_sel_rel.CALL FUNCTION 'COM_SETTYPE_READ_SINGLE'EXPORTINGiv_settype_guid = ls_cate_sel_rel-frgtype_guidIMPORTINGes_settype = ls_settypeEXCEPTIONSnot_found = 1no_import_values = 2no_text_found = 3OTHERS = 4.CHECK ls_settype-func_read IS NOT INITIAL.CLEAR: params,ptab,etab.CALL FUNCTION 'RFC_GET_FUNCTION_INTERFACE'EXPORTINGfuncname = ls_settype-func_readTABLESparams = params.LOOP AT params INTO ls_params WHERE optional = space.CLEAR: ptab_line.CASE ls_params-paramclass.WHEN 'E'.ptab_line-name = ls_params-parameter.ptab_line-kind = abap_func_importing.CREATE DATA lr_data TYPE (ls_params-tabname).ptab_line-value = lr_data.INSERT ptab_line INTO TABLE ptab.WHEN 'I'. "exporting parameter in the programptab_line-name = ls_params-parameter.ptab_line-kind = abap_func_exporting.CREATE DATA lr_data TYPE (ls_params-tabname).ASSIGN lr_data->* TO <data>.IF ptab_line-name = co_set_guid.PERFORM get_set_guid USING ls_product-product_guid ls_settype CHANGING lv_set_guid.<data> = lv_set_guid.ELSEIF ptab_line-name = co_product_guid.<data> = ls_product-product_guid.ENDIF.ptab_line-value = lr_data.INSERT ptab_line INTO TABLE ptab.WHEN 'X'.etab_line-name = 'NOT_FOUND'.etab_line-value = 10.INSERT etab_line INTO TABLE etab.ENDCASE.ENDLOOP.ULINE.WRITE:/ 'Start processing Set type:' , ls_settype-frgtype_id COLOR COL_TOTAL.CHECK ptab IS NOT INITIAL.CALL FUNCTION ls_settype-func_read PARAMETER-TABLE ptab EXCEPTION-TABLE etab.IF sy-subrc <> 0.WRITE:/ 'No data maintained for Set type:' , ls_settype-frgtype_id COLOR COL_NEGATIVE.ELSE.LOOP AT ptab INTO ptab_line WHERE kind = abap_func_importing.CHECK ptab_line-value IS NOT INITIAL.ASSIGN ptab_line-value->* TO <struc>.PERFORM display_content USING <struc> ptab_line-value.ENDLOOP.ENDIF.ENDLOOP.ENDLOOP.ENDFUNCTION.
FORM display_struct USING struc TYPE any.FIELD-SYMBOLS: <local_field1> TYPE any.DATA: lt_para_table1 TYPE abap_compdescr_tab,ls_line1 LIKE LINE OF lt_para_table1,lv_type TYPE i.CLEAR: lv_type.PERFORM get_field_table USING struc CHANGING lt_para_table1.DO.ASSIGN COMPONENT sy-index OF STRUCTURE struc TO <local_field1>.IF sy-subrc <> 0.EXIT.ENDIF.IF <local_field1> IS NOT INITIAL." IF <local_field1> is still structure" THENTRY.lr_strucdescr ?= cl_abap_typedescr=>describe_by_data( <local_field1> ).lv_type = co_struct.CATCH cx_sy_move_cast_error.TRY.lr_tabledescr ?= cl_abap_tabledescr=>describe_by_data( <local_field1> ).lv_type = co_table.CATCH cx_sy_move_cast_error.TRY.lr_refdescr ?= cl_abap_refdescr=>describe_by_data( <local_field1> ).CATCH cx_sy_move_cast_error.lv_type = co_ref.ENDTRY.lv_type = co_other.ENDTRY.ENDTRY.CASE lv_type.WHEN co_struct.PERFORM display_struct USING <local_field1>.WHEN co_table.PERFORM display_table USING <local_field1>.WHEN co_ref.BREAK-POINT.WHEN co_other.READ TABLE lt_para_table1 INTO ls_line1 INDEX sy-index.WRITE:/ ls_line1-name, ' Content:' , <local_field1> COLOR COL_POSITIVE INTENSIFIED ON.ENDCASE.ENDIF.ENDDO.
ENDFORM.FORM add_settype CHANGING rel_table TYPE comt_prcat_frag_rel_tab.DATA: lt_table TYPE STANDARD TABLE OF comc_settype,lt_copy LIKE lt_table,ls_rel_line TYPE comt_prcat_frag_rel,ls_table LIKE LINE OF lt_table.CHECK lv_first_time = abap_true.ls_table-frgtype_id = 'COMM_PR_STATUS'.APPEND ls_table TO lt_copy.ls_table-frgtype_id = 'COMM_PR_CATEGORY'.APPEND ls_table TO lt_copy.SELECT frgtype_guid frgtype_id INTO CORRESPONDING FIELDS OF TABLE lt_table FROM comc_settypeFOR ALL ENTRIES IN lt_copy WHERE frgtype_id = lt_copy-frgtype_id.LOOP AT lt_table INTO ls_table.ls_rel_line-frgtype_guid = ls_table-frgtype_guid.APPEND ls_rel_line TO rel_table.ENDLOOP.lv_first_time = abap_false.ENDFORM.FORM get_field_table USING struc TYPE any CHANGING para_tab TYPE abap_compdescr_tab.TRY.lr_strucdescr ?= cl_abap_typedescr=>describe_by_data( struc ).CLEAR: para_tab.para_tab = lr_strucdescr->components.CATCH cx_sy_move_cast_error.ENDTRY.
ENDFORM.FORM display_table USING struc TYPE ANY TABLE.FIELD-SYMBOLS: <local_line2> TYPE any,<local_field2> TYPE any.DATA: lt_para_table TYPE abap_compdescr_tab,ls_line LIKE LINE OF lt_para_table.LOOP AT struc ASSIGNING <local_line2>.DO.PERFORM get_field_table USING <local_line2> CHANGING lt_para_table.ASSIGN COMPONENT sy-index OF STRUCTURE <local_line2> TO <local_field2>.IF sy-subrc <> 0.EXIT.ENDIF.IF <local_field2> IS NOT INITIAL.lr_typedescr = cl_abap_typedescr=>describe_by_data( <local_field2> ).TRY.lr_chardescr ?= lr_typedescr.READ TABLE lt_para_table INTO ls_line INDEX sy-index.WRITE:/ ls_line-name, ' Content:' , <local_field2> COLOR COL_POSITIVE INTENSIFIED ON.CATCH cx_sy_move_cast_error."struc or tableTRY."struclr_strucdescr ?= lr_typedescr.PERFORM display_struct USING <local_field2>.CATCH cx_sy_move_cast_error.TRY.lr_tabledescr ?= lr_typedescr.PERFORM display_table USING <local_field2>.CATCH cx_sy_move_cast_error.FIELD-SYMBOLS: <temp_table> TYPE REF TO data.ASSIGN <local_field2> TO <temp_table>.PERFORM display_ref USING <temp_table>.ENDTRY.ENDTRY.ENDTRY.ENDIF.ENDDO.ENDLOOP.
ENDFORM.FORM display_ref USING ref_data TYPE REF TO data.FIELD-SYMBOLS:<local_table> TYPE ANY TABLE,<line> TYPE any.ASSIGN ref_data->* TO <local_table>.LOOP AT <local_table> ASSIGNING <line>.PERFORM display_struct USING <line>.ENDLOOP.
ENDFORM.
FORM display_content USING struc TYPE any top_table TYPE REF TO data.FIELD-SYMBOLS: <local_table> TYPE ANY TABLE,<local_line> TYPE any,<local_field> TYPE any.lr_typedescr = cl_abap_typedescr=>describe_by_data( struc ).TRY.lr_strucdescr ?= lr_typedescr.PERFORM display_struct USING struc.CATCH cx_sy_move_cast_error."ASSIGN ptab_line-value->* TO <local_table>.ASSIGN top_table->* TO <local_table>.PERFORM display_table USING <local_table>.ENDTRY.
ENDFORM.FORM get_set_guid USING product_guid TYPE comm_prprdcatr-product_guid settype TYPE comt_settype_extCHANGING set_guid TYPE comt_frg_guid.READ TABLE lt_rel_metaWITH KEY org_type = settype-org_unitINTO ls_rel_meta.ASSERT sy-subrc = 0.DATA:lt_rel_table TYPE REF TO data,lt_set_table TYPE REF TO data,lt_set_table_sort TYPE REF TO data,lt_key_tab TYPE REF TO data,ls_key_line TYPE REF TO data,ls_result TYPE REF TO data,lt_rel_db_tab TYPE REF TO data,lt_set_guid TYPE comt_frg_guid_tab,lv_current TYPE abap_bool VALUE abap_true.FIELD-SYMBOLS:<rel_tab> TYPE ANY TABLE,<rel_tab_db> TYPE ANY TABLE,<set_tab> TYPE ANY TABLE,<key_line> TYPE any,<field> TYPE any,<result> TYPE any,<key_tab> TYPE ANY TABLE,<set_tab_sort> TYPE ANY TABLE."* create relation table:CREATE DATA lt_rel_tableTYPE (ls_rel_meta-link_table_ttyp).ASSIGN lt_rel_table->* TO <rel_tab>.ASSERT <rel_tab> IS ASSIGNED.CREATE DATA lt_key_tab TYPE (ls_rel_meta-link_sel_ttyp).ASSIGN lt_key_tab->* TO <key_tab>.ASSERT <key_tab> IS ASSIGNED.CREATE DATA lt_rel_db_tab TYPE (ls_rel_meta-link_table_ttyp).ASSIGN lt_rel_db_tab->* TO <rel_tab_db>.CREATE DATA ls_key_line TYPE (ls_rel_meta-link_sel_struc).ASSIGN ls_key_line->* TO <key_line>.ASSIGN COMPONENT 1 OF STRUCTURE <key_line> TO <field>.<field> = product_guid.ASSIGN COMPONENT 2 OF STRUCTURE <key_line> TO <field>.<field> = settype-frgtype_guid.INSERT <key_line> INTO TABLE <key_tab>.CALL FUNCTION ls_rel_meta-func_rel_read_muEXPORTINGit_product_set_type = <key_tab>iv_current = lv_currentiv_read_old_values = 'X'iv_update_buffer = spaceIMPORTINGet_rel = <rel_tab>et_rel_old = <rel_tab_db>EXCEPTIONSnot_found = 1wrong_call = 2OTHERS = 3.CHECK sy-subrc = 0.CREATE DATA ls_result TYPE (ls_rel_meta-link_table_struc).ASSIGN ls_result->* TO <result>.LOOP AT <rel_tab> ASSIGNING <result>.ASSIGN COMPONENT 'FRAGMENT_GUID' OF STRUCTURE <result> TO <field>.IF sy-subrc = 0.set_guid = <field>.ENDIF.EXIT.ENDLOOP.ENDFORM.