This is Part 2 of the below series of blogs:

There are many ways to approach the broadcasting of the message. You could either do this via user-exits, BADI’s, implicit enhancement points, using Event Type Linkages such as in transaction SWETYPV as used by SAP Business workflow and using a Receiver Function Module instead of a workflow or any other way you can think of.

However, in my case, as I want to notify a user when a work item has been created, it seemed appropriate to use a work item Program Exit class handler. Each use case should be assessed on a case by case basis and use the appropriate method. You may choose to do it differently if you find a more efficient way of doing it.

So in my example, I’m going to use a Parked Journal Approval workflow and in the dialog activity step I’m going to go to the Program Exits tab. There you will see you can enter any number of classes to be used as Program exits. If you go to the F1 help of the class field, it shows that the class must implement the IF_SWF_IFS_WORKITEM_EXIT interface and the code executed must be in the method EVENT_RAISED.

011.PNG

We now need to create an Exit handler class which implements this interface.

012.PNG

013.PNG

And implement the following code in the IF_SWF_IFS_WORKITEM_EXIT~EVENT_RAISED method.



METHOD if_swf_ifs_workitem_exit~event_raised.


     DATA: lo_producer_text TYPE REF TO if_amc_message_producer_text.
     DATA: lx_amc_error     TYPE REF TO cx_amc_error.


     DATA: lv_channel_ext TYPE amc_channel_extension_id.


* Check the work item event, it could be any of the following:

* BEF_CREAT  before creation

* CREATED    after creation

* BEF_EXEC   before execution

* AFT_EXEC   after execution

* AFT_ASYINV  after async invoke

* BEF_REMOVE before remove

* STATE_CHG  state changed

* AFT_REXEC  after rule exec

* BEF_ACTION before action

* AFT_ACTION after_action

* BEF_DECI   before decision

*

* In our case we are going to broadcast a message for CREATED event


    CASE im_event_name.

      WHEN if_swf_ifs_workitem_exit=>c_evttyp_after_create.


         DATA(ls_header) = im_workitem_context->get_header( ).


         DATA(lo_wi) = cl_swf_run_wim_factory=>find_by_wiid( im_wiid = ls_headerwi_id ).


* Get the workitem agents to broadcast the message to

         DATA(lt_agents) = lo_wi->get_agents( ).


* Create the notification message, which will just be ‘You have a new work item:’ + work item text

         DATA(lv_message) = ‘You have a new work item: && cl_abap_char_utilities=>horizontal_tab && ls_headerwi_text.


         LOOP lt_agents AT ASSIGNING FIELDSYMBOL(<ls_agent>) WHERE otype = ‘US.

              lv_channel_ext = symandt && <ls_agent>objid.

             
              TRY.

                    lo_producer_text ?= cl_amc_channel_manager=>create_message_producer( i_application_id = ZAMC_WF_NOTIFY

                                             i_channel_id      = ‘/workflow_notify’

                                             i_channel_extension_id = lv_channel_ext ).


* Send message to the AMC channel

                    lo_producer_text->send( i_message = lv_message ).


              CATCH cx_amc_error INTO lx_amc_error.

                    MESSAGE lx_amc_error->get_text( ) TYPE ‘E’.
              ENDT
RY.

         ENDLOOP.

     ENDCASE.
ENDMETHOD.

After saving and activating this class, add it as a Program Exit in the Workitem Activity step and reactivate the Workflow template.

014.PNG

Lastly, we want to add this Program exit class to our AMC (ABAP Messaging Channel) under the list of Authorised Programs. Do this by going back to the AMC in transaction SAMC. Entering the following:

Authorised Program: ZCL_WORKITEM_EXIT_WF_NOTIFY
Prog. Type: CLASS
Activity: Send

015.PNG

Next we need to create a client which will connect to the APC(websocket) and listen for messages that are broadcast from the workitem exit.

If you are interested in doing this via a UI5 application see: Real-time notifications and workflow using ABAP Push Channels (websockets)  Part 3: Creating a UI5 Application for receiving notifications

Or if you are more interested in doing this in Web Dynpro ABAP you can go straight to: Real-time notifications and workflow using ABAP Push Channels (websockets)  Part 4: Creating a Web Dynpro ABAP Application for receiving notifications

To report this post you need to login first.

Be the first to leave a comment

You must be Logged on to comment or reply to a post.

Leave a Reply