on 2024 Jul 10 10:05 AM
Dear Community,
I am new in CRM. I have a programm for add partner from a ROLE table to Service desk Contract item level.
Following is my testing code. No errors were reported at runtime. All Subrc are 0. But partner is not added to the item. Can you help me check what's wrong with my code? Thank you so much.
REPORT /TEST/TEST_CONTRACT.
TABLES: CRMD_ORDERADM_H, CRMD_ORDERADM_I
DATA: lt_head TYPE crmt_object_guid_tab.
DATA: iv_guid LIKE LINE OF lt_head.
DATA: lt_partners TYPE CRMT_PARTNER_EXTERNAL_WRKT.
DATA: lv_partner LIKE LINE OF lt_partners.
DATA: lt_CSO_ROLE LIKE TABLE OF /ITH/CI_CSO_ROLE.
DATA: lv_CSO_ROLE LIKE /ITH/CI_CSO_ROLE.
DATA: lt_CSO_ROLE_NEW LIKE TABLE OF /ITH/CI_CSO_ROLE.
DATA: lv_CSO_ROLE_NEW LIKE /ITH/CI_CSO_ROLE.
DATA: lv_ORDERADM_H LIKE CRMD_ORDERADM_H.
DATA: lv_ORDERADM_I LIKE CRMD_ORDERADM_I.
*DATA: LF_HANDLE TYPE CRMT_HANDLE.
DATA: ls_partner TYPE crmt_partner_com.
DATA: lt_partner TYPE crmt_partner_comt.
DATA: lt_fieldname TYPE CRMT_INPUT_FIELD_NAMES_TAB.
DATA: lv_fieldname TYPE CRMT_INPUT_FIELD_NAMES.
DATA: lt_input_fields TYPE CRMT_INPUT_FIELD_TAB.
DATA: lv_input_fields TYPE CRMT_INPUT_FIELD.
DATA: lt_obj_to_save TYPE CRMT_OBJECT_GUID_TAB.
DATA:
lt_orderadm_h type crmt_orderadm_h_comt,
ls_orderadm_h type crmt_orderadm_h_com,
lt_orderadm_i TYPE crmt_orderadm_i_comt,
ls_orderadm_i TYPE crmt_orderadm_i_com.
DATA: lt_exception TYPE crmt_exception_t.
DATA: lf_log_handle TYPE balloghndl.
SELECT * FROM /ITH/CI_CSO_ROLE
INTO TABLE lt_CSO_ROLE
WHERE CONTRACT = '1234567890'
AND CONTRACT_TYPE = 'ZIO'.
SELECT SINGLE * FROM CRMD_ORDERADM_H
INTO lv_ORDERADM_H
WHERE OBJECT_ID = '1234567890'.
APPEND lv_ORDERADM_H-GUID TO lt_head.
CALL FUNCTION 'CRM_ORDER_READ'
EXPORTING
it_header_guid = lt_head
IMPORTING
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.
LOOP AT lt_CSO_ROLE INTO lv_CSO_ROLE .
READ TABLE lt_partners INTO lv_partner WITH KEY BP_PARTNER_GUID = lv_CSO_ROLE-BP_PARTNER_GUID.
IF sy-subrc <> 0.
append lv_CSO_ROLE to lt_CSO_ROLE_NEW.
ENDIF.
ENDLOOP.
LOOP AT lt_CSO_ROLE_NEW INTO lv_CSO_ROLE_NEW.
CLEAR: lt_partner, lt_orderadm_h, lt_orderadm_i, lt_input_fields.
* CLEAR: LF_HANDLE.
IF lv_CSO_ROLE_NEW-BP_PARTNER_GUID is INITIAL.
CONTINUE.
ENDIF.
SELECT SINGLE * FROM CRMD_ORDERADM_H
INTO lv_ORDERADM_H
WHERE OBJECT_ID = lv_CSO_ROLE_NEW-CONTRACT.
SELECT SINGLE * FROM CRMD_ORDERADM_I
INTO lv_ORDERADM_I
WHERE HEADER = lv_ORDERADM_H-GUID
AND NUMBER_INT = lv_CSO_ROLE_NEW-CONTRACT_ITM.
* CALL FUNCTION 'CRM_ORDER_ENQUEUE'
* EXPORTING
* iv_guid = lv_ORDERADM_H-GUID
* EXCEPTIONS
* foreign_lock = 1
* system_failure = 2
* distributed_lock = 3
* no_change_allowed = 4
* transferring = 5
* contract_locked = 6
* OTHERS = 7.
* IF sy-subrc <> 0.
* MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno
* WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
* ENDIF.
* ls_partner-ref_handle = ''.
ls_partner-ref_guid = lv_ORDERADM_I-GUID.
* ls_partner-ref_kind = gc_object_ref_kind-orderadm_h.
ls_partner-ref_kind = 'B'.
ls_partner-kind_of_entry = 'C'.
ls_partner-no_type = 'BP'.
ls_partner-REF_NO_TYPE = 'BP'.
ls_partner-display_type = 'BP'.
ls_partner-REF_DISPLAY_TYPE = 'BP'.
ls_partner-mainpartner = 'X'.
ls_partner-partner_fct = 'SLFN0004'.
ls_partner-ref_partner_fct = 'SLFN0004'.
ls_partner-partner_no = lv_CSO_ROLE_NEW-BUPA.
ls_partner-ref_partner_no = lv_CSO_ROLE_NEW-BUPA.
* ls_partner-ref_partner_handle = lf_ref_handle.
* ls_partner-PARTNER_GUID = lv_CSO_ROLE_NEW-BP_PARTNER_GUID.
INSERT ls_partner INTO TABLE lt_partner.
** set handle
* ADD 1 TO LF_HANDLE.
* ls_partner-REF_HANDLE = LF_HANDLE.
* INSERT ls_partner INTO TABLE lt_partner.
lv_fieldname = 'KIND_OF_ENTRY'.
INSERT lv_fieldname INTO TABLE lt_fieldname.
lv_fieldname = 'NO_TYPE'.
INSERT lv_fieldname INTO TABLE lt_fieldname.
lv_fieldname = 'REF_NO_TYPE'.
INSERT lv_fieldname INTO TABLE lt_fieldname.
lv_fieldname = 'DISPLAY_TYPE'.
INSERT lv_fieldname INTO TABLE lt_fieldname.
lv_fieldname = 'REF_DISPLAY_TYPE'.
INSERT lv_fieldname INTO TABLE lt_fieldname.
lv_fieldname = 'MAINPARTNER'.
INSERT lv_fieldname INTO TABLE lt_fieldname.
lv_fieldname = 'PARTNER_FCT'.
INSERT lv_fieldname INTO TABLE lt_fieldname.
lv_fieldname = 'REF_PARTNER_FCT'.
INSERT lv_fieldname INTO TABLE lt_fieldname.
lv_fieldname = 'PARTNER_NO'.
INSERT lv_fieldname INTO TABLE lt_fieldname.
lv_fieldname = 'REF_PARTNER_NO'.
INSERT lv_fieldname INTO TABLE lt_fieldname.
* lv_fieldname = 'PARTNER_GUID'.
* INSERT lv_fieldname INTO TABLE lt_fieldname.
* lv_input_fields-ref_handle = ''.
lv_input_fields-ref_guid = lv_ORDERADM_I-GUID.
lv_input_fields-objectname = 'PARTNER'.
lv_input_fields-ref_kind = 'B'.
lv_input_fields-logical_key = '0000'.
lv_input_fields-field_names = lt_fieldname.
INSERT lv_input_fields INTO TABLE lt_input_fields.
ls_orderadm_h-guid = lv_ORDERADM_H-GUID.
INSERT ls_orderadm_h INTO TABLE lt_orderadm_h.
ls_orderadm_i-guid = lv_ORDERADM_I-GUID.
insert ls_orderadm_i INTO TABLE lt_orderadm_i.
CALL FUNCTION 'CRM_ORDER_MAINTAIN'
EXPORTING
it_partner = lt_partner
IMPORTING
et_exception = lt_exception
CHANGING
ct_orderadm_h = lt_orderadm_h
ct_orderadm_i = lt_orderadm_i
ct_input_fields = lt_input_fields
cv_log_handle = lf_log_handle
EXCEPTIONS
error_occurred = 1
document_locked = 2
no_change_allowed = 3
no_authority = 4
OTHERS = 5.
IF sy-subrc = 0.
INSERT lv_ORDERADM_H-GUID INTO TABLE lt_obj_to_save.
CALL FUNCTION 'CRM_ORDER_SAVE'
EXPORTING
it_objects_to_save = lt_obj_to_save
EXCEPTIONS
document_not_saved = 1
OTHERS = 2.
IF sy-subrc <> 0.
ELSE.
ENDIF.
ENDIF.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = abap_true.
* CALL FUNCTION 'CRM_ORDER_DEQUEUE'
* EXPORTING
* iv_guid = lv_ORDERADM_H-GUID.
ENDLOOP.
Request clarification before answering.
Hi there,
The CRM_ORDER_MAINTAIN function is quite sensitive and a good way to understand what to fill there is to:
- Open CRMD_ORDER tcode
- Put a breakpoint in CRM_ORDER_MAINTAIN
- Simulate the change you want to perform in your contract, by adding the desired partner at the item level
- Inspect the parameters being passed there and try to adjust your code accordingly
See if that helps you a little more!
Kind regards,
Garcia
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.