Как изменить состояние задачи при изменении других полей
Есть задача, с полями, состояние, согласован, описание и дата окончания. Мне нужно, чтобы при установки значения поля согласован в "Да", задача изменяла свое с "Согласование" на "In Progress".
При работе процесса, выдается ошибка, что я не могу изменить значения поля с типом State.
const entities = require('@jetbrains/youtrack-scripting-api/entities');
const workflow = require('@jetbrains/youtrack-scripting-api/workflow');
exports.rule = entities.Issue.onChange({
title: 'Установить статус экспертиза, если состояние "да"',
guard: (ctx) => {
var fs = ctx.issue.fields;
return fs.becomes(ctx.Согласован, ctx.Согласован.BeOk);//, ctx.State, ctx.State.BeAgreement);
},
action: (ctx) => {
const issue = ctx.issue;
issue.fields['Состояние']="In Progress";
}
},
requirements: {
State: {
type: entities.State.fieldType,
},
Согласован:{
type:entities.EnumField.fieldType,
BeOk:{
name:"Да"
}
}
}
});
Please sign in to leave a comment.
Здравствуйте,
Спасибо за ваше обращение.
Прежде всего, я рекомендую прописать в секции Requirements поля и их значения, которые вы используете в скрипте (например, поле Состояние и значение In Progress). Также, определите в секции Requirements полю "Состояние" и полю "Согласован" псевдоним на латинице, с помощью которого вы будете обращаться к этому полю в скрипте (так же, как вы это сделали для значения "Да"), например:
Верно ли, что в вашем проекте есть и поле Состояние, и поле State? Если нет, то убедитесь, пожалуйста, что в секции Requirements у вас определены только актуальные поля для этого проекта.
Второй момент - я рекомендую выставлять поле в значение, используя объекты, определенные в секции Requirements. Например, выставить поле Состояние в значение In Progress не через присвоение строки, а через присваивание объекта ctx.Status.InProgress.
Если все это не поможет, приложите, пожалуйста, актуальный код (пожалуйста, отформатируйте его, как в редакторе, чтобы избежать опечаток и недопониманий) и скриншот ошибки, которую вы получаете при работе процесса.
Не помогло.
В логе есть оба поля (state и состояние), но пользователь видит поле Состояние.
Сделал как написали, но не помогло.
Вот код:
const entities = require('@jetbrains/youtrack-scripting-api/entities');
const workflow = require('@jetbrains/youtrack-scripting-api/workflow');
exports.rule = entities.Issue.onChange({
// TODO: give the rule a human-readable title
title: 'Установить статус экспертиза, если состояние "да"',
guard: (ctx) => {
// TODO specify the conditions for executing the rule
var fs = ctx.issue.fields;
return fs.becomes(ctx.Согласован, ctx.Согласован.BeOk, ctx.State, ctx.State.BeAgreement);
// return true;
},
action: (ctx) => {
const issue = ctx.issue;
// TODO: specify what to do when a change is applied to an issue
workflow.message('переведите Состояние заявки в "Экспертиза"');
//ctx.fields.State.BeAgreement="In Progress";
},
requirements: {
// TODO: add requirements
State: {
type: entities.State.fieldType,
//
//"In Progress":{}
BeAgreement: {
name: "In Progress"
}
},
Согласован:{
type:entities.EnumField.fieldType,
BeOk:{
name:"Да"
}
}
}
});
Alexzander Kashin
Вы забыли указать имя поля State в секции Requirements: сейчас воркфлоу пытается поменять именно поле "State", а не "Состояние". Попробуйте использовать этот код, он переводит значение поля "Состояние" в In Progress, когда значение поля "Согласован" становится "Да":
Теперь вот такая ошибка:
"Поле "Согласован" не поддерживается для задач с State:Экспертиза "
Alexzander Kashin
Скорее всего, у вас поле "Согласован" - conditional. То есть оно отображается в зависимости от значений другого поля. В этом случае воркфлоу не может поменять значение этого поля, потому что оно скрыто. Уберите, пожалуйста, в настройках поля зависимость от другого поля.
Спасибо. Помогло, но не полностью.
Покончил к этому рабочему процессу аналогичный проект и там эта функция не работает.
Наименование полей и состояний у проектов одинаково
Alexzander Kashin
Показывает ли рабочий процесс ошибку? Есть ли ошибки в консоли редактора? Покажите, пожалуйста, списки полей для обоих проектов.
Это проект где все работает.
Вот проект, в котором не работает:
Вот сам код:
const entities = require('@jetbrains/youtrack-scripting-api/entities');
const workflow = require('@jetbrains/youtrack-scripting-api/workflow');
exports.rule = entities.Issue.onChange({
// TODO: give the rule a human-readable title
title: 'Установить статус экспертиза, если состояние "да"',
guard: (ctx) => {
// TODO specify the conditions for executing the rule
var fs = ctx.issue.fields;
return fs.becomes(ctx.Согласован, ctx.Согласован.BeOk, ctx.Status, ctx.Status.BeAgreement);
// return true;
},
action: (ctx) => {
const issue = ctx.issue;
// TODO: specify what to do when a change is applied to an issue
Object.keys(issue.fields).forEach(key => console.log(key+'\n'+issue.fields[key]));
workflow.message('переведите Состояние заявки в "Экспертиза"');
//ctx.fields.State.BeAgreement="In Progress";
//if (issue.fields.Status.name=="Согласование"){ ctx.issue.fields.Status=ctx.Status.BeAgreement.name;
//}
},
requirements: {
// TODO: add requirements
//State: {
Status:{
type: entities.State.fieldType,
name:"Состояние",
BeAgreement: {
name: "In Progress"
}
},
Согласован:{
type:entities.EnumField.fieldType,
BeOk:{
name:"Да"
}
}
}
});
Спасибо за скриншоты!
У вас путаница с названиями полей. Смотрите, в первом проекте у вас у "Состояния" псевдоним State. Во втором у "Согласован" - Status. В requirements у вас Status используется для поля "Состояние", поэтому код может некорректно работать во втором проекте.
Попробуйте поменять имена полей в воркфлоу. Укажите вместо "Status", например, "Sostoyanie" (коряво, конечно, но зато точно не запутаетесь), чтобы получилось что-то подобное:
И в самом коде тоже поменяйте все обращения на "Soglasovan" и "Sostoyanie".
Не сработало. Теперь при попытке сменить состояние или согласован выдаёт ошибку:
set-boss2executer/set-status-n rule threw an exception when processing the following issue: Projects-13
А вы в коде поменяли обращения? В `guard` должно быть
Да, но опечатался. Заработала. Спасибо
Отлично! Рада была помочь :)