Holen Sie Benutzer benutzerdefinierten Felder ohne SOQL (wie $User in Formeln)?
Habe ich einige benutzerdefinierte Felder auf meiner Benutzer-Objekt, das ich für den Zugriff mit APEX VisualForce-code in meiner trigger. Wenn ich es auf einem Feld Formel ich verwenden, ein schickes $User Referenz, wie diese:
$User.my_prop__c
Von APEX ich habe eine Abfrage des User-Objekts durch Benutzerkennung wie diese:
[select my_prop__c from User where id = :UserInfo.getUserId()].my_prop__c;
Gibt es etwas, gebacken in APEX schon, das würde ich bei den user-Eigenschaften, ohne die SOQL-Abfrage? Wenn nicht, kennt jemand eine utility-Klasse für lazy loading und caching-Benutzer-Eigenschaften, so dass der overhead ist minimal.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich würde etwas ähnliches wie den folgenden code Beispiel. Es verwendet ein singleton-Muster zu statisch speichern die Informationen, die im Arbeitsspeicher für die Dauer der Transaktion. Es ist ähnlich wie lazy loading, twamley vorgeschlagen, aber ich denke, das ist eine viel einfachere Ansatz.
Verwendung 1: UserUtil.CurrentUser.E-Mail;
Verwendung 2: Benutzer someUser = UserUtil.getUser(someUserId);
Dieser ermöglicht Ihnen den Zugriff auf die gleichen Informationen über den aktuellen Benutzer oder für andere Benutzer in das system. Beachten Sie die queryUsers Methode nur gibt ein query-Ergebnis. Dies macht es einfach, hinzufügen und entfernen von Feldern aus der Abfrage, wie er ist isoliert in seiner eigenen Methode halten die Dinge einfach.
Hinweis: beachten Sie, dass dieser code zieht alle Benutzer bei der Verwendung. Die meisten Organisationen nicht mit mehreren Hunderten von Benutzern, so dass die heap-Größe sollte nicht von Belang sein. Aber wenn es ist, können Sie ändern Sie einfach die queryUsers () - Methode, um nur die Rückkehr Benutzer aktiv sind, oder filter nach unten, basierend auf anderen Kriterien.
}
Schrieb ich meine eigene utility-Klasse. Ich bin immer noch daran interessiert, bessere Techniken, aber.
Diese utility-Klasse lazy geladen wird, wenn die erste Eigenschaft zugegriffen wird. Update_Geschlossen_Gewonnen_Chancen__c und Set_Chancen_auf_Geschlossen_Gewonnen__c sind meine benutzerdefinierten Felder auf dem Benutzer-Objekt (sichtbar nur für Systemadministratoren, damit die Menschen können nicht aktualisieren Sie die Berechtigungen).
Hier ist mein trigger die Verwendung dieser Klasse. Die erste Zeile
myUserInfo = new MyUserInfo();
nicht ausführen, SOQL. Das wird nicht passieren, bis die erste custom-get-Eigenschaft verwendet wird. Nachfolgende Aufrufe nicht brauchen, SOQL.Liest es ähnlich $User in Formeln und ich habe keine sorgen zu machen über Heften auf mehreren SOQL Anrufe bei einem (oder null) reicht.