on 03-30-2007 2:05 PM
Hello All,
I want to upload contracts to SRM 5.0 from ARIBA. Is there any good BAPI or conversion method for this task. I tried to use the FM BBP_PD_CTR CREATE and BBP_PD_CTR_SAVE but it doesnt create the partner when I use this FM. Please help me. Did anyone succeed in this.
Viky
Hi
Try this code. I hope it will help.
FORM contract_create
USING
iv_logsys TYPE logsys
iv_simulation TYPE xfeld
iv_release TYPE xfeld
iv_check_int TYPE xfeld
iv_be_object_id TYPE crmt_object_id_db
is_pd_header TYPE bbp_pds_ctr_header_ic
it_pd_items TYPE bbpt_pd_ctr_item_icu
it_pd_conditions TYPE bbpt_pd_cnd_icu
it_partners TYPE bbpt_pd_partner
it_pd_longtext TYPE bbpt_pd_longtext
it_dist TYPE bbpt_pd_dis
it_pd_orgdata TYPE bbpt_pds_org
it_pd_tol TYPE bbpt_pd_tol
it_attach TYPE bbpt_pds_att_t
CHANGING
cs_header_new TYPE bbp_pds_ctr_header_d
cs_ctr_trans TYPE bbpd_ctr_trns
ct_messages TYPE bbpt_ctr_log_msg_context.
* Local data declaration
DATA:
ls_pd_header TYPE bbp_pds_ctr_header_ic,
ls_header_d TYPE bbp_pds_ctr_header_d,
ls_header_u TYPE bbp_pds_ctr_header_u,
lt_pd_items TYPE bbpt_pd_ctr_item_icu,
ls_pd_items TYPE bbp_pds_ctr_item_icu,
lt_partner_d TYPE bbpt_pd_partner,
lt_pd_orgdata_d TYPE bbpt_pds_org,
lt_pd_longtext_d TYPE bbpt_pd_longtext,
lt_tolerance_d TYPE bbpt_pd_tol,
lt_dist_d TYPE bbpt_pd_dis,
lt_pd_conditions_d TYPE bbpt_pd_cnd_icu,
ls_pd_conditions_d TYPE bbp_pds_cnd_icu,
ls_attach TYPE bbp_pds_att_t,
lt_pd_attach TYPE bbpt_pds_att_t,
ls_message TYPE bbp_pds_messages,
lt_cr_messages TYPE bbpt_pd_messages,
lt_up_messages TYPE bbpt_pd_messages,
lv_param1 TYPE symsgv,
lv_param2 TYPE symsgv,
lv_msgtxt TYPE BAPI_MSG.
* Local data declaration - flags
DATA:
lv_save_ctr TYPE xfeld VALUE 'X',
lv_save TYPE xfeld,
lv_park TYPE xfeld,
lv_held TYPE xfeld VALUE space.
lv_park = gc_yes.
IF iv_release = gc_yes.
lv_save = gc_yes.
ELSE.
lv_save = gc_no.
ENDIF.
lt_partner_d[] = it_partners[].
DELETE lt_partner_d WHERE p_guid <> is_pd_header-guid.
* lt_attach_d[] = lt_attach[].
* DELETE lt_attach_d WHERE p_guid <> is_pd_header-guid.
lt_pd_orgdata_d[] = it_pd_orgdata[].
DELETE lt_pd_orgdata_d WHERE p_guid <> is_pd_header-guid.
lt_pd_longtext_d[] = it_pd_longtext[].
DELETE lt_pd_longtext_d WHERE guid <> is_pd_header-guid.
lt_tolerance_d[] = it_pd_tol[].
DELETE lt_tolerance_d WHERE p_guid <> is_pd_header-guid.
CALL FUNCTION 'BBP_CTR_UI_ITS_BUFFER_RESET'.
CALL FUNCTION 'BBP_PD_CTR_RESET_BUFFER'.
CALL FUNCTION 'BBP_PD_CTR_CREATE'
EXPORTING
i_header = is_pd_header
IMPORTING
e_header = cs_header_new
TABLES
i_partner = lt_partner_d[]
i_orgdata = lt_pd_orgdata_d[]
i_longtext = lt_pd_longtext_d[]
i_tol = lt_tolerance_d[]
i_dis = it_dist[]
e_messages = lt_cr_messages[].
* Check for errors due to number range
READ TABLE lt_cr_messages INTO ls_message
WITH KEY field_name = 'NUMRANGE'.
IF sy-subrc = 0.
CLEAR: ls_message.
lv_param1 = is_pd_header-object_id.
* if internal number range has been defined
IF iv_check_int = gc_yes.
PERFORM message_create
USING
is_pd_header-object_id
iv_be_object_id
msg_orig_srm
lv_msgtxt
c_msgty_w
gc_msgid_bbp_bd
gcs_mesgno-msg105
lv_param1
sy-msgv2
sy-msgv3
sy-msgv4
CHANGING
ct_messages[].
IF gc_on = gc_off. MESSAGE w105(bbp_bd) WITH lv_param1. ENDIF.
CLEAR lv_param1.
MOVE-CORRESPONDING is_pd_header TO ls_pd_header.
CLEAR ls_pd_header-object_id.
CLEAR: lt_cr_messages.
CALL FUNCTION 'BBP_CTR_UI_ITS_BUFFER_RESET'.
CALL FUNCTION 'BBP_PD_CTR_RESET_BUFFER'.
* Create contract with internal number range
CALL FUNCTION 'BBP_PD_CTR_CREATE'
EXPORTING
i_header = ls_pd_header
IMPORTING
e_header = cs_header_new
TABLES
i_partner = lt_partner_d[]
i_orgdata = lt_pd_orgdata_d[]
i_longtext = lt_pd_longtext_d[]
i_tol = lt_tolerance_d[]
i_dis = it_dist[]
e_messages = lt_cr_messages[].
ELSE.
lv_save_ctr = space.
ENDIF.
ENDIF.
READ TABLE lt_cr_messages into ls_message WITH KEY msgty = c_msgty_e.
IF sy-subrc = 0.
lv_held = gc_yes.
ENDIF.
CLEAR: ls_message.
LOOP AT lt_cr_messages INTO ls_message.
PERFORM message_create
USING
cs_header_new-object_id
iv_be_object_id
msg_orig_srm
lv_msgtxt
ls_message-msgty
ls_message-msgid
ls_message-msgno
ls_message-msgv1
ls_message-msgv2
ls_message-msgv3
ls_message-msgv4
CHANGING
ct_messages[].
CLEAR: ls_message.
ENDLOOP.
CLEAR: lt_cr_messages.
IF lv_save_ctr = gc_yes.
MOVE-CORRESPONDING cs_header_new TO ls_header_d.
* attachments
LOOP AT it_attach INTO ls_attach
WHERE p_guid = is_pd_header-guid.
ls_attach-p_guid = ls_header_d-guid.
APPEND ls_attach TO lt_pd_attach.
CLEAR: ls_attach.
ENDLOOP.
* conditions (header level) ...
LOOP AT it_pd_conditions INTO ls_pd_conditions_d
WHERE p_guid = is_pd_header-guid.
ls_pd_conditions_d-p_guid = ls_header_d-guid.
APPEND ls_pd_conditions_d TO lt_pd_conditions_d.
CLEAR: ls_pd_conditions_d.
ENDLOOP.
LOOP AT it_pd_items INTO ls_pd_items
WHERE del_ind IS INITIAL.
* set the new parent guid to the guid of the new contract
ls_pd_items-parent = ls_header_d-guid.
CLEAR:
ls_pd_items-ext_quote_id,
ls_pd_items-ext_quote_item,
ls_pd_items-src_object_type,
ls_pd_items-src_itm_id,
ls_pd_items-src_log_sys,
ls_pd_items-src_guid.
APPEND ls_pd_items TO lt_pd_items.
CLEAR: ls_pd_items.
ENDLOOP.
* conditions (item level)
LOOP AT it_pd_conditions INTO ls_pd_conditions_d
WHERE guid <> is_pd_header-guid.
APPEND ls_pd_conditions_d TO lt_pd_conditions_d.
CLEAR: ls_pd_conditions_d.
ENDLOOP.
* attachments
LOOP AT it_attach INTO ls_attach
WHERE p_guid <> is_pd_header-guid.
APPEND ls_attach TO lt_pd_attach.
CLEAR: ls_attach.
ENDLOOP.
* Partners item level
lt_partner_d[] = it_partners[].
DELETE lt_partner_d WHERE p_guid = is_pd_header-guid.
* orgdata item level
lt_pd_orgdata_d[] = it_pd_orgdata[].
DELETE lt_pd_orgdata_d WHERE p_guid = is_pd_header-guid.
* longtexts item level
lt_pd_longtext_d[] = it_pd_longtext[].
DELETE lt_pd_longtext_d WHERE guid = ls_pd_header-guid.
* Tolerances
lt_tolerance_d[] = it_pd_tol[].
DELETE lt_tolerance_d WHERE p_guid = ls_pd_header-guid.
* Distribution
lt_dist_d[] = it_dist[].
DELETE lt_dist_d WHERE p_guid = ls_pd_header-guid.
CLEAR: cs_header_new.
* Refresh buffer for conditions and items
CALL FUNCTION 'BBP_CND_UI_BUFFER_RESET'.
MOVE-CORRESPONDING ls_header_d TO ls_header_u.
* Update contract with item data
CALL FUNCTION 'BBP_PD_CTR_UPDATE'
EXPORTING
i_header = ls_header_u
i_park = lv_park
i_save = lv_save
it_attach = lt_pd_attach
it_conditions = lt_pd_conditions_d
IMPORTING
es_header = cs_header_new
TABLES
i_item = lt_pd_items[]
i_partner = lt_partner_d[]
i_longtext = lt_pd_longtext_d[]
i_orgdata = lt_pd_orgdata_d[]
i_tol = lt_tolerance_d[]
i_dis = lt_dist_d[]
e_messages = lt_up_messages[].
READ TABLE lt_up_messages into ls_message
WITH KEY msgty = c_msgty_e.
IF sy-subrc = 0.
lv_held = gc_yes.
ENDIF.
CLEAR: ls_message.
LOOP AT lt_up_messages INTO ls_message.
PERFORM message_create
USING
cs_header_new-object_id
iv_be_object_id
msg_orig_srm
lv_msgtxt
ls_message-msgty
ls_message-msgid
ls_message-msgno
ls_message-msgv1
ls_message-msgv2
ls_message-msgv3
ls_message-msgv4
CHANGING
ct_messages[].
CLEAR: ls_message.
ENDLOOP.
CLEAR: lt_up_messages.
IF iv_simulation NE gc_yes.
* Save the contract to DB
CALL FUNCTION 'BBP_PD_CTR_SAVE'
EXPORTING
iv_header_guid = cs_header_new-guid.
COMMIT WORK.
IF sy-subrc = 0.
lv_param1 = cs_header_new-object_id.
lv_param2 = iv_be_object_id.
cs_ctr_trans-client = sy-mandt.
cs_ctr_trans-contract_guid = cs_header_new-guid.
cs_ctr_trans-logsys = iv_logsys.
cs_ctr_trans-be_contract_id = iv_be_object_id.
* Is contract created and released
IF lv_held = space.
PERFORM message_create
USING
cs_header_new-object_id
iv_be_object_id
msg_orig_srm
lv_msgtxt
c_msgty_s
gc_msgid_bbp_bd
gcs_mesgno-msg108
lv_param1
sy-msgv2
sy-msgv3
sy-msgv4
CHANGING
ct_messages[].
IF gc_on = gc_off. MESSAGE s108(bbp_bd) WITH lv_param1. ENDIF.
ELSE.
* Contract created in HELD status
PERFORM message_create
USING
cs_header_new-object_id
iv_be_object_id
msg_orig_srm
lv_msgtxt
c_msgty_w
gc_msgid_bbp_bd
gcs_mesgno-msg115
lv_param1
sy-msgv2
sy-msgv3
sy-msgv4
CHANGING
ct_messages[].
IF gc_on = gc_off. MESSAGE w115(bbp_bd) WITH lv_param1. ENDIF.
ENDIF.
ELSE.
* Contract could not be created and saved
lv_param2 = iv_be_object_id.
PERFORM message_create
USING
cs_header_new-object_id
iv_be_object_id
msg_orig_srm
lv_msgtxt
c_msgty_e
gc_msgid_bbp_bd
gcs_mesgno-msg115
lv_param2
sy-msgv2
sy-msgv3
sy-msgv4
CHANGING
ct_messages[].
IF gc_on = gc_off. MESSAGE e109(bbp_bd) WITH lv_param2. ENDIF.
ENDIF.
ENDIF.
ENDIF.
ENDFORM. " contract_create
FORM message_create
USING
iv_object_id TYPE bbp_object_id_ctr
iv_be_object_id TYPE crmt_object_id_db
iv_origin TYPE bbp_msg_origine
iv_msgtxt TYPE BAPI_MSG
iv_msgty TYPE sy-msgty
iv_msgid TYPE sy-msgid
iv_msgno TYPE symsgno
iv_msgv1 TYPE symsgv
iv_msgv2 TYPE symsgv
iv_msgv3 TYPE symsgv
iv_msgv4 TYPE symsgv
CHANGING
ct_messages TYPE bbpt_ctr_log_msg_context.
* Local Data declaration
DATA:
ls_message TYPE bbps_ctr_log_msg_context.
ls_message-srm_object_id = iv_object_id.
ls_message-be_object_id = iv_be_object_id.
ls_message-msg_origin = iv_origin.
ls_message-msg_text = iv_msgtxt(200).
ls_message-msgty = iv_msgty.
ls_message-msgid = iv_msgid.
ls_message-msgno = iv_msgno.
ls_message-msgv1 = iv_msgv1.
ls_message-msgv2 = iv_msgv2.
ls_message-msgv3 = iv_msgv3.
ls_message-msgv4 = iv_msgv4.
APPEND ls_message TO ct_messages.
CLEAR: ls_message.
ENDFORM. " message_create
Regards
- Atul
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.