Sum custom field using jql in groovy script

Dave Paulson December 8, 2016

I'm trying to sum a custom field through a jql query result using a groovy script, but I get a null pointer order. Can anyone be of help? My code is as follows:

import com.atlassian.jira.bc.issue.search.SearchService
import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.issue.search.SearchException
import com.atlassian.jira.web.bean.PagerFilter

def jqlSearch = "project = TISFOLIO"
//If you are going to use a JIRA version => 7 then you should get the ApplicationUser instead of User, to do that remove the .directoryUser
def user = ComponentAccessor.getJiraAuthenticationContext().getLoggedInUser()
def searchService = ComponentAccessor.getComponentOfType(SearchService.class)
SearchService.ParseResult parseResult = searchService.parseQuery(user, jqlSearch)

def value = 0
def customFieldManager = ComponentAccessor.getCustomFieldManager()
def myCustomField = customFieldManager.getCustomFieldObjectByName("customfield_13312")

if (parseResult.isValid()) {
try {
def results = searchService.search(user, parseResult.getQuery(), PagerFilter.getUnlimitedFilter())
def issues = results.getIssues()
issues.each {
if (it.getCustomFieldValue(myCustomField))
value += (double) it.getCustomFieldValue(myCustomField)
}
} catch (SearchException e) {
e.printStackTrace()
}
} else {
log.warn("Invalid query")
return null
}

return value

1 answer

0 votes
Vasiliy Zverev
Rising Star
Rising Star
Rising Stars are recognized for providing high-quality answers to other users. Rising Stars receive a certificate of achievement and are on the path to becoming Community Leaders.
December 8, 2016

I am not sure what namely caused NullPointerExeption, usually it happens when there is no value for caustom field. I add hull check and refactored your code:

import com.atlassian.jira.bc.issue.search.SearchService
import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.issue.fields.CustomField
import com.atlassian.jira.issue.search.SearchException
import com.atlassian.jira.web.bean.PagerFilter

//If you are going to use a JIRA version => 7 then you should get the ApplicationUser instead of User, to do that remove the .directoryUser
def user = ComponentAccessor.getJiraAuthenticationContext().getLoggedInUser()
def searchService = ComponentAccessor.getComponentOfType(SearchService.class)
SearchService.ParseResult parseResult = searchService.parseQuery(user, "project = TISFOLIO")

double value = 0

if (parseResult.isValid()) {
    try {
        CustomField myCustomField = ComponentAccessor.getCustomFieldManager().getCustomFieldObjectByName("customfield_13312")
        searchService.search(user, parseResult.getQuery(), PagerFilter.getUnlimitedFilter())
                .getIssues().each {
                    if (it.getCustomFieldValue(myCustomField) != null) //
                        value += (double) it.getCustomFieldValue(myCustomField)
                }
    } catch (SearchException e) {
        e.printStackTrace()
    }
} else {
    log.warn("Invalid query")
    return null
}

return value

Suggest an answer

Log in or Sign up to answer
TAGS
AUG Leaders

Atlassian Community Events