微软动态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表记录的查询的更多相关文章

  1. Dynamics 365 POA表记录的产生

    微软动态CRM专家罗勇 ,回复314或者20190311可方便获取本文,同时可以在第一间得到我发布的最新博文信息,follow me!我的网站是 www.luoyong.me . 前面的博文 Dyna ...

  2. MyBatis 用户表记录数查询

    搭建MyBatis开发环境,实现用户表记录数查询 1.在MyEclipse中创建工程,导入MyBatis的jar包

  3. MySQL(多表的表记录的查询)

    一.外键约束 1.创建外键 --- 每一个班主任会对应多个学生 , 而每个学生只能对应一个班主任 ----主表 CREATE TABLE ClassCharger( id TINYINT PRIMAR ...

  4. laravel利用subquery使左连接查询右表数据唯一查询

    如:表a,连接表b,b中有多条符合查询的记录 1.建立需要的子查询 $sub = DB::table('b')->select(['aid'])->selectRaw('max(id) a ...

  5. 三十一.MySQL存储引擎 、 数据导入导出 管理表记录 匹配条件

    1.MySQL存储引擎的配置 查看服务支持的存储引擎 查看默认存储类型 更改表的存储引擎 设置数据库服务默认使用的存储引擎 1.1 查看存储引擎信息 mysql> SHOW ENGINES\G ...

  6. Database基础(三):SQL数据导入/导出、 操作表记录、查询及匹配条件

    一.SQL数据导入/导出 目标: 使用SQL语句完成下列导出.导入操作: 将/etc/passwd文件导入userdb库userlist表并给每条记录加编号 将userdb库userlist表中UID ...

  7. Dynamics 365 CE中AsyncOperationBase表记录太多,影响系统性能怎么办?

    微软动态CRM专家罗勇 ,回复311或者20190311可方便获取本文,同时可以在第一间得到我发布的最新博文信息,follow me!我的网站是 www.luoyong.me . 本文主要是根据微软官 ...

  8. 无依赖简单易用的Dynamics 365实体记录数计数器并能计算出FetchXml返回的记录数

    本人微信公众号:微软动态CRM专家罗勇 ,回复278或者20180812可方便获取本文,同时可以在第一间得到我发布的最新博文信息,follow me!我的网站是 www.luoyong.me . 我们 ...

  9. Dynamics 365 Web Api之基于single-valued navigation property的filter查询

    本篇要讲的是dynamics 新版本中web api的一个改进功能,虽然改进的很有限,但至少是改进了. 举个例子,我们现在知道联系人的名字vic,我们想找出客户记录中主要联系人名字为vic的所有客户, ...

随机推荐

  1. 使用cAdvisor+Influxdb+Grafana监控系统

      今天准备开始研究研究当前非常流行的Grafana+Influxdb监控系统,两者都是非常轻量级的应用但是功能却异常强大,可以说Grafana在作图显示方面真的毫不逊色与Cacti. 组件介绍 cA ...

  2. ASP.NET Core 2.1对GDPR的支持

    欧盟的<通用数据保护条例>(General Data Protection Regulation,以下简称 GDPR)已经于 2018 年 5 月 25 日正式施行.GDPR 涵盖了包括数 ...

  3. 写书好累 <HTTP抓包实战>终于出版

    我的新书<HTTP抓包实战>终于开始在京东销售了.内容是关于HTTP包,Fiddler抓包,JMeter发包,适合任何IT工程师阅读.我将自己十年所学的知识,融会贯通总结为一本书.阅读后肯 ...

  4. JavaScript 实现textarea限制输入字数, 输入框字数实时统计更新,输入框实时字数计算移动端bug解决

    textarea称文本域,又称文本区,即有滚动条的多行文本输入控件,在网页的提交表单中经常用到.与单行文本框text控件不同,它不能通过maxlength属性来限制字数,为此必须寻求其他方法来加以限制 ...

  5. 在React Native中,使用fetch网络请求 实现get 和 post

    //在React Native中,使用fetch实现网络请求 /* fetch 是一个封装程度更高的网络API, 使用了Promise * Promise 是异步编程的一种解决方案 * Promise ...

  6. [Swift]LeetCode179. 最大数 | Largest Number

    Given a list of non negative integers, arrange them such that they form the largest number. Example ...

  7. [Swift]LeetCode770. 基本计算器 IV | Basic Calculator IV

    Given an expression such as expression = "e + 8 - a + 5" and an evaluation map such as {&q ...

  8. [Swift]LeetCode940. 不同的子序列 II | Distinct Subsequences II

    Given a string S, count the number of distinct, non-empty subsequences of S . Since the result may b ...

  9. Android-线程池下载多个图片并保存,如果本地有该图,则不下载,直接展示到view

    做了个工具方法,用来下载图片,如果本地有这个图,则不下载,直接展示到view setHP()方法可以多次使用,因为使用了线程池,所以是个异步操作,如果使用的多,建议根据需要增加线程池的线程数量 看代码 ...

  10. AspNetCore Mvc 使用 PartialView

    控制器: public IActionResult queryMongoDb(string dbname) { List<MongoDbModel> mdList = new List&l ...