Update Epic link after clone in post function

Hi,

I’m writing a script that is used in a post function, the script should clone an issue into an epic and if the issue had sub tasks clone each of them into a story.

I got it all working except for one thing, setting the link between the Epic and the stories.

I looked at many posts and now I’m at the stage that I can create such a link when I do my test on an epic and story that already exist from the script console. However this doesn’t work when I do this in the post function. If I use an existing Story instead of the one cloned in the script, it works.

I tried to use ‘doAfterCreate’ but when I try this the code inside this section doesn’t run.  I also get a warning :  the variable [doAfterCreate] is undeclared.

 

I’m using Jira version 7.2.8

Script runner version 5.1.0

 

Any help will be appreciated.

 

Thanks,

Alon

 

Here is the script:

 

import com.atlassian.jira.user.util.UserUtil

import com.atlassian.jira.ComponentManager

import com.atlassian.jira.component.ComponentAccessor

import com.atlassian.jira.issue.link.IssueLink

import com.atlassian.jira.issue.link.IssueLinkTypeManager

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.Issue

import com.atlassian.jira.issue.IssueInputParameters

import com.atlassian.jira.project.Project

import com.atlassian.jira.config.SubTaskManager

import com.atlassian.jira.user.ApplicationUser

import com.atlassian.jira.issue.MutableIssue

import com.atlassian.jira.issue.IssueFactory

import com.atlassian.jira.issue.IssueManager

import com.atlassian.jira.issue.CustomFieldManager;

import com.atlassian.jira.issue.fields.CustomField;

import com.atlassian.jira.issue.link.IssueLinkTypeManager;

import com.atlassian.jira.workflow.TransitionOptions

 

import com.atlassian.jira.issue.ModifiedValue

import com.atlassian.jira.issue.util.DefaultIssueChangeHolder

 

// log = Category.getInstance("com.onresolve.jira.groovy.CreateDependentIssue")

 

 

// to run in script console on specifi issue - use:

def issueManager = ComponentAccessor.getIssueManager()

Issue newReq = issueManager.getIssueObject("A-12")

 

// check if sub tasks exist

newReq.subTaskObjects.size() >= 1

 

// clone the new req to Epic + create stories from sub tasks

 

IssueFactory issueFactory = ComponentAccessor.getIssueFactory()

MutableIssue newEpic = issueFactory.getIssue()

 

newEpic.setSummary ("Epic created from new Requierement " + newReq.summary)

newEpic.setParentObject(newReq)

newEpic.setProjectObject(newReq.getProjectObject())

 

newEpic.setIssueTypeId("10100") //10100 == Epic

newEpic.description = newReq.description

newEpic.reporter = newReq.getReporter()

newEpic.assignee = newReq.getAssignee()

 

def currentUserObj = ComponentAccessor.getJiraAuthenticationContext().getLoggedInUser()

 

Map<String,Object> newIssueParams = ["issue" : newEpic] as Map<String,Object>

issueManager.createIssueObject(currentUserObj, newIssueParams)

 

// create link between the new Req and the Epic

 

def issueLinkTypeManager = ComponentAccessor.getComponent(IssueLinkTypeManager)

def issueLinkManager = ComponentAccessor.getIssueLinkManager();

 

def duplicateLinkTypeName = "Create"

 

def duplicateLinkType = issueLinkTypeManager.getIssueLinkTypesByName(duplicateLinkTypeName)

 

if (!duplicateLinkType) {

    log.warn ("Issue link type with name: ${duplicateLinkTypeName} does not exist")

}

else {

    issueLinkManager.createIssueLink(newReq.id, newEpic.id, duplicateLinkType[0].id, Long.valueOf(1), currentUserObj)

}

 

 

// clone the sub tasks into stories

 

 

def subtasks = newReq.getSubTaskObjects()

// if there are no subtasks to clone, do nothing

 

 

subtasks.each {subtask ->         

 

    println "sub taks: " + subtask

    MutableIssue newStory = issueFactory.getIssue()

    newStory.setSummary ("Story created from new Requierement sub task" + subtask.getSummary())

    newStory.setIssueTypeId("10101") //10100 == Story

    newStory.description = subtask.getDescription()

    newStory.reporter = subtask.getReporter()

    newStory.assignee = subtask.getAssignee()          

 

    newStory.setParentObject(newReq)

    newStory.setProjectObject(newReq.getProjectObject())         

 

    Map<String,Object> newStoryParams = ["issue" : newStory] as Map<String,Object>

        issueManager.createIssueObject(currentUserObj, newStoryParams)

       

        // link the new stories to the new Epic

 

                println "newStory:" + newStory

 

   // doAfterCreate = {        

       

        def epicLinkField = ComponentAccessor.customFieldManager.getCustomFieldObjects(newStory).find{it.name == 'Epic Link'}

        if(!epicLinkField) {log.debug "No Epic Link field"; return}

                               

       

        // newEpic.setCustomFieldValue(epicLinkField,newStory)

epicLinkField.updateValue(null, newStory, new ModifiedValue(newStory.getCustomFieldValue(epicLinkField), newEpic),new DefaultIssueChangeHolder())

       

        println "epicLinkField:"+ epicLinkField

        println "newEpic:" + newEpic

        

       

   // }

}

 

 

 

 

 

 

 

1 answer

This widget could not be displayed.
Lx8 Co I'm New Here Mar 01, 2018

Hi didn't manage to solve it, we have the same problem. Thanks

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
Published Jul 25, 2018 in Marketplace Apps

Jira Cloud and Bitbucket Cloud Integration with Microsoft Teams

One of the newest products in the Microsoft family - Microsoft Teams,  is a chat-based hub for teamwork that integrates all the people, content, and tools your team needs to be more engaged and ...

734 views 0 3
Read article

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