1.业务背景

事件通常挂载在节点中、主要起到节点业务生效的作用。(即事件会对应执行生效api接口或者云函数来达到业务生效)

按照事件执行的时间、可以划分事件的种类。

发起流程时,可以看到有保存,提交按钮。直接点保存时,会将表单内容保存,同时执行配置的保存(save)事件,同步数据至业务,这时流程是暂存状态,待发起

暂存状态流程直接点提交,此时会执行配置的提交事件(submit), 这时候流程审批状态,审批中

审批中流程点审批,会执行配置在节点的 校验、节点前、节点后 事件,同步数据&状态至业务,这时候流程状态,审批中

审批中流程点撤销,会执行撤销(cancel)事件,同步数据&状态至业务,这时候流程审批状态,撤销

审批中流程审批完成,会执行完成(finish)事件,同步数据&状态至业务,这时候流程审批状态,审批成功

审批中流程审批拒绝,会执行拒绝(reject)事件,同步数据&状态至业务,这时候流程审批状态,审批不同意

2.配置方式

事件需要先在事件设置里进行添加、然后在节点设置中进行节点绑定

选中节点-选择事件/消息-按照业务对应设置事件-选择相应触发条件


一般我们常规配置条件是:

start开始节点                                           保存或者提交

end结束节点                                             通过或者不通过

cancel取消节点                                        取消

自定义节点                                                 配置提前的效验事件、节点的决策事件、节点后的通过或者不通过


这里特别备注下节点决策插件的含义:它指的是到达中间节点不效验,但是在这个节点提交时效验。

常见业务逻辑是:中间审批节点李四,要在表单里添加一些信息,然后填完之后走效验看填的信息是否合法,这时候需要把这个效验事件绑定在节点决策插件中。(而不是一进到这个节点就效验,这个叫节点前效验。是填完信息再效验。所以才叫节点决策)




3.二开绑定云函数处理

一般选中api:dynamic.script.for.common.api

统一将流程实例传到节点事件中:

{
"param": {
"wf_inst_id": "@api:inst.id@"
},
"plugin": "xxxx"
}

其中wf_inst_id参数 为当前流程实例id,根据他可以拿到单据所有信息,我们就能进行抽取来实现业务联动

plugin里面xxxx是云函数名字

配置好这些我们就将数据传到了云函数里面了

xxxx云函数中解析逻辑如下:可以拿到表单信息继续进行写二开逻辑、生效业务

class WorkflowEvent(object):
    def execute(self, param):
        wf_inst_id = param['wf_inst_id']
        if wf_inst_id:
            all_data = CustomerUtil.call_open_api('workflow.get.wf.all.v3', {
                "inst_id": wf_inst_id
            })
            form_id = all_data['data']['form_data']['id']
            business_id = all_data['data']['wf']['business_id']

            # 获取表单数据                                                                        
            result = CustomerUtil.call_open_api("workflow.form.get", {
                "id": form_id,
                "business_id": business_id
            })
            if result and result['success']:
                data = result['data']['data']
                form_data = data['form']
                employee_id = form_data['employee_id']  

其中不符合条件信息可以用raise抛出

raise errors.DATA_NOT_FOUND.description('不符合走流程的异常提示语')










  • 无标签