JQL functions

Aby utworzyć własne funkcje JQL w Jira, wykonaj poniższe kroki:

  1. Otwórz Script Console w Jira.
  2. Utwórz nowy plik groovy, w którym zdefiniujesz funkcję.
  3. Wprowadź skrypt do uruchomienia.
  4. W skrypcie wprowadź składnię JQL, aby zdefiniować funkcję.
  5. Skonfiguruj funkcję, aby zwracała poprawne wyniki.
  6. Zapisz plik i uruchom skrypt, aby przetestować funkcję.
  7. Zainstaluj wtyczkę ScriptRunner, jeśli jeszcze nie jest zainstalowana.
  8. Otwórz stronę zarządzania wtyczką ScriptRunner.
  9. Wybierz sekcję „JQL Functions” i dodaj nową funkcję.
  10. Wpisz nazwę funkcji, jej opis i kod groovy.
  11. Przetestuj funkcję, wykonując zapytanie JQL, które wykorzystuje nową funkcję.

Przykładowa funkcja JQL w Jira, która zwraca wszystkie problemy, których ostatnia aktualizacja była wykonana przez podanego użytkownika, może wyglądać następująco:

import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.issue.ModifiedValue
import com.atlassian.jira.issue.util.DefaultIssueChangeHolder

def user = args[0]

def issueManager = ComponentAccessor.getIssueManager()
def searchProvider = ComponentAccessor.getComponentOfType(com.atlassian.jira.issue.search.SearchProvider.class)
def queryParser = ComponentAccessor.getComponentOfType(com.atlassian.jira.jql.parser.JqlQueryParser.class)

def query = queryParser.parseQuery("issueFunction lastUpdatedByUser($user)")
def results = searchProvider.search(query, ComponentAccessor.getJiraAuthenticationContext().getLoggedInUser(), com.atlassian.jira.web.bean.PagerFilter.getUnlimitedFilter())

def issues = results.issues.collect { issueManager.getIssueObject(it.id) }

return issues.findAll { issue ->
    def changeHistoryManager = ComponentAccessor.getChangeHistoryManager()
    def changeItems = changeHistoryManager.getChangeItemsForField(issue, "updated")
    def lastChange = changeItems.last()

    lastChange?.getTo()?.equals(user)
}

W powyższym przykładzie funkcja JQL nazywa się „lastUpdatedByUser” i przyjmuje jeden argument „user”. Funkcja wyszukuje wszystkie problemy, które są filtrowane przez zapytanie „issueFunction lastUpdatedByUser($user)”, a następnie sprawdza, czy ostatnia aktualizacja została wykonana przez podanego użytkownika.