How to identify the workflows that are using Lookup Manager

Scenario

Instead of going through every workflow and find where the app is being used, the user can use ScriptRunner to identify the workflows that are using Lookup Manager post functions.

How-to

Step 1:Go to ScriptRunner Console

Step 2: Copy and paste the code below into the console

import com.atlassian.jira.component.ComponentAccessor import com.atlassian.jira.plugin.workflow.AbstractWorkflowModuleDescriptor import com.atlassian.jira.workflow.JiraWorkflow import com.atlassian.jira.workflow.WorkflowManager import com.atlassian.plugin.PluginAccessor import org.apache.log4j.Level log.setLevel(Level.DEBUG) import java.util.regex.Matcher PluginAccessor pluginAccessor = ComponentAccessor.getPluginAccessor() WorkflowManager workflowManager = ComponentAccessor.getWorkflowManager() //Lookup Manager has 4 post functions //1. LookupPostFunction //2. LookupEntityPostFunction //3. LookupReversePostFunction //4. RemoveEntityPostFunction String searchText = 'com.akelesconsulting.jira.plugins.jira.workflow.LookupPostFunction' Collection<JiraWorkflow> workflows = workflowManager.getWorkflows() String result = "Workflow; Action; <br>" workflows.each{workflow -> //log.debug("Checking workflow name = [" + workflow.getDisplayName() + "]") def workflowXml = workflow.descriptor.asXML() Matcher m = workflowXml =~ /${searchText}/ if (m.find()) { String workflow_name = "${workflow.name}${if(!workflow.isActive()){"(inactive)"} else ''}${if(workflow.isDraftWorkflow()){"(draft)"} else ''}" log.debug("Workflow name = [" + workflow.getDisplayName() + "]") def wf = new XmlParser().parseText(workflowXml) List<Node> wf_flat = wf.depthFirst() wf_flat.each{ if (it.text() ==~ /.*${searchText}.*/){ def nodeInfo = getNodeInfo(it,searchText) if (nodeInfo){ result += "$workflow_name;$nodeInfo<br>" } } } } } result String getNodeInfo(Node n, String search) { String nodetext = '' def valid_action = false def valid_function = false def valid_step = false if (n.name() == 'function') { def p = n.parent() while (p) { switch (p.name()) { case 'post-functions': valid_function = true; break; case 'action': valid_action = true log.debug(" --> ${p.attribute('name')} (${p.attribute('id')});") nodetext += " ${p.attribute('name')} (${p.attribute('id')});"; break; } p = p.parent() } } if (valid_action && valid_function) { return nodetext } else { return "" } }

 

Step 3: Verify

Check the Logs

Check the Result