Autor Thema: Frontend-Backend Probleme  (Gelesen 2835 mal)

Offline sja

  • Senior Mitglied
  • ****
  • Beiträge: 328
  • Geschlecht: Weiblich
  • Ich liebe dieses Forum!
Frontend-Backend Probleme
« am: 30.05.13 - 09:34:42 »
Hallo Zusammen,
Kennt jemand eine Lösung für folgendes  Problem
Eine Maske enthält eine Reihe von Buttons. Es ist nämlich internen Workflow-Prozess implementiert.
Wenn einen User A öffnet ein Dokument in dem nicht Bearbeitungsmodus und haltet das Dokument geöffnet nur zum Lesen. Dann öffnet anderen User B  dieses Dokument in dem Bearbeitungsmodus und betätigt einen von  Buttons. Dabei wird eine Email gesendet und bestimmte Werte gesetzt, das Dokument automatisch gespeichert und geschlossen. Dann entscheidet der User A, das bei ihm dieses bevor geöffneten Dokument in den Bearbeitungsmodus zu setzten, und dann beim Schlissen des Dokumentes passierte folgendes:
1.   Wenn der User  A keine Änderungen vornimmt, wird das Dokument trotzdem gespeichert, weil in der Maske in dem Script bei Queryclose bestimmte Prozesse mit der Speicherung programmiert sind. Und dann haben wir das Problem: da das Dokument beim User A im Frontend geöffnet war und kennt die Änderungen, die beim User B vorgenommen werden, werden die Änderungen von User B zurückgesetzt.
2.   Wenn der User A einige Änderungen vornimmt, dann beim Schlissen und Speichern entstehen zwei Konflikt-Dokumenten und dabei keinen Dokument die Änderungen vom User B enthält.
Das Problem, nehme ich an, bei  vielen Entwicklern schon bekannt ist. Vielen Dank im Voraus, wenn jemand mir dabei helfen möchte bzw. einen Link zur Lösung.
Hoffentlich habe ich mein Problem verständlich ausgedrückt trotz meinem keinen perfekten Deutsch  :)
« Letzte Änderung: 05.06.13 - 13:47:00 von sja »

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: Frontend-Backend Probleme
« Antwort #1 am: 30.05.13 - 10:55:54 »
Dein Deutsch ist perfekt genug, um das Problem verständlich zu machen.

Ich ignoriere bewusst, dass die Datenbank auf verschiedenen Servern liegen könnte.

Du könntest Dokument-Locking aktivieren, das verhindert, dass Benutzer A in den Bearbeitenmodus wechselt, während Benutzer B es im Bearbeitenmodus hat. Dein Problem scheint aber damit alleine nicht gelöst werden zu können.

Benutzer A öffnet das Dokument im Lesemodus
Danach bearbeitet Benutzer B, speichert und schließt das Dokument
Erst danach setzt Benutzer A das Dokument in den Bearbeitungsmodus -> Dokument Locking wirkt nicht, da B ja nicht mehr im Bearbeitenmodus ist

Bei mehreren Servern sehe ich keine realistische Chance, das Problem zu umgehen. Organisatorisch würde ich auf jeden Fall dafür sorgen, dass der Kreis der Benutzer, die gleichzeitig an einem Dokument in einem bestimmten Workflowstatus das Dokument bearbeiten können, so klein wie möglich halten (Autorensteuerung).

Weiterhin würde ich Speicherungsaktivitäten im Queryclose vermeiden, wenn es nicht absolut sein muss (ja, auch ich habe solche "Schweinereien" gemacht, Probleme bringt das immer mit sich).

Zwei Ansätze, die ich aber selbst noch nie ausprobiert habe:

1. Im Postmodechange nach Setzen in Bearbeitungsmodus ein Reload des Dokuments versuchen, damit die evtl. Änderungen von B nachgeladen werden

2. Im Querymodechange vor dem Setzen in Bearbeitenmodus das Dokument im Backend suchen, das letzte Änderungsdatum mit dem des aktuell geöffneten Dokuments vergleichen, ist das jünger, Dokument schließen, erneut öffnen und in den Bearbeitenmodus setzen

Offline sja

  • Senior Mitglied
  • ****
  • Beiträge: 328
  • Geschlecht: Weiblich
  • Ich liebe dieses Forum!
