YouTrack Standalone 2017.3 Help

Subtask Inherit Assignee

This workflow automatically sets the assignee of a subtask to the user who is assigned to work on the parent task.

Name@jetbrains/youtrack-workflow-subtask-inherit-assignee
Auto-attachedno
Modules Assign subtask to assignee of parent issue (on-change)
Update assignee for subtask when parent issue is reassigned (on-change)

Use Case

This workflow helps you manage the assignment of tasks and subtasks.

Modules

This workflow includes two modules.

Assign subtask to assignee of parent issue

This rule checks a subtask when it is linked to a parent task. If the subtask is not assigned, the issue is assigned to the assignee of the parent task.

var entities = require('@jetbrains/youtrack-scripting-api/entities'); var workflow = require('@jetbrains/youtrack-scripting-api/workflow'); exports.rule = entities.Issue.onChange({ title: workflow.i18n('Assign subtask to assignee of parent issue'), guard: function(ctx) { return !ctx.issue.links['parent for'].added.isEmpty(); }, action: function(ctx) { var issue = ctx.issue; var safeSetAssignee = function(subtask) { if (subtask.project && !subtask.project.isArchived) { if (subtask.project.key === issue.project.key || subtask.project.findFieldByName(ctx.Assignee.name)) { if (!subtask.fields.Assignee) { if (!issue.fields.Assignee || subtask.project.findFieldByName(ctx.Assignee.name).findValueByLogin(issue.fields.Assignee.login)) { subtask.fields.Assignee = issue.fields.Assignee; } } } } }; issue.links['parent for'].added.forEach(safeSetAssignee); }, requirements: { Assignee: { type: entities.User.fieldType }, Subtask: { type: entities.IssueLinkPrototype, name: 'Subtask', outward: 'parent for', inward: 'subtask of' } } });

Update assignee for subtask when parent issue is reassigned

The next rule checks for subtasks when an issue is assigned to another user.

  • If the subtasks are in an active project, the assignee for each subtask is set to the assignee of the parent task.
  • If the subtasks are in an archived project, they are ignored.
var entities = require('@jetbrains/youtrack-scripting-api/entities'); var workflow = require('@jetbrains/youtrack-scripting-api/workflow'); exports.rule = entities.Issue.onChange({ title: workflow.i18n('Update assignee for subtask when parent issue is reassigned'), guard: function(ctx) { return ctx.issue.fields.isChanged(ctx.Assignee); }, action: function(ctx) { var issue = ctx.issue; var safeSetAssignee = function(subtask) { if (subtask.project && subtask.isReported && !subtask.project.isArchived) { if (subtask.project.key === issue.project.key || subtask.project.findFieldByName(ctx.Assignee.name)) { if ((issue.fields.oldValue(ctx.Assignee) || {}).login === (subtask.fields.Assignee || {}).login) { if (!issue.fields.Assignee || subtask.project.findFieldByName(ctx.Assignee.name).findValueByLogin(issue.fields.Assignee.login)) { subtask.fields.Assignee = issue.fields.Assignee; } } } } }; if (issue.fields.isChanged(ctx.Assignee)) { issue.links['parent for'].forEach(safeSetAssignee); } }, requirements: { Assignee: { type: entities.User.fieldType }, Subtask: { type: entities.IssueLinkPrototype, name: 'Subtask', outward: 'parent for', inward: 'subtask of' } } });
Last modified: 6 September 2017