Activiti6.0流程引擎学习——(24)activiti的表单管理服务(IdentityService)

FormService:

1、解析流程定义中表单项的配置;

2、提交表单的方式驱动用户节点流转,FormService可以通过submit表单方式将流程驱动;

3、获取自定义外部表单Key。

 

基于流程演示FormService功能:

一、创建FormServiceTest测试类与测试流程文件

首先在coreapi中创建FormServiceTest测试类:

然后在resources中创建my-process-form.bpmn20.xml流程文件:

 

二、在form表单配置文件中创建测试流程

<?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 id="start" activiti:formKey="/rest/process/form/start">   <!-- 配置表单项 -->
			<extensionElements>     <!-- 扩展属性 -->
				<activiti:formProperty id="messgae" name="消息" type="string" required="true"/>   <!-- 设计表单,类型string  且必填 -->
			</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>

首先配置表单项,在startEvent中的扩展属性extensionElements中设计表单,这里就填写了一个消息。然后在userTask 中设计了一个审批结果的表单。

 

三、然后对表单管理服务进行测试

对FormServiceTest测试类添加测试方法:

package com.jjf.activiti.coreapi;

import com.google.common.collect.Maps;
import org.activiti.engine.FormService;
import org.activiti.engine.IdentityService;
import org.activiti.engine.form.FormProperty;
import org.activiti.engine.form.StartFormData;
import org.activiti.engine.form.TaskFormData;
import org.activiti.engine.identity.Group;
import org.activiti.engine.identity.User;
import org.activiti.engine.repository.ProcessDefinition;
import org.activiti.engine.runtime.ProcessInstance;
import org.activiti.engine.task.Task;
import org.activiti.engine.task.TaskQuery;
import org.activiti.engine.test.ActivitiRule;
import org.activiti.engine.test.Deployment;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import org.junit.Rule;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 表单管理服务测试
 */
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();     //获取 FormService
        ProcessDefinition processDefinition = activitiRule.getRepositoryService()
                .createProcessDefinitionQuery().singleResult();   //流程定义对象

        String startFormKey = formService.getStartFormKey(processDefinition.getId());
        LOGGER.info("startFormKey = [{}]", startFormKey);   //[/rest/process/form/start]  配制文件中 formKey 参数值

        StartFormData startFormData = formService.getStartFormData(processDefinition.getId());
        List<FormProperty> formProperties = startFormData.getFormProperties();   //获得表单列表
        for (FormProperty formProperty:formProperties){
            LOGGER.info("formProperty = [{}]" , ToStringBuilder.reflectionToString(formProperty,ToStringStyle.JSON_STYLE));
        }

        Map<String,String> properties = Maps.newHashMap();
        properties.put("message","test message");
        ProcessInstance processInstance = formService.submitStartFormData(processDefinition.getId(), properties);  //根据formService启动流程

        Task task = activitiRule.getTaskService().createTaskQuery().singleResult();    //获取唯一的Task

        TaskFormData taskFormData = formService.getTaskFormData(task.getId());     //获取task表单
        List<FormProperty> taskFormDataFormProperties = taskFormData.getFormProperties();   //获取属性列表
        for (FormProperty property:taskFormDataFormProperties){
            LOGGER.info("property = [{}]" , ToStringBuilder.reflectionToString(property,ToStringStyle.JSON_STYLE));
        }

        HashMap<String,String> yesORno = Maps.newHashMap();
        yesORno.put("yesORno","yes");
        formService.submitTaskFormData(task.getId(),yesORno);
        Task task1 = activitiRule.getTaskService().createTaskQuery().taskId(task.getId()).singleResult();
        LOGGER.info("task1 = [{}]" , task1);
    }
}

输出测试结果:

Loading XML bean definitions from class path resource [activiti.cfg.xml]
Activiti 5 compatibility handler implementation not found or error during instantiation : org.activiti.compatibility.DefaultActiviti5CompatibilityHandler. Activiti 5 backwards compatibility disabled.
performing create on engine with resource org/activiti/db/create/activiti.h2.create.engine.sql
performing create on history with resource org/activiti/db/create/activiti.h2.create.history.sql
performing create on identity with resource org/activiti/db/create/activiti.h2.create.identity.sql
ProcessEngine default created
startFormKey = [/rest/process/form/start]
formProperty = [{"id":"message","name":"消息","type":"org.activiti.engine.impl.form.StringFormType@10b892d5","isRequired":true,"isReadable":true,"isWritable":true,"value":null}]
property = [{"id":"yesORno","name":"审批结果","type":"org.activiti.engine.impl.form.StringFormType@10b892d5","isRequired":true,"isReadable":true,"isWritable":true,"value":null}]
task1 = [null]

Process finished with exit code 0

首先输出了startFormKey,这个值也就是流程定义中的对应的startEvent 中的 activiti:formKey对应的属性,然后输出了startEvent 中activiti:formProperty解析出来的内容,再输出了userTask 中的审批结果列表,最后通过submitTaskFormData方法将task与参数提交表单,整个流程结束。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

青山孤客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值