CRM_ORDER_MAINTAIN

Hello.
I'm trying to implement a solution using badi ORDER_SAVE and fm CRM_ORDER_MAINTAIN. I'm able to read some entries from organizational tree and add those entries to the order by doing something like this:
LOOP AT lt_entries INTO ls_entries.
    ADD 1 TO counter.
    ls_new_partners-ref_guid = ls_orderadm_h-guid.
    ls_new_partners-ref_kind = 'A'.
    ls_new_partners-kind_of_entry = 'C'.
    ls_new_partners-ref_partner_handle = counter.
    ls_new_partners-partner_fct = gc_partner_fct_26.
    ls_new_partners-partner_no  = ls_entries-partner.
    ls_new_partners-display_type = 'BP'.
    ls_new_partners-no_type = 'BP'.
    INSERT ls_new_partners INTO TABLE lt_new_partners.
    CLEAR ls_input_fields.
    REFRESH ls_input_fields-field_names.
*    ls_input_fields-ref_handle = ls_new_partners-ref_handle.
    ls_input_fields-ref_guid  = ls_orderadm_h-guid.
    ls_input_fields-ref_kind = 'A'.
    ls_input_fields-logical_key = ls_new_partners-ref_partner_handle.
    ls_input_fields-objectname = 'PARTNER'.
    ls_input_field_name-fieldname = 'PARTNER_FCT'.
    INSERT ls_input_field_name INTO TABLE ls_input_fields-field_names.
    ls_input_field_name-fieldname = 'NO_TYPE'.
    INSERT ls_input_field_name INTO TABLE ls_input_fields-field_names.
    ls_input_field_name-fieldname = 'DISPLAY_TYPE'.
    INSERT ls_input_field_name INTO TABLE ls_input_fields-field_names.
    ls_input_field_name-fieldname = 'PARTNER_NO'.
    INSERT ls_input_field_name INTO TABLE ls_input_fields-field_names.
    ls_input_field_name-fieldname = 'KIND_OF_ENTRY'.
    INSERT ls_input_field_name INTO TABLE ls_input_fields-field_names.
    INSERT ls_input_fields INTO TABLE lt_input_fields.
  ENDLOOP.
* Update the order *
  CALL FUNCTION 'CRM_ORDER_MAINTAIN'
    EXPORTING
      it_partner        = lt_new_partners
    CHANGING
      ct_input_fields   = lt_input_fields
    EXCEPTIONS
      error_occurred    = 1
      document_locked   = 2
      no_change_allowed = 3
      no_authority      = 4
      OTHERS            = 5.
Problem is that I'm loosing all the other manually added entries having different partner functions. I have tried to read the order using fm CRM_ORDER_READ and pass those partner entries to the fm CRM_ORDER_MAINTAIN by doing something like this:
MOVE-CORRESPONDING ls_partner TO ls_new_partners.
INSERT ls_new_partners INTO TABLE lt_new_partners.
*    ls_input_fields-ref_handle = ls_new_partners-ref_handle.
    ls_input_fields-ref_guid  = ls_orderadm_h-guid.
    ls_input_fields-ref_kind = 'A'.
    ls_input_fields-logical_key = ls_new_partners-ref_partner_handle.
    ls_input_fields-objectname = 'PARTNER'.
    ls_input_field_name-fieldname = 'PARTNER_FCT'.
    INSERT ls_input_field_name INTO TABLE ls_input_fields-field_names.
    ls_input_field_name-fieldname = 'NO_TYPE'.
    INSERT ls_input_field_name INTO TABLE ls_input_fields-field_names.
    ls_input_field_name-fieldname = 'DISPLAY_TYPE'.
    INSERT ls_input_field_name INTO TABLE ls_input_fields-field_names.
    ls_input_field_name-fieldname = 'PARTNER_NO'.
    INSERT ls_input_field_name INTO TABLE ls_input_fields-field_names.
    ls_input_field_name-fieldname = 'KIND_OF_ENTRY'.
    INSERT ls_input_field_name INTO TABLE ls_input_fields-field_names.
    INSERT ls_input_fields INTO TABLE lt_input_fields.
When I do this I loose all my entries.
What am I missing here? How can I use this fm for maintaining/deleting entries?
br, Johannes

Hello Conrad,
That is trully a weird problem.
I´ve never have faced something similar.
There is a report called CRM_DATAEXCHANGE_TOOLBOX where you can simulate a creation of an simple order.
If you are in CRM 3.0 you must apply note 718322 to have this report.
Another trick, insert a break-point inside this function and call transaction CRMD_ORDER, create the order filling the fields you are filling inside your program and see if the standard fills all the tables in the same way you are doing inside your program.
Just to check out, to create an order you have to:
1 - Call function CRM_ORDER_MAINTAIN
2 - Call function CRM_ORDER_SAVE
3 - Call function CRM_ORDER_INITIALIZE or CRM_ORDER_INIT_OW to clean up the memory and unlock the document you´ve just created.
Regards,
Mauricio

Similar Messages

  • Change Pricing Condition for an item with CRM_ORDER_MAINTAIN

    Hi community,
    I try to change an existing condition with the function module crm_order_maintain.
    Everything looks fine, no error no dump, but no success
    The condition stays the same!
    Can anybody find a solution for this?
    Heres my report so far:
    *& Report  ZTEST_PRICING2
    REPORT  ztest_pricing2.
    DATA: lt_guid      TYPE crmt_object_guid_tab,
          lt_item      TYPE crmt_object_guid_tab,
          lt_saved     TYPE crmt_return_objects,
          lt_pridoc    TYPE crmt_pric_cond_t,
          ls_pridoc    TYPE crmt_pric_cond,
          lt_pricom    TYPE crmt_pridoc_comt,
          ls_pricom    TYPE crmt_pridoc_com,
          lt_header    TYPE crmt_orderadm_h_comt,
          lt_input     TYPE crmt_input_field_tab,
          ls_input     TYPE crmt_input_field,
          ls_input_fn  TYPE CRMT_INPUT_FIELD_NAMES,
          ls_cond_chg  TYPE prct_cond_external_change,
          ls_cond      TYPE PRCT_COND_DU,
          lt_pricing_i TYPE CRMT_PRICING_I_WRKT.
    PARAMETERS: lv_head TYPE crmt_object_guid DEFAULT 'C4C61C4E35DDF306E10000000A024089'.
    PARAMETERS: lv_item TYPE crmt_object_guid DEFAULT '09C71C4E35DDF306E10000000A024089'.
    PARAMETERS: lv_kbetr TYPE prct_cond_rate DEFAULT '100'.
    INSERT lv_head INTO TABLE lt_guid.
    INSERT lv_item INTO TABLE lt_item.
    CALL FUNCTION 'CRM_ORDER_READ'
      EXPORTING
        it_header_guid                    = lt_guid
        it_item_guid                      = lt_item
    *   IV_MODE                           =
    *   IV_ONLY_SPEC_ITEMS                =
    *   IT_REQUESTED_OBJECTS              =
    *   IV_NO_AUTH_CHECK                  =
    *   IT_ITEM_USAGE_RANGE               =
    *   IV_SUBITEM_DEPTH                  = -1
    *   IT_OBJECT_FILTER                  =
    *   IV_ONLY_CHANGED_OBJ               = FALSE
    *   IV_STATUS_H_CHECK_RELEVANCE       = FALSE
      IMPORTING
        et_pridoc                         = lt_pridoc
        et_pricing_i                      = lt_pricing_i
    * CHANGING
    *   CV_LOG_HANDLE                     =
    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.
    IF sy-subrc <> 0 AND lt_pridoc IS NOT INITIAL.
      WRITE: / 'ERROR'.
      EXIT.
    ENDIF.
    READ TABLE lt_pridoc INDEX 1 INTO ls_pridoc.
    IF sy-subrc <> 0.
      WRITE: / 'ERROR'.
      EXIT.
    ENDIF.
    READ TABLE ls_pridoc-pric_cond INTO ls_cond WITH KEY kschl = 'PB00'.
    IF sy-subrc <> 0.
      WRITE: / 'ERROR'.
      EXIT.
    ENDIF.
    ls_input-ref_guid   = lv_head.
    ls_input-ref_kind   = 'A'.
    ls_input-objectname = 'PRIDOC'.
    ls_input_fn-fieldname = 'WAERS'.
    INSERT ls_input_fn INTO TABLE ls_input-field_names.
    ls_input_fn-fieldname = 'KBETR'.
    INSERT ls_input_fn INTO TABLE ls_input-field_names.
    INSERT ls_input INTO TABLE lt_input.
    ls_pricom-ref_guid   = lv_head.
    ls_pricom-ref_kind   = 'A'.
    *ls_pricom-PRICING_TYPE  = 'B'.
    *ls_pricom-pricing_procedure = 'ZZMTA'.
    ls_pricom-pric_cond[] = ls_pridoc-pric_cond[].
    MOVE-CORRESPONDING ls_cond TO ls_cond_chg.
    ls_cond_chg-waers = 'EUR'.
    ls_cond_chg-kbetr = lv_kbetr.
    INSERT ls_cond_chg INTO TABLE ls_pricom-cond_change.
    APPEND ls_pricom TO lt_pricom.
    CALL FUNCTION 'CRM_ORDER_MAINTAIN'
      EXPORTING
        it_pridoc         = lt_pricom
      CHANGING
    *    ct_orderadm_h     = lt_header
        ct_input_fields   = lt_input
      EXCEPTIONS
        error_occurred    = 1
        document_locked   = 2
        no_change_allowed = 3
        no_authority      = 4
        OTHERS            = 5.
    IF sy-subrc <> 0.
      EXIT.
    ENDIF.
    CALL FUNCTION 'CRM_ORDER_SAVE'
      EXPORTING
        it_objects_to_save         = lt_guid
      IMPORTING
        et_saved_objects           = lt_saved
    *   ET_EXCEPTION               =
    *   ET_OBJECTS_NOT_SAVED       =
    EXCEPTIONS
       document_not_saved         = 1
       OTHERS                     = 2.
    IF sy-subrc EQ 0.
      COMMIT WORK AND WAIT.
    ELSE.
      ROLLBACK WORK.
    ENDIF.
    regards
    Markus

    Hello Jordi,
    The example below is whereby i was trying to copy all the pricing condition on one document to another and deleting what's not present on the source document.
    You can used this piece of code to adapt your requirement.
    CALL FUNCTION 'ZCRC_FM_COPY_PRICE_COND_ALL'
              EXPORTING
    id_object_guid_src    = <fs_el_con_guid>
    id_object_guid_dest = <fs_el_so_guid>
    id_commit                  = abap_false
              EXCEPTIONS
    not_allowed         = 1
    error_occured     = 2
    OTHERS                 = 3.
      PERFORM f_recup_donnees USING     id_object_guid_src
                                                              id_object_guid_dest.
    PERFORM f_modif_condition_prix USING id_object_guid_src
                                                                                      id_object_guid_dest.
    PERFORM f_header_copy_pricing using id_object_guid_src
                                                                            id_object_guid_dest.
    FORM f_recup_donnees   USING      pd_object_guid_src TYPE crmt_object_guid
                                                                           pd_object_guid_dest TYPE crmt_object_guid.
      DATA:
         lt_header_guid        TYPE crmt_object_guid_tab.
      INSERT pd_object_guid_src  INTO TABLE lt_header_guid.
      INSERT pd_object_guid_dest INTO TABLE  lt_header_guid.
      CLEAR: gt_orderadm_i, gt_doc_flow.
      CALL FUNCTION 'CRM_ORDER_READ'
        EXPORTING
          it_header_guid       = lt_header_guid
        IMPORTING
          et_doc_flow          = gt_doc_flow            
          et_orderadm_i        = gt_orderadm_i
        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.
      IF sy-subrc NE 0.
        RAISE error_occured.
      ENDIF.
    " F_RECUP_DONNEES
    FORM f_modif_condition_prix USING pd_guid_src TYPE crmt_object_guid
                                      pd_guid_dest TYPE crmt_object_guid.
      DATA : ld_pd_handle_src     TYPE prct_handle,
              ld_pd_handle_dest    TYPE prct_handle,
              lt_komv_print_src    TYPE prct_cond_print_t,
    lt_komv_print_dest   TYPE prct_cond_print_t,
              ls_komv_print_dest   LIKE LINE OF lt_komv_print_dest,
              ls_komv_print_src    LIKE LINE OF lt_komv_print_src,
              lt_cond_chg          TYPE prct_cond_print_t,
              lt_cond_chg_insert   TYPE prct_cond_print_t,
              ls_cond_chg          TYPE prct_cond_print,
              ls_cond_chg_tmp      TYPE prct_cond_print,
              ls_input_fields      TYPE crmt_input_field,
              lt_input_fields      TYPE crmt_input_field_tab.
      DATA : bal_log         TYPE balloghndl,
             lt_item_ret     TYPE prct_item_ret_t,
             lt_cond_ret     TYPE prct_cond_print_t,
             ld_data_changed TYPE xfeld,
             gv_decimal      TYPE usdefaults-dcpfm,
             ld_lines        TYPE i,
             ld_ajout_cond   TYPE abap_bool.
      FIELD-SYMBOLS : <fs_orderadm_i_dest>  TYPE crmt_orderadm_i_wrk,
    <fs_orderadm_i_src>   TYPE crmt_orderadm_i_wrk,
                      <fs_cond_chg>         TYPE prct_cond_print,
    <fs_cond_chg_insert>  TYPE prct_cond_print.
    * Début Ajout CD1K904313-001.
      DATA: ld_guid_src  TYPE crmt_object_guid.
      FIELD-SYMBOLS: <fs_doc_flow>  TYPE crmt_doc_flow_wrk.
    * Début Ajout CD1K904313-001.
    * Verrouillage des documents source et destinataire
      PERFORM f_lock_document USING pd_guid_src.
      PERFORM f_lock_document USING pd_guid_dest.
    *Récupérer le pricing handle des documents
    * Document source
      CALL FUNCTION 'CRM_PRIDOC_GET_HANDLE_OW'
        EXPORTING
    iv_header_guid             = pd_guid_src
        IMPORTING
    ev_pd_handle               = ld_pd_handle_src
        EXCEPTIONS
    error_occurred             = 1
    handle_determination_error = 2
          orgdata_error              = 3
          OTHERS                     = 4.
      IF sy-subrc <> 0.
        RETURN.
      ENDIF.
    * Document destinataire
      CALL FUNCTION 'CRM_PRIDOC_GET_HANDLE_OW'
        EXPORTING
          iv_header_guid             = pd_guid_dest
        IMPORTING
          ev_pd_handle               = ld_pd_handle_dest
        EXCEPTIONS
          error_occurred             = 1
          handle_determination_error = 2
          orgdata_error              = 3
          OTHERS                     = 4.
      IF sy-subrc <> 0.
        RETURN.
      ENDIF.
    * A ne pas traiter les postes de type ZPDF
      DELETE  gt_orderadm_i WHERE itm_type = 'ZPDF'.
      LOOP AT gt_orderadm_i ASSIGNING <fs_orderadm_i_dest> WHERE header = pd_guid_dest.
        REFRESH : lt_komv_print_src,
                  lt_komv_print_dest,
    lt_cond_chg,
    lt_cond_chg_insert.
    * Début Modif CD1K904313-001.
    * Récupérer le guid de l'item liée au item destinataire.
        READ TABLE gt_doc_flow ASSIGNING <fs_doc_flow> WITH KEY objkey_b = <fs_orderadm_i_dest>-guid.
        CHECK sy-subrc EQ 0.
        ld_guid_src = <fs_doc_flow>-objkey_a.
    *    READ TABLE gt_orderadm_i ASSIGNING <fs_orderadm_i_src> WITH KEY header = pd_guid_src
    * number_int = <fs_orderadm_i_dest>-number_int.
    * Fin Modif CD1K904313-001.
    * Récupérer les pricing document
        IF sy-subrc EQ 0.
    *     Document source
          CALL FUNCTION 'PRC_PD_ITEM_SHOW'
            EXPORTING
              iv_pd_handle        = ld_pd_handle_src
    *         iv_item_no          = <fs_orderadm_i_src>-guid    "Supression CD1K904313-001
              iv_item_no          = ld_guid_src                 "Addition CD1K904313-001
            IMPORTING
              et_komv_print       = lt_komv_print_src
            EXCEPTIONS
              non_existing_handle = 1
              non_existing_item   = 2
              ipc_error           = 3
              OTHERS              = 4.
        ENDIF.
    *   Document destinataire
        CALL FUNCTION 'PRC_PD_ITEM_SHOW'
          EXPORTING
            iv_pd_handle        = ld_pd_handle_dest
            iv_item_no          = <fs_orderadm_i_dest>-guid
          IMPORTING
    et_komv_print       = lt_komv_print_dest
          EXCEPTIONS
            non_existing_handle = 1
            non_existing_item   = 2
            ipc_error           = 3
            OTHERS              = 4.
    * Modification et Suppression des conditions de prix
        LOOP AT lt_komv_print_dest INTO ls_komv_print_dest .
          CLEAR: ls_cond_chg,
                 ls_komv_print_src.
          MOVE-CORRESPONDING ls_komv_print_dest TO ls_cond_chg.
    * Rechercher la condition sur le document source
          READ TABLE lt_komv_print_src INTO ls_komv_print_src WITH KEY kschl = ls_komv_print_dest-kschl
    zaehk = ls_komv_print_dest-zaehk. "CD1K904313
          IF sy-subrc EQ 0.
            ls_cond_chg-kbetr_prt = ls_komv_print_src-kbetr_prt.
            ls_cond_chg-kwert     = ls_komv_print_src-kwert.
            ls_cond_chg-kinak     = ls_komv_print_src-kinak.
          ELSEIF ls_cond_chg-kschl IS NOT INITIAL.
            CLEAR ls_cond_chg.
            CONTINUE.
          ENDIF.
    *     Format décimal
          CASE gv_decimal.
            WHEN space.       "format N.NNN,NN
              REPLACE ALL OCCURRENCES OF '.' IN ls_cond_chg-kbetr_prt WITH ','.
            WHEN 'Y'.         "format N NNN NNN,NN
              REPLACE ALL OCCURRENCES OF '.' IN ls_cond_chg-kbetr_prt WITH ','.
          ENDCASE.
          INSERT ls_cond_chg INTO TABLE lt_cond_chg.
          CLEAR ls_cond_chg.
        ENDLOOP.
    * Ajout des conditions de prix
        LOOP AT lt_komv_print_src INTO ls_komv_print_src WHERE kschl IS NOT INITIAL.
          CLEAR: ls_cond_chg, ld_lines, ls_komv_print_dest, ls_cond_chg_tmp, ld_ajout_cond.
    * Vérifier la présence de la condition sur le document destinataire
          READ TABLE lt_komv_print_dest INTO ls_komv_print_dest WITH KEY kschl = ls_komv_print_src-kschl
    zaehk = ls_komv_print_src-zaehk. "CD1K904313.
          IF sy-subrc EQ 0.
            CLEAR: ls_cond_chg, ls_komv_print_dest.
            CONTINUE.
          ELSE.
            DESCRIBE TABLE lt_cond_chg LINES ld_lines.
            READ TABLE lt_cond_chg INTO ls_cond_chg_tmp INDEX ld_lines.
            IF sy-subrc EQ 0.
              ld_ajout_cond = abap_true.
              MOVE-CORRESPONDING ls_komv_print_src TO ls_cond_chg.
              ls_cond_chg-knumv     = ls_cond_chg_tmp-knumv.
              ls_cond_chg-kposn     = ls_cond_chg_tmp-kposn.
              ls_cond_chg-stunr     = ls_cond_chg_tmp-stunr + 10.
            ELSE.
              CLEAR: ls_cond_chg, ld_lines, ls_komv_print_dest, ls_cond_chg_tmp.
              CONTINUE.
            ENDIF.
          ENDIF.
    *     Format décimal
          CASE gv_decimal.
            WHEN space.             "format N.NNN,NN
              REPLACE ALL OCCURRENCES OF '.' IN ls_cond_chg-kbetr_prt WITH ','.
            WHEN 'Y'.               "format N NNN NNN,NN
              REPLACE ALL OCCURRENCES OF '.' IN ls_cond_chg-kbetr_prt WITH ','.
          ENDCASE.
    * Récupérer les nouvelles conditions qui seront ajouté au document destinataire
          IF ld_ajout_cond EQ abap_true.
            INSERT ls_cond_chg INTO TABLE lt_cond_chg_insert.
          ENDIF.
          INSERT ls_cond_chg INTO TABLE lt_cond_chg.
          CLEAR ls_cond_chg.
        ENDLOOP.
        CALL FUNCTION 'PRC_INT_ITEM_INPUT'
          EXPORTING
            iv_pd_handle        = ld_pd_handle_dest
            iv_item_no          = <fs_orderadm_i_dest>-guid
            it_cond_prt         = lt_cond_chg
            iv_bal_log          = bal_log
            iv_req_ret          = abap_true
            iv_req_cond_prt     = abap_true
          IMPORTING
            et_item_ret         = lt_item_ret
            et_cond_prt         = lt_cond_ret
            ev_data_changed     = ld_data_changed
          EXCEPTIONS
            non_existing_handle = 1
            non_existing_item   = 2
            ipc_error           = 3.
        IF sy-subrc = 0.
    *     En cas d'ajout de nouvelles conditions de prix, appeler le MF PRC_INT_ITEM_INPUT
    *     avec les montants
          IF lt_cond_chg_insert IS NOT INITIAL.
            REFRESH lt_cond_chg[].
            lt_cond_chg[] = lt_cond_ret[].
            LOOP AT lt_cond_chg_insert ASSIGNING <fs_cond_chg_insert>.
              READ TABLE lt_cond_chg ASSIGNING <fs_cond_chg> WITH KEY kschl = <fs_cond_chg_insert>-kschl.
              IF sy-subrc EQ 0.
                <fs_cond_chg>-kwert     = <fs_cond_chg_insert>-kwert.
                <fs_cond_chg>-kbetr_prt = <fs_cond_chg_insert>-kbetr_prt.
              ENDIF.
            ENDLOOP.
            REFRESH lt_cond_ret[].
            CALL FUNCTION 'PRC_INT_ITEM_INPUT'
              EXPORTING
                iv_pd_handle        = ld_pd_handle_dest
                iv_item_no          = <fs_orderadm_i_dest>-guid
                it_cond_prt         = lt_cond_chg
                iv_bal_log          = bal_log
                iv_req_ret          = abap_true
                iv_req_cond_prt     = abap_true
              IMPORTING
                et_item_ret         = lt_item_ret
                et_cond_prt         = lt_cond_ret
                ev_data_changed     = ld_data_changed
              EXCEPTIONS
                non_existing_handle = 1
                non_existing_item   = 2
                ipc_error           = 3.
          ENDIF.
    *   Publish event afin de sauvegarder les conditions de prix
          CALL FUNCTION 'CRM_EVENT_PUBLISH_OW'
            EXPORTING
              iv_obj_name = 'PRIDOC'
              iv_guid_hi  = pd_guid_dest
              iv_kind_hi  = 'A'
              iv_event    = 'SAVE'
            EXCEPTIONS
              OTHERS      = 1.
    *   As no order_maintain will follow implicitly and therefore no
    *   exec times for the events will be set, call CRM_ORDER_MAINTAIN
    *   without any parameters
    *   Then the exec time 'end of document' will be set and with the
    *   group logic also all exec times before
    *   But at least one object is needed in input_fields
    *   --> use PRIDOC
          ls_input_fields-ref_guid   = <fs_orderadm_i_dest>-guid.
          ls_input_fields-ref_kind   = 'B'.
          ls_input_fields-objectname = 'PRIDOC'.
          INSERT ls_input_fields INTO TABLE lt_input_fields.
          CLEAR ls_input_fields.
          CALL FUNCTION 'CRM_ORDER_MAINTAIN'
            CHANGING
              ct_input_fields   = lt_input_fields
            EXCEPTIONS
              error_occurred    = 1
              document_locked   = 2
              no_change_allowed = 3
              no_authority      = 4
              OTHERS            = 5.
        ENDIF.
      ENDLOOP.
    " F_MODIF_CONDITION_PRIX
    *& Form  F_LOCK_DOCUMENT
    * Verrouillage d'un document
    FORM f_lock_document  USING pd_guid TYPE crmt_object_guid.
      CONSTANTS : lc_orderadm_h TYPE  crmt_object_name  VALUE 'ORDERADM_H',
                  lc_orderadm_i TYPE  crmt_object_name  VALUE 'ORDERADM_I'.
      DATA: lv_process_mode      TYPE crmt_mode,
            lv_order_initialized TYPE crmt_boolean,
            lv_process_type      TYPE crmt_process_type,
            lv_already_locked    TYPE abap_bool.
      DATA: ls_admin_ui_status  TYPE crmt_admin_ui_status,
            ls_item_usage_range TYPE crmt_item_usage_range.
      DATA: lt_objects_to_read   TYPE crmt_object_guid_tab,
            lt_requested_objects TYPE crmt_object_name_tab,
            lt_item_usage_range  TYPE crmt_item_usage_range_tab,
            lt_locked_contract   TYPE crmt_object_guid_tab.
      INSERT pd_guid INTO TABLE lt_objects_to_read.
      INSERT lc_orderadm_h INTO TABLE lt_requested_objects.
      INSERT lc_orderadm_i INTO TABLE lt_requested_objects.
      ls_item_usage_range-sign  = 'E'.
      ls_item_usage_range-value = '02'.
      INSERT ls_item_usage_range INTO TABLE lt_item_usage_range.
    * LAM: Financing Options should be viewed in a separate screen:
      ls_item_usage_range-sign  = 'E'.
      ls_item_usage_range-value = '05'.   "Financing options
      INSERT ls_item_usage_range INTO TABLE lt_item_usage_range.
    *-> read document in change mode
      CALL FUNCTION 'CRM_ORDER_READ'
        EXPORTING
          it_header_guid       = lt_objects_to_read
          iv_mode              = 'B'
          it_requested_objects = lt_requested_objects
          it_item_usage_range  = lt_item_usage_range
        EXCEPTIONS
          document_not_found   = 1
          error_occurred       = 2
          document_locked      = 3
          no_change_authority  = 4
          no_display_authority = 5
          OTHERS               = 6.
      PERFORM enqueue_order IN PROGRAM saplcrm_order_ow IF FOUND
        USING pd_guid
              abap_false
              abap_false
              abap_false
    CHANGING sy-subrc
              lv_already_locked
              lt_locked_contract.
    " F_LOCK_DOCUMENT
    * Fin Ajout CD1K904074-001
    FORM f_header_copy_pricing  USING   pd_guid_src
    pd_guid_dest.
      DATA : ld_pd_handle_src     TYPE prct_handle,
              ld_pd_handle_dest    TYPE prct_handle,
              lt_komv_print_src    TYPE prct_cond_print_t,
    lt_komv_print_dest   TYPE prct_cond_print_t,
              ls_komv_print_dest   LIKE LINE OF lt_komv_print_dest,
              ls_komv_print_src    LIKE LINE OF lt_komv_print_src,
              lt_cond_chg          TYPE prct_cond_print_t,
              ls_cond_chg          TYPE prct_cond_print,
              ls_input_fields      TYPE crmt_input_field,
              lt_input_fields      TYPE crmt_input_field_tab.
      DATA : bal_log         TYPE balloghndl,
             lt_cond_ret     TYPE prct_cond_print_t,
             ld_data_changed TYPE xfeld,
             gv_decimal      TYPE usdefaults-dcpfm.
    * Verrouillage des documents source et destinataire
      PERFORM f_lock_document USING pd_guid_src.
      PERFORM f_lock_document USING pd_guid_dest.
    *  Récupérer le pricing handle des documents
    * Document source
      CALL FUNCTION 'CRM_PRIDOC_GET_HANDLE_OW'
        EXPORTING
          iv_header_guid             = pd_guid_src
        IMPORTING
          ev_pd_handle               = ld_pd_handle_src
        EXCEPTIONS
          error_occurred             = 1
          handle_determination_error = 2
          orgdata_error              = 3
          OTHERS                     = 4.
      IF sy-subrc <> 0.
        RETURN.
      ENDIF.
    * Document destinataire
      CALL FUNCTION 'CRM_PRIDOC_GET_HANDLE_OW'
        EXPORTING
          iv_header_guid             = pd_guid_dest
        IMPORTING
          ev_pd_handle               = ld_pd_handle_dest
        EXCEPTIONS
          error_occurred             = 1
          handle_determination_error = 2
          orgdata_error              = 3
          OTHERS                     = 4.
      IF sy-subrc <> 0.
        RETURN.
      ENDIF.
    *  * Récupérer les pricing document
    *  Document Source
      CALL FUNCTION 'PRC_PD_HEAD_SHOW'
        EXPORTING
          iv_pd_handle        = ld_pd_handle_src
        IMPORTING
          et_komv_print       = lt_komv_print_src
        EXCEPTIONS
          non_existing_handle = 1
          ipc_error           = 2
          OTHERS              = 3.
      CHECK sy-subrc EQ 0.
    *  Document Destinataire
      CALL FUNCTION 'PRC_PD_HEAD_SHOW'
        EXPORTING
          iv_pd_handle        = ld_pd_handle_dest
        IMPORTING
    et_komv_print       = lt_komv_print_dest
        EXCEPTIONS
          non_existing_handle = 1
          ipc_error           = 2
          OTHERS              = 3.
      CHECK sy-subrc EQ 0.
    *  * Modification et Suppression des conditions de prix
      LOOP AT lt_komv_print_src INTO ls_komv_print_src .
        CLEAR: ls_cond_chg,
               ls_komv_print_dest.
        MOVE-CORRESPONDING ls_komv_print_src TO ls_cond_chg.
    * Rechercher la condition sur le document source
        READ TABLE lt_komv_print_dest INTO ls_komv_print_dest WITH KEY kschl = ls_komv_print_src-kschl
    zaehk = ls_komv_print_src-zaehk.
        IF sy-subrc EQ 0.
          IF ls_komv_print_src-kbetr NE ls_komv_print_dest-kbetr.
            ls_cond_chg-kbetr_prt = ls_komv_print_src-kbetr_prt.
            ls_cond_chg-kwert     = ls_komv_print_src-kwert.
            ls_cond_chg-kinak     = ls_komv_print_src-kinak.
            CASE gv_decimal.
              WHEN space.       "format N.NNN,NN
                REPLACE ALL OCCURRENCES OF '.' IN ls_cond_chg-kbetr_prt WITH ','.
              WHEN 'Y'.         "format N NNN NNN,NN
                REPLACE ALL OCCURRENCES OF '.' IN ls_cond_chg-kbetr_prt WITH ','.
            ENDCASE.
          ENDIF.
        ENDIF.
        CLEAR ls_cond_chg-krech.
        INSERT ls_cond_chg INTO TABLE lt_cond_chg.
        CLEAR ls_cond_chg.
      ENDLOOP.
      CALL FUNCTION 'PRC_INT_HEAD_INPUT'
        EXPORTING
          iv_pd_handle        = ld_pd_handle_dest
          iv_bal_log          = bal_log
          it_cond_prt         = lt_cond_chg
          iv_req_ret          = abap_true
          iv_req_cond_prt     = abap_true
        IMPORTING
          et_cond_prt         = lt_cond_ret
          ev_data_changed     = ld_data_changed
        EXCEPTIONS
          non_existing_handle = 1
          ipc_error           = 2
          not_allowed         = 3
          OTHERS              = 4.
      CHECK sy-subrc EQ 0.
    *    *   Publish event afin de sauvegarder les conditions de prix
      CALL FUNCTION 'CRM_EVENT_PUBLISH_OW'
        EXPORTING
          iv_obj_name = 'PRIDOC'
          iv_guid_hi  = pd_guid_dest
          iv_kind_hi  = 'A'
          iv_event    = 'SAVE'
        EXCEPTIONS
          OTHERS      = 1.
    *   As no order_maintain will follow implicitly and therefore no
    *   exec times for the events will be set, call CRM_ORDER_MAINTAIN
    *   without any parameters
    *   Then the exec time 'end of document' will be set and with the
    *   group logic also all exec times before
    *   But at least one object is needed in input_fields
    *   --> use PRIDOC
      ls_input_fields-ref_guid   = pd_guid_dest.
      ls_input_fields-ref_kind   = 'A'.
      ls_input_fields-objectname = 'PRIDOC'.
      INSERT ls_input_fields INTO TABLE lt_input_fields.
      CLEAR ls_input_fields.
      CALL FUNCTION 'CRM_ORDER_MAINTAIN'
        CHANGING
          ct_input_fields   = lt_input_fields
        EXCEPTIONS
          error_occurred    = 1
          document_locked   = 2
          no_change_allowed = 3
          no_authority      = 4
          OTHERS            = 5.
    ENDFORM.
    FORM f_header_copy_pricing  USING   pd_guid_src
    pd_guid_dest.
      DATA : ld_pd_handle_src     TYPE prct_handle,
              ld_pd_handle_dest    TYPE prct_handle,
              lt_komv_print_src    TYPE prct_cond_print_t,
    lt_komv_print_dest   TYPE prct_cond_print_t,
              ls_komv_print_dest   LIKE LINE OF lt_komv_print_dest,
              ls_komv_print_src    LIKE LINE OF lt_komv_print_src,
              lt_cond_chg          TYPE prct_cond_print_t,
              ls_cond_chg          TYPE prct_cond_print,
              ls_input_fields      TYPE crmt_input_field,
              lt_input_fields      TYPE crmt_input_field_tab.
      DATA : bal_log         TYPE balloghndl,
             lt_cond_ret     TYPE prct_cond_print_t,
             ld_data_changed TYPE xfeld,
             gv_decimal      TYPE usdefaults-dcpfm.
      PERFORM f_lock_document USING pd_guid_src.
      PERFORM f_lock_document USING pd_guid_dest.
    *  Récupérer le pricing handle des documents
    * Document source
      CALL FUNCTION 'CRM_PRIDOC_GET_HANDLE_OW'
        EXPORTING
          iv_header_guid             = pd_guid_src
        IMPORTING
          ev_pd_handle               = ld_pd_handle_src
        EXCEPTIONS
          error_occurred             = 1
          handle_determination_error = 2
          orgdata_error              = 3
          OTHERS                     = 4.
      IF sy-subrc <> 0.
        RETURN.
      ENDIF.
    * Document destinataire
      CALL FUNCTION 'CRM_PRIDOC_GET_HANDLE_OW'
        EXPORTING
          iv_header_guid             = pd_guid_dest
        IMPORTING
          ev_pd_handle               = ld_pd_handle_dest
        EXCEPTIONS
          error_occurred             = 1
          handle_determination_error = 2
          orgdata_error              = 3
          OTHERS                     = 4.
      IF sy-subrc <> 0.
        RETURN.
      ENDIF.
    *  * Récupérer les pricing document
    *  Document Source
      CALL FUNCTION 'PRC_PD_HEAD_SHOW'
        EXPORTING
          iv_pd_handle        = ld_pd_handle_src
        IMPORTING
          et_komv_print       = lt_komv_print_src
        EXCEPTIONS
          non_existing_handle = 1
          ipc_error           = 2
          OTHERS              = 3.
      CHECK sy-subrc EQ 0.
    *  Document Destinataire
      CALL FUNCTION 'PRC_PD_HEAD_SHOW'
        EXPORTING
          iv_pd_handle        = ld_pd_handle_dest
        IMPORTING
    et_komv_print       = lt_komv_print_dest
        EXCEPTIONS
          non_existing_handle = 1
          ipc_error           = 2
          OTHERS              = 3.
      CHECK sy-subrc EQ 0.
    *  * Modification et Suppression des conditions de prix
      LOOP AT lt_komv_print_src INTO ls_komv_print_src .
        CLEAR: ls_cond_chg,
               ls_komv_print_dest.
        MOVE-CORRESPONDING ls_komv_print_src TO ls_cond_chg.
    * Rechercher la condition sur le document source
        READ TABLE lt_komv_print_dest INTO ls_komv_print_dest WITH KEY kschl = ls_komv_print_src-kschl
    zaehk = ls_komv_print_src-zaehk.
        IF sy-subrc EQ 0.
          IF ls_komv_print_src-kbetr NE ls_komv_print_dest-kbetr.
            ls_cond_chg-kbetr_prt = ls_komv_print_src-kbetr_prt.
            ls_cond_chg-kwert     = ls_komv_print_src-kwert.
            ls_cond_chg-kinak     = ls_komv_print_src-kinak.
            CASE gv_decimal.
              WHEN space.       "format N.NNN,NN
                REPLACE ALL OCCURRENCES OF '.' IN ls_cond_chg-kbetr_prt WITH ','.
              WHEN 'Y'.         "format N NNN NNN,NN
                REPLACE ALL OCCURRENCES OF '.' IN ls_cond_chg-kbetr_prt WITH ','.
            ENDCASE.
          ENDIF.
        ENDIF.
        CLEAR ls_cond_chg-krech.
        INSERT ls_cond_chg INTO TABLE lt_cond_chg.
        CLEAR ls_cond_chg.
      ENDLOOP.
      CALL FUNCTION 'PRC_INT_HEAD_INPUT'
        EXPORTING
          iv_pd_handle        = ld_pd_handle_dest
          iv_bal_log          = bal_log
          it_cond_prt         = lt_cond_chg
          iv_req_ret          = abap_true
          iv_req_cond_prt     = abap_true
        IMPORTING
          et_cond_prt         = lt_cond_ret
          ev_data_changed     = ld_data_changed
        EXCEPTIONS
          non_existing_handle = 1
          ipc_error           = 2
          not_allowed         = 3
          OTHERS              = 4.
      CHECK sy-subrc EQ 0.
      CALL FUNCTION 'CRM_EVENT_PUBLISH_OW'
        EXPORTING
          iv_obj_name = 'PRIDOC'
          iv_guid_hi  = pd_guid_dest
          iv_kind_hi  = 'A'
          iv_event    = 'SAVE'
        EXCEPTIONS
          OTHERS      = 1.
      ls_input_fields-ref_guid   = pd_guid_dest.
      ls_input_fields-ref_kind   = 'A'.
      ls_input_fields-objectname = 'PRIDOC'.
      INSERT ls_input_fields INTO TABLE lt_input_fields.
      CLEAR ls_input_fields.
      CALL FUNCTION 'CRM_ORDER_MAINTAIN'
        CHANGING
          ct_input_fields   = lt_input_fields
        EXCEPTIONS
          error_occurred    = 1
          document_locked   = 2
          no_change_allowed = 3
          no_authority      = 4
          OTHERS            = 5.

  • How to update multiple Price conditions in FM CRM_ORDER_MAINTAIN

    Hi All,
          need to update multiple price conditions in a contract Thru FM CRM_ORDER_MAINTAIN.
    please see the piece of code that am using...
      am able to update single price condition...but not able to populate 2 or more .......i,e..ADD A Condition
    i,e...DATA : ls_cond TYPE prct_cond_external_input,
           lt_cond TYPE prct_cond_external_input_t.
    DATA : ls_con TYPE PRCT_COND_DU,
           lt_con TYPE PRCT_COND_DU_TAB.
    Create Condition Type
    *ls_con-KNUMV = lv_header_guid.
    *ls_con-KPOSN = lv_item_guid.
    ls_con-stunr  = '134'.
    IF Y EQ 1.
      ls_con-ZAEHK = '001'.
    ELSE.
       ls_con-ZAEHK = '002'.
    *ENDIF.
    *ls_con-kschl = 'ZFP1'.
    **ls_cond-waers = 'CNY'.
    *ls_con-kbetr = '0.00'.
    *ls_con-kpein = '1'.
    ls_cond-kschl = 'ZFP1'.
    ls_cond-waers = 'CNY'.
    ls_cond-kbetr = '0'.
    ls_cond-kpein = '1'.
    ls_cond-knumh = lv_item_guid .
    CLEAR ls_Price_doc.
    ls_Price_doc-ref_guid = lv_item_guid.
    ls_Price_doc-ref_kind = 'A'.
    IF Y EQ 1.
    ls_Price_doc-ref_handle = '000000001'.
    ELSE.
      ls_Price_doc-ref_handle = '000000002'.
    ENDIF.
    *ls_price_doc-PRIC_COND[] = lt_cond[].
    *INSERT ls_con into table ls_price_doc-PRIC_COND.
    INSERT ls_cond into table ls_price_doc-COND_ADD.
    INSERT ls_price_doc INTO TABLE lt_price_doc.
    ls_input_fields-ref_guid    = lv_item_guid.
    ls_input_field_names-fieldname = 'KNUMH'.
    INSERT ls_input_fields INTO TABLE lt_input_fields.
    ls_input_field_names-fieldname = 'KPOSN'.
    INSERT ls_input_fields INTO TABLE lt_input_fields.
    ls_input_field_names-fieldname = 'KSCHL'.
    INSERT ls_input_fields INTO TABLE lt_input_fields.
    ls_input_field_names-fieldname = 'KPEIN'.
    INSERT ls_input_fields INTO TABLE lt_input_fields.
    ls_input_field_names-fieldname = 'STUNR'.
    INSERT ls_input_fields INTO TABLE lt_input_fields.
    ls_input_field_names-fieldname = 'ZAEHK'.
    INSERT ls_input_fields INTO TABLE lt_input_fields.
    ls_input_field_names-fieldname = 'WAERS'.
    INSERT ls_input_fields INTO TABLE lt_input_fields.
    ls_input_field_names-fieldname = 'KBETR'.
    INSERT ls_input_fields INTO TABLE lt_input_fields.
    CLEAR ls_input_fields.
    Ls_input_fields-ref_guid    = lv_item_guid.
    ls_input_fields-ref_kind    = 'B'.
    ls_input_fields-objectname  = 'PRIDOC'.
    *ls_input_fields-logical_key = '0001'.
    ls_input_fields-field_names = lt_input_field_names.
    INSERT ls_input_fields INTO TABLE lt_input_fields.
    CLEAR ls_input_fields.
    CLEAR ls_Price_agreement.
    Clear ls_cond.
    I kept this under code. loop, for item records.....
    Though the internal table lt_price_doc. is holding all the records, it is updating only one record. can you any one pls guide me ,

    This example works fine for me. Modify it according to your needs...
    Price
                  IF it_item-value IS NOT INITIAL.
                    ls_cond-kschl = 'PR00'. " add price
                    ls_cond-kbetr = it_item-value.
                    ls_cond-waers = st_head-currency.
                    INSERT ls_cond INTO TABLE ls_pridoc_com-cond_add.   
                    index_2 = 1.
                    CLEAR: ls_cond.
                  ENDIF.
    Discount
                  IF it_item-discount IS NOT INITIAL.
                    ls_cond-kschl = 'ZPPP'. " add discount
                    wa_procent_calc = it_item-discount * 10.
                    ls_cond-kbetr = wa_procent_calc."it_item-discount.
                    ls_cond-waers = '%'."st_head-currency.
                    INSERT ls_cond INTO TABLE ls_pridoc_com-cond_add.   
                    index_2 = 1.
                    CLEAR: ls_cond, wa_procent_calc.
                  ENDIF.
                  IF index_2 = 1.
                    ls_pridoc_com-ref_handle = counter.
                    ls_pridoc_com-ref_kind = 'B'.
                    INSERT ls_pridoc_com INTO TABLE gt_pridoc_com.
                    CLEAR: index_2,ls_pridoc_com.
                  ENDIF.

  • Error Occured in CRM_ORDER_MAINTAIN . Kindly help asap.

    I have written folowing code but exception occurs in changing parameter lt_exception of FM maintain.What can be the possible error.
    msg no - 0004
    REPORT  ZTEST_PROGRAM.
    *Internal tables
    Data : lt_partner           TYPE              crmt_partner_comt,
           lt_sales             TYPE              crmt_sales_comt,
           lt_orgman            TYPE              crmt_orgman_comt,
           lt_status            TYPE              crmt_status_comt,
           lt_customer_h        TYPE              CRMT_SERVICE_H_COMT,
           lt_input_field       TYPE              crmt_input_field_names_tab,
           lt_exception         TYPE              crmt_exception_t,
           lt_crm_save          TYPE              crmt_object_guid_tab,
           lt_orderadm_h        TYPE              crmt_orderadm_h_comt,
           lt_saved_objects     TYPE              crmt_return_objects,
           lt_objects_not_saved TYPE              CRMT_OBJECT_GUID_TAB,
           lt_input             TYPE              crmt_input_field_tab.
    *Structures
    Data : ls_partner           TYPE                      crmt_partner_com,
           ls_sales             TYPE                      crmt_sales_com,
           ls_orgman            TYPE                      crmt_orgman_com,
           ls_status            TYPE                      crmt_status_com,
           ls_input             TYPE                      crmt_input_field,
           ls_input_field       TYPE                      crmt_input_field_names,
           ls_crm_save          TYPE                      crmt_object_guid,
           ls_saved_objects     LIKE LINE OF              lt_saved_objects,
           ls_orderadm_h        TYPE                      crmt_orderadm_h_com,
           ls_customer_h        TYPE                      CRMT_SERVICE_H_COM.
    *Variables
    Data : lv_guid              TYPE                      guid_16,
           lv_timezone          TYPE                      timezone,
           lv_timestamp         TYPE                      timestamp,
           lv_log_handle        TYPE                      balloghndl.
    GET GUID
    CALL FUNCTION 'GUID_CREATE'
        IMPORTING
          ev_guid_16 = lv_guid.
    Filling status data
      CLEAR ls_status.
      ls_status-ref_guid        = lv_guid.
      ls_status-ref_kind        = 'A'.
      ls_status-status          = 'E0003'.
      ls_status-user_stat_proc  = 'CRMORDER'.
      ls_status-activate        = 'X'.
      APPEND ls_status TO lt_status.
    Filling the partner data
      CLEAR ls_partner.
      ls_partner-ref_guid           = lv_guid.
      ls_partner-ref_kind           = 'A'.
      ls_partner-ref_partner_handle = '0001'.
      ls_partner-kind_of_entry      = 'C'.
      ls_partner-partner_fct        = '00000001'. " Sold to Party
      ls_partner-partner_no         = '190'.
      ls_partner-display_type       = 'BP'.
      ls_partner-no_type            = 'BP'.
      INSERT ls_partner INTO TABLE lt_partner.
    Input Fields for Partner Data that are to be changed
      CLEAR ls_input.
        ls_input-ref_guid = lv_guid.
        ls_input-ref_kind = 'A'.
        ls_input-logical_key  = '0001'.
        ls_input-objectname = 'PARTNER'.
        ls_input_field-fieldname = 'DISPLAY_TYPE'.
        INSERT ls_input_field INTO TABLE lt_input_field.
        ls_input_field-fieldname = 'KIND_OF_ENTRY'.
        INSERT ls_input_field INTO TABLE lt_input_field.
        ls_input_field-fieldname = 'NO_TYPE'.
        INSERT ls_input_field INTO TABLE lt_input_field.
        ls_input_field-fieldname = 'PARTNER_FCT'.
        INSERT ls_input_field INTO TABLE lt_input_field.
        ls_input_field-fieldname = 'PARTNER_NO'.
        INSERT ls_input_field INTO TABLE lt_input_field.
        ls_input-field_names[] = lt_input_field[].
        INSERT ls_input INTO TABLE lt_input.
    Prepare Organisation Data
      Clear ls_orgman.
      ls_orgman-ref_guid              = lv_guid.
      ls_orgman-ref_kind              = 'A'.
      ls_orgman-sales_group_ori       = 'A'.
      ls_orgman-sales_orgr_ori        = 'A'.
      ls_orgman-division_ori          = 'A'.
      ls_orgman-dis_channel_ori       = 'A'.
      APPEND ls_orgman TO lt_orgman.
    Input Fields for Organization Data that are to be changed
      ls_input-ref_guid = lv_guid.
      ls_input-ref_kind = 'A'.
      ls_input-objectname = 'ORGMAN'.
      ls_input_field-fieldname = 'SALES_GROUP_ORI'.
      INSERT ls_input_field INTO TABLE lt_input_field.
      ls_input_field-fieldname = 'SALES_ORGR_ORI'.
      INSERT ls_input_field INTO TABLE lt_input_field.
      ls_input_field-fieldname = 'DIVISION_ORI'.
      INSERT ls_input_field INTO TABLE lt_input_field.
      ls_input-field_names[] = lt_input_field[].        " Contains all fields to updatd
      INSERT ls_input INTO TABLE lt_input.
      CLEAR: ls_input, ls_input_field.
      REFRESH lt_input_field.
    EXTERNAL REFERENCE DATA And Requested Delivery Date Data
      ls_sales-ref_guid       = lv_guid.
      ls_sales-po_number_sold = 'A'. " PO Reference
      ls_sales-ref_kind       = 'A'.
    Get the user Time Zone
      CALL FUNCTION 'TZON_GET_USER_TIMEZONE'
        EXPORTING
          if_username             = sy-uname
        IMPORTING
          ef_timezone             = lv_timezone
        EXCEPTIONS
          no_timezone_customizing = 1
          no_valid_user           = 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.
    Convert Requested delivery date into Timestamp
      CALL FUNCTION 'BBP_PD_CONVERT_DATETIME_TO_TS'
        EXPORTING
          iv_date             = sy-datum
         iv_time              = sy-uzeit
          iv_time_zone        = lv_timezone
       IMPORTING
         ev_timestamp        = lv_timestamp
        EV_TIMESTAMPL       =
       EXCEPTIONS
         convert_error       = 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.
      ENDIF.
      ls_sales-req_dlv_date   = lv_timestamp. " Requested delivery date time stamp
      ls_sales-req_timezone   = lv_timezone.  " User timezone
      ls_sales-po_date_sold = sy-datum.
      APPEND ls_sales TO lt_sales.
    Input fields for Sales Data that are to be changed
      CLEAR: ls_input, ls_input_field.
      REFRESH lt_input_field.
    ls_input-ref_guid = lv_guid.
      ls_input-ref_kind = 'A'.
      ls_input-objectname = 'SALES'.
      ls_input_field-fieldname = 'PO_NUMBER_SOLD'.
      INSERT ls_input_field INTO TABLE lt_input_field.
      ls_input_field-fieldname = 'REQ_DLV_DATE'.
      INSERT ls_input_field INTO TABLE lt_input_field.
      ls_input-field_names[] = lt_input_field[].        "Contains all fields to updatd
      INSERT ls_input INTO TABLE lt_input.
    Prepare Data for Orderadm_h
      CLEAR ls_orderadm_h.
      CLEAR: ls_input, ls_input_field.
      REFRESH lt_input_field.
      ls_orderadm_h-guid            = lv_guid.
      ls_orderadm_h-process_type    = 'ZEDL'.
      ls_orderadm_h-description     = 'ACB'. " Order Description
      ls_orderadm_h-posting_date    = sy-datum.
      ls_orderadm_h-descr_language  = 'EN'.
      ls_orderadm_h-template_type   = 'D'.
      ls_orderadm_h-mode            = 'A'.
      APPEND ls_orderadm_h TO lt_orderadm_h.
      CLEAR ls_input.
      ls_input-ref_guid = lv_guid.
      ls_input-ref_kind = 'A'.
      ls_input-objectname = 'ORDERADM_H'.
      ls_input_field-fieldname = 'MODE'.
      INSERT ls_input_field INTO TABLE lt_input_field.
      ls_input_field-fieldname = 'DESCRIPTION'.
      INSERT ls_input_field INTO TABLE lt_input_field.
      ls_input_field-fieldname = 'PROCESS_TYPE'.
      INSERT ls_input_field INTO TABLE lt_input_field.
      ls_input-field_names[] = lt_input_field[].    "Contains all fields to updatd
      INSERT ls_input INTO TABLE lt_input.
      CLEAR: ls_input, ls_input_field.
      REFRESH lt_input_field.
    Prepare Data for customer_h
    ls_customer_h-ref_guid = lv_guid.
    Ls_customer_h-mode = 'A'.
    *Ls_customer_h-customer_ext = 'b'.
    APPEND ls_customer_h to lt_customer_h.
    Call bapi to create and update order
    CALL FUNCTION 'CRM_ORDER_MAINTAIN'
    EXPORTING
      IT_OPPORT_H                   =
      IT_LEAD_H                     =
      IT_ACTIVITY_H                 =
      IT_LAWREF_H                   =
       IT_SALES                      =  lt_sales
      IT_PRICING                    =
      IT_PRICING_I                  =
      IT_PRIDOC                     =
       IT_ORGMAN                     =  lt_orgman
      IT_SHIPPING                   =
      IT_ACTIVITY_I                 =
      IT_PRODUCT_I                  =
      IT_BATCH                      =
      IT_FINPROD_I                  =
      IT_STRUCT_I                   =
      IT_CONFIG                     =
      IT_PAYPLAN                    =
      IT_PAYPLAN_D                  =
      IT_CUSTOMER_H                 =
      IT_CUSTOMER_I                 =
      IT_SERVICE_H                  =
      IT_SERVICE_I                  =
      IT_SERVICE_ASSIGN             =
      IT_QUALIF                     =
      IT_APPOINTMENT                =
      IT_TEXT                       =
      IT_SCHEDLIN_I                 =
       IT_PARTNER                    =  lt_partner
      IT_SERVICE_OS                 =
      IT_REFOBJ                     =
      IT_SUBJECT                    =
      IT_CANCEL                     =
      IT_CANCEL_IR                  =
      IT_CANCEL_DATES               =
       IT_STATUS                     =  lt_status
      IT_BILLPLAN                   =
      IT_BILLING                    =
      IT_ORDPRP_I                   =
      IT_ORDPRP_I_D                 =
      IT_ORDPRP_OBJL_I_D            =
      IT_CUMULATED_I                =
      IT_SERVICEPLAN_I              =
      IT_SERVICEPLAN_IE             =
      IT_PRICE_AGREEMENTS_BBP       =
      IT_PRICE_AGREEMENTS_CRM       =
      IT_CONFIG_FILTER              =
      IT_AC_ASSIGN                  =
      IT_SURVEY                     =
      IT_EXTENSION                  =
      IT_ACTIVE_SWITCH              =
      IT_UBB_CTR_I                  =
      IT_UBB_CR_I                   =
      IT_UBB_VOL_I                  =
      IT_APO_I                      =
      IT_CHNGPROC_I                 =
      IT_EXT_REF                    =
      IT_DOC_FLOW_PNT               =
      IT_CHNGPROC_H                 =
      IT_FUND_H                     =
      IT_CLA_H                      =
      IT_SRV_REQ_H                  =
      IT_APPROVAL                   =
    IMPORTING
       ET_EXCEPTION                  = lt_exception
    CHANGING
       CT_ORDERADM_H                 = lt_orderadm_h
      CT_ORDERADM_I                 =
       CT_INPUT_FIELDS               =  lt_input
       CV_LOG_HANDLE                 =  lv_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.
    ls_crm_save = lv_guid.
      INSERT ls_crm_save INTO TABLE lt_crm_save.
    Saving the Order which is created by above function module
      CALL FUNCTION 'CRM_ORDER_SAVE'
        EXPORTING
          it_objects_to_save   = lt_crm_save
        IMPORTING
          et_saved_objects     = lt_saved_objects
         et_exception         = lt_exception  " Receiving objects that can be saved
         et_objects_not_saved = lt_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.
         write 'hello1'.
      ENDIF.
    Commit the save
      CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
        EXPORTING
          wait = 'X'.
      IF sy-subrc <> 0.
       MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
               WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
         write 'hello2'.
      ENDIF.
    Check Created order
      READ TABLE lt_saved_objects INTO ls_saved_objects INDEX 1.
    READ TABLE lt_objects_not_saved INTO ls_saved_objects INDEX 1.
      write : lv_guid,ls_saved_objects-GUID,ls_saved_objects-OBJECT_ID.

    I have written folowing code but exception occurs in changing parameter lt_exception of FM maintain.What can be the possible error.
    msg no - 0004
    REPORT  ZTEST_PROGRAM.
    *Internal tables
    Data : lt_partner           TYPE              crmt_partner_comt,
           lt_sales             TYPE              crmt_sales_comt,
           lt_orgman            TYPE              crmt_orgman_comt,
           lt_status            TYPE              crmt_status_comt,
           lt_customer_h        TYPE              CRMT_SERVICE_H_COMT,
           lt_input_field       TYPE              crmt_input_field_names_tab,
           lt_exception         TYPE              crmt_exception_t,
           lt_crm_save          TYPE              crmt_object_guid_tab,
           lt_orderadm_h        TYPE              crmt_orderadm_h_comt,
           lt_saved_objects     TYPE              crmt_return_objects,
           lt_objects_not_saved TYPE              CRMT_OBJECT_GUID_TAB,
           lt_input             TYPE              crmt_input_field_tab.
    *Structures
    Data : ls_partner           TYPE                      crmt_partner_com,
           ls_sales             TYPE                      crmt_sales_com,
           ls_orgman            TYPE                      crmt_orgman_com,
           ls_status            TYPE                      crmt_status_com,
           ls_input             TYPE                      crmt_input_field,
           ls_input_field       TYPE                      crmt_input_field_names,
           ls_crm_save          TYPE                      crmt_object_guid,
           ls_saved_objects     LIKE LINE OF              lt_saved_objects,
           ls_orderadm_h        TYPE                      crmt_orderadm_h_com,
           ls_customer_h        TYPE                      CRMT_SERVICE_H_COM.
    *Variables
    Data : lv_guid              TYPE                      guid_16,
           lv_timezone          TYPE                      timezone,
           lv_timestamp         TYPE                      timestamp,
           lv_log_handle        TYPE                      balloghndl.
    GET GUID
    CALL FUNCTION 'GUID_CREATE'
        IMPORTING
          ev_guid_16 = lv_guid.
    Filling status data
      CLEAR ls_status.
      ls_status-ref_guid        = lv_guid.
      ls_status-ref_kind        = 'A'.
      ls_status-status          = 'E0003'.
      ls_status-user_stat_proc  = 'CRMORDER'.
      ls_status-activate        = 'X'.
      APPEND ls_status TO lt_status.
    Filling the partner data
      CLEAR ls_partner.
      ls_partner-ref_guid           = lv_guid.
      ls_partner-ref_kind           = 'A'.
      ls_partner-ref_partner_handle = '0001'.
      ls_partner-kind_of_entry      = 'C'.
      ls_partner-partner_fct        = '00000001'. " Sold to Party
      ls_partner-partner_no         = '190'.
      ls_partner-display_type       = 'BP'.
      ls_partner-no_type            = 'BP'.
      INSERT ls_partner INTO TABLE lt_partner.
    Input Fields for Partner Data that are to be changed
      CLEAR ls_input.
        ls_input-ref_guid = lv_guid.
        ls_input-ref_kind = 'A'.
        ls_input-logical_key  = '0001'.
        ls_input-objectname = 'PARTNER'.
        ls_input_field-fieldname = 'DISPLAY_TYPE'.
        INSERT ls_input_field INTO TABLE lt_input_field.
        ls_input_field-fieldname = 'KIND_OF_ENTRY'.
        INSERT ls_input_field INTO TABLE lt_input_field.
        ls_input_field-fieldname = 'NO_TYPE'.
        INSERT ls_input_field INTO TABLE lt_input_field.
        ls_input_field-fieldname = 'PARTNER_FCT'.
        INSERT ls_input_field INTO TABLE lt_input_field.
        ls_input_field-fieldname = 'PARTNER_NO'.
        INSERT ls_input_field INTO TABLE lt_input_field.
        ls_input-field_names[] = lt_input_field[].
        INSERT ls_input INTO TABLE lt_input.
    Prepare Organisation Data
      Clear ls_orgman.
      ls_orgman-ref_guid              = lv_guid.
      ls_orgman-ref_kind              = 'A'.
      ls_orgman-sales_group_ori       = 'A'.
      ls_orgman-sales_orgr_ori        = 'A'.
      ls_orgman-division_ori          = 'A'.
      ls_orgman-dis_channel_ori       = 'A'.
      APPEND ls_orgman TO lt_orgman.
    Input Fields for Organization Data that are to be changed
      ls_input-ref_guid = lv_guid.
      ls_input-ref_kind = 'A'.
      ls_input-objectname = 'ORGMAN'.
      ls_input_field-fieldname = 'SALES_GROUP_ORI'.
      INSERT ls_input_field INTO TABLE lt_input_field.
      ls_input_field-fieldname = 'SALES_ORGR_ORI'.
      INSERT ls_input_field INTO TABLE lt_input_field.
      ls_input_field-fieldname = 'DIVISION_ORI'.
      INSERT ls_input_field INTO TABLE lt_input_field.
      ls_input-field_names[] = lt_input_field[].        " Contains all fields to updatd
      INSERT ls_input INTO TABLE lt_input.
      CLEAR: ls_input, ls_input_field.
      REFRESH lt_input_field.
    EXTERNAL REFERENCE DATA And Requested Delivery Date Data
      ls_sales-ref_guid       = lv_guid.
      ls_sales-po_number_sold = 'A'. " PO Reference
      ls_sales-ref_kind       = 'A'.
    Get the user Time Zone
      CALL FUNCTION 'TZON_GET_USER_TIMEZONE'
        EXPORTING
          if_username             = sy-uname
        IMPORTING
          ef_timezone             = lv_timezone
        EXCEPTIONS
          no_timezone_customizing = 1
          no_valid_user           = 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.
    Convert Requested delivery date into Timestamp
      CALL FUNCTION 'BBP_PD_CONVERT_DATETIME_TO_TS'
        EXPORTING
          iv_date             = sy-datum
         iv_time              = sy-uzeit
          iv_time_zone        = lv_timezone
       IMPORTING
         ev_timestamp        = lv_timestamp
        EV_TIMESTAMPL       =
       EXCEPTIONS
         convert_error       = 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.
      ENDIF.
      ls_sales-req_dlv_date   = lv_timestamp. " Requested delivery date time stamp
      ls_sales-req_timezone   = lv_timezone.  " User timezone
      ls_sales-po_date_sold = sy-datum.
      APPEND ls_sales TO lt_sales.
    Input fields for Sales Data that are to be changed
      CLEAR: ls_input, ls_input_field.
      REFRESH lt_input_field.
    ls_input-ref_guid = lv_guid.
      ls_input-ref_kind = 'A'.
      ls_input-objectname = 'SALES'.
      ls_input_field-fieldname = 'PO_NUMBER_SOLD'.
      INSERT ls_input_field INTO TABLE lt_input_field.
      ls_input_field-fieldname = 'REQ_DLV_DATE'.
      INSERT ls_input_field INTO TABLE lt_input_field.
      ls_input-field_names[] = lt_input_field[].        "Contains all fields to updatd
      INSERT ls_input INTO TABLE lt_input.
    Prepare Data for Orderadm_h
      CLEAR ls_orderadm_h.
      CLEAR: ls_input, ls_input_field.
      REFRESH lt_input_field.
      ls_orderadm_h-guid            = lv_guid.
      ls_orderadm_h-process_type    = 'ZEDL'.
      ls_orderadm_h-description     = 'ACB'. " Order Description
      ls_orderadm_h-posting_date    = sy-datum.
      ls_orderadm_h-descr_language  = 'EN'.
      ls_orderadm_h-template_type   = 'D'.
      ls_orderadm_h-mode            = 'A'.
      APPEND ls_orderadm_h TO lt_orderadm_h.
      CLEAR ls_input.
      ls_input-ref_guid = lv_guid.
      ls_input-ref_kind = 'A'.
      ls_input-objectname = 'ORDERADM_H'.
      ls_input_field-fieldname = 'MODE'.
      INSERT ls_input_field INTO TABLE lt_input_field.
      ls_input_field-fieldname = 'DESCRIPTION'.
      INSERT ls_input_field INTO TABLE lt_input_field.
      ls_input_field-fieldname = 'PROCESS_TYPE'.
      INSERT ls_input_field INTO TABLE lt_input_field.
      ls_input-field_names[] = lt_input_field[].    "Contains all fields to updatd
      INSERT ls_input INTO TABLE lt_input.
      CLEAR: ls_input, ls_input_field.
      REFRESH lt_input_field.
    Prepare Data for customer_h
    ls_customer_h-ref_guid = lv_guid.
    Ls_customer_h-mode = 'A'.
    *Ls_customer_h-customer_ext = 'b'.
    APPEND ls_customer_h to lt_customer_h.
    Call bapi to create and update order
    CALL FUNCTION 'CRM_ORDER_MAINTAIN'
    EXPORTING
      IT_OPPORT_H                   =
      IT_LEAD_H                     =
      IT_ACTIVITY_H                 =
      IT_LAWREF_H                   =
       IT_SALES                      =  lt_sales
      IT_PRICING                    =
      IT_PRICING_I                  =
      IT_PRIDOC                     =
       IT_ORGMAN                     =  lt_orgman
      IT_SHIPPING                   =
      IT_ACTIVITY_I                 =
      IT_PRODUCT_I                  =
      IT_BATCH                      =
      IT_FINPROD_I                  =
      IT_STRUCT_I                   =
      IT_CONFIG                     =
      IT_PAYPLAN                    =
      IT_PAYPLAN_D                  =
      IT_CUSTOMER_H                 =
      IT_CUSTOMER_I                 =
      IT_SERVICE_H                  =
      IT_SERVICE_I                  =
      IT_SERVICE_ASSIGN             =
      IT_QUALIF                     =
      IT_APPOINTMENT                =
      IT_TEXT                       =
      IT_SCHEDLIN_I                 =
       IT_PARTNER                    =  lt_partner
      IT_SERVICE_OS                 =
      IT_REFOBJ                     =
      IT_SUBJECT                    =
      IT_CANCEL                     =
      IT_CANCEL_IR                  =
      IT_CANCEL_DATES               =
       IT_STATUS                     =  lt_status
      IT_BILLPLAN                   =
      IT_BILLING                    =
      IT_ORDPRP_I                   =
      IT_ORDPRP_I_D                 =
      IT_ORDPRP_OBJL_I_D            =
      IT_CUMULATED_I                =
      IT_SERVICEPLAN_I              =
      IT_SERVICEPLAN_IE             =
      IT_PRICE_AGREEMENTS_BBP       =
      IT_PRICE_AGREEMENTS_CRM       =
      IT_CONFIG_FILTER              =
      IT_AC_ASSIGN                  =
      IT_SURVEY                     =
      IT_EXTENSION                  =
      IT_ACTIVE_SWITCH              =
      IT_UBB_CTR_I                  =
      IT_UBB_CR_I                   =
      IT_UBB_VOL_I                  =
      IT_APO_I                      =
      IT_CHNGPROC_I                 =
      IT_EXT_REF                    =
      IT_DOC_FLOW_PNT               =
      IT_CHNGPROC_H                 =
      IT_FUND_H                     =
      IT_CLA_H                      =
      IT_SRV_REQ_H                  =
      IT_APPROVAL                   =
    IMPORTING
       ET_EXCEPTION                  = lt_exception
    CHANGING
       CT_ORDERADM_H                 = lt_orderadm_h
      CT_ORDERADM_I                 =
       CT_INPUT_FIELDS               =  lt_input
       CV_LOG_HANDLE                 =  lv_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.
    ls_crm_save = lv_guid.
      INSERT ls_crm_save INTO TABLE lt_crm_save.
    Saving the Order which is created by above function module
      CALL FUNCTION 'CRM_ORDER_SAVE'
        EXPORTING
          it_objects_to_save   = lt_crm_save
        IMPORTING
          et_saved_objects     = lt_saved_objects
         et_exception         = lt_exception  " Receiving objects that can be saved
         et_objects_not_saved = lt_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.
         write 'hello1'.
      ENDIF.
    Commit the save
      CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
        EXPORTING
          wait = 'X'.
      IF sy-subrc <> 0.
       MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
               WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
         write 'hello2'.
      ENDIF.
    Check Created order
      READ TABLE lt_saved_objects INTO ls_saved_objects INDEX 1.
    READ TABLE lt_objects_not_saved INTO ls_saved_objects INDEX 1.
      write : lv_guid,ls_saved_objects-GUID,ls_saved_objects-OBJECT_ID.

  • What is the difference between 'CRM_ORDER_SAVE' and 'CRM_ORDER_MAINTAIN'?

    Hi Experts,
       What is the difference between these two FMs?
       'CRM_ORDER_SAVE' and 'CRM_ORDER_MAINTAIN'
       I want to change the user status of an order in CRM. I have seen several posts in the forum some of which advises to use CRM_ORDER_MAINTAIN' while others  'CRM_ORDER_SAVE'.
      I am really confused. Which one is the correct FM? I could not find any documentation for these FMs.
      Do we need to use both these FMs or only one of them?
    What is the correct order to call this FM?
    1. CRM_STATUS_CHANGE_EXTERN "Change the user status
    2. Commit work
    3. CRM_ORDER_INITIALIZE
    4. CRM_ORDER_MAINTAIN
    5. Commit work.
    6. CRM_ORDER_SAVE
    Also what is the meaning of Ref_kind field? When do we give 'A' and when do we give 'B'?
    ls_status-ref_guid = i_crmd_orderadm_h-guid.
    ls_status-ref_kind = 'A'.
    ls_status-status = 'E0003'.
    ls_status-activate = 'X'.
    APPEND ls_status TO lt_status.
    CALL FUNCTION 'CRM_ORDER_MAINTAIN'
    EXPORTING
    IT_STATUS = lt_status
    CHANGING
    CT_INPUT_FIELDS = lt_input_fields
    EXCEPTIONS
    ERROR_OCCURRED = 1
    DOCUMENT_LOCKED = 2
    NO_CHANGE_ALLOWED = 3
    NO_AUTHORITY = 4
    OTHERS = 5.
    Thanks
    Gopal

    First question:
    - the purpose of 'CRM_ORDER_MAINTAIN' is to set values of the fields (for example set header data, items, pricing...)
    - the purpose of  'CRM_ORDER_SAVE' is just to save objects (in this function you don't set data but just set which objects (guids) should be saved)
    Second question:
    - you can use only  'CRM_ORDER_MAINTAIN'  if you execute function in runtime (change data on the transaction that is opened on the screen) and then you save the object manualy
    - you need both functions if you execute function 'CRM_ORDER_MAINTAIN'  in the background because this function doesn't perform the save functionality by itself
    3rd question:
    The correct order is
    1. CRM_STATUS_CHANGE_EXTERN "Change the user status
    6. CRM_ORDER_SAVE
    You don't need fm 'CRM_ORDER_MAINTAIN', because CRM_STATUS_CHANGE_EXTERN calls at the end 'CRM_ORDER_MAINTAIN' by itself (it is a sort of subfunction of this function).
    4th question:
    With 'ref_kind' you set to which level are you refering (header or item). A is for header.
    Regards.

  • CRM Pricing error after 5000 seconds with CRM_ORDER_MAINTAIN in background

    Hi,
    This is Rajender. I am using function module CRM_ORDER_MAINTAIN to create sales order. I am facing a error while creating sales order from text file. while uploading 15000 records it is taking more than 5000 seconds. But after 5000 seconds the background job gets cancelled raising the error "Error occurred when processing Java programs".
    Can anybody please tell me why the error is coming.
    I am using the following sequence to create sales order.
    CRM_ORDER_MAINTAIN - To create sales order header
    CRM_ORDER_MAINTAIN - To create Item - Product, quantity, partner, manual price.
    CRM_ORDER_SAVE
    CRM_ORDER_INITIALIZE
    Thanks & Regards,
    Rajender Naik.

    Hi Rajender,
    Try using the FM CRMXIF_ORDER_SAVE which is more of like an interface FM and its better to use this FM for interfaces/data loading. We had issues with using crm_order_maintain FM and had to replace with this one.
    Refer to this below link on how to use this FM for a specific scenario-
    http://www.divulgesap.com/blog.php?p=MTEy
    Hope it helps.
    Cheers,
    Ravikiran

  • How to create a partner and header record using CRM_ORDER_MAINTAIN?

    Hi any one knows how to create a partner and header record using the function module CRM_ORDER_MAINTAIN??
    I tried to  create a record, but i only managed to create a header record and the partner record is not reflected in the transaction.  Why is that so? is there any indicator that i need to include?
    Thanks..
    Jen

    Hi Jen!
    I use this FM and it works perfectly.
    Use this to create a partner:
      gs_partner-ref_handle    = '0000000001'.
      gs_partner-ref_kind      = 'A'.
      gs_partner-ref_partner_handle = '0001'.
      gs_partner-partner_fct   = '00000001'.
      gs_partner-partner_no    = NO_PARTNER. "number of the partner, bu_partner
      gs_partner-display_type  = 'BP'.
      gs_partner-no_type       = 'BP'.
      gs_partner-kind_of_entry = 'C'.
    *  ls_partner_l-ref_handle    = '1'.
      gs_partner-ref_guid      = '00000000000000000000000000000000'.
      APPEND gs_partner  TO gT_partner .
      ls_input_field-ref_kind  = 'A'.
      ls_input_field-logical_key   = '0001'.
      ls_input_field-objectname  = 'PARTNER'.
      ls_input_field-ref_handle  = '0000000001'.
      ls_input_field_names-fieldname = 'DISPLAY_TYPE'.
      INSERT ls_input_field_names INTO TABLE ls_input_field-field_names.
      ls_input_field_names-fieldname = 'KIND_OF_ENTRY'.
      INSERT ls_input_field_names INTO TABLE ls_input_field-field_names.
      ls_input_field_names-fieldname = 'NO_TYPE'.
      INSERT ls_input_field_names INTO TABLE ls_input_field-field_names.
      ls_input_field_names-fieldname = 'PARTNER_FCT'.
      INSERT ls_input_field_names INTO TABLE ls_input_field-field_names.
      ls_input_field_names-fieldname = 'PARTNER_NO'.
      INSERT ls_input_field_names INTO TABLE ls_input_field-field_names.
      INSERT ls_input_field  INTO TABLE  gt_input_fields.
      clear ls_input_field-field_names[].
      CALL FUNCTION 'CRM_ORDER_MAINTAIN'
      EXPORTING
    *    it_schedlin_i   = gt_schedlin_i_com
        it_partner      = gt_partner
    *    it_sales        = gt_sales
    *      it_orgman       = gt_orgman
    *      it_appointment  = gt_appointment
    *      it_ordprp_i     = gt_ordprp_i
    *   it_product_i    = gt_product_i
    *      it_activity_i   = gt_activity_i
    *      it_pridoc       = gt_pridoc_com
      CHANGING
        ct_orderadm_h   = gt_orderadm_h
    *   ct_orderadm_i   = gt_orderadm_i
        ct_input_fields = gt_input_fields.
    *      ct_doc_flow     = gt_doc_flow
    *      cv_log_handle   = gv_log_handle.
    Hope it helps u,
    Regards,
    Mon.

  • Help: How to use 'CRM_ORDER_MAINTAIN'

    Hi All,
    I want to create a sales order with following requirements.
    1) schedule lines having requesting dates for which vendor cannot deliver.
    2) change the status from open to some other status.
    i this i have to use
    'CRM_ORDER_MAINTAIN". but i want to know will this API takes care of updating ERP system?
    when i change the status will it also update the purchase order in ERP?
    And also give me some code as how to change status and change schedule lines using 'CRM_ORDER_MAINTAIN".
    Thanks in advance,
    Regards,
    Ujwalkumar

    Hi Robin,
    I am facing problem with CRM_ORDER_MAINTAIN.
    I am trying to change the status of service order from New to Shipped.
    Below is my code.Please look into it and let me the issue.
    Thanks.Rushikesh
    REPORT  ZRD1.
    data:IT_STATUS  TYPE  CRMT_STATUS_COMT,
         wa like line of it_status.
    DATA : ls_input_field         TYPE crmt_input_field,
           ls_input_field_names   TYPE crmt_input_field_names,
           lt_input_fields        TYPE crmt_input_field_tab,
           CT_PARTNER_ATTRIBUTES  TYPE CRMT_PARTNER_ATTRIBUTE_COM_TAB,
           l_i_orderadm_h         TYPE CRMT_ORDERADM_H_COMT,
           l_i_orderadm_i         TYPE CRMT_ORDERADM_I_COMT,
           l_i_obj_guids          TYPE CRMT_OBJECT_GUID_TAB,
           ls_i_obj_guids         like line of l_i_obj_guids.
    wa-REF_GUID = '47FDBF975F6100E1E10080000A0630A7'.
    wa-ref_kind = 'B'.
    wa-status = 'E0023'.
    wa-USER_STAT_PROC = 'ZRV_ST01'.
    wa-activate  = 'X'.
    APPEND wa TO it_status.
          ls_input_field-ref_guid = '47FDBF975F6100E1E10080000A0630A7'.
          ls_input_field-ref_kind = 'B'.
          ls_input_field_names-fieldname = 'REF_GUID'.
          INSERT ls_input_field_names INTO TABLE ls_input_field-field_names.
          ls_input_field_names-fieldname = 'REF_KIND'.
          INSERT ls_input_field_names INTO TABLE ls_input_field-field_names.
          ls_input_field_names-fieldname = 'STATUS'.
          INSERT ls_input_field_names INTO TABLE ls_input_field-field_names.
          ls_input_field_names-fieldname = 'USER_STAT_PROC'.
          INSERT ls_input_field_names INTO TABLE ls_input_field-field_names.
          ls_input_field_names-fieldname = 'ACTIVATE'.
          INSERT ls_input_field_names INTO TABLE ls_input_field-field_names.
          INSERT ls_input_field INTO TABLE lt_input_fields.
    *Start of solution1.
    CALL FUNCTION 'CRM_ORDER_MAINTAIN'
    EXPORTING
          IT_STATUS                     = IT_STATUS
    CHANGING
       CT_INPUT_FIELDS                  = lt_INPUT_FIELDS
       ct_orderadm_h                    = l_i_orderadm_h
       ct_orderadm_i                    = l_i_orderadm_i
    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.
    ls_i_obj_guids = '47FDBF975F6100E1E10080000A0630A7'.
    append ls_i_obj_guids to l_i_obj_guids.
    CALL FUNCTION 'CRM_ORDER_SAVE'
    EXPORTING
    it_objects_to_save = l_i_obj_guids
    EXCEPTIONS
    document_not_saved = 1.

  • How to use crm_order_maintain

    hi Experts,
    i am new to CRM .i am creating aweb dynpro application for service desk for message creation with few custom fields . for that i analysed standard transcation crmd_order , how it is creating transaaction . i found it is using crm_order_maintain in side to creating the message . i debbugged tht by putting a break-point before calling this  FM . but my problem is i dont know how to populate data into the import parameters of the this FM . so can any body give idea how to populate data of import parameters of this FM . any standard prg or any link witch can help me for populating the data into the import parameters. pl suggest any links for understanding the basic CRM.
    thanks in advance
    setu
    Edited by: setu s on Dec 22, 2008 6:24 PM

    Hi,
    The following link provides an example of function module CRM_ORDER_MAINTAIN:
    https://www.sdn.sap.com/irj/scn/wiki?path=/display/crm/creation%252bof%252bquatation%252bsample%252bcode
    Hope this help.
    Cheers,

  • Problem in CRM_ORDER_MAINTAIN for updating amount in line items

    Hi abapers,
    I have  a scenario as follows: i want to update amount  for line items  in a transaction. i use the bapi crm_order_maintain followed by CRM_ORDER_SAVE and bapi transaction _commit . The problem is i loop the itab by passing the trnstn id , prdct code  and new amount.
    i applied the logic as given by rita tan (thread no 4)
    link:[Re: Update Pricing Document with CRM_ORDER_MAINTAIN]
    as per the logic i delete the existing value and insert the new amount . this works fine in the first  loop and in second loop it deletes the existing record but does not insert the new value . It doesn't even give error too. what may be the problem.
    here's a snapshot of the code i have written:
    loop at itab.
    SELECT SINGLE * FROM CRMD_ORDERADM_H
              WHERE OBJECT_ID = WA_ZCMR_UPDATE-Z_OBJECTID
              AND PROCESS_TYPE = P_TYPE.
                    SELECT SINGLE * FROM CRMD_ORDERADM_I
                  WHERE HEADER = CRMD_ORDERADM_H-GUID
                  AND ORDERED_PROD = WA_ZCMR_UPDATE-PRODUCT_CODE.
                  SELECT SINGLE * FROM CRMD_LINK
                    WHERE GUID_HI = CRMD_ORDERADM_H-GUID
                    AND OBJTYPE_SET = '18'.
                    SELECT  * FROM  PRCD_COND
                      INTO CORRESPONDING FIELDS OF TABLE IT_PRCD_COND
                      WHERE KNUMV = CRMD_LINK-GUID_SET
                      AND KPOSN = CRMD_ORDERADM_I-GUID
                      AND KSCHL = 'ZR12'.
                      READ TABLE IT_PRCD_COND
                      INTO WA_PRCD_COND INDEX 1.
                        DELETE  FROM PRCD_COND
                        WHERE KNUMV = WA_PRCD_COND-KNUMV
                          AND KPOSN = WA_PRCD_COND-KPOSN
                         AND KSCHL = 'ZR12'.
                          COMMIT WORK.
                          WA_PRIDOC-REF_HANDLE = '0000000001'.
                          WA_PRIDOC-REF_GUID = CRMD_ORDERADM_I-GUID.
                          WA_PRIDOC-REF_KIND = 'B' .
                          WA_COND_ADD-KSCHL = 'ZR12'.
                          WA_COND_ADD-KBETR = WA_ZCMR_UPDATE-NET_VALUE.
                          WA_COND_ADD-KPEIN = '1'.
                          WA_COND_ADD-WAERS = 'INR'.
                          INSERT WA_COND_ADD INTO TABLE IT_COND_ADD.
                          CLEAR WA_COND_ADD.
                          WA_PRIDOC-COND_ADD = IT_COND_ADD.
                          CLEAR IT_COND_ADD[].
                          INSERT WA_PRIDOC INTO TABLE IT_PRIDOC .
                          CLEAR WA_PRIDOC .
                          WA_CT_INPUT_FIELDS1-REF_HANDLE = '0000000001'.
                         WA_CT_INPUT_FIELDS1-REF_GUID = CRMD_ORDERADM_I-GUID.
                          WA_CT_INPUT_FIELDS1-REF_KIND = 'B' .
                          WA_CT_INPUT_FIELDS1-OBJECTNAME = 'PRIDOC'.
                         INSERT WA_CT_INPUT_FIELDS1  INTO TABLE IT_CT_INPUT_FIELDS1.
                          CLEAR WA_CT_INPUT_FIELDS1.
                          AT END OF Z_OBJECTID.
                            CALL FUNCTION 'CRM_ORDER_MAINTAIN'
                              EXPORTING
                                IT_PRIDOC         = IT_PRIDOC
                              CHANGING
                                CT_INPUT_FIELDS   = IT_CT_INPUT_FIELDS1
                              EXCEPTIONS
                                ERROR_OCCURRED    = 1
                                DOCUMENT_LOCKED   = 2
                                NO_CHANGE_ALLOWED = 3
                                NO_AUTHORITY      = 4
                                OTHERS            = 5.
    CALL FUNCTION 'CRM_ORDER_SAVE'
    CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
    endat.
    endloop.
    Please help out.
    Regards,
    Navin
    Edited by: navin.c on Jan 7, 2010 10:09 AM

    Check the link below. This should help
    Re: Change Order Quantity in CRM Sales Order

  • Problem in CRM_ORDER_MAINTAIN for updating qty in more than 1 line item .

    Hi abapers,
    I am using BAPI CRM_ORDER_MAINTAIN to update quantity. Its updating the quantity properly if there is single line item for a transaction .If more than 1 line item is there then its throwing an exception* "Document is being distributed - changes are not possible"*.
    Scenario:
    I have a itab  which is having 2 line items for a transaction. i run a loop pass the pass the required parameters in CRM_ORDER_MAINTAIN ,do CRM_ORDER_SAVE , BAPI_TRANSACTION_COMMIT for the 1st line item. When i run the 2nd loop, in  CRM_ORDER_MAINTAIN it gives an exception saying NO_CHANGE_ALLOWED for the same transactions 2nd line item. leaving the quantity unchanged for both the line items. What may be the problem?
    Note: We cannot say how many line items are there for an transaction. so no chance of grouping all items at a time and saving at a time.
    Regards,
    Navin

    Hi Navin,
    Why its not possible to use CRM_ORDER_SAVE only once. I think its possible. Call CRM_ORDER_MAINTAIN in loop for all the line item in transaction and after that call CRM_ORDER_SAVE once. Pls follow the below sample code.
    loop at it_item.
    call CRM_ORDER_MAINTAIN. (Here append data for all the line items and miantin the transaction).
    emdloop.
    After endloop call CRM_ORDER_SAVE. Also you can add some wait after CRM_ORDER_SAVE, In order to avoid locking issue.
    PLs let me know where you are trying to use CRM_ORDER_MAINATIAN ? In any BADI or Z program ?
    Regards,
    Amol.

  • CRM_ORDER_MAINTAIN - in order_save BADI

    Hi Experts,
    I want to update my order. I have to add the account assignment group to my service order when the order is saved. How do I pass this value in the badi order_save. I want to use the function module crm_order_maintain. Can anyone please suggest how do I go about it.
    Warm Regards,
    Abdullah

    Hi Experts,
    This is how I code after I use CRM_ORDER_READ in the badi method change_before_update.
      select single *
        from zco003
        into wa_zco003
        where service_org_shor = v_sorg and
              process_type     = v_process_type.
      if sy-subrc = 0.
        iw_ac_assign-ref_guid = iv_guid.
        iw_ac_assign-ref_kind = 'A'.
        iw_ac_assign-ac_object_type = '01'.
        iw_ac_assign-ac_assignment = wa_zco003-aufnr.
        iw_ac_assign-ac_percentage = '0.00'.
        iw_ac_assign-mode = 'C'.
        append iw_ac_assign to it_ac_assign.
        cw_orderadm_h-guid = iv_guid.
        append cw_orderadm_h to ct_orderadm_h.
        cw_input_fields-ref_guid = iv_guid.
        cw_input_fields-ref_kind = 'A'.
        cw_input_fields-objectname = 'AC_ASSIGN'.
        cw_field_name-fieldname = 'AC_ASSIGNMENT'.
        cw_field_name-changeable = 'X'.
        append cw_field_name to ct_field_name.
        cw_field_name-fieldname = 'AC_OBJECT_TYPE'.
        cw_field_name-changeable = 'X'.
        append cw_field_name to ct_field_name.
        cw_field_name-fieldname = 'AC_PERCENTAGE'.
        cw_field_name-changeable = 'X'.
        append cw_field_name to ct_field_name.
        cw_field_name-fieldname = 'AC_TYPE_T'.
        cw_field_name-changeable = 'X'.
        append cw_field_name to ct_field_name.
        cw_field_name-fieldname = 'MODE'.
        cw_field_name-changeable = 'X'.
        append cw_field_name to ct_field_name.
        cw_input_fields-field_names[] = ct_field_name[].
        append cw_input_fields to ct_input_fields.
        loop at et_orderadm_i into ew_orderadm_i.
          clear cw_input_fields.
          cw_input_fields-ref_guid = ew_orderadm_i-guid.
          cw_input_fields-ref_kind = 'B'.
          cw_input_fields-objectname = 'AC_ASSIGN'.
          append cw_input_fields to ct_input_fields.
        endloop.
        clear cw_input_fields.
        cw_input_fields-ref_guid = iv_guid.
        cw_input_fields-ref_kind = 'A'.
        cw_input_fields-objectname = 'ORDERADM_H'.
        append cw_input_fields to ct_input_fields.
        loop at et_orderadm_i into ew_orderadm_i.
          cw_orderadm_i-guid = ew_orderadm_i-guid.
          append cw_orderadm_i to ct_orderadm_i.
          clear cw_orderadm_i.
        endloop.
        loop at et_orderadm_i into ew_orderadm_i.
          clear cw_input_fields.
          cw_input_fields-ref_guid = ew_orderadm_i-guid.
          cw_input_fields-ref_kind = 'B'.
          cw_input_fields-objectname = 'ORDERADM_I'.
          append cw_input_fields to ct_input_fields.
        endloop.
        call function 'CRM_ORDER_MAINTAIN'
         exporting
           it_ac_assign                  = it_ac_assign
         importing
           et_exception                  =  et_exception
         changing
    *       ct_orderadm_h                 = ct_orderadm_h
    *       ct_orderadm_i                 = ct_orderadm_i
           ct_input_fields               = ct_input_fields
           cv_log_handle                 = 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.
          message 'error in updating' type 'e'.
        endif.
    Can anyone please suggest what am I doing wrong
    Regards,
    Abdullah

  • CRM_ORDER_MAINTAIN not updating the item level field

    Hi All,
    My requirement is to update a field called "CSC Code" in line item of sales order. hence for this case i am using "CRM_ORDER_MAINTAIN" inside the "ORDER_SAVE" BADI. I am passing the ref guid, ref type, object name ,Logical Key and field name in the  CHANGING parametrs  CT_INPUT_FIELDS. I am passing the internal table containing the ref guid,ref type, partner fct ,partnerno to the internal table IT_PARTNER.
                                     The FM gets executed without any error and the internal table IT_PARTNER is filled with the new CSC code  but  on checking in the sales order after saving the field is blank.
      I have tried using wait up to 2 seconds. Even then it didn't work.
    Can some one help me?
    Thanks.

    Could you please let me know how was it fixed... I have a similar kind of requirement
    Edited by: rakesh chaitanya  makkapati on Apr 7, 2010 4:49 PM

  • No Partner details in new order : CRM_ORDER_MAINTAIN

    Hi .....
    I am trying to create new order in which i am getting error related to partner data though i am passing al the data into the CRM_ORDER_MAINTAIN function.
    I am not able to figure out what is the problem.
    Following is my code part ->
    READ TABLE lt_src_partner_or INTO ls_src_partner_or
            WITH KEY ref_guid    = lv_guid_h
                     partner_fct = '00000004'.
        if sy-subrc eq 0.
        wa_partner-ref_guid           = lv_guid_h."gs_sel_cont-guid_b.
        wa_partner-ref_handle         ='0000000000'.
        wa_partner-ref_kind           = ls_src_partner_or-ref_kind. "'A' .
        wa_partner-ref_partner_handle = ls_src_partner_or-ref_partner_handle."'0000'.
        wa_partner-ref_partner_fct    = ls_src_partner_or-ref_partner_fct. "'00000003' .
        wa_partner-ref_partner_no     = ls_src_partner_or-ref_partner_no.  "100040  " THIS IS THE OLD value
        wa_partner-ref_no_type        = ls_src_partner_or-ref_no_type.
        wa_partner-ref_display_type   = ls_src_partner_or-ref_display_type.
        wa_partner-partner_guid       = ls_src_partner_or-partner_guid .
        wa_partner-kind_of_entry      = ls_src_partner_or-kind_of_entry. "  'C'
        wa_partner-partner_fct        = ls_src_partner_or-partner_fct. "   00000003 "new value
        wa_partner-partner_no         = ls_src_partner_or-partner_no."'92921'p_tbill. "     0000100007 " THIS IS THE NEW VALUE
        wa_partner-display_type       = ls_src_partner_or-display_type. "    BP
        wa_partner-no_type            = ls_src_partner_or-no_type . "  BP
        wa_partner-mainpartner        = ls_src_partner_or-mainpartner. "  'X'
        wa_partner-relation_partner   = ls_src_partner_or-relation_partner. "    '00000000000000000000000000000000'
        wa_partner-addr_nr            = ls_src_partner_or-addr_nr . "   '0000010673'
        wa_partner-addr_np            = ls_src_partner_or-addr_np . "  ''
        wa_partner-addr_type          = ls_src_partner_or-addr_type."   '1'.
    append ls_tb_partner_om to lt_tb_partner_om.
        INSERT wa_partner INTO TABLE it_partner.
        endif.
        clear : wa_partner, ls_src_partner_or.
       * populate field_names
        REFRESH lt_field_names.
        ls_field_names-fieldname = 'DISPLAY_TYPE'.
    append  ls_FIELD_NAMES to lt_FIELD_NAMES.
        INSERT ls_field_names INTO TABLE lt_field_names ."lt_field_names.
        ls_field_names-fieldname = 'KIND_OF_ENTRY'.
    append  ls_FIELD_NAMES to lt_FIELD_NAMES.
        INSERT ls_field_names INTO TABLE lt_field_names ."lt_field_names.
        ls_field_names-fieldname = 'NO_TYPE'.
    append  ls_FIELD_NAMES to lt_FIELD_NAMES.
        INSERT ls_field_names INTO TABLE lt_field_names."lt_field_names.
        ls_field_names-fieldname = 'PARTNER_NO'.
    append  ls_FIELD_NAMES to lt_FIELD_NAMES.
        INSERT ls_field_names INTO TABLE lt_field_names."lt_field_names.
    ls_field_names-fieldname = 'PARTNER_FCT'.
    append  ls_FIELD_NAMES to lt_FIELD_NAMES.
        INSERT ls_field_names INTO TABLE lt_field_names."lt_field_names.
         ls_field_names-fieldname = 'REF_PARTNER_NO'.
    append  ls_FIELD_NAMES to lt_FIELD_NAMES.
        INSERT ls_field_names INTO TABLE lt_field_names."lt_field_names.
        ls_field_names-fieldname = 'REF_PARTNER_FCT'.
    append  ls_FIELD_NAMES to lt_FIELD_NAMES.
        INSERT ls_field_names INTO TABLE lt_field_names."lt_field_names.
    build input fields
        ls_input_fields-ref_handle = '0000000000'.
        ls_input_fields-ref_guid =   lv_guid_h . "4733030909B64D4D92A959BA5334B6F8.
        ls_input_fields-ref_kind =   'A' .
        ls_input_fields-objectname = 'PARTNER' .
        old partner number needs to be passed here
         CONCATENATE  '000000000014' ls_src_partner_or-ref_partner_no '          BPBP' INTO ls_input_fields-logical_key. "=. "000000000003100040          BPBP
        ls_input_fields-field_names = lt_field_names."lt_field_names.
        INSERT ls_input_fields INTO TABLE ct_input_fields.
         CONCATENATE  '000000000002' ls_src_partner_or-ref_partner_no '          BPBP' INTO ls_input_fields-logical_key. "=. "000000000003100040          BPBP
        ls_input_fields-field_names = lt_field_names."lt_field_names.
    Set the first line for 000000000003
    append ls_INPUT_FIELDS to lt_INPUT_FIELDS.
        INSERT ls_input_fields INTO TABLE ct_input_fields."lt_input_fields.
        CONCATENATE  '000000000003' ls_src_partner_or-ref_partner_no '          BPBP' INTO ls_input_fields-logical_key. "=. "000000000003100040          BPBP
        ls_input_fields-field_names = lt_field_names."lt_field_names.
    Set the first line for 000000000003
    append ls_INPUT_FIELDS to lt_INPUT_FIELDS.
        INSERT ls_input_fields INTO TABLE ct_input_fields."lt_input_fields.
    set the second line for 000000000004 - the only difference is the logical_key
        CONCATENATE  '000000000004' ls_src_partner_or-ref_partner_no '          BPBP' INTO ls_input_fields-logical_key. "=. "000000000004100040          BPBP
        ls_input_fields-field_names = lt_field_names.
        INSERT ls_input_fields INTO TABLE ct_input_fields.
    Please tell me where i am wrong ???
    Do i need to include some more fields in input parameters of crm_order_maintain function ?
    please help me experts .
    Thanks and regards
    Edited by: Shoaibmemon on Jun 27, 2011 2:42 PM

    Hi,
        U need to execute a BAPI for customer master change. This needs to be checked whether we can call the BAPI through the exit u mentioned or even on Save.
    Regards,
    Deepak

  • Problem in CRM_ORDER_MAINTAIN

    Dear Gurus,
                      I am trying to create a service order using CRM_ORDER_MAINTAIN and CRM_ORDER_SAVE.
    I have observed the values from debuggin the actual order creation through CRMD_ORDER and i am passing those hardcoded values to the above mentioned FMs.
    But in my case,the header is not generated saying header GUID is not found and thats why it is not creating any order also.can u please look into the code and tell me where m going wrong??
       CALL FUNCTION '/CEM/CREATE_GUID'
        IMPORTING
          EV_GUID       = guid
           wa_sales-ref_handle = 1.
           wa_sales-ref_guid = 0.
           wa_sales-ref_kind = 'B'.
           append wa_sales to it_sales.
           wa_pricing-ref_handle = 1.
           wa_pricing-ref_guid = 0.
           wa_pricing-ref_kind = 'B'.
           append wa_pricing to it_pricing.
           wa_shipping-ref_handle = 1.
           wa_shipping-ref_guid = 0.
           wa_shipping-ref_kind = 'B'.
           append wa_shipping to it_shipping.
           wa_product_i-ref_handle = 1.
           append wa_product_i to it_product_i.
           wa_schedlines-QUANTITY = 3.
           append wa_schedlines to schedlines.
           wa_schedlin_i-ref_handle = 1.
           wa_schedlin_i-SCHEDLINES = schedlines.
           append wa_schedlin_i to it_schedlin_i.
           wa_partner-REF_GUID = guid.
           wa_partner-ref_handle = 1.
           wa_partner-ref_kind = 'A'.
           wa_partner-REF_PARTNER_HANDLE = 0001.
           wa_partner-KIND_OF_ENTRY = 'C'.
           wa_partner-PARTNER_FCT = 00000001.
           wa_partner-PARTNER_NO = 0000000171.
           wa_partner-DISPLAY_TYPE = 'BP'.
           wa_partner-NO_TYPE = 'BP'.
           append wa_partner to it_partner.
           wa_partner-REF_GUID = guid.
           wa_partner-ref_handle = 2.
           wa_partner-ref_kind = 'A'.
           wa_partner-REF_PARTNER_HANDLE = 0002.
           wa_partner-KIND_OF_ENTRY = 'C'.
           wa_partner-PARTNER_FCT = 00000002.
           wa_partner-PARTNER_NO = 0000000171.
           wa_partner-DISPLAY_TYPE = 'BP'.
           wa_partner-NO_TYPE = 'BP'.
           append wa_partner to it_partner.
           wa_field_name-fieldname = 'MODE'.
           append wa_field_name to field_name.
           wa_field_name-fieldname = 'ORDERED_PROD'.
           append wa_field_name to field_name.
           wa_input_fields-ref_handle = 1.
           wa_input_fields-ref_guid = 0.
           wa_input_fields-objectname = 'ORDERADM_I'.
           wa_input_fields-FIELD_NAMES = field_name.
           append wa_input_fields to ct_input_fields.
          clear field_name.
          refresh field_name.
           wa_field_name-fieldname = 'DISPLAY_TYPE'.
           append wa_field_name to field_name.
           wa_field_name-fieldname = 'KIND_OF_ENTRY'.
           append wa_field_name to field_name.
           wa_field_name-fieldname = 'NO_TYPE'.
           append wa_field_name to field_name.
           wa_field_name-fieldname = 'PARTNER_FCT'.
           append wa_field_name to field_name.
           wa_field_name-fieldname = 'PARTNER_NO'.
           append wa_field_name to field_name.
           wa_input_fields-ref_handle = 2.
           wa_input_fields-ref_guid = guid.
           wa_input_fields-ref_kind = 'A'.
           wa_input_fields-objectname = 'PARTNER'.
           wa_input_fields-FIELD_NAMES = field_name.
           wa_input_fields-logical_key = 001.
           append wa_input_fields to ct_input_fields.
          clear field_name.
          refresh field_name.
           wa_field_name-fieldname = 'DISPLAY_TYPE'.
           append wa_field_name to field_name.
           wa_field_name-fieldname = 'KIND_OF_ENTRY'.
           append wa_field_name to field_name.
           wa_field_name-fieldname = 'NO_TYPE'.
           append wa_field_name to field_name.
           wa_field_name-fieldname = 'PARTNER_FCT'.
           append wa_field_name to field_name.
           wa_field_name-fieldname = 'PARTNER_NO'.
           append wa_field_name to field_name.
           wa_input_fields-ref_handle = 3.
           wa_input_fields-ref_guid = guid.
           wa_input_fields-ref_kind = 'A'.
           wa_input_fields-objectname = 'PARTNER'.
           wa_input_fields-FIELD_NAMES = field_name.
           wa_input_fields-logical_key = 002.
           append wa_input_fields to ct_input_fields.
           clear field_name.
          refresh field_name.
           wa_field_name-fieldname = 'LOGICAL_KEY'.
           append wa_field_name to field_name.
           wa_field_name-fieldname = 'QUANTITY'.
           append wa_field_name to field_name.
           wa_input_fields-ref_handle = 4.
           wa_input_fields-ref_guid = 0.
           wa_input_fields-ref_kind = 'B'.
           wa_input_fields-objectname = 'SCHEDLIN'.
           wa_input_fields-FIELD_NAMES = field_name.
           wa_input_fields-logical_key = 0.
           append wa_input_fields to ct_input_fields.
           clear field_name.
           refresh field_name.
           wa_input_fields-ref_handle = 5.
           wa_input_fields-ref_guid = 0.
           wa_input_fields-ref_kind = 'B'.
           wa_input_fields-objectname = 'SCHEDLIN_I'.
           wa_input_fields-FIELD_NAMES = field_name.
           append wa_input_fields to ct_input_fields.
           wa_orderadm_i-handle = 1.
           wa_orderadm_i-header = guid.
           wa_orderadm_i-ORDERED_PROD = 'ZSH_ADDON'.
           wa_orderadm_i-MODE = 'A'.
           append wa_orderadm_i to ct_orderadm_i.
              CALL FUNCTION 'CRM_ORDER_MAINTAIN'
            EXPORTING
              IT_OPPORT_H                   = IT_OPPORT_H
              IT_LEAD_H                     = IT_LEAD_H
              IT_ACTIVITY_H                 = IT_ACTIVITY_H
              IT_SALES                      = IT_SALES
              IT_PRICING                    = IT_PRICING
              IT_PRICING_I                  = IT_PRICING_I
              IT_PRIDOC                     = IT_PRIDOC
              IT_ORGMAN                     = IT_ORGMAN
              IT_SHIPPING                   = IT_SHIPPING
              IT_ACTIVITY_I                 = IT_ACTIVITY_I
              IT_PRODUCT_I                  = IT_PRODUCT_I
              IT_BATCH                      = IT_BATCH
              IT_FINPROD_I                  = IT_FINPROD_I
              IT_STRUCT_I                   = IT_STRUCT_I
              IT_CONFIG                     = IT_CONFIG
              IT_PAYPLAN                    = IT_PAYPLAN
              IT_PAYPLAN_D                  = IT_PAYPLAN_D
              IT_CUSTOMER_H                 = IT_CUSTOMER_H
              IT_CUSTOMER_I                 = IT_CUSTOMER_I
              IT_SERVICE_H                  = IT_SERVICE_H
              IT_SERVICE_I                  = IT_SERVICE_I
              IT_SERVICE_ASSIGN             = IT_SERVICE_ASSIGN
              IT_QUALIF                     = IT_QUALIF
              IT_APPOINTMENT                = IT_APPOINTMENT
              IT_TEXT                       = IT_TEXT
              IT_SCHEDLIN_I                 = IT_SCHEDLIN_I
              IT_PARTNER                    = IT_PARTNER
              IT_SERVICE_OS                 = IT_SERVICE_OS
              IT_REFOBJ                     = IT_REFOBJ
              IT_SUBJECT                    = IT_SUBJECT
              IT_CANCEL                     = IT_CANCEL
              IT_CANCEL_IR                  = IT_CANCEL_IR
              IT_CANCEL_DATES               = IT_CANCEL_DATES
              IT_STATUS                     = IT_STATUS
              IT_BILLPLAN                   = IT_BILLPLAN
              IT_BILLING                    = IT_BILLING
              IT_ORDPRP_I                   = IT_ORDPRP_I
              IT_ORDPRP_I_D                 = IT_ORDPRP_I_D
              IT_ORDPRP_OBJL_I_D            = IT_ORDPRP_OBJL_I_D
              IT_CUMULATED_I                = IT_CUMULATED_I
              IT_SERVICEPLAN_I              = IT_SERVICEPLAN_I
              IT_SERVICEPLAN_IE             = IT_SERVICEPLAN_IE
              IT_PRICE_AGREEMENTS_BBP       = IT_PRICE_AGREEMENTS_BBP
              IT_PRICE_AGREEMENTS_CRM       = IT_PRICE_AGREEMENTS_CRM
              IT_CONFIG_FILTER              = IT_CONFIG_FILTER
              IT_AC_ASSIGN                  = IT_AC_ASSIGN
              IT_SURVEY                     = IT_SURVEY
              IT_EXTENSION                  = IT_EXTENSION
              IT_ACTIVE_SWITCH              = IT_ACTIVE_SWITCH
              IT_UBB_CTR_I                  = IT_UBB_CTR_I
              IT_UBB_CR_I                   = IT_UBB_CR_I
              IT_UBB_VOL_I                  = IT_UBB_VOL_I
              IT_APO_I                      = IT_APO_I
              IT_CHNGPROC_I                 = IT_CHNGPROC_I
              IT_EXT_REF                    = IT_EXT_REF
              IT_DOC_FLOW_PNT               = IT_DOC_FLOW_PNT
              IT_CHNGPROC_H                 = IT_CHNGPROC_H
              IT_FUND_H                     = IT_FUND_H
              IT_CLA_H                      = IT_CLA_H
            IMPORTING
              ET_EXCEPTION                  = ET_EXCEPTION
            CHANGING
              CT_ORDERADM_H                 = CT_ORDERADM_H
              CT_ORDERADM_I                 = CT_ORDERADM_I
              CT_INPUT_FIELDS               = CT_INPUT_FIELDS
              CV_LOG_HANDLE                 = CV_LOG_HANDLE
              CT_PARTNER_ATTRIBUTES         = CT_PARTNER_ATTRIBUTES
              CT_DOC_FLOW                   = 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.
         read table ct_orderadm_i into wa_orderadm_i index 1.
           guid = wa_orderadm_i-header.
           wa_objects_to_save = guid.
           append wa_objects_to_save to it_objects_to_save.
           iv_update_task_local = 'X'.
           CALL FUNCTION 'CRM_ORDER_SAVE'
             EXPORTING
               IT_OBJECTS_TO_SAVE         = it_objects_to_save
              IV_UPDATE_TASK_LOCAL       = iv_update_task_local
             IV_SAVE_FRAME_LOG          = FALSE
             IV_NO_BDOC_SEND            = FALSE
            IMPORTING
              ET_SAVED_OBJECTS           = ET_SAVED_OBJECTS
              ET_EXCEPTION               =  ET_EXCEPTION
              ET_OBJECTS_NOT_SAVED       = ET_OBJECTS_NOT_SAVED
            CHANGING
              CV_LOG_HANDLE              =  CV_LOG_HANDLE
            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.
           ENDIF.
    commit work.
       CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
        EXPORTING
          WAIT          =
        IMPORTING
          RETURN        =

    Hello Deepthee,
    I don't have code available here, but I builted before using this strategy:
    Put a session break-point to CRM_ORDER_MAINTAIN function.
    Then go to CRMD_ORDER transaction and make the change you want to reflect in your code. Press enter or save it.
    The session debug will be launched and you may observe the internal table associated (for example: IT_PARTNER or IT_PRODUCT_I) and the internal table for input fields.
    Observing that will help you to fill the necessary fields for your new document.
    If you face difficulties, write back with your code and I'll try to help you.
    Regards,
    Bruno

  • How to add new line item based on main item using crm_order_maintain

    Hi All,
    can you please provide a way to create a new line item based on main line item and save in crm transaction( in house repair order) by using crm_order_maintain(from SAP GUI).
    Thanks,
    vinod.

    Hi Vinod,
    The relationship with main item is stored with CRMD_ORDERADM_I- Parent.
    You need to pass the guid of main item to orderadm_i-parent. This will keep the relationship with main item.
    Thanks
    Ajay

Maybe you are looking for

  • Financial Reports on a Unicode database?

    Hi, I don't have any experience with Unicode implementations and I have a simple question. Supposing we have a unicode PeopleSoft Finance implementation rolled out to users in the US and China. Now, if a Chinese user creates a voucher with an amount

  • Use boolean array to perform set operations

    I am currently taking a computer science class that uses Java as the language of choice. I have no prior experience with Java. We have a homework assignment in which we are supposed to use a boolean array to implement set operations. We have to creat

  • Word to PDF conversion

    How do you convert multiple word docs into PDF format without doing them one at a time?

  • Audio playback in Final Cut Express 4

    Captured some clips and started a sequence all was fine. rebooted the software to get around an issue where it wouldnt let me drop any transitions in which is now fine. Now however im not getting any audio playback even though i can see the audio on

  • Help mac os 10.4

    hi- i have a imac 333 288mb 6gb cd rom and i want to put tiger on it. I have the cds, and i copied them to an external hd and i want to put tiger on by that, i have xpostfacto 4 on cd, how do i put tiger on my imac