前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >activiti 自定义任务事件扩展

activiti 自定义任务事件扩展

作者头像
星痕
发布2018-09-12 11:55:22
1.8K0
发布2018-09-12 11:55:22
举报
文章被收录于专栏:JAVA后端开发

最近工作上一直在用activiti作工作流,发现工作流程使用起来真的挺费劲的! 这不,业务需求有来有,用户希望在回复沟通时,能触发回复沟通事件,而用户通过该事件触发他的业务事件。 回复沟通是这边流程的自定义的操作, activti没这种操作,怎么办?看来只能动手自己扩展了 1.Web端 要扩展,首先要在页面上要有地方配置,因为这个跟任务绑定在一起的,放在任务监听器中 找到页面task-listeners-popup.html(这边用的是activiti-explorer),发现很简单,只需要在下拉里加入配置即可

代码语言:javascript
复制
<div class="form-group">
<label for="eventField">{{'PROPERTY.TASKLISTENERS.EVENT' | translate}}</label>
<select id="eventField" class="form-control" ng-model="selectedListeners[0].event">
<option>create</option>
<option>assignment</option>
<option>complete</option>
<option>delete</option>
<option>specCode</option>
</select>
</div>

如上表格所示,在select中扩展了自己的操作 显示结果如下

clipboard.png

OK,前端改造完成,用户可以选择了.

2.后端代码 跟一下代码,发现对象TaskEntity有发布事件的方法fireEvent,那急急的加入以下代码

代码语言:javascript
复制
TaskEntity task = (TaskEntity) taskService.createTaskQuery().taskId(taskId).singleResult(); 
  //发布操作事件
   task.fireEvent("drafter_submit");

成功了吗?测试一下,Oh,Shit,报错了!

代码语言:javascript
复制
java.lang.NullPointerException: null

 at org.activiti.engine.impl.persistence.entity.TaskEntity.getTaskDefinition(TaskEntity.java:797)

 at org.activiti.engine.impl.persistence.entity.TaskEntity.fireEvent(TaskEntity.java:728)

经分析,是里面的Context没有,怎么办呢??考虑了一下,命令模式有这个东东呀,那我直接用命令模式来实现试试.

代码语言:javascript
复制
import java.util.Map;
import org.activiti.engine.impl.cmd.NeedsActiveTaskCmd;
import org.activiti.engine.impl.context.Context;
import org.activiti.engine.impl.interceptor.CommandContext;
import org.activiti.engine.impl.persistence.entity.TaskEntity;
 
public class OperationCommand extends NeedsActiveTaskCmd<Boolean> {

 public OperationCommand(String taskId) {
  super(taskId);
  // TODO Auto-generated constructor stub
 }
 private Map<String, Object> formData;
 private String operationCode;

 @Override
 protected Boolean execute(CommandContext commandContext, TaskEntity task) {
  // TODO Auto-generated method stub
  Context.getCommandContext().getProcessEngineConfiguration().getTaskService().complete(task.getId(), formData);
  // 发布操作事件
  task.fireEvent(operationCode);
  return true;
 }

 public OperationCommand(String taskId, Map<String, Object> formData, String operationCode) {
  super(taskId);
  this.formData = formData;
  this.operationCode = operationCode;
 }
}

原来的执行的代码改为

代码语言:javascript
复制
((RuntimeServiceImpl)runtimeService).getCommandExecutor().execute(new OperationCommand(taskId,formData,“specCode”));

经测试,意外惊喜,成功了!

至此,流程任务自定义事件扩展成功!

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2018.05.14 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档