How to find the service contract list for a given individual object

120 阅读1分钟

Created by Jerry Wang, last modified on Apr 02, 2015

use the report below:
clipboard1
report output:
clipboard2
clipboard3
clipboard4
source code:

REPORT prod_list_assigned_serv_contra.
PARAMETERS: id TYPE comm_product-product_id OBLIGATORY DEFAULT 'ZABAP'.
 
DATA: ls_comp_det   TYPE ibap_comp1,
 
      lt_comp_tmp   TYPE ibap_comp4_tab,
 
      lt_ibase_comp TYPE ibctr_input_tab,
 
      ls_ibase_comp LIKE LINE OF lt_ibase_comp,
 
      lv_guid       TYPE comm_product-product_guid,
 
      lt_contracts  TYPE ibctr_contract_tab.
 
 
START-OF-SELECTION.
 
 
  SELECT SINGLE product_guid FROM comm_product INTO lv_guid
 
     WHERE product_id = id.
 
 
  IF sy-subrc <> 0.
 
    WRITE:/ 'specify a valid object id!' COLOR COL_NEGATIVE.
 
    RETURN.
 
  ENDIF.
 
 
  ls_comp_det-object_guid = lv_guid.
 
 
  CALL FUNCTION 'CRM_IBASE_COMP_FIND_MULTI'
 
    EXPORTING
 
      i_comp_det      = ls_comp_det
 
      iv_include_void = abap_true
 
    IMPORTING
 
      e_comp_tab      = lt_comp_tmp
 
    EXCEPTIONS
 
      not_found       = 1
 
      OTHERS          = 2.
  IF sy-subrc <> 0.
    WRITE: / 'no component found for given i-object' COLOR COL_NEGATIVE.
    RETURN.
  ENDIF.
 
 
* in CRM one object could only be assigned to ONE IBASE componment
 
  READ TABLE lt_comp_tmp ASSIGNING FIELD-SYMBOL(<result>) INDEX 1.
 
  ls_ibase_comp-ibase = <result>-ibase.
 
  ls_ibase_comp-instance = <result>-instance.
 
 
  WRITE:/ 'object belongs to ibase id: ' COLOR COL_NEGATIVE, <result>-ibase COLOR COL_GROUP,
 
  'component id: ' COLOR COL_NEGATIVE , <result>-instance COLOR COL_GROUP.
 
  APPEND ls_ibase_comp TO lt_ibase_comp.
 
  CALL FUNCTION 'IB_CONTRACTS_TO_COMPONENT'
 
    EXPORTING
 
      it_inst_identifier = lt_ibase_comp
 
      output_popup       = ''
 
    IMPORTING
 
      et_contract_data   = lt_contracts
 
    EXCEPTIONS
 
      input_error        = 1
 
      internal_error     = 2
 
      no_records_found   = 3
 
      OTHERS             = 4.
 
  IF sy-subrc <> 0.
    WRITE: / 'no service contract found for given iobject' COLOR COL_NEGATIVE.
    RETURN.
  ENDIF.
  LOOP AT lt_contracts ASSIGNING FIELD-SYMBOL(<contract>).
 
    WRITE: / 'Service contract id: ' COLOR COL_POSITIVE, <contract>-crm_object_id COLOR COL_KEY.
 
    WRITE: / 'service contract description: ' COLOR COL_HEADING, <contract>-description COLOR COL_HEADING.
 
    WRITE: / 'line item id: ' COLOR COL_BACKGROUND, <contract>-number_int COLOR COL_TOTAL.
 
    WRITE: / 'valid from: ' COLOR COL_POSITIVE, <contract>-date_from COLOR COL_KEY,
 
    'valid to: ' COLOR COL_NORMAL, <contract>-date_to COLOR COL_NEGATIVE.
 
  ENDLOOP.