如何实现在消息中心,浏览器的新页签上打开外部链接的功能原创
金蝶云社区-吴锐雄
吴锐雄
5人赞赏了该文章 1,955次浏览 未经作者许可,禁止转载编辑于2023年02月02日 09:37:20
summary-icon摘要由AI智能服务提供

本文介绍了在金蝶云·苍穹平台上,由于消息中心不再支持直接在消息内容中包含超链接,因此采用了一种替代方案来实现从消息中心发送消息以跳转至第三方外部URL的功能。通过创建一个空白动态表单页面作为跳转中介,并在该页面上注册插件来实现打开外部链接并关闭当前页面的逻辑。同时,在发送消息时,将第三方链接作为参数传递给这个跳转页面。文中详细描述了方案的思路、实现过程、代码示例、效果图、开发环境版本、参考文档和附件说明。

关键词:消息中心

一、需求

苍穹的消息中心,目前已经进行了 超链接过滤。

之前的方式是:在MessageInfo对象里面设置了Content,Content的内容包含有a标签和href属性。

根据最新的苍穹文档,目前已经不支持这种方式做超链接了,取而代之的是,MessageInfo对象调用setContentUrl方法,设置超链接。

但是这种方式,只支持 苍穹内部链接,所以没有办法 跳转到第三方外部url。


二、思路与方案

1.新建一个空白动态表单,在进入这空白个页面时,打开外部链接,并且关闭当前页面。

打开外部链接、关闭当前页面的业务逻辑,需要用插件实现。


2.给消息中心发送消息,消息里面包含了一个 苍穹页面链接。

这个链接必须要包含 外部链接的参数。


三、实现过程

1.新增空白页面

进入开发平台,新增页面,选择空白页面

image.png


image.png

image.png


创建一个不需要页面建模的空白页面作为跳转页面,页面标识:kdec_msgcenter_jump

image.png


2.注册插件,实现打开第三方页面的业务逻辑

kdec_msgcenter_jump页面中,注册插件:

image.png

获取传递过来的参数,然后打开链接,关闭当前页面。

代码如下:

public class OpenNewTabPlugin extends AbstractFormPlugin {
    @Override
    public void afterBindData(EventObject e) {
        super.afterBindData(e);
        String rtUrl = getView().getFormShowParameter().getCustomParam("rtUrl");
        getView().openUrl(rtUrl);
        getView().close();
    }
}


3.在页面上添加按钮,用来触发 发送消息

新建一个页面kdec_wrx_form,在页面上用按钮来触发消息发送。

image.png




4.发送消息,传递给消息中心

点击第3步的按钮时,构造MessageInfo对象。获取文本框的输入内容,将这个内容设置为第三方链接参数。

最后调用MessageCenterServiceHelper发送消息。

代码如下:

    @Override
    public void click(EventObject evt) {
        super.click(evt);
        if (evt.getSource() instanceof Control) {
            switch (((Control) evt.getSource()).getKey()) {
                case "kdec_send_msg": {
                    // 把普通html内容,放入消息中
                    MessageInfo messageInfo = new MessageInfo();
                    LocaleString title = new LocaleString();
                    title.setLocaleValue_zh_CN("你好");
                    messageInfo.setMessageTitle(title);
                    LocaleString content = new LocaleString();
                    content.setLocaleValue_zh_CN("你好世界");
                    messageInfo.setMessageContent(content);
                    ArrayList<Long> ids = new ArrayList<Long>();
                    //获取当前登录用户id
                    ids.add(RequestContext.get().getCurrUserId());
                    messageInfo.setUserIds(ids);
                    //messageInfo.setType(MessageInfo.TYPE_MESSAGE);
                    messageInfo.setType("activity");
                    messageInfo.setTag("MSGTest");

                    // TODO: 如果添加了 ContentUrl,那么展开消息之后,会出现一个“快速处理”的超链,
                    //  点击超链会以消息中心菜单页签方式打开,仅支持打开苍穹的页签
                    String url = System.getProperty("domain.contextUrl");
                    // 跳转第三方页面的参数,从文本框中获取
                    String rtUrl = getView().getModel().getValue("kdec_textfield").toString();
                    // 打开人员列表
                    // messageInfo.setContentUrl(url+"/index.html?formId=bos_user&billFormId=bos_user&type=list");
                    // 打开动态表单,打开一个提供跳转业务逻辑的苍穹页面,rtUrl是跳转的目标页面
                    messageInfo.setContentUrl(url+"/index.html?formId=kdec_msgcenter_jump&rtUrl=" + rtUrl);
                    //发送消息
                    MessageCenterServiceHelper.sendMessage(messageInfo);
                }
                break;
            }
        }

}


四、效果图


image.png

image.png


苍穹页面打开的瞬间,会在浏览器打开一个新页签,然后关闭当前苍穹页面。

新页签就是第三方链接。

image.png

五、开发环境版本

image.png


六、参考文档

金蝶云·苍穹消息应用开发用手册V4.0

消息中心


七、附件

附件说明


跳转页面插件代码:OpenNewTabPlugin.java;发送消息插件代码:DemoTestPlugin.java。


元数据说明

元数据zip包:kdec_wrx_test-kdec_wrx_col_app-20220725111623.zip

业务云编码:kdec_wrx_test;应用编码:kdec_wrx_col_app;跳转页面:kdec_msgcenter_jump;按钮点击发送消息页面:kdec_wrx_form。


图标赞 5
5人点赞
还没有人点赞,快来当第一个点赞的人吧!
图标打赏
0人打赏
还没有人打赏,快来当第一个打赏的人吧!