Come for the products,
stay for the community

The Atlassian Community can help you and your team get more value out of Atlassian products and practices.

Atlassian Community about banner
Community Members
Community Events
Community Groups

JIRA Server 7.3.4 with JMWE - Groovy help to copy an issue.

Hi Team.  

Scenario:  On transition from New -> Approved, determine if a custom field checkbox is checked.  If checked, clone the ticket to another project and link to this ticket.

Details: JIRA Server 7.3.4 with JMWE 

User level:  I'm a Groovy newb.  I am the JIRA application admin but not the sys admin.


This code is getting me a 1 if the checkbox is checked.  So I feel like I am on the right track there.

import com.atlassian.jira.component.ComponentAccessor;
import com.atlassian.jira.ComponentManager;
import com.atlassian.jira.issue.CustomFieldManager;
import com.atlassian.jira.issue.fields.CustomField;
import com.atlassian.jira.issue.IssueManager;
import com.atlassian.jira.issue.Issue;
def issueManager = ComponentAccessor.getIssueManager()
def customFieldManager = ComponentAccessor.getCustomFieldManager()
def cField = customFieldManager.getCustomFieldObjectsByName("HR: Personnel Change (Needs Facilities)?")
def cFieldValue = issue.getCustomFieldValue(cField).toString();

if (cFieldValue == "[Yes]") { return "1" }
else { return cFieldValue }

As for the copy/linking part...  I've scoured the internet and all I can find are a bunch of code snippets to copy using ScriptRunner.  I can't add additional libraries as I am not the system administrator, just the app admin.  Keep running into class issues and method challenges.  

The most promising code I found is this:

package example.CloneTicketAndLink

import com.atlassian.jira.event.issue.AbstractIssueEventListener
import com.atlassian.jira.event.issue.IssueEvent
import com.atlassian.jira.user.util.UserUtil
import com.atlassian.jira.ComponentManager
import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.util.ImportUtils
import com.atlassian.crowd.embedded.api.User;
import com.opensymphony.workflow.WorkflowContext
import org.apache.log4j.Category
import com.atlassian.jira.issue.customfields.CustomFieldType
import com.atlassian.jira.issue.CustomFieldManager
import com.atlassian.jira.issue.fields.CustomField
import com.atlassian.jira.issue.IssueManager
import com.atlassian.jira.project.ProjectManager
import com.atlassian.jira.project.Project
import com.atlassian.jira.issue.IssueFactory;

class TaskVersionListener extends AbstractIssueEventListener {
Category log = Category.getInstance(TaskVersionListener.class)

void workflowEvent(IssueEvent event) {
def issue = event.getIssue()
if ( issue.getIssueTypeId() == "XXXXX" ) { // The Issue Type to catch in the Listener
def projectName = "YYYYY" //Target project name

def issueMgr = ComponentManager.getInstance().getIssueManager()
def projectMgr = ComponentManager.getInstance().getProjectManager()
String currentUser = event.getUser().getName();
User currentUserObj = ComponentAccessor.getJiraAuthenticationContext().getLoggedInUser();
ComponentManager componentManager=ComponentManager.getInstance()
CustomFieldManager customFieldManager = componentManager.getCustomFieldManager()

def issueFactory = ComponentManager.getInstance().getIssueFactory()
def newissue = issueFactory.getIssue()
newissue.setSummary (issue.summary)
newissue.setProject (projectMgr.getProjectByName(projectName))
newissue.setIssueTypeId("JJJJ") //The ID of the target Issue Type
newissue.description = issue.description
newissue.reporter = issue.getReporter()

//Set the Project Lead of the target project as assignee of the new ticket
def project = projectMgr.getProjectObjByName(projectName)

//Copy the fields that you want
def cf = null;
//ZZZZZ (list)
cf = customFieldManager.getCustomFieldObjects(issue).find { == 'ZZZZZ'}
newissue.setCustomFieldValue(cf, issue.getCustomFieldValue(cf))
//YYYYYY (date) another way to obtain the custom field
cf = customFieldManager.getCustomFieldObject("customfield_NNNNN");
newissue.setCustomFieldValue(cf, issue.getCustomFieldValue(cf))
//XXXXXX (text, numeric, ...)
cf = customFieldManager.getCustomFieldObjects(issue).find { == 'XXXXX'}
newissue.setCustomFieldValue(cf, issue.getCustomFieldValue(cf))

def params = ["issue":newissue]
def subTask = issueMgr.createIssue(currentUserObj, params)

def linkMgr = ComponentManager.getInstance().getIssueLinkManager()
linkMgr.createIssueLink (,, Long.parseLong("ZZZZZ"),Long.valueOf(1), currentUserObj) //ZZZZZ is the id of the type of link


But my version of JIRA doesn't like those first two imports.  Links, references, anything is helpful.  I'm totally stuck. :(

- Christa

1 answer

1 accepted

1 vote
Answer accepted

Hi Christa,

the code you likely copied from the Internet is meant for ScriptRunner, not JMWE. To check whether a checkbox is checked, see

As for copying the issue, you should just use the "Create/Clone Issue" post-function, with the checkbox-checking code as the Conditional Execution script.


Thank you for breaking me out of my rut and making me rethink the approach.  Using Create/Clone issue worked perfectly and the link above made my life simpler.  

Seriously.  Thank you.

For anyone curious, my post function looks like this:

Create a new issue:
Project: FAC
Issue type: Room Change
Link type: 5-related task (Related)
Summary: Set value from Groovy Template:
Seating Change - <%=issue.get("summary")%>

Run this post-function conditionally.

I'll refine it over time.  :)

- Christa 

Suggest an answer

Log in or Sign up to answer
Community showcase
Published in Confluence

An update on Confluence Cloud customer feedback – June 2022

Hi everyone, We’re always looking at how to improve Confluence and customer feedback plays an important role in making sure we're investing in the areas that will bring the most value to the most c...

183 views 1 3
Read article

Community Events

Connect with like-minded Atlassian users at free events near you!

Find an event

Connect with like-minded Atlassian users at free events near you!

Unfortunately there are no Community Events near you at the moment.

Host an event

You're one step closer to meeting fellow Atlassian users at your local event. Learn more about Community Events

Events near you