天天看点

Dynamics 365推送Model-driven app内通知功能介绍

我是微软Dynamics 365 & Power Platform方面的工程师/顾问罗勇,也是2015年7月到2018年6月连续三年Dynamics CRM/Business Solutions方面的微软最有价值专家(Microsoft MVP),欢迎关注我的微信公众号 MSFTDynamics365erLuoYong ,回复461或者20211228可方便获取本文,同时可以在第一间得到我发布的最新博文信息,follow me!

以前做项目的时候很希望有一个功能,进入Dynamics 365后发送一些通知给用户,比如通知用户某些Case快到期了需要尽快处理,以前或许只能通过不是很好的曲线方式,比如每个Model-driven App都可以设置一个Welcome page,这是个HTML Web资源,可以用来展示想展示的内容,但是这个Welcome page用户第一次看到后可以选中以后不再展示,这样下次登录就看不到了。

Dynamics 365推送Model-driven app内通知功能介绍

最初写作本文时候有个Preview Feature出来了,就是以前一直想要的通知功能,官方的介绍文档见 ​​Send in-app notifications within model-driven apps (preview)​​ ,注意该功能不一定所有区域可用,我写作本文时候包括中国大陆版本也是可以使用的,而且Preveiw Feature不是为生产准备的,一般不应用于生产环境。

2022年6月9日补充,该Feature已经在2022年5月份GA了,可以放心使用了。

首先需要为你想要展示应用内通知(in-app notification)的Model-driven App启用这个功能,这个需要知道App的唯一名称,可以通过在App Designer中打开这个app就可以看到,比如我这个app的唯一名称是 Customerservicehub,

Dynamics 365推送Model-driven app内通知功能介绍

还可以通过将Model-driven app添加到解决方案中,Name列显示的值便是app的唯一名称。

Dynamics 365推送Model-driven app内通知功能介绍

然后我们进入该App的任何一个页面,按F12打开开发者工具在Console这个Tab运行类似如下的代码,运行结果显示Promise不要紧,可以看Network该请求的结果,如果请求完成返回 204就成功。

fetch(window.origin + "/api/data/v9.1/SaveSettingValue()",{
 method: "POST", 
   headers: {'Content-Type': 'application/json'},
   body: JSON.stringify({AppUniqueName: "Customerservicehub", SettingName:"AllowNotificationsEarlyAccess", Value: "true"})
   });      
Dynamics 365推送Model-driven app内通知功能介绍

强制刷新下页面会看到右上角多了一个铃铛一样的图标,这个就是我们需要的通知功能启用了,点击下,目前显示没有通知。

Dynamics 365推送Model-driven app内通知功能介绍

GA后启用应用内通知更简单了,我这里摘抄官方文档的方法如下:

  1. Sign in to Power Apps.
  2. Open the solution that contains the model-driven app.
  3. Select the model-driven app and clickEdit split menu to open using the modern app designer
  4. OpenSettings and switch to Upcoming
  5. Enable "In-app notifications"
    Dynamics 365推送Model-driven app内通知功能介绍
  6. ClickSave to save the settings change
  7. ClickPublish on the model-driven app

在讲如何创建通知之前我们先讲普通用户如何才能接收通知,这里我就不讲普通用户如何才能创建通知了,一般我们用高权限账户来创建,根据官方文档,需要如下这些权限,这三个实体都在角色权限设置的【自定义实体】这个tab中。

实体逻辑名 英文显示名 简体中文显示名 最低权限
appnotification Notification 通知 个人级别读
settingdefinition Setting Definition 模型驱动应用用户设置

创建

追加

appusersetting Model-Driven App User Setting 设置定义

追加到

我这里先讲使用前端代码创建的方法,示例如下,各个参数的含义和默认值我就不讲解了,请参考官方文档:

var systemuserid = "eb8a38b6-8a2a-ec11-b6e6-000d3a806b15";
var notificationRecord = 
{
    "title": "过年了,请赶紧处理完手里的Case",
    "body": "亲,2022年就要来临,您手里还有未处理完的Case,请抓紧时间处理,预祝新年快乐!",
    "[email protected]": "/systemusers(" + systemuserid + ")",
    "data": JSON.stringify({
   "actions": [
    {
        "title": "查看案例",
        "data": {
    "url": "?pagetype=entitylist&etn=incident&viewid=00000000-0000-0000-00aa-000010001028&viewType=1039"
    }   
    }
   ]
  })
}
Xrm.WebApi.createRecord("appnotification", notificationRecord).
  then(
      function success(result) {
          console.log(`通知创建成功,ID=${result.id}`);
      },
      function (error) {
          console.log(error.message);
      }
  );      

看到的效果如下图,会自动展开一阵子,过一会儿会收起来,点击象征通知的铃铛图标又可以看到这个通知。点击通知右上角的关闭图标可以清除这条消息,点击【Dismiss all】可以清除所有的消息,我在国际版本上测试,清除后就不显示了,但是记录并未从appnotification中删除,但是在中国大陆版本上,清除后过会儿或者重新登录还是会显示。如果和我描述的不同,请以自己测试为准。

Dynamics 365推送Model-driven app内通知功能介绍

既然通过前端可以创建,那么通过Cloud flow也开始可以创建的。我这里用个手工触发的Cloud flow演示下。在创建通知时候发现两个同名的通知,选哪个?选前面哪个,如果记不住也没有关系,两个都尝试下,如果显示的列是通知相关的就八九不离十了。

Dynamics 365推送Model-driven app内通知功能介绍

当然更加靠谱的是查看这个步骤的代码,点击右上角的更多符号,选择【Peek code】

Dynamics 365推送Model-driven app内通知功能介绍

如果entityName是 appnotifications 就说明选对了。

Dynamics 365推送Model-driven app内通知功能介绍

我这个创建通知的步骤设置如下:

注意如果Expiry (seconds)字段设置了值的话,创建消息经过这个指定的秒数之后这个通知记录会自动删除。

Dynamics 365推送Model-driven app内通知功能介绍

展示的效果如下图:

Dynamics 365推送Model-driven app内通知功能介绍

我就不演示通过组织服务来创建通知了,应该也是可以。最后,正如官方文档指出的那样,消息会推送给这个通知记录的owner,别人看不到。如果要推送给一组人呢?目前没有好的办法,就是为每个要得到这个通知的用户创建一条通知,每条通知的负责人就是通知的推送对象。

值得一体的是,通知的标题和正文都支持markdown:

Text Style Markdown
Bold

​**Bold**​

Italic

​_Italic_​

Bullet list

​- Item 1\r- Item 2\r- Item 3​

Numbered list

​1. Green\r2. Orange\r3. Blue​

继续阅读