Forums

Articles
Create
cancel
Showing results for 
Search instead for 
Did you mean: 

Scriptrunner: How to access raw JQL query in custom JQL aggregate function

Hubbitus
Contributor
March 27, 2018

If we get as example com.onresolve.jira.groovy.jql.AggregateExpression, it has method com.onresolve.jira.groovy.jql.AggregateExpression#getAggregateData but that call happened only from com.onresolve.scriptrunner.runner.rest.jira.JqlFunctionsEndpoint#getAggregateResult which source is not available unfortunately. And according to jqlQueryDoc.js endpoint /rest/scriptrunner-jira/latest/jqlfunctions/aggregateResult is hardcoded.

In my own function in implementation of com.onresolve.jira.groovy.jql.JqlFunction#validate method I have access only to TerminalClause instance which have no access to full JQL query.

I have abbility implement com.onresolve.jira.groovy.jql.JqlQueryFunction#getQuery, but there I can't emmit some validation errors or warnings about query parsing.

My intention write my custom aggregate query with grouping (question related to https://community.atlassian.com/t5/Marketplace-Apps-questions/ScriptRunner-How-to-custom-extend-aggregate-JQL-function/qaq-p/757436) and I want:
1. Got full JQL query. Current possible approach make it just as string argument of function, but it is not so flexible for user to write it without suggestion and autocomplete.
2. Have possibility return additional aggregation results and/or parsing errors.
2.1. Agregation results required to return additional table data if query correct. I want make summaries grouped by assignee for example.
2.2. If query incorrect on terms of function I want also notify user about it.

On first look it seams I need at least method validate which holds full query like:

MessageSet validate(ApplicationUser user, FunctionOperand operand, TerminalClause terminalClause, String rawQuery)

Is it possible now?

1 answer

Suggest an answer

Log in or Sign up to answer
0 votes
Jeroen Poismans
Community Champion
October 8, 2020

Hi,

The error indicates that the types don't match.

Try replacing

def loggedInUser = ComponentAccessor.jiraAuthenticationContext.loggedInUser

with

ApplicationUser loggedInUser = ComponentAccessor.jiraAuthenticationContext.loggedInUser 

and add an extra import

import com.atlassian.jira.user.ApplicationUser  

Next the method want an int for the actionId and you seem to be passing in a String. Convert actionId to its int value and use that instead.

 

Let me know if this works!

Regards,

Jeroen

DEPLOYMENT TYPE
SERVER
TAGS
AUG Leaders

Atlassian Community Events