Berechnetes Feld seit Version 23 abgelehnt

Seit Version 23 darf ein berechnetes Feld nicht mehr jede Funktion aufrufen, keine Datei mehr einbinden und nicht mehr mit einem Punkt verketten. Die genauen Regeln, die Meldungen und der saubere Weg, Code eines Moduls aufzurufen.

Betroffene Versionen
Dolibarr 23 und 24 · keine Whitelist in 22 · getestet in 22.0.5, 23.0.4 und 24.0.1
Was geprüft wurde
Getestet am 4. Oktober 2026 auf Instanzen 22.0.5, 23.0.4 und 24.0.1: rund zwanzig Formeln über dieselbe Funktion wie die berechneten Felder ausgewertet, mit mehreren Whitelists; Karte eines Geschäftspartners mit echten berechneten Feldern in 22.0.5 und 24.0.1; Zeile in conf.php ergänzt in 24.0.1. Standardliste im offiziellen Code gelesen (23.0.0 bis 24.0.2), Auswertungsfunktion identisch von 24.0.0 bis 24.0.2. Offizielles Änderungsprotokoll der 23.0.

Sie haben ein berechnetes Extrafeld. Seine Formel funktionierte in Version 22. Nach dem Wechsel auf 23 oder 24 zeigt das Feld stattdessen eine Meldung, die mit Bad string syntax to evaluate beginnt.

Das ist kein Fehler. Version 23 hat die Regeln für Formeln aus Sicherheitsgründen verschärft: Eine Formel ist PHP-Code, den der Server ausführt.

Die Regeln seit Version 23

1. Funktionen und Methoden müssen auf einer Whitelist stehen. Sie wird in conf/conf.php über den Parameter $dolibarr_main_restrict_eval_methods eingestellt. Jede andere Funktion wird mit dieser Meldung abgelehnt:

A function or method "fetch" was called and is not into the parameter
$dolibarr_main_restrict_eval_methods of white-listed functions and methods

Steht dieser Parameter nicht in Ihrer conf.php, gilt in 24 diese Liste: getDolGlobalString, getDolGlobalInt, getDolCurrency, getDolEntity, getDolDBType, fetchNoCompute, hasRight, isAdmin, isExternalUser, isModEnabled, isStringVarMatching, abs, min, max, round, dol_now, preg_match. In 23 ist es dieselbe Liste ohne isExternalUser. Steht er in Ihrer conf.php, zählt seine Liste. Eine Neuinstallation der 24 mit dem Assistenten schreibt ihn bereits dorthin, zusätzlich mit dolSort und ohne isExternalUser.

Das gilt auch für Methoden: fetch() wird abgelehnt, fetchNoCompute() dagegen angenommen; $langs->trans() wird abgelehnt, weil trans nicht auf der Liste steht.

2. Variablen sind begrenzt. Das aktuelle Objekt heißt $objectoffield. Eine Arbeitsvariable muss $var gefolgt von einer Zahl heißen: $var1, $var2. Eine Variable wie $stock wird abgelehnt, und die Fehlermeldung nennt die Liste der erlaubten Variablen ($langs, $mysoc, $user->hasRight, ($db) …).

3. include und require werden abgelehnt, dol_include_once eingeschlossen. Eine Formel kann also keine Klassendatei mehr laden.

4. Verkettung mit dem Punkt wird abgelehnt. Um zwei Texte zu verbinden, verwenden Sie dol_concat(text1, text2), nachdem Sie dol_concat zur Whitelist hinzugefügt haben, wie es das Änderungsprotokoll der 23 angibt.

5. new Klasse($db) wird nur für eine bereits geladene Klasse angenommen, die von CommonObject erbt, der Basisklasse der Dolibarr-Objekte.

Code eines Moduls aufrufen: der saubere Weg

Muss Ihre Formel einen von einem Modul berechneten Wert lesen, gehen Sie über eine einfache Funktion.

  1. Das Modul stellt eine Funktion bereit, zum Beispiel meinmodul_wert($id), die das Objekt liest und den Wert zurückgibt.
  2. Fügen Sie diese Funktion in conf/conf.php zur Whitelist hinzu. Gibt es die Zeile $dolibarr_main_restrict_eval_methods schon, hängen Sie Ihre Funktion ans Ende dieser Zeile, ohne etwas zu entfernen. Sonst kopieren Sie zuerst die Liste oben und hängen Ihre Funktion ans Ende: Sobald Sie den Parameter schreiben, ersetzt Ihre Liste die Standardliste vollständig.
  3. Die Formel lautet dann einfach: meinmodul_wert($objectoffield->id).

Die Funktion muss beim Berechnen bereits geladen sein, da die Formel nichts einbinden kann: sonst zeigt das Feld „Exception during evaluation“. Das Modul muss die Datei, die sie enthält, selbst laden.

Leeren Sie die Liste nicht, um eine Formel „freizuschalten“. Eine leere Liste schaltet die Whitelist ab: Dolibarr greift auf eine Blacklist verbotener Funktionen zurück und nimmt Aufrufe wieder an, die es abgelehnt hatte.

Wie das geprüft wurde

Auf Testinstanzen 22.0.5, 23.0.4 und 24.0.1, mit derselben Funktion wie die berechneten Felder:

  • in 22.0.5 gehen ->fetch(), dol_include_once(), eine freie Variable und die Verkettung durch;
  • in 23.0.4 und 24.0.1 werden sie abgelehnt; $objectoffield->name, $var1 und ->fetchNoCompute() gehen durch;
  • dol_concat() und eine Testfunktion werden abgelehnt und nach dem Hinzufügen zur Liste angenommen;
  • mit einer auf die Testfunktion reduzierten Liste wird getDolGlobalString abgelehnt;
  • mit einer leeren Liste wird ->fetch() wieder angenommen.

Auf der Karte eines Geschäftspartners in 24.0.1 zeigen die abgelehnten berechneten Felder tatsächlich die Meldung „Bad string syntax to evaluate…“. Die weiteren Fallstricke beim Update stehen in Dolibarr Update: Checkliste und Versionen 16 bis 24.

Wenn Ihre Formel weiterhin nicht durchgeht

Finden Sie nicht heraus, welche Regel Ihre Formel blockiert, oder hängt sie von einem Modul ab, das Sie nicht beherrschen, ist genau das die Diagnose für 90 €: eine Stunde gemeinsam an Ihrer Instanz, danach schriftlich die Ursache und was die Behebung kosten würde.

Dolibarrberechnetes FeldExtrafelddol_evalrestrict_eval_methods2324