Hi,
Is it possible to set flag = true on post function using scrip runner?
Hello Hadas,Yes, it is possible, let me give you what I have done for my use case, maybe it will help you out for yours:
- First here is a brief description of the logic. I want all my tickets, which are returned based on JQL query to be flagged, if they have links that are of type "Blocked-by" (basically if my ticket is blocked by other ticket I will flag it). I am using Jira Datacenter version 9.4. Cheers.
import com.atlassian.jira.issue.MutableIssueimport com.atlassian.jira.user.ApplicationUserimport com.atlassian.jira.issue.fields.CustomFieldimport com.atlassian.jira.issue.customfields.option.Optionimport com.atlassian.jira.issue.link.IssueLinkimport com.atlassian.jira.component.ComponentAccessorimport com.atlassian.jira.bc.issue.search.SearchServiceimport com.atlassian.jira.jql.parser.JqlQueryParserimport com.atlassian.jira.web.bean.PagerFilterimport com.atlassian.jira.event.type.EventDispatchOptionimport com.atlassian.jira.issue.Issueimport groovy.transform.Field@Field String customFieldName = 'Documentation update required' // Correct name of the flagging field, checkbox@Field String customFieldValue = '.' // value for flagging checkboxdef List<Option> getOptions(Issue issue, CustomField customField, List<String> optionList) {def config = customField.getRelevantConfig(issue)def options = ComponentAccessor.getOptionsManager().getOptions(config)def optionsToSelect = options.findAll { it.value in optionList }return optionsToSelect}// flag desired issuesdef void updateIssues(MutableIssue issue, ApplicationUser user, String linkedIssueStatus, String type) {if(type.equals("Blocker") && !linkedIssueStatus.equals("Closed") && !linkedIssueStatus.equals("Resolved")){log.info("Updating..." + issue.getKey())def customField = ComponentAccessor.getCustomFieldManager().getCustomFieldObjects(issue).findByName(customFieldName)assert customField : "Could not find custom field with name $customFieldName"issue.setCustomFieldValue(customField, getOptions(issue, customField, ["."]))ComponentAccessor.getIssueManager().updateIssue(user, issue, EventDispatchOption.ISSUE_UPDATED, false)}}def jqlQueryParser = ComponentAccessor.getComponent(JqlQueryParser)def searchService = ComponentAccessor.getComponent(SearchService)def issueManager = ComponentAccessor.getIssueManager()def user = ComponentAccessor.getJiraAuthenticationContext().getLoggedInUser()def customFieldManager = ComponentAccessor.getCustomFieldManager()// edit this query to suit your needsdef query = jqlQueryParser.parseQuery("myquery...")def search = searchService.search(user, query, PagerFilter.getUnlimitedFilter())search.results.each { documentIssue ->// if you need a mutable issue we can do:def issue = issueManager.getIssueObject(documentIssue.id) // root issue//List<IssueLink> allOutIssueLink = ComponentAccessor.getIssueLinkManager().getOutwardLinks(issue.getId());List<IssueLink> allInIssueLink = ComponentAccessor.getIssueLinkManager().getInwardLinks(issue.getId());// Linked issues here are blocked by ... X issuefor (Iterator<IssueLink> outIterator = allInIssueLink.iterator(); outIterator.hasNext();) {IssueLink issueLink = (IssueLink) outIterator.next();String linkedIssueStatus = issueLink.getSourceObject().getStatus().getName(); // dont get destination, because its the root issueString type = issueLink.getIssueLinkType().getName();// flag it and update itupdateIssues(issue, user, linkedIssueStatus, type);}}
It looks like you're new here. Sign in or register to get started.