TECH SYNTAX

Tuesday, July 29, 2014

Sample code: How To read Header or Item Partner Address using function modules.

WEB UI programmers find it very easy to read a partner address, be it at document header level or for a specific item using BOL programming. But when it comes to read it using the CRM function modules, it gets confusing. The below sample code explains how to read the header or item partner address using CRM function modules, when you are advised not to use the BOL programming e.g. inside a BAdi implementation.


DATA:
      lt_guid                TYPE   crmt_object_guid_tab,
      lt_orderadm_h     TYPE   crmt_orderadm_h_wrkt,
      lt_req_obj            TYPE   crmt_object_name_tab,
      lt_orderadm_i      TYPE   crmt_orderadm_i_wrkt,
      lt_partners           TYPE   crmt_partner_external_wrkt,
      lt_adrc                TYPE   bbpt_adrc.

DATA:
      ls_object_guid    TYPE   crmt_object_guid,
      ls_req_obj          TYPE   crmt_object_name.

FIELD-SYMBOLS:          TYPE crmt_partner_external_wrk,
                                 TYPE crmt_orderadm_h_wrk,
                                  TYPE crmt_orderadm_i_wrk,
                                            TYPE adrc.

************************************* Call the order_read *********************************************

ls_req_obj = 'ORDERADM_H'.
INSERT ls_req_obj INTO TABLE lt_req_obj.
ls_req_obj = 'ORDERADM_I'.
INSERT ls_req_obj INTO TABLE lt_req_obj.
ls_req_obj = 'PARTNER'.
INSERT ls_req_obj INTO TABLE lt_req_obj.

ls_object_guid     = iv_guid.   " Fill the guid to be inserted
INSERT ls_object_guid INTO TABLE lt_guid.
CALL FUNCTION 'CRM_ORDER_READ'
   EXPORTING
     it_header_guid       = lt_guid
     it_requested_objects = lt_req_obj
   IMPORTING
     et_orderadm_h        = lt_orderadm_h
     et_orderadm_i        = lt_orderadm_i
     et_partner           = lt_partners
   EXCEPTIONS
     document_not_found   = 1
     error_occurred       = 2
     document_locked      = 3
     no_change_authority  = 4
     no_display_authority = 5
     no_change_allowed    = 6
     OTHERS               = 7.

********************************************* Read the header details *******************************************
READ TABLE lt_orderadm_h ASSIGNING  INDEX 1.
IF sy-subrc = 0.
   READ TABLE lt_partners ASSIGNING 
        WITH KEY ref_guid    = -guid
                 partner_fct = '00000132'.               " the partner function to find its address details.
   IF sy-subrc = 0.
     CALL FUNCTION 'ADDR_SELECT_ADRC_SINGLE'
       EXPORTING
         addrnumber        = -addr_nr
       TABLES
         et_adrc           = lt_adrc
       EXCEPTIONS
         address_not_exist = 1
         parameter_error   = 2
         internal_error    = 3
         OTHERS            = 4.
     IF NOT lt_adrc IS INITIAL.
       READ TABLE lt_adrc ASSIGNING  INDEX 1.   " Now here you found the address details
       IF sy-subrc = 0.
         ev_province_head = -region.            " Get the region.
       ENDIF.
     ENDIF.
   ENDIF.
ENDIF.

************************************** Read the line item for a specific iteam ************************************

READ TABLE lt_orderadm_i ASSIGNING  WITH KEY itm_type = 'ZCOL'.

IF sy-subrc = 0.
   READ TABLE lt_partners ASSIGNING 
        WITH KEY ref_guid    = -guid
                partner_fct = '00000132'.                " the partner function to find its address details.

   IF sy-subrc = 0.
     CALL FUNCTION 'ADDR_SELECT_ADRC_SINGLE'
       EXPORTING
         addrnumber        = -addr_nr
       TABLES
         et_adrc           = lt_adrc
       EXCEPTIONS
         address_not_exist = 1
         parameter_error   = 2
         internal_error    = 3
         OTHERS            = 4.
     IF NOT lt_adrc IS INITIAL.
       READ TABLE lt_adrc ASSIGNING  INDEX 1.   " Now here you found the address details
       IF sy-subrc = 0.
             ev_province_item = -region.        " Get the region.
       ENDIF.
     ENDIF.
   ENDIF.
ENDIF.

No comments:

Your Ad Here