Suma wartości pól

Aby pobrać wartości pól z danego zgłoszenia w Jira za pomocą Script Runner i wykonać sumę tych pól, można użyć metody getValue() z obiektu Issue w celu pobrania wartości pola, a następnie dodać te wartości do siebie.

Przykładowy kod w Groovy, który pobiera wartości pól „customfield_10000” i „customfield_10001” z zgłoszenia o kluczu „ABC-123” i wykonuje ich sumę:

import com.atlassian.jira.component.ComponentAccessor

def issueKey = "ABC-123"
def issue = ComponentAccessor.getIssueManager().getIssueObject(issueKey)

def customFieldManager = ComponentAccessor.getCustomFieldManager()
def field1 = customFieldManager.getCustomFieldObjectByName("Field 1")
def field2 = customFieldManager.getCustomFieldObjectByName("Field 2")

def value1 = issue.getCustomFieldValue(field1) as Double
def value2 = issue.getCustomFieldValue(field2) as Double

def sum = value1 + value2

log.info("Sum of Field 1 and Field 2 for issue ${issueKey} is ${sum}")

W powyższym kodzie, najpierw uzyskujemy dostęp do menedżera pól niestandardowych Jira za pomocą ComponentAccessor.getCustomFieldManager(). Następnie pobieramy obiekty pól niestandardowych, których wartości chcemy pobrać, używając getCustomFieldObjectByName() i przekazując nazwy pól jako argumenty.

Następnie pobieramy wartości pól niestandardowych dla danego zgłoszenia, używając getCustomFieldValue() na obiekcie Issue. Ponieważ wartości pól niestandardowych mogą mieć różne typy, w tym przykładzie zakładamy, że oba pola są typu Double.

Na końcu dodajemy wartości pól i zapisujemy wynik do zmiennej sum. W przykładzie wykorzystujemy metodę log.info() do wyświetlenia wyniku.

Aby wykonać sumowanie wartości pól z kilku zgłoszeń w Jira za pomocą Script Runner, można użyć metody getIssues() z klasy SearchService do znalezienia i pobrania listy obiektów zgłoszeń, które pasują do określonych kryteriów wyszukiwania. Następnie można iterować po liście zgłoszeń i sumować wartości pól.

Przykładowy kod w Groovy, który znajduje i sumuje wartości pól „customfield_10000” i „customfield_10001” dla wszystkich zgłoszeń w projekcie o kluczu „PROJ” i wyświetla wynik:

import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.issue.Issue
import com.atlassian.jira.issue.search.SearchException
import com.atlassian.jira.jql.builder.JqlQueryBuilder
import com.atlassian.jira.web.bean.PagerFilter

def jqlQuery = JqlQueryBuilder.newBuilder()
        .where()
        .project("PROJ")
        .buildQuery()

def searchService = ComponentAccessor.getComponent(SearchService)
def user = ComponentAccessor.getJiraAuthenticationContext().getLoggedInUser()
def issues = searchService.search(user, jqlQuery, PagerFilter.getUnlimitedFilter()).issues

def customFieldManager = ComponentAccessor.getCustomFieldManager()
def field1 = customFieldManager.getCustomFieldObjectByName("Field 1")
def field2 = customFieldManager.getCustomFieldObjectByName("Field 2")

def sum = 0.0

for (Issue issue in issues) {
    def value1 = issue.getCustomFieldValue(field1) as Double
    def value2 = issue.getCustomFieldValue(field2) as Double
    sum += value1 + value2
}

log.info("Sum of Field 1 and Field 2 for all issues in project PROJ is ${sum}")

W powyższym kodzie najpierw tworzymy zapytanie JQL, które znajduje wszystkie zgłoszenia w projekcie o kluczu „PROJ”. Następnie używamy searchService.search() do wykonania wyszukiwania i pobrania listy obiektów zgłoszeń, które pasują do zapytania.

Następnie pobieramy obiekty pól niestandardowych, których wartości chcemy pobrać, i iterujemy po liście zgłoszeń, sumując wartości pól. Na końcu wynik zapisujemy do zmiennej sum. W przykładzie wykorzystujemy metodę log.info() do wyświetlenia wyniku.

