• Community
  • Products
  • Jira
  • Questions
  • Bulk Changes: Is there a way to concatenate a new fixVersion when doing a bulk change, as opposed to completely replacing the fixVersion?

Bulk Changes: Is there a way to concatenate a new fixVersion when doing a bulk change, as opposed to completely replacing the fixVersion?

I have a project with hundreds of issues, each of which may have a different "fixVersion" associated with it. I want to do a "Bulk Edit" on all of these issues at once where I simply ADD a new fixVersion to each issue, as opposed to replacing the fixVersions that are already there. Is this possible?

I seem to have done this before at one point, but I don't remember how I was able to do that. Are there certain restrictions or constraints in place which turn this ability on or off when doing bulk changes?

As a simple example, let's say I have 3 issues with the fixVersion = "current". I decide that I would also like to add the fixVersion = "new" to these issues. I query them in the Issue tab and select "Bulk Change". I select all of them from the list, choose to bulk edit them, and select the 'Change fixVersions' option with the value "new".

My hope is that the outcome are 3 issues with the old AND the new fixversion (ie, "current" & "new" are both a fixVersion in the 3 issues).

Hope that makes sense! Let me know if this is possible or if there are any workarounds to do something like this.

2 answers

1 accepted

1 vote
Henning Tietgens Community Champion Mar 25, 2013

You can use Script Runner plugin and the following script to add Versions to a JQL search.

import com.atlassian.crowd.embedded.api.User
import com.atlassian.jira.bc.issue.IssueService
import com.atlassian.jira.bc.issue.search.SearchService
import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.event.type.EventDispatchOption
import com.atlassian.jira.issue.Issue
import com.atlassian.jira.issue.IssueManager
import com.atlassian.jira.issue.index.IssueIndexManager
import com.atlassian.jira.project.ProjectManager
import com.atlassian.jira.project.version.VersionManager
import com.atlassian.jira.util.ImportUtils
import com.atlassian.jira.web.bean.PagerFilter

String jql = 'project = XXX'
String projectKey = 'XXX'
String newVersion = '1.35'

IssueService issueService = ComponentAccessor.getIssueService()
IssueManager issueManager = ComponentAccessor.getIssueManager()
VersionManager versionManager = ComponentAccessor.getVersionManager()
ProjectManager projectManager = ComponentAccessor.getProjectManager()
IssueIndexManager indexManager = ComponentAccessor.getIssueIndexManager()
SearchService searchService = ComponentAccessor.getComponent(SearchService.class);

User user = ComponentAccessor.jiraAuthenticationContext.getLoggedInUser()
List<Issue> issues = null

SearchService.ParseResult parseResult =  searchService.parseQuery(user, jql);
if (parseResult.isValid()) {
    def searchResult = searchService.search(user, parseResult.getQuery(), PagerFilter.getUnlimitedFilter())
    issues = searchResult.issues.collect {issueManager.getIssueObject(it.id)}
} else {
    log?.error("Invalid JQL: " + jql);
}

projectId = projectManager.getProjectObjByKey(projectKey)?.id
newVersionId = versionManager.getVersion(projectId, newVersion)?.id

if (newVersionId) {
    issues?.each{
        iiparams = issueService.newIssueInputParameters()
        iiparams.setRetainExistingValuesWhenParameterNotProvided(true, true)
        iiparams.setApplyDefaultValuesWhenParameterNotProvided(false)
        iiparams.setSkipScreenCheck(true)

        List versionIds = it.getFixVersions()*.id
        versionIds << newVersionId
        iiparams.setFixVersionIds((Long[]) versionIds.toArray())
        vresult = issueService.validateUpdate(user,it.id, iiparams)
        if (vresult.isValid()) {
            uresult = issueService.update(user, vresult, EventDispatchOption.DO_NOT_DISPATCH, false)
            if (uresult.isValid()) {
                boolean wasIndexing = ImportUtils.isIndexIssues();
                ImportUtils.setIndexIssues(true);
                indexManager.reIndex(uresult.getIssue());
                ImportUtils.setIndexIssues(wasIndexing);
            } else {
                log.error uresult.getErrorCollection().getErrors()
            }
        } else {
            log.error vresult.getErrorCollection().getErrors()
        }
    }?.size()
}

You have to adapt the three rows containing the JQL, the project and the version to your needs. The script only works for issues of one project because versions are project specific.

Please test the script on a test environment first, because I put it together by dragging and dropping parts from other scripts :-)

Henning

I'm almost sure you can do that with the Script Runner plugin. It's free and you can get it in the Atlassian Market. There's a lot of documentation for the plugin too. Check it out.

Hope this helps.

Suggest an answer

Log in or Join to answer
Community showcase
Sarah Schuster
Posted Jan 29, 2018 in Jira

What are common themes you've seen across successful & failed Jira Software implementations?

Hey everyone! My name is Sarah Schuster, and I'm a Customer Success Manager in Atlassian specializing in Jira Software Cloud. Over the next few weeks I will be posting discussion topics (8 total) to ...

3,316 views 14 20
Join discussion

Atlassian User Groups

Connect with like-minded Atlassian users at free events near you!

Find a group

Connect with like-minded Atlassian users at free events near you!

Find my local user group

Unfortunately there are no AUG chapters near you at the moment.

Start an AUG

You're one step closer to meeting fellow Atlassian users at your local meet up. Learn more about AUGs

Groups near you
Atlassian Team Tour

Join us on the Team Tour

We're bringing product updates and pro tips on teamwork to ten cities around the world.

Save your spot