Autor Thema: Im Frontend prüfen, ob ein Dokument bereits gespeichert wurde  (Gelesen 10196 mal)

Offline HH

  • Senior Mitglied
  • ****
  • Beiträge: 339
  • Geschlecht: Männlich
Hallo,

bevor ich in einer emedded View innerhalb einer Maske neue Dokumente erstelle, möchte ich prüfen, ob das (Haupt-) Dokument bereits gespeichert wurde

Wie kann ich mit LS sinnvoll prüfen, ob ein im Frontend mit compose erstelltes Dokument bereits gespeichert wurde?

uidoc.isnewdoc ist immer false
doc.isnewnote ist immer true (solange das Dokument noch nicht geschlossen wurde)

doc.universalid und doc.created haben immer einen Wert.

Geht das nur durch setzen eines Feldes im Postsave oder Fehlerbehandlung für doc.getdocumentByUNID( uidoc.document.universalID )?

Gruß
Hubert

Driri

  • Gast
Wie genau erstellst Du denn das Dokument ? Mit IsNewDoc habe ich schon öfters gearbeitet und kann mich nicht erinnern, da Probleme gehabt zu haben.

Offline HH

  • Senior Mitglied
  • ****
  • Beiträge: 339
  • Geschlecht: Männlich
Sorry, da habe ich wohl falsch getestet.

uidoc.isNewDoc arbeitet wie gewünscht.

Asche auf mein Haupt!

Gruß
Hubert

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Wichtig ist, dass das Dokument wirklich mit Compose erstellt wird. Bei einem

Dim doc As New NotesDocument (db)
doc.Form = "test"
Set uidoc = workspace.EditDocument (True, doc)

ist uidoc.IsNewDoc = False, denn schließlich ist es ja uralt ...

Offline HH

  • Senior Mitglied
  • ****
  • Beiträge: 339
  • Geschlecht: Männlich
Die Feststellung habe ich gerade auch gemacht. Das Dokument wurde tatsächlich wie von Peter beschrieben erstellt.

Ich helfe mir nun mit der folgenden Funktion:

Code
Function hasDocBeingSaved( uidoc As NotesUIDocument ) As Variant
On Error Goto fehler
Dim tempDoc As NotesDocument
Set tempDoc = uidoc.Document.ParentDatabase.GetDocumentByUNID( uidoc.Document.UniversalID )
If Not tempDoc Is Nothing Then
hasDocBeingSaved = True
End If
weiter:
Exit Function
fehler:
If Err = 4091 Then
'Dokument wurde noch nicht gespeichert
'fehlerhaft universalID
hasDocBeingSaved = False
Else
Msgbox Error & Chr(13) & "Zeile: " & Erl & Chr(13) & "nr.: " & Err, 16, "Fehler"
End If
Resume weiter
End Function

Danke für die Hinweise!

Gruß
Hubert

Offline Tode

  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 6.896
  • Geschlecht: Männlich
  • Geht nicht, gibt's (fast) nicht... *g*
Also wir haben seit geraumer Zeit eine Funktion im Einsatz, die zumindest unter 8 und 9 zuverlässig funktioniert:

Code
Function Our_IsNewDoc( doc As NotesDocument ) As Boolean
On Error Goto ErrorRoutine
'===================================================================================================================================
Our_IsNewDoc = (doc.Lastmodified = 0)
'===================================================================================================================================
EndOfRoutine:
Exit Function
ErrorRoutine:
If ErrorHandler (GetThreadInfo (LSI_THREAD_PROC), GetThreadInfo (LSI_THREAD_CALLPROC)) = ERRORHANDLER_TOP_OF_STACK Then
Resume EndOfRoutine
End If
End Function

Nicht vom Error- Handler irritieren lassen, das ist unser default- Error- Handler, den müsstest Du natürlich ersetzen.

Habe leider grade keinen 6er Client da, um zu prüfen, ob das dort auch so ist.

In der Formelsprache haben wir ein Computed- For- Display- Feld mit der Formel:
Code
@Text( @Modified - @Created < 5 )
Dabei ist die 5 ein Wert, der ein wenig Paranoia, ein wenig Erfahrung wiederspiegelt, denn manchmal liegen @Modified und @Created tatsächlich einige wenige Sekunden auseinander...

Ach ja: Das Feld ist Text, weil ich mir dann die Nummern- Umwandlung bei der Abfrage spare, und weil man sonst im Backend unschöne Ergebnisse bekommt, wenn man z.B. Feld <> 1 abfragt und das Feld nicht vorhanden ist (Zahl erwartet...)
« Letzte Änderung: 15.05.14 - 08:29:25 von Tode »
Gruss
Torsten (Tode)

P.S.: Da mein Nickname immer mal wieder für Verwirrung sorgt: Tode hat NICHTS mit Tod zu tun. So klingt es einfach, wenn ein 2- Jähriger versucht "Torsten" zu sagen... das klingt dann so: "Tooode" (langes O, das r, s und n werden verschluckt, das t wird zum badischen d)

Offline HH

  • Senior Mitglied
  • ****
  • Beiträge: 339
  • Geschlecht: Männlich
Hallo Torsten,

das funktioniert auch mit 6.5. Danke.

Gruß
Hubert

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz