This article shows how to synchronize sprints in Exalate for Jira Cloud.
Note: You need to sync sprints with a trigger before syncing issues.
Introduction
Exalate for Jira Cloud allows you to do sprint synchronizations.
You can add sync rules to synchronize sprint information. Exalate considers issues and sprints as independent entities.
Note: Sprint synchronization in Jira Cloud is available only for Connections in the Script Configuration Mode.
The scripts below use board IDs to identify what sprints to sync. For example, if you enter a Board ID 1, you sync all sprints from that board.
Source Side
Outgoing Sync
To send the sprint data use the following script:
def boardIds = ["50", "80", "130", "144"] //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
}
if(entityType == "issue"){
//Executed when syncing an issue to a remote side
replica.summary = issue.summary
replica.description = issue.description
replica.project = issue.project
replica.type = issue.type
//....
//other script rules to sync issues
//sprint....
replica.customFields.Sprint = issue.customFields.Sprint
}Destination Side
Incoming sync
To sync the received sprint data on your side add the code below:
//entityType represent the type of the remote side entity
if(entityType == "sprint"){
//Executed when receiving a sprint sync from the remote side
def sprintMap = ["162":"50", "197": "80", "214": "130", "225": "144"] //[remoteBoardId: localBoardId]
sprint.name = replica.name
sprint.goal = replica.goal
sprint.state = replica.state
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
}
if(entityType == "issue"){
//Executed when receiving an issue sync from the remote side
if(firstSync){
issue.projectKey = "TEST"
issue.typeName = "Task"
}
issue.summary = replica.summary
issue.description = replica.description
//....
//other script rules to sync issues
//....
def remoteSprintId = replica.customFields.Sprint?.value?.find { it.state.toUpperCase() != "CLOSED" }?.id
if(remoteSprintId){
def localSprintId = nodeHelper.getLocalIssueKeyFromRemoteId(remoteSprintId, "sprint")?.id
if(localSprintId){
issue.customFields.Sprint.value = localSprintId
}
}
}How to start Sprint Synchronization
To start the synchronization of a sprint you need to Create a Trigger and select the sprint entity type.
Filter sprints to sync with the If clause. For example, if you enter Board IDs 1, 2, and 3, you sync all sprints from these boards. To synchronize all sprints leave the If block empty.
You can check the sprint sync status with the help of the Entity Sync Status panel in the Exalate admin menu.
Have more questions? Ask the community