/
Redefine method EXECUTE_ACTION

Redefine method EXECUTE_ACTION

This method is executed in the implementation class whenever an action is triggered by a decision task by the user in OneList.

The actions are configured in OneList and can be used to represent approval decisions made by the user for a specific task for example Approve, Reject, Return, etc. 

Method Parameters

Type

Name

Description

Type

Name

Description

Importing

ID_TASK_ID

OneList Task ID being actioned (SAP workflow work item ID)

Importing

ID_ACTION_BY

User Name that triggered the action

Importing

ID_ACTION_ID

OneList Action ID

Importing

ID_ACTION_COMMENT

Action comment entered by the user in OneList

Importing

ID_OBJECT_ID

The object ID of the workflow task (generally, the SAP document number being actioned)

Exception

FAILED_TO_ACTION

Raised exception when the action could not be executed

Method Implementation

Custom ABAP logic can be implemented using the import parameters sent by OneList to execute the desired action outcome in SAP. 

As an example, the Release and Reject actions for a Purchase Order approval can be implemented as follows:

METHOD execute_action. DATA: lo_api TYPE REF TO cl_gbapp_apv_po_api. DATA: lt_approval_decision TYPE gbappt_po_approval_decision, ls_approval_decision TYPE LINE OF gbappt_po_approval_decision, ls_parameter TYPE LINE OF /iwbep/t_mgw_name_value_pair, lt_parameter TYPE /iwbep/t_mgw_name_value_pair, ls_action_result TYPE gbapps_action_result. DATA: ld_po_number TYPE bapimmpara-po_number, ld_rel_code TYPE bapimmpara-po_rel_cod. ld_po_number = id_object_id. ld_rel_code = me->get_po_rel_code( id_po_number = ld_po_number ). lo_api = cl_gbapp_apv_po_api=>get_instance( ). CHECK ld_rel_code IS NOT INITIAL. CLEAR ls_approval_decision. CLEAR lt_approval_decision. ls_approval_decision-workitem_id = id_task_id. CASE id_action_id. WHEN 'RELEASE'. ls_approval_decision-decision = '0001'. ls_approval_decision-approval_text = id_action_comment. WHEN 'REJECT'. ls_approval_decision-decision = '0002'. ls_approval_decision-rejection_text = id_action_comment. ENDCASE. APPEND ls_approval_decision TO lt_approval_decision. TRY. lo_api->set_decision( EXPORTING it_approval_decision = lt_approval_decision IMPORTING es_action_result = ls_action_result ). CATCH /iwbep/cx_mgw_busi_exception . RAISE failed_to_action. ENDTRY. ENDMETHOD.

Below are other sample implementations that cater to various OneList decision workflows.

Standard Decision Task

METHOD execute_action. * Call default OneList action via Decision Task DATA: lv_wi_id TYPE swr_struct-workitemid, lv_new_wi_status TYPE sww_wistat, lv_return_code LIKE sy-subrc, lt_message_lines TYPE TABLE OF swr_messag, lt_message_struct TYPE TABLE OF swr_mstruc, ls_container_simple TYPE swr_cont, lt_container_simple TYPE swrtcont, lv_status TYPE tim_req_status, lv_decision_key TYPE swr_decikey, lv_decision_note TYPE swrsobjid, lv_rc TYPE sy-subrc, lv_comment_str TYPE string, lv_comnam TYPE text255 VALUE gc_comnam, lwa_return TYPE bapiret2, lv_newstat TYPE sww_wistat, lt_msglines TYPE STANDARD TABLE OF swr_messag, lt_msgstruct TYPE STANDARD TABLE OF swr_mstruc, lv_new_date_char(10), lv_new_date TYPE datum, lv_escalated TYPE flag, lv_must_be_after TYPE dats. FIELD-SYMBOLS: <lfs_msglines> TYPE swr_messag, <lfs_msgstruct> TYPE swr_mstruc. CLEAR: lv_new_date, lv_new_date_char. lv_wi_id = id_task_id. lv_decision_key = id_action_id. lv_decision_note = id_action_comment. CALL FUNCTION 'SAP_WAPI_DECISION_COMPLETE' EXPORTING workitem_id = lv_wi_id user = id_action_by decision_key = lv_decision_key decision_note = lv_decision_note IMPORTING return_code = lv_rc new_status = lv_newstat TABLES message_lines = lt_message_lines message_struct = lt_message_struct. IF lv_rc IS NOT INITIAL. READ TABLE lt_message_lines INDEX 1 ASSIGNING FIELD-SYMBOL(<message>). MESSAGE ID zcacl_ol_scenario_adpt=>gc_message_id_error TYPE <message>-msg_type NUMBER zcacl_ol_scenario_adpt=>gc_message_no_error WITH <message>-line RAISING failed_to_action. ENDIF. ENDMETHOD.

