when deleting unused screens using groovy scripts given by atlassisan i am getting the error.

Suresh Kumar May 26, 2022

https://confluence.atlassian.com/clean/advanced-cleanup-1018789335.html

 

when i am trying to perform the activity  i am getting the error at the below statement

def viewFieldScreens = new ViewFieldScreens(fieldScreenManager, fieldScreenFactory, fieldScreenSchemeManager, workflowManager)

 

can some one help

Static type checking] - Cannot find matching method com.atlassian.jira.web.action.admin.issuefields.screens.ViewFieldScreens#<init>(com.atlassian.jira.issue.fields.screen.FieldScreenManager, com.atlassian.jira.issue.fields.screen.FieldScreenFactory, com.atlassian.jira.issue.fields.screen.FieldScreenSchemeManager, com.atlassian.jira.workflow.WorkflowManager). Please check if the declared type is correct and if the method exists.

 

3. Delete unused screens:

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

4 answers

1 accepted

0 votes
Answer accepted
Vikrant Yadav
Community Leader
Community Leader
Community Leaders are connectors, ambassadors, and mentors. On the online community, they serve as thought leaders, product experts, and moderators.
May 26, 2022

Hi @Suresh Kumar  Welcome to Atlassian Community!

Script you are using is for JIRA Server and JIRA Data Center. It doesn't work on JIRA Cloud. 

For JIRA Cloud, I am not sure how bulk deletion work in JIRA Cloud but Atlassian is working on, you can vote this issue  :- https://jira.atlassian.com/browse/JRACLOUD-71733

Some example for bulk deletion :- 

https://github.com/cjlittle/jira-scripts/tree/main/scriptrunner-cloud

Thanks

V.Y

Suresh Kumar May 29, 2022

Vikranth our Jira is clustered environment and for deletion of workflows and other things its all working fine for deletion only for the unused screens we are facing issues.

 

with the error attached earlier. all i want is someone check the script and help me where the issue is.

def viewFieldScreens = new ViewFieldScreens(fieldScreenManager, fieldScreenFactory, fieldScreenSchemeManager, workflowManager) 

this is where i am getting error.
Vikrant Yadav
Community Leader
Community Leader
Community Leaders are connectors, ambassadors, and mentors. On the online community, they serve as thought leaders, product experts, and moderators.
May 30, 2022

@Ram Kumar Aravindakshan _Adaptavist_  Kindly suggest. Following script is not working when cleaning unused screens using script console :- 

Getting error :- 

groovy.lang.GroovyRuntimeException: 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 Script811.run(Script811.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>"
Ahmed Arslan August 19, 2022

Wondering, If there will be an updated for this.

Vikrant Yadav
Community Leader
Community Leader
Community Leaders are connectors, ambassadors, and mentors. On the online community, they serve as thought leaders, product experts, and moderators.
August 19, 2022
0 votes
Suresh Kumar October 10, 2022

HI This has been solved

0 votes
Aleksei Markov
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!
August 15, 2022

@Suresh Kumar , if you use JIRA 8,  constructor of class ViewFieldScreens looks like 

public ViewFieldScreens(FieldScreenManager fieldScreenManager,
                        FieldScreenFactory fieldScreenFactory,
                        FieldScreenSchemeManager fieldScreenSchemeManager,
                        FieldScreenService fieldScreenService,
                        WorkflowManager workflowManager,
                        JiraAuthenticationContext jiraAuthenticationContext,
                        com.atlassian.webresource.api.assembler.PageBuilderService pageBuilderService)

 so, the working code looks like this

 

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

import com.atlassian.jira.bc.issue.fields.screen.FieldScreenService

import com.atlassian.webresource.api.assembler.PageBuilderService

def fieldScreenManager = ComponentAccessor.getFieldScreenManager()

def fieldScreenFactory = ComponentAccessor.getComponent(FieldScreenFactory.class)

def fieldScreenSchemeManager = ComponentAccessor.getComponent(FieldScreenSchemeManager.class)

def workflowManager = ComponentAccessor.getWorkflowManager()

def fieldScreenService = ComponentAccessor.getComponent(FieldScreenService.class)

def jiraAuthenticationContext = ComponentAccessor.jiraAuthenticationContext

def pageBuilderService = ComponentAccessor.getComponent(PageBuilderService.class)

def viewFieldScreens = new ViewFieldScreens(fieldScreenManager, fieldScreenFactory, fieldScreenSchemeManager, fieldScreenService, workflowManager, jiraAuthenticationContext, 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>"
0 votes
Ram Kumar Aravindakshan _Adaptavist_
Community Leader
Community Leader
Community Leaders are connectors, ambassadors, and mentors. On the online community, they serve as thought leaders, product experts, and moderators.
May 30, 2022

Hi @Suresh Kumar,

Please confirm if you are running on a cloud-based environment or a Server / DC environment?

If it is the former, the approach you are currently using will not work, mainly because the API is different, and there is no access to the Jira Server / DC APIs like com.atlassian.jira.component.ComponentAccessor

Thank you and Kind regards,

Ram

Ansari
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!
June 7, 2022

its not working on Jira Server environment.

Suggest an answer

Log in or Sign up to answer
DEPLOYMENT TYPE
CLOUD
PRODUCT PLAN
STANDARD
TAGS
AUG Leaders

Atlassian Community Events