none
Plugin InitiatingUserId entspricht nicht immer dem Calling User im CRM Frontend RRS feed

  • Frage

  • Hallo,

    wir haben ein synchrones Plugin im Einsatz, das auf Creates und Updates von Firmen reagiert. Das Plugin loggt also Änderungen am Kundenstamm. In letzter Zeit haben wir bei einem Update des Kunden Probleme beim Ermitteln des Users, der die Aktualisierung des Kunden im CRM Frontend ausgelöst hat. Bisher hat das problemlos wie folgt funktioniert. 

                RetrieveRequest currentUserRetrieveRequest = new RetrieveRequest();
                currentUserRetrieveRequest.ColumnSet = new AllColumns();
                currentUserRetrieveRequest.ReturnDynamicEntities = true;
                TargetRetrieveDynamic currentUserTarget = new TargetRetrieveDynamic();
                currentUserTarget.EntityId = context.InitiatingUserId; // context.UserId;
                currentUserTarget.EntityName = EntityName.systemuser.ToString();
                currentUserRetrieveRequest.Target = currentUserTarget;
                currentUser = (DynamicEntity)((RetrieveResponse)crmService.Execute(currentUserRetrieveRequest)).BusinessEntity;

    Noch zur Info: Das Update läuft Pre Stage in der Parent Pipeline, der User Context des Plugin ist Calling User. Daher sollten wir über context.InitiatingUserId den User erhalten, der das Update-Event ausgelöst hat. Stattdessen bekommen wir in letzter Zeit einen AdminUser, der nicht für die ursprüngliche Änderung des Kunden verantwortlich ist.

    Es sieht so aus, als würde ein anderes Plugin dazwischenfunken und den User im aktuellen Kontext ändern. Andere Plugins haben wir noch im Einsatz, die ebenfalls auf Updates, Retrieve-, RetrieveMultiple des Kunden reagieren und speziell Lookups manipulieren.

    Was wir bisher versucht haben:

    Die Execution Order im PluginRegistration-Tool haben wir schon geändert, also das Logging-Plugin auf Rang 1 gesetzt und alle anderen auf folgende Ränge - ohne Erfolg.

    Gibt es eine Möglichkeit rauszufinden, welche Anwendung dazwischenfunkt oder ein Plugin mit Prio 1 laufen zu lassen?

    Vielen Dank im Voraus!

    Gruß

    Rolf

    Mittwoch, 26. Januar 2011 14:54

Antworten

  • Hallo Rolf,

    das ändern der Reihenfolge der PlugIns sollte eigentlich die Lösung sein. Habt ihr einmal nach den Anpassungen den AsyncService neu gestartet? Es kann sein, das die neue Konfiguration nicht richtig übernommen wurde, jedenfalls hatte ich mal ein ähnliches Problem bei einem Kunden, da hat der Neustart des Service das problem behoben.


    Viele Grüße

    Michael Sulz
    MVP für Microsoft Dynamics CRM
    Blog
    Website
    • Als Antwort markiert Michael Sulz Montag, 7. Februar 2011 08:20
    Donnerstag, 27. Januar 2011 10:08
  • Hallo Michael,

    danke für den Tip, den AsyncService hatten wir noch nicht neu gestartet. Da das Problem dringend war, haben wir es zwischenzeitlich programmatisch gelöst. Wir ermitteln den User (Domainnamen) nun aus dem HttpContext

    --> HttpContext.Current.User.Identity.Name;

    Spricht etwas dagegen, das im Plugin so zu machen? Würde das noch zuverlässig über IFD funktionieren?

    Gruß

    Rolf

    • Als Antwort markiert rolf.weiglein Dienstag, 5. Juli 2011 15:43
    Donnerstag, 27. Januar 2011 14:19

Alle Antworten

  • Hallo Rolf,

    das ändern der Reihenfolge der PlugIns sollte eigentlich die Lösung sein. Habt ihr einmal nach den Anpassungen den AsyncService neu gestartet? Es kann sein, das die neue Konfiguration nicht richtig übernommen wurde, jedenfalls hatte ich mal ein ähnliches Problem bei einem Kunden, da hat der Neustart des Service das problem behoben.


    Viele Grüße

    Michael Sulz
    MVP für Microsoft Dynamics CRM
    Blog
    Website
    • Als Antwort markiert Michael Sulz Montag, 7. Februar 2011 08:20
    Donnerstag, 27. Januar 2011 10:08
  • Hallo Michael,

    danke für den Tip, den AsyncService hatten wir noch nicht neu gestartet. Da das Problem dringend war, haben wir es zwischenzeitlich programmatisch gelöst. Wir ermitteln den User (Domainnamen) nun aus dem HttpContext

    --> HttpContext.Current.User.Identity.Name;

    Spricht etwas dagegen, das im Plugin so zu machen? Würde das noch zuverlässig über IFD funktionieren?

    Gruß

    Rolf

    • Als Antwort markiert rolf.weiglein Dienstag, 5. Juli 2011 15:43
    Donnerstag, 27. Januar 2011 14:19