I am trying to refactor a Scriptrunner listener to work with the new Jira 8 updates. The listener should copy a custom field value from parent to all children on update. It was previously working w/ Jira 7.
Specifically, having trouble implementing searchProvider.search() method. Code block below...I have loads of new type check errors and don't know where to begin!!
import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.issue.Issue
import com.atlassian.jira.issue.MutableIssue
import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.issue.issuetype.IssueType
import com.atlassian.jira.issue.util.DefaultIssueChangeHolder
import com.atlassian.jira.issue.IssueInputParameters
import com.atlassian.jira.issue.ModifiedValue
import com.atlassian.jira.bc.issue.*
import static com.atlassian.jira.workflow.TransitionOptions.Builder;
import com.atlassian.jira.issue.IssueManager;
import com.atlassian.jira.issue.link.IssueLinkManager
import com.atlassian.jira.issue.link.IssueLink
import org.apache.log4j.Logger
import org.apache.log4j.Level
import com.atlassian.jira.issue.search.SearchProvider
import com.atlassian.jira.jql.parser.JqlQueryParser
import com.atlassian.jira.web.bean.PagerFilter
import com.atlassian.jira.issue.index.IssueIndexingService;
import com.atlassian.jira.issue.search.IssueSearchResultsFactory;
import com.atlassian.jira.issue.search.DocumentSearchResultsFactory;
def log = Logger.getLogger("com.acme.debug")
log.setLevel(Level.DEBUG)
Issue issue = event.issue
def key = issue.getKey()
def customFieldManager = ComponentAccessor.getCustomFieldManager()
def issueManager = ComponentAccessor.getIssueManager();
def field = customFieldManager.getCustomFieldObjects(event.issue).find { it.name == "Priority Number" }
def issueService = ComponentAccessor.getIssueService()
def user = ComponentAccessor.getJiraAuthenticationContext().getLoggedInUser()
def jqlQueryParser = ComponentAccessor.getComponent(JqlQueryParser)
def searchProvider = ComponentAccessor.getComponent(SearchProvider)
def parentLink = customFieldManager.getCustomFieldObjectsByName('Parent Link') // getting the Parent Link custom field
def customFieldValue = issue.getCustomFieldValue(parentLink) // Parent Link field value
def parentKey = (String) customFieldValue
def parentIssue = issueManager.getIssueObject(parentKey) // Parent issue object
def parentValue = issue.getCustomFieldValue(field)
def jqlSearch = "issuetype in (Feature,'Forecasting Placeholder',Epic,Story)and status not in (Done,'Feature Post-Implementation','Feature Released') and issuekey in childIssuesOf(" + key + ")";
def query = jqlQueryParser.parseQuery(jqlSearch)
def results = searchProvider.search(query, user, PagerFilter.getUnlimitedFilter())
results.getResults().each {documentIssue ->;
def childIssue = issueManager.getIssueObject(documentIssue.id)
def changeHolder = new DefaultIssueChangeHolder()
def childValue = childIssue.getCustomFieldValue(field)
def issueIndexManager = ComponentAccessor.getComponent(IssueIndexingService)
field.updateValue(null, documentIssue, new ModifiedValue(childValue, parentValue), changeHolder)
issueIndexManager.reIndex(documentIssue)
}
I have found my way here https://confluence.atlassian.com/jiracore/lucene-upgrade-975041047.html but I am so far, unable to translate these updates...
Any advice is appreciated!
Logs:
2019-09-24 12:36:25,462 ERROR [runner.AbstractScriptListener]: *************************************************************************************
2019-09-24 12:36:25,462 ERROR [runner.AbstractScriptListener]: Script function failed on event: com.atlassian.jira.event.issue.IssueEvent, file: <inline script>
groovy.lang.MissingMethodException: No signature of method: com.atlassian.jira.issue.search.providers.LuceneSearchProvider.search() is applicable for argument types: (com.atlassian.query.QueryImpl, com.atlassian.jira.user.DelegatingApplicationUser, com.atlassian.jira.web.bean.PagerFilter) values: [{issuetype in ("Feature", "Forecasting Placeholder", "Epic", "Story")} AND {status not in ("Done", "Feature Post-Implementation", "Feature Released")} AND {issuekey in childIssuesOf(ZSMBT-10)}, ...]
Possible solutions: search(com.atlassian.jira.issue.search.SearchQuery, com.atlassian.jira.web.bean.PagerFilter), search(com.atlassian.jira.issue.search.SearchQuery, com.atlassian.jira.web.bean.PagerFilter, java.util.Set), search(com.atlassian.jira.issue.search.SearchQuery, org.apache.lucene.search.Collector), each(groovy.lang.Closure)
at Script402.run(Script402.groovy:49)
Hi @Lukasz Andrzejewski ,
You may have solved your issue a long time ago, but it may still help someone I hope))
In this script, I take the value of the text element from the Profile called (example) Department
import com.atlassian.sal.api.user.UserKey
import com.onresolve.scriptrunner.runner.customisers.PluginModule
import com.onresolve.scriptrunner.runner.customisers.WithPlugin
import de.communardo.atlassian.plugins.userprofile.external.api.model.data.TextBasedProfileElementData
import de.communardo.atlassian.plugins.userprofile.external.api.model.elements.TextBasedProfileElement
import de.communardo.atlassian.plugins.userprofile.external.api.service.UppProfileElementDataManager
import de.communardo.atlassian.plugins.userprofile.external.api.service.UppProfileElementManager
import static com.atlassian.jira.component.ComponentAccessor.getJiraAuthenticationContext
@WithPlugin("de.communardo.jira.plugins.userprofile")
@PluginModule
UppProfileElementManager uppProfileElementManager
@PluginModule
UppProfileElementDataManager uppProfileElementDataManager
def reporter = new UserKey(getJiraAuthenticationContext().getLoggedInUser().getKey())
TextBasedProfileElement textbasedProfileElement = uppProfileElementManager.getProfileElement(1);
TextBasedProfileElementData data = uppProfileElementDataManager.getProfileElementData(reporter, textbasedProfileElement);
def departmentData = data.getText()
Please take into account that you need to change your int .getProfileElement(1) acording to your ProfileElement ID
Best regards
Hello Lucas,
you can get (reading) access to profile elements when you map them to custom Jira fields as described in our documentation. Is this what you are looking for?
If you are looking for an API access this feature is not part of User Profiles for Jira.
Cheers,
Nadine
Communardo Products
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.