Aby wpisać wynik sumowania pól do nowego pola niestandardowego w Jira za pomocą Script Runner, można użyć metody setCustomFieldValue() na obiekcie MutableIssue w celu ustawienia wartości pola.

Przykładowy kod w Groovy, który znajduje i sumuje wartości pól „customfield_10000” i „customfield_10001” dla wszystkich zgłoszeń w projekcie o kluczu „PROJ” i zapisuje wynik do pola „customfield_10002” w pierwszym znalezionym zgłoszeniu:

import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.issue.Issue
import com.atlassian.jira.issue.MutableIssue
import com.atlassian.jira.issue.search.SearchException
import com.atlassian.jira.jql.builder.JqlQueryBuilder
import com.atlassian.jira.web.bean.PagerFilter

def jqlQuery = JqlQueryBuilder.newBuilder()
        .where()
        .project("PROJ")
        .buildQuery()

def searchService = ComponentAccessor.getComponent(SearchService)
def user = ComponentAccessor.getJiraAuthenticationContext().getLoggedInUser()
def issues = searchService.search(user, jqlQuery, PagerFilter.getUnlimitedFilter()).issues

def customFieldManager = ComponentAccessor.getCustomFieldManager()
def field1 = customFieldManager.getCustomFieldObjectByName("Field 1")
def field2 = customFieldManager.getCustomFieldObjectByName("Field 2")
def targetField = customFieldManager.getCustomFieldObjectByName("Field 3")

def sum = 0.0

for (Issue issue in issues) {
    def value1 = issue.getCustomFieldValue(field1) as Double
    def value2 = issue.getCustomFieldValue(field2) as Double
    sum += value1 + value2
}

def firstIssue = issues.first()
def mutableIssue = ComponentAccessor.getIssueManager().getIssueObject(firstIssue.id) as MutableIssue
mutableIssue.setCustomFieldValue(targetField, sum)
ComponentAccessor.getIssueManager().updateIssue(user, mutableIssue, EventDispatchOption.ISSUE_UPDATED, false)

log.info("Sum of Field 1 and Field 2 for all issues in project PROJ is ${sum}. Result saved in Field 3 for issue ${firstIssue.key}")

W powyższym kodzie po obliczeniu sumy, najpierw pobieramy obiekt pola niestandardowego, do którego chcemy zapisać wynik (w przykładzie używamy nazwy „Field 3”). Następnie pobieramy pierwsze znalezione zgłoszenie i tworzymy obiekt MutableIssue z tego zgłoszenia. Ustawiamy wartość pola niestandardowego na obliczoną sumę za pomocą setCustomFieldValue() i zapisujemy zmiany za pomocą ComponentAccessor.getIssueManager().updateIssue(). W przykładzie wykorzystujemy metodę log.info() do wyświetlenia wyniku.

Aby wpisać wynik sumowania pól do konkretnego zgłoszenia w Jira za pomocą Script:

import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.issue.MutableIssue

def issue = ComponentAccessor.getIssueManager().getIssueByCurrentKey("ISSUE-123")
def customFieldManager = ComponentAccessor.getCustomFieldManager()
def field1 = customFieldManager.getCustomFieldObjectByName("Field 1")
def field2 = customFieldManager.getCustomFieldObjectByName("Field 2")
def targetField = customFieldManager.getCustomFieldObjectByName("Field 3")

def value1 = issue.getCustomFieldValue(field1) as Double
def value2 = issue.getCustomFieldValue(field2) as Double
def sum = value1 + value2

issue.setCustomFieldValue(targetField, sum)
issue.store()

log.info("Sum of Field 1 and Field 2 for issue ISSUE-123 is ${sum}. Result saved in Field 3.")

W powyższym kodzie pobieramy zgłoszenie o kluczu „ISSUE-123” i obliczamy sumę pól „Field 1” i „Field 2”. Następnie ustawiamy wartość pola „Field 3” na obliczoną sumę i zapisujemy zmiany. W przykładzie wykorzystujemy metodę log.info() do wyświetlenia wyniku.