Domino 9 und frühere Versionen > Entwicklung
Neue Dokumente werden nicht in Ansicht angezeigt
Tode:
Wie oben beschrieben ist der ComputeWithForm ein kleines "Zieselchen" wie wir hier bei uns sagen: Er reagiert extrem empfindlich auf falsche Feldwerte / Datentypen und bricht ab, wo ein manuelles "F9" im Dokument einfach die Werte korrigiert.
Leider sagt uns der ComputeWithForm auch bei RaiseError = True nur, dass ein Fehler aufgetreten ist, nicht aber, wo genau dieser Fehler aufgetreten ist.
Um das herauszufinden, muss man sich eines kleinen Tricks bedienen:
Bricht ein ComputeWithForm ab, dann werden alle Felder, die sich UNTERHALB des Fehler- verursachenden Feldes befinden, nicht mehr berechnet.
Man tut also folgendes: Man erstellt in der Maske ein Feld, Typ Text, berechnet, Formel "Bis hier OK" (o.ä.) und stellt dieses ganz nach oben (als Referenz, dass die Formel korrekt ist).
Nach dem Script- Lauf prüft man, ob tatsächlich "Bis hier OK" im Feld steht.
Ist das der Fall, dann verschiebt man das Feld in der Maske schrittweise nach unten. irgendwann wird das Feld plötzlich leer sein nach dem Script- Lauf. Dann weiss man, dass direkt überhalb des Feldes das Feld ist, was den ComputewithForm abbrechen lässt. In dieses Feld baut man jetzt einfach eine entsprechende Fehler- Routine ein, und VOILA: Der ComputeWithForm läuft durch...
Mögliche Fehlerursachen sind:
- Ein Feld, dass als Datum definiert ist, aber nur den TEXT eines Datums enthält (F9 wandelt das automatisch um, ComputeWithForm bricht ab).
Lösung: Einfach in die Formel (bei berechnet) oder in die Eingabeumsetzung( bei Bearbeitet) ne Formel ala:
x := @Date( FeldName );
@If( @IsError( x ) ; "" ; x )
- Das selbe gilt für Zahlenfelder: Steht dort z.B. ein Text drin, der als Zahl interpretiert werden KÖNNTE, dann tut das F9 auch... ComputeWithForm bricht mit Fehler ab. Das passiert z.B. dann, wenn man Felder per Script füllt, und nicht bemerkt, dass man einen Textwert in ein Zahlenfeld schreibt...
Auch hier hilft wieder eine ähnliche Formel:
x := @TextToNumber( FeldName );
@If( @IsNumber( FeldName ) ; FeldName ; @IsError( x ) ; "" ; x )
So kriegt man den ComputeWithForm dazu, alles korrekt durchzuführen.
HTH
Tode
Glombi:
Notes ist bisweilen case-sensitive, auch bei den Ansichtszugriffsformeln. Bitte prüfe, ob es immer "xDeleteReason" heisst: Feldname in der Maske und Ansicht. Falls die Schreibweise anders ist, musst Du Dein Script anpassen.
Gelegentlich schreibt ein Script auch alles in Großbuchstaben.
Das könntest Du in den Dokumenteigenschaften sehen, wenn Du das Dokument per Ungelesenen suchst.
Andreas
Glombi:
@Tode:
Wenn ich das richtig interpretierem geht Notes bei ComputeWithForm Feld für Feld vor und speichert das Dokument !? Sonst stünde ja nicht in einigen Feldern das richtige und in den anderen nicht.
Andreas
Semeaphoros:
Andreas:
Der Mann nennt sich TodE und nicht Tuu Duu :)
Muss nicht so sein: das Doc wird wohl gespeichert unabhängig davon, ob es erolfgreich berechnet wurde oder nicht, das impliziert nicht ein Speichern nach jedem Feld, wäre sonst ein Performance-Fresser.
Glombi:
Danke Jens für den Hinweis - Macht der Gewohnheit ;D
Der Code wäre so aber besser - ComputeWithForm am Ende.
While Not (docMail Is Nothing)
Set docNew = docMail.CopyToDatabase(dbCurrent)
docNew.Form = "frmVorgangMail"
docNew.xDeleteReason = "gültig"
docNew.VorgangsTyp = "E-Mail"
...
Call docNew.ComputeWithForm(True, False)
Call docNew.Save(True,False)
Set docMail = collection.GetNextDocument(docMail)
Wend 'While Not (docMail Is Nothing)
Andreas
Navigation
[0] Themen-Index
[#] Nächste Seite
[*] Vorherige Sete
Zur normalen Ansicht wechseln