CRM_ORDER_MAINTAIN problems

Hello.
I'm trying to insert new partner entries to the activity in a badi ORDER_SAVE (pf 00000026). How can I add these entries without loosing other entries with different partner functions?
I have tried to call fm CRM_ORDER_MAINTAIN and I'm able to insert new entries by following logic introduced in test program CRM_TEST_ORDER_MAINTAIN. When calling this fm all other entries are deleted.
What am I missing here?
Br, Johannes
Message was edited by: Johannes Mitronen

Hello Frederic!
Thank you for your answer. I finally managed to accomplish my goals. Other entries were deleted because I used an another fm with obviously wasn't the right one. Everything started to work when I also delete unwanted entries using fm CRM_ORDER_MAINTAIN.
Here's how I do it (if somebody else is struggling with similar kind of problems):
<b>1. Add new entries</b>
LOOP AT lt_entries INTO ls_entries.
    ADD 1 TO counter.
    CLEAR ls_new_partners.
    ls_new_partners-ref_guid = ls_orderadm_h-guid.
    ls_new_partners-ref_kind = ls_entries-ref_kind. "A
    ls_new_partners-kind_of_entry = 'C'.
    ls_new_partners-ref_partner_handle = counter.
    ls_new_partners-partner_fct = ls_entries-partner_fct.
    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_guid  = ls_new_partners-ref_guid.
    ls_input_fields-ref_kind = ls_new_partners-ref_kind. "A
    ls_input_fields-objectname = 'PARTNER'.
    MOVE-CORRESPONDING ls_new_partners TO ls_logical_key.
    ls_input_fields-logical_key = ls_logical_key.
    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.
  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.
<b>2. Delete entries</b>
LOOP AT lt_partner INTO ls_partner.
      MOVE-CORRESPONDING ls_partner TO ls_new_partners.
*     clear some fields for delete operation
      CLEAR ls_new_partners-ref_partner_handle.
      CLEAR ls_new_partners-partner_fct.
      INSERT ls_new_partners INTO TABLE lt_new_partners.
      CLEAR ls_input_fields.
      REFRESH ls_input_fields-field_names.
      ls_input_fields-ref_guid  = ls_new_partners-ref_guid.
      ls_input_fields-ref_kind = ls_new_partners-ref_kind.
      ls_input_fields-objectname = 'PARTNER'.
*     create logical key for delete operation
      CONCATENATE '0000' ls_partner-partner_fct ls_partner-partner_no INTO ls_input_fields-logical_key.
      CONCATENATE ls_partner-ref_no_type ls_partner-ref_no_type INTO id.
      WRITE id TO ls_input_fields-logical_key+28.
      ls_input_field_name-fieldname = 'PARTNER_FCT'.
      INSERT ls_input_field_name INTO TABLE ls_input_fields-field_names.
      INSERT ls_input_fields INTO TABLE lt_input_fields.
    ENDLOOP.
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.
Enjoy!
- Johannes

