流程图节点在监听中设置已跳过,但是该节点显示为绿色,而不是灰色

发布于 2021-11-21 17:19:58 字数 1854 浏览 850 评论 4

 

@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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

明媚如初 2021-11-25 09:00:57

可能是taskListener放置的位置,导致修改了错误的historicActivityInstance的deleteReason。

这个问题在LemonOA的老版本中遇到过,我们是通过区分了history之前执行的taskListener和history之后执行的taskListener来解决的。

skip这种,必须在history执行之后触发。

2021-11-25 08:06:51

数据库中是有跳过原因的,为什么下面方法取得的值为null

deleteReason = Context
        .getCommandContext()
        .getHistoricTaskInstanceEntityManager()
        .findHistoricTaskInstanceById(
          historicActivityInstance.getTaskId())
        .getDeleteReason();

情痴 2021-11-24 21:00:04

 if ("跳过".equals(deleteReason)) {
                        signSkipNode(image, activity.getX() - this.minX,
                                activity.getY() - this.minY,
                                activity.getWidth(), activity.getHeight(),
                                historicActivityInstance.getActivityType());
                    }

这行代码没有执行,跟踪到deleteReason的值为NULL,而不是为【跳过】

够钟 2021-11-22 16:02:05

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());
                    }

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文