So beheben Sie MANAGER_NOT_DEFINED bei Salesforce-Deployments

Ein Genehmigungsprozess oder eine hierarchieabhängige Automatisierung schlägt fehl, weil das Manager-Feld des Benutzers nicht ausgefüllt ist.

Tritt auf bei: Laufzeit-Genehmigungseinreichung, meist während der Ausführung von Apex-Tests

Was das bedeutet

MANAGER_NOT_DEFINED tritt auf, wenn ein Vorgang, der von der Benutzerrolle oder der Managementhierarchie abhängt, meist ein Genehmigungsprozessschritt, der zum Manager eines Benutzers routet, auf einen User-Datensatz ohne Wert im Manager-Feld trifft. Salesforce kann die Genehmigung ohne diese Kette nicht weiterleiten oder die hierarchieabhängige Logik, die sie ausgelöst hat, nicht abschließen.

Scratch-Orgs und frische Sandboxes legen ihren Standard-Admin-Benutzer routinemäßig ohne gesetzten Manager an, weshalb dieser Fehler unverhältnismäßig oft in CI-Testläufen auftritt statt in einer ausgereiften Produktions-Org, in der die Hierarchie im Laufe der Zeit aufgefüllt wurde.

Diagnose

Häufige Ursachen

Test- oder Seed-Benutzer wurden ohne Manager angelegt
Fixture-User-Datensätze wurden für Tests eingefügt, ohne das Manager-Feld auszufüllen, das der Genehmigungsprozess benötigt.
Manager-Feld wurde gesetzt, nachdem abhängige Automatisierung bereits gelaufen war
Ein Migrationsskript aktualisierte das Manager-Feld eines Benutzers in einem späteren Schritt als der Prozess, der es während der Einrichtung benötigte.
Genehmigungsprozess erreicht einen Benutzer ohne Manager in der Kette
Ein Genehmigungsschritt, der "die Managementkette hinaufroutet", trifft auf einen Benutzer der obersten Ebene oder einen neu angelegten Benutzer, dessen Manager-Feld leer ist.

Die Lösung

  1. Manager-Feld für jeden relevanten Benutzer ausfüllen
    Stellen Sie sicher, dass Test- und Seed-User-Datensätze, die in Genehmigungs- oder hierarchieabhängigen Abläufen verwendet werden, einen zugewiesenen Manager haben.
    User approver = new User(/* ... */);
    insert approver;
    User submitter = new User(ManagerId = approver.Id, /* ... */);
    insert submitter;
  2. Benutzereinrichtung vor hierarchieabhängiger Automatisierung einordnen
    Weisen Sie Manager als früheren Schritt zu, bevor ein Genehmigungsprozess oder Trigger, der von der Hierarchie abhängt, auslöst.
  3. Ausweichgenehmiger für Benutzer an der Hierarchiespitze hinzufügen
    Konfigurieren Sie den Genehmigungsprozess mit einem Standardgenehmiger, damit Benutzer ohne Manager trotzdem irgendwohin geroutet werden.
In der Praxis

Wie Serpent das verhindert

Die Task-Einrichtung von Serpent kann Testbenutzer mit einer vollständigen Hierarchie vorbelegen, sodass Genehmigungsprozess-Tests, die von einer Manager-Kette abhängen, nicht aus einem Grund fehlschlagen, der nichts mit dem getesteten Code zu tun hat. Siehe die Bibliothek der Salesforce-Deployment-Fehler.

Metadaten und Daten in einem einzigen Deployment-Flow in Serpent

Prävention

Eine gemeinsame Testbenutzer-Fabrik bauen, die stets eine Manager-Kette setzt
Zentralisieren Sie die Erstellung von Test-Usern in einem @TestSetup-freundlichen Utility, das standardmäßig einen Manager zuweist, damit jeder neue Test eine gültige Hierarchie erbt.
Bei Bedarf Territory-Management-artige Funktionen zu Scratch-Org-Definitionen hinzufügen
Wo Genehmigungsprozesse von der Rollenhierarchie abhängen, säen Sie mindestens eine zweistufige Benutzerhierarchie in Scratch-Org-Setup-Skripte ein, nicht nur den Standard-Admin-Benutzer.
Jeden managerbasierten Genehmigungsschritt mit einem Ausweichgenehmiger konfigurieren
Behandeln Sie einen fehlenden Ausweichgenehmiger als Designlücke im Genehmigungsprozess selbst, um neue Mitarbeiter oder Benutzer der obersten Ebene aufzufangen, bevor sie in eine Sackgasse geraten.
Häufige Fragen

MANAGER_NOT_DEFINED, beantwortet

Braucht jeder Genehmigungsprozess einen managerbasierten Schritt, um diesen Fehler auszulösen?
Nur solche, die explizit so konfiguriert sind, dass sie anhand des Managers oder der Rollenhierarchie des Einreichers routen; Genehmigungsprozesse mit festen oder warteschlangenbasierten Genehmigern sind nicht betroffen.
Kann ein Benutzer sein eigener Manager sein, um das zu umgehen?
Salesforce verhindert, dass ein Benutzer als sein eigener direkter Manager festgelegt wird, das ist also kein gültiger Workaround; verwenden Sie stattdessen einen echten zweiten Benutzer oder eine Standardgenehmiger-Konfiguration.
Gilt das auch für Flow-basierte Genehmigungen ebenso wie für klassische Approval Processes?
Ja. Jede Automatisierung, die den "Manager des Einreichers" dynamisch auflöst, ob ein klassischer Approval-Process-Schritt oder ein Flow mit dem Get-Records/Manager-Lookup-Muster, stößt bei leerem Feld auf dieselbe zugrunde liegende Lücke.

Kostenlos starten. Keine Kreditkarte, keine Installation, keine Verpflichtung.

In unter 15 Minuten eingerichtet. Keine DevOps-Fachkraft nötig.

Neugierig auf schnelleres Shipping, bevor Sie einsteigen? Sprechen wir

Unverbindlich.