摘要:釘釘開放平臺(tái)提供了豐富的第三方對(duì)接程序接口,為了更好的支持手機(jī)辦公和電腦釘釘?shù)氖褂茫疚耐ㄟ^實(shí)例的形式完成單位內(nèi)部OA系統(tǒng)與釘釘開放平臺(tái)的消息推送的模塊工作。
關(guān)鍵詞:釘釘開放平臺(tái);釘釘與內(nèi)部OA對(duì)接
釘釘是阿里巴巴旗下的通訊類工具,專門打造各單位通用化OA系統(tǒng),是一款免費(fèi)版通訊類軟件,幫助企業(yè)能夠快速的完成與釘釘?shù)膶?duì)接工作。本文將以釘釘開放平臺(tái)中的企業(yè)內(nèi)部應(yīng)用為例,完成單位內(nèi)部OA系統(tǒng)與釘釘開放平臺(tái)系統(tǒng)的接口對(duì)接,以實(shí)例的形式完成單位內(nèi)部OA系統(tǒng)與釘釘開放平臺(tái)的消息推送的模塊工作。其中主要包括釘釘?shù)腁CCESS_TOKEN的獲取、消息通知、接口調(diào)用說明、系統(tǒng)間對(duì)照關(guān)系等對(duì)接涉及的工作。
一、總覽
企業(yè)內(nèi)部OA系統(tǒng)通常建立在文件驅(qū)動(dòng)的方式,以文件流為導(dǎo)向,推送或收發(fā)到各聯(lián)系人或OA賬號(hào)內(nèi),企業(yè)內(nèi)部OA系統(tǒng)通常都有自己的組織架構(gòu),需要將釘釘?shù)慕M織架構(gòu)與OA系統(tǒng)的組織架構(gòu)進(jìn)行對(duì)照,并完成消息推送。企業(yè)內(nèi)部OA系統(tǒng)作為獨(dú)立的運(yùn)作系統(tǒng),我們與其對(duì)接時(shí)不能破壞內(nèi)部的邏輯架構(gòu),也不能強(qiáng)行讓OA系統(tǒng)進(jìn)行內(nèi)部改造,本文采用輪詢企業(yè)OA系統(tǒng)數(shù)據(jù)庫(kù)方式來監(jiān)聽發(fā)文信息,并采用釘釘提供的API方式進(jìn)行接口對(duì)接,推送OA文件鏈接。。
二、數(shù)據(jù)表的創(chuàng)建
本文采用數(shù)據(jù)庫(kù)輪詢監(jiān)聽的方式工作,本文需要?jiǎng)?chuàng)建6個(gè)數(shù)據(jù)表,DingTalkDeptInfo為從釘釘組織架構(gòu)中獲取的科室信息,DingTalkPersonInfo為從釘釘組織架構(gòu)中獲取的人員信息,DingTalkUndoInfo為釘釘推送消息中撤銷任務(wù)列表信息,DingTalkSendInfo為釘釘完成推送消息信息列表,OAvsDingTalk為OA系統(tǒng)與釘釘系統(tǒng)的內(nèi)部人員對(duì)照表,OAUserInfo為OA系統(tǒng)用戶ID信息表。釘釘?shù)慕M織架構(gòu)分為一級(jí)科室和二級(jí)科室等架構(gòu),支持多節(jié)點(diǎn)結(jié)構(gòu),我們要獲取當(dāng)前科室下的所有員工信息時(shí),釘釘開發(fā)平臺(tái)接口要求必須傳入父節(jié)點(diǎn)ID,所以我們?cè)谠O(shè)計(jì)表時(shí),將科室單獨(dú)存放在一個(gè)表中,人員單獨(dú)創(chuàng)建另一個(gè)表。其中DingTalkSendInfo為主要表格,里面包含釘釘已發(fā)送過的OA文件ID(DingSendOAId),釘釘推送服務(wù)返回狀態(tài)信息(DingMsg),釘釘人員ID(DingUserId),釘釘系統(tǒng)返回發(fā)送任務(wù)ID(DingTaskId),發(fā)送時(shí)間(CreateTime)。其他表格內(nèi)容項(xiàng)不贅述。
三、程序設(shè)計(jì)流程及關(guān)鍵點(diǎn)
TalkServer以Timer定時(shí)器每隔10s將會(huì)調(diào)用一次OA發(fā)文推送函數(shù),OA發(fā)文推送函數(shù)采用Thread線程方式,首先先獲取DingTalkSendInfo表中已發(fā)送的最大的DingSendOAId,然后再查詢OA系統(tǒng)當(dāng)前最大的OAId,采用for循環(huán)的形式將DingSendOAId作為i起始變量,i小于OAId,i變量自增的形式,循環(huán)發(fā)送需要發(fā)送ID。代碼如:for (long i = DingSendOAId; i < OAId; i++)。OA文件系統(tǒng)存在樹形結(jié)構(gòu)的形式,我們需要通過主目錄獲取子目錄明細(xì)項(xiàng)目,推送釘釘消息時(shí),只推送一個(gè)發(fā)文標(biāo)題,而子目錄將以程序列表的形式發(fā)送給釘釘用戶,OA系統(tǒng)需要按照網(wǎng)絡(luò)安全要求,將公網(wǎng)IP地址映射給OA發(fā)文系統(tǒng)服務(wù)器,這樣推送給釘釘用戶的消息可以通過互聯(lián)網(wǎng)訪問內(nèi)部OA系統(tǒng)查看文件。在推送消息前,應(yīng)從OA系統(tǒng)獲取文件相關(guān)的ID,發(fā)送人,接收人等信息,然后將主目錄列表的公網(wǎng)IP地址及標(biāo)題等相關(guān)信息作為主目錄數(shù)據(jù),構(gòu)建完成主目錄數(shù)據(jù)后,通過for循環(huán)構(gòu)造子目錄數(shù)據(jù)明細(xì)項(xiàng)目及對(duì)應(yīng)文件的鏈接地址。推送主目錄時(shí),我們還需要OA與釘釘用戶對(duì)照表OAUserInfo中獲取釘釘用戶的ID,這時(shí)我們還需要考慮,會(huì)存在OA一個(gè)賬戶,但釘釘存在兩個(gè)部門都會(huì)使用同一個(gè)OA賬戶的情況,OAUserInfo里的對(duì)應(yīng)關(guān)系可能存在一個(gè)OA賬戶對(duì)應(yīng)多個(gè)釘釘用戶或科室ID,利用for循環(huán),將同一個(gè)主目錄,依次發(fā)送給多個(gè)用戶。同時(shí)我們還會(huì)對(duì)撤銷或刪除的OA文件進(jìn)行撤銷函數(shù)處理,因?yàn)槊恳淮蔚尼斸斚⑼扑停紩?huì)返回taskId,我們將存放在數(shù)據(jù)庫(kù)DingTalkSendInfo表中,通過對(duì)OA系統(tǒng)的監(jiān)聽,獲取到最近10次的撤銷文件ID,與撤銷任務(wù)表DingTalkUndoInfo中ID進(jìn)行for循環(huán)對(duì)比,如果存在最新的ID,則調(diào)用釘釘?shù)某蜂N函數(shù)API,以上內(nèi)容為程序的基本流程設(shè)計(jì)。
四、釘釘開放平臺(tái)函數(shù)介紹和使用
手機(jī)端網(wǎng)頁(yè)的顯示采用H5微應(yīng)用的方式進(jìn)行開發(fā),我們需要將OA系統(tǒng)當(dāng)前發(fā)文的子目錄以列表的形式在釘釘APP上顯示,所以我們需要開發(fā)H5頁(yè)面用來顯示發(fā)文的附件明細(xì),我們可以使用
參考文獻(xiàn)
[1]朱夏迪.醫(yī)院HIS系統(tǒng)調(diào)用釘釘開放平臺(tái)的簡(jiǎn)單實(shí)例[J].中國(guó)新通信,2016,18(19):146-147.
作者簡(jiǎn)介:薛凱,男,山東省青島市,1990年5月,本科,高級(jí)系統(tǒng)架構(gòu)師,軟件設(shè)計(jì)師,青島市黃島區(qū)人民醫(yī)院信息中心工作,主要從事軟件維護(hù)、軟件開發(fā)
青島市黃島區(qū)人民醫(yī)院,信息中心 266400