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

Export Structure Views and Custom Fields to a File

Created 1 year ago, Updated 23 day(s) ago
App in script
ScriptRunner For Jira
ScriptRunner For Jira
by Adaptavist
Compatibility
compatibility bullet
Jira (7.7 - 8.6)
compatibility bullet
ScriptRunner For Jira (5.6.14)
Language |
groovy
import com.atlassian.jira.component.ComponentAccessor
import com.onresolve.scriptrunner.runner.customisers.PluginModule
import com.onresolve.scriptrunner.runner.customisers.WithPlugin
import com.onresolve.scriptrunner.runner.rest.common.CustomEndpointDelegate
import com.atlassian.jira.config.util.JiraHome
import groovy.transform.BaseScript
import org.apache.log4j.Level
import com.almworks.jira.structure.api.StructureComponents
import com.almworks.jira.structure.api.util.StructureUtil
import org.apache.log4j.Logger

import javax.ws.rs.core.MediaType
import javax.ws.rs.core.MultivaluedMap
import javax.ws.rs.core.Response

@BaseScript CustomEndpointDelegate delegate

@WithPlugin("com.almworks.jira.structure")
@PluginModule
StructureComponents structureComponents

// Set log level to INFO (default for REST endpoints is WARN)
def log = Logger.getLogger(getClass())
log.setLevel(Level.INFO)

def viewManager = structureComponents.viewManager
def jiraHome = ComponentAccessor.getComponent(JiraHome)

// The requesting user must be in one of these groups
final allowedGroups = ['jira-administrators']
getStructureViewsBackup(httpMethod: "GET", groups: allowedGroups) { MultivaluedMap queryParams, String body ->
    // Create the file to export in the Jira export directory
    def exportFile = new File(jiraHome.exportDirectory, 'structure_export.txt')
    exportFile.withPrintWriter { pw ->
        // Print custom fields id and name in a section
        pw.println('------- Custom Fields\n')
        def customFields = ComponentAccessor.customFieldManager.customFieldObjects
        customFields.each { field ->
            pw.println("id: ${field.id}, name: ${field.name}")
        }

        // Print structure views id, owner and JSON specification
        pw.println('\n------- Structure Views\n')
        def views = viewManager.getViews(null)
        views.each { view ->
            def spec = StructureUtil.toJson(view.specification)
            pw.println("id: ${view.id}, owner: ${view.owner}, spec:\n${spec}\n")
        }
    }

    log.info("Export file generated at export directory, path: '${exportFile.absolutePath}'")
    Response.ok(exportFile, MediaType.APPLICATION_OCTET_STREAM_TYPE)
        .header('Content-Disposition', "attachment; filename=\"${exportFile.name}\"")
        .build()
}
Having an issue with this script?
Report it here