HCM Task

METHOD execute_action. DATA: lt_messages TYPE hrasr_return_tab, lt_attachments TYPE hrasr00attachment_tab, lt_form_field_values TYPE hrasr_special_param_tab, lt_input_help_values TYPE hrasr_special_param_tab, lt_field_ui_attributes TYPE hrasr_uiattribute_param_tab, lt_events TYPE hrasr00form_events_tab, lt_link_lists TYPE hrasr00link_tab, lt_history_details TYPE hrasr00step_attributes_ui_tab. DATA: lv_event TYPE syucomm, lv_ok TYPE abap_bool, lv_wi_id TYPE swr_struct-workitemid, lv_notes TYPE hrasr_s_special_param-fieldvalue. lv_wi_id = iv_task_id. lv_notes = iv_action_comment. lv_event = if_hrasr00_ui_constants=>c_event_initialize. " First, initialize CALL FUNCTION 'HRASR_PROCESS_EXECUTE' EXPORTING iv_wi_id = lv_wi_id iv_event = lv_event IMPORTING ev_is_ok = lv_ok et_messages = et_messages CHANGING ct_attachments = lt_attachments ct_form_field_values = lt_form_field_values ct_input_help_values = lt_input_help_values ct_field_ui_attributes = lt_field_ui_attributes ct_events = lt_events ct_link_lists = lt_link_lists ct_history_details = lt_history_details. IF lv_ok EQ abap_false. RAISE failed_to_action. ENDIF. * Prepare notes IF lv_notes IS NOT INITIAL. TRY. lt_form_field_values[ fieldname = gc_hrasr_current_note ]-fieldvalue = lv_notes. CATCH cx_sy_itab_line_not_found. INSERT VALUE #( fieldname = gc_hrasr_current_note fieldvalue = lv_notes ) INTO TABLE lt_form_field_values. ENDTRY. ENDIF. CLEAR lv_ok. CASE iv_action_id. WHEN gc_ol_action_id_approve. "APPROVE lv_event = if_hrasr00_fpm_constants=>c_event_approve. WHEN gc_ol_action_id_reject. "REJECT lv_event = if_hrasr00_fpm_constants=>c_event_reject. WHEN gc_ol_action_id_back. "BACK lv_event = if_hrasr00_fpm_constants=>c_event_backto. WHEN OTHERS. ENDCASE. CALL FUNCTION 'HRASR_PROCESS_EXECUTE' EXPORTING iv_wi_id = lv_wi_id iv_event = lv_event IMPORTING ev_is_ok = lv_ok et_messages = et_messages CHANGING ct_attachments = lt_attachments ct_form_field_values = lt_form_field_values ct_input_help_values = lt_input_help_values ct_field_ui_attributes = lt_field_ui_attributes ct_events = lt_events ct_link_lists = lt_link_lists ct_history_details = lt_history_details. IF lv_ok EQ abap_false. TRY. zhrcl_hrasr_ui5_connector=>wait_for_workitem_status( iv_wi_id = lv_wi_id iv_wi_stat = gc_wi_stat_completed ). "COMPLETED CATCH zcx_hrasr_ui5_exception. RAISE failed_to_action. ENDTRY. ENDIF. ENDMETHOD.

