Autor Thema: Im Frontend prüfen, ob ein Dokument bereits gespeichert wurde  (Gelesen 10090 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.885
  • 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