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
  • 相关阅读:
    前路漫长
    OEL6 /boot分区删除恢复
    区块链:剖析工作量证明
    【转】区块链:Schnoor签名究竟是什么
    使用 Hyperledger Fabric 开展私密交易
    Sovrin:技术落地可期,但推广难度较高
    白硕:区块链技术与数据隐私(附视频)
    从入门到精通零知识证明与zkSNARK
    区块链安全:匿名性以及隐私性
    朋友去面试Python工程师,又带回来几道基础题,Python面试题No10
  • 原文地址:https://www.cnblogs.com/xk920/p/10694469.html
Copyright © 2011-2022 走看看