Изменение сроков по задачам при изменении состояния задачи

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

Вот код:

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) => {

    var fs = ctx.issue.fields;

    return fs.becomes(ctx.State,ctx.State.BeAgreement,ctx.State.BeSogl, ctx.State.BeInfo);

  },

  action: (ctx) => {

    const issue = ctx.issue;

    const dateTime = require('@jetbrains/youtrack-scripting-api/date-time');

   //console.log('текущий руководитель: ',issue.fields['Руководитель инициатора']);

//   console.log('State: ',ctx.State.BeAgreement.name, ctx.State.BeAgreement);

//   console.log('State1: ',ctx.State.BeSogl.name, ctx.State.BeSogl);

//   console.log('State2: ',ctx.State.BeInfo.name, ctx.State.BeInfo);

   console.log('State3: ',ctx.State);

                console.log('Дата окончания', dateTime.format(issue.fields["Планируемая дата окончания"]), 'dd MM yyyy');

  if (ctx.State.BeAgreement.name=="In Progress"){

    issue.fields['Планируемая дата окончания']=issue.fields["Планируемая дата окончания"]+86400000*5;

    console.log('Дата окончания+', dateTime.format(issue.fields["Планируемая дата окончания"]), 'dd MM yyyy');

  } else if(ctx.State.BeSogl.name){

    issue.fields['Планируемая дата окончания']=issue.fields["Планируемая дата окончания"]+86400000*2;

    console.log('Дата окончания++', dateTime.format(issue.fields["Планируемая дата окончания"]), 'dd MM yyyy');

  } else if(ctx.State.BeInfo.name=="Запрос информации"){

     issue.fields['Планируемая дата окончания']=issue.fields["Планируемая дата окончания"]+86400000*3;

    console.log('Дата окончания+++', dateTime.format(issue.fields["Планируемая дата окончания"]), 'dd MM yyyy');

  }

  

 

  },

  requirements: {

    // TODO: add requirements   

    State: {

      type: entities.State.fieldType,

      name:"Состояние",

                     BeAgreement: {

        name: "In Progress"

    },

      BeSogl: {

        name: "Согласование"

    },

      BeInfo:{

        name:"Запрос информации"

      }

    }

  }

});

 

При его исполнении, срабатывает только при установке состояния "In Progress". При остальных состояниях ничего не происходит.

3 comments
Comment actions Permalink

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

Для начала стоит заменить guard на

 guard: (ctx) => {
    const issue = ctx.issue;
    return issue.becomes(ctx.State, ctx.State.BeAgreement) || issue.becomes(ctx.State, ctx.State.BeSogl) || issue.becomes(ctx.State, ctx.State.BeInfo)
  },

Дальше уже смотреть по логированию в консоли редактора рабочего процесса (не браузера).

0
Comment actions Permalink

Спасибо, помогло.

Остаться ещё один вопрос:

Как присвоить полю с Типом дата,  текущую дату?

Когда пытаюсь присвоить значение с помощью функции Date,  выдаётся ошибка (исключение в правиле)

0
Comment actions Permalink

Спасибо за ответ.

Такой подход должен работать: 

ctx.issue.fields['Название вашего поля с типом дата'] = Date.now();

Само поле желательно также добавить в requirements block.

Если у вас не работает так, то нужно смотреть ошибку в консоле, как я указывал в изначальном комментарии. 

0

Please sign in to leave a comment.