【问题标题】:How to programmatically get user with specific role in MS CRM business unit如何以编程方式获取 MS CRM 业务部门中具有特定角色的用户
【发布时间】:2013-03-07 12:24:40
【问题描述】:

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

【问题讨论】:

    标签: c# dynamics-crm-2011 dynamics-crm


    【解决方案1】:

    您必须使用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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-31
      • 1970-01-01
      • 2017-02-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多