on 01-04-2007 8:53 AM
I need to create the document flow in CRM to link leased contracts to its SPM. So far, i tried CRM_ORDER_MAINTAIN and BAPI_ACTIVITYCRM_CHANGEMULTI but i still can't create the document flow. I also tried CRM_CREATE_DOC_FLOW. It creates the doc flow but in the wrong 'Role' field.
Any idea how?
PS: I am very new to CRM. 😛
I tried to create the doc flow from contract to proposal using BAPI_ACTIVITYCRM_CHANGEMULTI. It returns me an error:
<b>Referenced object type (DOC_FLOW) not allowed</b>
Any idea why and how to solve it?
Here's my source code
*&---------------------------------------------------------------------*
*& BAPI BAPI_ACTIVITYCRM_CHANGEMULTI
*&---------------------------------------------------------------------*
DATA: lt_doc_flow TYPE STANDARD TABLE OF bapibus20001_doc_flow_ins,
lw_doc_flow LIKE LINE OF lt_doc_flow,
lt_obj_save TYPE STANDARD TABLE OF bapibus20001_guid_dis,
lw_obj_save LIKE LINE OF lt_obj_save,
lt_ret TYPE STANDARD TABLE OF bapiret2,
lw_ret LIKE LINE OF lt_ret,
lt_save_obj TYPE STANDARD TABLE OF bapibus20001_object_id,
lw_save_obj LIKE LINE OF lt_save_obj,
lt_input_fields TYPE STANDARD TABLE OF bapibus20001_input_fields,
lw_input_fields LIKE LINE OF lt_input_fields.
CONSTANTS: gc_guid_con TYPE crmt_object_guid_c VALUE 'AD1273F310374647A58AFCD89D4423A7',"3600000010
gc_guid_pro TYPE crmt_object_guid_c VALUE '10FF1E11CE542B46A70C5FDF9E61AEF7'."1000000157
lw_input_fields-REF_GUID = gc_guid_con.
lw_input_fields-objectname = 'DOC_FLOW'.
lw_input_fields-fieldname = 'REF_GUID'.
APPEND lw_input_fields TO lt_input_fields.
lw_input_fields-REF_GUID = gc_guid_con.
lw_input_fields-objectname = 'DOC_FLOW'.
lw_input_fields-fieldname = 'OBJKEY_A'.
APPEND lw_input_fields TO lt_input_fields.
lw_input_fields-REF_GUID = gc_guid_con.
lw_input_fields-objectname = 'DOC_FLOW'.
lw_input_fields-fieldname = 'OBJTYPE_A'.
APPEND lw_input_fields TO lt_input_fields.
lw_input_fields-REF_GUID = gc_guid_con.
lw_input_fields-objectname = 'DOC_FLOW'.
lw_input_fields-fieldname = 'OBJKEY_B'.
APPEND lw_input_fields TO lt_input_fields.
lw_input_fields-REF_GUID = gc_guid_con.
lw_input_fields-objectname = 'DOC_FLOW'.
lw_input_fields-fieldname = 'OBJTYPE_B'.
APPEND lw_input_fields TO lt_input_fields.
lw_input_fields-REF_GUID = gc_guid_con.
lw_input_fields-objectname = 'DOC_FLOW'.
lw_input_fields-fieldname = 'VONA_KIND'.
APPEND lw_input_fields TO lt_input_fields.
lw_input_fields-REF_GUID = gc_guid_con.
lw_input_fields-objectname = 'DOC_FLOW'.
lw_input_fields-fieldname = 'RELTYPE'.
APPEND lw_input_fields TO lt_input_fields.
lw_input_fields-REF_GUID = gc_guid_con.
lw_input_fields-objectname = 'DOC_FLOW'.
lw_input_fields-fieldname = 'BREL_KIND'.
APPEND lw_input_fields TO lt_input_fields.
lw_input_fields-REF_GUID = gc_guid_con.
lw_input_fields-objectname = 'DOC_FLOW'.
lw_input_fields-fieldname = 'BREL_MODE'.
APPEND lw_input_fields TO lt_input_fields.
lw_doc_flow-ref_guid = gc_guid_con.
lw_doc_flow-objkey_a = gc_guid_pro.
lw_doc_flow-objtype_a = 'BUS2000114'.
lw_doc_flow-objkey_b = gc_guid_con.
lw_doc_flow-objtype_b = 'BUS2000114'.
lw_doc_flow-vona_kind = 'A'.
lw_doc_flow-reltype = 'VONA'.
lw_doc_flow-brel_kind = 'A'.
lw_doc_flow-brel_mode = gc_mode-create.
APPEND lw_doc_flow TO lt_doc_flow.
CALL FUNCTION 'BAPI_ACTIVITYCRM_CHANGEMULTI'
TABLES
input_fields = lt_input_fields
document_flow = lt_doc_flow
return = lt_ret.
IF sy-subrc EQ 0.
WRITE: / 'Executed: BAPI_ACTIVITYCRM_CHANGEMULTI'.
LOOP AT lt_ret INTO lw_ret.
WRITE: / 'Type : ', lw_ret-type,
/ 'Message: ', lw_ret-message,
/ 'Number : ', lw_ret-number.
ENDLOOP.
ULINE.
ENDIF.
lw_obj_save-guid = gc_guid_con.
lw_obj_save-object_type = 'BUS2000114'.
APPEND lw_obj_save TO lt_obj_save.
CALL FUNCTION 'BAPI_ACTIVITYCRM_SAVE'
TABLES
objects_to_save = lt_obj_save
saved_objects = lt_save_obj.
IF sy-subrc EQ 0.
WRITE: / 'Executed: BAPI_ACTIVITYCRM_SAVE'.
LOOP AT lt_save_obj INTO lw_save_obj.
WRITE: / 'GUID : ', lw_save_obj-guid,
/ 'Trans ID: ', lw_save_obj-object_id.
ENDLOOP.
ULINE.
ENDIF.
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'.
IF sy-subrc EQ 0.
WRITE: / 'Executed: BAPI_TRANSACTION_COMMIT'.
ULINE.
ENDIF.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Hi Gregor,
I managed to create the doc flow but i am still facing some problem. My current problem is:
If i create doc flow, i can't have any item. If i have item, i can't create the doc flow.
As for how i create the doc flow, i used a function module called CRM_COPY_PROCESS_PREPARE to get the doc flow, then pass it to CRM_ORDER_MAINTAIN to be created.
You can refer to the program CRM_TEST_ORDER_MAINTAIN_LEAS for some example.
Hello,
I found a solution using the following Code. I've sucessfully created a Document Flow between two Activities:
REPORT z_gw_create_follow_up_order.
PARAMETERS: lv_id_a TYPE crmt_object_id OBLIGATORY,
lv_id_b TYPE crmt_object_id OBLIGATORY.
DATA: guids TYPE crmt_object_guid_tab,
guid_a LIKE LINE OF guids,
guid_b LIKE LINE OF guids.
*
* Read GUID for Activity A
*
CALL FUNCTION 'CRM_ORDERADM_H_GUID_GET_DB'
EXPORTING
iv_object_id = lv_id_a
IMPORTING
et_guid = guids.
READ TABLE guids INTO guid_a INDEX 1.
REFRESH: guids.
*
* Read GUID for Activity B
*
CALL FUNCTION 'CRM_ORDERADM_H_GUID_GET_DB'
EXPORTING
iv_object_id = lv_id_b
IMPORTING
et_guid = guids.
READ TABLE guids INTO guid_b INDEX 1.
DATA: it_activity_h TYPE crmt_activity_h_wrkt,
ls_activity_h LIKE LINE OF it_activity_h,
it_requested_objects TYPE crmt_object_name_tab,
ls_requested_objects LIKE LINE OF it_requested_objects,
it_orderadm_h TYPE crmt_orderadm_h_wrkt,
ls_orderadm_h LIKE LINE OF it_orderadm_h,
it_doc_flow TYPE crmt_doc_flow_wrkt,
ls_doc_flow LIKE LINE OF it_doc_flow,
it_header_guid TYPE crmt_object_guid_tab,
ls_header_guid LIKE LINE OF it_header_guid.
* Append GUID_A to Header GUID Table
APPEND guid_a TO it_header_guid.
* What should we read
ls_requested_objects = 'ACTIVITY_H'.
APPEND ls_requested_objects TO it_requested_objects.
ls_requested_objects = 'DOC_FLOW'.
APPEND ls_requested_objects TO it_requested_objects.
*
* Read Activity A
*
CALL FUNCTION 'CRM_ORDER_READ'
EXPORTING
it_header_guid = it_header_guid
it_requested_objects = it_requested_objects
IMPORTING
et_orderadm_h = it_orderadm_h
et_activity_h = it_activity_h
et_doc_flow = it_doc_flow.
DATA: it_activity_h_comt TYPE crmt_activity_h_comt,
ls_activity_h_comt LIKE LINE OF it_activity_h_comt,
ct_doc_flow TYPE crmt_doc_flow_comt,
ls_doc_flow_comt LIKE LINE OF ct_doc_flow,
ref_guid TYPE guid_16,
lt_doc_link TYPE crmt_doc_flow_extdt,
ls_doc_link LIKE LINE OF lt_doc_link,
ct_input_fields TYPE crmt_input_field_tab,
ls_input_field TYPE crmt_input_field,
ls_input_field_names TYPE crmt_input_field_names,
log_handle TYPE balloghndl.
LOOP AT it_activity_h INTO ls_activity_h.
MOVE-CORRESPONDING ls_activity_h TO ls_activity_h_comt.
APPEND ls_activity_h_comt TO it_activity_h_comt.
ENDLOOP.
*
* Fill DOC_FLOW Structure
*
ls_doc_link-objkey_a = guid_a.
ls_doc_link-objtype_a = 'BUS2000126'.
ls_doc_link-objkey_b = guid_b.
ls_doc_link-objtype_b = 'BUS2000126'.
ls_doc_link-vona_kind = 'A'.
ls_doc_link-reltype = 'VONA'.
ls_doc_link-brel_kind = 'A'.
APPEND ls_doc_link TO lt_doc_link.
CLEAR: ls_doc_flow_comt.
ls_doc_flow_comt-ref_guid = guid_a.
ls_doc_flow_comt-ref_kind = 'A'.
ls_doc_flow_comt-doc_link[] = lt_doc_link.
APPEND ls_doc_flow_comt TO ct_doc_flow.
*
* Fill INPUT_FIELDS which indicate what Values where changed
* and had to be updated
*
ls_input_field_names-fieldname = 'OBJKEY_A'.
INSERT ls_input_field_names INTO TABLE ls_input_field-field_names.
ls_input_field_names-fieldname = 'OBJTYPE_A'.
INSERT ls_input_field_names INTO TABLE ls_input_field-field_names.
ls_input_field_names-fieldname = 'OBJKEY_B'.
INSERT ls_input_field_names INTO TABLE ls_input_field-field_names.
ls_input_field_names-fieldname = 'OBJTYPE_B'.
INSERT ls_input_field_names INTO TABLE ls_input_field-field_names.
ls_input_field_names-fieldname = 'VONA_KIND'.
INSERT ls_input_field_names INTO TABLE ls_input_field-field_names.
ls_input_field_names-fieldname = 'RELTYPE'.
INSERT ls_input_field_names INTO TABLE ls_input_field-field_names.
ls_input_field_names-fieldname = 'BREL_KIND'.
INSERT ls_input_field_names INTO TABLE ls_input_field-field_names.
ls_input_field_names-fieldname = 'BREL_MODE'.
INSERT ls_input_field_names INTO TABLE ls_input_field-field_names.
ls_input_field_names-fieldname = 'RELATIONID'.
INSERT ls_input_field_names INTO TABLE ls_input_field-field_names.
ls_input_field_names-fieldname = 'RELATION_HANDLE'.
INSERT ls_input_field_names INTO TABLE ls_input_field-field_names.
ls_input_field-objectname = 'DOC_FLOW'.
ls_input_field-ref_guid = guid_a.
ls_input_field-ref_kind = 'A'.
INSERT ls_input_field INTO TABLE ct_input_fields.
*
* Update Document Flow
*
CALL FUNCTION 'CRM_ORDER_MAINTAIN'
CHANGING
ct_input_fields = ct_input_fields
cv_log_handle = log_handle
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.
DATA: it_saved_objects TYPE crmt_return_objects.
*
* Save Changes
*
CALL FUNCTION 'CRM_ORDER_SAVE'
EXPORTING
it_objects_to_save = it_header_guid
IV_UPDATE_TASK_LOCAL = 'X'
IV_SAVE_FRAME_LOG = 'X'
IMPORTING
et_saved_objects = it_saved_objects.
IF sy-subrc <> 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
DATA: lt_return TYPE TABLE OF bapiret2,
ls_return LIKE LINE OF lt_return.
*
* Commit Changes
*
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'
IMPORTING
return = ls_return.
WRITE: / ls_return-message.
*
* Read Error Messages
*
IF NOT log_handle IS INITIAL.
DATA: is_msg_handle TYPE balmsghndl,
es_info TYPE crmt_msg_info,
es_msg TYPE bal_s_msg,
ev_ref_object TYPE crmt_ref_obj_text.
is_msg_handle-log_handle = log_handle.
CALL FUNCTION 'CRM_MESSAGES_GET_MSG_INFO'
EXPORTING
is_msg_handle = is_msg_handle
iv_get_caller_name = 'X'
IMPORTING
es_info = es_info
es_msg = es_msg
ev_ref_object = ev_ref_object.
ENDIF.
Best regards
Gregor
hi gregor wolf ,
i tried the same code but unable to create a link .i used same code as urs but could not suceed can u suggest?
code is as follows.
PARAMETERS: lv_id_a TYPE crmt_object_id OBLIGATORY,
lv_id_b TYPE crmt_object_id OBLIGATORY.
DATA: guids TYPE crmt_object_guid_tab,
guid_a LIKE LINE OF guids,
guid_b LIKE LINE OF guids.
* Read GUID for Activity A *
CALL FUNCTION 'CRM_ORDERADM_H_GUID_GET_DB'
EXPORTING
iv_object_id = lv_id_a
IMPORTING
et_guid = guids.
READ TABLE guids INTO guid_a INDEX 1.
REFRESH: guids.
* Read GUID for Activity B *
CALL FUNCTION 'CRM_ORDERADM_H_GUID_GET_DB'
EXPORTING
iv_object_id = lv_id_b
IMPORTING
et_guid = guids.
READ TABLE guids INTO guid_b INDEX 1.
DATA: it_activity_h TYPE crmt_activity_h_wrkt,
ls_activity_h LIKE LINE OF it_activity_h,
it_requested_objects TYPE crmt_object_name_tab,
ls_requested_objects LIKE LINE OF it_requested_objects,
it_orderadm_h TYPE crmt_orderadm_h_wrkt,
ls_orderadm_h LIKE LINE OF it_orderadm_h,
it_doc_flow TYPE crmt_doc_flow_wrkt,
ls_doc_flow LIKE LINE OF it_doc_flow,
it_header_guid TYPE crmt_object_guid_tab,
ls_header_guid LIKE LINE OF it_header_guid.
Append GUID_A to Header GUID Table
APPEND guid_a TO it_header_guid.
What should we read
ls_requested_objects = 'ACTIVITY_H'.
APPEND ls_requested_objects TO it_requested_objects.
ls_requested_objects = 'DOC_FLOW'.
APPEND ls_requested_objects TO it_requested_objects.
* Read Activity A *
CALL FUNCTION 'CRM_ORDER_READ'
EXPORTING
it_header_guid = it_header_guid
it_requested_objects = it_requested_objects
IMPORTING
et_orderadm_h = it_orderadm_h
et_activity_h = it_activity_h
et_doc_flow = it_doc_flow.
DATA: it_activity_h_comt TYPE crmt_activity_h_comt,
ls_activity_h_comt LIKE LINE OF it_activity_h_comt,
ct_doc_flow TYPE crmt_doc_flow_comt,
ls_doc_flow_comt LIKE LINE OF ct_doc_flow,
ref_guid TYPE guid_16,
lt_doc_link TYPE crmt_doc_flow_extdt,
ls_doc_link LIKE LINE OF lt_doc_link,
ct_input_fields TYPE crmt_input_field_tab,
ls_input_field TYPE crmt_input_field,
ls_input_field_names TYPE crmt_input_field_names,
log_handle TYPE balloghndl.
LOOP AT it_activity_h INTO ls_activity_h.
MOVE-CORRESPONDING ls_activity_h TO ls_activity_h_comt.
APPEND ls_activity_h_comt TO it_activity_h_comt.
ENDLOOP.
* Fill DOC_FLOW Structure *
ls_doc_link-objkey_a = guid_a.
ls_doc_link-objtype_a = 'BUS2000126'.
ls_doc_link-objkey_b = guid_b.
ls_doc_link-objtype_b = 'BUS2000111'.
ls_doc_link-vona_kind = 'A'.
ls_doc_link-reltype = 'VONA'.
ls_doc_link-brel_kind = 'A'.
APPEND ls_doc_link TO lt_doc_link.
CLEAR: ls_doc_flow_comt.
ls_doc_flow_comt-ref_guid = guid_a.
ls_doc_flow_comt-ref_kind = 'A'.
ls_doc_flow_comt-doc_link[] = lt_doc_link.
APPEND ls_doc_flow_comt TO ct_doc_flow.
* Fill INPUT_FIELDS which indicate what Values where changed * and had to be updated *
ls_input_field_names-fieldname = 'OBJKEY_A'.
INSERT ls_input_field_names INTO TABLE ls_input_field-field_names.
ls_input_field_names-fieldname = 'OBJTYPE_A'.
INSERT ls_input_field_names INTO TABLE ls_input_field-field_names.
ls_input_field_names-fieldname = 'OBJKEY_B'.
INSERT ls_input_field_names INTO TABLE ls_input_field-field_names.
ls_input_field_names-fieldname = 'OBJTYPE_B'.
INSERT ls_input_field_names INTO TABLE ls_input_field-field_names.
ls_input_field_names-fieldname = 'VONA_KIND'.
INSERT ls_input_field_names INTO TABLE ls_input_field-field_names.
ls_input_field_names-fieldname = 'RELTYPE'.
INSERT ls_input_field_names INTO TABLE ls_input_field-field_names.
ls_input_field_names-fieldname = 'BREL_KIND'.
INSERT ls_input_field_names INTO TABLE ls_input_field-field_names.
ls_input_field_names-fieldname = 'BREL_MODE'.
INSERT ls_input_field_names INTO TABLE ls_input_field-field_names.
ls_input_field_names-fieldname = 'RELATIONID'.
INSERT ls_input_field_names INTO TABLE ls_input_field-field_names.
ls_input_field_names-fieldname = 'RELATION_HANDLE'.
INSERT ls_input_field_names INTO TABLE ls_input_field-field_names.
ls_input_field-objectname = 'DOC_FLOW'.
ls_input_field-ref_guid = guid_a.
ls_input_field-ref_kind = 'A'.
INSERT ls_input_field INTO TABLE ct_input_fields.
* Update Document Flow *
CALL FUNCTION 'CRM_ORDER_MAINTAIN'
CHANGING
ct_input_fields = ct_input_fields
cv_log_handle = log_handle
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.
DATA: it_saved_objects TYPE crmt_return_objects.
* Save Changes *
CALL FUNCTION 'CRM_ORDER_SAVE'
EXPORTING
it_objects_to_save = it_header_guid
IV_UPDATE_TASK_LOCAL = 'X'
IV_SAVE_FRAME_LOG = 'X'
IMPORTING
et_saved_objects = it_saved_objects.
IF sy-subrc <> 0.
MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO * WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4. ENDIF.
DATA: lt_return TYPE TABLE OF bapiret2,
ls_return LIKE LINE OF lt_return.
* Commit Changes *
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'
IMPORTING
return = ls_return.
WRITE: / ls_return-message.
* Read Error Messages *
IF NOT log_handle IS INITIAL.
DATA: is_msg_handle TYPE balmsghndl,
es_info TYPE crmt_msg_info,
es_msg TYPE bal_s_msg,
ev_ref_object TYPE crmt_ref_obj_text.
is_msg_handle-log_handle = log_handle.
CALL FUNCTION 'CRM_MESSAGES_GET_MSG_INFO'
EXPORTING
is_msg_handle = is_msg_handle
iv_get_caller_name = 'X'
IMPORTING
es_info = es_info
es_msg = es_msg
ev_ref_object = ev_ref_object.
ENDIF.
Just want to reformat code from Gregor Wolf. Credit goes to him (part 1)
REPORT z_gw_create_follow_up_order.
PARAMETERS:
lv_id_a TYPE crmt_object_id OBLIGATORY,
lv_id_b TYPE crmt_object_id OBLIGATORY.
DATA: guids TYPE crmt_object_guid_tab,
guid_a LIKE LINE OF guids, guid_b LIKE LINE OF guids.
* * Read GUID for Activity A *
CALL FUNCTION 'CRM_ORDERADM_H_GUID_GET_DB'
EXPORTING
iv_object_id = lv_id_a
IMPORTING
et_guid = guids.
READ TABLE guids INTO guid_a INDEX 1. REFRESH: guids.
* * Read GUID for Activity B *
CALL FUNCTION 'CRM_ORDERADM_H_GUID_GET_DB'
EXPORTING
iv_object_id = lv_id_b
IMPORTING
et_guid = guids.
READ TABLE guids INTO guid_b INDEX 1.
DATA: it_activity_h TYPE crmt_activity_h_wrkt,
ls_activity_h LIKE LINE OF it_activity_h,
it_requested_objects TYPE crmt_object_name_tab,
ls_requested_objects LIKE LINE OF it_requested_objects,
it_orderadm_h TYPE crmt_orderadm_h_wrkt,
ls_orderadm_h LIKE LINE OF it_orderadm_h,
it_doc_flow TYPE crmt_doc_flow_wrkt,
ls_doc_flow LIKE LINE OF it_doc_flow,
it_header_guid TYPE crmt_object_guid_tab, ls_header_guid LIKE LINE OF it_header_guid.
* Append GUID_A to Header GUID Table
APPEND guid_a TO it_header_guid.
* What should we read
ls_requested_objects = 'ACTIVITY_H'. APPEND ls_requested_objects TO it_requested_objects.
ls_requested_objects = 'DOC_FLOW'. APPEND ls_requested_objects TO it_requested_objects.
* * Read Activity A *
CALL FUNCTION 'CRM_ORDER_READ'
EXPORTING
it_header_guid = it_header_guid
it_requested_objects = it_requested_objects
IMPORTING
et_orderadm_h = it_orderadm_h
et_activity_h = it_activity_h
et_doc_flow = it_doc_flow.
DATA: it_activity_h_comt TYPE crmt_activity_h_comt,
ls_activity_h_comt LIKE LINE OF it_activity_h_comt,
ct_doc_flow TYPE crmt_doc_flow_comt,
ls_doc_flow_comt LIKE LINE OF ct_doc_flow,
ref_guid TYPE guid_16,
lt_doc_link TYPE crmt_doc_flow_extdt,
ls_doc_link LIKE LINE OF lt_doc_link,
ct_input_fields TYPE crmt_input_field_tab,
ls_input_field TYPE crmt_input_field,
ls_input_field_names TYPE crmt_input_field_names,
log_handle TYPE balloghndl.
LOOP AT it_activity_h INTO ls_activity_h.
MOVE-CORRESPONDING ls_activity_h TO ls_activity_h_comt.
APPEND ls_activity_h_comt TO it_activity_h_comt.
ENDLOOP.
* * Fill DOC_FLOW Structure *
ls_doc_link-objkey_a = guid_a. ls_doc_link-objtype_a = 'BUS2000126'.
ls_doc_link-objkey_b = guid_b. ls_doc_link-objtype_b = 'BUS2000126'.
ls_doc_link-vona_kind = 'A'. ls_doc_link-reltype = 'VONA'.
ls_doc_link-brel_kind = 'A'.
APPEND ls_doc_link TO lt_doc_link.
CLEAR: ls_doc_flow_comt. ls_doc_flow_comt-ref_guid = guid_a.
ls_doc_flow_comt-ref_kind = 'A'.
ls_doc_flow_comt-doc_link[] = lt_doc_link.
APPEND ls_doc_flow_comt TO ct_doc_flow.
* * Fill INPUT_FIELDS which indicate what Values where changed
* and had to be updated *
ls_input_field_names-fieldname = 'OBJKEY_A'. INSERT ls_input_field_names INTO TABLE ls_input_field-field_names.
ls_input_field_names-fieldname = 'OBJTYPE_A'. INSERT ls_input_field_names INTO TABLE ls_input_field-field_names.
ls_input_field_names-fieldname = 'OBJKEY_B'. INSERT ls_input_field_names INTO TABLE ls_input_field-field_names.
ls_input_field_names-fieldname = 'OBJTYPE_B'. INSERT ls_input_field_names INTO TABLE ls_input_field-field_names.
ls_input_field_names-fieldname = 'VONA_KIND'. INSERT ls_input_field_names INTO TABLE ls_input_field-field_names.
ls_input_field_names-fieldname = 'RELTYPE'. INSERT ls_input_field_names INTO TABLE ls_input_field-field_names.
ls_input_field_names-fieldname = 'BREL_KIND'. INSERT ls_input_field_names INTO TABLE ls_input_field-field_names.
ls_input_field_names-fieldname = 'BREL_MODE'. INSERT ls_input_field_names INTO TABLE ls_input_field-field_names.
ls_input_field_names-fieldname = 'RELATIONID'. INSERT ls_input_field_names INTO TABLE ls_input_field-field_names.
ls_input_field_names-fieldname = 'RELATION_HANDLE'. INSERT ls_input_field_names INTO TABLE ls_input_field-field_names.
ls_input_field-objectname = 'DOC_FLOW'. ls_input_field-ref_guid = guid_a. ls_input_field-ref_kind = 'A'.
INSERT ls_input_field INTO TABLE ct_input_fields.
* * Update Document Flow *
CALL FUNCTION 'CRM_ORDER_MAINTAIN'
CHANGING
ct_input_fields = ct_input_fields
cv_log_handle = log_handle
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 NE 0.
MESSAGE ID sy-msgid TYPE sy-msgty NUMBER sy-msgno WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
ENDIF.
Edited by: The Agus Santoso on Sep 26, 2011 7:26 AM
Part 2 :
DATA: it_saved_objects TYPE crmt_return_objects.
* * Save Changes *
CALL FUNCTION 'CRM_ORDER_SAVE'
EXPORTING
it_objects_to_save = it_header_guid
IV_UPDATE_TASK_LOCAL = 'X'
IV_SAVE_FRAME_LOG = 'X'
IMPORTING
et_saved_objects = it_saved_objects.
IF sy-subrc NE 0.
* MESSAGE ID SY-MSGID TYPE SY-MSGTY NUMBER SY-MSGNO
* WITH SY-MSGV1 SY-MSGV2 SY-MSGV3 SY-MSGV4.
ENDIF.
DATA: lt_return TYPE TABLE OF bapiret2,
ls_return LIKE LINE OF lt_return.
* * Commit Changes *
CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'
EXPORTING
wait = 'X'
IMPORTING
return = ls_return.
WRITE: / ls_return-message.
* * Read Error Messages *
IF NOT log_handle IS INITIAL.
DATA: is_msg_handle TYPE balmsghndl,
es_info TYPE crmt_msg_info,
es_msg TYPE bal_s_msg,
ev_ref_object TYPE crmt_ref_obj_text.
is_msg_handle-log_handle = log_handle.
CALL FUNCTION 'CRM_MESSAGES_GET_MSG_INFO'
EXPORTING
is_msg_handle = is_msg_handle
iv_get_caller_name = 'X'
IMPORTING
es_info = es_info
es_msg = es_msg
ev_ref_object = ev_ref_object.
ENDIF.
Edited by: The Agus Santoso on Sep 26, 2011 8:17 AM
Hi ASM,
Thanks for your reply. Unfortunately, i am still unable to create the document flow.
My scenario:
I created a proposal and contract beforehand. Now i need to create a document flow to link the contract to the proposal.
Below are my codes using the FM proposed by you, any idea what's wrong with it?:
*&---------------------------------------------------------------------*
*& FM CRMXIF_ORDER_SAVE
*&---------------------------------------------------------------------*
DATA: lt_data TYPE crmxif_bustrans_t,
lw_data LIKE LINE OF lt_data,
lw_doc_flow TYPE crmxif_doc_flow_xt,
lw_doc_flow_data TYPE crmxif_doc_flow,
lw_doc_flow_data_if TYPE crmxif_doc_flow_f,
lw_doc_flow_datax TYPE crmxif_bt_update,
lt_ret TYPE bapiretm,
lw_ret LIKE LINE OF lt_ret,
lt_obj_msg TYPE bapiretct,
lw_obj_msg LIKE LINE OF lt_obj_msg.
lw_doc_flow_data-relation_type = 'VONA'.
lw_doc_flow_data-relobj_roletype = 'VORGAENGER'.
lw_doc_flow_data-relobj_objkey = <Proposal GUID>.
lw_doc_flow_data-relobj_type = 'BUS2000114'.
lw_doc_flow_data-relobj_object_id = <Proposal ID>.
lw_doc_flow_data-relation_type_attr = 'A'.
lw_doc_flow_data-object_task = 'I'.
lw_doc_flow_data_if-relation_type = 'X'.
lw_doc_flow_data_if-relobj_roletype = 'X'.
lw_doc_flow_data_if-relobj_objkey = 'X'.
lw_doc_flow_data_if-relobj_type = 'X'.
lw_doc_flow_data_if-relobj_object_id = 'X'.
lw_doc_flow_data_if-relation_type_attr = 'X'.
lw_doc_flow_data-input_fields = lw_doc_flow_data_if.
lw_doc_flow_datax = 'X'.
APPEND lw_doc_flow_data TO lw_doc_flow-data.
lw_doc_flow-datax = lw_doc_flow_datax.
lw_data-doc_flow = lw_doc_flow.
lw_data-object_guid = <Contract GUID>.
lw_data-object_id = <Contract ID>.
APPEND lw_data TO lt_data.
CALL FUNCTION 'CRMXIF_ORDER_SAVE'
EXPORTING
data = lt_data
IMPORTING
return = lt_ret.
COMMIT WORK.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
I did this with de function module CRMXIF_ORDER_SAVE, you have to fill de structure doc_flow :
RELOBJ_OBJKEY = '<guid of the father>'.
RELATION_TYPE = 'VONA'.
RELOBJ_ROLETYPE = 'VORGAENGER'.
RELOBJ_TYPE = '<object_type of the father>'.
RELOBJ_OBJECT_ID = '<object_id of the father>'
RELATION_TYPE_ATTR = 'A'.
OBJECT_TASK = 'I'.
And the structure input_fields putting 'x' in the fields that you fill.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
User | Count |
---|---|
3 | |
1 | |
1 | |
1 | |
1 | |
1 | |
1 | |
1 | |
1 | |
1 |
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.