3

システムユーザーに割り当てられているすべての役割をプルしようとしています。関連するエンティティを使用する必要があると思いますが、アプローチをどのように進めればよいかわかりません。これが私のコードスニペットです:

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
4

3 に答える 3

4

これが特定のユーザーのすべての役割をプルするための私の実装です

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;
于 2013-03-05T14:49:30.950 に答える
2

ユーザーのセキュリティロールをチェックするためのサンプルがMSDNにあり、これを完了するのに役立ちます。

サンプル:ユーザーに役割があるかどうかを判断する

于 2013-03-04T21:07:57.670 に答える
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の使用法

于 2013-03-07T15:24:50.150 に答える