07-26-2018 02:35 PM
Hello all,
I would like your help whether there is a way to get from a java class the "activiti:field name" from a service Task and not only the value. For instance if we have this service task:
<serviceTask id="servicetask1" name="Service Task" activiti:class="Test">
<extensionElements>
<activiti:field name="theName" stringValue="test value"/>
</extensionElements>
</serviceTask>
And on the other hand:
class Test {
org.activiti.engine.delegate.Expression theName;
@Override
public void execute(DelegateExecution execution) throws Exception {
String value1 = (String) theName.getValue(execution);
//now value1 contains the string: "test value"
}
Can I somehow get the activiti:field name(="theName") (maybe from the bpmn file) without the need of declaring "Expression theName in the class??
Thanks in Advance,
Alexander.
08-01-2018 09:40 AM
Inside the execute method you can try this:
// in version 5x you can get the repositoryService using
// execution.getEngineServices().getRepositoryService()
BpmnModel model = repositoryService.getBpmnModel(execution.getProcessDefinitionId());
FlowElement flowElement = model.getFlowElement(execution.getCurrentActivityId());
List<FieldExtension> fieldExtensions = ((TaskWithFieldExtensions) flowElement).getFieldExtensions();
// loop through the list to get field extension with name you want fieldExtension.getFieldName()
// if only one extension field then should be the first element
Hope that helps.
08-04-2018 02:10 PM
Hello,
Thank you for the replay and yes it was indeed helpful! Furthermore, in case that someone else need it, it also works outside the execute method and even in another class like this:
FlowElement ServiceTaskName = getServiceTask(); // custom method to get Service Tasks from the repositoryService and //Bpmn model
FlowElement flowElement = model.getFlowElement(ServiceTaskName.getId());
List<FieldExtension> fieldExtensions = ((TaskWithFieldExtensions) flowElement).getFieldExtensions();
System.out.println("Extension name: "+fieldExtensions.get(0).getFieldName());//if only contains 1 element
Thanks again,
Alexander.
Explore our Alfresco products with the links below. Use labels to filter content by product module.