Hello. Listener newbie here.
I have the typical hierarchy structure -- Epic > Stories > Sub-tasks -- with all of the work happening at the Sub-task level.
Each Epic/Story/Sub-task has:
I'm trying to write a custom listener:
I have the following script that looks at the Epic-Story relationship first. I figured out how to get the min and max dates of the stories, but I cannot figure out how to actually update the Epic Due Date. Can someone help, please?
import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.issue.Issue
import com.atlassian.jira.issue.MutableIssue
import java.sql.Timestamp
import org.apache.log4j.Logger
import org.apache.log4j.Level
def logFile = Logger.getLogger("")
logFile.setLevel(Level.DEBUG)
def issue = event.issue as Issue
//Check that current issue is an Epic
if(issue.issueType.name == "Epic")
{
//Initialize appropriate managers
def linkManager = ComponentAccessor.issueLinkManager
def cfm = ComponentAccessor.customFieldManager
//Get the story's date custom field and initialize a list to hold the date values
def storyStartDateField = cfm.getCustomFieldObjectByName("Start Date")
def storyStartDates = [] as List<Date>
//Get the story's due date and initialize a list to hold the date values
def storyDueDateField = issue.getDueDate()
def storyDueDates = [] as List<Date>
//Loop through all of Epic's stories and collect their date objects
linkManager.getOutwardLinks(issue.id).each{
if(it.issueLinkType.name == "Epic-Story Link")
{
def storyIssue = it.destinationObject
storyStartDates.add(storyIssue.getCustomFieldValue(storyStartDateField) as Date)
storyDueDates.add(storyIssue.getDueDate() as Date)
log.warn("storyStartDates: ${storyStartDates}");
log.warn("storyDueDates: ${storyDueDates}");
}
}
//Initialize min and max
def minDate = storyStartDates[0] as Date
def maxDate = storyDueDates[0] as Date
//Find actual min Dates
for(int i = 1; i < storyStartDates.size(); i++)
{
def currentDate = storyStartDates[i]
if(currentDate.before(minDate))
{
minDate = currentDate
}
}
//Find actual max Dates
for(int i = 1; i < storyDueDates.size(); i++)
{
def currentDate = storyDueDates[i]
if(currentDate.after(maxDate))
{
maxDate = currentDate
}
}
//You now have the overall maximum and minimum of all of the Story's custom Date fields
//From here on out you can do whatever you need with those minimums and maximums
log.warn("Min: " + minDate);
log.warn("Max: " + maxDate);
log.warn("issue.dueDate: " + issue.dueDate)
issue.setDueDate(maxDate); //<<<<< this is where I am getting an error
}
else //Return null if issue is not an Epic
{
return null
}
Online forums and learning are now in one easy-to-use experience.
By continuing, you accept the updated Community Terms of Use and acknowledge the Privacy Policy. Your public name, photo, and achievements may be publicly visible and available in search engines.