Skip to main content
Example scripts
arrow icon
To homepage
Jira
Data centre icon
Data Center

Remove Unused Screens

Created 10 month(s) ago, Updated 30 day(s) ago
App in script
ScriptRunner For Jira
ScriptRunner For Jira
by Adaptavist
Compatibility
compatibility bullet
Jira (8.0 - 8.19)
compatibility bullet
ScriptRunner For Jira (7.10.0)
Language |
groovy
import com.atlassian.webresource.api.assembler.PageBuilderService
import com.atlassian.jira.bc.issue.fields.screen.FieldScreenService
import com.atlassian.jira.issue.fields.screen.FieldScreenFactory
import com.atlassian.jira.web.action.admin.issuefields.screens.ViewFieldScreens
import com.atlassian.jira.component.ComponentAccessor
import com.onresolve.scriptrunner.canned.util.OutputFormatter

def fieldScreenManager = ComponentAccessor.getFieldScreenManager()
def fieldScreenFactory = ComponentAccessor.getComponent(FieldScreenFactory)
def fieldScreenSchemeManager = ComponentAccessor.getFieldScreenSchemeManager()
def fieldScreenService = ComponentAccessor.getComponent(FieldScreenService)
def workflowManager = ComponentAccessor.getWorkflowManager()
def jiraAuthenticationContext = ComponentAccessor.getJiraAuthenticationContext()
def pageBuilderService = ComponentAccessor.getComponent(PageBuilderService)

def deletedScreens = []
def errorScreens = [:]

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

fieldScreenManager.getFieldScreens().each { fieldScreen ->
    try {
        def screenSchemesIsEmpty = viewFieldScreens.getFieldScreenSchemes(fieldScreen).isEmpty()
        def workflowsIsEmpty = viewFieldScreens.getWorkflows(fieldScreen).isEmpty()

        if (screenSchemesIsEmpty && workflowsIsEmpty) {
            fieldScreenManager.removeFieldScreen(fieldScreen.getId())
            deletedScreens.add(fieldScreen.name)
        }
    } catch (Exception e) {
        errorScreens.put(fieldScreen.name, e.getMessage())
    }
}

OutputFormatter.markupBuilder {
    h2('Screens Report')
    !deletedScreens && !errorScreens && p('No unused screens found')
    if (deletedScreens) {
        h3('Deleted Screens:')
        ul {
            deletedScreens.each {
                li(it)
            }
        }
    }
    if (errorScreens) {
        h3('Errors:')
        table(class: 'aui') {
            thead {
                tr {
                    th('Screen Name')
                    th('Error')
                }
            }
            tbody {
                errorScreens.each { screen, error ->
                    tr {
                        td(screen)
                        td(error)
                    }
                }
            }
        }
    }
}
Having an issue with this script?
Report it here