跳转到内容
技术文章
作者资料照片Shy万博新体育手机客户端am Vasani

如何创建具有自动审批的灵活工作流,并将其与基于RAP的应用程序集成

简介

我们都知道世界在进化。SAP也是如此。

在SAP ECC时代,曾经有工作流构建器(事务代码- SWDD),它将所有工作流组件和审批周期与所有构建块紧密地联系在一起。

SAP HANA为通用审批机制提供了更好的解决方案设计,现在可以动态配置业务文档审批周期。

今天,大多数标准文档的批准机制都是建立在灵活工作流之上的。(例如,RFQ,供应商报价,采购合同,采购订单等。支持灵活工作流的文档| SAP帮助门户网站)

您可能还会遇到这样的需求:为特定于您的客户/组织流程的业务流程使用Flexible Workflow来构建审批机制。

作为这个博客系列的一部分,我将分享构建灵活工作流所需的开发方法。

审批机制的种类

基于业务文档审批周期中涉及的审批人,柔性工作流支持以下类型的审批周期(通过设计)-

  • 自动审批机制
    • 这是一个场景/活动,它负责在没有人工干预的情况下对业务文档进行批准/拒绝。
    • 例如,在一个组织中,我们可能在数量/数量/其他方面有一些预定义的阈值,以决定批准的需求。
    • 如果业务文档没有超过这些阈值,或者它不符合需要人工批准的标准,但是仍然需要一些基本的完整性检查,以便将文档视为合法的。
    • 在这种情况下,自动审批机制将出现。
      这将是当前博客的重点关注领域。
  • 基于代理的审批机制
    • 在这种场景/活动中,为了使业务文档达到最终批准状态/被视为合法文档,还需要进行一系列手动批准。

创建具有自动审批周期的灵活工作流的步骤

步骤1 -通过添加以下接口作为其成员创建一个全局类:BI_OBJECT & IF_WORKFLOW。(这个类将作为灵活工作流所需的主导对象类型)

类% 20 % 20工作流% 20相关% 20接口

使用工作流相关接口初始化

步骤2 -实现interface的所有方法(目前没有逻辑),并创建一个名为WORKITEM_EXECUTE没有参数和逻辑的公共实例方法。这将进一步服务于实际工作项执行期间虚拟执行方法的目的)。

假% 20方法% 20 % 20自动% 20 workitem % 20的执行

自动工作项执行的虚拟方法

步骤3 -另外,在课堂上添加以下3个事件以及参数-

事件% 20 submitted_for_approval

事件SUBMITTED_FOR_APPROVAL

事件发布的% 20

事件发布

事件% 20拒绝

事件被拒绝

步骤4 -转到事务代码SWDD_SCENARIO并创建新的灵活工作流。

创建% 20灵活% 20工作流

创建灵活的工作流

步骤5 -在场景上下文中创建Container Element,引用前面创建的类,它将作为灵活工作流中所需的Leading Object。创建% 20容器% 20的元素

创建容器元素

步骤6 -在第一个选项卡中输入流程数据,并用类事件SUBMITTED_FOR_APPROVAL映射Workflow Start事件。

处理% 20的数据

处理数据

步骤7 -创建2个全局类(从适当的超类如下截图所示),这将作为工作流的回调类。(定义数据类&运行时数据类)

回调% 20类% 20 - % 20 % 20的数据定义

回调类-定义数据

回调% 20类% 20 - % 20运行时% 20数据

回调类-运行时数据

控制% 20数据

控制数据

步骤8 -创建一个Activity并为它提供一些有意义的名称。(保持Task ID为空,系统将生成标准Task ID,我们可以复制它来创建我们自己的自定义任务)创建% 20一个% 20的活动

创建一个活动

活动列表应该开始看起来像以下创建-

活动% 20列表

活动列表

步骤9 -上面在任务级别创建的映射对象方法。

任务% 20的设置

任务设置

步骤10 -在“结果”选项卡中设置“结果”及其性质“积极/消极”。

活动% 20的结果

活动的结果

步骤11 -“任务级别绑定”参数配置如下-

活动% 20绑定

活动绑定

步骤12 -在“工作流启动事件级别”中按如下方式设置事件绑定并激活事件链接。(在制数据页签)

设置% 20 eventlinkage % 20和% 20参数

设置EventLinkage和参数

步骤13 -在工作流控制选项卡中上传预先交付的内容,以便激活自动审批(默认情况下-在相关工作流模板应用程序配置工作流步骤之前)。

上传% 20 pre-delivered % 20的内容

此预交付内容的XML格式将如下-

