Смена проекта при создании подзадачи.

Добрый день.

У меня есть worfklow в старом варианте, который менял проект создаваемой подзадачи независимо от проекта выбранном в  контексте.
Т.е. я хочу чтобы подзадача создавалась в том проекте, в котором я нахожусь, а не в том который указан в контексте. 

Старый worfklow выглядел так: 

when <issue created or updated> {
 
  for each parent in subtask of {
    if ( parent.project != issue.project && !parent.isReported()) {
       parent.project = issue.project ;
    }
  }
 
 
 
  for each subtask in parent for {
    if (subtask.project != issue.project && !parent.isReported( ) {
      subtask.project = issue.project ;
    }
  }

Переписал на js:

issue.links["subtask of"].forEach(function (parent) {
  issue.project = parent.project;
});

Но почему-то не работает.

 
0
9 comments
Avatar
Permanently deleted user
Official comment

Прошу прощения за задержку с ответом. Данная ошибка свидетельствует о том, что база данных в данный момент не консистентна: в ней имеются фантомные линки, которые ведут в никуда. Мы исправили причины, по которым они появлялись, однако если они появились достаточно давно, необходимо провести рефакторинг базы, чтобы от них избавиться.

Если у Вас Standalone YouTrack, Вам необходимо один раз рестартовать Ваш инстанс с дополнительной опцией (информацию о том, как запускать YouTrack с дополнительными опциями, Вы можете найти на https://www.jetbrains.com/help/youtrack/standalone/Configure-JVM-Options.html):

-Dexodus.entityStore.refactoring.forceAll=true

Если у Вас InCloud YouTrack, пожалуйста, сообщите нам URL Вашего инстанса и время, удобное для рестарта (рестарт займёт несколько минут).

Avatar
Permanently deleted user

Добрый день,

Вы не могли бы прислать полный текст правила, а также описать конкретный сценарий, в котором правило не работает?

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

exports.rule = entities.Issue.onChange({
title: 'Project',
guard: function(ctx) {
return !ctx.issue.isReported && !ctx.issue.becomesReported;
},
action: function(ctx) {

var issue = ctx.issue;

issue.links["subtask of"].forEach(function (parent) {
if (issue.project != parent.project) {
issue.project = parent.project;
}
});

issue.links["parent for"].forEach(function (subtask) {
if (issue.project != subtask.project) {
issue.project = subtask.project;
}
});


},
requirements: {
}
});

Сценарий:
Я нахожусь в задаче проекта "А", а в контексте выбран проект "В".
Я хочу чтобы при создании подзадачи/родительской задачи, в поле "Project" был проект "A", а не проект "В" который указан в контексте.

0
Avatar
Permanently deleted user

В сценарии, который Вы описали, воркфлоу сработает не на новой задаче (потому что в момент создания драфта задачи воркфлоу на ней не запускаются), а на той существующей задаче, к которой линкуется новая. Соответственно, условие `!ctx.issue.isReported && !ctx.issue.becomesReported;` всегда false, и правило не срабатывает.

0

Я переписал на js точь-в-точь как в старом варианте workflow:

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

exports.rule = entities.Issue.onChange({

title: 'Project',
guard: function(ctx) {
return true;
},
action: function(ctx) {

var issue = ctx.issue;


issue.links["subtask of"].forEach(function (parent) {
if (parent.project != issue.project && !parent.isReported) {
parent.project = issue.project;
}
});



issue.links["parent for"].forEach(function (subtask) {
if (subtask.project != issue.project && !subtask.isReported) {
subtask.project = issue.project;
}
});

},
requirements: {

}
});

При нажатии subtask of/parent for выдаёт ошибку:

 TypeError: Cannot read property "_wrapped" from null (@jetbrains/youtrack-scripting-api/entities#252)
 
            org.mozilla.javascript.EcmaError: TypeError: Cannot read property "_wrapped" from null (@jetbrains/youtrack-scripting-api/entities#252)
            	at org.mozilla.javascript.gen.projects_project_4337._c_anonymous_2(projects/project:23)



0
Avatar
Permanently deleted user

Есть подозрение на неконсистеность в базе (присутствие фантомных линков). Однако, прежде чем применять рефакторинги (я опишу, какие именно), сделайте следующее, пожалуйста:

* Условия `parent.project != issue.project` нужно заменить на `parent.project.key !== issue.project.key` в обоих кейсах.

* Если вновь повторится ошибка, пожалуйста, укажите, в какой именно строке (из-за форматирования здесь сложно понять, на какой строке проблема).

0

Поменял на "parent.project.key !== issue.project.key". Всё равно ошибка в строке: 
 issue.links["parent for"].forEach(function (subtask) {

0

workflow заработал после рефактиринга бд

0

Добрый день! У меня аналогичная проблема, могу ли я запросить рефакторинг БД для InCloud YouTrack?

0

Please sign in to leave a comment.