管理软件预警通知(Notification)功能的实现案例分析
预警通知的功能对于管理软件比较常见。比如,开发部填写购买10台电脑的采购申请单,需要通知经理和财务经理审批;又如供应商把10台电脑送到公司,货物经过仓库部门入库,仓库需要通知申请购买的部门来领取电脑。这种具有通知功能的软件模块,在管理软件中非常普遍。用形象的词语表达是push,用一种方式来推动和告知相关的主体来参与系统的某项活动(审批,领料)。 比较直接的方式一般是直接打电话给经理,告诉他需要在系统中审批一下物料请购,这种方式效果好,如果同时与邮件配合使用,效果更佳。
预警通知的工具可以是邮件,短信,电话。从实现方法上讲,根据我的理解,有下面的几个实现例子供参考。
1 系统自动发送电子邮件通知
如下图,已经填写了加班申请单,需要通知经理审批。系统自动发送一封邮件到经理的邮箱中。
经理批准了加班后,系统又自动发送一封邮件到申请加班的员工的邮箱中,可以加班。
这种自动邮件的通知方式,在邮件盛行的企业中相当通用。
与直接打电话相比教,打电话的好处是直接,方便。但是有时候被电话通知的人可能不在电话旁边,或是一直在忙,你用电话的方式去打扰他(一般是上级),这种打扰带有是催促的意味,有点不合适。
在一些关键的业务流程活动中,电话沟通有时候是无效的。比如,负责项目的工程师一开始根据客户的需求,通知采购员购买Yudo的热流道系统,采购员根据项目工程师的电话通知,下单购买Yudo的热流道系统,PO单很快就被打印出来并传到Yudo供应商那里。项目进行到一半,由于负责任的原因,项目的工程师再次向采购员确认Eden的热流道系统有没有到货时,采购员不相信自己的耳朵,怎么这次说的是Eden的热流道。熟悉模具行业的朋友应该知道,热流道系统在模具的成本中占有相当重的比重。个人细节不用深究,我想表达的主题是,电话沟通有时候是无效的。把邮件发给我吧,先留下你的证据,我再来做事。
2 金蝶ERP的方现方式
我不是故意给金蝶做广告,我是想表达,金蝶ERP在中国的ERP市场占有相当的比重,有它的道理。常常研究现有的成熟的做法,比起闭门造车,效果往往会事半功倍。
在进入金蝶ERP的主界面后,在右下边有一个消息窗口,打开消息管理器,如下图
这是ERP系统发送给当前登陆用户的所有通知消息。
金蝶的消息撰写界面如下
用这种方式通知自己的经理批准加班申请,主动撰写通知,然后发送给经理。
我猜测这个模块的设计意图,不是我所说的这个用途。
请注意上面的收件箱和发件箱的两个子节点:普通消息和工作流消息。我所说的发送邮件通知经理批准加班的消息,也可能就在ERP系统中申请加班后,系统自动发送通知消息给经理。这种消息通知,可以把它写到工作流消息中去,当加班申请提交后自动触发,也可以以我演示的方式,手动撰写消息,指定消息接收人为经理。这种设计方式,弥补了上面第一种的邮件发送方式的不足。第一种方法实现的邮件由系统自动发送,只是实现了这里所说的工作流消息。金蝶ERP还实现了自定义的消息,如上图,可以撰写自定义的消息。金蝶ERP的消息还不依赖电子邮件,购买邮件客户端(Outlook,Foxmail)还需要一笔费用。
3 XX系统的实现方式
设计管理软件,我们会先研究现有的工作方式,工作流程,然后再设计相关的工具来实现软件流程化管理。这个设计思路一般包含有三个方面
1) input 数据输入
2 )process flow/workflow 工作流程
3) performance/report 报表,绩效
这种方法贯穿于软件开发的整个过程。feedback也算一个步骤,但是重要性比上面三项要小很多。
之所以提到这个方法,是因为下面将会介绍一种由老外设计的消息通知结构,可能符合国外的工作习惯。
而上面的方法也是一个外国同事介绍给我的,可能会增进理解下面的设计方法。
先上个图,一图解千言
这是通知(Notification)的主界面,左边是通知动作,ListView列出模块名称和需要通知的消息。右边是接受消息的人员,
下面的面板显示了已经发送的通知消息的历史记录。
我举一个例子帮助理解上面各部分的含义。对于EMP-LoginAttempt模块,有一条通知消息是Exceed Login Attempt Limit(登陆尝试超过系统设定的最大次数),在右边选择相应的接受消息的人员。当James Li登陆系统,可能因为一大把年纪了,
忘记了密码,一直不能进入系统。在超过系统规定的尝试登陆次数后,James Li的帐号被锁定,
无法继续尝试登陆。与此同时,系统会触发一封通知消息,告诉James Li已经超过了系统规定的最大登陆次数,帐号被锁定。这里的通知消息是邮件,
可以应用SQL Server实现的邮件发送方法,也可以使用指定的SMTP服务器来发送邮件。SQLMail可发送的消息包括文本串,附加文件或SQL语句的执行结果集。应用SQLMail的扩展存储过程,邮件消息可以从一个触发器或一个存储过程中发送,并且通过SQLServer提供的任务和警告等功能,可以根据需要在不同的时间和情况下发送。这是SQL Mail的优势,但是需要安装一个基于MAPI的客户端,比如Outlook。
这种设计有点工作流的含义,当某个系统事件发生后,自动触发一项系统活动。
如果说看了第一种实现方法还不太明白通知的总体结构,看了这个界面后,应该可以从全局上把握这种通知功能的结构。需要建几个表,有什么技术要求,如何实现,都已经很明显的摆在界面上了。
这个程序运用SQL Server的Job和SQL Mail功能,实现消息通知功能。如果配置SQL Mail麻烦,可以直接指定SMTP发送邮件服务器。这种设计是考虑到有的员工可能不属于公司的正式编制,没有公司配置的统一邮件(公司配置的邮件系统一般是Exchange Server,这样做的好处太多),这时可以通过指定SMTP服务器也达到同样的效果。
4 XX系统的实现方式
这个系统的设计者也是老外,它的设计方法深深的打上外国人的思维模式。
虽然标题是Task Manager,实际上它也是用于管理任务消息通知的程序。
左侧面板是命令操作区,可以新建一项任务,接收任务,右边是消息面板,分为当前未处理的消息或任务,和已经处理过的消息或任务,分别放在New Task和Accepted Task面板中。
让我们来看一下,如何新建一个任务消息通知
还是以上面的加班申请为例,已经写好了加班申请,在系统中新建一个消息通知经理审批加班。
如上图所示,Assign页面是选择加班的审批经理。
从程序实践方面来讲,这种方式是数据库的实现主式,和金蝶ERP的方式相似,不和邮件关联。
提到Task Manager,SQL Server也实现了与任务管理类似的功能,叫Task Pad.
打开SQL企业管理器,选择一个数据库,在右边的查看视图中点击右键,View—>Taskpad
这是个SQL的任务管理工具窗体,提供查看数据库和表的信息,创建新的任务(Table,View,Job之类)的引导窗口,它和Windows Task Manager的相似程度很高。
看了这两个界面,也许就会熟悉有关Task的界面设计模式。是的,他们长的都很相似。
通过发送邮件或新建一条数据库记录,或发送手机短信,再参考上面提到的四种实现方式,
可以实现一个带预警提醒功能的模块。依据各自的喜好和应用情景,选择不同的实现方式。
从程序实现方面来讲,自动发送邮件最简单,结合工作流和自动发送的方式实现起来比较复杂。
这类功能通常是一个管理软件必备的功能。也可以综合这几种情况,实现一个基于消息通知的中间件,
也许会有市场。这就好比权限管理,组织机构管理,把这个模块做好做稳定,还是有相当的市场的。拿不出手就自己用在项目开发中,
让工作轻松,每天少加班及时回家;如果可以拿得出手,自认为各方面比较成熟(架构,编码,应用场景)就到网上吆喝叫卖。