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