注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

拥有自己的梦想,跟随心的召唤

平凡是福

 
 
 

日志

 
 

Activiti 自定义表单的配置  

2012-07-31 16:40:03|  分类: bc |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
(BC内部开发文档资料)
Activiti默认的表单引擎服务不适合于BC平台,故扩展了一下自己的表单服务,改用 freemarker 来渲染表单,spring的配置文件如下:
<bean id="bcFormService" class="cn.bc.workflow.activiti.FormServiceImpl" />
<bean id="processEngineConfiguration" class="org.activiti.spring.SpringProcessEngineConfiguration">
......
<!-- 自定义FormService -->
<property name="formService" ref="bcFormService" />
</bean>
bcFormService 继承于activiti默认的表单引擎服务,然后复写了BC平台用到的用于渲染表单的函数方法,主要是复写了表单的加载以及使用流程变量的值通过freemarker来格式化表单模板。

一)FormKey的配置
用Activiti Designer打开流程图,点击要配置表单的任务节点,在 Properties 的 Main config 中如下配置任务的事件监听:
Activiti 自定义表单的配置 - rongjih - 拥有自己的梦想,跟随心的召唤
 其中FormKey的配置支持如下几种模式:
1)fm:file:[form文件]
fm - 使用 freemarker 模板
file - form文件放置在Web应用目录下
[form文件] - 相对于Web应用目录下的路径文件名

2)
fm:res:[资源路径]
fm - 使用 freemarker 模板
res - form文件为打包在jar包内的资源文件
[资源路径] - 资源文件的 classpath 访问路径

3)fm:tpl:[模板编码]
fm - 使用 freemarker 模板
tpl - form文件配置在内置的模板管理模块内
[模板编码] - 模板文件在模板管理模块内的编码值,如果要使用指定的版本,使用“[模板编码]/[模板版本号]”的格式

4)
fm:wf:[流程编码]/[资源编码] 或 
fm:wf:[资源编码] - 这是现时的流程使用的模式,推荐!
fm - 使用 freemarker 模板
wf - form文件配置在内置的流程部署资源内
[流程编码] - 资源所属流程的编码,如果忽略不配置则使用当前流程的编码
[资源编码] - 资源的编码值,必须的配置

二)form的模板格式
整个form模板的格式范例如下:
<form class="bc-page" data-type='form' style="overflow: auto;"
data-namespace="bc.YourNamespace"
data-js='yourpath/your.js'
data-readonly="<#if readonly??>${readonly}<#else>false</#if>">

<input type="text" name="name1" data-scope="global" data-validate="required" data-type="string"/>
<input type="hidden" name="name2" data-scope="local" data-type="long"/>
<input type="hidden" name="name3" class="ignore"/>
</form>
    格式化参数使用标准的 freemarker 格式,如上述模板中的${readonly}
    表单的class="bc-page" data-type='form' 是固定的配置,首个html元素通过属性data-namespace、data-js、data-readonly来添加一些特殊的配置:
data-js - 此表单需要额外加载的js文件,使用逗号连接多个文件,路径使用相对于Web应用目录下的子路径
data-namespace - 此表单的js函数命名空间
data-readonly - 控制表单是否为只读状态,只读状态需要表单自己控制,个人待办时false,其余状态值为true

    任务在"完成办理"时,平台会自动通过jQuery方法 $form.find(":input:not(.ignore)") 获取表单内的数据($form是模板文件中第一个html元素的jQuery对象),将这些数据作为流程变量的数据进行记录。也就是说数据是通过 input、select、radio、checkbox 元素的值来控制的,但也可以通过为元素添加 ignore 样式控制平台忽略这个数据。另外 input 等元素的一些特殊的属性配置说明如下:
1)name - 作为流程变量的名称
2)data-scope - 可以设置为global(全局流程变量)、local(本任务的流程变量)、both(全局+本地)或property(task的属性修改,如办理期限、优先级属性);当本地和全局使用不同的流程变量名称时,使用如下格式 “local[|localName],global[|globalName]”,如:
     "local,global" 相当于设置为 "both";
     "local|xxx" 相当于设置为 "local",但流程变量的名称设置为 "xxx";
     "local,global|xxx" 相当于同时设置 local 和 global 两个变量,local 流程变量的名称依然为控件name属性的值,但 global 流程变量的名称设置为 "xxx"。
如:<input type="text" name="title" data-scope="local,global|subject" value="a">
将生成如下两个流程变量数据:
      {name: "title", scope: "local", type: "string", value: "a"}
      {name: "subject", scope: "global", type: "string", value: "a"}
3)data-validate - 数据验证配置,同常规表单的配置一样
4)data-type - 值类型控制,可以配置boolean、int、long、float、date、startDate、endDate、calendar、startCalendar、endCalendar中的任何一种,详细可以参考 StringUtils 类中的 convertValueByType 方法
    如果表单过于复杂,需要自己的特殊验证方式、数据也需要特殊组装,只需在表单的js函数命名空间下添加validateForm、getFormData函数方法,自己进行处理即可,当然要按照平台的规范。
5)对单选、多选按钮的特殊支持
通过容器 xxx (使用样式 radios 或 checkboxes)将分组的单选、多选框包住,在容器中统一进行定义:
单选框范例:{name: "result", scope: "local", type: "string", value: "b"}
<xxx class="radios" data-name="result" data-scope="local" data-type="string">
  <label><input type="radio" name="result" value="a">a</label>
  <label><input type="radio" name="result" value="b" checked>b</label>
  <label><input type="radio" name="result" value="c">c</label>
</xxx>
多选框范例:{name: "result", scope: "local", type: "string", value: "a,b"}
<xxx class="checkboxes" data-name="result" data-scope="local" data-type="string">
  <label><input type="checkbox" name="result" value="a" checked>a</label>
  <label><input type="checkbox" name="result" value="b" checked>b</label>
  <label><input type="checkbox" name="result" value="c">c</label>
</xxx>
  评论这张
 
阅读(8636)| 评论(1)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017