如何构建查询以获取Dynamics CRM 2016 C中不存在用户X的安全角色#

问题描述 投票:0回答:1

我需要更新安全角色的用户列表。如何避免重新关联已分配角色的用户?

我正在尝试构建一个查询来获取用户x不在角色的用户列表中的角色,然后如果找不到用户则将其用于关联。这是我到目前为止:

LinkEntity userRoles = new LinkEntity
{
    LinkFromEntityName = "role",
    LinkToEntityName = "systemuserroles",
    LinkFromAttributeName = "roleid",
    LinkToAttributeName = "roleid",
    JoinOperator = JoinOperator.LeftOuter,
    Columns = new ColumnSet(true),
    EntityAlias = "userroles",
    LinkCriteria =
    {
        Conditions =
        {
            new ConditionExpression{
                //not sure how to build the "where user x does not exists"
           }
        }
    }
};

QueryExpression roleQuery = new QueryExpression
{
    EntityName = "role",
    ColumnSet = new ColumnSet(true),
    Criteria =
    {
        Conditions = { 
            new ConditionExpression { 
                AttributeName = "name", 
                Operator = ConditionOperator.Equal, 
                Values = { "RoleName"}
            } 
        }
    },
    LinkEntities = { userRoles }
};

我需要构建类似这样的查询:

select * from role 
where role.name = "RoleName"
and not exists
(select 1 from userRoles 
where userRoles.roleid = role.roleid
and userRoles.user = "xyz")
c# dynamics-crm dynamics-crm-2016 query-expressions
1个回答
0
投票

基于这个使用Fetch XML解释它的post,只要我指定的用户不存在,我就能够构建这个获取角色的查询:

LinkEntity userRoles = new LinkEntity
{
    LinkFromEntityName = "role",
    LinkToEntityName = "systemuserroles",
    LinkFromAttributeName = "roleid",
    LinkToAttributeName = "roleid",
    JoinOperator = JoinOperator.LeftOuter,
    Columns = new ColumnSet(true),
    EntityAlias = "userroles",
    LinkCriteria =
    {
        Conditions =
         {                         
             new ConditionExpression {
                 AttributeName = "systemuserid",
                 Operator = ConditionOperator.Equal,
                 Values = { "xyz" }
             }
         }
    }
};

QueryExpression roleQuery = new QueryExpression
{
    EntityName = "role",
    ColumnSet = new ColumnSet(true),
    Criteria =
    {
        Filters = {
            new FilterExpression{
                FilterOperator = LogicalOperator.And,
                Conditions = {
                    new ConditionExpression{
                        EntityName = "systemuserroles",
                        AttributeName = "roleid",
                        Operator = ConditionOperator.Null
                    }
                }
            }                    
        },
        Conditions = { 
                    new ConditionExpression { 
                        AttributeName = "name", 
                        Operator = ConditionOperator.Equal, 
                        Values = { "RoleName"}
                    }
                }
    },
    LinkEntities = { userRoles }
};
© www.soinside.com 2019 - 2024. All rights reserved.