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.
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:
************************************* 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
IF sy-subrc = 0.
READ TABLE lt_partners ASSIGNING
WITH KEY ref_guid =
partner_fct = '00000132'. " the partner function to find its address details.
IF sy-subrc = 0.
CALL FUNCTION 'ADDR_SELECT_ADRC_SINGLE'
EXPORTING
addrnumber =
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
IF sy-subrc = 0.
ev_province_head =
ENDIF.
ENDIF.
ENDIF.
ENDIF.
************************************** Read the line item for a specific iteam ************************************
READ TABLE lt_orderadm_i ASSIGNING
IF sy-subrc = 0.
READ TABLE lt_partners ASSIGNING
WITH KEY ref_guid =
partner_fct = '00000132'. " the partner function to find its address details.
IF sy-subrc = 0.
CALL FUNCTION 'ADDR_SELECT_ADRC_SINGLE'
EXPORTING
addrnumber =
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
IF sy-subrc = 0.
ev_province_item =
ENDIF.
ENDIF.
ENDIF.
ENDIF.