Re: Frontend-Backend Probleme
« Antwort #2 am: 30.05.13 - 12:03:54 »
Hallo Peter,
erst herzlichen Dank für Deine Antwort.
Also, wir haben nur für eine einziege Replik auf nur einem Server uns entschieden, da bei solchem sehr intensiven Workflow es nicht anderes geht.
Wenn bei einem User das Dokument in dem Bearbeitungsmodus geöffnet ist , dann haben wir kein Problem, weil beim Versuch vom anderen User das Dokument auch im Bearbeitungsmodus zu öffnen, wird das Dokument gesperrt.
Also, wie schon beschrieben wurde, haben wir nur das Problem, wenn das Dokument beim User A schon vorher im nicht Bearbeitungsmodus geöffnet war und nach den Änderungen vom User B in das Bearbeitungsmodus gesetzt wird.

Habe auch auf diesen Vortrag hier in atnotes gestoßen
http://atnotes.de/index.php/topic,33892.0.html
und ich habe folgendes:
Im Querymodechange ohne Datumsänderungs-Vergleich, also,  in jedem Fall das Dokument schließen, erneut öffnen und in den Bearbeitungsmodus setzen
und
im Postmodechange nach Setzen in Bearbeitungsmodus ein Reload des Dokuments ausprobiert:



Sub Querymodechange(Source As Notesuidocument, Continue As Variant)
   
   Dim thisdoc As NotesDocument
   Dim ws As NotesUIWorkspace
   Dim olduidoc As NotesUIDocument
   
   Set ws = New NotesUIWorkspace
   Set olduidoc=Source
   Set thisdoc= Source.Document
   thisdoc.SaveOptions ="0"
   
   olduidoc.Close(False)
   ws.ViewRefresh
   Call ws.Editdocument(True,  thisdoc)
   'doc.SaveOptions ="1"
   thisdoc.RemoveItem "SaveOptions"
   Source.Refresh
End Sub

Sub Postmodechange(Source As Notesuidocument)
   Source.Reload
End Sub

Leider ohne Erfolg   :'(

Sofia

Offline it898ur

  • Senior Mitglied
  • ****
  • Beiträge: 478
Re: Frontend-Backend Probleme
« Antwort #3 am: 30.05.13 - 13:15:26 »
Hallo,

ich kenne das Problem auch und wir prüfen bei problematischen Anwendungen beim Wechsel in den Bearbeitungsmodus, ob das Änderungsdatum des Backend-Dokumentes (wichtig: geholt über session.CurrentDatabase.GetDocumentByUNID und nicht aus dem WS abgeleitet) ein anderes ist als das Änderungsdokument des aktuellen Frontenddokumentes (ws.CurrentDocument.Document).

Ist dies der Fall wird das Frontenddokument geschlossen und anschließend das Backend-Dokument im Bearbeitungsmodus geöffnet.

Alle vVersuche den aktuellen Stand über ein Objekt zu erreichen, welches aus dem Frontend geladen wurden (wie hier im Beispielcode) liefern immer den alten Stand !

Gruß

André

Offline sja

  • Senior Mitglied
  • ****
  • Beiträge: 328
  • Geschlecht: Weiblich
  • Ich liebe dieses Forum!
Re: Frontend-Backend Probleme
« Antwort #4 am: 30.05.13 - 14:47:51 »

Vielen Dank Andrè für den Tipp.

Eigentlich spielt keine Rolle ob doc. geändert war, ich mache das auf jedem Fall  und habe es  so ausprobiert

Sub Querymodechange(Source As Notesuidocument, Continue As Variant)
   
   Dim thisdoc As NotesDocument
   Dim ws As NotesUIWorkspace
   'Dim db As NotesUIDatabase
   Dim olduidoc As NotesUIDocument
   
   unid$ = thisdoc.UniversalID
   
   Dim s As NotesSession   
   Dim doc As NotesDocument
   Set s = New NotesSession
   
   Set doc = s.CurrentDatabase.GetDocumentByUNID(unid$)
   
   Set ws = New NotesUIWorkspace
   Set olduidoc=Source
   Set thisdoc= Source.Document
   thisdoc.SaveOptions ="0"
   
   olduidoc.Close(False)
   ws.ViewRefresh
   
   Call ws.Editdocument(True,  doc)
   
   doc.RemoveItem("SaveOptions")
   'thisdoc.RemoveItem("SaveOptions")
   'Source.Refresh
   
End Sub

und die Ergebniss genauso wie frühe. Weiß nicht was ich falsch mache  ???

Sofia

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: Frontend-Backend Probleme
« Antwort #5 am: 03.06.13 - 09:35:02 »
Probier das mal so (ungetestet)
Code
Sub Querymodechange(Source As Notesuidocument, Continue As Variant)
   If Source.EditMode Then
      Exit Sub
   End If
   Continue = False
   Dim doc As NotesDocument
   Set doc = Source.Document
   Dim unid As String
   unid = doc.UniversalID

   doc.SaveOptions = "0"
   Call Source.Close
   Delete doc

   Dim session As New NotesSession
   Dim db As NotesDatabase
   Set db = session.CurrentDatabase
   Set doc = db.GetDocumentByUnid (unid)
   
   Dim workspace As New NotesUIWorkspace
   Call workspace.EditDocument (True, doc)
