基于ASP.NET Core的审批工作流模块的设计与实现
2023-04-14唐毅陆媚覃敬波
唐毅 陆媚 覃敬波
摘要:随着企业信息化的发展和社会对企业合规的不断重视,不少企业的业务系统急需引入一套技术工具来提高审批效率,同时避免出现审批流程不规范的问题。审批工作流是一种常见的工作流,在企业管理和运转中引入审批工作流是财务规范化、制度规范化、企业合规化的重要环节。该文介绍了一种基于ASP.NET Core技术,适用于一般小型企业的审批工作流模块的设计与实现。
关键词:ASP.NET Core;审批工作流;业务系统;企业合规;设计与实现
中图分类号:TP311.52 文献标识码:A
文章编号:1009-3044(2023)06-0043-04
开放科学(资源服务)标识码(OSID)
0 引言
随着信息化、无纸化办公时代的到来,一些企业面临着困境。它们所使用的传统业务系统中,业务单据只标记着“未审”和“已审”两种状态。这样的标记方式,只记录了单据审核与否的状态,而没有记录审核的详细过程[1]。业务员在业务系统中填写完单据后,只能将其打印出来,线下根据企业相关的管理流程,分别找各个环节的关键人进行审核签字,再交至最终审批人,最终审批人审核完毕后,在系统内根据单据号进行审批状态的调整。 如常见的产品发货单,开单人开单打印,然后给财务人员审核签字,最后仓库人员确认发货。但是,如果开单折扣比较低,根据一些企业的管理要求,业务员还要记得在财务人员审批前,给销售部门领导审核签字。这样的做法使企业运转效率低下,容易出现不合规的情况,并且没有在系统中留痕,出问题时不方便追溯,同时也浪费了很多纸张,增加了企业的成本。不少这样的企业也想通过引入一套成熟的审批工作流来解决此问题,但由于这些业务系统往往过于老旧,不少现在的工作流产品无法简单嵌入,重新购买带有审批工作流的业务系统又加大了企业的经营成本[2-3]。 因此,如何帮助这些企业设计出一套高效率、高兼容性的审批工作流模块变得非常迫切与必要。
1 需求分析
1.1 模块功能性需求分析
审批工作流模块要有良好的兼容性和独立性,能尽量在不对原有业务系统进行大幅度修改的情况下轻松嵌入。要能实现一般企业中,常见的审批模式,如:线性审批、节点跨越审批、分支条件审批、会签审批[3]。参与相关审批环节的用户,要能随时查询审批日志,能及时在业务系统、邮箱或手机上接收到相关的审批通知,从而形成审批闭环,避免遗漏。
该功能模块的主要用户包括工作流设计者、业务提交人和审批人三大类。工作流设计者可以根据企业需求在后台配置相关参数生成工作流,并嵌入业务系统中。业务提交人可以将业务单据通过该模块提交给相关审批人。审批人可进行审批意见的回复,并可以将单据驳回或提交至下一审批环节。
通过上述的需求分析,笔者设计出该模块的整体流程图,如图1所示。
1.2 模块非功能性需求分析
该模块的非功能性需求包括:适用性需求、可靠性需求、性能需求。
1.2.1 适用性需求
1)工作流的设计与配置要易上手、易学习,对于非信息技术企业的信息管理人员也要能在一周培训时间内掌握。
2)工作流的参数、节点权限可随时修改,不需要代码编译和发版。
3)正在生产环境下使用的工作流也要能随时添加、删除、调整节点。更新后,新的业务可以按新的工作流流程进行,之前正在进行的业务继续按之前的工作流流程进行,互不干扰。
1.2.2 可靠性需求
1)当功能出现故障时,应有相关的错误日志,并能快速定位问题。
2)避免出现信息安全问题,比如能防范常见的SQL注入、敏感字段需加密等。
1.2.3 性能需求
1)应能支持200个以上的用户同时在线使用。
2)一般常规操作响应速度应在3s以内,复杂的操作响应速度应在5s以内。
2 模块设计
2.1 模块技术架构
为了简化客户端的安装,便于升级与維护,该模块采用了B/S(Browser/Server,浏览器/服务器模式)的软件架构。它是C/S(Client/Server,客户端/服务器模式)软件架构在Internet上基于Web应用的一种实现方式[4]。在该模式下,该模块可以非常方便地通过开放Web接口的方式,嵌入到各式各样的业务系统中,并且可以轻松地跨设备跨平台使用[5]。
另外,该模块采用了基于DDD(Domain Driven Design,领域驱动设计)的设计理念。这使得该模块的兼容性和健壮性得到很大提升,代码模块之间更加“高内聚、低耦合”,增加了可维护性和可读性,延长了模块的生命周期[6-7]。对于使用了与该模块相同技术架构的业务系统,只需要简单修改便可轻松引入一同编译。对于非相同技术架构的系统,也可以通过WebAPI接口的方式,进行调用。
该模块的分层架构逻辑图如图2所示[7]。
用户交互层:主要负责接收用户的网页请求、业务系统的接口请求等可能修改到内部业务数据的外部输入。
应用层:负责处理接收到用户交互层数据的转发、安全验证、权限校验等前置事件。
领域层:架构的核心,用来表达业务概念、业务状态和业务规则,实现了审批工作流模块的核心业务逻辑。
基础设施层:贯穿所有层,为其他各层提供通用的技术服务,如常用工具类、消息中间件、文件操作、缓存操作及数据库操作等。
2.2 模块功能架构
根据需求分析,本功能模块分为三类用户角色:工作流设计者、业务提交人、审批人。根据用户角色的模块划分方式,不同的用户角色模块拥有不同的功能。其功能结构图如图3所示。
2.2.1 工作流设计者功能详细设计
工作流设计者一般为开发公司的技术人员或者企业的信息管理部门人员,负责收集企业各个业务流程的审批需求,进行工作流的审批流程设计。主要功能包括工作流的基本参数配置、各流程节点的配置、各节点相关的操作权限配置。
1)配置基本参数。设计人员可在此配置工作流的相关基本参数,包括工作流的名称、通知消息模板、与现有业务系统数据表的关联等。
2)配置流程节点。流程节点的配置是该模块功能的核心,设计者可在此配置单个节点的相关属性,如:节点名称、节点排序号、到达节点的条件、节点执行后的回调事件等,也可以配置多个节点之间的关系。通过合理配置流程节点,可以实现线性审批、节点跨越审批、分支条件审批、会签审批等在企业中较为常见的审批流程。
3)配置权限。设计人员可针对每个流程节点配置用户权限。即哪些审批人才能在该节点下进行审批操作。该模块支持常见的RBAC(Role-Based Access Control,基于角色的访问控制)模型权限管理方式,也支持基于用戶颗粒度的权限管理方式。
2.2.2 业务提交人功能详细设计
业务提交人主要为业务系统的开单人员。
1)业务提交人保存填写好的业务单据后,可进行单据的提交审批操作,将单据流转到相应的审核人员手上,审核人员会在系统中接收到相应的通知提醒。
2)审批过程查询。业务提交人可对自己提交的单据进行流转过程和审批日志的查询,清晰把控单据的流转动向。
2.2.3 审批人功能详细设计
审批人接收到相应的审批任务通知后,可进入到单据详情界面,进行相应的审批操作:
1)填写审批意见。审批人员可对单据进行批复、填写审批意见。
2)流转单据。审批人员可将单据驳回至系统指定的上一环节,也可以将单据提交至系统指定的下一环节。若系统指定了多个上一环节或下一环节,审批人还可以根据实际需要自主选择驳回或提交至其中的任一环节。同时相关人员会在系统中接收到相应的通知提醒。另外,当审批人不方便审批时,还可以委托转交给他人进行审批。
3)审批过程查询。单据流程的参与者可对流转过程、审批日志进行查询,清晰把控单据的流转动向。
2.3 数据库详细设计
数据库的详细设计,如表1所示。
在此设计中,部分核心功能的E-R图如图4所示。
3 模块实现
3.1 模块开发技术概述
该模块采用的开发语言框架是ASP.NET Core 3.1,它是微软推出的新一代跨平台开发技术,支持跨平台部署,同时可以让开发人员可以开发能运行在容器环境中的微服务,以便于开发能应对高并发、高负载的系统[8]。ASP.NET Core的前端开发工具是Visual Studio 2022,数据库使用的是SQL Server。同时,该模块还采用了基于RESTful协议的 WebAPI 技术提供接口服务,并按照JWT标准实现接口调用的安全性,无论是理论上还是实现技术上都具有一定的先进性。
3.2 模块部分功能实现
以介绍笔者所在单位会议室申请的审批工作流的实现为例。该审批流程的跨职能流程图如图5所示。
由图5可知,这是一个涉及分支条件的线性审批流程,该流程涉及三个关键角色和五个流程节点。
如图6所示,工作流设计者先配置此工作流的基本信息,如工作流的名称、与当前业务系统相关表字段的对应关系、通知显示模板。
之后,便可对各个工作流节点进行配置,这是整个工作流配置的核心。如图7所示:
其中,“层级编号”用于确定各个审批节点的先后顺序,“是否必走”“条件标识”用于确定该节点是否为条件分支节点。“业务点状态”“执行人名字段”“执行人时间字段”等用于该节点执行后向业务系统回写相关信息。右侧的“可转到流程列表”可灵活配置当前节点可驳回或提交至哪些节点。
在完成节点配置和相关权限的授予后,通过少量的代码编写,便可将此工作流程嵌入到业务系统中,如图8右侧所示。 当用户点击右侧的提交或驳回按钮后,业务系统会将相关工作流启动参数传到审批工作流模块,然后弹出审批界面,如图9所示。 审批人员可以按实际需求选择提交到哪一个节点,在此例中,由于申请人勾选了需要使用投影仪的复选框,业务系统会在“会议室安排”这个节点的提交操作中,在工作流启动参数中传入“sbgly”的条件标识(即之前图7中所配置的)。此时,审批界面默认显示提交到“知会设备管理员”节点。输入审批意见并选择下一个节点接收人后,点击确定按钮,此节点的审批操作便完成。程序会向接收人发送审批通知,同时会更新此申请在业务系统中的当前审批状态、审批人、审批时间等字段,并执行相关的回调函数。之后,整个流程便会以此类推继续进行,直至整个审批流程结束。
4 结束语
对于一些老旧的业务系统,本文提出了一种兼容性高、独立性强的审批工作流模块的设计和实现方案,并已在笔者所在企业进行应用,具有以下特点。
1)兼容性高。该模块独立性较强、扩展性高,可通过接口调用的方式与其他业务系统轻松对接、集成。
2)操作效率高。审批操作精简,且操作含义明确,对比线下审批,效率直线上升。
3)配置灵活。通过后台的简单配置,便可以实现企业中常见的各种审批流程,大多数情况下无须重新编译代码和发布,大大降低了技术人员的专业门槛。
4)及时性强。待审批事项及时通知到审批人,审批进展及时通知发起人,发起人也可选择主动催促审批人。整个审批流程形成了审批闭环,从而避免遗漏。
参考文献:
[1] 周开舵.财务管理信息化建设的困境与建议——以中小型企业为例[J].财经界,2021(27):121-122.
[2] 张晓鹏,王新.OA系统工作流精细化管理的实践与应用[J].中国管理信息化,2022,25(17):123-125.
[3] 刘超.轻量级工作流引擎的设计与实现[J].信息系统工程,2022(12):7-10.
[4] 查修齐,吴荣泉,高元钧.C/S到B/S模式转换的技术研究[J].计算机工程,2014,40(1):263-267.
[5] 李兴华,李玉平,陶明.基于WebAPI的全流程条码系统设计和实现[J].自动化与信息工程,2018,39(4):26-31.
[6] 贾子甲,钟陈星,周世旗,等.领域驱动设计模式的收益与挑战:系统综述[J].软件学报,2021,32(9):2642-2664.
[7] 时梨.基于领域驱动设计在构建IT管理系统的应用研究[J].中国新通信,2021,23(16):94-95.
[8] 杨中科.ASP.NET Core技术内幕与项目实战:基于DDD与前后端分离[M].北京:人民邮电出版社,2022.
【通联编辑:谢媛媛】