繁体   English   中英

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

[英]How to build a query to get a security role where user X does not exists in Dynamics CRM 2016 C#

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

我正在尝试建立查询以获取用户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")

根据这篇使用Fetch XML对其进行说明的文章 ,我能够构建此查询,只要我指定的用户不在该查询中即可获得该角色:

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 }
};

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM