符浩 李峰
关键词:办公自动化;低代码开发平台;表单;流程;自定义化
0 引言
云南省质检院使用OA主要用于以下三类功能:发文管理、收文管理和事项管理,它们都属于流程流转。在实际应用中,流转的过程不再固定,而应随业务需求的变更而变化,例如删减审批环节、添加判决条件、新增跳转流程等。传统OA开发在实践中存在三个较为明显的缺陷:一是软件编写会将OA流程固化,一旦业务流程发生变更,则须二次开发,消耗较大的人力、财力与时间成本;二是传统开发模式采用各类编程语言、框架、运行环境等,对开发人员要求较高,开发进度较慢,部署周期长[4];三是纯语言开发模式容易触发BUG(程序错误),尤其是隐式BUG只有在OA业务运行阶段才能发现,不仅修复困难,而且耗费时间,影响正常业务的运行[5]。为了克服以上缺陷,LCDP应运而生,经过多年的发展,LCDP已经做到了低代码量甚至无代码开发,普通业务人员经过短期培训就能快速上手搭建新的业务流程,而且BUG极少,尤其适用于业务类信息系统的开发,此次云南省质检院OA系统改造与升级就是基于云南昆远睿方科技有限公司自研的LCDP。
1 自定义设计
LCDP本质上是软件公司依据多年来的开发经验将各个功能模块细化,然后进行抽象封装,通过可视化的方式操控各类控件,自定义配置控件属性,调用相关系统回调函数,最后将控件通过组合、链接、复用等形式综合起来用于新流程的开发。一个新流程的开发主要包含以下四个方面:界面设计、流转设计、数据耦合和脚本辅助,下面逐一详细说明。
1.1 界面设计
LCDP具有丰富的界面设计控件,如标签、按键、文本框、菜单栏、布局器等,由于OA流程不涉及复杂的界面渲染,所以一般的流程界面只须使用标签、按键、文本框这基础三大件即可。以外出报备流程为例,图1为职工发起申请的界面,首先创建白底模板,然后通过拖拽的方式将菜单栏里的各个控件拖放到合适的位置,虚线框内即为各个控件。对于单个控件,通过右击可以编辑属性,主要包括控件大小、位置、名称、背景色、对齐方式、样式等,设计完成后可以点击预览,如果对效果不满意,可以删除某个控件,重新拖拽新控件并设置属性。
通过LCDP,可以将界面设计完全可视化,简单的拖拉拽放与属性设置就可以完成绝大部分界面的设计,不仅操作简单,而且可以实时预览,这一操作几乎不会产生BUG。如果需要复杂的功能,例如控件叠放或动画效果,则须点击高级设置,再用脚本语言进行辅助设计。
1.2 流转设计
流程的流转过程设计比界面更简单,只须简单的节点和路由即可,以派车申请流程为例,图2是派车申请流程图,各节点注明部门及人员,路由注明流转方向,使用方向线连接即可完成流程的初步设计。
1.3 数据耦合
先前的界面设计中有按键和文本框,流程设计中有节点和路由,内部包含大量字段与函数,用于数据的交互和逻辑的控制,只有数据和逻辑耦合起来,流程才能正常流转。
1.3.1 表单设置
表单用于记录一个界面所有文本框里的字段,包括字段名、字段类型、初始值等信息。对于字段的命名,须包含尽可能多的信息,例如所属流程名、表单名等信息,因此每个字段名都会较长,字段名须映射到数据库表中,不可与其他表单里相同含义的文本框字段重名,否则将引起数据串扰[6];对于字段的编辑属性,字段需要限定编码格式、取值范围等,当前端界面输入超范围数值或非法字符时,需要提示用户重新输入,以便正确解析;对于字段的读写属性,将其分为可读与可写,同时须配置相关回调函数进行条件约束,便于数据依不同用户或操作划分不同的权限。
1.3.2 回调函数
界面中每一个按键都须配置回调函数,通过多年累积,在LCDP中将常用的函数API进行了高级封装,分为无返回值函数和有返回值函数[7]。对于无返回值函数,先按操作方法选择函数名,然后配置传入参数,函数参数分为操作属性与操作数据,数据只能选择该表单里已配置的字段,常用的操作方法有将字段保存到数据库,更新状态信息表等。对于有返回值的函数,还须配置返回参数,返回参数可为续调函数或数据,如果返回数据,系统默认其为临时对象,此时必须配置续调函数对其继续处理,且最后一个续调函数必须是无返回值函数,否则LCDP编译时会报错。回调函数除系统流转功能外,还包括数据运算功能,例如基本运算、大小比较、赋值与读取等操作,能满足绝大部分的场景应用需求。
1.3.3 节点处理
各类事项在流转的过程中会路经各个節点,节点按属性可分为发起节点和审批节点,节点的处理主要包括人员的配置和回调函数的设置。在发起节点,发起人一般不作限制,只须配置下一节点审核部门和审核人,申请按键须配置一系列回调函数,首先是信息预审核函数,主要用于检查数字范围是否越界,字符能否正确解析,然后会调用数据存储函数,在数据库新建表单存储本次事项流转的所有信息,接着调用系统状态函数,记录并更新当前事项流转的进度,最后调用推送函数,将表单数据与流程状态推送至节点判决器。在审批节点,对于中间审批节点,需要配置当前节点和下一节点的审核人和审核部门,提交按键需要配置的回调函数与申请按键基本相似,唯一不同是调用新的数据存储函数,不再创建新表单,只须追加写入即可;对于末端审批节点,只须配置最终审核人和审核部门,终审意见也不再调用推送函数,而是调用完结函数,通知系统流程无须再流转。
1.3.4 流向判决
节点处调用推送函数后,会将节点表单数据与流程状态推送至路由判决器,路由判决器须提取关键字段进行二次判决,并调用新的回调函数将流程推向新的节点。首选须设置判决器的关键字段,字段可以从系统表里选取,对于最基础的审批意见字段,若为同意,则提取节点审核人签名并调用电子签名函数,接着提取下一审批部门、审批人的字段,作为参数继续调用路由推送函数;若为不同意,则调用路由回退函数,将流程打回到上一节点处,对于被打回的流程,系统状态刷新后,则应在上一节点处,将完结按键的属性从隐藏变为显示,同时配置完结函数用以终结该流程。
流程的流转除了基础的审批意见外,更多的是按照不同的关键字跳转不同的分支,路由判决器可以从数据库表里添加多个关键字,按照判决条件的先后顺序依次配置回调函数,有返回值的回调函数会生成中间临时变量,对于复杂的逻辑判断,可以将中间变量作为参数调用路由推送函数,进而推送至正确的分支流程中,同时要确保下一节点要有匹配的字段能接收上一节点的关键临时变量,从而实现数据随流程一起流转。
1.3.5 文件讀写
一个流程在流转过程中,可能会挂载相应的文件,对于有文件作为附件的流程,界面须配置上传与下载按键,回调函数里除了上传与下载函数外,还须配置用户权限函数,解析当前账号是否有权限下载文件或者上传新文件,若无权限,可以设置弹窗函数告知用户。
对于表单数据,某些流程会配置标准模板,用户可以下载并填写好标准模板后,将其导入表单,此时需要调用数据导入函数;一个流程在完成全部流转后,一般会生成一个表格作为电子存档,导出函数可以将流转过程中所需的字段写入到表格对应的单元格中。数据的导入导出都是依赖于Office的书签功能[8],不论Word还是Excel,都可以对指定单元格进行书签标记,以外出报备审批表为例,LCDP数据库表中须设置与图3中书签同名的字段,其数值才能被导入导出函数识别并处理。
1.4 脚本辅助
对于一些流转逻辑较为复杂的流程,或判决条件为多条件联合判决,或流程流转需要形成闭环二次审批,或子流程需要分发多个部门联合审批,此时配置回调函数则显得力不从心,LCDP为解决复杂功能的自定义事项流转,配备了脚本辅助功能[9]。脚本与回调函数可以独立使用,也可以混合使用,脚本函数体内还可以调用预设好的系统回调函数。实际应用中,用脚本语言(此LCDP支持Python和JavaScript) 写好函数名与函数体后,只须将其函数名注册为回调函数即可,脚本辅助功能大大提高了复杂流转逻辑的设计能力。
2 流程实现
流程完成自定义设计后,须经过严格的测试才能部署到OA系统里,下面详细说明。
2.1 编译与测试
如果流程的设计使用了脚本辅助功能,则应先进行脚本测试,对于脚本编写的函数,可以使用常规的自动化测试或单元测试,测试合格后再将其注册为自定义回调函数,以供控件调用。
LCDP自带组合编译功能,编译时主要检查数据接口的匹配性与流程流转的连通性,编译报错时能快速定位到错误的控件设置或流程设置。编译通过后,整个自定义流程的测试分为两步:第一步是编写测试脚本,让流程自动化流转并输出想要的测试结果,测试功能是否达到设计目的;第二步是人工创建并登录多个账号,模拟实际流程流转的过程,进一步测试功能有无纰漏,同时还能直观地测试性能问题,对于明显卡顿的地方,可以再次编写测试脚本,进行单环节或单函数测试,排查卡顿原因。
2.2 部署与应用
LCDP 自带的系统回调函数都是经过高度优化的,简单的二次封装一般不会带来额外的性能开销,而使用脚本编写的自定义回调函数,利用自动化测试并对算法与数据结构进行优化,能将其运行时间控制在限定的范围内,从而解决操作的卡顿问题。完成测试后,则可以在系统管理中,将自定义流程添加到事项管理中,OA系统内部会同步将新流程加入状态监控表中。由于OA采用了B/S架构,只要服务端完成部署,用户端可以做到无感升级,用户重新登录后,不仅可以发起、审批新的流程,而且可以在消息提示栏里查阅未处理的新流程。
3 结束语
本文较为完整地阐述了OA系统里基于LCDP的自定义流程的设计、测试与部署过程。实践证明,LCDP的使用,使得普通业务人员通过简单培训即可完成自定义流程的设计,有一定代码基础的人可以通过脚本辅助实现更复杂功能的设计,不仅不易触发BUG,而且性能几乎没有损失,显著提高了开发效率;当业务流程出现变更需求时,使用LCDP能快速实现新流程的自定义设计、部署与应用,不再需要软件公司的深度介入,节约大量的财力与时间成本,具有良好的经济效益。