Автоматически назначать правопреемника при изменении статуса заявки - PullRequest
0 голосов
/ 08 января 2020

Я создал "Agile -Board" в youtrack, и я хочу, чтобы каждый тикет, который перемещен в столбец (который сопоставлен с полем Status), "In Produktivsetzung" автоматически назначался моему пользователю.

Как это:

  1. Agile-Board Lanes
  2. enter image description here

Как это можно сделать?

Ответы [ 2 ]

1 голос
/ 13 января 2020

Можно настроить его с помощью пользовательского сценария рабочего процесса следующим образом

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'
      }
    }
  }
});
0 голосов
/ 14 января 2020

Исходя из ответа , это то, что я сейчас использую, я создал несколько 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
      }
    }
  }
});
...