使用工作流检查问题字段是否变为 "In Progress" 时出现异常

Exception when checking if an issue field becomes "In Progress" with workflow

我的问题字段有一个 State 和一个名为 In Progress

的选项

所以我写了一个 Youtrack Workflow,当问题 变成 "In Progress".

时,它会向我的不和谐频道启动一个 http post

这是 JavaScript 代码:


var entities = require('@jetbrains/youtrack-scripting-api/entities');
var http = require('@jetbrains/youtrack-scripting-api/http');

exports.rule = entities.Issue.onChange({
  // TODO: give the rule a human-readable title
  title: 'Open-discord-channel',
  guard: function(ctx) {
    return ctx.issue.fields.becomes(ctx.State, ctx.State.InProgress);
  },
  action: function(ctx) {
    var issue = ctx.issue;
    var connection = new http.Connection('https://discordapp.com');
    connection.addHeader('Content-Type', 'application/json');
    var response = connection.postSync('/api/webhooks/123/1DJucC8-vdZR-xxx', [], issue.description);
    if (response && response.code === 200) {
        issue.addComment(response.response);
    }

    // TODO: specify what to do when a change is applied to an issue
  },
  requirements: {
    // TODO: add requirements
  }
});

激活此工作流时会抛出此异常:

TypeError: Cannot read property "InProgress" from undefined (open-discord-channel/open-discord-channel#16)
             org.mozilla.javascript.ScriptRuntime.constructError(ScriptRuntime.java:4198)
            org.mozilla.javascript.gen.open_discord_channel_open_discord_channel_2052._c_anonymous_1(open-discord-channel/open-discord-channel:16)

它告诉我 Cannot read property "InProgress" 但实际上 return ctx.issue.fields.becomes(ctx.State, ctx.State.InProgress);InProgress 是由嵌入式 Youtrack Workflow 编辑器建议的。

任何人都可以告诉我如何访问真正的 "In Progress" 值来生成此代码 运行?

编辑

试过这个 return ctx.issue.fields.becomes(ctx.State.name, "In Progress");

还是给了我一个例外

Processing issue COOPR-85:
TypeError: Cannot read property "name" from undefined (open-discord-channel/open-discord-channel#16)
             org.mozilla.javascript.ScriptRuntime.constructError(ScriptRuntime.java:4198)
            org.mozilla.javascript.gen.open_discord_channel_open_discord_channel_2076._c_anonymous_1(open-discord-channel/open-discord-channel:16)

如果要使用 ctx.issue.fields.becomes(ctx.State, ctx.State.InProgress) 语法,请将 'In Progress' 状态的定义添加到 requirements 部分:

requirements: {
    State: {
        type: entities.State.fieldType,
        InProgress: {
            name: 'In Progress'
        }
    }
}   

或者,为避免 Cannot read property "name" from undefined 错误,请检查 State 字段中的空值:

return ctx.issue.fields.State && ctx.issue.fields.becomes(ctx.State.name, "In Progress");

希望对您有所帮助。