js/updating-batches-of-issues/guess-subsystem.js (51 lines of code) (raw):

var entities = require('@jetbrains/youtrack-scripting-api/entities'); var search = require('@jetbrains/youtrack-scripting-api/search'); var guessSubsystem = function(ctx, issue) { var summary = issue.summary.toLowerCase(); var value = null; if (summary.includes('welcom') || summary.includes('landing')) { value = ctx.Subsystem.Landing; } else if (summary.includes('product') || summary.includes('catalogue')) { value = ctx.Subsystem.Catalogue; } else if (summary.includes('profile')) { value = ctx.Subsystem.Profile; } else if (summary.includes('cart')) { value = ctx.Subsystem.Cart; } issue.fields[ctx.Subsystem.name] = value; }; exports.rule = entities.Issue.onSchedule({ title: 'Guess Subsystem from summary', cron: '0 * * * * ?', search: '#WS-1', muteUpdateNotifications: true, action: function(ctx) { var searchQuery = 'has:-Subsystem sort by: {issue id} asc'; var issues = search.search(ctx.issue.project, searchQuery); var entries = issues.entries(); var i = entries.next(); var n = 0; var firstIssueId = i.done ? '' : i.value.id; while (n < 100 && !i.done) { var issue = i.value; guessSubsystem(ctx, issue); n += 1; i = entries.next(); } var name = ctx.issue.project.name + ' : Set Subsystem from summary : '; if (n) { console.log(name + n + ' issues are processed, starting with ' + firstIssueId); } else { console.log(name + 'no issues are processed, as nothing is left to process'); } }, requirements: { Subsystem: { type: entities.OwnedField.fieldType, Landing: {}, Catalogue: {}, Profile: {}, Cart: {} } } });