Size: a a a

2021 June 21

SK

Sergey Kapralov in YouTrack
Хэй, всем привет.

Я новичок в YT workflowах, возможно чет примитивное щас спрошу, но все же: пытаюсь сделать так, чтобы youtrack заставлял пользователя перекинуть таску при смене стейта (с гарантией, что пользователь не заассайнит ее же на себя). Сделал on-change хендлер:

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

exports.rule = entities.Issue.onChange({
 title: 'require-reassignee',
 guard: function(ctx) {
   return ctx.issue.isChanged(ctx.State);
 },
 action: function(ctx) {
   ctx.issue.fields.Sender = ctx.issue.fields.Assignee;
   ctx.issue.fields.Assignee = null;
   ctx.issue.required('Assignee', 'Reassign first.');
   workflow.check(ctx.issue.fields.Assignee != ctx.issue.fields.Sender, "Issue should be reassigned");
 },
 requirements: {
   State: {
     type: entities.EnumField.fieldType
   },
   Assignee: {
     type: entities.User.fieldType
   },
   Sender: {
     type: entities.User.fieldType
   }
 }
});

Пробую - при смене стейта ютрек начинает циклически снова и снова выполнять этот хендлер и "переспрашивать" запрос на "Reassign first". Пробовал вместо on-change хендреа подвязаться на onEnter у стейта, либо на guard у транзишена - то же самое.

Был бы признателен за совет. Версия - 2020.6.4750.
источник

СК

Семён Кирюшин... in YouTrack
ctx.issue.fields.Assignee = null; помоему это лишнее
источник

IR

Ilia Rogozhin in YouTrack
Смотри ctx.issue.required откатывает транзакцию изменений если условие не выполняется.
Тоесть ты изменяешь статус + сбрасываешь ассайнера (в этой же транзакции), а затем проверяешь, что асайнер выставлен. Собственно эта проверка падает и откатывает транзакцию.
источник

SK

Sergey Kapralov in YouTrack
Да, я тоже об этом подумал. А как можно было бы это разрешить?
источник

SK

Sergey Kapralov in YouTrack
Я имею ввиду - по разным хендлерам разносить: нужно порядок определенный гарантировать. Такое вообще возможно?
источник

SK

Sergey Kapralov in YouTrack
Иначе required не сработает. Он спрашивает assignee только если оный нуль, как я понял
источник

IR

Ilia Rogozhin in YouTrack
И с твоим кейсом есть проблема.
Одновременно можно поменять несколько полей, только через команду.

Понятие порядка изменений опять же нет.
источник

IR

Ilia Rogozhin in YouTrack
Он наоборот сработал, так как поле не выставленно:)
источник

IR

Ilia Rogozhin in YouTrack
По поводу решить, конкретно, то что ты хочешь не возможно.
А вот проблему, которую ты не озвучил, возможно решить другим способом скорее всего:)
источник

SK

Sergey Kapralov in YouTrack
> пытаюсь сделать так, чтобы youtrack заставлял пользователя перекинуть таску при смене стейта (с гарантией, что пользователь не заассайнит ее же на себя)

А что конкретно не возможно? Может можно что-то упростить в моих намерениях и станет возможно хоть что-то?
источник

SK

Sergey Kapralov in YouTrack
Сорри если повторяюсь - чет тяжко мне workflowы даются, ппц.
источник

IR

Ilia Rogozhin in YouTrack
Еще раз повторю:
> Одновременно можно поменять несколько полей, только через команду.

В принципе это возможно, но это сильно убивает пользовательский опыт.

——

Проблема тут не workflow, а в том, что не понятно для чего это делать.
Просто идея работы с тикетом, подразумевает, что ты можешь поменять любое поле, и тикет после этого остается валидным.

Воркфлоу служит для проставления каких либо зависимых полей или проверки валидности.

У тебя же изменение одного значения делает не валидным тикет без ручного ввода другого значения. Что немного нарушает логику. Поэтому и возникает вопрос какая проблема решается этим воркфлоу. Потому как ты придумал решение, и оно не совсем осуществимо.
источник

SK

Sergey Kapralov in YouTrack
Ну... формально, мне нужно обеспечить гарантию, что, например, если юзер заканчивает свою часть работы над багой и отправляет багу на код ревью, или на верификацию, бага не оставалась висеть на нем же, а ушла человеку, который будет заниматься кодревью или верификацией. Иными словами, мотивировать к тому, чтобы таска всегда была заассайнена на человека, который в данный момент времени над ней работает.

Но ок, я так понял я вошел в идеологическое противоречие с ютреком. Ладно, обойдусь.

Спасибо.
источник

IR

Ilia Rogozhin in YouTrack
У тебя есть идеалогоческое противоречие в том, что назначение на человек это не тоже самое, что он работает над этой задачей.
источник

SK

Sergey Kapralov in YouTrack
Это обсуждаемо. Но не будем обсуждать это в нерелевантном месте.
источник

SK

Sergey Kapralov in YouTrack
А еще вопрос. Есть ли аналог ctx.issue.required, который не открывает никаких транзакций и вообще никак не завязан на issue и ее поля, и который просто показывает диалог и спрашивает у юзера абстрактное значение определенного типа, возвращая его в месте вызова.
источник

IR

Ilia Rogozhin in YouTrack
Workflow не вызывает диалога, потому как нет у него понятия ожидания.
источник

SK

Sergey Kapralov in YouTrack
Ок. Попытка не пытка.
источник

SK

Sergey Kapralov in YouTrack
Тогда, может, есть аналог ctx.issue.required, который открывает диалог на ненулевое поле?
источник

IR

Ilia Rogozhin in YouTrack
Блин required не сам открывает диалог. Это кастомная обработка на фронте, для упрощения UX
источник