1

CRM 2013 データベース用に svcutil.exe を使用して作成しましたXrmServiceContext。これはうまく機能しており、MVC4 アプリケーションで CRM からデータを取得できます。

私の Web サイトは ADFS2 を使用して SSO を実行しており、次を使用してアクセスしているユーザー ID を取得できます。

Microsoft.IdentityModel.Claims.IClaimsIdentity ci =  Thread.CurrentPrincipal.Identity as Microsoft.IdentityModel.Claims.IClaimsIdentity;

var accountNameClaim = ci.Claims.Where(x => x.ClaimType.ToLower().EndsWith("windowsaccountname")).FirstOrDefault();

これは私に次のようなものを与えます

string accountNameClaim = "firstname.lastname@domain.com"

これを使用して、ユーザー フォーム CRM 2013 を取得できますXrmServiceContext

var user = _serviceContext.SystemUserSet
                                        .Where( x=> x.DomainName == accountNameClaim)
                                        .Select(s => new UserInformationProxy()
                                          {
                                              Id = s.Id, // this is probably needed for impersonation
                                              FullName = s.FullName, 
                                              DomainName = s.DomainName
                                           })
                                         .FirstOrDefault();

ここで、XRMServiceContext を使用して CRM への後続のすべてのクエリに対して、このユーザーとしてどのように行動するか、このユーザーになりすますかを考えています。

このページhttp://msdn.microsoft.com/en-us/library/gg309629.aspxには、私の..内のどこかに含まれていると推測CallerIDしている変数を設定する必要があることを示唆するガイドがありますそれ。OrganizationServiceContextXRMServiceContext

4

1 に答える 1

0

CallerIdプロパティは ではなくOrganizationServiceContext、コンテキストでOrganizationServiceProxy使用される にあります。

コンテキストを構築するときは、組織サービス インスタンスを渡します。その前に、次を設定する必要がありますCallerId

organizationService.CallerId = user.Id;
var _serviceContext = new OrganizationServiceContext(organizationService);

CallerIdは type でのみ使用できOrganizationServiceProxy、 interface では使用できないことに注意してくださいIOrganiaztionService。組織サービスを取得する方法はわかりませんが、OrganizationServiceProxy であることを確認してください。

于 2015-04-10T14:02:37.490 に答える