Skip to main content
Skip table of contents

Find and Replace JQL Query References

The following script searches JQL-based generators for a search reference and replaces it with a new reference without affecting the full query.

In this example script, "cf[10300]"(line 39 and 41) is the original reference and "new value"(line 41) is the replacement reference.

GROOVY
import com.atlassian.jira.component.ComponentAccessor;
import org.apache.log4j.Logger
import org.apache.log4j.Level

def log = Logger.getLogger('script.internal')
log.setLevel(Level.DEBUG)

def plugin = ComponentAccessor.pluginAccessor.getPlugin("com.almworks.jira.structure")
def structureManager = plugin.getModuleDescriptor('structure-manager').module
def forestService = plugin.getModuleDescriptor('forest-service').module
def rowManager = plugin.getModuleDescriptor('structure-row-manager').module
def generatorManager = plugin.getModuleDescriptor('generator-manager').module

def loadClass = {name -> plugin.classLoader.loadClass("com.almworks.jira.structure.api.$name")}

def PermissionLevel = loadClass('permissions.PermissionLevel')
def ForestSpec = loadClass('forest.ForestSpec')
def CoreIdentities = loadClass('item.CoreIdentities')

def structures = structureManager.getAllStructures(PermissionLevel.ADMIN)

/* Get all generator specs */
def generatorIds = new ArrayList();
for (def structure : structures) {
def forestSpec = ForestSpec.structure(structure.id)
def forest = forestService.getForestSource(forestSpec).latest.forest
for (def rowId : forest.rows.toNativeArray()) {
def itemId = rowManager.getRow(rowId).itemId
if (CoreIdentities.isGenerator(itemId)) {
generatorIds.add(itemId.getLongId())
}
}
}

/* Find generators with jql references that should be changed */
for (def genId : generatorIds) {
def spec = generatorManager.getGenerator(genId)
def params = spec.parameters
if (params.containsKey('jql') && params.get('jql').contains("cf[10300]")) {
log.debug "old jql: ${params.get('jql')}"
def newJql = params.get('jql').replace("cf[10300]", "new value") // new jql here
def updatedParams = new LinkedHashMap(params);
updatedParams.put('jql', newJql);
log.debug "new jql: ${updatedParams.get('jql')})"
generatorManager.updateGenerator(genId, spec.moduleKey, updatedParams, spec.owningStructure)
}
}
JavaScript errors detected

Please note, these errors can depend on your browser setup.

If this problem persists, please contact our support.