自定义表单类型

使用动态表单,需要定义表单的字段以及属性,在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. [JZOJ3362] 【NOI2013模拟】数数

    题目 题目大意 求区间\([A,B]\)有多少个数是"完美的". 一个数是"完美的",当且仅当这个数的各位能分成两个集合,使得两个集合中数字的和相等. \(B\ ...

  2. CSS——用户界面样式

    所谓的界面样式, 就是更改一些用户操作样式, 比如 更改用户的鼠标样式, 表单轮廓等.但是比如滚动条的样式改动受到了很多浏览器的抵制,因此我们就放弃了. 防止表单域拖拽 鼠标样式cursor 设置或检 ...

  3. 大数据之hadoop小文件存档

    hadoop小文件存档1.HDFS存档小文件弊端 每个文件均按块存储,每个块的元数据存储在NameNode的内存中,因此HDFS存储小文件会非常低效.因为大量的小文件会耗尽NameNode中的大部分内 ...

  4. Map按键排序(sort by key)

    1.需求:已知有如下map,要求按照key倒序排列遍历. Map<String, Integer> map = new HashMap<>(); map.put("1 ...

  5. duilib教程之duilib入门简明教程9.界面布局

    上一个教程实现的标题栏代码中,并没有看到处理自适应窗口大小的代码,但是窗口大小变化后,按钮的位置会跟着变化,这是因为我们将按钮放到了HorizontalLayout.VerticalLayout,这样 ...

  6. 云-腾讯云-短信:短信(SMS)

    ylbtech-云-腾讯云-短信:短信(SMS) 快速稳定.简单易用.触达全球的短信服务,支持国内短信.语音短信与国际短信 1.返回顶部 1. 腾讯云短信 SMS 简介 腾讯云短信(Short Mes ...

  7. 基于IDEA的SSM配置文件整合基础(有步骤)

    今天进行了SSM框架的整合,遇到了很多的错误,但所幸都有解决,以下为基础的整合步骤,后续待完善 1.SSM整合所需要: spring的jar(包含tx).springmvc的jar.mybatis.j ...

  8. 【转载】flex布局超过显示省略号

    <div class="main"> <div class="content"> <h4 class="name&quo ...

  9. 初识OpenCV-Python - 007: 平滑图像

    本节内容主要将如何平滑图像.如通过低通道滤波模糊图像.或者自定义滤波处理图像. import cv2import numpy as npfrom matplotlib import pyplot as ...

  10. Python第二课-输入输出

    name = input() 输入的字符串已经赋值给变量name print() 输出内容 print(,) print中,连接字符串相当于空格