监控用户个人设置的变化,获取实体信息,可以注册插件的消息列表方法

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

有时候碰到用户更改自己的设置可能会带来问题,比如常见的,把自己的邮件中的Track设置改成了【All email messages】(当然前提是邮箱服务配置好了),这样的话自己的所有邮件都会被抓取到Dynamics 365中,可能就会涉及到隐私问题。

  

还有啊,比如把自己的偏好语言改了,这样获取到的部分信息会变,常见的就是选项集字段的值,会根据偏好语言返回对应文本,当然啦,没有翻译的话就是返回基础语言对应的文本。

 有时候需要监控下用户对自己个人设置的更改,首先得知道这个信息存在哪儿,是存在 User Settings这个实体,实体的逻辑名称是usersettings,架构名称是UserSettings,这个实体的主键不是usersettingsid,而是systemuserid,可以通过类似 https://luoyongdemo.crm5.dynamics.com/api/data/v9.1/EntityDefinitions?$filter=LogicalName eq 'usersettings' 来查看这个实体的信息,也可以在 usersettings EntityType 中查看。在线版本的 UserSettings Entity Reference 可以看到更多的信息。之前还有人问,标准实体的信息如何看,除了用Metadata Browser外,在线版本(仅仅包括Out-of-Box实体)可以在 About the Entity Reference 文档中查看,当然你的环境不一定包括这里提到的所有实体。如果你要通过Web API对这个实体进行查询的话,请使用类似这种:https://luoyongdemo.crm5.dynamics.com/api/data/v9.1/usersettingscollection?$select=systemuserid&$filter=incomingemailfilteringmethod eq 2 ,可以看到这个实体的Entity Set Path是usersettingscollection,而不是 usersettingses 。

知道存在哪儿后,如何监控?用Audit可以吗?答案是不可以,因为这个实体你在默认解决方案(Default Solution)中都找不到,无法设置其启用Audit(审核)功能。

那我用工作流(workflow)可以吗?也不可以,因为你都选择不到这个实体。

那我用插件(Plug-in)可以吗?答案是可以。用插件的话先看下这个实体支持哪些消息,关键是支持Update消息不。做过以前版本Dynamics 365/CRM的人知道,标准实体默认支持哪些消息是在SDK中的一个名称为 Message-entity support for plug-ins.xlsx 文件中的,但是自从Dynamics 365 V9.0版本开始已经不再提供像以前那样下载的SDK了。那怎么办呢?现在可以自己通过Excel自行获取了,方法在 Find Messages and entities eligible for plug-ins using the Common Data Service 中又详细的手把手教程(主要是通过请求类似 https://luoyongdemo.crm5.dynamics.com/api/data/v9.1/sdkmessages?$select=name&$filter=isprivate eq false and (name ne 'SetStateDynamicEntity' and name ne 'RemoveRelated' and name ne 'SetRelated' and name ne 'Execute') and sdkmessageid_sdkmessagefilter/any(s:s/iscustomprocessingstepallowed eq true and s/isvisible eq true)&$expand=sdkmessageid_sdkmessagefilter($select=primaryobjecttypecode;

$filter=iscustomprocessingstepallowed eq true and isvisible eq true)&$orderby=name 的URL来获取数据),我自己试了下可行的。这个有个好处,就是自己新增的消息(Action)也是可以拉取到的,可以方便的刷新。我拉取到的示例数据如下,但是看到usersettings实体只支持RetrieveMutliple消息注册插件,真的是这样的吗?其实不是的。

 通过插件注册工具,我们可以看到是支持在Update消息注册的,这个问题我已经反馈给了 docs.microsoft.com 了,希望很快得到纠正。

 但是我今天的博文不讲插件监控的方法,而要讲的是通过Power Automate来监控的方法,这个不用写代码,部署,启用,禁用等都方便啊。

打开 https://make.powerapps.com/ ,切换到对应的环境(Environment),点击左边的Flows导航项目,新建一个flow,选择 Aumated-from blank来新建。

 给Flow起个有意义的名字,触发器选择 Common Data Service (current environment) ,切记选择这个触发器,然后点击 Create按钮。

  

我这里设置如下,Filter Attributes我输入了uilanguageid,以免该flow在其他字段更改时候也触发,一个好习惯是更改步骤说明,方便后续维护。

 因为 usersettings 实体中用户信息有限,所以我还会查询下用户(systemuser)实体,获取更多信息,所以我添加一个Common Data Service(current environment)的 Get a record步骤:

 我这里的设置如下,Item Id字段的值就来自前面的步骤中的SytemUserId字段。

  

然后我这里利用Dynamics 365的邮件能力来发邮件(这个方法参考我前面的博文 Power Automate实用常见问题解答(FAQ) 的这个问题 6.能发送邮件并显示在D365中的Timeline吗? ,还有我之前的博文 Dynamics 365中使用工作流发邮件让其可以发往文本字段指定的邮箱 ,在Email实体的Create消息的Pre阶段注册一个插件 ),先创建一个Email Message实体记录如下,我这里用某个特定的Queue来作为发件人,这样比用某个具体用户好:

 

 

  

然后再使用Common Data Service (current environment) Connector 的 Perform an bound action 操作来发送出去。

 经过测试有效,收到的邮件类似如下:

原文地址:https://www.cnblogs.com/luoyong0201/p/Dynamics_365_Monitor_Personal_Options_Updates_Find_Messages_eligible_for_plugin.html