Originally asked by Ryoma Hagio on 18 December 2020 (original question)
Hi, I have the Exalate code set up to sync sprint.
However, the sprint is not entered properly in the Exalated ticket.
What’s wrong with my code?
The sprint information is synchronized between the boards. However, it will not be automatically entered in the Exalated ticket.
My environment is JiraServer. Therefore, I referred to the following code.
https://docs.idalko.com/exalate/display/ED/How+to+sync+sprints+in+Jira+Server
I attach the incoming_example and outgoing_example codes. please refer.
And, I’m not sure which is “remote” and which is “local”…
Thank you very much in advance for all help.
incoming_example
// Sync Sprint
if(entityType == "sprint"){
//Executed when receiving a sprint sync from the remote side
def sprintMap = ["405":"114"] //[remoteBoardId: localBoardId]
sprint.name = replica.name
sprint.goal = replica.goal
sprint.state = replica.state?.toUpperCase()
sprint.startDate = replica.startDate
sprint.endDate = replica.endDate
def localBoardId = sprintMap[replica.originBoardId]
if(localBoardId == null){
throw new com.exalate.api.exception.IssueTrackerException(
"No board mapping for remote board id " + replica.originBoardId)
}
sprint.originBoardId = localBoardId //Set the board ID where the sprint will be created
}
// Sync about ticket issue
if(entityType == "issue"){
if(firstSync && replica.project.key == "TEST"){
issue.projectKey = "MyBoard"
issue.summary = "TEST::" + replica.summary
}
if(firstSync && replica.project.key == "MyBoard"){
issue.projectKey = "TEST"
issue.summary = "MyBoard::" + replica.summary
}
issue.typeName = nodeHelper.getIssueType(replica.type?.name, issue.projectKey)?.name ?: "Task"
issue.reporter = nodeHelper.getUserByEmail(replica.reporter?.email)
issue.assignee = nodeHelper.getUserByEmail(replica.assignee?.email)
issue.description = replica.description
issue.labels = replica.labels
issue.comments = commentHelper.mergeComments(issue, replica)
issue.attachments = attachmentHelper.mergeAttachments(issue, replica)
//custom field id for Story Points field
issue.customFields."10106".value = replica.customFields."10106".value
//TEST-MyBoard
// ["remote status name": "local status name"],
def statusMap = [
"In Review": "In Progress",
"Hold": "In Progress",
"Waiting": "In Progress",
"Assigned": "In Progress",
"Canceled": "Done"
]
def remoteStatusName = replica.status.name
issue.setStatus(statusMap[remoteStatusName] ?: remoteStatusName)
// Sync sprint information
def sprintV = replica.customFields.Sprint.value?.id.collect{ remoteSprintId ->
return nodeHelper.getLocalIssueKeyFromRemoteId(remoteSprintId, "sprint")?.id?.toString()
}.findAll{it != null}
issue.customFields."Sprint".value = sprintV
}
outgoing_example
def boardIds = ["114"] //Boards which sprints will get synced
if(entityType == "sprint" && boardIds.find{it == sprint.originBoardId}){
replica.name = sprint.name
replica.goal = sprint.goal
replica.state = sprint.state
replica.startDate = sprint.startDate
replica.endDate = sprint.endDate
replica.originBoardId = sprint.originBoardId
}
// Sync about ticket issue
if(entityType == "issue"){
replica.key = issue.key
replica.type = issue.type
replica.assignee = issue.assignee
replica.reporter = issue.reporter
replica.summary = issue.summary
replica.description = issue.description
replica.labels = issue.labels
replica.comments = issue.comments
replica.resolution = issue.resolution
replica.status = issue.status
replica.parentId = issue.parentId
replica.priority = issue.priority
replica.attachments = issue.attachments
replica.project = issue.project
// sync sprint info
replica.customFields.Sprint = issue.customFields.Sprint
// 10106 is the custom field id for story points
replica.customFields."10106" = issue.customFields."10106"
}
Comments:
Ryoma Hagio commented on 22 December 2020
Could you please point out the solution or mistake?
I don’t know why it doesn’t work …