-
Notifications
You must be signed in to change notification settings - Fork 55
Open
Description
I'd like to perform a Dataverse (CRM) operation using impersonation.
Something like the following:
using Microsoft.Extensions.Configuration;
using Microsoft.PowerPlatform.Dataverse.Client; //using Microsoft.PowerPlatform.Dataverse.Client v. 1.2.10
using Microsoft.Xrm.Sdk;
var configuration = new ConfigurationBuilder()
.AddUserSecrets(typeof(Program).Assembly)
.Build();
var connectionString = configuration["CrmConnectionString"];
var crmClient = new ServiceClient(connectionString);
var targetUser = Guid.Parse("d3324a2d-600b-ee11-8f6e-000d3adf74aa"); //substitute for valid user ID different than the one from the connection
using var _ = new CallerImpersonationScope(crmClient, targetUser);
var account = new Entity("account") { ["name"] = "Impersonated Account" };
var accountId = await crmClient.CreateAsync(account);
Console.WriteLine($"Created account with Id: {accountId}");
The above compiles and connects (assuming a valid CrmConnection string is specified via User Secrets), but crashes when instantiating a new CallerImpersonationScope with the following exception:
System.InvalidCastException
HResult=0x80004002
Message=Unable to cast object of type 'Microsoft.PowerPlatform.Dataverse.Client.ServiceClient' to type 'System.ServiceModel.IContextChannel'.
Source=System.Private.CoreLib
StackTrace:
at System.Runtime.CompilerServices.CastHelpers.ChkCast_Helper(Void* toTypeHnd, Object obj)
at Microsoft.Xrm.Sdk.CallerImpersonationScope..ctor(IOrganizationService service, Guid callerId)
at Program.<<Main>$>d__0.MoveNext() in C:\GIT\Test\Program.cs:line 14
There's no indication that a ServiceClient cannot be used with CallerImpersonationScope, as it implements the expected IOrganizationService.
Metadata
Metadata
Assignees
Labels
No labels