Dynamics 365 POA表记录的查询
微软动态CRM专家罗勇 ,回复313或者20190311可方便获取本文,同时可以在第一间得到我发布的最新博文信息,follow me!我的网站是 www.luoyong.me 。
PrincipalObjectAccess表是用于共享记录,这个表如果记录太多,会导致系统整体性能下降,最好能控制下记录数量。
如果部署的是Dynamics 365 Customer Engagement On-Premise版本,直接上数据库查询可以,执行如下T-SQL即可。
select count(*) from PrincipalObjectAccess with (nolock)
如果估计返回记录不超过5000行记录,也可以直接用Web API来查看,带上$count=true即可,实例代码如下:
https://demo.luoyong.me/api/data/v9.0/principalobjectaccessset?$select=principalobjectaccessid&$count=true https://demo.luoyong.me/api/data/v9.0/principalobjectaccessset?$select=principalobjectaccessid&$filter=objecttypecode eq 'template'&$count=true
执行效果类似如下,如果返回的 @odata.count 元素值等于5000,请不要相信这是准确数据,请用后面的方法查看。

如果前面返回的记录数为5000,但是估计在5万条下,也可以执行使用类似如下的URL进行查询,当然如果超过5万行会报错。
https://demo.luoyong.me/api/data/v8.2/principalobjectaccessset?fetchXml=%3Cfetch%20aggregate=%27true%27%20version=%271.0%27%20mapping=%27logical%27%20distinct=%27false%27%3E%0A%C2%A0%3Centity%20name=%27principalobjectaccess%27%3E%0A%C2%A0%C2%A0%3Cattribute%20aggregate=%27count%27%20alias=%27recordscount%27%20name=%27principalobjectaccessid%27%20/%3E%0A%C2%A0%3C/entity%3E%0A%3C/fetch%3E%0A%20%20%20%20
这其实是用Web API执行如下的聚合FetchXml:
<fetch aggregate='true' version='1.0' mapping='logical' distinct='false'>
<entity name='principalobjectaccess'>
<attribute aggregate='count' alias='recordscount' name='principalobjectaccessid' />
</entity>
</fetch>
如果超过5万行的话怎么计数?当然我不会阻拦你自己写程序来做,但是我已经有工具了,建议你不要重复造轮子。参考我的博文:无依赖简单易用的Dynamics 365实体记录数计数器并能计算出FetchXml返回的记录数 。直接执行如下的FetchXml即可:
<fetch version='1.0' output-format='xml-platform' mapping='logical' distinct='false'>
<entity name='principalobjectaccess'>
<attribute name='principalobjectaccessid' />
</entity>
</fetch>
也可以对这个实体做筛选,类似如下的FetchXml:
<fetch version='1.0' mapping='logical' distinct='false'>
<entity name='principalobjectaccess'>
<attribute name='principalobjectaccessid' />
<filter type='and'>
<condition attribute='objecttypecode' operator='eq' value='2010' />
</filter>
</entity>
</fetch>
执行效果如下图所示:

