开始和结束事件脚本

概况

  1. 开始和结束事件脚本是针对流程创建或结束的处理逻辑进行增强;

  2. 开始事件脚本,即在实力创建后执行,代码切入点com.ak.iform.bpmn.activiti.ext.listener.execution.AbstractExecutionListener.exeEventScript(BpmDelegateExecution)

  3. 结束事件脚本,即在流程正常结束后执行,代码切入点com.ak.iform.bpmn.activiti.ext.listener.execution.AbstractExecutionListener.exeEventScript(BpmDelegateExecution)

  4. 脚本内容是groovy脚本,如:

     import java.util.HashMap;
     import java.util.Map;
    
     Map<String, String> params = new HashMap<>();
     params.put("ming_cheng_", "id_");
     params.put("shu_liang_", "ku_cun_");
     businessScript.syncNumberDataBySql(businessKey_, "t_enterdetail", "parent_id_", "ming_cheng_", "t_consumablesbasic", "id_", params, true);

操作说明

在【工作流程】-【流程定义管理】选择某条数据,点击“设置”按钮,进入流程设置页面,然后在左边选中“结束”图标的节点,然后在右边出现的“结束事件”编写以下代码范例,如:

    import java.util.HashMap;
    import java.util.Map;

    Map<String, String> params = new HashMap<>();
    params.put("ming_cheng_", "id_");
    params.put("shu_liang_", "ku_cun_");
    businessScript.syncNumberDataBySql(businessKey_, "t_enterdetail", "parent_id_", "ming_cheng_", "t_consumablesbasic", "id_", params, true);

其他说明:开始事件与结束事件,遵守一样的Groovy语法代码即可。

脚本常用逻辑示例

脚本语言是Groovy,它可以理解为java的一个动态方法,我们只需要编写方法体内容即可
它可以调用到任何注入到spring容器中的bean,写对beanId就可以
语法就是java语法,我们在一个java方法内怎么写代码这里就这么写
里面内置的可用对象:

  1. cmd,流程命令对象,可以获取业务数据、跳转节点
  2. [业务对象编码],业务对象实体,可以获取或修改业务字段值
  3. 其他注入到Spring容器的Bean,如:cscript,通用脚本、bpmnScript,流程相关脚本、businessScript,业务相关脚本、jdbcScript,数据库操作相关脚本等

常用Bean列表

BeanID Bean说明 使用文档
cmd IFORM流程执行对象(任务、实例) 在这里
execution Activiti任务执行对象 在这里
mybatisTemplateProvider SQL执行对象(基于Mybatis,事务一致) 在这里
jdbcScript SQL脚本对象(基于JdbcTemplate,事务不一致) 在这里
bpmnScript 流程脚本对象 在这里
businessScript 业务脚本对象 在这里
cscript 通用脚本对象 在这里
thridServiceScript 第三方服务脚本对象 在这里
validationScript 校验脚本对象 在这里

如何获取业务数据

  1. 如何获取业务数据
    String busData = cmd.getBusData();
    //或者直接使用业务对象编码调用getData()方法获取
    // [业务对象编码].get("字段名")
  2. 业务数据需要调用时设置到请求参数中,如果是外部url表单方式需要按照前端编写getFormData方法给接口返回表单数据;

如何获取动作类型

  1. 获取方式
     // 枚举详见com.ak.iform.bpmn.api.constant.NodeStatus
     String actionName = cmd.getActionName();
  2. 使用示例,根据动作类型确定如何修改业务数据
     import com.ak.iform.bpmn.api.constant.NodeStatus;
     String actionName = cmd.getActionName();
     if(NodeStatus.AGREE.getKey().equals(actionName)) {
         // 执行同意动作该执行什么逻辑
         // 如:将业务数据中的状态改为“审批中”
     }
     else if(NodeStatus.OPPOSE.getKey().equals(actionName)) {
         // 执行反对动作该执行什么逻辑
         // 如:将业务数据中的状态改为“审批不通过”
     }

注:
如果在脚本里面使用jdbcScript修改了数据需要手动调用缓存清除方法清除缓存com.ak.iform.base.framework.utils.J2CacheUtil.flushAll()
如果当前节点执行后会跳过下一个节点需要同步修改线程上下文中的数据对象数据[业务对象编码].set("字段名",值)

作者:黄春艳  创建时间:2024-12-11 11:41
最后编辑:黄春艳  更新时间:2025-02-14 10:41