Notes akzeptiert offensichtlich korrekte Formeln nicht

Eine bzgl. der Syntax offensichtlich richtige Formel wird von Notes mit der Meldung „No main or selection expression in formula“ (in Deutsch: Kein Haupt- oder Selektionsausdruck in Formel) nicht akzeptiert.

Die Fehlermeldung (siehe Abbildung) verweisst auf das am Ende der letzten Anweisungszeile gesetzte „;“ (Semikolon) hin.


Formelbeispiel mit Fehlermeldung

 

Auch nach mehrfacher Überprüfung kann man keinen Fehler feststellen – trotzdem lässt Notes es nicht zu, dass man die Formel speichern kann.

Ursache
Notes erwartet für jede Formel einen Rückgabewert. Also einen Wert, der an die „aufrufende“ Instanz (z.B. ein Feld, eine Schaltfläche in einer Maske oder ein Aktionsknopf) zurückgegeben werden kann. Bei Feldern macht das durchaus einen Sinn – es soll ja auch nach der Ausführung der Formel ein Ergebniswert im Feld eingetragen werden.

Bei Schaltflächen in einer Maske oder einem Aktionsknopf fragt man sich allerdings zurecht, wozu dieses Verhalten gut sein soll – der Rückgabewert wird hier nicht benötigt. Trotzdem „besteht“ Notes beharrlich auf einem Rückgabewert.

Warum habe ich selbst diesen Fehler noch nie gehabt?
Reine Glückssache. In den meisten Fällen – vor allem bei Formeln in Feldern – programmiert man „automatisch“ so, dass ein Rückgabewert gebildet wird. DAS soll ja dann der gewünschte Feldinhalt sein. Wenn man aber (wie im Beispiel) einen Aktionsknopf erstellt, der Werte in „irgendwelche“ Felder schreibt, kann sowas schon eher passieren.

Lösung
Es muss am Ende der Formel auf jeden Fall ein Rückgabewert „generiert“ werden. Die meisten Notes-Entwickler verwenden hierzu zwei Anführungsstriche („“) oder das reservierte Schlüsselwort NULL. Beides bedeutet in der Formelsprache „Nichts“ – Notes akzeptiert es aber als gültigen Rückgabewert.

Beide Varianten haben den Vorteil, dass z.B. bei der Verwendung innerhalb einer Feldformel das Feld leer bleibt. Bei der Verwendung von @True stünde im Zweifelsfalle eine numerische Eins (1) im Feld.

tmpNachname := "Dillmann";
tmpVorname := "Manfred";
FIELD Kontakt := tmpVorname + " " + tmpNachname;
"";

In dieser Form akzeptiert Notes die Formel aus dem obigen Beispiel. Ursache ist also garantiert NICHT – wie gerne vermutet wird – das Semikolon am Ende der letzen Anweisungszeile.

Notes/Domino Version: ab 4.x