作者/譚江山,柳州市第一職業技術學校
基于中間件技術的釘釘與現有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)