New example of Groovy Service for JIRA to Flag and comment issues not updated in X days in status X… very easy!
import com.atlassian.crowd.embedded.api.User import com.atlassian.jira.bc.issue.search.SearchService import com.atlassian.jira.component.ComponentAccessor import com.atlassian.jira.issue.Issue import com.atlassian.jira.issue.IssueManager import com.atlassian.jira.issue.comments.CommentManager import com.atlassian.jira.user.util.UserUtil import com.atlassian.crowd.embedded.api.User import com.atlassian.jira.web.bean.PagerFilter import com.atlassian.jira.ComponentManager import com.atlassian.jira.project.ProjectManager import com.atlassian.jira.issue.IssueManager import com.atlassian.jira.issue.index.IndexException import com.atlassian.jira.ManagerFactory import com.atlassian.jira.user.ApplicationUser import org.apache.log4j.Category import com.atlassian.jira.issue.customfields.CustomFieldType import com.atlassian.jira.issue.CustomFieldManager import com.atlassian.jira.issue.MutableIssue import com.atlassian.jira.issue.Issue import com.atlassian.jira.issue.fields.CustomField import com.atlassian.jira.issue.CustomFieldManager import com.atlassian.jira.ComponentManager import com.atlassian.jira.issue.context.IssueContext import com.atlassian.jira.issue.context.IssueContextImpl import com.atlassian.jira.component.ComponentAccessor import com.atlassian.jira.issue.customfields.manager.OptionsManager import com.atlassian.jira.issue.ModifiedValue import com.atlassian.jira.issue.util.DefaultIssueChangeHolder import com.atlassian.jira.issue.util.IssueChangeHolder String jqlSearch = 'project = XXXX AND status = "XXXX" AND updated <= -XXh ORDER BY updated DESC' SearchService searchService = ComponentAccessor.getComponent(SearchService.class) CommentManager commentManager = ComponentAccessor.getCommentManager() IssueManager issueManager = ComponentAccessor.getIssueManager(); def userManager = ComponentAccessor.getUserManager() def user = userManager.getUserByName("useradmin") CustomFieldManager customFieldManager = ComponentAccessor.getCustomFieldManager() def optionsManager = ComponentAccessor.getOptionsManager() Category log = Category.getInstance("com.onresolve.jira.groovy") log.setLevel(org.apache.log4j.Level.DEBUG) log.debug "UPDATING ISSUES: FLAGGING TICKETS IN X STATUS BY INACTIVITY" def String adminUserName = "useradmin" def String nagComment = "" List < Issue > issues = null SearchService.ParseResult parseResult = searchService.parseQuery(user, jqlSearch) if (parseResult.isValid()) { def searchResult = searchService.search(user, parseResult.getQuery(), PagerFilter.getUnlimitedFilter()) issues = searchResult.issues.collect { (Issue) issueManager.getIssueObject(it.id) } for (issue in issues) { def cf = customFieldManager.getCustomFieldObjects(issue).find { it.name == 'Flagged' } def fieldConfig = cf.getRelevantConfig(issue) def value = optionsManager.getOptions(fieldConfig) ? .find { it.toString() == 'Impediment' } nagComment = "Hello [~" + issue.assignee.name + "],\n*You have a Jira ticket awaiting approval!*\n" log.debug "issue: ${issue.getId()}, ${issue.getKey()} commented." commentManager.create(issue, adminUserName, nagComment, true); IssueChangeHolder changeHolder = new DefaultIssueChangeHolder(); cf.updateValue(null, issue, new ModifiedValue(issue.getCustomFieldValue(cf), [value]), changeHolder) //break } log.debug " FINISH UPDATING: FLAGGING TICKETS IN X STATUS BY INACTIVITY" } else { log.debug("Invalid JQL: " + jqlSearch); }