Similar Messages

  • 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 Save Function problem

    Hi
    We are trying to create Grantor applications in SAPM CRM 6.0 using Function Module CRM_ORDER_MAINTAIN.      
    From an ABAP program we are passing the parameters in order to recreate the same scenario that is used in the Standard SAP CRM Web to create this type of applications.
    When the CRM_ORDER_MAINTAIN function is called the returned code is 0 (zero), we think that is no problem. Then, the CRM_ORDER_SAVE function needs to be call passing the u201CGUID of a CRM Order Objectu201D as parameter that is generated with the last order. But in this case the returned code is 1 which means u201Cdocument_not_saveu201D.
    We also tried calling the CRM_ORDER_MAINTAIN function passing as parameters only the u201Cct_orderadm_hu201D table with the value u201CGAPu201D in the field u201Cprocess_typeu201D, and the table u201Cct_input_fieldsu201D with the value u201Corderadm_hu201D in the field u201Cobjectnameu201D; all this in order to create the u201CGUID of a CRM Order Objectu201D. And then use that GUID again in the CRM_ORDER_MAINTAIN function.
    When calling the CRM_ORDER_MAINTAIN function a DUMP is generated because of the data contained in the table CT_DOC_FLOW. This dump has the type of message u201CCRM_DOC_FLOW No. 010u201D u201CDocument flow record could not be generatedu201D. The table result is:
    4ABA4D7B372E0194E1008000AC137072 (Grantor ID in which the application will remain)
    BUS2100010 (Business Transaction Type of Grantor application)
    4AEA377815A301E6E1008000AC137072 (ID generated for the application)
    BUS2000270 (Business Transaction Type)
    If the ID is not sent, no error message is generated but also the record is not created.
    We also test the CRM_TEST_ORDER_MAINTAIN function with the standard program passing the operation type u201CGAPu201D as parameter. But the execution of the program generates a DUMP. If the function is test with another type of operation as parameter, the program executes correctly generating the corresponding records.
    If the u201CGUID of a CRM Order Objectu201D is generated calling the GUID_CREATE function, when calling the CRM_ORDER_SAVE function a DUMP is generated with type message X of class CRM_ORDER Nol 009  u201CIncorrect values in interface parametersu201D.
    Please any idea to solve it.
    Thanks in advanced,
    Osmany

    Hi,
    concerning first part of your post - "document_not_save" is usually posted if some validations were not passed by new document.
    it could be for example implementation of badi order_save.
    You should debug function module crm_order_save and look for message with reason for not saving.
    Regards
    Radek

  • 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

  • CRM_ORDER_MAINTAIN usage problem

    Hi all,
              I am using this function module to create a new activity. I am able to populate most of the fields, but somehow partner data is not getting populated on the first go, whereas if i write the code to edit partner data by passing "Guid" in the function module, it is getting saved.
      My doubt is, is it not possible to save partner data (Owner, Activity Partner and Contact Person) in an activity without giving GUID?
    I am using the following code:
    wa_partner-REF_KIND = 'A'.
                ****wa_partner-REF_GUID = wa_l_i_orderadm_h-GUID.
    wa_partner-REF_PARTNER_HANDLE = '0000000001'.
    wa_partner-PARTNER_NO = '121'.
    wa_partner-PARTNER_FCT = '00000022'.
    wa_partner-NO_TYPE = 'BP'.
    wa_partner-DISPLAY_TYPE   = 'BP'.
    wa_partner-KIND_OF_ENTRY = 'C'.
    INSERT wa_partner INTO TABLE it_partner.
    clear gs_input_fields_i_com_names.
    gs_input_fields_i_com_names-FIELDNAME = 'PARTNER_NO'.
    INSERT gs_input_fields_i_com_names INTO TABLE gs_input_fields_i_com-field_names.
    gs_input_fields_i_com_names-FIELDNAME = 'PARTNER_FCT'.
    INSERT gs_input_fields_i_com_names INTO TABLE gs_input_fields_i_com-field_names.
    gs_input_fields_i_com_names-FIELDNAME = 'NO_TYPE'.
    INSERT gs_input_fields_i_com_names INTO TABLE gs_input_fields_i_com-field_names.
    gs_input_fields_i_com_names-FIELDNAME = 'DISPLAY_TYPE'.
    INSERT gs_input_fields_i_com_names INTO TABLE gs_input_fields_i_com-field_names.
    gs_input_fields_i_com_names-FIELDNAME = 'KIND_OF_ENTRY'.
    INSERT gs_input_fields_i_com_names INTO TABLE gs_input_fields_i_com-field_names.
    gs_input_fields_i_com-ref_handle = '0000000001'.
           *****gs_input_fields_i_com-ref_guid = wa_l_i_orderadm_h-GUID.
    gs_input_fields_i_com-REF_KIND = 'A'.
    gs_input_fields_i_com-OBJECTNAME = 'PARTNER'.
    gs_input_fields_i_com-logical_key = '0001'.
    INSERT gs_input_fields_i_com INTO TABLE gt_input_fields_i_com.
    CALL FUNCTION 'CRM_ORDER_MAINTAIN'
    EXPORTING
       IT_ACTIVITY_H                 = it_activity
       IT_STATUS                     = it_status
       it_schedlin_i                 = gt_schedlin_i_com
         it_partner                  = it_partner
    * IMPORTING
    *   ET_EXCEPTION                  =
    CHANGING
        CT_INPUT_FIELDS = gt_input_fields_i_com
        ct_orderadm_h = l_i_orderadm_h
    EXCEPTIONS
       ERROR_OCCURRED                = 1
       DOCUMENT_LOCKED               = 2
       NO_CHANGE_ALLOWED             = 3
       NO_AUTHORITY                  = 4
       OTHERS                        = 5
    Same code works fine if i remove the commented part (that is giving guid).
    Please help.
    Regards,
    Rohit
    Edited by: Rohit Khetarpal on Aug 25, 2008 1:11 PM

    solved by myself

  • CRM_ORDER_MAINTAIN probability problem

    i  use CRM_ORDER_MAINTAIN to create order.
    In this order I have several partners, items etc.
    in opport_i use following code:
    ls_opport_h-ref_handle = 1.
    ls_opport_h-curr_phase = lv_curr_phase.
    ls_opport_h-expect_end = lv_expect_end.
    ls_opport_h-probability = lv_probability.
        INSERT ls_opport_h INTO TABLE lt_opport_h.
        CLEAR ls_input.
    ls_input-objectname = 'OPPORT_H'.
    ls_input-ref_handle = 1.
    ls_input-ref_kind   = 'A'.
        ls_input_field_name-fieldname = 'CURR_PHASE'.
        INSERT ls_input_field_name INTO TABLE ls_input-field_names.
        ls_input_field_name-fieldname = 'EXPECT_END'.
        INSERT ls_input_field_name INTO TABLE ls_input-field_names.
            ls_input_field_name-fieldname = 'PROBABILITY'.
        INSERT ls_input_field_name INTO TABLE ls_input-field_names.
        INSERT ls_input  INTO TABLE lt_input.
    order is saved without any errors.
    All fields except probability are filled correctly. I tried using field sys_probability and debugging crdm_order_maintain. It seems i put the same data but still my probablity is not filled.
    Can you give some tips about that?
    regards,
    wojciech.

    solved by myself

  • Problem with FM CRM_ORDER_MAINTAIN

    Hi All
    I am investigating the use of function module CRM_ORDER_MAINTAIN.  I need to update 1000+ orders in CRM 4.0 and know I need to use this FM.  I have tested it's use in SE38 using the default standard interface.
    I have worked out how to amend the DESCRIPTION at ORDERADM_H, this is basic stuff.
    My requirement is to do the following:
    1. Add a new partner
    2. Amend item level dates (APPOINTMENT, APPT_TYPE = SRV_CUST_BEG + SRV_CUST_END)
    3. Add item level Service Contract data.
    The first thing I notice is that  for Appointment dates, using the FM GUI, I cannot input data for SRV_CUST_BEG + SRV_CUST_END.
    I am struggling to add a new partner,
    and I have no idea how to add the service contract data.
    I am continuing to investigate by looking at underlying tables
    CRMD_LINK
    CRMC_OBJECTS
    etc.
    but I could do with some help or advice.
    Thanks
    Mark

    Hi Mike,
    Try searching on SDN, there are many codes that can help you achieve this functionality.
    For eg. I searched and found one thread abt adding partner details:
    How to create a partner and header record using CRM_ORDER_MAINTAIN?
    Regards,
    Saumya

  • Weird problem about FM 'CRM_ORDER_MAINTAIN'

    Hello ,all:
         I try to modify some infomation about a sales order using FM  'CRM_ORDER_MAINTAIN'.But how strange,for instance,it can be successful for the first time in the morning (a.m)and the FM executes a long time  ,then modified infomation is ok.
    And modify again using FM in succession,it will fail.However,in the afternoon(p.m),execute it again and will be successful.So, i think may be  after a big interval,modify will successful.
    I don't know why and how to using the FM and look forward to your greate help.
    Thanks.

    Hi,
    You need to use FM 'BAPI_TRANSACTION_COMMIT' or 'CRM_ORDER_SAVE' after executing FM 'CRM_ORDER_MAINTAIN' so that your changes are not in buffer but are relected down till the Database and you can see it next time you open your transaction.
    Best Regards,
    Pratik Patel
    <b>Reward with points!</b>

  • 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,

  • 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

  • Adding item data in Product tab for sales contract (crm_order_maintain)

    Hi, can I use crm_order_maintain to add line items under the product tab for a sales contract while creating or modifying an order. Is there any sample code to add the line items, I could look at.  I tried calling this FM from my custom tab and then called CRM_ORDER_SAVE but that did not add the line item. I guess I need to call it from the order_save badi and then call the crm_order_save FM as well from within the BADI. If someone could send me some sample code then I can double check if I am missing something.Am I on the right track to be using this FM for adding a line item under the product tab for the sales contract? Please help. thanks

    Hi, I've encountered the same problem while I was creating a Sub-Contract from a Master Contract.
    In my case the solution was:
    first create the Sub-Contract,
    CALL FUNCTION 'CRM_ORDER_MAINTAIN'
          CHANGING
            ct_orderadm_h     = i_ctorderadm_h
            ct_input_fields   = i_ctinput_fields
            ct_doc_flow       = i_ctdoc_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 i_ctorderadm_h INTO wa_ctorderadm_h INDEX 1.
        APPEND wa_ctorderadm_h-guid TO i_objects_to_save.
    in wa_ctorderadm_h-guid now we have the guid of the newly created Sub-Contract.
    SELECT SINGLE it_type_to
                 INTO  v_it_type_to    " --> target item type
                 FROM  crmc_it_copy_ma
                 WHERE it_type_from = wa_out_orderadm_i-itm_type.
         Prepare tables
            wa_ctorderadm_i-header =
            wa_out_orderadm_i-header.   "Retrieved from CRM_ORDER_READ
            wa_ctorderadm_i-handle = '0000000001'.
            wa_ctorderadm_i-number_int = '0000000001'.
            wa_ctorderadm_i-product = wa_out_orderadm_i-product.
            wa_ctorderadm_i-ordered_prod =
            wa_out_orderadm_i-ordered_prod.
            wa_ctorderadm_i-description = wa_out_orderadm_i-description.
            wa_ctorderadm_i-itm_type = v_it_type_to.
            wa_ctorderadm_i-order_date   = sy-datum.
            wa_ctorderadm_i-itm_language = sy-langu.
            wa_ctorderadm_i-mode = c_a.   "c_a = 'A'
            wa_ctorderadm_i-header = wa_ctorderadm_h-guid.
            APPEND wa_ctorderadm_i TO i_ctorderadm_i.
            wa_input_fields-ref_handle = '0000000001'.
            wa_input_fields-objectname = 'ORDERADM_I'.
            REFRESH i_input_field_names.
            wa_input_field_names-fieldname = 'DESCRIPTION'.
            APPEND wa_input_field_names TO i_input_field_names.
            wa_input_field_names-fieldname = 'HEADER'.
            APPEND wa_input_field_names TO i_input_field_names.
            wa_input_field_names-fieldname = 'ITM_TYPE'.
            APPEND wa_input_field_names TO i_input_field_names.
            wa_input_field_names-fieldname = 'MODE'.
            APPEND wa_input_field_names TO i_input_field_names.
            wa_input_field_names-fieldname = 'NUMBER_INT'.
            APPEND wa_input_field_names TO i_input_field_names.
            wa_input_field_names-fieldname = 'ORDERED_PROD'.
            APPEND wa_input_field_names TO i_input_field_names.
            wa_input_field_names-fieldname = 'ORDER_DATE'.
            APPEND wa_input_field_names TO i_input_field_names.
            wa_input_field_names-fieldname = 'PRODUCT'.
            APPEND wa_input_field_names TO i_input_field_names.
            wa_input_fields-field_names = i_input_field_names.
            APPEND wa_input_fields TO i_ctinput_fields.
    After that I've called function 'CRM_ORDER_MAINTAIN', to copy the Items from the Master Contract.
    CALL FUNCTION 'CRM_ORDER_MAINTAIN'
            EXPORTING
              it_sales          = i_sales
              it_schedlin_i     = i_schedlin_i
            CHANGING
              ct_orderadm_i     = i_ctorderadm_i
              ct_input_fields   = i_ctinput_fields
            EXCEPTIONS
              error_occurred    = 1
              document_locked   = 2
              no_change_allowed = 3
              no_authority      = 4
              OTHERS            = 5.
    Maybe if you're not working with Contracts, the procedure is not properly correct.
    I suggest to put a break-point into crm_order_maintain and try to add the Item manually.
    If you reproduce exactly the standard, I'm shure it will work.
    Lorenzo

  • Problem Updating fields in Service Confirmation

    Hi Experts,
    I have a requirement to copy the service items to the service confirmation. To do this i am making an event and copying.I am successful in copying the items from Service order to confirmation once the items are released,but due to some CO integrations it is required to also populate the service order number and its item number to the confirmation item too,which i am not able to so.
    I think i am missing something during CRM_ORDER_MAINTAIN for this entry.It will be a very great if you experts can guide me.
    Thanks,
    SA

    Hi Experts,
    I am now successful in Updating the fields, but right now my problem is when i have not kept any restriction on the status for the event i created, I find that during event trace it fires twice the event, once with the My user name Say 'X' and at the same time it fires with User name 'Y', which we have used for middle ware purposes.
    Anybody has any idea why is tht so..and how can i correct it.
    thanks,
    SA

  • Create ticket using CRM_ORDER_MAINTAIN

    I am creating a service ticket using the above mentined RFC. I want to insert the problem area and actual fault as Level1 (parent) and Level2 (child) within the problem area. For that I am making use of the lt_service_os table and building the subject table within it, on the OBJECTS tab of the ticket.
    The problem is both the problem area and fault go into the ticket at parent levels.
    I do not want to follow 2 step process of creating the ticket first with parent subject and adding the child subject to it as it takes lot of time.
    FORM subject_create  USING    P_GV_HANDLE p_gv_product p_gv_l1 p_gv_l2
                                  ibaseid
                         CHANGING
                             P_GT_INPUT_FIELDS type crmt_input_field_tab
                             P_GT_OSSET type crmt_srv_osset_comt.
      DATA:
        ls_subject                TYPE crmt_srv_subject_com,
        ls_object    TYPE  crmt_srv_refobj_com,
        ls_input_field            TYPE crmt_input_field,
        ls_input_field_names      TYPE crmt_input_field_names,
        gc_mode_create            TYPE crmt_mode VALUE 'A',
        gc_object_kind_orderadm_h TYPE crmt_object_kind  VALUE 'A',
        gc_object_name_orderadm_h TYPE crmt_object_name  value 'ORDERADM_H',
        lv_service_h       TYPE  crmc_service_h,
        ls_osset           TYPE  crmt_srv_osset_com2,
        lt_refobj          TYPE  crmt_srv_refobj_comt,
        lt_subject         TYPE  crmt_srv_subject_comt,
        lv_handle          TYPE  crmt_handle,
        lt_service_os      TYPE  crmt_srv_osset_comt,
        lt_input_fields_f TYPE crmt_input_field_tab.
      DATA: BEGIN OF lt_code OCCURS 0.
              INCLUDE STRUCTURE com_code_f4.
      DATA: END OF lt_code.
      REFRESH: lt_subject, lt_refobj.
      CALL FUNCTION 'CRM_ORDER_SERVICE_H_SELECT_CB'
        EXPORTING
          iv_process_type = 'YRMS'
        IMPORTING
          es_service_h    = lv_service_h
        EXCEPTIONS
          entry_not_found = 1
          OTHERS          = 2.
    Read subject profile LEVEL 1
      Refresh lt_code.
      CALL FUNCTION 'CRM_SUBJECT_PROF_CODES_PROVIDE'
        EXPORTING
          i_subject_profile = lv_service_h-subject_profile
          I_HIERARCHY_LEVEL = '1'
        TABLES
          e_code_tab        = lt_code
        EXCEPTIONS
          no_valid_entry    = 1
          no_entry          = 2
          OTHERS            = 3.
      read table lt_code with key
      katalogart = 'Y1' codegruppe = p_gv_product code = p_gv_l1.
      clear ls_subject.
      MOVE-CORRESPONDING lt_code TO ls_subject.
      CLEAR ls_subject-ref_guid.
      CLEAR ls_subject-ref_guid_h.
      CLEAR ls_subject-ref_handle_h.
      CALL FUNCTION 'CRM_INTLAY_GET_HANDLE'
        IMPORTING
          ev_handle = ls_subject-ref_handle.
      ls_subject-mode         = gc_mode_create.
      ls_subject-hierarchy_level = 1.
      INSERT ls_subject  INTO TABLE lt_subject.
      lv_handle = ls_subject-ref_handle.
    Read subject profile LEVEL 2
      Refresh lt_code.
      CALL FUNCTION 'CRM_SUBJECT_PROF_CODES_PROVIDE'
        EXPORTING
          i_subject_profile = lv_service_h-subject_profile
          I_HIERARCHY_LEVEL = '2'
        TABLES
          e_code_tab        = lt_code
        EXCEPTIONS
          no_valid_entry    = 1
          no_entry          = 2
          OTHERS            = 3.
      read table lt_code with key
      katalogart = 'Y2' codegruppe = p_gv_product code = p_gv_l2.
      clear ls_subject.
      MOVE-CORRESPONDING lt_code TO ls_subject.
      CLEAR ls_subject-ref_guid.
      CLEAR ls_subject-ref_guid_h.
      CLEAR ls_subject-ref_handle_h.
      CALL FUNCTION 'CRM_INTLAY_GET_HANDLE'
        IMPORTING
          ev_handle = ls_subject-ref_handle.
    ls_subject-ref_handle = lv_handle + 1.
       ls_subject-ref_handle_h = lv_handle.
      ls_subject-mode         = gc_mode_create.
      ls_subject-hierarchy_level = 2.
      INSERT ls_subject  INTO TABLE lt_subject.
       MOVE p_gv_product to ls_object-product_id .
      CLEAR ls_object-ref_guid.
      ls_object-type_object = 'A'.
      CALL FUNCTION 'CRM_INTLAY_GET_HANDLE'
        IMPORTING
          ev_handle = ls_object-ref_handle.
      ls_object-mode = gc_mode_create.
      INSERT ls_object INTO TABLE lt_refobj .
      IF NOT ibaseid IS INITIAL.
        MOVE:
         p_gv_handle        TO ls_object-ref_handle,
         'B'                TO ls_object-type_object,
         ibaseid            TO ls_object-ib_instance,
         'A'                TO ls_object-mode.
        APPEND ls_object TO lt_refobj.
      ENDIF.
    Set Osset for subject and Reference object
      CLEAR ls_osset.
      ls_osset-ref_handle = p_gv_handle.
      ls_osset-subject_profile = lv_service_h-subject_profile.
      ls_osset-profile_type    = 'A'.
      lv_handle = p_gv_handle.
      CALL FUNCTION 'CRM_SERVICE_OS_SET_DATA'
        EXPORTING
          is_srv_osset_com   = ls_osset
          iv_ref_handle      = lv_handle
          iv_ref_kind        = 'A'
          it_srv_refobj_com  = lt_refobj
          it_srv_subject_com = lt_subject
        EXCEPTIONS
          error_occurred     = 1
          invalid_guid       = 2
          no_record_exist    = 3
          OTHERS             = 4.
      CALL FUNCTION 'CRM_SERVICE_OS_PUT_DATA'
        IMPORTING
          et_srv_osset_com = lt_service_os
          et_input_fields  = lt_input_fields_f.
      INSERT LINES OF lt_service_os INTO TABLE p_gt_osset.
      INSERT LINES OF lt_input_fields_f INTO TABLE p_gt_input_fields.
    Please suggest how to create parent child relation. The code for creating the subjects in the ticket is pasted below for reference.

    Hi Thomas,
    The FM CRM_ORDER_MAINTAIN has two changing parameters:CT_ORDERADM_H and CT_ORDERADM_I.You can set the mode in these two changing parameters for header or item.
      ls_orderadm_i-mode = gc_mode-create.
      INSERT ls_orderadm_i INTO TABLE lt_orderadm_i.
    and then pass this to the FM:
    CALL FUNCTION 'CRM_ORDER_MAINTAIN'
        CHANGING
          ct_orderadm_h   = lt_orderadm_h
          ct_orderadm_i   = lt_orderadm_i
          ct_input_fields = lt_input_fields
        EXCEPTIONS
          OTHERS          = 0.
    The possible values for mode are:
    BEGIN OF gc_mode,
                 create     TYPE   crmt_mode   VALUE   'A',
                 change     TYPE   crmt_mode   VALUE   'B',
                 display    TYPE   crmt_mode   VALUE   'C',
                 delete     TYPE   crmt_mode   VALUE   'D',
               END OF gc_mode.
    Hope this helps!
    Thanks and Regards,
    Rohit
    Edited by: rohit raturi on Jul 28, 2008 9:26 AM

