cancel
Showing results for 
Search instead for 
Did you mean: 

Updating address of a partner in crmd_order Service Contract

Former Member
0 Kudos

Hello everybody,

I have a requirement of updating address of partners in service contracts in SAP CRM. I have tried to create an address number and person number and pass it to crm_order_maintain but it is not working. Please help me with this.

Thanks in advance.

Regards,

Srujana.

Accepted Solutions (0)

Answers (2)

Answers (2)

samantak_chatterjee
Active Contributor
0 Kudos

Hi Srujuna,

Have you debugged the standard code by passing all the information that you require to change? While debugging you will notice all the structure that are to be filled in the code and make a note of them. Then in the main code base check them if they are filled properly.

Hope this helps.

Thanks,

Samantak.

Former Member
0 Kudos

I generated a partner set guid from the object guid and obtained new addr and person numbers by using this partner set guid. I am then passing them to crm_order_maintain using the following code but it doesnot seem to work. Please refer to this code and help me.

data: doc_id TYPE char32,

new_addrnr TYPE AD_ADDRNUM,

new_addrnp TYPE AD_PERSNUM.

*doc_id = wa_ls_orderadm_h-guid.

DATA: partner_set_guid TYPE crmt_object_guid.

CALL FUNCTION 'CRM_LINK_GET_OW'

EXPORTING

iv_guid_hi = wa_ls_orderadm_h-guid

IV_OBJNAME_HI = 'ORDERADM_H'

IV_OBJNAME_SET = 'PARTNER'

  • IV_GET_ALL =

IV_INHERIT_FROM_STR = 'X'

IMPORTING

  • ET_LINK =

EV_GUID_SET = partner_set_guid

EXCEPTIONS

INVALID_INPUT_DATA = 1

NO_ALLOCATED_OBJ_FOUND = 2

UNDEFINED_INTERNAL_ERROR = 3

OTHERS = 4

.

IF sy-subrc <> 0.

MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

ENDIF.

CALL FUNCTION 'COM_PARTNER_ADDRESS_COPY'

EXPORTING

iv_caller = 'CRM'

IV_DOCUMENT_ID = doc_id

iv_partnerset_guid = partner_set_guid"'00000000000000000000000000000000'

iv_addr_nr = ls_partner_wrk-addr_nr

IV_ADDR_NP = ls_partner_wrk-addr_np

iv_addr_type = '2'

  • IV_CONVERSION_3_TO_2 = ' '

  • IV_MAKE_EMPTY = ' '

  • IV_NEW_ADDRESS_TYPE = ' '

IMPORTING

EV_NEW_ADDR_NR = new_addrnr

EV_NEW_ADDR_NP = new_addrnp

  • EV_NEW_ADDR_TYPE =

EXCEPTIONS

ERROR_OCCURRED = 1

PARAMETER_ERROR = 2

OTHERS = 3

.

IF sy-subrc <> 0.

  • MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

  • WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

ENDIF.

      • i passed the generated addrnr and addrnp to the crm_order_maintain as follows

wa_partner1-addr_nr = new_addrnr."ls_partner_wrk-addr_nr.

wa_partner1-addr_np = new_addrnp."ls_partner_wrk-addr_np.

wa_partner-addr_nr = new_addrnr."ls_partner_wrk-addr_nr.

wa_partner-addr_np = new_addrnp."ls_partner_wrk-addr_np.

wa_partner-addr_type = ls_partner_wrk-addr_type.

INSERT wa_partner INTO TABLE it_partner.

APPEND wa_partner_att TO it_partner_att.

*

*

*

    • INSERT wa_field_names INTO TABLE it_field_names.

wa_field_names-fieldname = 'ADDR_NP'.

wa_field_names-CHANGEABLE = 'B'.

INSERT wa_field_names INTO TABLE it_field_names.

wa_field_names-fieldname = 'ADDR_NR'.

wa_field_names-CHANGEABLE = 'B'.

INSERT wa_field_names INTO TABLE it_field_names.

wa_field_names-fieldname = 'ADDR_ORIGIN'.

wa_field_names-CHANGEABLE = 'B'.

INSERT wa_field_names INTO TABLE it_field_names.

wa_field_names-fieldname = 'ADDR_TYPE'.

wa_field_names-CHANGEABLE = 'B'.

INSERT wa_field_names INTO TABLE it_field_names.

wa_field_names-fieldname = 'STD_BP_ADDRESS'.

wa_field_names-CHANGEABLE = 'B'.

INSERT wa_field_names INTO TABLE it_field_names.

