Loading... ## 一、标准功能,配置完成( *ECKB在9002006(包括)以后* ) ### 1、前提条件 #### (1)、OA (ECKB在9002006(包括)之后) #### (2)、第三方系统消息推送接口调用前,不需要调用接口获取token #### (3)、第三方系统可以自行按照OA单点登录规范,去实现消息链接的单点。 ### 2、配置 #### (1)、新建消息订阅设置 *应用中心-消息中心-消息订阅设置-新建* ![应用中心-消息中心-消息订阅设置-新建](https://xug.cc/usr/uploads/2023/06/3122136108.png) * 推送方式: > 标准类推送:使用标准的类进行配置推送,不需要二开,类路径com.weaver.base.msgcenter.sub.StandardSub会自动带出来。 > 标准继承推送、自定义推送、EBS推送(需要二开) > ESB推送配置见:[https://www.showdoc.com.cn/p/71a2b76a6a5a442b2bc2b182b94b1394](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)、参数设置:配置第三方消息推送接口参数对应消息的字段 ![参数设置](https://xug.cc/usr/uploads/2023/06/1269015889.png) * 参数名称: > 第三方消息推送接口所需要的参数 * 参数类型: > 集合:表示该参数还有子参数 > > 列表:表示该参数是一个JSON数组 > > 文本:表示该参数是一个字符串(字段无特殊说明,一般是文本) * 值: > 选择具体要对应的消息字段 > 消息标题、消息内容、消息PC端链接、消息移动端链接、接收人、自定义参数 * 消息链接: > 支持编码方式URLEncoder、Base64、Hexadecimal 16进制、MD5。如果请求方式选择x-www-form-urlencoded,那么编码方式选择URLEncoder。如果请求方式选择JSON,那么编码方式选择空 * 单点登录参数: > 是用于消息发送到第三方后,第三方要点击消息链接重新访问OA系统时使用。 > (1)、如果第三方系统已经和OA集成过,或者OA这边开发过单点相关的东西,只需要链接后面拼接参数,可以按照code=固定值 这种形式在链接后面拼接参数 > (2)、如果第三方系统之前没有和OA做过任何集成,请参照下面文档开发 > [Third-partysinglesign-onEcologysolution.pdf](https://xug.cc/usr/uploads/2023/06/867677056.pdf)(具体请咨询集成组同事) * 接收人: > 当参数类型为文本时,说明第三方的消息接口,接收人字段是一个字符串,并且以某个分隔符分开的 > 当参数类型是列表时,说明第三方的消息接口,接收人字段是一个JSON数组 > 因为在OA内部消息接收人是人员id,推送给第三方系统,需要做一些人员转化,所以可以将接收人转化成登录名、姓名、编号去接收 * 自定义参数: > 值是一个固定的不变 ### 3、启用 ![启用](https://xug.cc/usr/uploads/2023/06/1006016302.png) ## 二、项目同事自行二开,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)、新建 ![](https://xug.cc/usr/uploads/2023/06/3799182609.png) #### (2)、注册 ![](https://xug.cc/usr/uploads/2023/06/415277826.png) #### (3)、启用 ![](https://xug.cc/usr/uploads/2023/06/2975359489.png) 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接口的逻辑 [Util_Message.java](https://xug.cc/usr/uploads/2023/06/697625684.java) Last modification:October 27, 2023 © Allow specification reprint Support Appreciate the author AliPayWeChat Like 如果觉得我的文章对你有用,请随意赞赏