如何解耦业务表单与流程

一、问题说明

使用工作流的系统,例如OA,ERP等,都会遇到当流程到达某些环节的时候,业务表单的某些字段有值的验证要求或只在该环节显示、隐藏。

二、解决方案

1、一般方案

在业务表单里使用流程环节的特征信息来对这些字段作控制,属于硬编码的方式,业务表单与流程的耦合度太高,污染了表单代码,会有点乱。可读性、可维护性、扩展性都会大大降低。

2、更好的方案

1)、环节移动相关的

当前节点上的操作和数据决定了下一步怎么走,所以业务表单里的某些字段可能要拿来作判断的或临时提供一个选择器给用户,由用户来决定下一步该怎么走。可以把这种关系体现在流程图上的,通过添加判断节点和定义条件表达式的方式。

示例:

这里有两种方式:

a、利用表单原有的字段来作判断

上图“是否收了全款”节点的出线“已收”上定义了条件表达式:${receiveIn==receiveSum}(已收款是否等于应收款),该表达式上的两个变量就是业务表单里的字段名。环节提交时首先检查这两个字段值不能为空,然后设置到流程变量里面,后面的交给流程引擎来处理就可以了。

b、动态构建临时选择器或临时输入框

上图“客户是否满意”的出线“满意”上定义了条件表达式:${isSuccess==1},另一条出错定义了{isSuccess==0}。业务表单里没有定义isSuccess这个字段,但我们可以通过这些表达式可以动态创建出HTML,再动态添加到业务表单里,这样用户就可以在页面上作出选择操作,当表单提交时,再把这动态的字段与值设置到流程变量里。

2)、节点上的验证

不是决定下一步该怎么走,而是决定当前节点能不能办结,所以需要在当前节点上添加一些验证规则。而这种关系无法体现在流程图上,只能在流程外的解释工具上定义规则集,为了降低使用难度,规则集是一个描述性的JSON数据,解释工具再根据这些规则描述翻译成脚本,从而达到对表单的控制,控制表单是否能正常提交。

例如:

{rules:{‘财务结账‘:‘receiveIn==receiveSum || (reason.length>0 && reason_prove.length>0)‘}},由于该表达式是或的关系,所以后面部分的reason,reason_prove字段一开始时是隐藏的,当前面条件(receiveIn==receiveSum)不满足时才显示。如果是与的关系,就可以同时显示。当表单提交时,先将这些变量设值(根据变量名找到表单对应的控件,再将控件的值赋值给变量),再用eval()方法来执行表达式,返回true即表单可以正常提交,否则停止提交操作,并提示给用户

时间: 2024-08-25 11:07:35

如何解耦业务表单与流程的相关文章

asp.net 微信企业号办公系统-表单及流程设计配置实例

在环境搭建好之后,我们就来学习一下怎样快速创建一个流程,并执行和流转该流程(我们这里讲的只是入门,不涉及到具体流程参数设置). 创建一个流程步骤为:在数据库在创建表-->设计表单-->设置流程-->配置菜单  即可点击新配置的菜单运行该流程. 1.创建业务数据表 根据自己的业务需求我们创建自己的业务表(例如政府部门常用的 文件阅办卡): 建表注意事项: 表必须要有一个主键,主键只能是int型的自增字段或者uniqueidentifier(guid)类型. 2.设计表单 打开表单设计器:

Winform开发框架中工作流模块的业务表单开发

在我们开发工作流的时候,往往需要设计到具体业务表单信息的编辑,有些是采用动态编辑的,有些则是在开发过程中处理的,各有各的优点,动态编辑的则方便维护各种各样的表单,但是数据的绑定及处理则比较麻烦,而自定义开发的,则数据弹性很大,方便修改调整.本篇随笔基于表单的开发设计过程,介绍在工作流中如何新增一个业务表单,以便快速的实现审批业务的上线处理. 1.业务表单的基类继承 首先我们来了解一下业务表单的对应关系,一般创建一个业务流程处理,都需要有一个具体的创建业务表单的界面,以及一个查看处理表单的界面.

activiti自定义流程之整合(四):整合自定义表单部署流程定义