SRM Task

METHOD execute_action. CONSTANTS: lc_return_success TYPE bapi_mtype VALUE 'S', lc_return_error TYPE bapi_mtype VALUE 'E'. DATA: lv_wi_id TYPE swr_struct-workitemid, lv_decision TYPE bbp_following_action, lo_bbp_obj TYPE REF TO cl_bbp_smtp_inbound_offapp. DATA: lv_new_wi_status TYPE sww_wistat, lv_return_code LIKE sy-subrc, lt_message_lines TYPE TABLE OF swr_messag, lt_message_struct TYPE TABLE OF swr_mstruc, ls_container_simple TYPE swr_cont, lt_container_simple TYPE swrtcont, lv_new_date_char(10), lv_new_date TYPE datum, lv_escalated TYPE flag, lv_objid TYPE crmt_object_id_db, lv_objtype TYPE crmt_subobject_category_db, lv_objguid TYPE bbp_guid, lv_objguid2 TYPE bbp_guid_32, lv_action TYPE bbp_wfl_action, lv_objchanged TYPE xfeld, lv_must_be_after TYPE dats, lv_comment_str TYPE string, lv_comnam TYPE text255 VALUE 'Approver Comments', lwa_return TYPE bapiret2, lv_wfelem TYPE swc_elem, lv_sc_guid TYPE /sapsrm/wf_document_guid, lv_sc_wiid TYPE /sapsrm/wf_workitem_id, lv_sc_agent TYPE /sapsrm/wf_agent_id, lv_sc_decision TYPE /sapsrm/wf_decision, lv_return TYPE syst_subrc. DATA: lt_simpcont TYPE STANDARD TABLE OF swr_cont. FIELD-SYMBOLS: <lfs_objects> TYPE swr_object, <lfs_return> TYPE bapiret2, <lfs_simp_cont> TYPE swr_cont, <lfs_wf_cont> TYPE /IQX/OL_WF_CONTAINER_SINGLE_ST. WRITE: / 'id_task_id:', id_task_id. WRITE: / 'id_action_id:', id_action_id. lv_wi_id = id_task_id. lv_decision = id_action_id. * Add approver comments, if there's any IF id_action_comment IS NOT INITIAL. CLEAR: lwa_return. CALL METHOD zprcl_onelist_scart_adapter=>add_approval_notes EXPORTING im_wiid = lv_wi_id im_comment = lv_comment_str IMPORTING ex_return = lwa_return. IF lwa_return-type EQ lc_return_success. * Successfully added, do nothing. ENDIF. ENDIF. * Read details of WI * Get workflow container data CALL FUNCTION 'SAP_WAPI_READ_CONTAINER' EXPORTING workitem_id = lv_wi_id IMPORTING return_code = lv_return TABLES simple_container = lt_simpcont. lv_wfelem = 'BOID'. READ TABLE lt_simpcont ASSIGNING <lfs_simp_cont> WITH KEY element = lv_wfelem. IF sy-subrc EQ 0. lv_sc_guid = <lfs_simp_cont>-value. lv_sc_wiid = id_task_id. lv_sc_agent = id_action_by. lv_sc_decision = id_action_id. WRITE: / 'lv_sc_guid:', lv_sc_guid. WRITE: / 'lv_sc_wiid:', lv_sc_wiid. WRITE: / 'lv_sc_agent:', lv_sc_agent. WRITE: / 'lv_sc_decision:', lv_sc_decision. CALL METHOD /sapsrm/cl_wf_process_mgr_sbwf=>system_decision EXPORTING iv_document_guid = lv_sc_guid iv_workitem_id = lv_sc_wiid iv_agent_id = lv_sc_agent iv_decision = lv_sc_decision. IF sy-subrc EQ 0. WRITE: / 'system_decision successful.'. ENDIF. ELSE. MESSAGE ID '00' TYPE 'E' NUMBER 398 WITH 'Unable to find document.' RAISING failed_to_action. ENDIF. ENDMETHOD.

Related content