Hi Guys,
Need you help in fixing the following script , which was working before to delete unscreen which are not mapped with any project workflow, screen scheme. When trying to run the script in script console getting following error due to highlighted line in script, Please suggest :-
@Ram Kumar Aravindakshan _Adaptavist_
Could not find matching constructor for: com.atlassian.jira.web.action.admin.issuefields.screens.ViewFieldScreens(com.atlassian.jira.issue.fields.screen.DefaultFieldScreenManager, com.atlassian.jira.issue.fields.screen.DefaultFieldScreenFactory, com.atlassian.jira.issue.fields.screen.DefaultFieldScreenSchemeManager, com.atlassian.jira.workflow.OSWorkflowManager) at Script12.run(Script12.groovy:12)
import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.issue.fields.screen.FieldScreenFactory
import com.atlassian.jira.issue.fields.screen.FieldScreenManager
import com.atlassian.jira.issue.fields.screen.FieldScreenSchemeManager
import com.atlassian.jira.web.action.admin.issuefields.screens.ViewFieldScreens
import com.atlassian.jira.workflow.WorkflowManager
def fieldScreenManager = ComponentAccessor.getFieldScreenManager()
def fieldScreenFactory = ComponentAccessor.getComponent(FieldScreenFactory.class)
def fieldScreenSchemeManager = ComponentAccessor.getComponent(FieldScreenSchemeManager.class)
def workflowManager = ComponentAccessor.getWorkflowManager()
def viewFieldScreens = new ViewFieldScreens(fieldScreenManager, fieldScreenFactory, fieldScreenSchemeManager, workflowManager)
// use StringBuffer to spit out log to screen for ScriptRunner Console
def sb = new StringBuffer()
sb.append("Delete unused screens:\n");
fieldScreenManager.getFieldScreens().each { fieldScreen ->
//find all screens with no (or only null/previously deleted) screen schemes or workflows
def allEmptyOrNull = true;
viewFieldScreens.getFieldScreenSchemes(fieldScreen).each { fieldScreenScheme ->
if(fieldScreenScheme != null) {
allEmptyOrNull = false;
return;
}
}
if(!allEmptyOrNull) {
return;
}
viewFieldScreens.getWorkflows(fieldScreen).each { workflow ->
if(workflow != null) {
allEmptyOrNull = false;
return;
}
}
if(allEmptyOrNull) {
fieldScreenManager.removeFieldScreen(fieldScreen.getId())
sb.append("${fieldScreen.getName()}\n")
}
}
return "<pre>" + sb.toString() + "<pre>"
The problem is clearly in the invocation of the ViewFieldScreen object.
In your current code, you have initialised the ViewFieldScreen object with only 4 parameters in its constructor, as shown below:-
def viewFieldScreens = new ViewFieldScreens(fieldScreenManager, fieldScreenFactory, fieldScreenSchemeManager, workflowManager)
This is outdated.
If you are using Jira 8 and above, you should have 7 parameters, i.e.
ViewFieldScreens(FieldScreenManager fieldScreenManager, FieldScreenFactory fieldScreenFactory, FieldScreenSchemeManager fieldScreenSchemeManager, FieldScreenService fieldScreenService, WorkflowManager workflowManager, JiraAuthenticationContext jiraAuthenticationContext, com.atlassian.webresource.api.assembler.PageBuilderService pageBuilderService)
Please visit Jira's Java docs for more information.
Thank you and Kind regards,
Ram
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Hi @Ram Kumar Aravindakshan _Adaptavist_ @Hector Salvachua Thanks for the solution and sharing the existing issue link.
Here is the working script :-
import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.issue.fields.screen.FieldScreenFactory
import com.atlassian.jira.issue.fields.screen.FieldScreenManager
import com.atlassian.jira.issue.fields.screen.FieldScreenSchemeManager
import com.atlassian.jira.bc.issue.fields.screen.FieldScreenService
import com.atlassian.jira.web.action.admin.issuefields.screens.ViewFieldScreens
import com.atlassian.jira.workflow.WorkflowManager
import com.atlassian.webresource.api.assembler.PageBuilderService
def fieldScreenManager = ComponentAccessor.getFieldScreenManager()
def fieldScreenFactory = ComponentAccessor.getComponent(FieldScreenFactory.class)
def fieldScreenSchemeManager = ComponentAccessor.getComponent(FieldScreenSchemeManager.class)
def fieldScreenService = ComponentAccessor.getComponent(FieldScreenService.class)
def workflowManager = ComponentAccessor.getWorkflowManager()
def authenticationContext = ComponentAccessor.getJiraAuthenticationContext()
def pageBuilderService = ComponentAccessor.getComponent(PageBuilderService.class)
def viewFieldScreens = new ViewFieldScreens(fieldScreenManager, fieldScreenFactory, fieldScreenSchemeManager, fieldScreenService,
workflowManager, authenticationContext, pageBuilderService)
// use StringBuffer to spit out log to screen for ScriptRunner Console
def sb = new StringBuffer()
sb.append("Delete unused screens:\n");
fieldScreenManager.getFieldScreens().each {
fieldScreen ->
//find all screens with no (or only null/previously deleted) screen schemes or workflows
def allEmptyOrNull = true;
viewFieldScreens.getFieldScreenSchemes(fieldScreen).each {
fieldScreenScheme ->
if (fieldScreenScheme != null) {
allEmptyOrNull = false;
return;
}
}
if (!allEmptyOrNull) {
return;
}
viewFieldScreens.getWorkflows(fieldScreen).each {
workflow ->
if (workflow != null) {
allEmptyOrNull = false;
return;
}
}
if (allEmptyOrNull) {
fieldScreenManager.removeFieldScreen(fieldScreen.getId())
sb.append("${fieldScreen.getName()}\n")
}
}
return "<pre>" + sb.toString() + "<pre>"
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Online forums and learning are now in one easy-to-use experience.
By continuing, you accept the updated Community Terms of Use and acknowledge the Privacy Policy. Your public name, photo, and achievements may be publicly visible and available in search engines.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.