自定义表单类型

使用动态表单,需要定义表单的字段以及属性,在WEB流程设计器中没有Default字段(Eclipse中有),给设计带来了一定的困难,下面介绍如何在WEB流程设计器中扩展表单。

首先在stencilset.json文件中添加扩展类型,添加的位置就是formproperty_type下,将会出现在下拉框中

{

"id" : "formproperty_type",

"name" : "Type",

"name_de" : "Typ",

"type" : "Choice",

"value" : "",

"width" : 100,

"optional" : false,

"items" : [ {

"id" : "c1",

"title" : "String",

"title_de" : "String",

"value" : "string",

"refToView" : ""

}, {

"id" : "c2",

"title" : "Date",

"title_de" : "Date",

"value" : "date",

"refToView" : ""

}, {

"id" : "c3",

"title" : "Long",

"title_de" : "Long",

"value" : "long",

"refToView" : ""

}, {

"id" : "c4",

"title" : "Boolean",

"title_de" : "Boolean",

"value" : "boolean",

"refToView" : ""

}, {

"id" : "c5",

"title" : "Enum",

"title_de" : "Enum",

"value" : "enum",

"refToView" : ""

}, {

"id" : "c6",

"title" : "SmartRef",

"title_de" : "SmartRef",

"value" : "smartref",

"refToView" : ""

}, {

"id" : "c7",

"title" : "Group",

"title_de" : "Group",

"value" : "group",

"refToView" : ""

}

]

}

 

 

构建自定义的GroupFormType,如果只要一般的扩展,则不用对加入values

public
class GroupFormType extends AbstractFormType

{

    protected Map<String, String> values;

    public GroupFormType(){}

    public GroupFormType(Map<String, String> values)

    {

        this.values = values;

    }

    @Override

    public String getName()

    {

        return ActivitiConstants.GROUP_TYPE;

    }

    @Override

    public Object convertFormValueToModelValue(String propertyValue)

    {

        return
propertyValue;

    }

    @Override

    public String convertModelValueToFormValue(Object modelValue)

    {

        return
modelValue == null ? null : modelValue.toString();

    }

    @Override

    public Object getInformation(String key)

    {

        if (ActivitiConstants.VALUES_KEY.equals(key))

        {

            return
values;

        } else

        {

            return
null;

        }

    }

}

 

扩展FormTypes,使得自定义类型能够处理FormValues

public
class CustomFormTypes extends
FormTypes

{

    @Override

    public AbstractFormType parseFormPropertyType(FormProperty formProperty)

    {

        if (ActivitiConstants.GROUP_TYPE.equals(formProperty.getType()))

        {

            Map<String, String> values = new LinkedHashMap<String, String>();

            for (FormValue formValue : formProperty.getFormValues())

            {

                values.put(formValue.getId(), formValue.getName());

            }

            return
new GroupFormType(values);

        } else
if (ActivitiConstants.SMART_REF_TYPE.equals(formProperty.getType()))

        {

            Map<String, String> values = new LinkedHashMap<String, String>();

            for (FormValue formValue : formProperty.getFormValues())

            {

                values.put(formValue.getId(), formValue.getName());

            }

            return
new SmartRefFormType(values);

        } else

        {

            return
super.parseFormPropertyType(formProperty);

        }

 

    }

}

 

在流程引擎参数中设置,需要注意的是,如果扩展了FormTypes,则需要把所有的类型都加入到参数中(包括自带类型),否则会报找不到类型

<bean
id="processEngineConfiguration"
class="org.activiti.spring.SpringProcessEngineConfiguration">

<property
name="formTypes">

<bean
class="com.pera.dwf.web.activiti.formtype.CustomFormTypes"
/>

</property>

<property
name="customFormTypes">

<list>

<bean
class="org.activiti.engine.impl.form.StringFormType"
/>

<bean
class="org.activiti.engine.impl.form.LongFormType"
/>

<bean
class="org.activiti.engine.impl.form.DateFormType">

    <constructor-arg
value="yyyy-MM-dd"
/>

</bean>

<bean
class="org.activiti.engine.impl.form.BooleanFormType"
/>

<bean
class="com.pera.dwf.web.activiti.formtype.GroupFormType"></bean>

<bean
class="com.pera.dwf.web.activiti.formtype.SmartRefFormType"></bean>

</list>

</property>

 

经过处理后,最终的动态表单的返回值,可以得到FormValues的值

0:  

