Result of getDescriptorParams is not available in post function's execute args

Thilo Fester April 16, 2017

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?

1 answer

1 vote
Deleted user April 17, 2017

@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

Thilo Fester April 19, 2017

Thanks Satyam. I found out I forgot to publish my workflow draft m/. Thanks for your support anyway.

Suggest an answer

Log in or Sign up to answer