zoukankan      html  css  js  c++  java
  • 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":"u4FE1u606F","type":"org.activiti.engine.impl.form.StringFormType@352c308","isRequired":true,"isReadable":true,"isWritable":true,"value":null}
    property = {"id":"yesORno","name":"u5BA1u6279","type":"org.activiti.engine.impl.form.StringFormType@352c308","isRequired":true,"isReadable":true,"isWritable":true,"value":null}
    task1 = null
  • 相关阅读:
    Windows服务的删除与添加
    综合布线施工规范与工艺
    电表产品型号代表什么意义?
    网线接线顺序
    电机绝缘电阻的测量方法
    实用电工口诀
    电工需熟知应用口诀-巧用低压验电笔
    各种工业以太网比较(EtherCAT,EtherNet/IP,ProfiNet,Modbus-TCP,Powerlink)
    C# 开启线程的几种方式
    C# 内置的类型转换方法
  • 原文地址:https://www.cnblogs.com/xk920/p/10694469.html
Copyright © 2011-2022 走看看