activiti自定义流程参数和节点参数(通过JAVA代码生成)

更新时间:2023-08-03 13:05:59 阅读: 评论:0

activiti⾃定义流程参数和节点参数(通过JAVA代码⽣成)
项⽬地址:
有时候需要将⼀些业务数据保存到流程中,activiti本⾝已经⽀持⽤户⾃定义参数,整个流程和⽤户节点都⽀持。
设置⾃定义流程参数
整个流程的参数都在Process对象中,通过看Process的⽅法可以看到有⼀个tAttributes⽅法
public void tAttributes(Map<String, List<ExtensionAttribute>> attributes){
this.attributes = attributes;
}
看⼀下ExtensionAttribute对象,有这些属性
public class ExtensionAttribute {
protected String name;
protected String value;
protected String namespacePrefix;
protected String namespace;
public ExtensionAttribute(){
}
}
说⼀些在使⽤中踩过的坑。
当时是这样设置的
Map<String, List<ExtensionAttribute>> attributes =new HashMap<>(2);
List<ExtensionAttribute> extensionAttributes =new ArrayList<>();
ExtensionAttribute extensionAttribute =new ExtensionAttribute();
extensionAttribute.tName("name");产后腰疼是什么原因引起的
extensionAttribute.tValue("lisi");
extensionAttribute.tNamespace("ur");
extensionAttribute.tNamespacePrefix("activiti");
extensionAttributes.add(extensionAttribute);
attributes.put("ur",extensionAttributes);
process.tAttributes(attributes);
这样设置后⾯是可以取处理,但是节点上的⼀些属性就拿不到了。⽐如formKey属性。
这是由于activii在将模型数据解析为XML时,会给属性设置命名空间。
可以看UrTaskXMLConverter这个类
@Override红豆牛奶西米露
@SuppressWarnings("unchecked")
protected void writeAdditionalAttributes(BaElement element, BpmnModel model, XMLStreamWriter xtw)throws Exception {
UrTask urTask =(UrTask) element;
writeQualifiedAttribute(ATTRIBUTE_TASK_USER_ASSIGNEE, Assignee(), xtw);
writeQualifiedAttribute(ATTRIBUTE_TASK_USER_OWNER, Owner(), xtw);
writeQualifiedAttribute(ATTRIBUTE_TASK_USER_CANDIDATEUSERS,CandidateUrs()), xtw); writeQualifiedAttribute(ATTRIBUTE_TASK_USER_CANDIDATEGROUPS,CandidateGroups()), xtw); writeQualifiedAttribute(ATTRIBUTE_TASK_USER_DUEDATE, DueDate(), xtw);
writeQualifiedAttribute(ATTRIBUTE_TASK_USER_BUSINESS_CALENDAR_NAME, BusinessCalendarName(), xtw); writeQualifiedAttribute(ATTRIBUTE_TASK_USER_CATEGORY, Category(), xtw);
//这⾥将formKey写进xml⽂件
writeQualifiedAttribute(ATTRIBUTE_FORM_FORMKEY, FormKey(), xtw);
Priority()!= null){
山西考试招生网官网
writeQualifiedAttribute(ATTRIBUTE_TASK_USER_PRIORITY, Priority().toString(), xtw);
}
牡蛎中药if(StringUtils.ExtensionId())){
writeQualifiedAttribute(ATTRIBUTE_TASK_SERVICE_EXTENSIONID, ExtensionId(), xtw);
}
SkipExpression()!= null){
writeQualifiedAttribute(ATTRIBUTE_TASK_USER_SKIP_EXPRESSION, SkipExpression(), xtw);
}
// write custom attributes
BpmnXMLUtil.Attributes().values(), xtw, defaultElementAttributes,
defaultActivityAttributes, defaultUrTaskAttributes);
}
跟进writeQualifiedAttribute⽅法,会调⽤org.verter.util.BpmnXMLUtil#writeQualifiedAttribute的⽅法,这⾥可以看到
public static void writeQualifiedAttribute(String attributeName, String value, XMLStreamWriter xtw)throws Exception {
if(StringUtils.isNotEmpty(value)){
//ACTIVITI_EXTENSIONS_NAMESPACE = "activiti/bpmn";
//ACTIVITI_EXTENSIONS_PREFIX = "activiti";
xtw.writeAttribute(ACTIVITI_EXTENSIONS_PREFIX, ACTIVITI_EXTENSIONS_NAMESPACE, attributeName, value);
}
}
这⾥设置命名空间是"activiti/bpmn",但是由于在给流程设置⾃定义参数时,给的变量设置的命名空间是"ur",这导致整个流程的命名空间变为⾃⼰设置的。这就会使formKey存进去,拿不出来。
解决⽅法
1.设置流程命名空间时设置NamespacePrefix不要为"actiiviti",Namespace⾃⼰设置。
2.或者NamespacePrefix为"actiiviti",但Namespace必须为"activiti/bpmn"。
设置节点⾃定义参数
节点设置⾃定义参数设置UrTask.tCustomProperties。部分代码
if(customs!= null){
List<CustomProperty> customProperties =new ArrayList<>();
苹果手机如何截图Map<String, String> map = MapUtil.objectToMap(customs);
for(String k : map.keySet()){
CustomProperty customProperty =new CustomProperty();
customProperty.tName(k);
customProperty.(k));
customProperty.tId(k);
customProperties.add(customProperty);
}
urTask.tCustomProperties(customProperties);
}
这⾥customs是⾃定义的参数对象,⾥⾯的属性⾃⼰定义。然后⽤MapUtil.objectToMap将对象转为Map。这样后⾯加⼀个属性,基本不⽤在改代码。
需要注意的是节点设置时是CustomProperties属性,但是拿出来时是ExtensionElements。
一把雨伞英语解析代码
Map<String, List<ExtensionElement>> extensionElements = ExtensionElements();
if(extensionElements != null && extensionElements.size()>0){
Map<String, Object> attributeMap =new HashMap<>(2);
for(String k : extensionElements.keySet()){
List<ExtensionElement> extensionElement = (k);
if(CollectionUtil.isNotEmpty(extensionElement)){
for(ExtensionElement extension : extensionElement){
attributeMap.Name(), ElementText());
}
}
CustomPropertiesDTO customPropertiesDTO =new CustomPropertiesDTO();
customPropertiesDTO =(CustomPropertiesDTO) MapUtil.mapToObject(attributeMap, customPropertiesDTO);
processNodeDTO.tCustomProperties(customPropertiesDTO);
}
}
activiti的源代码在org.verter.UrTaskXMLConverter#writeExtensionChildElements
@Override
protected boolean writeExtensionChildElements(BaElement element,boolean didWriteExtensionStartElement, XMLStreamWriter xtw)throws Exception {
UrTask urTask =(UrTask) element;
didWriteExtensionStartElement =writeFormProperties(urTask, didWriteExtensionStartElement, xtw);
didWriteExtensionStartElement =writeCustomIdentities(element, didWriteExtensionStartElement, xtw);
if(!CustomProperties().isEmpty()){
//取出⾃定义属性
佩顿
for(CustomProperty customProperty : CustomProperties()){
if(StringUtils.SimpleValue())){
continue;
}
纵酒
if(didWriteExtensionStartElement ==fal){
//放进extensionElements属性
xtw.writeStartElement(ELEMENT_EXTENSIONS);
didWriteExtensionStartElement =true;
}
xtw.writeStartElement(ACTIVITI_EXTENSIONS_PREFIX, Name(), ACTIVITI_EXTENSIONS_NAMESPACE);
xtw.SimpleValue());
xtw.writeEndElement();
}
}
return didWriteExtensionStartElement;
}

本文发布于:2023-08-03 13:05:59,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/82/1127682.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:设置   流程   参数   定义
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图