如何以编程方式获得在MS CRM业务单元中具有特定角色的用户

本文关键字:单元 用户 定角色 业务 CRM 编程 方式获 MS | 更新日期: 2023-09-27 18:02:49

我正试图通过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,但是我接下来应该怎么做呢?

如何以编程方式获得在MS CRM业务单元中具有特定角色的用户

必须使用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);
相关文章: