Das Notes Forum
Domino 9 und frühere Versionen => ND7: Entwicklung => Thema gestartet von: Haschn am 28.12.06 - 10:24:25
-
Hallo zusammen,
ich habe eine Datenbank geschrieben, in der ein Dokument vom Benutzer bearbeitet werden kann, aber gleichzeitig ein Agent alle paar minuten vom Backend reinschreibt. Dann führt dies ja logischerweise ständig zu der Konfliktdokumentfrage.
Mit Konfliktbehandlung kenn ich mich nicht sehr gut aus. Ist es möglich dem Dokument bei der Speicherung zu sagen, Generiere ein Dokument aus allen Feldern des Frontends und nimm dann die im Backend geänderten Felder hinzu?
Oder wie würdet ihr damit umgehen?
Vielen Dank für die Hilfe!
Gruß Andy
-
ich würde die logik überdenken... Müssen der Benutzer und der Agent tatsächlich GLEICHZEITIG laufen ? Kannst Du nicht das Dokument, das sowieso gerade im Frontend bearbeitet wird, von Deinem Backend- Agenten ausnehmen ?
Hier krankt es nicht nicht an der Konflikt- Behandlung, sondern vielmehr am Konzept.
Möglich ist ein solches "manuelles Mischen" natürlich schon, aber der Programmieraufwand ist wesentlich höher, als wenn Du Dich einmal hinsetzt und ein sauberes Konzept aufstellst.
Tode
-
Warum nicht einfach das Dokument locken ??
KAI
-
Gibt es nicht einen Parameter beim Speichern? Einen "nicht speichern, wenn ein anderer User das Dok bearbeitet"? Hab meine Hilfe nicht parat, aber mir war so.
Matthias
-
Gibt es nicht einen Parameter beim Speichern? Einen "nicht speichern, wenn ein anderer User das Dok bearbeitet"? Hab meine Hilfe nicht parat, aber mir war so.
Matthias
Ja, dafür sind aber zwei Parameter zuständig.
flag = notesDocument.Save( force, createResponse [, markRead ] )
force und createResponse müssen auf false gesetzt werden.
Axel
-
An der Fraglichkeit des Konzepts ändert das aber nichts. Ausserdem wirkt das nur, wenn während der Bearbeitung des Dokuments eben dieses Dokument durch einen anderen bearbeitet und bereits wieder gespeichert wurde - ein eher unwahrscheinlicher Fall, der dazu führt, dass die manuelle Bearbeitung verworfen und mit dem Ergebnis des Agents ersetzt wird. Eher dürfte es passieren, dass der Anwender beim Speichern damit konfrontiert wird, dass das System im sagt, es läge eine weitere Modifikation vor (was er natürlich meist tapfer überliest und so einen Speicherkonflikt verursacht).
Bernhard
-
An der Fraglichkeit des Konzepts ändert das aber nichts.
Das ist wohl wahr. Aber das wurde ja weiter oben schon angemekrt und der Fragesteller hat sich bisher noch nicht dazu geäußert.
Axel
-
Vielleicht darf ich in diesem Zusammenhang aber nochmal eine Frage stellen ;D ?
Bernhard, das habe ich nicht ganz verstanden:
"Ausserdem wirkt das nur, wenn während der Bearbeitung des Dokuments eben dieses Dokument durch einen anderen bearbeitet und bereits wieder gespeichert wurde"
Bedeutet das: der Agent "merkt" sich den letzten Speicherzeitpunkt des Doks und wenn während der Laufzeit des Agenten das Dokument manuell gespeichert wurde, greifen die Speicherparameter? Und das Dok wird dann nicht vom Agenten gespeichert?
Matthias
-
Mit den genannten Parametern wird eben doch gespeichert - und zwar OHNE Erzeugung eines Speicherkonflikt-Dokuments. "The winner takes it all" heisst dann die Devise, und es gilt diesmal nicht "Wer zu spät kommt, den bestraft das Leben", sondern wer zuletzt speichert, ist der Sieger.
Bernhard
-
Und wenn der FORCE-Paramter 'False' ist und der User der Sieger ist, werden die Änderungen des Agenten nicht gespeichert? Und es wird auch kein Konflikt angelegt?
Sorry für meine Hartnäckigkeit...
Matthias
-
Das steht doch in der DesignerHelp beschrieben: Wer als letzter speichert, überschreibt das Dokument. Es wird kein Konflikt-Dokument angelegt. Und es gilt nur für die Aktion, die NotesDocument.Save mit den Parametern verwendet - im Frontend des Clients passiert also vermutlich etwas anderes (da anders programmiert).
Bernhard
-
Mein Vorschlag:
Im QueryOpen das Dokument in einen Folder legen.
Der Backend-Agent verarbeitet alle Dokumente nicht, die sich in dem Folder befinden.
Im QueryClose das Dokument aus dem Folder nehmen.
Nachts den Folder leeren, falls mal ein Client abstürzen sollte ::)
Gruss
Chris
-
Chris, ich schwimme hier zu hundert Prozent auf Torstens (Tode's) Welle. Das Konzept ist mehr als strittig, und Dein Vorschlag für einen Workaround macht das Konzept nicht unbedingt besser. Dokumente zu ermitteln, die in einem bestimmten Folder liegen und diese Collection dann aus einer vermutlich viel grösseren auszuschliessen, ist ja auch nicht gerade das Gelbe vom Ei.
Abgesehen davon: Der Fragesteller hat sich seit Fragestellung um diesen Thread bislang überhaupt nicht gekümmert. Trotzdem gut, das wir darüber gesprochen haben ;) Dümmer geworden sind wir dabei nicht.
Bernhard