你可能会有疑问,怎么看一个实体的ObjectTypeCode的值,根据实体的逻辑名称来查看实体的ObjectTypeCode用类似如下的URL:
https://demo.luoyong.me/api/data/v9.0/EntityDefinitions(LogicalName='account')?$select=EntitySetName,ObjectTypeCode
你可能还会问,如果根据ObjectTypeCode来看是哪个实体,用如下的URL即可:
https://demo.luoyong.me/api/data/v9.0/EntityDefinitions?$select=EntitySetName,LogicalName&$filter=ObjectTypeCode eq 2010
当然也可以将记录导出来分析,下面是一个示例,将数据生成CSV文件,然后用Excel或者导入到数据库中分析,数据分页查询请参考:Page large result sets with QueryExpression 。
private static void GetAllPOA(OrganizationServiceProxy orgSvc)
{
string outPutFileName = ConfigurationManager.AppSettings["outPutFileName"];
if (!File.Exists(outPutFileName))
{
string clientHeader = $"principalobjectaccessid,principalid,objecttypecode,objectid,principaltypecode,inheritedaccessrightsmask,changeon,accessrightsmask{Environment.NewLine}";
File.WriteAllText(outPutFileName, clientHeader);
}
int queryCount = ;
int pageNumber = ;
QueryExpression pagequery = new QueryExpression("principalobjectaccess");
pagequery.NoLock = true;
pagequery.AddOrder("changedon", OrderType.Descending);
pagequery.ColumnSet = new ColumnSet("principalobjectaccessid", "principalid", "objecttypecode", "objectid", "principaltypecode", "inheritedaccessrightsmask", "accessrightsmask", "changedon");
pagequery.PageInfo = new PagingInfo();
pagequery.PageInfo.Count = queryCount;
pagequery.PageInfo.PageNumber = pageNumber;
pagequery.PageInfo.PagingCookie = null; while (true)
{
EntityCollection results = orgSvc.RetrieveMultiple(pagequery);
if (results.Entities != null)
{
foreach (var entity in results.Entities)
{
File.AppendAllText(outPutFileName, $"{entity.GetAttributeValue<Guid>("principalobjectaccessid")}," +
$"{entity.GetAttributeValue<Guid>("principalid")}," +
$"{entity.GetAttributeValue<string>("objecttypecode")}," +
$"{entity.GetAttributeValue<Guid>("objectid")}," +
$"{entity.GetAttributeValue<string>("principaltypecode")}," +
$"{entity.GetAttributeValue<int>("inheritedaccessrightsmask")}," +
$"{entity.GetAttributeValue<DateTime>("changedon").ToLocalTime().ToString("yyyy-MM-dd HH:mm:ss.fff")}," +
$"{entity.GetAttributeValue<int>("accessrightsmask")}{Environment.NewLine}");
}
}
if (results.MoreRecords)
{
pagequery.PageInfo.PageNumber++;
pagequery.PageInfo.PagingCookie = results.PagingCookie;
}
else
{
break;
}
}
}
Dynamics 365 POA表记录的查询的更多相关文章
- Dynamics 365 POA表记录的产生
微软动态CRM专家罗勇 ,回复314或者20190311可方便获取本文,同时可以在第一间得到我发布的最新博文信息,follow me!我的网站是 www.luoyong.me . 前面的博文 Dyna ...
- MyBatis 用户表记录数查询
搭建MyBatis开发环境,实现用户表记录数查询 1.在MyEclipse中创建工程,导入MyBatis的jar包
- MySQL(多表的表记录的查询)
一.外键约束 1.创建外键 --- 每一个班主任会对应多个学生 , 而每个学生只能对应一个班主任 ----主表 CREATE TABLE ClassCharger( id TINYINT PRIMAR ...
- laravel利用subquery使左连接查询右表数据唯一查询
如:表a,连接表b,b中有多条符合查询的记录 1.建立需要的子查询 $sub = DB::table('b')->select(['aid'])->selectRaw('max(id) a ...
- 三十一.MySQL存储引擎 、 数据导入导出 管理表记录 匹配条件
1.MySQL存储引擎的配置 查看服务支持的存储引擎 查看默认存储类型 更改表的存储引擎 设置数据库服务默认使用的存储引擎 1.1 查看存储引擎信息 mysql> SHOW ENGINES\G ...
- Database基础(三):SQL数据导入/导出、 操作表记录、查询及匹配条件
一.SQL数据导入/导出 目标: 使用SQL语句完成下列导出.导入操作: 将/etc/passwd文件导入userdb库userlist表并给每条记录加编号 将userdb库userlist表中UID ...
- Dynamics 365 CE中AsyncOperationBase表记录太多,影响系统性能怎么办?
微软动态CRM专家罗勇 ,回复311或者20190311可方便获取本文,同时可以在第一间得到我发布的最新博文信息,follow me!我的网站是 www.luoyong.me . 本文主要是根据微软官 ...
- 无依赖简单易用的Dynamics 365实体记录数计数器并能计算出FetchXml返回的记录数
本人微信公众号:微软动态CRM专家罗勇 ,回复278或者20180812可方便获取本文,同时可以在第一间得到我发布的最新博文信息,follow me!我的网站是 www.luoyong.me . 我们 ...
- Dynamics 365 Web Api之基于single-valued navigation property的filter查询
本篇要讲的是dynamics 新版本中web api的一个改进功能,虽然改进的很有限,但至少是改进了. 举个例子,我们现在知道联系人的名字vic,我们想找出客户记录中主要联系人名字为vic的所有客户, ...
随机推荐
- 酒店管理系统ER图
- [Swift]LeetCode99. 恢复二叉搜索树 | Recover Binary Search Tree
Two elements of a binary search tree (BST) are swapped by mistake. Recover the tree without changing ...
- [Swift]LeetCode485. 最大连续1的个数 | Max Consecutive Ones
Given a binary array, find the maximum number of consecutive 1s in this array. Example 1: Input: [1, ...
- Java高级特性--自定义一个StringBuilder的类
案例讲解--自定义一个StringBuilder的类 一:案例设计介绍 自义一个M定yStringBuilder来实现StringBuilder的功能 二:案例设计 实现append()方法追加字符串 ...
- iOS学习——核心动画
iOS学习——核心动画 1.什么是核心动画 Core Animation(核心动画)是一组功能强大.效果华丽的动画API,无论在iOS系统或者在你开发的App中,都有大量应用.核心动画所在的位置如下图 ...
- webstorm 支持vue element-ui 语法高亮属性自动补全
如果webstorm中 提示 Unknown html tag el-*** 说明没有加载 node_modules 下的 element-ui 解决办法就是: 在webstorm 打开的状态下 第一 ...
- IdentityServer4实战 - 谈谈 JWT 的安全策略
一.前言 众所周知,IdentityServer4 默认支持两种类型的 Token,一种是 Reference Token,一种是 JWT Token .前者的特点是 Token 的有效与否是由 To ...
- JAVA集合类兄妹List和Set
List 接口及其实现类 有序集合,集合中每个元素都有其对应的顺序索引,类似数组,索引也是从 0 开始,可以根据元素的索引,来访问元素. List 集合允许添加相同的元素,因为它是通过下标来取值的,不 ...
- 大数据技术之_19_Spark学习_01_Spark 基础解析 + Spark 概述 + Spark 集群安装 + 执行 Spark 程序
第1章 Spark 概述1.1 什么是 Spark1.2 Spark 特点1.3 Spark 的用户和用途第2章 Spark 集群安装2.1 集群角色2.2 机器准备2.3 下载 Spark 安装包2 ...
- [十八]JavaIO之FileReader 和 FileWriter
简介 FileReader FileWriter 都是提供操作文件的便捷类 这两个类的实现非常的简单 原理 回忆下之前的InputStreamReader和OutputStreamWriter Inp ...