4

我正在尝试通过 C# 插件从 MS CRM 2011 业务部门检索具有特定角色的用户,但是我坚持为此编写正确的查询。角色通过N:N关系链接到用户,我正在努力寻找这种情况下的示例查询。

现在我想出了以下内容:

var entity = organizationService.Retrieve(entityName, entityId, new ColumnSet(new string[] { "new_unit" }));

if (entity.Attributes.Keys.Contains("new_unit"))
{
    QueryExpression query = new QueryExpression("systemuser");

    query.ColumnSet = new ColumnSet(new string[] { "systemuserid" });
    query.Distinct = true;
    query.Criteria = new FilterExpression();
    query.Criteria.AddCondition("businessunitid", ConditionOperator.Equal, ((EntityReference)entity.Attributes["new_unit"]).Id);
}

我不确定我需要链接到哪个实体systemuser以及如何实现目标检索具有特定角色和业务单位的用户。

我可以很容易地获得角色的名称或它的名称Guid,但是接下来我应该怎么做呢?

4

1 回答 1

4

您必须使用这些AddLink方法来执行连接。

这应该是您需要的:

QueryExpression query = new QueryExpression("systemuser");

query.ColumnSet = new ColumnSet(new string[] { "systemuserid" });
query.Distinct = true;
query.Criteria = new FilterExpression();
query.Criteria.AddCondition("businessunitid", ConditionOperator.Equal, ((EntityReference)entity.Attributes["new_unit"]).Id);
query.AddLink("systemuserroles", "systemuserid", "systemuserid").
    AddLink("role","roleid", "roleid").
        LinkCriteria.AddCondition("name", ConditionOperator.Equal, "MyRoleName");

var users = organizationService.RetrieveMultiple(query);

如果您可以轻松获取 RoleId,您可以跳过角色实体的添加链接,只需将您的 LinkCriteria 条件添加到 SystemUserRoles 实体:

QueryExpression query = new QueryExpression("systemuser");

query.ColumnSet = new ColumnSet(new string[] { "systemuserid" });
query.Distinct = true;
query.Criteria = new FilterExpression();
query.Criteria.AddCondition("businessunitid", ConditionOperator.Equal, ((EntityReference)entity.Attributes["new_unit"]).Id);
query.AddLink("systemuserroles", "systemuserid", "systemuserid").
    LinkCriteria.AddCondition("roleid", ConditionOperator.Equal, roleIdGuid);

var users = organizationService.RetrieveMultiple(query);
于 2013-03-07T13:33:58.903 回答