Das Notes Forum
Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: redspawn am 17.03.06 - 15:12:12
-
Hallo zusammen,
ich erstell über eine Java-Prog ein neues Notes-Document. In der Maske für das Doc gibt es ein berechnetes Feld mit Namen TimesModified (Datentyp Zahl) mit folgender Formel:
@If(@IsNewDoc; 0; TimesModified + @IsDocBeingSaved)
Bevor ich das Doc per Java speichere mache ich ein ComputeWithForm ( False, False ).
Das Doc wird abgespeichert. Wenn ich das Doc danach in der DB öffnen will kommt eine Fehlermeldung: Falscher Datentyp für Operator oder @Funktion: Text erwartet.
Erstelle ich das gleiche Doc über einen Notes-Client funktioniert das Ganze.
Jemand ne Ahnung an was das liegen könnte??
Gruß
-
Warum hier auf einmal "Text erwartet" wird, kann ich auf den ersten Blick auch nicht erkennen. Allerdings wird Dir hier ComputeWithForm sowieso nicht helfen. Ich zitiere mal dank Andreas Posting (http://atnotes.de/index.php?topic=29439.msg186007#msg186007) aus der KBase:
If a form contains a Computed field (for example, a field called "Count") with a formula which is based on its own field value (for example, "Count+1"), then the ComputeWithForm method is not suitable for use in refreshing that document. This is because the ComputeWithForm method triggers recalculation twice.
Belege TimesModified doch lieber gleich selber ...
Bernhard
-
Hallo!
Ich glaube das funktioniert nicht im Backend, weil TimesModified ja noch nicht belegt ist.
Du hast zwar @IsNewDoc in der Formel, doch diese zieht in diesem Fall nicht, da ein Dokument das im Back-End ist, nie New im Frontend wird.
vielleicht wäre es besser:
@If(@IsUnavailable(TimesModified);0;TimesModified+@IsDocBeingSaved)
oder so ähnlich... habe es nicht getestet.
Gruss
Chris
-
Eine gute Idee, Chris!
Vorschlag zur Verbesserung:
@If (@IsNumber (TimesModified); 0; TimesModified + 1)
(@IsDocBeingSaved ist ja auch eine FrontEnd-Funktion!)
A-Bär: Siehe KBase-Note - es wird durch ComputeWithForm doppelt aufgerufen und weist einen Eigenbezug auf. TimesModified wird also zweimal inkrementiert und so ergibt sich dann ein falsches Ergebnis. Sicher ist nur das Setzen von TimesModified aus der Routine selbst.
Bernhard