Activiti6-FormService(学习笔记)重要
设置流程定义文件:
- <?xml version="1.0" encoding="UTF-8"?>
- <definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:activiti="http://activiti.org/bpmn"
- xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC"
- xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" typeLanguage="http://www.w3.org/2001/XMLSchema"
- expressionLanguage="http://www.w3.org/1999/XPath" targetNamespace="http://www.activiti.org/test">
- <process id="my-process">
- <!--startEvent/userTask都可以配置的表单项-->
- <!-- 1.activiti:formKey指定表单的key,也就是一个url,获取到这个值以后,
- 后端可以设置一些算法,和逻辑,解析出所定义的模板 -->
- <startEvent id="start" activiti:formKey="/rest/process/form/start">
- <!--扩展属性,设置表单内容-->
- <extensionElements>
- <activiti:formProperty id="message" name="信息" type="string" required="true"/>
- </extensionElements>
- </startEvent>
- <sequenceFlow id="flow1" sourceRef="start" targetRef="someTask" />
- <userTask id="someTask" name="Activiti is awesome!"
- activiti:formKey="/rest/process/form/userTask">
- <extensionElements>
- <activiti:formProperty id="yesORno" name="审批" type="string" required="true"/>
- </extensionElements>
- </userTask>
- <sequenceFlow id="flow2" sourceRef="someTask" targetRef="end" />
- <endEvent id="end" />
- </process>
- </definitions>
编写测试类:
- public class FormServiceTest {
- private static final Logger LOGGER = LoggerFactory.getLogger(FormServiceTest.class);
- @Rule
- public ActivitiRule activitiRule = new ActivitiRule();
- @Test
- @Deployment(resources = {"my-process-form.bpmn20.xml"})//部署定义文件
- public void testFormService(){
- FormService formService = activitiRule.getFormService();
- //获取流程定义文件
- ProcessDefinition processDefinition = activitiRule.getRepositoryService().createProcessDefinitionQuery().singleResult();
- //用formService获取前面在流程定义文件里的内容
- //获取startFormKey
- String startFormKey = formService.getStartFormKey(processDefinition.getId());
- LOGGER.info("startFormKey = {}",startFormKey);
- //获取表单内容(区分start还是task表单),要先获取FromData,然后从中解析出表单的数量跟列表
- StartFormData startFormData = formService.getStartFormData(processDefinition.getId());
- //通过startFormData获取表单集合、列表
- List<FormProperty> formProperties = startFormData.getFormProperties();
- for (FormProperty formProperty : formProperties) {
- LOGGER.info("formProperty = {}",ToStringBuilder.reflectionToString(formProperty,ToStringStyle.JSON_STYLE));
- }
- //获取task内容.这里用到的getTaskFormData()需要获取TaskID但是只有流程启
- // 动后运行到Task才会有TaskID,所以在这里需要启动流程
- //假装一个表单提交需要用到的内容
- Map<String,String> properties = Maps.newHashMap();
- properties.put("message","my test message");
- //用提交表单的方式 启动流程
- ProcessInstance processInstance = formService.submitStartFormData(processDefinition.getId(), properties);
- //Task就会生成了,接着获取Task
- Task task = activitiRule.getTaskService().createTaskQuery().singleResult();
- //接着就可以获取Task表单了
- TaskFormData taskFormData = formService.getTaskFormData(task.getId());
- List<FormProperty> taskFormDataFormProperties = taskFormData.getFormProperties();
- for (FormProperty property : taskFormDataFormProperties) {
- LOGGER.info("property = {}",ToStringBuilder.reflectionToString(property,ToStringStyle.JSON_STYLE));
- }
- //让表单继续执行
- // 这里Task里的yesORno设的是必填属性,所以必须给予其值
- HashMap<String,String> properties1 = Maps.newHashMap();
- properties1.put("yesORno","yes");
- formService.submitTaskFormData(task.getId(),properties1);
- //查询一下表单是否还存在
- Task task1 = activitiRule.getTaskService().createTaskQuery().taskId(task.getId()).singleResult();
- LOGGER.info("task1 = {}",task1);
- }
- }
测试结果如下:
- ProcessEngine default created
- startFormKey = /rest/process/form/start
- formProperty = {"id":"message","name":"\u4FE1\u606F","type":"org.activiti.engine.impl.form.StringFormType@352c308","isRequired":true,"isReadable":true,"isWritable":true,"value":null}
- property = {"id":"yesORno","name":"\u5BA1\u6279","type":"org.activiti.engine.impl.form.StringFormType@352c308","isRequired":true,"isReadable":true,"isWritable":true,"value":null}
- task1 = null
Activiti6-FormService(学习笔记)重要的更多相关文章
- webx学习笔记
Webx学习笔记周建旭 2014-08-01 Webx工作流程 图 3.2. Webx Framework如何响应请求 当Webx Framework接收到一个来自WEB的请求以后,实际上它主要做了两 ...
- activiti学习笔记一
activiti学习笔记 在讲activiti之前我们必须先了解一下什么是工作流,什么是工作流引擎. 在我们的日常工作中,我们会碰到很多流程化的东西,什么是流程化呢,其实通俗来讲就是有一系列固定的步骤 ...
- js学习笔记:webpack基础入门(一)
之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...
- PHP-自定义模板-学习笔记
1. 开始 这几天,看了李炎恢老师的<PHP第二季度视频>中的“章节7:创建TPL自定义模板”,做一个学习笔记,通过绘制架构图.UML类图和思维导图,来对加深理解. 2. 整体架构图 ...
- PHP-会员登录与注册例子解析-学习笔记
1.开始 最近开始学习李炎恢老师的<PHP第二季度视频>中的“章节5:使用OOP注册会员”,做一个学习笔记,通过绘制基本页面流程和UML类图,来对加深理解. 2.基本页面流程 3.通过UM ...
- 2014年暑假c#学习笔记目录
2014年暑假c#学习笔记 一.C#编程基础 1. c#编程基础之枚举 2. c#编程基础之函数可变参数 3. c#编程基础之字符串基础 4. c#编程基础之字符串函数 5.c#编程基础之ref.ou ...
- JAVA GUI编程学习笔记目录
2014年暑假JAVA GUI编程学习笔记目录 1.JAVA之GUI编程概述 2.JAVA之GUI编程布局 3.JAVA之GUI编程Frame窗口 4.JAVA之GUI编程事件监听机制 5.JAVA之 ...
- seaJs学习笔记2 – seaJs组建库的使用
原文地址:seaJs学习笔记2 – seaJs组建库的使用 我觉得学习新东西并不是会使用它就够了的,会使用仅仅代表你看懂了,理解了,二不代表你深入了,彻悟了它的精髓. 所以不断的学习将是源源不断. 最 ...
- CSS学习笔记
CSS学习笔记 2016年12月15日整理 CSS基础 Chapter1 在console输入escape("宋体") ENTER 就会出现unicode编码 显示"%u ...
- HTML学习笔记
HTML学习笔记 2016年12月15日整理 Chapter1 URL(scheme://host.domain:port/path/filename) scheme: 定义因特网服务的类型,常见的为 ...
随机推荐
- 分布式基础通信协议:paxos、totem 和 gossip(转载)
背景: 在分布式中,最难解决的一个问题就是多个节点间数据同步问题.为了解决这样的问题,涌现出了各种奇思妙想.只有在解决了如何进行信息同步的基础之上才衍生出形形色色的应用.这里开始介绍几种分布式通信协议 ...
- vue项目实现记住密码功能
一.谷歌浏览的残留问题 现在很多的网站都有一个需求是记住密码这个功能,为的是避免用户下次登录的时候繁琐的输入过程. 像是一些主流的浏览器(比如Chrome)都有了这个功能,而且如果你登录了Chrom ...
- C# 提前异步加载数据
前言 在我们应用程序中,如果有较大的数据需要从数据库或者本地读取,且是一次性的话,可以提前获取数据并缓存在内存中. 一般处理方法:利用应用程序启动到用户使用功能这一段时间,提前加载数据. 问题来了,因 ...
- 25 ,CSS 构造表格
1. 表格的基础构造 2. 边距和边线应用 3. 隐藏和删除应用 1. 简单表格 table { width:auto; border-collapse:collapse; margin-left: ...
- Django 传递额外参数及 URL别名
传递额外参数到视图函数中 在 urls.py 文件中添加下面内容 from django.conf.urls import url urlpatterns = [ url(r'index', view ...
- lock了mutex的线程退出了却没有unlock时会怎么样?
https://stackoverflow.com/questions/4424193/what-happens-to-mutex-when-the-thread-which-acquired-it- ...
- 基于python的种子搜索网站,你懂得!
该项目是基于python的web类库django开发的一套web网站,给师弟做的毕业设计.本人的研究方向是一项关于搜索的研究项目.在该项目中,笔者开发了一个简单版的搜索网站,实现了对数据库数据的检索和 ...
- Android应用跳转到微信和支付宝扫一扫
新版的微信已经把微信功能的schema都禁掉了,意味着我们无法打开微信的扫一扫等功能,目前正常的只能先进入微信(我测试的时候是微信版本7.0.3)已经是很新的版本了 具体调起微信扫一扫代码如下,测试后 ...
- lambda 怎么传递ref参数
lambda 传递ref参数有个语法bug,必须要显式书写参数类型. //如 delegate bool FuncType(ref int num); FuncType func1; func1 = ...
- Jmeter、Java当double显示的数字过长时取消科学计数法显示
今日,由于项目需要,使用Jmeter发送查询账户并不保存余额,经过交易后,进行运算后再次比对余额. 实施过程中获取了余额字段并赋值给一个double变量.变量进行运算后再与交易后的账户余额进行比对.这 ...