*

DATA : lv_bp TYPE bu_partner,

lv_bp_log(16) TYPE c,

lv_partner_guid TYPE bu_partner_guid,

lv_msg_text TYPE bapi_msg,

lv_error_text TYPE char8000,

lv_bpbp(4) TYPE c VALUE 'BPBP',

lv_logical_key TYPE crmt_logical_key,

lv_length TYPE i.

SELECT SINGLE partner FROM but000 INTO lv_bp WHERE partner_guid = wa_partner-partner_no.

*Building Logical Key for maintaining partner

CALL FUNCTION 'CONVERSION_EXIT_ALPHA_OUTPUT'

EXPORTING

input = lv_bp

IMPORTING

output = lv_bp.

CONDENSE lv_bp NO-GAPS.

  • lv_bp_log = lv_partner_guid+0(10) ."lv_bp.

CONDENSE lv_bp_log NO-GAPS.

CONCATENATE '0000'

'Z0000009'

lv_bp_log

lv_bpbp

INTO lv_logical_key

RESPECTING BLANKS.

  • wa_input_fields-ref_handle = lv_handle.

wa_input_fields-ref_guid = wa_ls_orderadm_h-guid.

wa_input_fields-ref_kind = 'A'.

wa_input_fields-objectname = 'PARTNER'.

*wa_input_fields-ref_handle = '0000000001'.

wa_input_fields-logical_key = lv_logical_key.

wa_input_fields-field_names = it_field_names.

INSERT wa_input_fields INTO TABLE ct_input_fields.

*

DATA: lv_created_partnerset_guid TYPE CRMT_OBJECT_GUID.

CALL FUNCTION 'CRM_ORDER_MAINTAIN'

EXPORTING

IT_PARTNER = it_partner

IMPORTING

ET_EXCEPTION = it_exception

CHANGING

  • CT_ORDERADM_H =

  • CT_ORDERADM_I =

CT_INPUT_FIELDS = ct_input_fields

  • CV_LOG_HANDLE =

  • CT_PARTNER_ATTRIBUTES =

  • CT_DOC_FLOW =

EXCEPTIONS

ERROR_OCCURRED = 1

DOCUMENT_LOCKED = 2

NO_CHANGE_ALLOWED = 3

NO_AUTHORITY = 4

OTHERS = 5

.

IF sy-subrc <> 0.

  • MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

  • WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

*ENDIF.

*CALL FUNCTION 'CRM_PARTNER_MAINTAIN_SINGLE_OW'

  • EXPORTING

  • IV_REF_GUID = wa_ls_orderadm_h-guid

  • IV_REF_KIND = ls_partner_wrk-ref_kind

  • IS_PARTNER_COM = wa_partner1

    • IV_POPULATE_MODE = 'X'

  • IV_CHECK_PARTNER_ONLY = ' '

  • IS_PARTNER_CONTROL = wa_partner_control

  • IMPORTING

  • EV_CREATED_PARTNERSET_GUID = lv_created_partnerset_guid

  • CHANGING

  • CT_INPUT_FIELD_NAMES = it_field_names

  • CT_PARTNER_ATTRIBUTES_COM = it_partner_att

  • EXCEPTIONS

  • ERROR_OCCURRED = 1

  • OTHERS = 2

  • .

*IF sy-subrc = 0.

  • MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO

  • WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.

*

ELSE.

**

DATA: IT_SAVED_OBJECTS TYPE CRMT_RETURN_OBJECTS,

    • REFERENCE(ET_EXCEPTION) TYPE CRMT_EXCEPTION_T

IT_OBJECTS_NOT_SAVED TYPE CRMT_OBJECT_GUID_TAB.

*DATA: wa_order TYPE CRMT_ORDERADM_H_COM.

*MOVE-CORRESPONDING wa_ls_orderadm_h to wa_order.

*

*CALL FUNCTION 'CRM_ORDER_H_COMPLETE_OW'

  • CHANGING

  • cs_orderadm_h = wa_order.

  • .

ls_act_to_save = wa_ls_orderadm_h-guid.

APPEND ls_act_to_save TO lt_act_to_save.

CALL FUNCTION 'CRM_ORDER_SAVE'

EXPORTING

it_objects_to_save = lt_act_to_save

IMPORTING

ET_SAVED_OBJECTS = IT_SAVED_OBJECTS

et_exception = it_exception

ET_OBJECTS_NOT_SAVED = IT_OBJECTS_NOT_SAVED

EXCEPTIONS

document_not_saved = 1

OTHERS = 2.

IF sy-subrc <> 0.

MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno

WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.

ELSE.

  • WAIT UP TO 2 SECONDS.

  • commit work.

CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'

EXPORTING

wait = c_x.

WRITE: / 'Service Contract updated = ', p_obj_id.

ENDIF.

ENDIF.

Former Member
0 Kudos

Hi Srujana,

Was the address updation for partner issue was solved? Can you help me out?

Thanks,

Nandini

Former Member
0 Kudos

Hi Nandini,

I solved this problem by writing an enhancement in the BADI ' ORDER_SAVE' using the following code.

method IF_EX_ORDER_SAVE~PREPARE.

IF sy-cprog = 'ZTEST_SERVICE'.

You can realize the functionality that when replicate order from ECC to CRM,maintian one time BP address in badi order_save. You can refer to fillowing sample code . Define local variables

DATA: lt_header_guid_test TYPE crmt_object_guid_tab,

lt_partner_test TYPE crmt_partner_external_wrkt,

ls_partner_test TYPE crmt_partner_external_wrk,

ls_partner_control_test TYPE crmt_partner_control,

ls_bapiaddr1_test TYPE bapiaddr1,

ls_bapiaddr2_test TYPE bapiaddr2,

ls_bapiaddr3_test TYPE bapiaddr3,

lt_error_table_test TYPE TABLE OF addr_error,

ls_partner_com TYPE crmt_partner_com,

lt_input_field_name TYPE crmt_input_field_names_tab,

ls_input_field_name TYPE crmt_input_field_names,

lv_new_addr_nr TYPE ad_addrnum,

lv_new_addr_np TYPE ad_persnum,

lv_new_addr_type TYPE ad_adrtype.

DATA: wa_ls_orderadm_h TYPE crmd_orderadm_h.

*PARAMETERS: p_obj_id TYPE crmt_object_id_db.

*

*SELECT SINGLE * FROM crmd_orderadm_h INTO wa_ls_orderadm_h WHERE object_id = p_obj_id.

  • * Read all partner information

CLEAR: lt_header_guid_test,lt_partner_test.

INSERT iv_guid INTO TABLE lt_header_guid_test.

CALL FUNCTION 'CRM_ORDER_READ'

EXPORTING

it_header_guid = lt_header_guid_test

iv_no_auth_check = 'X'

IMPORTING

et_partner = lt_partner_test

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 Ship-to Party Partner data

CHECK lt_partner_test IS NOT INITIAL.

CLEAR: ls_partner_test.

READ TABLE lt_partner_test INTO ls_partner_test WITH KEY ref_kind = 'A' partner_fct = 'Z0000009'.

CHECK sy-subrc EQ 0.

  • * Read Control Data for Partner Processing

CLEAR: ls_partner_control_test.

CALL FUNCTION 'CRM_PARTNER_GET_CONTROL_INF_OW'

EXPORTING

iv_ref_guid = iv_guid

iv_ref_kind = 'A'

IMPORTING

es_partner_control = ls_partner_control_test

EXCEPTIONS

determination_failed = 1

OTHERS = 2.

  • * Check if address of partner is standard BP Address

IF ls_partner_test-addr_origin = 'A' AND ls_partner_test-std_bp_address = 'X'.

CALL FUNCTION 'COM_PARTNER_ADDRESS_COPY'

EXPORTING

iv_caller = ls_partner_control_test-caller

iv_document_id = ls_partner_control_test-document_id

iv_partnerset_guid = ls_partner_test-guid

iv_addr_nr = ls_partner_test-addr_nr

iv_addr_np = ls_partner_test-addr_np

iv_addr_type = ls_partner_test-addr_type

IMPORTING

ev_new_addr_nr = lv_new_addr_nr

ev_new_addr_np = lv_new_addr_np

ev_new_addr_type = lv_new_addr_type

EXCEPTIONS

error_occurred = 1

parameter_error = 2

OTHERS = 3.

MOVE-CORRESPONDING ls_partner_test TO ls_partner_com.

ls_partner_com-addr_np = lv_new_addr_np.

ls_partner_com-addr_nr = lv_new_addr_nr.

ls_partner_com-addr_origin = 'B'.

ls_partner_com-std_bp_address = ''.

ls_partner_com-ref_guid = iv_guid.

ls_partner_com-ref_kind = 'A'.

ls_input_field_name-fieldname = 'ADDR_NR'.

INSERT ls_input_field_name INTO TABLE lt_input_field_name.

ls_input_field_name-fieldname = 'ADDR_NP'.

