Autor Thema: korruptes berechnetes Feld  (Gelesen 1296 mal)

Offline redspawn

  • Junior Mitglied
  • **
  • Beiträge: 76
korruptes berechnetes Feld
« 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ß
Gruß Peter

ahnungslos und völlig talentfrei...

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: korruptes berechnetes Feld
« Antwort #1 am: 17.03.06 - 15:30:53 »
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.

Belege TimesModified doch lieber gleich selber ...

Bernhard

Offline smoki

  • Senior Mitglied
  • ****
  • Beiträge: 325
  • Geschlecht: Männlich
    • Smoki's Lotus Notes
Re: korruptes berechnetes Feld
« Antwort #2 am: 17.03.06 - 18:23:47 »
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

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: korruptes berechnetes Feld
« Antwort #3 am: 17.03.06 - 19:38:34 »
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

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz