如何实现在代码发送消息时使用消息模板原创
金蝶云社区-wbshcy
wbshcy
12人赞赏了该文章 3705次浏览 未经作者许可,禁止转载编辑于2022年07月05日 10:47:43

关键词:消息平台、消息模板

一、需求

单据(业务对象)审核时自动给申请人发送通知,通知内容经常可能会经常变化,所以希望实现通知内容的可配置性。比如办公用品领用申请单审核(手工点审核按钮)通过时需要给申请人发送领用通知。通知内容为:

 XXX,您好!你的办公用品领用申请单已经审批通过,请您三天内到软件园A栋401领取!

其中领取地点“软件园A栋401”经常会发生变化,所以需要实现消息内容的可配置化。

二、思路与方案

系统管理-消息平台-消息模板可配置消息内容,且方便维护,所以可在审核办公用品领用申请单发送通知时调用消息模板来生成通知内容。

三、实现过程

1.新增消息场景,消息场景需要绑定具体的业务对象,消息场景需要给消息模板选择使用的。

 

图片1.png

1

2. 配置消息模板。

 

图片2.png

2

 

3. 办公用品领用申请单表单插件构造 MessageInfo对象时指定实体标识、单据id、消息模板场景等。

@Override
public void afterDoOperation(AfterDoOperationEventArgs afterDoOperationEventArgs) {
// TODO Auto-generated method stub
super.afterDoOperation(afterDoOperationEventArgs);
if("audit".equals(afterDoOperationEventArgs.getOperateKey())) {
if(afterDoOperationEventArgs.getOperationResult().isSuccess()) {
List<Object> successPkIds=afterDoOperationEventArgs.getOperationResult().getSuccessPkIds();
for(Object pk:successPkIds) {
DynamicObject object=BusinessDataServiceHelper.loadSingle(pk, "kded_officesuppliesbill");
DynamicObject applier=object.getDynamicObject("kded_applier");
MessageInfo message = new MessageInfo();
ArrayList<Long> receivers = new ArrayList<Long>();
    receivers.add(applier.getLong("id"));
    message.setUserIds(receivers);//取领用申请人为消息接收人
    message.setSenderId(Long.parseLong(RequestContext.get().getUserId()));//当前登录用户为消息发送人
    message.setSendTime(new Date(System.currentTimeMillis()));
    message.setType(MessageInfo.TYPE_MESSAGE);//消息类型为通知
    message.setEntityNumber("kded_officesuppliesbill");
    message.setBizDataId(Long.valueOf(String.valueOf(pk)));
    //设置消息场景和设置消息模板二选一即可
    message.setTplScene("kded_officesuppliesbill_audit");//设置消息场景,消息内容会根据消息场景找对应的消息模板构造消息
   // message.setTemplateNumber("kded_officesuppliesbill_audit_message"); //设置消息模板编码
    Long msgId = MessageCenterServiceHelper.sendMessage(message);//发送消息
}
}  
} 
}


注意事项:如果是后台审核则不能直接在表单插件实现。

四、效果图

 

图片3.png

 图 3

五、开发环境版本

V4.0.0.14

、参考资料

【开发平台】指导手册

学习成长中心

赞 12