综合前几篇博文内容,我想在整合这一部分中应该会有很多模块会跳过不讲,就如自定义表单的表单列表那一块,因为这些模块在整合的过程中都几乎没有什么改动,再多讲也是重复无用功. 正因为如此,在创建了流程模型之后,模型列表的展示也是和之前的没有什么区别,而且都是很简单的后台查询以及前台展示,这一部分也就不过多的讲了. 模型列表页面如下: 至于其中的修改和删除也没什么多讲的,删除很简单,而修改也是activiti-modeler实现的主要功能,我们只需要跳转过去就行. 重要的部分在于部署,因为点击部署到达后

activiti自己定义流程之整合(四):整合自己定义表单部署流程定义

综合前几篇博文内容.我想在整合这一部分中应该会有非常多模块会跳过不讲,就如自己定义表单的表单列表那一块,由于这些模块在整合的过程中都差点儿没有什么修改,再多讲也是反复无用功. 正由于如此,在创建了流程模型之后.模型列表的展示也是和之前的没有什么差别.并且都是非常easy的后台查询以及前台展示.这一部分也就只是多的讲了. 模型列表页面例如以下: 至于当中的改动和删除也没什么多讲的,删除非常easy,而改动也是activiti-modeler实现的主要功能.我们仅仅须要跳转过去即可. 重要的部分在于

业务表单的使用

1 业务表单操作 1.1 面板工具 l 颜色 l 水印 l 尺寸调整 l 缩放 l Excel数据标记 l 自定义数据标记 l 数据导入,导出 l 纸张排版辅助线 l 打印 l 保存图片 1.2 填单操作 l 只读/编辑模式 l 编辑模式操作 l 查看模式操作 l 内嵌表操作 1.3 校验 可单独点击检验按钮, 也可直接点击保存按钮,保存时,会自动校验,如果校验不通过,无法保存 1.4 查看表单结构 l 切换到查看模式 l 查看公式结构 l 直接在表单页面查看公式结构 1.5 数据比较,替换 1

Activiti 工作流表单设计及开发

一.前言 Activiti 5对表单的支持目前还是比较弱的,表现在对表单的开发还需要写Freemark模板,并且它的模板还需要跟class文件一起打包发布.这使得流程的表单设计必须由开发人员来开发处理.因而,开发一套易用性强的流程表单功能就显得很有必要. 二.需求 用户一般都希望能有如Microsoft的Office套件中的InfoPath那样,可以自己进行设计,并且能与工作流程绑在一起进行流转处理.如下所示: 表单中每个字段有固定的数据类型,并由不同的数据控件展示,如日期.数字.单选或多选.下

用MongoDB数据库来管理办公系统中文档型的表单和信息——通用流程化应用审批单设计思路(二,续)

1.办公系统中文档的定义 办公系统中的文档就是指对数据不敏感的业务,例如流程中的审批单.信息专栏.数据上报.信息记录等.而对于这些信息的管理,特别是时效性较强的管理记录,仍采用关系型数据库进行管理. (1)流程中审批单 流程中审批单由功能按钮区.特殊功能区.业务表单区.附件区.审批意见区等区域构成,其中,业务表单区理论上包含附件和意见,但是由于附件和意见的业务特殊性,需要单独进行管理,剩下的业务表单就可以看作文档了. 在一些流程审批业务中,业务信息有的是以Excel或word文件等方式专递,这样

activiti自定义流程之整合(五):启动流程时获取自定义表单

流程定义部署之后,自然就是流程定义列表了,但和前一节一样的是,这里也是和之前单独的activiti没什么区别,因此也不多说.我们先看看列表页面以及对应的代码,然后在一步步说明点击启动按钮时如何调用自定义的form表单. 流程定义列表页面如下: 对应的html代码: [html] view plain copy <div id="logdiv1" ng-init="init();"> <p style="font-size:24px;mar

环境企业表单权限分配填报数据系统设计与实现

本科生毕业论文(设计) Undergraduate Graduation Thesis(Design) 题目Title:环境企业表单权限分配填报数据   系统设计与实现                 院 系 School (Department):数据科学与计算机学院  专 业 Major:   软件工程   学生姓名 Student Name:                     学 号 Student No.:                    指导教师(职称) Superviso