更改工单状态时自动分配受让人

Automatically assign assignee when changing status of ticket

我在 youtrack 中创建了一个 "Agile-Board",我希望移动到列(映射到字段 Status)的每张票都自动分配到我的 "In Produktivsetzung"用户。

像这样:

如何做到这一点?

可以使用自定义设置 workflow script 如下

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

exports.rule = entities.Issue.onChange({
  title: 'Set logged-in user as an assignee when they move it to In Produktivsetzung state',
  guard: function(ctx) {
    var issue = ctx.issue;
    return issue.isReported &&
        issue.fields.Assignee === null &&
        issue.fields.becomes(ctx.State, ctx.State.InProgress) &&
        !issue.fields.isChanged("project");
  },
  action: function(ctx) {
    var isCurrentUserAssignee = false;
    ctx.Assignee.values.forEach(function(it) {
      if (it.login == ctx.currentUser.login) {
        isCurrentUserAssignee = true;
      }
    });
    if (isCurrentUserAssignee) {
      ctx.issue.Assignee = ctx.currentUser;
    }
  },
  requirements: {
    Assignee: {
      type: entities.User.fieldType
    },
    State: {
      type: entities.State.fieldType,
      InProgress: {
        name: 'In Produktivsetzung'
      }
    }
  }
});

基于 这就是我现在使用的,我创建了多个 modules,我只需要更改代码顶部的两个变量:

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

var assigneeLogin = '<some.login>';
var stateName = '<Some Statename, see possible values in console.log(ctx.State)>';

exports.rule = entities.Issue.onChange({
  title: 'Set ' + assigneeLogin + ' as the assignee when ticket is moved to "'+ stateName + '"',
  guard: function(ctx) {
    var issue = ctx.issue;
    return issue.fields.becomes(ctx.State, ctx.State.InProgress);
  },
  action: function(ctx) {
    ctx.Assignee.values.forEach(function(it) {
      if (it.login === assigneeLogin) {
        ctx.issue.Assignee = it;
      }
    });
  },
  requirements: {
    Assignee: {
      type: entities.User.fieldType
    },
    State: {
      type: entities.State.fieldType,
      InProgress: {
        name: stateName
      }
    }
  }
});

我想在每次状态更改时设置受让人。经过几个小时的反复试验(文档真的不是那么好)我成功了:

var entities = require('@jetbrains/youtrack-scripting-api/entities');
exports.rule = entities.Issue.onChange({
  title: 'Assign issue to current user when state changes',
  guard: function(ctx) {
    return ctx.issue.fields.isChanged(ctx.State);
  },
  action: (ctx) => {
    ctx.issue.fields.Assignee = ctx.currentUser;
  },
  requirements: {
    Assignee: {
      type: entities.User.fieldType
    },
    State: {
      type: entities.State.fieldType
    }
  }
});

我真的不明白为什么我必须使用“保护功能”——我可以在操作中使用条件语句,整个“要求”部分对我来说没有任何意义,但如果它是必要的……我不在乎。终于按预期工作了……我希望它能比“遗留脚本”长几年——我不想再碰它了。