End Sub

Offline pram

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.170
  • Geschlecht: Männlich
    • Foconis Object Framework
Re: Frontend-Backend Probleme
« Antwort #6 am: 03.06.13 - 10:19:01 »
Da die Lock-Funktionen von Notes hier nicht ausreichend sind, machen wir das ähnlich wie André geschrieben hat,

allerdings funktioniert das erneute Holen über getDocumentByUNID nicht immer. (Delete doc erforderlich, was wieder neue Probleme bereitet)
bei uns gibt es deshalb zu jedem Dokument noch ein kleines Lock-Dokument in dem der aktuelle Status des Dokumentes gespeichert ist (wer hat das Dokument offen und seit wann, wann wurde es gespeichert....)

Beim Wechsel in den Bearbeiten-Modus wird dann mit Hilfe des Lock-Dokuments geprüft, ob in der Zwischenzeit das Dokument anderweitig gespeichert wurde oder sogar noch offen ist.
Das Suchen und Finden des Lock-Dokumentes funktioniert dabei über die UNID die in einer definierten Art und Weise abgeändert wird (z.B. eine Stelle austauschen), somit ist keine zusätzliche Lookup-Ansicht erforderlich und die Dokumente könnten auch in einer eigenen "Lock-Datenbank" liegen, die von allen Servern erreichbar ist.

Gruß
Roland
Roland Praml

IBM Certified Application Developer - Lotus Notes and Domino 8
Ich verwende das Foconis Object Framework

Offline sja

  • Senior Mitglied
  • ****
  • Beiträge: 328
  • Geschlecht: Weiblich
  • Ich liebe dieses Forum!
Re: Frontend-Backend Probleme
« Antwort #7 am: 03.06.13 - 10:33:57 »
Lieber Peter,
das ist es, super! Funktioniert!
Herzlichen Dank! Du hast mich gerettet.

Und herzlichen Dank an alle beteiligten! Ich bin unendlich dem ATNOTES dankbar, hier habe ich schon viel Mals ganz wirksame Hilfe bekommen! Und ich denke auch, dass die Information in diesem Vortrag auch für vielen anderen sehr hilfreich wird.

Liebe Grüße

Sofia

« Letzte Änderung: 03.06.13 - 10:42:59 von sja »

Offline sja

  • Senior Mitglied
  • ****
  • Beiträge: 328
  • Geschlecht: Weiblich
  • Ich liebe dieses Forum!
Re: Frontend-Backend Probleme
« Antwort #8 am: 03.06.13 - 10:53:49 »
aber dazu auch nicht vergessen:

Sub Postmodechange(Source As Notesuidocument)
   Source.Reload
End Sub

ohne Reload funktioniert es nicht.

 :)

Sofia

Offline sja

  • Senior Mitglied
  • ****
  • Beiträge: 328
  • Geschlecht: Weiblich
  • Ich liebe dieses Forum!
Re: Frontend-Backend Probleme
« Antwort #9 am: 03.06.13 - 12:24:28 »
Stop,

leider die Freude war zu früh, funktioniert nicht immer. Werde weiter testen und berichten.
Schade  :(

Sofia

Offline sja

  • Senior Mitglied
  • ****
  • Beiträge: 328
  • Geschlecht: Weiblich
  • Ich liebe dieses Forum!
Re: Frontend-Backend Probleme
« Antwort #10 am: 05.06.13 - 13:46:37 »
Hallo Zusammen,


also, mit dieser Lösung

Sub Querymodechange(Source As Notesuidocument, Continue As Variant)   
   If Source.EditMode Then
      Exit Sub
   End If
   Continue = False
   Dim doc As NotesDocument
   Set doc = Source.Document
   Dim unid As String
   unid = doc.UniversalID
   
   doc.SaveOptions = "0"
   Call Source.Close
   Delete doc
   
   Dim session As New NotesSession
   Dim db As NotesDatabase
   Set db = session.CurrentDatabase
   Set doc = db.GetDocumentByUnid (unid)
   
   Dim workspace As New NotesUIWorkspace
   Call workspace.EditDocument (True, doc)
   
End Sub

Sub Postmodechange(Source As Notesuidocument)
   Source.Reload
End Sub


doch funktioniert, ich musste nur noch dazu einen Script, der verschiedene  Bewertungen und Funktionen ausführt,  aus QueryClose in den QuerySave verschieben.


Noch mal herzlichen Dank für die Hilfe!

Grüße

Sofia


 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz