自定义表单类型

使用动态表单,需要定义表单的字段以及属性,在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. python2与python3编码(练习)

    #_author:来童星#date:2019/12/9import jsons='star'a=s.encode('utf8')print(s,type(s))# star <class 'st ...

  2. bfs+dfs乱搞+类似拓扑排序——cf1182D

    代码不知道上了多少补丁..终于过了 用类似拓扑排序的办法收缩整棵树得到x,然后找到x直连的最远的和最近的点 只有这三个点可能是根,依次判一下即可 另外题解的第一种方法时找直径,然后判两端点+重心+所有 ...

  3. nginx css,js合并插件,淘宝nginx合并js,css插件

    先下载Nginx_concat_module,下载后把它放在/usr/local/src/文件夹中,新建文件夹nginx-http-concat把下载的config  ngx_http_concat_ ...

  4. sql 查询问题

    在做数据导出时候,当某个表某字段含有单引号时候老是报错,所以要排除这种情况: sql查询某表某字段值带单引号情况 select 主键码 from 馆藏书目库 where 题名 like '%''%' ...

  5. Han Xin and His Troops(扩展中国剩余定理 Python版)

    Han Xin and His Troops(扩展中国剩余定理 Python版) 题目来源:2019牛客暑期多校训练营(第十场) D - Han Xin and His Troops 题意:   看标 ...

  6. LeetCode 38.报数(Python3)

    题目: 报数序列是一个整数序列,按照其中的整数的顺序进行报数,得到下一个数.其前五项如下: 1. 1 2. 11 3. 21 4. 1211 5. 111221 1 被读作  "one 1& ...

  7. JS流程控制语句 多重判断满足你各种需求 要在多组语句中选择一组来执行,使用if..else嵌套语句。

    多重判断(if..else嵌套语句) 要在多组语句中选择一组来执行,使用if..else嵌套语句. 语法: if(条件1) { 条件1成立时执行的代码} else if(条件2) { 条件2成立时执行 ...

  8. linux /bin/find 报错:paths must precede expression 及find应用

    1.问题描述,运行下面的命令,清楚日志 [resin@xx ~]$ ssh xxx  "/usr/bin/find /data/logs/`dirname st_qu/stdout.log` ...

  9. spring自定义bean工厂模式解耦

    在resources下创建bean.properties accountService=cn.flypig666.service.impl.AccountServiceImpl accountDao= ...

  10. pg总览

    一.编译安装初始化等 ./configure --prefix=/release --with-openssl --without-ldap --with-libxml - -enable-threa ...