Das Notes Forum

Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: HH am 14.05.14 - 14:41:42

Titel: Im Frontend prüfen, ob ein Dokument bereits gespeichert wurde
Beitrag von: HH am 14.05.14 - 14:41:42
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
Titel: Re: Im Frontend prüfen, ob ein Dokument bereits gespeichert wurde
Beitrag von: Driri am 14.05.14 - 15:02:56
Wie genau erstellst Du denn das Dokument ? Mit IsNewDoc habe ich schon öfters gearbeitet und kann mich nicht erinnern, da Probleme gehabt zu haben.
Titel: Re: Im Frontend prüfen, ob ein Dokument bereits gespeichert wurde
Beitrag von: HH am 14.05.14 - 15:28:35
Sorry, da habe ich wohl falsch getestet.

uidoc.isNewDoc arbeitet wie gewünscht.

Asche auf mein Haupt!

Gruß
Hubert
Titel: Re: Im Frontend prüfen, ob ein Dokument bereits gespeichert wurde
Beitrag von: Peter Klett am 14.05.14 - 15:40:22
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 ...
Titel: Re: Im Frontend prüfen, ob ein Dokument bereits gespeichert wurde
Beitrag von: HH am 14.05.14 - 15:59:37
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
Titel: Re: Im Frontend prüfen, ob ein Dokument bereits gespeichert wurde
Beitrag von: Tode am 15.05.14 - 08:26:57
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...)
Titel: Re: Im Frontend prüfen, ob ein Dokument bereits gespeichert wurde
Beitrag von: HH am 16.05.14 - 11:36:44
Hallo Torsten,

das funktioniert auch mit 6.5. Danke.

Gruß
Hubert