Как правильно сменить статус у задачи?

Пишу скрипт, который актуализирует статус Родительской задачи, при смене статуса у одной из дочерних задач.

Код:

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

exports.rule = entities.Issue.onChange({
title: 'Set-feature-status',
guard: function(ctx) {
return ctx.issue.isChanged('Состояние');
},
action: function(ctx) {
var newState;
var needUpdate = false;
var parent = ctx.issue.links['подзадача'].get(0);
var minIndex = parent.fields.State.ordinal;

parent.links['родитель для'].forEach(function(subtask) {
var index = subtask.fields.State.ordinal;
console.log(subtask.id + ' ' + index + ' ' + minIndex);
if (index < minIndex) {
minIndex = index;
newState = subtask.fields.State;
needUpdate = true;
}
});

console.log(needUpdate + ' ' + newState);
if (needUpdate) {
parent.fields.State = newState;
}
console.log(parent.fields.State);
},
requirements: {
State: {
type: entities.State.fieldType
}
}
});

 

Логи:

ST-1 3 3
ST-2 2 3

true {"becomesRemoved": "false",
"isNew": "false",
"$$type": "State",
"toString": function() {},
"toShortString": function() {},
"required": function() {},
"becomes": function() {},
"isChanged": function() {},
"oldValue": function() {},
"canBeReadBy": function() {},
"canBeWrittenBy": function() {},
"constructor": function() {},
"isResolved": "null",
"backgroundColor": "#1a1a1a",
"foregroundColor": "#fff",
"presentation": "на Уточнение",
"colorIndex": "35",
"description": "null",
"name": "на Уточнение",
"ordinal": "2"}

{"becomesRemoved": "false",
"isNew": "false",
"$$type": "State",
"toString": function() {},
"toShortString": function() {},
"required": function() {},
"becomes": function() {},
"isChanged": function() {},
"oldValue": function() {},
"canBeReadBy": function() {},
"canBeWrittenBy": function() {},
"constructor": function() {},
"isResolved": "null",
"backgroundColor": "#1a1a1a",
"foregroundColor": "#fff",
"presentation": "на Уточнение",
"colorIndex": "35",
"description": "null",
"name": "на Уточнение",
"ordinal": "2"}

Processing issue ST-8:TypeError: Cannot read property "fields" from null (wf/set-feature-status#12)
org.mozilla.javascript.ScriptRuntime.constructError(ScriptRuntime.java:4198)
org.mozilla.javascript.ScriptRuntime.constructError(ScriptRuntime.java:4176)
org.mozilla.javascript.ScriptRuntime.typeError(ScriptRuntime.java:4209)
org.mozilla.javascript.ScriptRuntime.typeError2(ScriptRuntime.java:4228)
org.mozilla.javascript.ScriptRuntime.undefReadError(ScriptRuntime.java:4240)
org.mozilla.javascript.ScriptRuntime.getObjectProp(ScriptRuntime.java:1570)
org.mozilla.javascript.gen.wf_set_feature_status_8560._c_anonymous_2(wf/set-feature-status:12)
org.mozilla.javascript.gen.wf_set_feature_status_8560.call(wf/set-feature-status)
org.mozilla.javascript.optimizer.OptRuntime.callName(OptRuntime.java:63)
org.mozilla.javascript.gen._execution_ctx__8566._c_anonymous_6(_execution_ctx_:88)
org.mozilla.javascript.gen._execution_ctx__8566.call(_execution_ctx_)
org.mozilla.javascript.ContextFactory.doTopCall(ContextFactory.java:405)
org.mozilla.javascript.ScriptRuntime.doTopCall(ScriptRuntime.java:3508)
org.mozilla.javascript.gen._execution_ctx__8566.call(_execution_ctx_)

При перемещении одной из дочерних карточек в другой статус, у родителя этот статус (по логам) выставляется, но сама родительская карточка не перемещается и выводится сообщение об ошибке. Что я делаю не так?

3 comments
Comment actions Permalink

Здравствуйте,

Проверьте, пожалуйста, не возвращается ли null в этой строчке для какой-то из задач? Созраняется ли ошибка, если добавить проверку, что parent не null?

var parent = ctx.issue.links['подзадача'].get(0);
0
Comment actions Permalink

Добавил проверку на null и заработало. Правда ясности это не внесло))) 

В любом случае, большое спасибо за помощь!!!

0
Comment actions Permalink

Дело в том, что не у всех задач есть родительские задачи. Поэтому строчка 

var parent = ctx.issue.links['подзадача'].get(0);

может вернуть null, если у текущей задачи нет родителя. В таком случае, Вы будете пытаться обратиться к полю fields у null - а это приводит к ошибке.

0

Please sign in to leave a comment.