作者/谭江山,柳州市第一职业技术学校
基于中间件技术的钉钉与现有OA系统集成探讨
作者/谭江山,柳州市第一职业技术学校
目的:实现企业内部办公系统通过钉钉接口发送通知、电子工资条等功能,实现与现有OA系统进集成。方法:现有办公系统程序通过中间件技术间接地与钉钉开放平台进行通信。结果:能够在现有办公系统中方便地调用钉钉开放平台的接口,如:发送钉钉消息、同步钉钉通讯录等一系列的功能。结论:该方法实施部署简单,具有良好的扩展性。并且在不影响原有系统的前提下,方便企业了解员工查看通知情况。
钉钉;办公系统;集成 c# 中间件
钉钉是阿里巴巴专为中小企业和团队打造的沟通、协同的移动办公OA。钉钉解决了企业管理中的一些问题,比如找人不再麻烦、信息得不到回复、审批流程简单化,无纸化、沟通软件等,自从2015年5月26日正式发布钉钉2.0版以来,用户数得到快速的增长。由于很多企业原来已经有了自己的OA办公系统 ,并且些办公系统已经比较成熟,企业员工也已经习惯了原有OA系统。但随着移动互联网的发展,原有办公系统的一些短板也很明显,比如要找一个同事还要查办公系统的联系电话,发出的信息得不到回复,不知有没有看到。审批文件还需要到处找领导,或还要登录电脑才能审批。而这些传统办公系统的缺点正是钉钉所擅长的。但钉钉毕竟是一个通用的信息沟通平台,不能适应一些企业的个性化要求。如何将钉钉与现有OA办公系统进行整合是本文的探讨目标。
中间件是一种独立的系统软件或服务程序,应用软件借助这种软件在不同的技术之间共享资源。中间件位于客户机
服务器的操作系统之上,管理计算机资源和网络通讯。是连接两个独立应用程序或独立系统的软件。相连接的系统,即使它们具有不同的接口,但通过中间件相互之间仍能交换信息。执行中间件的一个关键途径是信息传递。通过中间件,应用程序可以工作于多平台环境。
OA是办公自动化(OFFICE AUTOMATION)的简称,是采用Internet/Intranet技术,基于工作流概念,使企业内部人员方便快捷地共享信息,高效协同工作;改变过去复杂、低效的手工办公方式,实现迅速、全方位的信息采集、处理,为企业管理和决策提供科学依据。企业实现办公自动化程度也是衡量其实现现代化管理的标准。办公自动化不仅兼顾个人办公效率提高,更重要的是可实现群体协同工作。凭借网络,这种交流与协调几乎可以在瞬间完成。这里所说的群体工作,可以包括在地理上分布很广,甚至在全球上各个地方,以至于工作时间都不一样的一群工作人员。
传统的OA系统主要是运行于PC端,很多企事业单位的OA系统都是针对自己的个性特点来开发的,使用已经很稳定和成熟。近几年随着智能移动设备的快速发展,OA系统开始向移动端发展,工作效率得到了很大的提高,但仍然有大量的OA系统运行于PC端。即使有的OA系统有自己的APP,但这些APP的缺点主要体现在无法了解信息送达的情况,即信息的发送者无法了解接收者是否已经查看了信息,也无了解哪些接收者没有查看信息。能了解接收者查看信息情况,是钉钉的特色之一。根据钉钉官方2016年12月钉钉对外公布用户数量已经超过240万家,而且用户数量正在快速增长。
为了方便各类应用接入钉钉,钉钉开发平台开放了接入接口API,利用API可以方便的让我们的OA系统与钉钉集成。但钉钉只提供了类似微信的JSAPI接口,且只提供了Java、PHP及Nodejs这三种技术接入钉钉开放平台API的示例代码,未提供C#的示例代码,也未提供接入方案。本文将探讨用C#和中间件技术,实现OA系统与钉钉的集成。本方案不是让钉钉平台与现有OA系统直接进行通信,而是利用中间件技术。钉钉平台通过开的发JSAPI接口与中间件进行通信,中间件再通过WebService或WebApi技术与OA系统进行通信,如图1所示。
图1
考虑到OA系统后续可能还会有更多的应用要接入,所以这里采用的接入方式是消息中间件架构,作用是将钉钉开放的各种各样的接口,比如说组织同步的接口、应用管理接口、消息接口进行统一封装,这样以后无论要接入哪个系统,这些系统只要和中间件打交道就可以了。钉钉接口一旦发生变化,只要改中间件的接口,后端系统的接口是不需要做任何变动的。也许过几年后,新出来其他的应用更适合做移动办公,不再使用钉钉了,所有内容都要颠覆掉,通过中间件的方式就会比较好的解决这样的一个接入的问题,如中间件可以后续改变和微信接入等。
下面以发布通知为例,实现钉钉与OA系统的集成。将中间件以类库的方式引用到OA系统中,以下是实现中间件功能的各个类的关键代码:
// OA将数据提交到钉钉的帮助类
public class HttpHelper
{
public static string HttpPost(string
url, Object data)
{
WebClient wc = new WebClient();
wc.Headers.Add("Content-Type",
"application/json");
byte[] postData = Encoding.UTF8.
GetBytes(data.Tostring());
byte[] responseData =
wc.UploadData(url, "POST", postData); // 得到返回
字符流
return Encoding.UTF8.
Getstring(responseData);// 解码
}
}
//消息类
public class TextMessage
{
public string touser;//消息接收人id
public string toparty;// 消息接收部门id
public string agentid;//应用id
public string msgtype="text";//消息类型
public Text text=new Text();//消息内容
//发消息给企业中的所有人
// accessToken为企业授权码,content为要发布的消息内容
public string SendToAll(string
url,string agentid, string accessToken, string
content)
{
this.touser = "@all";//所有人
this.toparty = "";
this.agentid = agentid;
this.text.content = content;
string hostUrl= url + "/message/
send?" + "access_token=" + accessToken;
return HttpHelper.HttpPost(hostUrl,
JsonHelper.SerializeObject(this));//发布消息
}
}
public class Text
{
public string content;
}
笔者基于上述技术,将所在学校的自有OA与钉钉平台进行集成,实现了学校内网、外网通知公告与钉钉同步发送、电子工资条的发送和查询等,同时实现了部门信息及员工信息与钉钉的同步。系统已经平稳运行6个多月,服务于学校的400多名教职员工,提高了通知公告的知晓率,丰富了学校的移动办公。
* [1]《医院HIS系统调用钉钉开放平台的简单实例》作者 朱夏迪中国新通信
* [2]《中间件技术研究》作者 常煜芬、张育平计算机应用研究
* [3]阿里钉钉开放平台(https://open.dingtalk.com)