接上一篇博客
https://blog.youkuaiyun.com/BovinLee/article/details/90673442
,activiti加入了自定义属性,可使用时如何取出来呢,网上也说的五花八门,但我发现都好复杂并且有些博客讲的只晒了部分代码,这对新手来说白开心一场,本博客主要是讲解如何取出自定义属性:
上一篇博客的自定义属性的xml长这样子:
当然我项目中不是这个属性,但结构是一样的,如下图:
这里就是在取的时候需要用一个handler处理一下:
import org.activiti.bpmn.model.ExtensionElement;
import org.activiti.bpmn.model.UserTask;
import org.activiti.engine.impl.bpmn.parser.BpmnParse;
import org.activiti.engine.impl.bpmn.parser.handler.UserTaskParseHandler;
import org.activiti.engine.impl.pvm.process.ActivityImpl;
import java.util.List;
import java.util.Map;
public class ExtensionUserTaskParseHandler extends UserTaskParseHandler {
@Override
protected void executeParse(BpmnParse bpmnParse, UserTask userTask) {
//调用上层的解析
super.executeParse(bpmnParse, userTask);
//userTask有获取拓展元素的集合
Map<String, List<ExtensionElement>> extensionElements = userTask.getExtensionElements();
ActivityImpl activity = bpmnParse.getCurrentScope().findActivity(userTask.getId());
for (String ex:extensionElements.keySet()) {
for (ExtensionElement e:extensionElements.get(ex)) {
System.out.println(e.getNamespacePrefix()+"="+e.getName()+":"+e.getElementText());
//把key即自定义属性名和value(自定义属性值)存入activity的属性中
activity.setProperty(ex, e.getElementText());
}
}
}
}
需要在activiti的xml配置文件中启用该解析器,配置如下图:
重启应用,就可以用activity.getProperty("selectoffice")得到自定义属性了,activity(ActivityImpl) 这个的获取方法不用说了吧,百度一下;当然如果在设计modelor时没有给自定义属性赋值,则解析不到额。
debug信息: