一、标准功能,配置完成( ECKB在9002006(包括)以后 )
1、前提条件
(1)、OA (ECKB在9002006(包括)之后)
(2)、第三方系统消息推送接口调用前,不需要调用接口获取token
(3)、第三方系统可以自行按照OA单点登录规范,去实现消息链接的单点。
2、配置
(1)、新建消息订阅设置
应用中心-消息中心-消息订阅设置-新建
推送方式:
标准类推送:使用标准的类进行配置推送,不需要二开,类路径com.weaver.base.msgcenter.sub.StandardSub会自动带出来。
标准继承推送、自定义推送、EBS推送(需要二开)
ESB推送配置见:https://www.showdoc.com.cn/p/71a2b76a6a5a442b2bc2b182b94b1394消息类型:
用户可以筛选消息类型,选择到哪些消息要推送给第三方。 对应消息类型设置里的消息类型 ,一般选择到新到达流程即可
数据类型:
消息传输格式 文本或者二进制 (默认是文本)
通道类型:
OA的消息选择以何种方式推送给第三方(默认是直接推送,也就是不用中间件)
Redis:需要客户OA环境部署redis服务,如果没有需要找架构部部署,已经有可以直接用。
其他中间件方式,均需要单独部署,才能使用
OA系统地址:
ecology系统的地址(用于拼接到消息链接上),http或者https开头
消息推送接口地址:
第三方的消息推送接口地址,http或者https开头
消息推送接口请求方式:
第三方消息推送接口是JSON请求还是x-www-form-urlencoded 请求。默认x-www-form-urlencoded
(2)、参数设置:配置第三方消息推送接口参数对应消息的字段
参数名称:
第三方消息推送接口所需要的参数
参数类型:
集合:表示该参数还有子参数
列表:表示该参数是一个JSON数组
文本:表示该参数是一个字符串(字段无特殊说明,一般是文本)
值:
选择具体要对应的消息字段
消息标题、消息内容、消息PC端链接、消息移动端链接、接收人、自定义参数消息链接:
支持编码方式URLEncoder、Base64、Hexadecimal 16进制、MD5。如果请求方式选择x-www-form-urlencoded,那么编码方式选择URLEncoder。如果请求方式选择JSON,那么编码方式选择空
单点登录参数:
是用于消息发送到第三方后,第三方要点击消息链接重新访问OA系统时使用。
(1)、如果第三方系统已经和OA集成过,或者OA这边开发过单点相关的东西,只需要链接后面拼接参数,可以按照code=固定值 这种形式在链接后面拼接参数
(2)、如果第三方系统之前没有和OA做过任何集成,请参照下面文档开发
Third-partysinglesign-onEcologysolution.pdf(具体请咨询集成组同事)接收人:
当参数类型为文本时,说明第三方的消息接口,接收人字段是一个字符串,并且以某个分隔符分开的
当参数类型是列表时,说明第三方的消息接口,接收人字段是一个JSON数组
因为在OA内部消息接收人是人员id,推送给第三方系统,需要做一些人员转化,所以可以将接收人转化成登录名、姓名、编号去接收自定义参数:
值是一个固定的不变
3、启用
二、项目同事自行二开,OA消息推送给第三方系统
1、继承IMessageReceive类
新到达流程(或待处理流程)、转发流程、抄送流程、退回流程、意见征询流程、传阅流程,只有这六个才是待办流程。其他的都属于消息通知,只要待办流程的消息就只选择这几个。
package com.cloudstore.eccom;
import com.alibaba.fastjson.JSONArray;
import com.cloudstore.dev.api.bean.MessageBean;
import com.cloudstore.dev.api.bean.MessageType;
import com.weaver.base.msgcenter.channel.IMessageReceive;
import java.util.List;
import java.util.Map;
public class SubTest implements IMessageReceive {
public void onMessage(String paramString) {
List<MessageBean> localList = JSONArray.parseArray(paramString, MessageBean.class);
if(localList!=null)
for(MessageBean messageBean : localList){
if(messageBean.getMessageType().getCode() == MessageType.WF_NEW_ARRIVAL.getCode() || ){
}
}
}
public void onStart() {
}
public void onEnd() {
}
public void setProp(Map<String, String> paramMap) {
}
public void setList(List<IMessageReceive> paramList) {
}
}
2、注册该类
(1)、新建
(2)、注册
(3)、启用
3、附录:
MessageBean消息实体类
private MessageType messageType;//标准产品消息类型
private int userId;//目标用户ID
private Set<String> userList;//userID
private String title;//标题
private String context;//内容
private int creater;//创建人
private String linkUrl;//链接地址
private String linkMobileUrl;//移动端链接地址
private String bizType;//业务编号(需要按照各模块业务去展示消息类型,保证唯一,业 务编号前加上消息类型code保证唯一)
private String bizState;//业务状态vvv(与修改消息状态有关,已处理 : 1 已删除 : 27 已 暂停 : 34 已撤销 : 35)
private String bizTitle;//业务标题(需要按照各模块业务所展示的消息类型名称)
private String targetId;//业务对象(需要修改消息状态,在发消息时targetid传入各模块 自己的业务的唯一id,前面再加上消息类型的code+“|”,保证在消息表中不与其他模 块冲突)
private String targetName;//业务名称
private String detailTitle;//明细标题(由脚本指定,代码中不用设值)
private Map<String, Object> params;//参数
private String path;//路径
private Map<String, Object> emParams;//对接EM的参数(可覆盖MessageBean中默认的)
private Map<String, Object> detailTitleParams; //(提醒模板中提醒标题参数存放)
MessageTye消息类型实体类(可以根据这个消息类型筛选消息,
messageBean.getMessageType().getCode() == )
对应 MessageBean中的MessageType (newInstance中的值,是code的值)
一般来说MessageType 选 19 20 21 22 23 24 这几个就行,代表待办流程发的消息
messagetype消息来源的code 可以通过页面查询
protected int code;//消息类型唯一编号
public int getCode() {
return code;
}
三、版本比较低时,通过ESB推送到第三方( ECKB在9002006(不包括)之前 )
大多数客户在版本比较低时,都是选择的通过ESB推送到第三方。但是版本比较低的时候,不支持界面配置,所以需要 手动改代码。Util_Message.sendmessage 方法中加入调用ESB接口的逻辑