{
"sprints": [
{
"name": "API Testing",
"originBoardId": 570
},
{
"name": "API Testing",
"originBoardId": 570
},
{
"name": "API Testing",
"originBoardId": 570
},
{
"name": "API Testing",
"originBoardId": 570
}
]
}
You can use a REST call for each sprint you need to create.
See the documentation here
"startDate": "2023-08-29T00:00:00.000+02:00",
"name": "Sprint Name",
"endDate": "2023-08-28T13:00:00.000+02:00",
"originBoardId": 1234
In you code
create connection to server
for each sprint you want to create
create sprint
close connection
1 Like
Hello @SurenderKannemoni is this your solution
1 Like
Hi @GrahamTwine1
Yes. It’s me
I am able to create with running a postman collection. but I am looking for JSON request payload to create multiple sprints in single REST call.
Hello @SurenderKannemoni one cannot do this in “a single request”
One can do this in multiple calls.
In your client code create variables for things like the sprint name, board id and dates.
Then in your code do this in a loop.
This is not using the REST API but rather groovy from scriptrunner.
import org.apache.log4j.Level
import groovy.util.logging.Log4j
import org.joda.time.DateTime
import com.atlassian.jira.user.ApplicationUser
import com.atlassian.jira.component.ComponentAccessor
import com.onresolve.scriptrunner.runner.customisers.JiraAgileBean
import com.atlassian.greenhopper.service.sprint.SprintManager
import com.atlassian.greenhopper.service.sprint.Sprint
import com.atlassian.greenhopper.service.sprint.Sprint.SprintBuilder
import com.atlassian.greenhopper.service.ServiceOutcome
import com.onresolve.annotation.Nullable
import com.onresolve.scriptrunner.runner.customisers.JiraAgileBean
import com.onresolve.scriptrunner.runner.customisers.WithPlugin
/*
Console Example
===============
def loggedInUser = ComponentAccessor.jiraAuthenticationContext.loggedInUser
new AutoSprintBuilder().createPiSprints(loggedInUser, [556L, 557L, 580L], ['sprint 1', 'Spring 2'])
*/
@Log4j
public class AutoSprintBuilder {
@WithPlugin("com.pyxis.greenhopper.jira")
@JiraAgileBean
private SprintManager sprintManager
public AutoSprintBuilder() {
log.setLevel(Level.INFO)
}
public void createSprints(ApplicationUser loggedInUser, List<Long> boardIds, List<String> sprintNames) {
DateTime startDate = new DateTime(2023, 9, 1, 12, 0, 0, 0)
DateTime endDate = new DateTime(2023, 9, 14, 12, 0, 0, 0)
String goal = 'We always need goals'
boardIds.each { boardId ->
sprintNames.each { name ->
log.info("Creating sprint $name on board $boardId")
// For REST, instead of calling the SprintManager with a Sprint in the next two lines
// Call the REST API instead with a payload
Sprint sprint = buildFutureSprint(name, boardId, goal, startDate, endDate)
ServiceOutcome<Sprint> result = sprintManager.createSprint(sprint)
log.info("Completed creating sprint $name with id ${result.get()?.id}")
if ( result.errors.errors.size() > 0) {
log.error("An error occured.")
}
}
}
}
/**
Sprint Name and Board ID are mandatory
**/
private Sprint buildFutureSprint (
String name,
long boardId,
@Nullable String goal,
@Nullable DateTime startDate,
@Nullable DateTime endDate
) {
SprintBuilder builder = Sprint.builder()
.name(name)
.rapidViewId(boardId)
.state(Sprint.State.FUTURE)
if ( startDate ) builder = builder.startDate(startDate)
if ( endDate ) builder = builder.endDate(endDate)
if ( goal ) builder = builder.goal(goal)
return builder.build()
}
}
1 Like