Я не уверен, правильно ли я понял название проблемы, с которой столкнулся. Моя цель - написать скрипт в Jira, чтобы найти все запросы фильтра, содержащие заданное предложение c, а затем изменить результаты сопоставления фильтров (с новой строкой), чтобы вставить новое слово в запрос. Последняя часть, касающаяся изменения, работает.
Моя проблема в том, что когда я ищу все запросы фильтра в Jira, который содержит мой поиск, я получаю некоторые результаты, которые соответствуют всему предложению, и некоторые результаты, которые соответствуют части предложения. Моя цель - просто соответствовать всему предложению.
Например, если у меня есть запрос фильтра в Jira, который выглядит следующим образом: project in (Produksjonsendring, Fagsystemer, AdminDok) AND issuetype = Produksjonsendring AND status = Timeslotting AND resolution = EMPTY OR project = "NAV IT" OR project = "NAV IT" OR project = "NAV IT" AND project = Fagsystemer
. Я не только ищу project in (.*Produksjonsendring.*)
. Это означает, что Produksjonsendring включен в paranthese. Но я также получаю результаты по фильтру с запросом, содержащим project in
и project not in (Produksjonsendring)
Например, фильтр, которому я не хочу соответствовать: project in (ATOM) AND resolution = Unresolved AND status != Canceled AND assignee is EMPTY OR project in (MDEPLOY) AND issuetype = "Manuell Deploy" AND resolution = Unresolved AND status != Canceled AND assignee is EMPTY OR "Ansvarlig gruppe" = "IT IP Applikasjonstjenere og meldingsflyt (ATOM) (CMDB-707)" AND project not in (Templates, Produksjonsendring) AND resolution in (Unresolved) AND status != Canceled AND assignee is EMPTY ORDER BY key ASC, created
. Здесь вы можете видеть, что скрипт соответствует project in
и project not in (Templates, Produksjonsendring)
.
Итак, я должен искать фильтр с запросом, который содержит все предложение project in (.*produksjonsendring.*)
?
Я пытался чтобы отсканировать это с помощью регулярного выражения без каких-либо результатов: queryString.find("(((?i)Project in [(].*?Produksjonsendring.*[)])"))
Я попробовал функцию .matching, но затем я получаю только фильтрующие запросы, которые содержат только то, что я ищу, а не другие запросы, содержащие это предложение в запросе.
Это весь мой сценарий:
import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.bc.filter.SearchRequestService
import com.atlassian.jira.bc.JiraServiceContext
import com.atlassian.query.*
import com.atlassian.jira.bc.JiraServiceContextImpl
import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.bc.issue.search.SearchService
import com.atlassian.jira.user.ApplicationUser
import com.atlassian.jira.bc.user.search.UserSearchService
import com.atlassian.jira.bc.user.search.UserSearchParams
import com.atlassian.jira.user.util.UserUtil
import com.atlassian.jira.user.util.UserManager
import com.atlassian.jira.issue.search.SearchRequest
import org.apache.log4j.Logger
def log = Logger.getLogger("Filter.search.logger")
UserUtil userUtil = ComponentAccessor.getUserUtil()
def userSearchService = ComponentAccessor.getComponent(UserSearchService)
def cm = ComponentAccessor.getUserManager()
def searchRequestService = ComponentAccessor.getComponent(SearchRequestService.class)
def searchService = ComponentAccessor.getComponent(SearchService)
def loggedInUser = ComponentAccessor.getJiraAuthenticationContext().getLoggedInUser()
def ctx = new JiraServiceContextImpl(loggedInUser)
def userSearchParams = new UserSearchParams.Builder()
.allowEmptyQuery(true)
.ignorePermissionCheck(true)
.maxResults(20000)
.build()
def allActiveUsers = userSearchService.findUsers("", userSearchParams)
allActiveUsers.size()
def output = ""
for (user in allActiveUsers) {
searchRequestService.getOwnedFilters(user).each() { SearchRequest filter ->
def query = filter.query
def queryString = searchService.getJqlString(query)
if (queryString.find("(((?i)Project in [(].*?Produksjonsendring.*[)])")) {
log.warn "[EVENT]: Søkestreng funnet " + queryString;
String newQueryString = queryString.replaceAll("(?!Project in)(?<!/D)(?=[)])", ", Eiendom")
def newQuery = searchService.parseQuery(user, newQueryString).query
filter.setQuery(newQuery)
searchRequestService.updateFilterOwner(ctx,user,filter)
log.warn "Filter endret"
output = queryString
log.info queryString
}
}
}
return output