检查问题字段是否随工作流变为“进行中”时出现异常

问题描述 投票:1回答:1

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

enter image description here

所以我写了一个Youtrack工作流程,当问题变为“进行中”时,它会向我的不和谐频道发布一个http帖子。

这是以下的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工作流编辑器建议的。

任何人都可以告诉我如何访问真正的“进行中”值以使此代码运行?

编辑

试过这个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)
javascript workflow youtrack youtrack-api
1个回答
2
投票

如果要使用ctx.issue.fields.becomes(ctx.State, ctx.State.InProgress)语法,请将“进行中”状态的定义添加到需求部分:

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");

我希望它会有所帮助。

© www.soinside.com 2019 - 2024. All rights reserved.