Das Notes Forum
Domino 9 und frühere Versionen => ND7: Entwicklung => Thema gestartet von: Big768 am 05.11.08 - 16:56:40
-
Liebe Noteskolleginnen und - kollegen,
ich habe eine Datenbank erstellt, in der des öfteren folgende Fehlermeldung erscheint:
IBM Lotus Notes: Eine weitere Kopie dieses Dokuments wurde gespeichert, während Sie das Dokument bearbeitetn. Sollen Ihre Änderungen auch als Konfliktdokument gespeichert werden?
Wie kann ich diesen Fehler unterbinden?
Unter den Datenbankeigenschaften habe ich schon angehakt: Sperren von Dokumenten zulassen
In der Maske habe ich angehakt: Konflikte nicht erstellen
Aber trotzdem erscheint die Fehlermeldung. Durch "Sperren von Dokumenten zulassen" können doch eigentlich keine zwei Benutzer ein Dokument bearbeiten.?
Vielen Dank für Eure Hilfe im voraus.
Johann
-
Hast Du Code im QuerySave der Maske zu stehen? Ggf. auch im Query- oder PostOpen oder im PostRecalc? Kommt da NotesDocument.Save vor?
Bernhard
-
Im "PostOpen" steht ein "Call thisdoc.save( False, False)" und ein "Call doc.save( True, True )" für Documente die erstellt werden.
-
Dokumente sperren geht nur wenn ein Administrationsserver eingetragen wurde, siehe ACL.
-
Und Dokumentsperrung würde hier gar nichts nützen - hier wird ganz bewusst ein Speicherkonflikt erzeugt. Die Programmlogik muss da geändert werden.
Bernhard
-
Im "PostOpen" steht ein "Call thisdoc.save( False, False)" und ein "Call doc.save( True, True )" für Documente die erstellt werden.
Na da sind ja auch schon die Problemmacher. Bitte hold Dir einen Baseballschläger und besuche den Entwickler der Datenbank.
-
Ich bin kein Masochist.
-
tritt den der Fehler manchmal oder immer auf?
-
@Bläschenjunge: Mit den doc.save calls tritt das Problem immer auf.
-
Der Fehler tritt manchmal auf.
Hilft es, wenn ich den Programmcode von "PostOpen" in eine Schaltfläche kopiere?
-
Nein - das dürfte nichts ändern (allerdings kenne ich Dein Vorhaben nicht).
Du solltest Dich mit dem möglichen Gegensatz zwischen Back- and Frontend auseinandersetzen ...
Wenn wir helfen sollen, dann beschreibe bitte, was Du dort zu welchem Zweck überhaupt treibst.
Bernhard
-
Ich habe eine Datenbank: Nennen wir sie Materialanforderung
Der Anwender soll beim Start sofort alle bestellbaren Artikel sehen und auswählen können.
Wenn die Maske geöffnet wird, erstelle ich zunächst ein Kopf Dokument mit den Bestelldaten und für jeden bestellbaren Artikel eine Positions-Dokument. Die Positionen zeige ich dann in einer eingebetteten Ansicht an. Durch einen Doppelklick auf eine Position kann er angeben wieviel Stück er davon benötigt. Abschließend kann er die Bestellung an Lager senden, dass ihm dann die Waren zusendet.
Das erstellen des Bestellkopfes und der Positionen mache ich im PostOpen.
Ich kann mir vorstellen, dass man dass mit Anwortdokumenten eleganter lösen kann aber diese Technik hat bei mir noch nie funktioniert.
-
@Bläschenjunge: Mit den doc.save calls tritt das Problem immer auf.
Warum muss "doc.save" immer ein Konflikt erzeugen?? So etwas schreib mindestens 2 mal täglich!
-
Das frage ich mich auch.
-
Warum muss "doc.save" immer ein Konflikt erzeugen?? So etwas schreib mindestens 2 mal täglich!
aber nicht im PostOpen, oder....
jo
-
Warum denn nicht??
Ihr wisst doch gar nicht was "thisdoc" ist, kann doch ein Dokument einer anderen DB sein oder was weiß ich ... wurde doch bisher gar nicht beschrieben, woher nehmt ihr denn euer Wissen?
-
sorry, war grad kurz angebunden. doc.save geschieht im Backend, im Postopen ist das Dokument aber bereits im Frontend geöffnet, kriegt dann den Focus, wird im Frontend geändert und dann gespeichert (im Backend, welches aber zuvor schon gespeichert wurde).
Wieviele Backend-Doks haben wir nun ?! ::)
bitte ankreuzen
[ ] 1
[ ] 2
[ ] 1,5
[ ] weiss nicht
Jo
P.S. Es gibt binär gesehen nur 2 Zustände: 10
-
woher nehmt ihr denn euer Wissen?
Erfahrung ;D
jo
-
woher nehmt ihr denn euer Wissen?
Erfahrung ;D
jo
na dann löse doch mal das Problem mit deiner Erfahrung ;)
-
gern, wo soll ich hinreisen ?! Rechnungsadresse ?!
doc.save oder thisdoc.save wird wohl kaum auf docinotherdatabase verweisen ?!
auch die Konstellation oben deutet nicht auf die Zusammenarbeit mehrerer Datenbanken hin...
oder ?!
jo
-
Bevor das jetzt in Streitereien wegen (untauglichen) Deutungsversuchen ausartet:
Johann ("Big768"), bitte Fakten auf den Tisch. Sonst kann Dir keiner helfen.
Bernhard
-
Also die Deutungsversuche waren schon nicht schlecht und ich denke es hat etwas mit dem Gegensatz Front- und Backend zu tun.
Die Maske wird geöffnet und im PostOpen werden zunächst mit call thisdoc.save die Kopfdaten in einem Dokument in der Datenbank gespeichert.
Anschließend werden im PostOpen die Artikel eingelesen und für jeden Artikel wird ein Positionsdokument erstellt. Es wird mit call doc.save gespeichert.
Anbei der Kerncode:
Kopfdaten:
If source.document.noteid = "0" Then
Set uiDoc = ws.CurrentDocument
Set db = session.currentDatabase
Set thisDB = session.CurrentDatabase
Set thisDoc = ws.CurrentDocument.Document
Set doc = db.CreateDocument
.
.
.
Call thisDoc.Save( False, False )
.
.
.
' Positionsdaten:
Set dbgk = New NotesDatabase( "Server", "Positionen.nsf" )
Set viewgk = dbgk.getview( "aktiv" )
Set vcgk = viewgk.AllEntries
.
.
.
For L = 1 To vcgk.Count
Set entry = vcgk.GetNthEntry(L)
Set docgk = entry.Document
.
.
.
Call doc.save ( False, False)
Next
End if
Kann ich für das Frontend oder Backend eine Zeitverzögerung einbauen, damit die gleich sind?
-
Du musst Änderungen und anschliessendes Speichern im Front- und Backend jeweils sauber trennen.
und ggf. das Frontenddokument schliessen und wiederöffnen, um die Änderungen aus dem Backend ins Frontend zu bringen.
eine Zeitverzögerung hilft da gar nichts.
-
Hallo allerseits,
wenn denn im Postopen unbedingt das korrespondierende Backend-Dokument gespeichert werden muss, warum dann nicht im QueryModeChange-Ereignis der Maske
Call notesUIDocument.Reload( )
einfügen?
Viele Grüße
Thorsten
-
Das probiere ich mal aus.
Außerdem schließe die "Call thisDoc.Save" und "Call Doc.Save" mit ( False, False ).
Schon mal vielen Dank. :)
Johann