
Class with workflow relevant interfaces
Dummy method for Automatic Workitem execution
Event SUBMITTED_FOR_APPROVAL
Event RELEASED
Event REJECTED
Create Flexible Workflow
Step 5-Create a Container Element in the scenario context referring class created earlier, which will serve as the required Leading Object in the flexible workflow.
Create Container Element
Process Data
Callback Class - Definition Data
Callback Class - Runtime Data
Control Data
Step 8-Create an Activity and provide it some meaningful name. (Keep the Task ID as blank, system will generate standard Task ID which we can copy to create our own custom task)
Create an Activity
Activity List
Task Setup
Activity Outcome
Activity Binding
Setting EventLinkage and Parameters
<?xml version="1.0" encoding="UTF-8"?>
<workflow formatVersion="3.0" id="">
<scenario>Scenario ID e.g., WSXXXXXXXX</scenario>
<scenarioVersion/>
<subject>Title</subject>
<validFrom/>
<validTo/>
<processFlow artifactId="">
<activity artifactId="">
<step id="$ScenarioVersion$ActivityId" e.g., "$0000$InspAutoapproval"/>
</activity>
</processFlow>
</workflow>
Upload Pre-delivered Content
CLASS zcl_blg_insp_wfl_run_appl_base DEFINITION
PUBLIC
INHERITING FROM cl_swf_flex_ifs_run_appl_base
FINAL
CREATE PUBLIC .
PUBLIC SECTION.
METHODS if_swf_flex_ifs_run_appl~result_callback
REDEFINITION .
PROTECTED SECTION.
PRIVATE SECTION.
ENDCLASS.
CLASS ZCL_BLG_INSP_WFL_RUN_APPL_BASE IMPLEMENTATION.
METHOD if_swf_flex_ifs_run_appl~result_callback.
DATA: lv_object_reference TYPE sibflpor,
lv_inspplanuuid TYPE sysuuid_x16.
lv_object_reference = CORRESPONDING #( io_context->get_leading_object_reference( ) ).
" get the Plan for the workflow call.
IF lv_object_reference IS NOT INITIAL.
lv_inspplanuuid = lv_object_reference.
"Read plan details based on UUID
SELECT SINGLE @abap_true
FROM zblg_t_insp_tsp
WHERE uuid = @lv_inspplanuuid
AND approvalstatus = 'W' "Waiting For approval
AND isdeleted = @abap_false
INTO @DATA(lv_exists).
" is the Plan is in awaiting approval status, and exist, we will process it.
IF sy-subrc EQ 0 AND lv_exists = abap_true.
DATA lv_decision TYPE swc_elem.
lv_decision = io_result->get_result( )-result.
"set status to approved if the decision indicated to do so
IF lv_decision = 'APPROVED'.
DATA(lv_status) = 'A'.
"set status to rejection - upon rejection
ELSEIF lv_decision = 'REJECTED'.
lv_status = 'R'.
ENDIF.
" Take relevant action - upon Approval/Rejection
UPDATE zblg_t_insp_tsp SET approvalstatus = lv_status
WHERE uuid = lv_inspplanuuid.
" validate the plan could be updated.
IF sy-subrc <> 0.
RAISE EXCEPTION TYPE cx_swf_flex_ifs_run_exception
EXPORTING
textid = cx_swf_flex_callback_exception=>system_error
m_id = CONV string( io_result->get_result( )-wi_id ).
ENDIF.
ENDIF.
ENDIF.
ENDMETHOD.
ENDCLASS.
determination startWorkflow on save { create; }
CLASS lhc_inspectionplan DEFINITION INHERITING FROM cl_abap_behavior_handler.
PRIVATE SECTION.
METHODS startworkflow FOR DETERMINE ON SAVE
IMPORTING keys FOR inspectionplan~startworkflow.
ENDCLASS.
CLASS lhc_inspectionplan IMPLEMENTATION.
METHOD startworkflow.
READ ENTITIES OF zi_blg_inspectionplantp IN LOCAL MODE
ENTITY inspectionplan
ALL FIELDS WITH CORRESPONDING #( keys )
RESULT DATA(lt_inspplans)
FAILED DATA(lt_failed).
LOOP AT lt_inspplans ASSIGNING FIELD-SYMBOL(<fs_inspplan>).
IF NEW lu_zi_blg_inspectionplantp( )->start_workflow( iv_inspplanuuid = <fs_inspplan>-inspectionplanuuid ) = abap_false.
MODIFY ENTITIES OF zi_blg_inspectionplantp IN LOCAL MODE
ENTITY inspectionplan
UPDATE FIELDS ( approvalstatus )
WITH VALUE #( ( %tky = <fs_inspplan>-%tky
approvalstatus = 'W' ) )
REPORTED DATA(lt_update_reported)
FAILED DATA(lt_modifyfailed).
ENDIF.
ENDLOOP.
ENDMETHOD.
ENDCLASS.
CLASS lu_zi_blg_inspectionplantp DEFINITION.
PUBLIC SECTION.
METHODS start_workflow
IMPORTING
!iv_inspplanuuid TYPE sysuuid_x16
RETURNING
VALUE(rv_failed) TYPE abap_bool .
ENDCLASS.
CLASS lu_zi_blg_inspectionplantp IMPLEMENTATION.
METHOD start_workflow.
CONSTANTS: lc_objecttype TYPE sibftypeid VALUE 'ZBLG_INSP_WORKFLOW',
lc_event TYPE sibfevent VALUE 'SUBMITTED_FOR_APPROVAL'.
DATA: lv_objectkey TYPE sibfinstid.
IF iv_inspplanuuid IS INITIAL.
RETURN.
ENDIF.
" Get a container for the submitted function
DATA(lo_event_container) = cl_swf_evt_event=>get_event_container( im_objcateg = cl_swf_evt_event=>mc_objcateg_cl
im_objtype = lc_objecttype
im_event = lc_event ).
TRY.
lo_event_container->set( name = 'IV_OBJECT_ID' value = iv_inspplanuuid ).
lv_objectkey = iv_inspplanuuid.
" Raise workflow event
cl_swf_evt_event=>raise( im_objcateg = cl_swf_evt_event=>mc_objcateg_cl
im_objtype = lc_objecttype
im_event = lc_event
im_objkey = lv_objectkey
im_event_container = lo_event_container ).
CATCH cx_swf_evt_invalid_objtype
cx_swf_evt_invalid_event
cx_swf_cnt_container.
rv_failed = abap_true.
ENDTRY.
ENDMETHOD.
ENDCLASS.
Sent for Automatic Approval
Workflow Log
After Workitem execution
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
User | Count |
---|---|
16 | |
12 | |
12 | |
10 | |
8 | |
8 | |
8 | |
8 | |
7 | |
6 |