1

XrmServiceContext为我的 CRM 2013 数据库创建了一个 using svcutil.exe,效果很好,我可以在我的 MVC4 应用程序中从 CRM 检索数据。

我的网站正在使用 ADFS2 运行 SSO,我可以使用以下方法检索访问用户的身份:

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 2013XrmServiceContext

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有一个指南,建议我需要设置一个名为的变量CallerIDOrganizationServiceContext我猜该变量包含在我的XRMServiceContext.. 但我找不到它。

4

1 回答 1

0

CallerId属性不在上下文中,OrganizationServiceContext而是在上下文中:OrganizationServiceProxy

当您构建上下文时,您将传入一个组织服务实例。在此之前,您需要设置CallerId

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

请注意,CallerId仅在OrganizationServiceProxy类型上可用,在界面上不可用IOrganiaztionService。我看不到您是如何获得组织服务的,但请确保它是一个 OrganizationServiceProxy。

于 2015-04-10T14:02:37.490 回答