4

システム内のすべてのユーザーを一覧表示すると、そのうちの何人かはシステム ユーザーであり、勤務時間などをまったく持たないことに気付きました。現時点では、それらをリストしてループから除外するだけです。これは Q&D アプローチであり、正しく行うことを好みます。

特定のプロファイルが実際のプロファイル (つまり、Office 365 ポータルで作成されたもの) であるか、デフォルトで MS に提供されているプロファイルであるかを示すsystemuserエンティティに関する特定の情報は見つかりませんでした。

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")))) { ... }

2 番目に良い解決策は、誰がオートマチック リストに載っていて、誰が本当の男かを判断する方法がない場合、例外の網羅的な包括的なリストを作成することです。エンティティsystemuserの自動的に作成されたインスタンスの完全なリストに関するドキュメントが見つからなかったため、もう一度、私の google-fu は失敗しました。

4

1 に答える 1

2

アプローチはCreatedByフィールドをチェックすることです。これはNULLユーザーSYSTEMINTEGRATION. このフィールドは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);
于 2015-07-02T11:42:42.897 に答える