父类
CL_SWF_FLEX_IFS_DEF_APPL_BASE Flex Workflow Definition Class
CL_SWF_FLEX_IFS_RUN_APPL_BASE Application Integration Runtime Base Class
实施时创建子类使用,方便增加客制化逻辑
示例:
重写方法IF_SWF_FLEX_IFS_RUN_APPL~RESULT_CALLBACK
该方法在流程完成后调用,用来处理流程结束后的逻辑可以获取工作流容器对象使用
METHOD IF_SWF_FLEX_IFS_RUN_APPL~RESULT_CALLBACK.
DATA:lv_retcode TYPE sy-subrc,
lt_container TYPE TABLE OF swr_cont,
ls_contianer TYPE swr_cont,
lv_decision TYPE swc_elem,
ls_por TYPE sibflpor,
lv_flow_workitem_id TYPE sww_wiid.
DATA: lo_wf_object TYPE REF TO YCL_TEST_WF_OBJECT.
" 父类调用
TRY.
CALL METHOD super->if_swf_flex_ifs_run_appl~result_callback
EXPORTING
io_context = io_context
io_result = io_result
IMPORTING
ev_outcome = ev_outcome.
CATCH cx_swf_flex_ifs_run_exception.
ENDTRY.
" POR属性
MOVE-CORRESPONDING io_context->get_leading_object_reference( ) TO ls_por.
" 容器对象
DATA(lo_cont) = io_context->get_workflow_container( ).
" 工作流结果
DATA(ls_result) = io_result->get_result( ).
lv_flow_workitem_id = ls_result-wi_id.
" 获取工作流容器值
TRY .
lo_cont->get( EXPORTING name = 'WFObject' ##no_text
IMPORTING value = lo_wf_object ). " user with US prefi
CATCH cx_swf_cnt_elem_not_found.
CATCH cx_swf_cnt_container.
ENDTRY.
" 结果判断
CASE ls_result-result.
WHEN 'APPROVED'.
WHEN 'REJECTED'.
WHEN OTHERS.
ENDCASE.
ENDMETHOD.
其它方法根据业务场景决定是否重写,每个方法的重写都可视为对流程逻辑的增强处理,比如方法IF_SWF_FLEX_IFS_RUN_APPL_STEP~AFTER_COMPLETION_CALLBACK在节点创建完成后调用,可以填充邮件通知逻辑等。