Just a heads up: On March 24, 2025, starting at 4:30pm CDT / 19:30 UTC, the site will be undergoing scheduled maintenance for a few hours. During this time, the site might be unavailable for a short while. Thanks for your patience.
×Hello
I am facing an issue where there is a self transition and a groovy as a post function. But createIssueObject is failing.
Can you please help.
And Error:
com.atlassian.jira.exception.CreateException
at com.atlassian.jira.issue.managers.DefaultIssueManager.createIssue(DefaultIssueManager.java:600)
at com.atlassian.jira.issue.managers.DefaultIssueManager.createIssue(DefaultIssueManager.java:501)
at com.atlassian.jira.issue.managers.DefaultIssueManager.createIssueObject(DefaultIssueManager.java:611)
at com.atlassian.jira.issue.managers.RequestCachingIssueManager.createIssueObject(RequestCachingIssueManager.java:201)
at com.atlassian.jira.issue.IssueManager$createIssueObject$2.call(Unknown Source)
at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:47)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:116)
at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:136)
at Script90.run(Script90.groovy:119)
at org.codehaus.groovy.jsr223.GroovyScriptEngineImpl.eval(GroovyScriptEngineImpl.java:321)
at org.codehaus.groovy.jsr223.GroovyScriptEngineImpl.eval(GroovyScriptEngineImpl.java:159)
at javax.script.AbstractScriptEngine.eval(AbstractScriptEngine.java:233)
at javax.script.ScriptEngine$eval.call(Unknown Source)
Caused by: com.atlassian.jira.workflow.WorkflowException
at com.atlassian.jira.workflow.OSWorkflowManager.createIssue(OSWorkflowManager.java:780)
at com.atlassian.jira.issue.managers.DefaultIssueManager.createIssue(DefaultIssueManager.java:592)
... 325 more
Caused by: java.lang.NullPointerException
at com.atlassian.jira.workflow.DefaultWorkflowSchemeManager.getSchemeForProject(DefaultWorkflowSchemeManager.java:359)
at com.atlassian.jira.workflow.DefaultWorkflowSchemeManager.getWorkflowName(DefaultWorkflowSchemeManager.java:330)
at com.atlassian.jira.workflow.OSWorkflowManager.getWorkflowName(OSWorkflowManager.java:154)
Hi @Shradha Singh ,
First of all, stop write additional "answer" in the post, and write "reply" to the relevant post instead.
Second, please explain in words, what are you trying to do exactly step by step?
I see a lot of code and big part of it looks not relevant at all...
Hi @Nir Haimov
In one of our JIRA project, we have a workflow and on one of its transition I have written a custom script post function. Requirement is that on click of "New Epic" in issue view an epic will be created and will be linked to the parent issue.
This is the groovy code. It is working in our JIRA PROD which is 7.10.2. Recently we are working on upgrade and on JIRA DEV which is having 8.8.0 this code is not working.
createIssueObject() method is throwing exception.
So in order to troubleshoot it, I made the changes and tried to create just a Task instead of Epic but it is also failing.
Groovy:
import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.crowd.embedded.api.User
import com.atlassian.jira.issue.IssueFactory
import com.atlassian.jira.project.ProjectManager
import com.atlassian.jira.project.Project
import com.atlassian.jira.user.util.UserUtil
import com.atlassian.jira.issue.customfields.CustomFieldType
import com.atlassian.jira.issue.customfields.*
import com.atlassian.jira.issue.CustomFieldManager
import com.atlassian.jira.issue.IssueManager
import com.atlassian.jira.issue.index.IndexException
import com.atlassian.jira.user.util.UserUtil
import com.atlassian.jira.bc.issue.search.SearchService
import com.atlassian.jira.issue.MutableIssue
import com.atlassian.jira.issue.Issue;
import com.atlassian.jira.web.bean.PagerFilter
import com.atlassian.jira.issue.util.DefaultIssueChangeHolder
import com.atlassian.jira.issue.CustomFieldManager
import com.atlassian.jira.issue.ModifiedValue
import com.atlassian.fugue.Option
import org.apache.log4j.Category
import com.atlassian.jira.issue.issuetype.IssueType
import com.atlassian.jira.issue.link.IssueLinkType
import com.atlassian.jira.issue.IssueManager
import com.atlassian.jira.issue.link.IssueLinkTypeManager
import com.atlassian.crowd.embedded.api.User
import com.atlassian.jira.issue.Issue
import com.atlassian.jira.issue.MutableIssue
import com.atlassian.plugin.PluginAccessor
import com.atlassian.jira.security.JiraAuthenticationContext
import com.atlassian.jira.user.ApplicationUser
import com.atlassian.jira.issue.index.IssueIndexingService
import com.atlassian.jira.issue.util.DefaultIssueChangeHolder
import com.atlassian.jira.issue.util.IssueChangeHolder
import com.opensymphony.workflow.InvalidInputException
import com.atlassian.jira.issue.label.Label
import com.atlassian.jira.issue.label.LabelManager
import com.atlassian.jira.workflow.WorkflowTransitionUtil
import com.atlassian.jira.util.JiraUtils
import com.atlassian.jira.exception.CreateException
import com.atlassian.jira.workflow.WorkflowTransitionUtilImpl
import com.atlassian.jira.issue.fields.config.FieldConfig
import com.atlassian.jira.issue.customfields.manager.OptionsManager
import com.atlassian.jira.issue.customfields.option.Option
import com.atlassian.jira.issue.customfields.option.Options
import com.atlassian.jira.issue.context.IssueContextImpl
def userPropertyManager = ComponentAccessor.getUserPropertyManager();
def userManager = ComponentAccessor.getUserManager();
def issueFactory = ComponentAccessor.getIssueFactory()
def projectMgr = ComponentAccessor.getProjectManager()
def issueMgr = ComponentAccessor.getIssueManager()
CustomFieldManager customFieldManager = ComponentAccessor.getCustomFieldManager()
def authenticationContext = ComponentAccessor.getJiraAuthenticationContext()
def issueManager = ComponentAccessor.getIssueManager()
def issueIndexService = ComponentAccessor.getComponent(IssueIndexingService.class)
MutableIssue epicIss = issueFactory.getIssue()
//ApplicationUser
def loggedInUser = authenticationContext.getLoggedInUser()
println "loggedInUser "+loggedInUser
def projectManager = ComponentAccessor.getProjectManager()
//epicIss.issueTypeId = '10000'
//epicIss.setIssueTypeId("10000") //Epic Issue type Id
epicIss.setIssueTypeId("3") //Task
Project prjObj = projectManager.getProjectObjByKey('JIRAHELP')
def component="JIRA Agile"
def compVal = ComponentAccessor.getProjectComponentManager().findByComponentName(prjObj.getId(),component)
println "compVal ---"+compVal
epicIss.setComponent([compVal])
println "component setting-----"
epicIss.setSummary("TEST SUMMARY --- GROOVY")
epicIss.setDescription("TEST DESC --- GROOVY")
epicIss.setReporter(loggedInUser)
Map newIssueParams = ["issue":epicIss] as Map
try{
def issueManager = ComponentAccessor.getIssueManager()
def issueIndexService = ComponentAccessor.getComponent(IssueIndexingService.class)
Issue newIssueGv = issueManager.createIssueObject(loggedInUser, newIssueParams)
issueIndexService.reIndex(newIssueGv);
if (newIssueGv.isCreated())
{
println "inside issue created----"
}else{
println "inside issue creation failed ----"
}
}catch(CreateException e){
println("++++++CreateException "+e.printStackTrace())
}
Exception :
Time (on server): Tue Apr 21 2020 10:58:06 GMT+0530 (India Standard Time)
The following log information was produced by this execution. Use statements like:log.info("...") to record logging information.
2020-04-20 22:28:06,174 ERROR [workflow.AbstractScriptWorkflowFunction]: ************************************************************************************* 2020-04-20 22:28:06,174 ERROR [workflow.AbstractScriptWorkflowFunction]: Script function failed on issue: JIRAHELP-3818, actionId: 181, file: null com.atlassian.jira.exception.CreateException at com.atlassian.jira.issue.managers.DefaultIssueManager.createIssue(DefaultIssueManager.java:600) at com.atlassian.jira.issue.managers.DefaultIssueManager.createIssue(DefaultIssueManager.java:501) at com.atlassian.jira.issue.managers.DefaultIssueManager.createIssueObject(DefaultIssueManager.java:611) at com.atlassian.jira.issue.managers.RequestCachingIssueManager.createIssueObject(RequestCachingIssueManager.java:201) at com.atlassian.jira.issue.IssueManager$createIssueObject$2.call(Unknown Source) at Script287.run(Script287.groovy:130) Caused by: com.atlassian.jira.workflow.WorkflowException at com.atlassian.jira.workflow.OSWorkflowManager.createIssue(OSWorkflowManager.java:780) at com.atlassian.jira.issue.managers.DefaultIssueManager.createIssue(DefaultIssueManager.java:592) ... 5 more Caused by: java.lang.NullPointerException at com.atlassian.jira.workflow.DefaultWorkflowSchemeManager.getSchemeForProject(DefaultWorkflowSchemeManager.java:359) at com.atlassian.jira.workflow.DefaultWorkflowSchemeManager.getWorkflowName(DefaultWorkflowSchemeManager.java:330) at com.atlassian.jira.workflow.OSWorkflowManager.getWorkflowName(OSWorkflowManager.java:154) at com.atlassian.jira.workflow.OSWorkflowManager.getWorkflow(OSWorkflowManager.java:291) at com.atlassian.jira.workflow.OSWorkflowManager.createIssue(OSWorkflowManager.java:735) ... 6 more
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Hi @Shradha Singh @Shradha Singh
Sorry to tell you, but your code is a complete mess...
Tones of unnecessary imports...
Here is a working example for Jira 8 to create issue
import com.atlassian.jira.bc.issue.IssueService;
import com.atlassian.jira.component.ComponentAccessor;
import com.atlassian.jira.issue.IssueInputParameters
import com.atlassian.jira.user.ApplicationUser;
import com.atlassian.jira.issue.link.IssueLinkManager;
import com.atlassian.jira.security.JiraAuthenticationContext;
import groovy.transform.Field;
//All components
@Field IssueService issueService = ComponentAccessor.issueService
@Field IssueLinkManager issueLinkManager = ComponentAccessor.getIssueLinkManager()
@Field IssueInputParameters issueParameters = issueService.newIssueInputParameters()
@Field JiraAuthenticationContext authCtx = ComponentAccessor.getJiraAuthenticationContext()
//projects id
@Field Long myProject = 11001
//issuetypes id
@Field String story = "10001"
@Field ApplicationUser currentUser = authCtx.getLoggedInUser()
createIssue(myProject, story, "My New issue Summary", "My New issue Description", currentUser)
def createIssue(Long project, String issuetype, String summary, String description, ApplicationUser assignee) {
try {
issueParameters.setProjectId(project)
issueParameters.setIssueTypeId(issuetype)
issueParameters.setSummary(summary)
issueParameters.setDescription(description)
issueParameters.setReporterId(currentUser.getName())
if (assignee != null) {
issueParameters.setAssigneeId(assignee.emailAddress)
}
issueParameters.addCustomFieldValue(10504, "my field new value") //long customfield id
IssueService.CreateValidationResult createValidationResult = issueService.validateCreate(currentUser, issueParameters)
if (createValidationResult.isValid()) {
IssueService.IssueResult createResult = issueService.create(currentUser, createValidationResult)
if (!createResult.isValid()) {
log.error(createResult.getErrorCollection().toString())
} else {
log.error(createResult.getIssue())
//example to create link between current issue to the new created issue
issueLinkManager.createIssueLink(issue.getId(), createResult.getIssue().getId(), 10003, 1, currentUser)
}
} else {
log.error(createValidationResult.getErrorCollection().toString())
}
} catch (e) {
log.error(e.toString())
}
}
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Hi @Nir Haimov
Thanks a lot! Really appreciate your response on this. I tried and it is working in JIRA 8.8.0.
So ideally usage of createIssueObject() was incorrect. In JIRA 8.x we should use
issueService.validateCreate() and issueService.create() methods for issue creation during transitions in workflow post functions. I had raised a case with Atlassian support also but I haven't received any solution/suggestion from them regarding these methods.
If you suggest I will open another thread but would you suggest our current PROD JIRA version is 7.10.2 and we are testing 8.8.0 in JIRA DEV where several workflow post functions are failing because of createIssueObject().
We have approx 500 projects and several workflows. So we will have to change createIssueObject() everywhere i.e. in each and every transition post function groovy. What is the best way to compare APIs that might change between JIRA 7.10 & JIRA 8.x
Thanks for your quick response.
Regards
Shradha
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Atlassian not supporting development in Jira, especially not in Scriptrunner which is a 3rd party plugin.
i would suggest you not to update to 8.8.0 just yet, many companies did not updated their plugins to compitable with Jira 8.8.0 (i guess because of the COVID-19)
I think 8.5.1 will be a better start, later you can upgrade to a later version of Jira, there are no API changes between Jira 8 versions.
Best way to solve you API code issues, is to see where the IDE shows you errors (in red lines) that means something change from your old code in Jira 7.X to new code in Jira 8.X
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Hi @Nir Haimov
Can you please have a look at this issue and respond. It is somewhat similar to a post where u had suggested solution
Regards
Shradha
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.
Groovy:
import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.crowd.embedded.api.User
import com.atlassian.jira.issue.IssueFactory
import com.atlassian.jira.project.ProjectManager
import com.atlassian.jira.project.Project
import com.atlassian.jira.user.util.UserUtil
import com.atlassian.jira.issue.customfields.CustomFieldType
import com.atlassian.jira.issue.customfields.*
import com.atlassian.jira.issue.CustomFieldManager
import com.atlassian.jira.issue.IssueManager
import com.atlassian.jira.issue.index.IndexException
import com.atlassian.jira.user.util.UserUtil
import com.atlassian.jira.bc.issue.search.SearchService
import com.atlassian.jira.issue.MutableIssue
import com.atlassian.jira.issue.Issue;
import com.atlassian.jira.web.bean.PagerFilter
import com.atlassian.jira.issue.util.DefaultIssueChangeHolder
import com.atlassian.jira.issue.CustomFieldManager
import com.atlassian.jira.issue.ModifiedValue
import com.atlassian.fugue.Option
import org.apache.log4j.Category
import com.atlassian.jira.issue.issuetype.IssueType
import com.atlassian.jira.issue.link.IssueLinkType
import com.atlassian.jira.issue.IssueManager
import com.atlassian.jira.issue.link.IssueLinkTypeManager
import com.atlassian.crowd.embedded.api.User
import com.atlassian.jira.issue.Issue
import com.atlassian.jira.issue.MutableIssue
import com.atlassian.plugin.PluginAccessor
import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.security.JiraAuthenticationContext
import com.atlassian.jira.user.ApplicationUser
import com.atlassian.jira.issue.index.IssueIndexingService
import com.atlassian.jira.issue.util.DefaultIssueChangeHolder
import com.atlassian.jira.issue.util.IssueChangeHolder
import com.opensymphony.workflow.InvalidInputException
import com.atlassian.jira.issue.label.Label
import com.atlassian.jira.issue.label.LabelManager
import com.atlassian.jira.workflow.WorkflowTransitionUtil
import com.atlassian.jira.util.JiraUtils
import com.atlassian.jira.exception.CreateException
import com.atlassian.jira.workflow.WorkflowTransitionUtilImpl
import com.atlassian.jira.issue.fields.config.FieldConfig
import com.atlassian.jira.issue.customfields.manager.OptionsManager
import com.atlassian.jira.issue.customfields.option.Option
import com.atlassian.jira.issue.customfields.option.Options
import com.atlassian.jira.issue.context.IssueContextImpl
def userPropertyManager = ComponentAccessor.getUserPropertyManager();
def userManager = ComponentAccessor.getUserManager();
def issueFactory = ComponentAccessor.getIssueFactory()
def projectMgr = ComponentAccessor.getProjectManager()
def issueMgr = ComponentAccessor.getIssueManager()
CustomFieldManager customFieldManager = ComponentAccessor.getCustomFieldManager()
def authenticationContext = ComponentAccessor.getJiraAuthenticationContext()
def issueManager = ComponentAccessor.getIssueManager()
def issueIndexService = ComponentAccessor.getComponent(IssueIndexingService.class)
MutableIssue epicIss = issueFactory.getIssue()
ApplicationUser currentUser = authenticationContext.getLoggedInUser()
def projectManager = ComponentAccessor.getProjectManager()
epicIss.issueTypeId = '10000'
Project prjObj = projectManager.getProjectObjByKey('AVSREQ')
//def component="team1"
def compVal = ComponentAccessor.getProjectComponentManager().findByComponentName(prjObj.getId(),component)
println "compVal ---"+compVal
epicIss.setComponent([compVal])
println "component setting-----"
def accountName = "TEST SYSTEMS FOR EMPLOYEE"
def customField = customFieldManager.getCustomFieldObjectByName("Customer(s)")
IssueContextImpl issueContext = new IssueContextImpl(prjObj.getId(), "10000")
FieldConfig fieldConfig = customField.getRelevantConfig(issueContext)
OptionsManager optManager = ComponentAccessor.getOptionsManager()
Options options = optManager.getOptions(fieldConfig);
Iterator iterator = options.iterator()
def customerList
while(iterator.hasNext()) {
Option option = iterator.next();
if(accountName.equalsIgnoreCase(option.getValue())) {
customerList = option
println "customer ---- option "+option
break;
}
}
epicIss.setCustomFieldValue(customFieldManager.getCustomFieldObjectByName("Customer(s)"), [customerList])
println "customer setting-----"
//MutableIssue newIssue = issueFactory.getIssue()
def projectManager = ComponentAccessor.getProjectManager()
Project prjObj = projectManager.getProjectObjByKey('AVSREQ')
ApplicationUser currentUser = authenticationContext.getLoggedInUser()
def epicName = customFieldManager.getCustomFieldObjectByName('Epic Name')
//def reqType = customFieldManager.getCustomFieldObjectByName('Request Type')
//def epicnameval = issue.getKey()+" ("+issue.getCustomFieldValue(reqType) +")"
def epicnameval = "TEST EPIC NAME BY SS"
System.out.println "--epicnameval issue" + epicnameval
epicIss.setCustomFieldValue(epicName, epicnameval)
Map newIssueParams = ["issue":epicIss] as Map<String,Object>
try{
def issueManager = ComponentAccessor.getIssueManager()
def issueIndexService = ComponentAccessor.getComponent(IssueIndexingService.class)
Issue newIssueGv = issueManager.createIssueObject(currentUser, newIssueParams)
issueIndexService.reIndex(newIssueGv);
if (newIssueGv.isCreated())
{
println "inside issue created----"
}else{
println "inside issue creation failed ----"
}
}catch(CreateException e){
System.out.println("++++++CreateException "+e.printStackTrace())
}
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Atlassian Government Cloud has achieved FedRAMP Authorization at the Moderate level! Join our webinar to learn how you can accelerate mission success and move work forward faster in cloud, all while ensuring your critical data is secure.
Register Now
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.