如何识别非人类用户?
How to recognize non-human users?
列出系统中的所有用户,我注意到其中一些是系统用户并且没有例如工作时间。目前,我只是列出它们并从我的循环中排除我这是一种 Q&D 方法,我更喜欢正确地做。
我没有在 systemuser 实体上找到任何具体信息,这些信息可以告诉我某个人是否是真实的个人资料(即在 Office 365 门户中创建)或默认情况下为我的 MS 提供的一个。
Q&D代码如下
QueryExpression userQuery = new QueryExpression { EntityName = "systemuser", ... };
IEnumerable<Entity> users = service.RetrieveMultiple(userQuery).Entities;
IEnumerable<String> automatics = new[] { "INTEGRATION", "Support User", "SYSTEM" };
foreach (Entity user in users.Where(element
=> !automatics.Contains(element.GetAttributeValue<String>("fullname")))) { ... }
第二个最佳解决方案,如果没有办法确定谁在自动列表上以及谁是真正的家伙,那就是制作一份详尽的例外列表。我的 google-fu 再一次让我失望,因为我没有在实体 systemuser.
的自动创建实例的完整列表中找到任何文档
一种方法是检查 CreatedBy
字段;对于用户 SYSTEM
和 INTEGRATION
,这是 NULL
。对于 CRM 管理员用户,此字段也是 NULL
,因此如果管理员用户正在被人类主动使用,您应考虑将其排除在外。
FilterExpression humanFilter = new FilterExpression();
humanFilter.AddCondition(new ConditionExpression("createdby", ConditionOperator.NotNull));
if (retrieveAdminUser)
{
humanFilter.FilterOperator = LogicalOperator.Or;
humanFilter.AddCondition(
new ConditionExpression("domainname", ConditionOperator.Equal, "admin@crm"));
}
userQuery.Criteria.AddFilter(humanFilter);
列出系统中的所有用户,我注意到其中一些是系统用户并且没有例如工作时间。目前,我只是列出它们并从我的循环中排除我这是一种 Q&D 方法,我更喜欢正确地做。
我没有在 systemuser 实体上找到任何具体信息,这些信息可以告诉我某个人是否是真实的个人资料(即在 Office 365 门户中创建)或默认情况下为我的 MS 提供的一个。
Q&D代码如下
QueryExpression userQuery = new QueryExpression { EntityName = "systemuser", ... };
IEnumerable<Entity> users = service.RetrieveMultiple(userQuery).Entities;
IEnumerable<String> automatics = new[] { "INTEGRATION", "Support User", "SYSTEM" };
foreach (Entity user in users.Where(element
=> !automatics.Contains(element.GetAttributeValue<String>("fullname")))) { ... }
第二个最佳解决方案,如果没有办法确定谁在自动列表上以及谁是真正的家伙,那就是制作一份详尽的例外列表。我的 google-fu 再一次让我失望,因为我没有在实体 systemuser.
的自动创建实例的完整列表中找到任何文档一种方法是检查 CreatedBy
字段;对于用户 SYSTEM
和 INTEGRATION
,这是 NULL
。对于 CRM 管理员用户,此字段也是 NULL
,因此如果管理员用户正在被人类主动使用,您应考虑将其排除在外。
FilterExpression humanFilter = new FilterExpression();
humanFilter.AddCondition(new ConditionExpression("createdby", ConditionOperator.NotNull));
if (retrieveAdminUser)
{
humanFilter.FilterOperator = LogicalOperator.Or;
humanFilter.AddCondition(
new ConditionExpression("domainname", ConditionOperator.Equal, "admin@crm"));
}
userQuery.Criteria.AddFilter(humanFilter);