Forums

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

Bulk delete Unused Screen Script not working using Script Console

Vikrant Yadav
Community Champion
July 25, 2022

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>"

1 answer

1 accepted

1 vote
Answer accepted
Ram Kumar Aravindakshan _Adaptavist_
Community Champion
July 25, 2022

Hi @Vikrant Yadav

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

Hector Salvachua
I'm New Here
I'm New Here
Those new to the Atlassian Community have posted less than three times. Give them a warm welcome!
July 25, 2022
Like Vikrant Yadav likes this
Vikrant Yadav
Community Champion
July 25, 2022

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>"

Suggest an answer

Log in or Sign up to answer