cancel
Showing results for 
Search instead for 
Did you mean: 

CRM: How to create document flow

sebastianlenz85
Explorer
0 Kudos

Hello together,

In the process framework I defined a new process which can be started from a sales qutotation. This process loads my own compentent where the user can upload technical objects (such as connection objects or points of delivery) and create a new object set (IsuOrderBasketSet) with the uploades technical objects.

The requirement is to link the quotation with the created object set and vice versa so that the user can see the object set in the quotations assignment block "transaction history" and the qoutation in the object sets assignment block "transaction history".

Does anybody know how I can meet this requirement?

Thanks in advance,

Sebastian

Accepted Solutions (0)

Answers (2)

Answers (2)

Former Member
0 Kudos

Hi,

I found a solution using the following Code. I have successfully created a document flow between two quotations:

    DATA guid_a TYPE crmt_object_guid.

    DATA guid_b TYPE crmt_object_guid.

    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.

  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.

  DATA: lt_return TYPE TABLE OF bapiret2,

        ls_return LIKE LINE OF lt_return.

  

   guid_a = '0026B98B6AD11ED2B9F49BA972EC069E'

  guid_b = '0026B98B6AD11ED2B9E27FFF042682F6'

  REFRESH 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.

  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  = 'BUS2000115'."BUS2000126'.

  ls_doc_link-objkey_b   = guid_b.

  ls_doc_link-objtype_b  = 'BUS2000115'.

  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.

* Commit Changes

  CALL FUNCTION 'BAPI_TRANSACTION_COMMIT'

    EXPORTING

      wait   = 'X'

    IMPORTING

      return = ls_return.

Regards,

Saravanan.C

sebastianlenz85
Explorer
0 Kudos

Hello,

I came a bit closer solving my problem.

In the event handler of my component that creates the pod set I call the method create_header_doc_flow of class cl_crm_isu_order_change.

call method cl_crm_isu_order_change=>create_header_doc_flow
  exporting
    x_header_guid_a = [GUID of the IsuOrderBasketSet]
    x_header_guid_b = [GUID of the sales quotation]
    x_reltype       = 'VONA'
  exeptions
    failed          = 1
    others          = 2.

After this I get the transaction context of the BTOrder object (parent parent of IsuOrderBasketSet object), save and commit it.

lr_tx = lr_btorder->get_transaction( ).
check lr_trx->check_save_needed( ) eq abap_true.
check lr_trx->check_save_possible( ) eq abap_true.
lr_tx->save( ).
lr_tx->commit( ).

As a result I can see the document flow in the pod set. It is also possible to navigate from pod set to the sales quotation and vice versa. But when I open other documents (e.g. a sales order) the document flow is missing in the sales quotation as well as in the pod set. Something is going wrong with saving. Any ideas?

Thank you in advance,

Sebastian

Edited by: Sebastian Lenz on Sep 7, 2011 11:25 AM

sebastianlenz85
Explorer
0 Kudos

Hi!

I've helped myself

I called the function 'CRM_ORDER_SAVE' after saving the IsuOrderBasketSet.

data:
    lt_objects_to_save type crmt_object_guid_tab,
    lt_saved_objects type crmt_return_objects,
    lt_objects_not_saved type crmt_object_guid_tab.

call function 'CRM_ORDER_SAVE'
  exporting
    it_objects_to_save   = lt_objects_to_save
  importing
    et_saved_objects     = lt_saved_objects
    et_objects_not_saved = lt_objects_not_saved.

The table lt_objects_to_save contains the sales quotation guid.

Regards,

Sebastian