The task is - in post function find an issue and then change customfiled to other option like in issue where postfunction is.
My code is
import org.apache.log4j.Level
import org.apache.log4j.Logger
import com.atlassian.jira.user.ApplicationUser
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.search.SearchResults
import com.atlassian.jira.web.bean.PagerFilter
import com.atlassian.jira.event.type.EventDispatchOption
import com.atlassian.jira.issue.MutableIssue
import com.atlassian.jira.issue.ModifiedValue
import com.atlassian.jira.issue.util.DefaultIssueChangeHolder
// set up logging
def log = Logger.getLogger("com.example.jira.script.ProcessJQL");
//def Grade = ComponentAccessor.getCustomFieldManager().getCustomFieldObjectByName("Grade")
def customFieldManager = ComponentAccessor.getCustomFieldManager()
def Grade = customFieldManager.getCustomFieldObject(14209) //Grade CF
def GradeValue = issue.getCustomFieldValue(cf) //Object option of Grade from issue
log.setLevel(Level.INFO);
// define JQL query
String jqlSearch = "project = INFO AND issueType = Task AND Employee = akim";
// required objects
SearchService searchService = ComponentAccessor.getComponent(SearchService.class);
ApplicationUser user = ComponentAccessor.getJiraAuthenticationContext().getLoggedInUser();
IssueManager issueManager = ComponentAccessor.getIssueManager();
// validate the query
SearchService.ParseResult parseResult = searchService.parseQuery(user, jqlSearch);
if (parseResult.isValid()) {
// do the search
SearchResults searchResult = searchService.search(user, parseResult.getQuery(), PagerFilter.getUnlimitedFilter());
for (Issue issue : searchResult.getResults()) {
log.info("Found issue: " + issue.getKey());
// to update issue convert it to MutableIssue
MutableIssue mutableIssue = issueManager.getIssueObject(issue.getId());
mutableIssue.setSummary(issue.getSummary() + " UPDATED");
def availableOptions = ComponentAccessor.optionsManager.getOptions(Grade.getRelevantConfig(issue))
def optionToSet = availableOptions.find { it.value == newValue }
Grade.updateValue(null, issue, new ModifiedValue(issue.getCustomFieldValue(Grade), optionToSet), new DefaultIssueChangeHolder())
issueManager.updateIssue(user, mutableIssue, EventDispatchOption.ISSUE_UPDATED, false); // false = do not send e-mail notifications
}
} else
log.error("Invalid JQL: " + jqlSearch);
Got error:
2021-05-26 18:19:46,088 ERROR [workflow.AbstractScriptWorkflowFunction]: Workflow script has failed on issue CIW-613 for user 'XXXXXXX'. View here: https://XXXXXXXXX/secure/admin/workflows/ViewWorkflowTransition.jspa?workflowMode=live&workflowName=CIW%3A+Project+Management+Workflow&descriptorTab=postfunctions&workflowTransition=91&highlight=5 groovy.lang.MissingPropertyException: No such property: customFieldManager for class: Script3863 at Script3863.run(Script3863.groovy:17)
I found the solution here is the code!
import org.apache.log4j.Level
import org.apache.log4j.Logger
import com.atlassian.jira.user.ApplicationUser
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.search.SearchResults
import com.atlassian.jira.web.bean.PagerFilter
import com.atlassian.jira.event.type.EventDispatchOption
import com.atlassian.jira.issue.MutableIssue
import com.atlassian.jira.issue.ModifiedValue
import com.atlassian.jira.issue.util.DefaultIssueChangeHolder
// set up logging
def log = Logger.getLogger("com.example.jira.script.ProcessJQL");
//def Grade = ComponentAccessor.getCustomFieldManager().getCustomFieldObjectByName("Grade")
def customFieldManager = ComponentAccessor.getCustomFieldManager()
def Grade = customFieldManager.getCustomFieldObject(14209) //Grade CF
def GradeValue = issue.getCustomFieldValue(Grade) //Object option of Grade from issue
log.setLevel(Level.INFO);
// define JQL query
String jqlSearch = "project = INFO AND issueType = Task AND Employee = akim";
// required objects
SearchService searchService = ComponentAccessor.getComponent(SearchService.class);
ApplicationUser user = ComponentAccessor.getJiraAuthenticationContext().getLoggedInUser();
IssueManager issueManager = ComponentAccessor.getIssueManager();
// validate the query
SearchService.ParseResult parseResult = searchService.parseQuery(user, jqlSearch);
if (parseResult.isValid()) {
// do the search
SearchResults searchResult = searchService.search(user, parseResult.getQuery(), PagerFilter.getUnlimitedFilter());
for (Issue issue : searchResult.getResults()) {
log.info("Found issue: " + issue.getKey());
// to update issue convert it to MutableIssue
MutableIssue mutableIssue = issueManager.getIssueObject(issue.getId());
mutableIssue.setSummary(issue.getSummary() + " UPDATED");
mutableIssue.setCustomFieldValue(Grade, GradeValue)
issueManager.updateIssue(user, mutableIssue, EventDispatchOption.ISSUE_UPDATED, false); // false = do not send e-mail notifications
}
} else
log.error("Invalid JQL: " + jqlSearch);
as you can see i just used mutableIssue.setCustomFieldValue(Grade, GradeValue)
Hi Ilya - WOW, that's a lot of code to get a field updated. What if you used a plug in like Automation for Jira? There is a Free Lite version and a paid Pro version that will probably do what you need to do without a lot of code.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.