文/刘俊良 周亮 年佳斌
编辑/杜逸敏
一、项目背景
客户需要开发一套企业内部的考试系统,用于企业内部规章制度的学习及考核。系统的主要功能包括:
- 每个员工都可以进行每日答题与专项答题。
- 根据答题结果,归类不同的题库以供员工查询学习。
- 交卷后系统自动完成判卷并积分。
- 与钉钉深度集成,包括实现考试系统与明道云单点登录;每日自动推送考试待办任务,完成答题后标记完成待办;每月自动推送积分榜
- 个性化配置,题库、答题数量、每日答题次数、题目计分规则等支持随时调整。
这是一套典型的兼具高复杂度与灵活性要求的系统,很难找到标准的商业软件来完全满足需求,定制开发又远超项目成本预期,而明道云完美地胜任了这项工作。下面,我们一起来看一下如何用明道云来实现这套考试系统。
二、成果预览
如图可见,用户只需要在移动端或者PC端进入系统,即可完成相应的操作,接下来本文将全面拆解这套系统的开发过程。
三、开发拆解
开发架构
考虑到用户页面交互的灵活性,本系统采用「原生前端开发+后端零代码」来实现。
原生前端:考试答题的交互页面,向后端调用题库数据与答题请求。
明道云后端:作为后台接收前端请求,完成考试结果验证、试卷生成、推送钉钉消息。
零代码后端开发
1.可视化配置数据库
经过分析,此系统主要包含用户、基础题库、答题题库、试卷、试卷题目、制度、专项等业务对象。我们使用工作表,快速完成这些业务实体的数据建模和规则编排。
2.通过强大的工作流引擎实现后端功能开发
Webhook实现接受前端请求并完成答题业务流
用户在前端提交答题后,前端会向明道云提供的Webhook地址推送相关数据。明道云工作流会自动批改答卷,增加积分,将已答题目标记归档,并给对应用户新增一套新的试卷。
3.使用业务封装能力强化系统后台处理能力
本系统封装了13个PBP工作流,9个工作表事件工作流,5个时间工作流,2个人员事件工作流来完成后端系统数据与流程的自动化处理。
系统将需要高频率实现的功能进行了业务封装,主要包括题库生成、试卷生成、组织架构同步等功能。
除此以外,我们还配置了多条工作流来保证业务的连续性,主要包括:
- 新增专项或试卷后,自动新增对应考试题目
- 当系统有新员工加入时,为其自动生成需要考试试卷
- 当基础题库发生变更时,系统同步更改基础题库分发出去的所有题库。
4.使用集成中心完成深度的系统集成工作
由于客户要求与钉钉深度集成,需要打通钉钉的组织架构与消息待办接口。所以,我们将钉钉需要用到的能力通过API集成的方式封装到集成中心,一共封装了12个API。再结合自动化工作流,实现钉钉组织架构信息的自动同步以及消息待办的集成。
注:虽然明道云本身已经实现了与钉钉的打通,包括明道云的审批、填写和消息通知。不过考虑到系统需要获取钉钉用户的Union ID,而且考试业务并不是传统的审批、填写等待办,需要单独调用钉钉的Open API来实现个性化待办业务创建,我们才进行深度集成工作。
钉钉的功能设计要求管理员先创建审批实例,再创建审批待办,最后再调用消息通知接口,才能实现给用户推送消息待办的功能。而明道云通过PBP,将这三个接口调用封装成一个工作流,简洁高效调用。
完成以上PBP的配置后,我们再使用一个简单的定时工作流来调用它,就能实现每天给用户推送考试任务待办的功能。
通过以上自动化流程配置,用户体验变得非常流畅:每天早上8:30,用户会在钉钉上收到考试任务代办的通知,点击通知,会跳转至考试系统页面进行答题,完成答题后,系统会接收到相关数据并题目进行处理同时将今日的钉钉待办任务消除。
前端开发
1.个性化前端定制
因为本系统用户操作主要在前端,对于前端页面个性化程度要求很高,因此我们选择定制化前端开发来完成页面开发。
就考试系统而言,前端开发的复杂度并不高,项目团队也在不到一周的时间内完成了开发。不过值得提醒的是,这个前端开发并没有涉及到任何数据库开发,无论是缓存数据库还是数据存储都是通过明道云来实现。并且,现在市面上也有不少零代码进行前端开发的软件,因此这项工作本身也没有太大的难度。
2.通过API完成数据和信息交互
当前端页面完成开发后,我们需要实现前后端的打通,主要是通过API来完成。本系统的数据对象并不多,因此前端集成的工作也是很快就完成了,主要包括以下集成:
通过应用自动生成的API接口调用题库以及试卷数据
系统后台会自动生成相关的API接口,前端通过调用接口即可拿到相关的数据。
向后端提供的Webhook地址,推送考试试卷
明道云后端准备了两个Webhook地址,一个是接收考试结果数据,另一个是接收考试过程数据。
用户每完成一道题目作答,前端便会推送答题数据到明道云后台;完成考试交卷后也会推送相关数据到明道云后台,后台接收到数据后通过自动化工作流来进行相关处理,保证整个流程完整通畅。
重点难题
本系统也是项目团队第一次尝试原生前端与明道云后端结合的开发模式,在过程中也遇到几个重点难题,可以供相关项目开发时参考。
1.三套系统的账号体系打通
本项目涉及三个系统:钉钉、原生前端与明道云。部署模式是将原生前端以钉钉微应用的方式部署,实现原生前端与钉钉的免登录。用户不需要登录明道云,但是用户相关的考试数据都可以存储在明道云上。这是怎么实现的呢?
由于用户访问前端时,前端可以获取到用户的钉钉ID,因此我们在明道云上维护了一张表,建立用户的钉钉ID与明道云的UserID的映射。当用户访问前端页面,前端页面便请求明道云API拿到用户的UserID。再通过UserID,就可以准确获取到当前的题库以及试卷数据。
2.实现无延时的答题体验
在明道云后台会预先给用户生成两套试卷,一套激活,一套未激活。用户点击答题时前端会直接调用API获取激活的试卷,用户完成答题后,前端会推送Webhook请求,明道云后台会立刻将这套激活试卷标记为已完成,并将那套未激活试卷标记为激活,同时会在后台执行生成一套未激活试卷的工作流。
通过上述方案,明道云系统会在前端请求Webhook的同时,给用户生成好新的试卷,并执行工作流在几秒钟后生成好新的缓存的试卷。对于用户而言,他可以流程地在答完一套试卷后立刻开始下一套答题,体验无延时。
3.避免用户的作弊操作
这个问题是系统设计之初的漏洞。由于前端没有考虑缓存,因此用户在答题过程中只要不点击提交试卷,中途退出后再进入页面,就得重做一遍。有部分用户利用这个漏洞提交很多套满分答卷。
为了解决这个问题,我们加入了缓存功能:用户每在前端完成一道题目的回答,前端就会推送相关数据到明道云,明道云就会把该题目标记为已答并缓存答案。用户在过程中退出再重新进入页面时,系统会从明道云拿到答题的缓存数据,并将已经回答过的题目标记好答案,并不允许用户再次作答。
通过这样的缓存设计,我们避免了用户答题过程中的漏洞,整个系统得以顺利上线。
四、项目延展
小结一下,本系统主要是通过明道云的工作表快速完成可视化数据建模和数据存储,并通过工作流和业务封装能力完成大量后端CRUD功能的实现,最后依靠自身完善的开放性设计实现系统对接。
以本文所介绍的案例来看,大量的系统开发都可以按照这个模式来实现,通过零代码平台完成后端开发,并实现系统集成。如果有需要的话,我们再搭配一个个性化前端即可。基于此,零代码开发能在更多领域和场景有所建树。