Tag Archives: ActOnBehalf

Impersonating/ActOnBehalf Benutzer NACH dem erstellen des IOrganizationServices

Die Klasse CrmConnection bietet eine sehr komfortable Möglichkeit um sich zu einem CRM Webservice zu verbinden. Sie verfügt über ein Property “CallerId”, mit dem es möglich ist ein Benutzer zu impersonaten.
Wird nun von der “CrmConnection” aus ein “IOrganizationService” erstellt (Instanz von “OrganizationService”) und die “CallerId” der CrmConnection nachträglich geändert, interessiert das den “OrganizationService” herzlich wenig.

Ein “OrganizationServiceProxy” verfügt ebenfalls über das Property “CallerId”.
Der Konstruktur besitzt jedoch keine Überladung die eine Instanz der “CrmConnection” Klasse erwartet.

Der folgende Code zeigt wie eine nachträgliche Impersonation trotzdem möglich ist.

var typedOrganizationService = organizationService as OrganizationService;
if (typedOrganizationService != null)
{
    var organizationServiceProxy = typedOrganizationService.InnerService as OrganizationServiceProxy;
    if (organizationServiceProxy != null)
    {
        organizationServiceProxy.CallerId = userId;
    }
    else
    {
        logger.Error("Impersonation failed! The OrganizationService.InnerService was not an implemenation of OrganizationServiceProxy.");
    }
}
else
{
    logger.Error("Impersonation failed! The IOrganizationService was not an implemenation of OrganizationService.");
}