Example scripts
To homepage
Jira

Search by reg exp on select option values
App in script

ScriptRunner For Jira
by Adaptavist
Compatibility

Jira (8.0 - 8.19)

ScriptRunner For Jira (7.10.0)
Language |
groovy
package com.onresolve.jira.groovy.jql
import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.issue.CustomFieldManager
import com.atlassian.jira.issue.customfields.manager.OptionsManager
import com.atlassian.jira.jql.builder.JqlQueryBuilder
import com.atlassian.jira.jql.query.LuceneQueryBuilder
import com.atlassian.jira.jql.query.QueryCreationContext
import com.atlassian.jira.jql.validator.NumberOfArgumentsValidator
import com.atlassian.jira.user.ApplicationUser
import com.atlassian.jira.util.MessageSet
import com.atlassian.query.clause.TerminalClause
import com.atlassian.query.operand.FunctionOperand
import org.apache.lucene.search.Query
class OptionMatchesFunction extends AbstractScriptedJqlFunction implements JqlQueryFunction {
LuceneQueryBuilder luceneQueryBuilder = ComponentAccessor.getComponent(LuceneQueryBuilder)
OptionsManager optionsManager = ComponentAccessor.getComponent(OptionsManager)
CustomFieldManager customFieldManager = ComponentAccessor.getCustomFieldManager()
@Override
String getDescription() {
"Matches issues against select option values by regex"
}
@Override
MessageSet validate(ApplicationUser user, FunctionOperand operand, TerminalClause terminalClause) {
def messageSet = new NumberOfArgumentsValidator(2, 2, getI18n()).validate(operand)
if (messageSet.hasAnyErrors()) {
return messageSet
}
def customFields = customFieldManager.getCustomFieldObjectsByNameIgnoreCase(operand.args[0])
if (!customFields) {
messageSet.addErrorMessage("Could not find custom field ${operand.args[0]}")
}
messageSet
}
@Override
List<Map> getArguments() {
[
[
description: "Custom field name",
optional : false,
],
[
description: "Reg exp to match options on",
optional : false,
],
]
}
@Override
String getFunctionName() {
"optionMatches"
}
@Override
Query getQuery(QueryCreationContext queryCreationContext, FunctionOperand operand, TerminalClause terminalClause) {
def customField = customFieldManager.getCustomFieldObjectsByName(operand.args[0]).first()
def fieldConfigSchemes = customField.getConfigurationSchemes()
def options = fieldConfigSchemes.collect {
def fieldConfig = it.oneAndOnlyConfig
optionsManager.getOptions(fieldConfig)*.value.findAll {
it.matches(operand.args[1])
}
}.flatten() as String[]
def queryBuilder = JqlQueryBuilder.newBuilder()
def whereClause = queryBuilder
.where()
.customField(customField.idAsLong)
.in(options)
.endWhere()
.buildQuery()
.whereClause
luceneQueryBuilder.createLuceneQuery(queryCreationContext, whereClause)
}
}
Having an issue with this script?
Report it here