Forums

Articles
Create
cancel
Showing results for 
Search instead for 
Did you mean: 

How to update custom field in epic when Story is removed or updated

J Manas Kumar
Contributor
March 12, 2020

Hi I have a requirement  where i have a custom field which is present in both epic and story.

when story is removed from an epic i will check the CF unique value in Epic and then i will remove if it wont find in any other Story Issue Custom Field.

I have started the code for but not sure its right or wrong.

Is it right or worng direction, or i have to use linked issue for this operation?

can anyone help me?

 

import com.atlassian.jira.issue.Issue
import com.atlassian.jira.issue.link.IssueLink
import com.atlassian.jira.issue.MutableIssue
import com.atlassian.jira.user.ApplicationUser
import com.atlassian.jira.bc.issue.IssueService
import com.atlassian.jira.issue.fields.CustomField
import com.atlassian.jira.issue.IssueInputParameters
import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.event.type.EventDispatchOption
import com.atlassian.jira.issue.customfields.option.Option
import com.atlassian.jira.issue.search.SearchProvider
import com.atlassian.jira.jql.parser.JqlQueryParser
import com.atlassian.jira.web.bean.PagerFilter

import com.atlassian.jira.util.ImportUtils
import com.atlassian.jira.issue.index.IssueIndexingService
import com.atlassian.jira.bc.issue.search.SearchService

import org.apache.log4j.Logger

Issue epicIssue = event.issue
String issuetype = epicIssue.getIssueType().getName()


if(issuetype == "Epic"){

if (event?.getChangeLog()?.getRelated("ChildChangeItem")?.find { it.field == "Impacted Application/s" }) {

def changeItem = event?.getChangeLog()?.getRelated("ChildChangeItem")?.find { it.field == "Impacted Application/s" }
String[] newValue = changeItem.get("newstring").toString().split(';')
String[] oldValue = changeItem.get("oldstring").toString().split(';')

log.debug("New Value: "+newValue)
log.debug("Old Value: "+oldValue)

//Split and get array of entries per CSI

if( (oldValue[0] == 'null') || newValue.size() < oldValue.size()){

def customFieldManager = ComponentAccessor.getCustomFieldManager()
def ImpactedAppField = customFieldManager.getCustomFieldObjectByName("Impacted Application/s")
String ImpactedAppValue = epicIssue.getCustomFieldValue(ImpactedAppField)
log.debug("Value in Impacted App field is: "+ImpactedAppValue)
log.debug("Value in Event is: "+ event?.getChangeLog()?.getRelated("ChildChangeItem")?.find { it.field == "Impacted Application/s" })

 

// here i am getting the value of Epic Issue's Custom Field

cf = customFieldManager.getCustomFieldObjectByName("Epic Link")
def epicValue = epicIssue.getCustomFieldValue(cf)




def userManager = ComponentAccessor.getUserManager()
ApplicationUser admin = userManager.getUserByName("INT_JIRA")
def jqlQueryParser = ComponentAccessor.getComponent(JqlQueryParser.class)
def searchService = ComponentAccessor.getComponent(SearchService)
def searchProvider = ComponentAccessor.getComponent(SearchProvider.class)

def query ="\"Epic Link\" in (${epicIssue.key})"


SearchService.ParseResult parseResult = searchService.parseQuery(admin, query)
def result = searchService.search(admin, parseResult.getQuery(), PagerFilter.getUnlimitedFilter())
}
}
}

 

 

 

Regards

Manas

0 answers

Suggest an answer

Log in or Sign up to answer