I am starting to write a JIRA workflow post function plugin, which needs to have a persistent configuration.
Things are working as expecated when it comes to the configuration page. There is a velocity template which is used for both edit- and input-params. It is possible to persist the configuration values and to load them in the configuration's web form.
I am extending AbstractWorkflowPluginFactory implementing WorkflowPluginFunctionFactory as my plugin's function factory.
getDescriptorParams is providing a Map of all the necesarry key-value-pairs.
Afaik getDesciptorParams results are meant to be passed in the 'arg' parameter of post-functions' execute().
The problem is, when I try to implement the post function (extends AbstractJiraFunctionProvider), execute is not getting the values provided by getDescriptorParams. I only see two key-value-pairs for the keys "class.name" and "full.module.key" (both point out correct values for my plugin, but I neither set them in getDescriptorParams nor I need them) but nothing else when debugging.
Again I used the debugger to check the outcome of getDescriptorParams: When persisting the configuration, the result of getDescriptorParams is clearly containing the result I wish to use in execute()'s args.
What am I missing?
@Thilo Fester
Well you are almost there. I can give you a small example with a parameter of say project_key
The factory class will look something like :
public class FunctionFactoryTest extends AbstractWorkflowPluginFactory implements WorkflowPluginFunctionFactory{ private static final String PROJECT_KEY = "project_key"; @Override protected void getVelocityParamsForEdit(Map velocityParams, AbstractDescriptor inDescriptor) { FunctionDescriptor descriptor = (FunctionDescriptor) inDescriptor; String currentProjectKey = (String) descriptor.getArgs().get(PROJECT_KEY); velocityParams.put(PROJECT_KEY, currentProjectKey); } @Override protected void getVelocityParamsForInput(Map velocityParams) { velocityParams.put(PROJECT_KEY, ""); } @Override protected void getVelocityParamsForView(Map velocityParams, AbstractDescriptor inDescriptor) { FunctionDescriptor descriptor = (FunctionDescriptor) inDescriptor; velocityParams.put(PROJECT_KEY, descriptor.getArgs().get(PROJECT_KEY)); } public Map getDescriptorParams(Map conditionParams) { Map<String, String> params = new HashMap<String, String>(); params.put(PROJECT_KEY, extractSingleParam(conditionParams, PROJECT_KEY)); return params; } }
The execute function can be used to get the project value like this:
@Override public void execute(Map transientVars, Map args, PropertySet ps) throws WorkflowException { String projectKey = (String) args.get("project_key"); }
and then you can form the velocity files to render the value easily from this class using the variable names correctly as given in the map.
<input type="text" name="project_key" value="$project_key"/>
A more detailed explanation with working example can be found from this link by Jtricks. workflow-post-function implementation
Thanks Satyam. I found out I forgot to publish my workflow draft m/. Thanks for your support anyway.
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.