Domino 9 und frühere Versionen > ND6: Entwicklung

korruptes berechnetes Feld

(1/1)

redspawn:
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ß

koehlerbv:
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 aus der KBase:


--- Zitat ---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.
--- Ende Zitat ---

Belege TimesModified doch lieber gleich selber ...

Bernhard

smoki:
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

koehlerbv:
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

Navigation

[0] Themen-Index

Zur normalen Ansicht wechseln