<?xml version="1.0" encoding="UTF-8"?>      

上传预下发内容

一旦完成,请激活工作流。它应该生成工作流执行所需的运行时组件。

工作项执行时系统批准/拒绝的逻辑实现

一旦上述工作流通过相关业务文档创建/更改活动提交/触发,工作项将作为正常的工作流批准流程创建。

此工作项将自动执行,因为不涉及人工干预。

它在内部触发对前面创建和分配的回调类的调用。

为了执行任何系统决策-批准/拒绝和更新相关的业务文档,需要重新定义以下类Runtime Data的方法-if_swf_flex_ifs_run_appl ~ result_callback。

通过参考以下示例实现实现所需的逻辑,您可以实现所需的业务逻辑来基于所涉及的标准批准/拒绝业务文档

类zcl_blg_insp_wfl_run_appl_base定义PUBLIC继承自cl_swf_flex_ifs_run_appl_base FINAL创建PUBLIC。公共部分。方法if_swf_flex_ifs_run_app ~result_callback重定义。受保护的部分。私人部分。ENDCLASS。类zcl_blg_insp_wfl_run_appl_base实现。if_swf_flex_ifs_run_appl ~ result_callback方法。数据:lv_object_reference TYPE sibflpor, lv_inspplanuuid TYPE sysuuid_x16。lv_object_reference =对应#(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.

实例实现与基于RAP的应用程序集成

我已经创建了上述工作流的示例实现,一旦创建了检查计划,RAP应用程序将触发工作流审批。

以下是此实现所需的构建块-

步骤1 -定义一个确定,它将在创建操作期间在保存时触发。

确定startWorkflow在保存{创建;}

步骤2 -在确定执行时调用工作流触发器,并将原始对象状态设置为等待批准。

类lhc_inspectionplan DEFINITION继承自cl_abap_behavior_handler。私人部分。方法:startworkflow FOR DETERMINE ON SAVE import key FOR inspectionplan~ENDCLASS。CLASS lhc_inspectionplan执行startworkflow方法。READ ENTITIES OF zi_blg_inspectionplantp IN LOCAL MODE ENTITY inspectionplan ALL FIELDS WITH相应的#(keys) RESULT DATA(lt_inspplans) FAILED DATA(lt_failed)。循环在lt_inspplans分配FIELD-SYMBOL()。IF NEW lu_zi_blg_inspectionplantp()->start_workflow(iv_inspplanuuid = -inspectionplanuuid) = abap_false。MODIFY ENTITIES OF zi_blg_inspectionplantp IN LOCAL MODE ENTITY inspectionplan UPDATE FIELDS (approvalstatus) WITH VALUE #((%tky = -%tky approvalstatus = 'W') REPORTED DATA(lt_update_reported) FAILED DATA(lt_modifyfailed)。 ENDIF. ENDLOOP. ENDMETHOD. ENDCLASS.

步骤3 -创建一个本地类和一个实用工具方法,以便在从上述确定实现请求时调用工作流

类lu_zi_blg_inspectionplantp定义。公共部分。iv_inspplanuuid TYPE sysuuid_x16返回值(rv_failed) TYPE abap_bool . .ENDCLASS。CLASS lu_zi_blg_inspectionplantp实现。start_workflow方法。常量:lc_objecttype TYPE sibftypeid值'ZBLG_INSP_WORKFLOW', lc_event TYPE sibftypeid值'SUBMITTED_FOR_APPROVAL'。数据:lv_objectkey TYPE sibfinstid。IF iv_inspplanuuid是初始值。回报。 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.

输出

步骤1 -在创建检查计划时,状态已设置为等待批准。

送% 20 % 20自动% 20的批准

自动审批

步骤2 -您可以检查工作流日志(事务代码- SWI1)以确保工作流执行完成。

工作流% 20日志

工作流日志

步骤3 -成功执行后,状态将更改为已批准。

% 20 workitem % 20后执行

工作项执行之后

总结

在当前的博客文章中,我们已经学习了灵活工作流的基础知识,如何实现自动审批场景,以及如何通过基于RAP的应用程序集成/调用它。

为了更好地理解,请使用以下参考资料,它们帮助我获得了关于这个特性的知识,并激发了我写这篇博文的动力:

我将很快就以下主题写博客。请继续关注。- - - - - -

  • 如何在灵活工作流中实现基于Agent的审批
  • 如何生成和配置Fiori应用程序所需的灵活的工作流配置

请在评论区提供您的反馈并提出问题。

问候,

Shyam Vasani

指定的标签

      第一个留下评论
      你一定是登录评论:评论或回复一篇文章