2013-03-04 38 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

相關問題