activiti 中国式自由流任意节点的跳转

2022-11-11 15:58 81阅读 0赞

工作流目前只能支持按照预先设置好的线,判断线的预制条件才能按照模板进行跳转 。假设一个场景 a提交到 b b提交到c c提交到d d在一直提交下去。 但是退回如何控制呢。假如d-a一直退回。貌似要画很多的线进去,线上配置条件。这样流程才能运转下去。
在这里我们不想去画线,但是还期望流程能在制定的模板节点中运行。所以这个场景就是中国式流程。目前版本是5.14
1.实现的代码如如下:

  1. import java.util.Map;
  2. import org.activiti.engine.delegate.TaskListener;
  3. import org.activiti.engine.impl.context.Context;
  4. import org.activiti.engine.impl.interceptor.Command;
  5. import org.activiti.engine.impl.interceptor.CommandContext;
  6. import org.activiti.engine.impl.persistence.entity.ExecutionEntity;
  7. import org.activiti.engine.impl.persistence.entity.TaskEntity;
  8. import org.activiti.engine.impl.pvm.process.ActivityImpl;
  9. import org.activiti.engine.task.Comment;
  10. public class JumpTaskCmd implements Command<Comment> {
  11. //完成
  12. public static String EVENTNAME_COMPLETE="jump";
  13. //退回
  14. public static String EVENTNAME_TO_REVOKED="revoked";
  15. //撤销
  16. public static String EVENTNAME_TO_BE_RETURNED="returned";
  17. protected String executionId;
  18. protected ActivityImpl desActivity;
  19. protected Map<String,Object> paramvar;
  20. protected ActivityImpl currentActivity;
  21. protected String JumpTaskReason;
  22. public JumpTaskCmd(String executionId, ActivityImpl desActivity,Map<String,Object> paramvar,ActivityImpl currentActivity,String JumpTaskReason) {
  23. super();
  24. this.executionId = executionId;
  25. this.desActivity = desActivity;
  26. this.paramvar = paramvar;
  27. this.currentActivity = currentActivity;
  28. this.JumpTaskReason=JumpTaskReason;
  29. }
  30. @Override
  31. public Comment execute(CommandContext commandContext) {
  32. ExecutionEntity executionEntity = Context.getCommandContext()
  33. .getExecutionEntityManager().findExecutionById(executionId);
  34. executionEntity.setVariables(paramvar);
  35. executionEntity.setEventSource(currentActivity);
  36. executionEntity.setActivity(currentActivity);
  37. for (TaskEntity taskEntity : Context.getCommandContext()
  38. .getTaskEntityManager().findTasksByExecutionId(executionId)) {
  39. taskEntity.fireEvent(TaskListener.EVENTNAME_COMPLETE);
  40. Context.getCommandContext().getTaskEntityManager()
  41. .deleteTask(taskEntity, JumpTaskReason, false);
  42. }
  43. executionEntity.executeActivity(desActivity);
  44. return null;
  45. }
  46. }

2、程序控制

  1. TaskServiceImpl taskServiceImpl = (TaskServiceImpl) processEngine
  2. .getTaskService();
  3. CommandExecutor commandExecutor = taskServiceImpl
  4. .getCommandExecutor();
  5. commandExecutor.execute(new JumpTaskCmd(task.getExecutionId(),
  6. destinationActivity, param, currentActivity, jumpReason));