Hi KP,
Only the following system statuses are downloaded:
Available
In the warehouse
Assigned in delivery note
At customer site
You have to use BAdI CRM_EQUI_LOAD method ENLARGE_INDOBJ_BDOC which could be enhanced to read additional information from equipment. You can use the following sample code to read the status from the status from the equipment and updates the product master.
DATA: ls_equi TYPE crmt_equi_mess,
lt_status TYPE comt_pr_status_maintain_tab,
ls_status TYPE comt_pr_status_maintain,
ls_product TYPE comt_product_maintain_api.
FIELD-SYMBOLS: <ls_status> TYPE comt_pr_status_maintain,
<ls_prod_indobj_bdoc> TYPE comt_prod_indobj_bdoc.
*******************************************************************
* EQP_STAUS = 50 -> Marked for deletion (equipment will be deleted via archiving)
* in this case set the status I1104 (to archive) for the iobject
*******************************************************************
LOOP AT it_equi_dmbdoc-equi INTO ls_equi WHERE equipment_flag = 'X' AND eqp_status = '50'.
READ TABLE ct_message_ext ASSIGNING <ls_prod_indobj_bdoc> WITH KEY header-com_product-product_id = ls_equi-equnr.
IF sy-subrc = 0.
READ TABLE <ls_prod_indobj_bdoc>-header-status ASSIGNING <ls_status> WITH KEY stat = 'I1104'.
IF sy-subrc = 4.
IF NOT <ls_prod_indobj_bdoc>-header-com_product-product_guid IS INITIAL.
* read status from db
CALL FUNCTION 'COM_PRD_STATUS_READ'
EXPORTING
iv_status_guid = <ls_prod_indobj_bdoc>-header-com_product-product_guid
* IV_ONLY_ACTIVE = 'X'
TABLES
et_status = lt_status
EXCEPTIONS
no_entry = 1
OTHERS = 2.
IF sy-subrc <> 0.
CALL FUNCTION 'CRM_EQUI_UPLOAD_ERROR_HANDLER'
EXPORTING
i_msg_id = 'IB_CRM_UPLOAD_MSG'
i_msg_no = '029'
i_msgv1 = 'ENLARGE_INDOBJ_BDOC'
CHANGING
c_error_seg = ct_error_segment.
RAISE equi_load_badi_error.
ELSE.
* any status found in db
READ TABLE lt_status INTO ls_status WITH KEY stat = 'I1104'.
IF sy-subrc = 0.
IF NOT ls_status-inact IS INITIAL.
CLEAR ls_status-inact.
APPEND ls_status TO <ls_prod_indobj_bdoc>-header-status.
ENDIF.
ELSE.
ls_status-stat = 'I1104'.
APPEND ls_status TO <ls_prod_indobj_bdoc>-header-status.
ENDIF.
ENDIF.
ELSE.
* no status found for new created object
ls_status-stat = 'I1104'.
APPEND ls_status TO <ls_prod_indobj_bdoc>-header-status.
ENDIF.
ELSE.
* status found, check for inactive
IF NOT <ls_status>-inact IS INITIAL.
CLEAR <ls_status>-inact.
ENDIF.
ENDIF.
ENDIF.
ENDLOOP.
*******************************************************************
* EQP_STAUS = 40 -> Marked as inactive
* in this case set the status I1105 (inactive) for the iobject
*******************************************************************
LOOP AT it_equi_dmbdoc-equi INTO ls_equi WHERE equipment_flag = 'X' AND eqp_status = '40'.
READ TABLE ct_message_ext ASSIGNING <ls_prod_indobj_bdoc> WITH KEY header-com_product-product_id = ls_equi-equnr.
IF sy-subrc = 0.
READ TABLE <ls_prod_indobj_bdoc>-header-status ASSIGNING <ls_status> WITH KEY stat = 'I1105'.
IF sy-subrc = 4.
IF NOT <ls_prod_indobj_bdoc>-header-com_product-product_guid IS INITIAL.
* read status from db
CALL FUNCTION 'COM_PRD_STATUS_READ'
EXPORTING
iv_status_guid = <ls_prod_indobj_bdoc>-header-com_product-product_guid
* IV_ONLY_ACTIVE = 'X'
TABLES
et_status = lt_status
EXCEPTIONS
no_entry = 1
OTHERS = 2.
IF sy-subrc <> 0.
CALL FUNCTION 'CRM_EQUI_UPLOAD_ERROR_HANDLER'
EXPORTING
i_msg_id = 'IB_CRM_UPLOAD_MSG'
i_msg_no = '029'
i_msgv1 = 'ENLARGE_INDOBJ_BDOC'
CHANGING
c_error_seg = ct_error_segment.
RAISE equi_load_badi_error.
ELSE.
* any status found in db
READ TABLE lt_status INTO ls_status WITH KEY stat = 'I1105'.
IF sy-subrc = 0.
IF NOT ls_status-inact IS INITIAL.
CLEAR ls_status-inact.
APPEND ls_status TO <ls_prod_indobj_bdoc>-header-status.
ENDIF.
ELSE.
ls_status-stat = 'I1105'.
APPEND ls_status TO <ls_prod_indobj_bdoc>-header-status.
ENDIF.
ENDIF.
ELSE.
* no status found for new created object
ls_status-stat = 'I1105'.
APPEND ls_status TO <ls_prod_indobj_bdoc>-header-status.
ENDIF.
ELSE.
* status found, check for inactive
IF NOT <ls_status>-inact IS INITIAL.
CLEAR <ls_status>-inact.
ENDIF.
ENDIF.
ENDIF.
ENDLOOP.