摘要:钉钉开放平台提供了丰富的第三方对接程序接口,为了更好的支持手机办公和电脑钉钉的使用,本文通过实例的形式完成单位内部OA系统与钉钉开放平台的消息推送的模块工作。
关键词:钉钉开放平台;钉钉与内部OA对接
钉钉是阿里巴巴旗下的通讯类工具,专门打造各单位通用化OA系统,是一款免费版通讯类软件,帮助企业能够快速的完成与钉钉的对接工作。本文将以钉钉开放平台中的企业内部应用为例,完成单位内部OA系统与钉钉开放平台系统的接口对接,以实例的形式完成单位内部OA系统与钉钉开放平台的消息推送的模块工作。其中主要包括钉钉的ACCESS_TOKEN的获取、消息通知、接口调用说明、系统间对照关系等对接涉及的工作。
一、总览
企业内部OA系统通常建立在文件驱动的方式,以文件流为导向,推送或收发到各联系人或OA账号内,企业内部OA系统通常都有自己的组织架构,需要将钉钉的组织架构与OA系统的组织架构进行对照,并完成消息推送。企业内部OA系统作为独立的运作系统,我们与其对接时不能破坏内部的逻辑架构,也不能强行让OA系统进行内部改造,本文采用轮询企业OA系统数据库方式来监听发文信息,并采用钉钉提供的API方式进行接口对接,推送OA文件链接。。
二、数据表的创建
本文采用数据库轮询监听的方式工作,本文需要创建6个数据表,DingTalkDeptInfo为从钉钉组织架构中获取的科室信息,DingTalkPersonInfo为从钉钉组织架构中获取的人员信息,DingTalkUndoInfo为钉钉推送消息中撤销任务列表信息,DingTalkSendInfo为钉钉完成推送消息信息列表,OAvsDingTalk为OA系统与钉钉系统的内部人员对照表,OAUserInfo为OA系统用户ID信息表。钉钉的组织架构分为一级科室和二级科室等架构,支持多节点结构,我们要获取当前科室下的所有员工信息时,钉钉开发平台接口要求必须传入父节点ID,所以我们在设计表时,将科室单独存放在一个表中,人员单独创建另一个表。其中DingTalkSendInfo为主要表格,里面包含钉钉已发送过的OA文件ID(DingSendOAId),钉钉推送服务返回状态信息(DingMsg),钉钉人员ID(DingUserId),钉钉系统返回发送任务ID(DingTaskId),发送时间(CreateTime)。其他表格内容项不赘述。
三、程序设计流程及关键点
TalkServer以Timer定時器每隔10s将会调用一次OA发文推送函数,OA发文推送函数采用Thread线程方式,首先先获取DingTalkSendInfo表中已发送的最大的DingSendOAId,然后再查询OA系统当前最大的OAId,采用for循环的形式将DingSendOAId作为i起始变量,i小于OAId,i变量自增的形式,循环发送需要发送ID。代码如:for (long i = DingSendOAId; i < OAId; i++)。OA文件系统存在树形结构的形式,我们需要通过主目录获取子目录明细项目,推送钉钉消息时,只推送一个发文标题,而子目录将以程序列表的形式发送给钉钉用户,OA系统需要按照网络安全要求,将公网IP地址映射给OA发文系统服务器,这样推送给钉钉用户的消息可以通过互联网访问内部OA系统查看文件。在推送消息前,应从OA系统获取文件相关的ID,发送人,接收人等信息,然后将主目录列表的公网IP地址及标题等相关信息作为主目录数据,构建完成主目录数据后,通过for循环构造子目录数据明细项目及对应文件的链接地址。推送主目录时,我们还需要OA与钉钉用户对照表OAUserInfo中获取钉钉用户的ID,这时我们还需要考虑,会存在OA一个账户,但钉钉存在两个部门都会使用同一个OA账户的情况,OAUserInfo里的对应关系可能存在一个OA账户对应多个钉钉用户或科室ID,利用for循环,将同一个主目录,依次发送给多个用户。同时我们还会对撤销或删除的OA文件进行撤销函数处理,因为每一次的钉钉消息推送,都会返回taskId,我们将存放在数据库DingTalkSendInfo表中,通过对OA系统的监听,获取到最近10次的撤销文件ID,与撤销任务表DingTalkUndoInfo中ID进行for循环对比,如果存在最新的ID,则调用钉钉的撤销函数API,以上内容为程序的基本流程设计。
四、钉钉开放平台函数介绍和使用
手机端网页的显示采用H5微应用的方式进行开发,我们需要将OA系统当前发文的子目录以列表的形式在钉钉APP上显示,所以我们需要开发H5页面用来显示发文的附件明细,我们可以使用
参考文献
[1]朱夏迪.医院HIS系统调用钉钉开放平台的简单实例[J].中国新通信,2016,18(19):146-147.
作者简介:薛凯,男,山东省青岛市,1990年5月,本科,高级系统架构师,软件设计师,青岛市黄岛区人民医院信息中心工作,主要从事软件维护、软件开发
青岛市黄岛区人民医院,信息中心 266400