Copy values from Epic to Story on creation

Hi,

we use the Behaviors plugin to copy values from story to subtask on creation.

This script is working well:

import com.atlassian.jira.ComponentManager
import com.atlassian.jira.issue.Issue
import com.atlassian.jira.issue.IssueManager
import com.atlassian.jira.issue.CustomFieldManager
import com.atlassian.jira.issue.fields.CustomField
import com.atlassian.jira.issue.customfields.option.Option
import com.opensymphony.workflow.loader.StepDescriptor
 
def ComponentManager componentManager = ComponentManager.getInstance(); 
def issueid = getFieldById("parentIssueId").value;
def Issue parentIssue = componentManager.getIssueManager().getIssueObject(Long.parseLong(issueid));
// Check workflow ID
if (Double.parseDouble(componentManager.getWorkflowSchemeManager().getWorkflowScheme(parentIssue.getProject()).get("id").toString()) == 11600 ||
Double.parseDouble(componentManager.getWorkflowSchemeManager().getWorkflowScheme(parentIssue.getProject()).get("id").toString()) == 11601)
{
// Set Cost Unit
def FormField cu = getFieldById(getFieldChanged());
def CustomFieldManager customFieldManager = componentManager.getCustomFieldManager();
def CustomField parentcustomField = customFieldManager.getCustomFieldObjectByName("Cost Unit");
def Option parentnrd = (Option)parentIssue.getCustomFieldValue(parentcustomField);
cu.setFormValue(parentnrd.getOptionId());
    
// Set FixVersions
def fixVersions = parentIssue.getFixVersions();
def FormField fv = getFieldById("fixVersions");
fv.setFormValue(fixVersions*.id);
    
// Set Components
def components = parentIssue.getComponentObjects();
def FormField c = getFieldById("components");
c.setFormValue(components*.id); 
    
}

 

Now we try the same when creating a story from an epic using the "Issues in Epic" "+" function but with no success. The information about the parent epic must be available because in the headline of the story create dialog we can see "Create issue in epic: TEST-1".

Does anyone know what we are doing wrong and how we can solve this problem?

Best regards,

Jo

5 answers

1 accepted

This widget could not be displayed.

Finally we manged to get the information from the Epic.

This is the script we use:

import com.atlassian.jira.ComponentManager
import com.atlassian.jira.issue.Issue
import com.atlassian.jira.issue.IssueManager
import com.atlassian.jira.issue.CustomFieldManager
import com.atlassian.jira.issue.fields.CustomField
import com.atlassian.jira.issue.customfields.option.Option
def ComponentManager componentManager = ComponentManager.getInstance(); 
def FormField field = getFieldByName("Epic Link");
if (field != null)
{
def Issue parentIssue = componentManager.getIssueManager().getIssueObject(field.getValue().toString().substring(4));
// Check workflow ID
def wf = componentManager.getWorkflowSchemeManager().getWorkflowScheme(parentIssue.getProject()).get("id").toString();
if (Double.parseDouble(wf) == 11600 ||
Double.parseDouble(wf) == 11601)
{
   
// Set Cost Unit
def CustomFieldManager customFieldManager = componentManager.getCustomFieldManager();
def CustomField parentcustomField = customFieldManager.getCustomFieldObjectByName("Cost Unit");
def Option parentnrd = (Option)parentIssue.getCustomFieldValue(parentcustomField);
def FormField cu = getFieldById(getFieldChanged());
cu.setFormValue(parentnrd.getOptionId());
    
}
}

 

Best regards,

 

Jo

 

Hello CGM,

I was trying to use your script, but I get the 'unable to get the class FormField' message

@ line 08, 22 column 15

I am using:

JIRA server v7.2.7

Adaptavist ScriptRunner for JIRA v4.3.19

 

Can you help me?

Best regards,
Tatiana

Hello Tatiana,

we changed the script because it stopped working after upgrading to 7.x.

The new version is working but you have to change the workflow ID to your ID and you need to have the JIRA Software version and not JIRA Core.

import com.atlassian.jira.issue.Issue
import com.atlassian.jira.issue.IssueManager
import com.atlassian.jira.issue.CustomFieldManager
import com.atlassian.jira.issue.fields.CustomField
import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.issue.customfields.option.Option
import com.opensymphony.workflow.loader.StepDescriptor
import com.onresolve.jira.groovy.user.FormField
 
if (getFieldById("parentIssueId") != null)
{
 def issueid = getFieldById("parentIssueId").value;
 if (issueid != null)
 {
  def Long issueIdLong = java.lang.Long.parseLong(issueid.toString());
  def Issue parentIssue = ComponentAccessor.getIssueManager().getIssueObject(issueIdLong);
  if(parentIssue != null)
  {
   // Check Workflow ID
   if (Double.parseDouble(ComponentAccessor.getWorkflowSchemeManager().getWorkflowScheme(parentIssue.getProjectObject()).get("id").toString()) == 12402 ||
    Double.parseDouble(ComponentAccessor.getWorkflowSchemeManager().getWorkflowScheme(parentIssue.getProjectObject()).get("id").toString()) == 12401)
   {
// Set FixVersion
def fixVersions = parentIssue.getFixVersions();
def FormField fv = getFieldById("fixVersions");
fv.setFormValue(fixVersions*.id);
//if (fixVersions != null) fillenrd.setHelpText(fixVersions.iterator().next().getName());
    
// Set Components
def components = parentIssue.getComponents();
def FormField c = getFieldById("components");
c.setFormValue(components*.id);
    
//fillenrd.setHelpText(componentManager.getWorkflowSchemeManager().getWorkflowScheme(parentIssue.getProject()).get("id").toString());
}
}
}
}

