如何防止在 Youtrack 工作流程中关闭打开的任务?

How to prevent open task to be closed in Youtrack workflow?

我们的任务有不同的状态,例如:打开、进行中、修复、测试、关闭。我们需要设计一个工作流来防止用户关闭打开的任务。

我浏览了文档,看到了这样的代码:

var user;
if (issue.Assignee == null) {
  user = issue.project.leader;
} else {
  user = issue.Assignee;
}

问题是上面的代码只是检查状态。我需要一种方法来阻止操作(例如关闭打开的任务)。我应该如何防止用户进行此类操作?如何查看他是否正在关闭任务?

the documentation 中提到了如何访问问题字段和问题自定义字段。但代码再次如下所示:

if (issue.State == Open) {
    # what to do here how to check if he is closing the task?
}

如何查看他是否正在关闭任务?我应该怎么做才能告诉用户您不能关闭打开的任务?

  1. 请注意,无论是在无状态规则的 when 子句中还是在规则主体中,您都可以实现类似 State != null && !State.isResolved && (State.oldValue != null && State.oldValue.isResolved)
  2. 要防止问题被更改,请使用断言

经过大量使用代码后,我找到了解决方案:

rule check open state

when issue.State.becomes({Open}) {
    assert issue.State.oldValue == {Submitted}: "Issue needs to be in Submitted state, to make it Open" 
}

我必须使用 becomes 来检查用户是否正在打开任务,然后通过使用断言我将确保任务是否从 Submitted 状态更改为打开或没有。