INSERT ls_input_field_name INTO TABLE lt_input_field_name.

ls_input_field_name-fieldname = 'ADDR_TYPE'.

INSERT ls_input_field_name INTO TABLE lt_input_field_name.

ls_input_field_name-fieldname = 'ADDR_ORIGIN'.

INSERT ls_input_field_name INTO TABLE lt_input_field_name.

ls_input_field_name-fieldname = 'STD_BP_ADDRESS'.

INSERT ls_input_field_name INTO TABLE lt_input_field_name.

CALL FUNCTION 'CRM_PARTNER_MAINTAIN_SINGLE_OW'

EXPORTING

iv_ref_guid = iv_guid

iv_ref_kind = 'A'

is_partner_com = ls_partner_com

CHANGING

ct_input_field_names = lt_input_field_name

EXCEPTIONS

error_occurred = 1

OTHERS = 2.

CLEAR: ls_bapiaddr1_test,ls_bapiaddr2_test,ls_bapiaddr3_test.

CASE ls_partner_test-addr_type.

WHEN '1'.

ls_bapiaddr1_test-name = 'Testing Name New Version'.

ls_bapiaddr1_test-country = 'IN'.

WHEN '2'.

ls_bapiaddr2_test-firstname = 'Krishna'.

ls_bapiaddr2_test-lastname = 'P'.

ls_bapiaddr2_test-country = 'IN'.

WHEN '3'.

ls_bapiaddr3_test-firstname = 'Testing First Name'.

ls_bapiaddr3_test-lastname = 'Testing Last Name'.

ls_bapiaddr3_test-country = 'IN'.

WHEN OTHERS.

ENDCASE.

CLEAR: lt_error_table_test.

CALL FUNCTION 'COM_PARTNER_ADDRESS_MAINTAIN'

EXPORTING

iv_caller = ls_partner_control_test-caller

iv_document_id = ls_partner_control_test-document_id

iv_partnerset_guid = ls_partner_test-guid

iv_addr_nr = lv_new_addr_nr

iv_addr_np = lv_new_addr_np

iv_addr_type = lv_new_addr_type

is_bapiaddr1 = ls_bapiaddr1_test

is_bapiaddr2 = ls_bapiaddr2_test

is_bapiaddr3 = ls_bapiaddr3_test

iv_keep_err_adr = 'X'

TABLES

et_error_table = lt_error_table_test

EXCEPTIONS

error_occurred = 1

parameter_error = 2

OTHERS = 3.

  • IF sy-subrc = 0.

  • CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'

  • EXPORTING

  • wait = 'X'.

  • ENDIF.

ENDIF.

IF ls_partner_test-addr_origin = 'B' AND ls_partner_test-std_bp_address = ' '.

CLEAR: ls_bapiaddr1_test,ls_bapiaddr2_test,ls_bapiaddr3_test.

CASE ls_partner_test-addr_type.

WHEN '1'.

ls_bapiaddr1_test-addr_no = ls_partner_test-addr_nr.

ls_bapiaddr1_test-name = 'Testing Name 012345'.

ls_bapiaddr1_test-country = 'IN'.

WHEN '2'.

ls_bapiaddr2_test-firstname = 'Kishore'.

ls_bapiaddr2_test-lastname = 'Pittala'.

ls_bapiaddr2_test-country = 'IN'.

WHEN '3'.

ls_bapiaddr3_test-firstname = 'Testing First Name'.

ls_bapiaddr3_test-lastname = 'Testing Last Name'.

WHEN OTHERS.

ENDCASE.

CLEAR: lt_error_table_test.

CALL FUNCTION 'COM_PARTNER_ADDRESS_MAINTAIN'

EXPORTING

iv_caller = ls_partner_control_test-caller

iv_document_id = ls_partner_control_test-document_id

iv_partnerset_guid = ls_partner_test-guid

iv_addr_nr = ls_partner_test-addr_nr

iv_addr_np = ls_partner_test-addr_np

iv_addr_type = ls_partner_test-addr_type

is_bapiaddr1 = ls_bapiaddr1_test

is_bapiaddr2 = ls_bapiaddr2_test

is_bapiaddr3 = ls_bapiaddr3_test

iv_keep_err_adr = 'X'

TABLES

et_error_table = lt_error_table_test

EXCEPTIONS

error_occurred = 1

parameter_error = 2

OTHERS = 3.

IF sy-subrc = 0.

  • CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'

  • EXPORTING

  • wait = 'X'.

ENDIF.

ENDIF.

ENDIF.

endmethod.