Best regards,

Joachim

Hello Joachim,

Thank you very much for your update. Do you have also the script for the epic?

Regards,
Tatiana

Hello Tatiana,

sorry my fault. Here is the script for the Epic:

import com.atlassian.jira.issue.Issue
import com.atlassian.jira.issue.IssueManager
import com.atlassian.jira.issue.CustomFieldManager
import com.atlassian.jira.issue.fields.CustomField
import com.atlassian.jira.issue.customfields.option.Option
import com.atlassian.jira.component.ComponentAccessor
import com.onresolve.jira.groovy.user.FormField

def FormField field = getFieldByName("Epic Link");
if (field != null)
{
 def Issue parentIssue = ComponentAccessor.getIssueManager().getIssueObject(field.getValue().toString().substring(4));
 if (parentIssue != null)
    {
  // Check Workflow ID
  def wf = ComponentAccessor.getWorkflowSchemeManager().getWorkflowScheme(parentIssue.getProjectObject()).get("id").toString();
  if (Double.parseDouble(wf) == 12401 || Double.parseDouble(wf) == 12402)
  {
      // Set Cost Unit only when creating issues
   if (getActionName().equals("Create"))
            {
    def CustomFieldManager customFieldManager = ComponentAccessor.getCustomFieldManager();
    def CustomField parentcustomField = customFieldManager.getCustomFieldObjectByName("Cost Unit");
    def Option parentnrd = (Option)parentIssue.getCustomFieldValue(parentcustomField);
    def FormField cu = getFieldById(getFieldChanged());
    cu.setFormValue(parentnrd.getOptionId());
   }
  }
 }
}
This widget could not be displayed.

Jo,

Epic link and Epic name are fields in story. So you can use searchService to find issues using JQL query.

using parentIssue or issue.getParentObject() will now work in this case. It only works for Issues and subtasks. Here you can find some code you use:

import com.atlassian.crowd.embedded.api.User
import com.atlassian.jira.bc.issue.search.SearchService
import com.atlassian.jira.issue.search.SearchResults

User user = ComponentAccessor.getJiraAuthenticationContext().getUser().getDirectoryUser();
SearchService searchService = ComponentAccessor.getComponent(SearchService.class);

String jqlSearch="here put your jql";
Long counter=null;
SearchService.ParseResult parseResult = searchService.parseQuery(user, jqlSearch);
if (parseResult.isValid()) {
    SearchResults results=searchService.search(user, parseResult.getQuery(),PagerFilter.getUnlimitedFilter())
    counter = results.getTotal();
    log.error("number of results:"+counter+" for query: "+jqlSearch);
} 
else {
    log.error("Incorrect JQL query: " + jqlSearch);


}
//process results
This widget could not be displayed.

Hrm... in your example you get the parentIssueId from the form, which is correct for getting the parent. But there is nothing available for getting the issue that the new issue will be linked to.

I don't think Robert's example will work because the epic link is not created until the issue is submitted. Even so, I'd probably use IssueLinkManager rather than jql.

You should be able to get the epic from the "epic link" field, but it doesn't seem to be present, perhaps because it's disabled.

I created https://jamieechlin.atlassian.net/browse/GRV-765 - please vote for it if you want to see it fixed.

 

 

This widget could not be displayed.

Thank you both for your fast answer. We will test Roberts script and have a look at the IssueLinkManager in the next days.

When creating a Story from Epic, I can see the name and ID of the epic in the create dialog so the information must be there:

image2015-7-28 8:46:23.png

We only have to find it smile

Best regards,

Jo

I can't see it working with Robert's script. You're right, the page knows about it, but it's not being passed to your behaviours script.

This widget could not be displayed.
Andreas Knecht Community Champion Nov 21, 2016

There's now a very easy to configure way to copy field values from epics to stories using Automation for JIRA!

You can easily modify related issues (such as parents, stories, sub-tasks, epics, linked issues and even JQL) using our related issues action and condition:

(this example transitions the stories in the epic, but you could just as easily edit the stories in the epic and set values based on the fields in the epic)

For more details see https://blog.codebarrel.io/synchronize-parent-and-sub-task-issues-with-automation-for-jira-bdcca6c9d453

Suggest an answer

Log in or Sign up to answer
Atlassian Summit 2018

Meet the community IRL

Atlassian Summit is an excellent opportunity for in-person support, training, and networking.

Learn more
Community showcase
Posted Wednesday in New to Jira

Are you planning to trial, or are currently trialling Jira Software? - We want to talk to you!

Hello! I'm Rayen, a product manager at Atlassian. My team and I are working hard to improve the trial experience for Jira Software Cloud. We are interested in   talking to 20 people planning t...

139 views 2 0
Join discussion

Atlassian User Groups

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

Find a group

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

Find my local user group

Unfortunately there are no AUG chapters near you at the moment.

Start an AUG

You're one step closer to meeting fellow Atlassian users at your local meet up. Learn more about AUGs

Groups near you