Dynamics 365 POA表记录的产生
微软动态CRM专家罗勇 ,回复314或者20190311可方便获取本文,同时可以在第一间得到我发布的最新博文信息,follow me!我的网站是 www.luoyong.me 。
前面的博文 Dynamics 365 POA表记录的查询 讲了查看POA表的记录数,那这些记录怎么来的呢?我今天就根据文章 Excessive PrincipalObjectAccess Table Growth in CRM 4.0 from the Reparent – Cascade All Setting 来讲解下。
来源主要分为如下四个途径。
1. 记录更改Owner后和共享该的所有可能权限给该记录原来的Owner。这个行为会不会发生与一个系统管理配置项目有关,在【设置】>【管理】>【系统设置】中可以查看,默认是否的。如下图所示的【设置是否与原始负责人共享重新分派的记录】。
这样产生的记录的AccessRightsMask字段会有值(不会为0),但是InheritedAccessRightsMask字段值为0。我修改后实际做了一个分派的例子,分派后在POA表的确创建了一条记录。可以看到该记录的AccessRightsMask字段值为 852023,PrincipalTypeCode值为8,因为是共享给个人。ObjectTypeCode的值为被共享记录对应实体的ObjectTypeCode,ObjectId为被共享记录的Id,PrincipalId为给想给的对象的Id。
如果继续分派给我自己的话,还会增加一条POA记录,共享权限给分派前的记录的Owner。我在分派给别人的话,不会增加给我自己的共享记录了,应该是修改。POA表有如下的唯一索引。
ALTER TABLE [dbo].[PrincipalObjectAccess] ADD CONSTRAINT [UQ_PrincipalObjectAccess] UNIQUE NONCLUSTERED
(
[PrincipalId] ASC,
[ObjectId] ASC,
[ObjectTypeCode] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 80) ON [PRIMARY]
GO
界面上是可以通过点击【共享】按钮看到该记录得共享记录的,实例如下:
共享给的权限很大,所有权限。若被共享用户本来不能删除这个记录,但是通过这个共享给了他删除权限,他是可以删除的,所以谨慎使用该功能,在项目上我们一般不启用【设置是否与原始负责人共享重新分派的记录】这个选项,还好这个默认就是关闭的。
如果我把这条记录删了,这些共享记录在POA表中不会立即自动删除,是由每天运行的服务(Operation Code为14,名称为 Deletion Service)来删除的,请参考 More juicy details on Dynamics CRM 2011 Asynchronous Service’s maintenance jobs 。
2.直接共享。这个容易理解,这样产生的POA记录的AccessRightsMask字段会有值(不会为0),但是InheritedAccessRightsMask字段值为0。下面我做一个表来列出共享权限及其对应的AccessRightsMask值,但是我估计啊,这个值不一定对应对,别对这个表太当真。
共享权限 | AccessRightsMask字段的值 |
读 | 1 |
读&写 | 3 |
读&写&删除 | 65539 |
读&写&删除&追加 | 65559 |
读&写&删除&追加&分派 | 589847 |
读&写&删除&追加&分派&共享 | 851991 |
读&追加 | 21 |
读&共享 | 262145 |
读&写&分派 | 524291 |
3. 【行为类型】为【父】这种类型导致的共享,主要是因为【重定父级】这个选项的行为为【父】导致的。这里解释下,我这里有两个实体,一个是工单实体,一个是工单项目实体,假设我设置他们俩之间的【行为类型】为【父】。
现在有一条名称为【测试工单】的工单实体记录,记录的owner为我这个系统管理员。我用另外一个账号,新增一个工单项目记录和这个【测试工单】关联。保存后这样会产生一条POA记录,该POA记录的AccessRightsMask字段字段值为0,但是InheritedAccessRightsMask字段有值(不为0)。当然如果父记录的owner就是创建子记录的用户的话,这个POA记录不会产生。这种产生的共享记录点击【共享】按钮后在界面上看不到,但是在POA表中会存在记录。据我观察,如果重新分派后的owner和子记录的owner一样,那么POA记录表中子记录的AccessRightsMask字段字段值为0,且InheritedAccessRightsMask字段值为0。这种产生的共享记录点击【共享】按钮后在界面上看不到,但是在POA表中会存在记录。但是每天运行的系统作业(AsyncOperationType = 14)来定期运行来清理它(删除这条记录)。关于这个作业的临时修改运行时间请参考 Dynamics 365中的公告(Post)分析。所以要删除POA表记录,我认为一个方法就是,就是重新分派父记录,使其和子记录的owner一样,这样由【重定父级】产生的共享会被系统作业(AsyncOperationType = 14)运行后自动删除。当然,建立这种1:N父关系的那个字段的值如果清空,那么产生的POA记录也会被被系统作业(AsyncOperationType = 14)运行后自动删除。
如果要清除大量的由【父】这种行为类型的POA记录通过更改父记录Owner或者清空子记录和父记录做关联的字段值的话,耗时会比较就。这里介绍一种方法,可以执行类似如下的SQL,处理后这些记录会被系统作业(AsyncOperationType = 14)运行后自动删除。如果是Dynamics 365 Customer Engagement Online,可以开case来请求工程师帮忙处理。
update principalobjectaccess
set inheritedaccessrightsmask=0
where inheritedaccessrightsmask !=0 and accessrightsmask=0
特别提一下活动实体,默认情况下支持活动的实体和该所有的活动实体的【行为关系】为父,这样的父行为也会产生一条POA记录,POA记录的ObjectTypeCode为4200,AccessRightsMask字段字段值为0,但是InheritedAccessRightsMask字段有值(不为0)。该POA表对应的ObjectId是活动的Id,但是这里并不知道是哪种活动。当然啦,你可以拿这个ID用Web API查出来是那种活动,如下示例,这个返回的就是活动实体的逻辑名。
https://demo.luoyong.me/api/data/v9.0/activitypointers(94321554-6D44-E911-A81D-000D3A5129C5)?$select=activitytypecode
若是到数据库中查询,示例如下,返回的是实体的ObjectTypeCode:
select ActivityTypeCode from ActivityPointerBase where ActivityId='94321554-6D44-E911-A81D-000D3A5129C5'
4. 间接共享。就是关系行为中的【重定父级】和【共享】设置【全部级联】、【可用项的级联】、【用户负责项的级联】就很可能产生POA记录。比如【共享】设置为级联,共享了父记录,会产生POA记录自动共享子记录。如果【共享】设置为级联,强烈建议【取消共享】也设置级联,这样取消共享父记录的共享后,其子记录相关的共享记录会被系统作业(AsyncOperationType = 14)运行后自动删除。
总结一下,POA记录表中子记录的AccessRightsMask字段字段值为0的记录点击【共享】按钮看不到,一个用户/团队对一条记录最多产生一条POA记录。
你会发现有些共享是不需要的,特别是后两种自动产生的共享,如果用户本身就对这些被共享的记录有权限,就没有必要共享了,可以对POA表做一些清理,清理POA表可以参考:How to control PrincipalObjectAccess table growth in Microsoft Dynamics CRM 2011
Dynamics 365 POA表记录的产生的更多相关文章
- Dynamics 365 POA表记录的查询
微软动态CRM专家罗勇 ,回复313或者20190311可方便获取本文,同时可以在第一间得到我发布的最新博文信息,follow me!我的网站是 www.luoyong.me . PrincipalO ...
- Dynamics 365 CE中AsyncOperationBase表记录太多,影响系统性能怎么办?
微软动态CRM专家罗勇 ,回复311或者20190311可方便获取本文,同时可以在第一间得到我发布的最新博文信息,follow me!我的网站是 www.luoyong.me . 本文主要是根据微软官 ...
- Dynamics 365 CE命令栏按钮点击后刷新表单页面方法
微软动态CRM专家罗勇 ,回复326或者20190428可方便获取本文,同时可以在第一间得到我发布的最新博文信息,follow me! Dynamics 365 Customer Engagement ...
- 无依赖简单易用的Dynamics 365实体记录数计数器并能计算出FetchXml返回的记录数
本人微信公众号:微软动态CRM专家罗勇 ,回复278或者20180812可方便获取本文,同时可以在第一间得到我发布的最新博文信息,follow me!我的网站是 www.luoyong.me . 我们 ...
- 自定义工作流活动报错:您无法登陆系统。原因可能是您的用户记录或您所属的业务部门在Microsoft Dynamics 365中已被禁用。
本人微信和易信公众号: 微软动态CRM专家罗勇 ,回复265或者20170926可方便获取本文,同时可以在第一间得到我发布的最新的博文信息,follow me!我的网站是 www.luoyong.me ...
- Dynamics 365工作流报错:您无法登陆系统。原因可能是您的用户记录或您所属的业务部门在Microsoft Dynamics 365中已被禁用。
本人微信和易信公众号: 微软动态CRM专家罗勇 ,回复265或者20170926可方便获取本文,同时可以在第一间得到我发布的最新的博文信息,follow me!我的网站是 www.luoyong.me ...
- Dynamics 365客户端编程示例:获取当前用户的信息,表单级通知/提示,表单OnLoad事件执行代码
我是微软Dynamics 365 & Power Platform方面的工程师罗勇,也是2015年7月到2018年6月连续三年Dynamics CRM/Business Solutions方面 ...
- Dynamics 365利用HTML页面创建实体记录并同步上传附件
我是微软Dynamcis 365 & Power Platform方面的工程师罗勇,也是2015年7月到2018年6月连续三年Dynamics CRM/Business Solutions方面 ...
- Dynamics 365中部分账号使用系统明显缓慢怎么办?先这么干!
摘要: 本人微信和易信公众号: 微软动态CRM专家罗勇 ,回复263或者20170828可方便获取本文,同时可以在第一间得到我发布的最新的博文信息,follow me!我的网站是 www.luoyon ...
随机推荐
- async/await 的理解
1.如果一个方法标记了 async 关键字,那么这个方法被调用时就是异步执行: 2.利用Task运行一个任务,这个任务里的函数也是异步执行: 3.如果一个任务前被标记await,那么等待这个任务执行完 ...
- 调研一类软件的发展演变( 1000-2000 words, in Chinese)
WARING:大量个人观点,可靠性突出一个没有. 随着时代的发展,科技的用途也在发生着改变.最初,计算机是高端科学家用来计算导弹路线.模拟核弹爆炸用的,而现在计算机更多是平凡百姓家的一台娱乐设备.当今 ...
- kali linux学习笔记(四) : 网络端口大全介绍
端口大全介绍 2端口:管理实用程序 3端口:压缩进程 5端口:远程作业登录 7端口:回显 9端口:丢弃 11端口:在线用户 13端口:时间 17端口:每日引用 18端口:消息发送协议 19端口:字符发 ...
- Java提高篇(一):区分引用变量与对象
我们有代码: New A=new New(); 下面是这个New的类: class New { public New() { System.out.println("这是New类当中的构造方 ...
- 【RL-TCPnet网络教程】第3章 初学RL-TCPnet的准备工作及其快速上手
第3章 初学RL-TCPnet的准备工作及其快速上手 俗话说万事开头难,学习一门新的知识,难的往往不是知识本身,而是如何快速上手,需要什么资料和开发环境.一旦上手后,深入的学习就相对容易些 ...
- Kali学习笔记44:SQLMAP
SQLMAP漏洞检测技术: 1.基于布尔的盲注检测:' and 1=1 'and 1=2等 2.基于时间的盲注检测:' and (select * from (select(sleep(20))) ...
- [Swift]LeetCode778. 水位上升的泳池中游泳 | Swim in Rising Water
On an N x N grid, each square grid[i][j]represents the elevation at that point (i,j). Now rain start ...
- Python高级特性(一)
一.切片 L = ['Michael', 'Sarah', 'Tracy', 'Bob', 'Jack']取出前三个元素 , 笨方法就是通过下标一个一个获取 [L[0], L[1], L[2]]Pyt ...
- 『骑士精神 IDA*』
骑士精神(SCOI2005) Description 在一个5×5的棋盘上有12个白色的骑士和12个黑色的骑士, 且有一个空位.在任何时候一个骑士都能按照骑 士的走法(它可以走到和它横坐标相差为1,纵 ...
- 使用ML.NET + Azure DevOps + Azure Container Instances打造机器学习生产化
介绍 Azure DevOps,以前称为Visual Studio Team Services(VSTS),可帮助个人和组织更快地规划,协作和发布产品.其中一项值得注意的服务是Azure Pipeli ...