2

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

在此处输入图像描述

因此,我编写了一个 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 Workflow 编辑器建议的。

谁能告诉我如何访问真正的“进行中”值以使此代码运行?

编辑

试过这个 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)
4

1 回答 1

3

如果要使用该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");

我希望它会有所帮助。

于 2019-04-04T11:27:14.190 回答