2013-03-04 41 views
2

我正在尝试分配给系统用户的所有角色。我想我需要使用关联的实体,但我不知道该如何继续这种方法。 这里是我的代码片段:如何获取systemuser的所有角色?

Uri organizationUri = new Uri(this.ConnectionString); 
Uri homeRealmUri = null; 
ClientCredentials credentials = new ClientCredentials(); 
credentials.UserName.UserName = ConfigUserName; 
credentials.UserName.Password = ConfigPassword; 

Microsoft.Xrm.Sdk.Client.OrganizationServiceProxy orgProxy = new Microsoft.Xrm.Sdk.Client.OrganizationServiceProxy(organizationUri, homeRealmUri, credentials, null); 
IOrganizationService _service = (IOrganizationService)orgProxy; 

Microsoft.Xrm.Sdk.Entity account = new Microsoft.Xrm.Sdk.Entity("systemuser"); 
QueryExpression query = new QueryExpression 
{ 
    EntityName = account.LogicalName, 
    ColumnSet = new ColumnSet(true) 
}; 
DataCollection<Microsoft.Xrm.Sdk.Entity> users = _service.RetrieveMultiple(query).Entities; 

// fetch assigned roles of users 
+0

詹姆斯的链接有帮助吗?如果是这样,接受他的答复作为答案。如果没有,请告诉我们,并且有人会为您发布较短版本的源代码。我知道这些例子有时候可能会感觉有些压抑。 :) – 2013-03-04 22:33:46

回答

2

这是我实现提取特定用户的所有角色

QueryExpression query = new QueryExpression(); 
query.EntityName = "role"; 
query.ColumnSet = new ColumnSet(true); 

LinkEntity role = new LinkEntity(); 
role.LinkFromEntityName = "role"; 
role.LinkFromAttributeName = "roleid"; 
role.LinkToEntityName = "systemuserroles"; 
role.LinkToAttributeName = "roleid"; 

LinkEntity userRoles = new LinkEntity(); 
userRoles.LinkFromEntityName = "systemuserroles"; 
userRoles.LinkFromAttributeName = "systemuserid"; 
userRoles.LinkToEntityName = "systemuser"; 
userRoles.LinkToAttributeName = "systemuserid"; 

ConditionExpression conditionExpression = new ConditionExpression(); 
conditionExpression.AttributeName = "systemuserid"; 
conditionExpression.Operator = ConditionOperator.Equal; 
conditionExpression.Values.Add(userId); 

userRoles.LinkCriteria = new FilterExpression(); 
userRoles.LinkCriteria.Conditions.Add(conditionExpression); 

role.LinkEntities.Add(userRoles); 
query.LinkEntities.Add(role); 

DataCollection<Microsoft.Xrm.Sdk.Entity> userRoles = _service.RetrieveMultiple(query).Entities; 
return userRoles; 
2

有用于检查用户的安全角色在MSDN的样本,应该可以帮助你完成这个功能。

Sample: Determine Whether a User has a Role

+0

+1因为懒得只是抛出一个链接。 :) – 2013-03-04 22:34:18

+2

如果它已经在网上没有重新发布。 – 2013-03-05 00:11:30

2

使用生成的早期绑定CRM实体会做什么你下面的Linq查询后:

var query = from user in context.SystemUserSet 
      join userRoles in context.SystemUserRolesSet on user.SystemUserId equals userRoles.SystemUserId 
      join role in context.RoleSet on userRoles.RoleId equals role.RoleId 
      where user.DomainName == '<username>' 
      select role; 

有关生成早期实体的信息可以在这里找到:CrmSvcUtil usage

相关问题