O2OA整合政務釘釘,實現人員同步、組織同步、單點登入(免登)、待辦待閱訊息推送
阿新 • • 發佈:2018-11-29
廢話不多說,直接上程式碼。
實現與政務釘釘的人員整合,待辦推送以及單點登入.
將次配置檔案由模版路徑拷貝到config目錄下.
配置檔名: zhengwuDingding.json
模版路徑:o2server/config/sample/zhengwuDingding.json
工作路徑:o2server/config/zhengwuDingding.json
zhengwuDingding.json:
{ "appId": "", "appSecret": "", "agentId":"", "syncOrganizationDirection": "disabe", "syncOrganizationCallbackAddress": "http://127.0.0.1:20030/x_program_center/jaxrs/zhengwudingding/sync/organization/callback", "pullCron": "10 0/5 * * * ?", "forcePullCron": "10 45 12,18 * * ?", "oapiAddress": "https://oapi.dingtalk.com", "corpId": "", "corpSecret": "", "titleSplit": [ ",", "、", ",", " ", " " ], "personAttributeTitleName": "職務", "nonce": "o2oa", "taskToMessage": true, "taskCompletedToMessage": true, "readToMessage": true, "readCompletedToMessage": true }
JSON引數說明:
appId: String 政務釘釘id
appSecret: String 政務釘釘金鑰
agentId: 應用id
syncOrganizationDirection: String人員同步方向,pull,push,disable
syncOrganizationCallbackAddress: String 政務釘釘人員修改回撥地址 http://127.0.0.1:20030/x_program_center/jaxrs/zhengwudingding/sync/organization/callback"
pullCron: String 拉入同步定時cron表示式
forcePullCron
oapiAddress: String 政務釘釘api伺服器地址
corpId: String 釘釘企業id
corpSecret: String 釘釘企業金鑰
titleSplit: [String] 職務分隔符
personAttrubteTitleName: String 政務釘釘職務同步到個人屬性名
nonce: String 單點登入(免登)使用的噪音字串
taskToMessage: Boolean 待辦推送到政務釘釘訊息
taskCompletedToMessage
readToMessage: Boolean 待閱推送到政務釘釘訊息
readCompletedToMessage: Boolean 已閱推送到政務釘釘訊息
釘釘訊息推送指令碼程式碼:
/********************
resources.getEntityManagerContainer(); //實體管理器
resources.getContext(); //上下文根
resources.getOrganization(); //組織訪問
resources.getWebservicesClient();//webSerivces客戶端
********************/
var type = 'zhengwuDingdingMessage';
var resp = resources.getContext().applications().getQuery(com.x.base.core.project.x_message_assemble_communicate.class,
'consume/list/' + type + '/count/100');
var messages = resp.getDataAsList(com.x.message.core.entity.Message.class);
for (var i in messages) {
var message = messages[i];
switch (message.getType()) {
case 'task_create':
if (com.x.base.core.project.config.Config.zhengwuDingding().getTaskToMessage()) {
var person = resources.getOrganization().person().getObject(message.getPerson());
var body = JSON.parse(message.getBody());
if (body) {
if (person) {
if (person.getZhengwuDingdingId()) {
var txt = '您有新的待辦需要處理:' + body['title'] + '.';
send('184707353', person.getZhengwuDingdingId(), txt);
print('傳送政務釘釘待辦訊息,通知物件: ' + message.getPerson() + '(' + person.getZhengwuDingdingId() + '), 訊息:' + txt + '.');
} else {
print('傳送政務釘釘待辦訊息失敗,通知物件' + message.getPerson() + ' 無法獲取政務釘釘id.');
}
} else {
print('傳送政務釘釘待辦訊息失敗,通知物件' + message.getPerson() + ' 不存在.');
}
} else {
print('傳送政務釘釘待辦訊息失敗,通知物件' + message.getPerson() + ' 無法獲取訊息物件.');
}
}
break;
case 'taskCompleted_create':
if (com.x.base.core.project.config.Config.zhengwuDingding().getTaskCompletedToMessage()) {
var person = resources.getOrganization().person().getObject(message.getPerson());
var body = JSON.parse(message.getBody());
if (body) {
if (person) {
if (person.getZhengwuDingdingId()) {
var txt = '您的待辦已經處理完成:' + body['title'] + '.';
send('184707353', person.getZhengwuDingdingId(), txt);
print('傳送政務釘釘已辦訊息,通知物件: ' + message.getPerson() + '(' + person.getZhengwuDingdingId() + '), 訊息:' + txt + '.');
} else {
print('傳送政務釘釘已辦訊息失敗,通知物件' + message.getPerson() + ' 無法獲取政務釘釘id.');
}
} else {
print('傳送政務釘釘已辦訊息失敗,通知物件' + message.getPerson() + ' 不存在.');
}
} else {
print('傳送政務釘釘待辦訊息失敗,通知物件' + message.getPerson() + ' 無法獲取訊息物件.');
}
}
break;
case 'read_create':
if (com.x.base.core.project.config.Config.zhengwuDingding().getReadToMessage()) {
var person = resources.getOrganization().person().getObject(message.getPerson());
var body = JSON.parse(message.getBody());
if (body) {
if (person) {
if (person.getZhengwuDingdingId()) {
var txt = '您有新的待閱需要處理:' + body['title'] + '.';
send('184707353', person.getZhengwuDingdingId(), txt);
print('傳送政務釘釘待閱訊息,通知物件: ' + message.getPerson() + '(' + person.getZhengwuDingdingId() + '), 訊息:' + txt + '.');
} else {
print('傳送政務釘釘待閱訊息失敗,通知物件' + message.getPerson() + ' 無法獲取政務釘釘id.');
}
} else {
print('傳送政務釘釘待閱訊息失敗,通知物件' + message.getPerson() + ' 不存在.');
}
} else {
print('傳送政務釘釘待辦訊息失敗,通知物件' + message.getPerson() + ' 無法獲取訊息物件.');
}
}
break;
case 'readCompleted_create':
if (com.x.base.core.project.config.Config.zhengwuDingding().getReadCompletedToMessage()) {
var person = resources.getOrganization().person().getObject(message.getPerson());
var body = JSON.parse(message.getBody());
if (body) {
if (person) {
if (person.getZhengwuDingdingId()) {
var txt = '您的待閱已經處理完成:' + body['title'] + '.';
send('184707353', person.getZhengwuDingdingId(), txt);
print('傳送政務釘釘已閱訊息,通知物件: ' + message.getPerson() + '(' + person.getZhengwuDingdingId() + '), 訊息:' + txt + '.');
} else {
print('傳送政務釘釘已閱訊息失敗,通知物件' + message.getPerson() + ' 無法獲取政務釘釘id.');
}
} else {
print('傳送政務釘釘已閱訊息失敗,通知物件' + message.getPerson() + ' 不存在.');
}
} else {
print('傳送政務釘釘待辦訊息失敗,通知物件' + message.getPerson() + ' 無法獲取訊息物件.');
}
}
break;
default:
system.print('未知的訊息型別: ' + message.getType() + ' , title: ' + message.getTitle() + '.');
break;
}
consume(message.getId(), type);
}
function send(agentId, user, message) {
var body = '{"agentId":"184707353","touser":"' + '10001461928' + '","toparty": "","msgtype":"text","context":"' + message + '"}';
var address = com.x.base.core.project.config.Config.zhengwuDingding().getOapiAddress() + "/ent_message/send?access_token=" + com.x.base.core.project.config.Config.zhengwuDingding().appAccessToken();
com.x.base.core.project.connection.HttpConnection.postAsString(address, null, body);
}
function consume(id, type) {
resources.getContext().applications().getQuery(com.x.base.core.project.x_message_assemble_communicate.class,
'consume/' + id + '/type/' + type);
}