Due to only 2 levels of default cascading fields we can create in Jira, I have installed the third party plugin named "Awesome custom fields" and I have create 3 levels of cascading fields for my company's purpose. But when I tried to export all the issue's fields to Excel then instead of normal text its coming as Json string. I have attached the SS for reference.
and when I exported into Excel file its showing as :
{"selection":[{"id":"Option 1","name":"Manual Error","children":["Option 1.1","181977ec-fd8e-4a44-bfa7-015cc7d5f77f","10588de6-443e-4a10-96ec-e7042c3dfd5e"]},{"id":"Option 1.1","name":"Assembly Error","children":["b300dddd-8110-4c1e-836e-f11546a554a0","71e6d5fd-09cb-494c-90d2-8fad04ae6e3a","ea78d008-7586-4b34-a2c2-b19eaf842039"]},{"id":"ea78d008-7586-4b34-a2c2-b19eaf842039","name":"Component Missing - Final Assembly","children":[]}]}
Instead of "Mannual Error->Assembly Error-> Component Missing -> Final Assembly"
Hey Paul
The following script will remove the screens that are not assigned to a scheme or in a workflow.
Is not fully tested so I would suggest to get a backup first.
import com.atlassian.jira.component.ComponentAccessor
import com.atlassian.jira.issue.fields.screen.FieldScreenManager
import com.atlassian.jira.issue.fields.screen.FieldScreenSchemeManager
import com.atlassian.jira.workflow.WorkflowActionsBean
def fieldScreenManager = ComponentAccessor.getComponent(FieldScreenManager)
def fieldScreenSchemeManager = ComponentAccessor.getComponent(FieldScreenSchemeManager)
def allScreensIds = fieldScreenManager.getFieldScreens().collect {it.id}
def screenSchemes = fieldScreenSchemeManager.fieldScreenSchemes
def screenIdsWithScheme = []
screenSchemes.each {
def items = fieldScreenSchemeManager.getFieldScreenSchemeItems(it).collect {it.fieldScreen.id}
screenIdsWithScheme << items
}
def workflowBean = new WorkflowActionsBean()
def screenIdsWithWorkflowAction = []
ComponentAccessor.workflowManager.workflows?.each {
screenIdsWithWorkflowAction << it.allActions?.findResults { workflowBean.getFieldScreenForView(it)?.id ?: null }
}
def screenIdsInWorkflows = screenIdsWithWorkflowAction.flatten().unique()
def screensNotAssociatedToScheme = (allScreensIds - screenIdsWithScheme.flatten() - screenIdsInWorkflows)
screensNotAssociatedToScheme?.each {
log.debug "${fieldScreenManager.getFieldScreen(it).name} is not associated with any Screen Scheme or workflow and will be removed"
fieldScreenManager.removeFieldScreen(it)
}
Let me know how this went.
Regards, Thanos
Can one call remove() on a FieldScreen() I have a different script going, but wasn't 100% sure on what the "delete" method was named?
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
@Thanos Batagiannis [Adaptavist]
Is there any script to delete unused Field Configuration Schemes, Field Configurations and Fields?
Also, Unused Issue Types Schemes and Issue Types.
Thanks in advance.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
I ended up with a simpler script, posted here for posterity and drive-by googlers:
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
FieldScreenManager fieldScreenManager = ComponentAccessor.getFieldScreenManager()
FieldScreenFactory fieldScreenFactory = ComponentAccessor.getComponent(FieldScreenFactory.class)
FieldScreenSchemeManager fieldScreenSchemeManager = ComponentAccessor.getComponent(FieldScreenSchemeManager.class)
WorkflowManager workflowManager = ComponentAccessor.getWorkflowManager()
ViewFieldScreens viewFieldScreens = new ViewFieldScreens(fieldScreenManager, fieldScreenFactory, fieldScreenSchemeManager, workflowManager)
log.error 'viewFieldScreens: ' + viewFieldScreens
// use StringBuffer to spit out log to screen for ScriptRunner Console
def sb = new StringBuffer()
for(def fieldScreen : fieldScreenManager.getFieldScreens()) {
if(viewFieldScreens.isDeletable(fieldScreen)) {
sb.append("Deleted ${fieldScreen.getName()}")
fieldScreenManager.removeFieldScreen(fieldScreen.getId())
sb.append(" xxxxx ")
}
/*
// get screen schemes that use the screen
def fieldScreenSchemes = viewFieldScreens.getFieldScreenSchemes(fieldScreen)
int screenSize = fieldScreenSchemes.size()
sb.append("${fieldScreenSchemes.size()}")
sb.append(" xxxxx ")
// get the workflows that use the screen, if any
def workflows = viewFieldScreens.getWorkflows(fieldScreen)
def workflowSize = workflows.size()
sb.append("${workflows.size()}")
*/
}
return sb.toString()
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
Hi @Paul Tiseo
I just shared an article on bulk deleting unused screens with JMeter.
It doesn't require additional apps/plugins and is quite safe, since it's just automatically firing HTTP requests that could be made by an actual (admin) user.
Cheers
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.
You must be a registered user to add a comment. If you've already registered, sign in. Otherwise, register and sign in.