作者:Eddy  历史版本:1  最后编辑:龚清  更新时间:2024-05-28 11:18

编写版本:v3.5.3
适用版本:所有版本

流程设置-基础事件脚本

什么是基础事件脚本

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

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

  3. 结束事件脚本,即在流程正常结束后执行,代码切入点com.lc.ibps.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);

基础事件脚本如何使用

  1. 在流程设置结束事件脚本中填写脚本内容即可,如:
    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,它可以理解为java的一个动态方法,我们只需要编写方法体内容即可
它可以调用到任何注入到spring容器中的bean,写对beanId就可以
语法就是java语法,我们在一个java方法内怎么写代码这里就这么写
里面内置的可用对象:

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

常用Bean列表

BeanID Bean说明 使用文档
cmd IBPS流程执行对象(任务、实例) 在这里http://doc.bpmhome.cn/docs/ibps_v3_develop/ActionCmd
execution Activiti任务执行对象 在这里http://doc.bpmhome.cn/docs/ibps_v3_develop/BpmDelegateTask
mybatisTemplateProvider SQL执行对象(基于Mybatis,事务一致) 在这里http://doc.bpmhome.cn/docs/ibps_v3_develop/MybatisTemplateProvider
jdbcScript SQL脚本对象(基于JdbcTemplate,事务不一致) 在这里http://doc.bpmhome.cn/docs/ibps_v3_develop/JdbcScript
bpmnScript 流程脚本对象 在这里http://doc.bpmhome.cn/docs/ibps_v3_develop/BpmnScript
businessScript 业务脚本对象 在这里http://doc.bpmhome.cn/docs/ibps_v3_develop/BusinessScript
cscript 通用脚本对象 在这里http://doc.bpmhome.cn/docs/ibps_v3_develop/CommonScript
thridServiceScript 第三方服务脚本对象 在这里http://doc.bpmhome.cn/docs/ibps_v3_develop/ThridServiceScript
validationScript 校验脚本对象 在这里http://doc.bpmhome.cn/docs/ibps_v3_develop/ValidationScript

如何获取业务数据

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

如何获取动作类型

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

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