如何扩展消息中心中的通知列表,使其超链接到单据上原创
金蝶云社区-范老师加油
范老师加油
1人赞赏了该文章 1,304次浏览 未经作者许可,禁止转载编辑于2022年12月28日 10:09:16

关键词:消息中心,超链接,列表扩展


一、需求

         消息中心中的通知列表,经常有单据的业务消息发送过来,而原有的都是需要展开点开详情之后才能找到对应的单据内容,而且有些模板没有配置跳转链接的话,需要手动搜索,比较麻烦。

        需求是在列表上增加一列,使其可以通过链接快速跳转到单据详情页。

image.png

二、思路与方案

     这个需求也是一个列表超链接的典型案例,只要我们在列表超链接跳转做二开就可以了

三、实现过程


1   构造测试消息

首先我们发送一个测试消息,发送消息可以看下整个案例:

如何实现在代码发送消息时使用消息模板


这里需要说明一点:发送消息时需要把单据实体编码,和单据的pkid发送过来,否则跳转的话就会找不到对象。


2    扩展消息中心


第二步我们就要扩展wf_msg_message页面,在列表页面添加业务单据ID字段,并把超链勾上。

image.png


3  注册插件

在列表上注册插件,附上插件代码:

public class MessageListLinkPlugin extends AbstractListPlugin {

	
	 @Override
	    public void billListHyperLinkClick(HyperLinkClickArgs args) {
	         
	        if ("bizdataid".equals(args.getFieldName()) && args.getHyperLinkClickEvent() instanceof BillListHyperLinkClickEvent) {
	                // 原来的超链接点击之后会打开单据详情,把它取消,开发者自己做打开逻辑
	                args.setCancel(true);

	                BillListHyperLinkClickEvent evt = (BillListHyperLinkClickEvent)args.getHyperLinkClickEvent();
	  	      
		        ListSelectedRow currentRow = evt.getCurrentRow();
		        Long msgId=(Long) currentRow.getPrimaryKeyValue();
		        DynamicObject object=BusinessDataServiceHelper.loadSingle(msgId, "wf_msg_message");
		        
		        BillShowParameter parameter= new BillShowParameter();
		        parameter.getOpenStyle().setShowType(ShowType.Modal);
		        parameter.setFormId((String) object.get("entitynumber"));
		        parameter.setPkId( object.get("bizdataid"));
		        this.getView().showForm(parameter);
	        }

	    }

}

这里也说下关于超链接有两种实现方式:

一种是上面的这种,另外一种就是通过监听器来实现的,下面的这种

这两种的区别是,上面的可以取消后续系统自带的跳转,

而下面的则不能取消,(会跳转两次,一次跳转到消息中心的页面,一次是我们想要的单据页面)


public class MessageListLinkPlugin extends AbstractListPlugin implements  HyperLinkClickListener{
	@Override
	public void registerListener(EventObject e) {
	    super.registerListener(e);
	    BillList billList = getControl("billlistap");
	    billList.addHyperClickListener(this);
	}
	
	 
	@Override
	public void hyperLinkClick(HyperLinkClickEvent args) {
		
	    if(args instanceof BillListHyperLinkClickEvent) {

	        BillListHyperLinkClickEvent evt = (BillListHyperLinkClickEvent)args;
	      
	        ListSelectedRow currentRow = evt.getCurrentRow();
	        Long msgId=(Long) currentRow.getPrimaryKeyValue();
	        DynamicObject object=BusinessDataServiceHelper.loadSingle(msgId, "wf_msg_message");
	        //获取单据体点击行,数据
	        Object source = args.getSource();
	        
	        BillShowParameter parameter= new BillShowParameter();
	        parameter.getOpenStyle().setShowType(ShowType.Modal);
	        parameter.setFormId((String) object.get("entitynumber"));
	        parameter.setPkId( object.get("bizdataid"));
	        this.getView().showForm(parameter);
	    }
	}
}


四、效果图


点击前:


image.png


点击后:


image.png




五、开发环境版本

COSMICV5.0.003.0

六、参考资料

【开发平台】指导手册

学习成长中心


赞 1