cancel
Showing results for 
Search instead for 
Did you mean: 

GOA Conversion

Former Member
0 Kudos

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

Accepted Solutions (0)

Answers (1)

Answers (1)

Former Member
0 Kudos

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