cancel
Showing results for 
Search instead for 
Did you mean: 

[CRM-ODI] Add Fulfillment Message to a Distribution Type in SAP CRM Asynchronously

Former Member
0 Kudos

Hi expert,

My objective and problem:

  1. When I create provider order, I want to send related data to external system for provisioning via web service in ODI (Order Distribution Intrastructure). -> Done
  2. Response from external system is asynchronous -> Done by set the Distribution Type State =  E (Waiting)
  3. Fullfillment messages in SAP CRM updated by external system one by one -> Problem
  4. Set Final Distribution Type State by external system -> Done with below code
    
    

    TRY.
           cl_crm_isx_order_msg_dist_srv=>get_instance( )->get_update_service(
             iv_trx_handling = abap_true )->update_msg_state_by_step_guid(
               iv_step_guid = i_record_guid "needs TO be passed
               iv_msg_state = i_msg_state "new STATE
               iv_log_data = t_message "optional
               iv_log_data_type = 'BAPIRETTAB' ). "optional
         CATCH cx_crm_isx_order_msg_dist INTO lx_exc.
           CASE lx_exc->textid.
             WHEN cx_crm_isx_order_msg_dist=>lock_error.
    * document was locked -> processing not possible
             WHEN cx_crm_isx_order_msg_dist=>save_error.
    * document not saved
             WHEN OTHERS.
           ENDCASE.
       ENDTRY.

The problem is at point 3.

Example: in step provisioning, there are 3 sub step, let say substep 1, substep 2, and substep 3. Each substep will be updated by external system to SAP CRM via web service.

How to update fulfillment messages without update the distribution type state? What method/FM that I need?

Please advice.

Thank you

Accepted Solutions (1)

Accepted Solutions (1)

stefan_kiene
Advisor
Advisor
0 Kudos

Hi Agus,

did you try to keep the iv_msg_state as E (=waiting) during sending the response messages for substep 1 and substep 2 while only updating some log infomration within the ODI step?

I didn't check this on my own but I think it worth trying.


Best regards

Stefan

Former Member
0 Kudos

Dear Stefan, thank you for your idea.

By standard, there are restriction of lv_msg_state in class CL_CRM_ISX_ORDER_MSG_DIST_MGR method PROCESS_RESPONSE:

So, based on your idea, I put enhancement in the beginning of the method. I copy all the original code and paste it in my enhancement, I did some modification to data declaration because a data should be declared before it used and just once. And in the end of my enhancement, I put CHECK 1 = 2 to avoid the original code executed in runtime.

I try it and its work. So far my problem solved, but please advice me if there is another better solution.

Regards

stefan_kiene
Advisor
Advisor
0 Kudos

Hi Agus,

you are correct - this is not the desired behavior.

Luckily there is already a fix for it.

     Note 2026975 - ODI: Status of asynchronous response

Best regards

Stefan

Answers (3)

Answers (3)

Former Member
0 Kudos

Please advice me

Former Member
0 Kudos

Any advice?

Former Member
0 Kudos

Anyone can help me?