This article shows how to synchronize sprints in Exalate for Jira on-premise.
Note: You need to sync sprints with a trigger before syncing issues.
Introduction
Starting from version 4.7.0, you can add sync rules to synchronize sprint data. Exalate considers issues and sprints as independent entities. 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.
Note: Sprint synchronization in Jira on-premise is available only for connections in Script mode.
Source Side
Outgoing Sync
Use the following script to send the sprint data:
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
Use this script to sync the received sprint data on your side:
//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?.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 } if(entityType == "issue"){ //Executed when receiving an issue sync from the remote side issue.summary = replica.summary if(replica.projectKey == "SCRUM"){ issue.projectKey = "SCRUM2" } if(replica.projectKey == "SCRUM2"){ issue.projectKey = "SCRUM" } issue.typeName = replica.typeName def sprintV = replica.customFields.Sprint.value?.id.collect{ remoteSprintId -> return nodeHelper.getLocalIssueKeyFromRemoteId(remoteSprintId, "sprint")?.id?.toString() }.findAll{it != null} issue.customFields."Sprint".value = sprintV }
Note: You can control which sprints get synchronized from the outgoing sync rules. When you don't want an entity to be synchronized, use return before actually setting any value on the replica.
if(entityType == "sprint" && sprint.originBoardId == "12"){ //Only sync sprints on board 12 if(sprint.id == "87") return //avoid syncing sprint with id 87 replica.name = sprint.name replica.goal = sprint.goal replica.state = sprint.state replica.startDate = sprint.startDate replica.endDate = sprint.endDate replica.originBoardId = sprint.originBoardId } //The rest of your outgoing script
Fields of the sprint entity
field name | type |
---|---|
sprint.name | String |
sprint.state | String |
sprint.originBoardId | String |
sprint.startDate | Date |
sprint.endDate | Date |
sprint.completeDate | Date |
sprint.goal | String |
How to Start Sprint Sync?
To start the synchronization of a sprint you need to create a trigger and select the sprint entity type. Sprints are synced after they are created or updated.
Have more questions? Ask the community