Maybe you are looking for

  • ITunes Music files on time machine back up

    I am having an issue locating my iTunes files on my time machine. I recently purchased an SSD, but because it was so much smaller than my initial HD, I didnt include my iTunes library in the install for the new SSD. I would like to use some of my iTu

  • After Effects CC 2014 not scrubbing audio

    Hey, I'm using After Effects CC 2014, and none of the usual shortcuts are scrubbing audio (I've tried command-drag, ctrl-drag, and alt-drag). I'm not sure where the problem is. Is there something new I'm not aware of or some kind of preview setting t

  • EPM 11.1.2.1 (new version) hardware requirements

    We are looking to build a development environment that would be running Planning, Workspace, ESSBase and SQL. We already have one server that is running all of these components, the server specs on that box are: 2 x Xeon E5540 / 2.53 GHz - RAM 8 GB,

  • CMS Audit database records purge

    I was recently notified by our DBA that the size of our Audit database has surpassed the size of all other tables on the production (Oracle) schemas of the CMS. Since audit is only a historical record of user and past report activities, most of it is

  • Verity Fulltext Problem

    We have Verity 6 installed for our fulltext searching. When we search now for documents we only get the results from the Metadata search. While searching or indexing we don't get any error message. We also rebuilt the whole index, which didn't had an