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