Hello.
I'm trying to adapt a script from the following website:
Even though I don't know groovy, nor java, I somehow (thanks to google and atlassian developer site) made it to the point where script enters succesfully the last "if". Now I'm experiencing the problem than I can't find solution to. One of the last statements of the code throws following error:
2013-08-07 11:16:37,977 Thread-997 DEBUG test_user 676x14687x1 fm4ix2 ***.***.***.*** /secure/QuickCreateIssue.jspa [onresolve.jira.groovy.PostFunction] Script executed this code 2013-08-07 11:16:37,977 Thread-997 ERROR test_user 676x14687x1 fm4ix2 ***.***.***.*** /secure/QuickCreateIssue.jspa [onresolve.jira.groovy.GroovyRunner] The script failed : javax.script.ScriptException: javax.script.ScriptException: groovy.lang.MissingPropertyException: No such property: IssueLinkTypeManager for class: Script13 2013-08-07 11:16:37,977 Thread-997 ERROR test_user 676x14687x1 fm4ix2 ***.***.***.*** /secure/QuickCreateIssue.jspa [onresolve.jira.groovy.GroovyFunctionPlugin] Error executing post-function javax.script.ScriptException: javax.script.ScriptException: groovy.lang.MissingPropertyException: No such property: IssueLinkTypeManager for class: Script13
I'm afraid I need some help. Can anybody tell me what I'm doing wrong? I also don't understand this statement:
def issueLinkTypeManager = componentManager.getComponentInstanceOfType(IssueLinkTypeManager.class);
Am I wrong or is it trying to get some parameter of variable during definition of the very same variable? Or is IssueLinkTypeManager (with capital "i") some api interface, and issueLinkTypeManager just a variable?
What should I do to make the code work properly? Here is the whole script:
import com.atlassian.jira.ComponentManager; import com.atlassian.jira.component.ComponentAccessor; import org.apache.log4j.Category; import com.atlassian.jira.issue.IssueManager; def Category log = Category.getInstance("com.onresolve.jira.groovy.PostFunction"); log.setLevel(org.apache.log4j.Level.DEBUG); def ComponentManager componentManager = ComponentManager.getInstance(); def customFieldManager = componentManager.getCustomFieldManager(); def parentTaskIDCF = customFieldManager.getCustomFieldObject('customfield_12101');//write your own custom field id here def parentTaskID = issue.getCustomFieldValue(parentTaskIDCF); if (parentTaskID == null || parentTaskID == '') { return true; } else { def issueManager = ComponentAccessor.getIssueManager(); def parentIssue = issueManager.getIssueObject(parentTaskID); def isParentIssueValid = (parentIssue != null); if (isParentIssueValid) { log.debug "Script executed this code"; def issueLinkManager = ComponentAccessor.getIssueLinkManager(); def issueLinkTypeManager = componentManager. getComponentInstanceOfType(IssueLinkTypeManager.class); def issueLinkType = issueLinkTypeManager. getIssueLinkTypesByName('Relates').get(0); def authenticationContext = componentManager. getComponentInstanceOfType(JiraAuthenticationContext.class); issueLinkManager.createIssueLink( issue.id, parentIssue.id, issueLinkType.id, 1L, authenticationContext.user); } }
Thanks in advance!
Try this:
import com.atlassian.jira.ComponentManager import com.atlassian.jira.component.ComponentAccessor import com.atlassian.jira.issue.MutableIssue import com.atlassian.jira.issue.link.IssueLinkTypeManager import org.apache.log4j.Category MutableIssue issue = issue Category log = log log.setLevel(org.apache.log4j.Level.DEBUG); def ComponentManager componentManager = ComponentManager.getInstance(); def customFieldManager = componentManager.getCustomFieldManager(); def parentTaskIDCF = customFieldManager.getCustomFieldObject('customfield_12101');//write your own custom field id here def parentTaskID = issue.getCustomFieldValue(parentTaskIDCF); if (parentTaskID == null || parentTaskID == '') { return true; } else { def issueManager = ComponentAccessor.getIssueManager(); def parentIssue = issueManager.getIssueObject(parentTaskID); def isParentIssueValid = (parentIssue != null); if (isParentIssueValid) { log.debug "Script executed this code"; def issueLinkManager = ComponentAccessor.getIssueLinkManager(); def issueLinkTypeManager = componentManager.getComponentInstanceOfType(IssueLinkTypeManager.class); def issueLinkType = issueLinkTypeManager.getIssueLinkTypesByName('Relates').asList()[0]; def authenticationContext = componentManager.jiraAuthenticationContext; issueLinkManager.createIssueLink(issue.id, parentIssue.id, issueLinkType.id, 1L, authenticationContext.getLoggedInUser()); } }
There was an import missing. I also made some small other adjustments. I assume that the parentTaskIDCF contains valid issue id, correct?
If this doesn't work it's always a good idea to throw some debug messages in to test the script.
log.debug "Parent ID: ${parentTaskID}"
Henning
It works like a charm! Thank you very much!
Yes, issue id is always valid. I use database child custom field to retrieve it and make it read only. Also validating it against beeing "null".
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Useful answer, thanks!
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.