{

infos: 

{

5ef89d50-95ff-4e33-8aa1-48df354c6c52: "不合格品文档"

}

-

fp: 

{

id: "Excel1"

name: "不合格品文档"

type: 

{

name: "smartref"

}

-

value: null

required: false

writable: true

readable: true

}

-

}

 

Activiti 使用小结的更多相关文章

  1. activiti小结

    前提:业务流程复杂且流程频繁变更的,建议使用工作流:其他情况不建议使用. activiti(v5.14),工作流引擎,基于jbpm.使用建模语言BPMN2.0进行定义. 工作流数据需要写入数据库,ac ...

  2. 工作流学习——Activiti整体认识二步曲 (zhuan)

    http://blog.csdn.net/zwk626542417/article/details/46594505 ***************************************** ...

  3. activiti搭建(三)整合Modeler

    转载请注明源地址:http://www.cnblogs.com/lighten/p/5878169.html 接上一章,activiti工作流引擎虽然运行了起来,但是什么都没有.activiti官方在 ...

  4. 工作流activiti-01个人小结

    最近公司需要开发工作流 使用的是activiti  个人拿着官方的User Guide 摸索了好几天 现做个小结: 对公司的小型OA开发一般用到如下几点: 1.依据客户业务得到业务流程图  可以是xm ...

  5. activiti uuid主键

    1.1.1.  activiti默认主键生成方式 ; 下面我们看一下主键的生成策略:主键的生成策略定义在IdGenerator接口中,接口定义如下所示: public interface IdGene ...

  6. activiti监听器使用

    分享牛原创(尊重原创 转载对的时候第一行请注明,转载出处来自分享牛http://blog.csdn.net/qq_30739519) activiti使用的时候,通常需要跟业务紧密的结合在一起,有些业 ...

  7. activiti节点跳转

    分享牛原创(尊重原创 转载对的时候第一行请注明,转载出处来自分享牛http://blog.csdn.net/qq_30739519) activiti使用的时候,通常需要跟业务紧密的结合在一起,有些业 ...

  8. j2ee课程设计—基于activiti的请休假系统

    前言 课设基于SSM框架,数据库采用mysql,主要业务交给activiti,版本控制利用github. 参考资料: Intellij 部署SSM框架 Activiti就是这么简单 方大师的教材 下文 ...

  9. 疯狂Workflow讲义——基于Activiti的工作流应用开 PDF 下载

    <疯狂Workflow讲义--基于Activiti的工作流应用开> 一:文档获取下载方式: 1:花20CSDN积分:可以下载:http://download.csdn.net/downlo ...

随机推荐

  1. [JZOJ6278] 2019.8.5【NOIP提高组A】跳房子

    题目 题目大意 给你一个矩阵,从\((1,1)\)开始,每次往右上.右.右下三个格子中权值最大的那个跳. 第一行上面是第\(n\)行,第\(m\)列右边是第\(1\)列.反之同理. 有两个操作:跳\( ...

  2. 配置文件一mybatis-config.xml

    <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration PUBLIC & ...

  3. 「题解」:$Game$

    问题 B: $Game$ 时间限制: 1 Sec  内存限制: 256 MB 题面 题面谢绝公开. 题解 对于最初加入的每一个元素开桶记录出现次数. 然后记录一个前p个元素最大值. 先由先手玩家取走一 ...

  4. 2017/8/4 SCJP学习

    2 Object Orientation . . . . . . . . . . . . . . . . . . . . . . . . . 85 Encapsulation (Exam Object ...

  5. JDK语法糖之switch字串与枚举支持

    在JDK1.7之前,switch只支持byte,short,char,int,注意1.5之后的自动拆箱,对应的这四种基础类型的封装类也同样支持Byte,Short,Character,Integer, ...

  6. Tomcat点击项目名称,加载一个action请求

    <meta http-equiv="refresh" content="0;url=index.action">

  7. 面试系列 31 zk都有哪些使用场景

    大致来说,zk的使用场景如下,我就举几个简单的,大家能说几个就好了: (1)分布式协调:这个其实是zk很经典的一个用法,简单来说,就好比,你A系统发送个请求到mq,然后B消息消费之后处理了.那A系统如 ...

  8. C#真他妈神奇,一个函数都不用写就能实现一个简单的邮件发送工具

    MailMessage EmaillMessage = new MailMessage(   //创建一个对象                    new MailAddress(loning.Te ...

  9. 18-4-bind

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. springcloud ribbon Finchley 版本,自定义算法

    引用上一个项目,在原有的基础上进行更改,添加springcloud的内荣. eureka-server 和上一个springcloud eureka的一样,没有改动. 添加cloud-api pack ...