自定义表单类型

使用动态表单,需要定义表单的字段以及属性,在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. thinkphp 判断请求类型

    判断请求类型 在很多情况下面,我们需要判断当前操作的请求类型是GET .POST .PUT或 DELETE,一方面可以针对请求类型作出不同的逻辑处理,另外一方面有些情况下面需要验证安全性,过滤不安全的 ...

  2. 组合数学——cf991E

    /* 如果有某一位,那么这一位必须存在 枚举所有情况,计算每种情况时0额外另算 */ #include<bits/stdc++.h> using namespace std; #defin ...

  3. kubernetes监控和性能分析工具:heapster+influxdb+grafana

    1.部署heapster 下载 heapster 相关 yaml 文件 [root@master dashboard]# wget https://raw.githubusercontent.com/ ...

  4. Visual Studio 2010 error C2065: '_In_opt_z_' : undeclared identifier 编译错误

    当用Visual Studio 2010 编译时 发生如下编译错误: 2>C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\inclu ...

  5. clientHeight / scrollHeight / offsetHeight 等属性的区别图

    网页(内容)可见区域宽:document.body.clientWidth 网页(内容)可见区域高:document.body.clientHeight 即页面浏览器中可以看到内容的这个区域的高度,一 ...

  6. Linux unzip解压多个文件

    假设当前目录下有多个zip文件 data.zip invoices.zip pictures.zip visit.zip, 直接 unzip *.zip 等价于 unzip data.zip invo ...

  7. Spring 泛型依赖注入(3)

    BaseService<T>:有RoleService和UserService两的子类 BaseRepepositry<T>:有UserRepository和RoleRepos ...

  8. vue/cli 3.0脚手架搭建

    在vue 2.9.6中,搭建vue-cli脚手架的流程是这样的: 首先 全局安装vue-cli,在cmd中输入命令: npm install --global vue-cli  安装成功:  安装完成 ...

  9. 多项式模板&题目整理

    注:多项式的题目,数组应开:N的最近2的整数次幂的4倍. 多项式乘法 FFT模板 时间复杂度\(O(n\log n)\). 模板: void FFT(Z *a,int x,int K){ static ...

  10. python中使用xlrd、xlwt操作excel

    python 对 excel基本的操作如下: # -*- coding: utf-8 -*- import xlrd import xlwt from datetime import date,dat ...