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('不符合走流程的异常提示语')