流程图节点在监听中设置已跳过,但是该节点显示为绿色,而不是灰色
@xyz20003 你好,想跟你请教个问题:流程图节点在监听中设置已跳过,但是该节点显示为绿色,而不是灰色
监听代码如下:
/** * */ package com.ailk.activiti.bpm.listener; import java.util.Collections; import org.activiti.engine.HistoryService; import org.activiti.engine.RuntimeService; import org.activiti.engine.TaskService; import org.activiti.engine.delegate.DelegateTask; import org.activiti.engine.impl.context.Context; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import com.ailk.activiti.bpm.cmd.CompleteTaskWithCommentCmd; import com.ailk.activiti.bpm.support.DefaultTaskListener; /** * @author hanguang 判断节点是否需要审批,如果不需要审批则跳过 * */ public class ExclusiveTaskListener extends DefaultTaskListener { private static Logger logger = LoggerFactory .getLogger(ExclusiveTaskListener.class); @Autowired private HistoryService historyService; @Autowired private RuntimeService runtimeService; @Autowired private TaskService taskService; @Override public void onCreate(DelegateTask delegateTask) throws Exception { String taskDefinitionKey = delegateTask.getTaskDefinitionKey(); String taskId = delegateTask.getId(); Object valiable = null; if (taskDefinitionKey.equals("MGW")) { valiable = delegateTask.getVariable("MGW"); if (valiable == null) { new CompleteTaskWithCommentCmd(taskId, Collections.<String, Object> emptyMap(), "跳过") .execute(Context.getCommandContext()); } } } }
流程图显示如下:
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
可能是taskListener放置的位置,导致修改了错误的historicActivityInstance的deleteReason。
这个问题在LemonOA的老版本中遇到过,我们是通过区分了history之前执行的taskListener和history之后执行的taskListener来解决的。
skip这种,必须在history执行之后触发。
数据库中是有跳过原因的,为什么下面方法取得的值为null
deleteReason = Context
.getCommandContext()
.getHistoricTaskInstanceEntityManager()
.findHistoricTaskInstanceById(
historicActivityInstance.getTaskId())
.getDeleteReason();
if ("跳过".equals(deleteReason)) {
signSkipNode(image, activity.getX() - this.minX,
activity.getY() - this.minY,
activity.getWidth(), activity.getHeight(),
historicActivityInstance.getActivityType());
}
这行代码没有执行,跟踪到deleteReason的值为NULL,而不是为【跳过】
CustomProcessDiagramGenerator里有这样一行代码,请确认这行代码是否执行了。
// 节点已经结束
if ("跳过".equals(deleteReason)) {
signSkipNode(image, activity.getX() - this.minX,
activity.getY() - this.minY,
activity.getWidth(), activity.getHeight(),
historicActivityInstance.getActivityType());
} else {
signHistoryNode(image, activity.getX() - this.minX,
activity.getY() - this.minY,
activity.getWidth(), activity.getHeight(),
historicActivityInstance.getActivityType());
}