Hi Community,
I’m trying to write custom JQL Function to be able to find all issues with any comment with defined text from any member of defined group.
Never done something like this before, but I tried using examples from Adaptavist documentation to write some code, but it fails each time to get any result (Error occurred communicating with the server. Please reload the page and try again.)
I'd appriciate any help with troubleshooting
package com.onresolve.jira.groovy.jql
import com.atlassian.jira.JiraDataTypes
import com.atlassian.jira.JiraDataType
import com.atlassian.jira.jql.query.QueryCreationContext
import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.issue.Issue
import com.atlassian.jira.issue.comments.CommentManager
import com.atlassian.jira.user.util.UserManager
import com.atlassian.jira.security.groups.GroupManager
import com.onresolve.jira.groovy.jql.AbstractScriptedJqlFunction
import com.atlassian.query.clause.TerminalClause
import com.atlassian.query.operand.FunctionOperand
import com.atlassian.query.operand.Operand
import com.atlassian.query.Query
import com.atlassian.query.clause.Clause
class CommentsByGroupCopy extends AbstractScriptedJqlFunction implements JqlFunction {
@Override
String getDescription() {
return "testing function"
}
@Override
String getFunctionName() {
return "commentsByGroup"
}
@Override
List<Map> getArguments() {
return [
[name: "group", description: "The group to search for"],
[name: "text", description: "The text to search for in comments"]
]
}
@Override
JiraDataType getDataType() {
JiraDataTypes.TEXT
}
@Override
List<Issue> getValues(QueryCreationContext queryCreationContext, FunctionOperand operand, TerminalClause terminalClause) {
def groupManager = ComponentAccessor.getGroupManager()
def commentManager = ComponentAccessor.getCommentManager()
def userManager = ComponentAccessor.getUserManager()
def issueManager = ComponentAccessor.getIssueManager()
def groupName = operand.args[0]
def searchText = operand.args[1]
def group = groupManager.getGroup(groupName)
if (!group) {
return []
}
def usersInGroup = groupManager.getUsersInGroup(group)
def userKeys = usersInGroup*.key
def issuesIDs = issueManager.getIssueIdsForProject(24304)
def matchingIssues = []
issuesIDs.each { id ->
def issue = issueManager.getIssueObject(id)
def comments = commentManager.getComments(issue)
comments.each { comment ->
if (userKeys.contains(comment.authorApplicationUser.key) && comment.body.contains(searchText)) {
log.error(issue)
matchingIssues.add(issue)
return
}
}
}
log.error(matchingIssues)
return matchingIssues
}
}