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
MarkusHello 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. -
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
GopalFirst 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..
JenHi 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,
UjwalkumarHi 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 PMHi,
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 AMCheck 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,
NavinHi 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,
AbdullahHi 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 PMHi,
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
-
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
-
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