Das Notes Forum
Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: Don Pasquale am 14.02.03 - 14:54:35
-
Hallo Leute,
in meiner Anwendung ( die nie Lokal, sondern nur auf genau einem Server liegt) greifen verschiedene Anwedner auf eine Sicht zu und ziehen sich Dokumente in ihre privaten Ordner.
Wie kann ich verhindern, dass dabei dasselbe Dokument dann bei 2 verschiedenen Personen liegt ?
Ciao
Don Pasquale
-
Z.B. mit einem Leserfeld in den Dokumenten, dass beim Verschieben in den Ordner (wo genau auch immer) gesetzt wird.
-
... ganz so einfach ist es nicht. Was ist, wenn ein User auf einem Server das Doc in seinen Ordner zieht, und jemand anders auf einem anderen Server auch - der zweite denkt er hat das Dokument auch...
... Um das sauber zu matchen muß ein zentraler Server zu jeder Zeit erreichbar sein - dort wird in einer DB die Vergabe entschieden - oder es muß ein Konflikthandling eingeführt werden - bei Speicher- und Replizierkonflikten...
ata
-
Was ist hiervon zu halten :
Annahmen: Die Anwendung liegt zentral auf dem Server
Annahmen: Wird ein Dokument angewählt, sollen alle
Dokumente derselben Kategorie (e4ihk_Identnummer)
mitverschoben werden.
Zuerst wird geprüft ob das Feld AUSGECHECKT leer ist.
Dann wird der eigenen Name hineingeschrieben
Steht bei der 2 Prüfung immer noch der eigene Name drin,
dann war alles in Ordnung.
Das ist das QueryAddToFolder der Ansicht
Sub Queryaddtofolder(Source As Notesuiview, Target As Variant, Continue As Variant)
' ************************
Dim ws As New NotesUiWorkspace
Call ws.viewrefresh
' ************************
Dim session As New NotesSession
Dim nnUserName As New NotesName(session.UserName)
' ************************
Dim docList As String
Dim LISTE List As String
Dim Konflikt As Integer
Dim OK As Integer
Konflikt = 0
Dim doc As NotesDocument
' ************************
For k = 1 To Source.Documents.Count
Set doc = Source.Documents.GetNthDocument(k)
If Iselement(LISTE(doc.e4ihk_Identnummer(0)) ) Then
' NIX
Else
LISTE(doc.e4ihk_Identnummer(0)) = doc.e4ihk_Identnummer(0)
docList = docList & Chr(10) & doc.e4ihk_Identnummer(0) & " " & doc.sf_Firmierung(0)
End If
Next k
Forall x In Liste
If isAusgechecktVorgang( LISTE(x) ) Then
Konflikt = 1
End If
End Forall
If Konflikt = 1 Then
Messagebox " Der Vorgang ist teilweise ausgecheckt"
Exit Sub
Else
Forall x In Liste
Anzahl = SETZE_ID_AUF_AUSGECHECKT(LISTE(x) , nnUserName.Common)
End Forall
End If
MELDUNG$ = "Wollen Sie folgende Vorgänge übernehmen ?" & Chr(10) & docList
OK = Messagebox(MELDUNG$, MB_OKCANCEL,"Vorgänge übernehmen")
If OK = 1 Then
Select Case IDOKCANCEL
Case 1:
Forall x In Liste
Anzahl = SETZE_ID_AUF_INITIATOR(liste(x), nnUserName.Common)
Anzahl = SETZE_ID_AUF_EINGECHECKT(LISTE(x) )
End Forall
Case 2:
Forall x In Liste
Anzahl = SETZE_ID_AUF_EINGECHECKT(LISTE(x) )
End Forall
Continue = False
End Select
End If
End Sub
-
... ich denke das reicht noch nicht , habe aber erst heute Abend Zeit mir deinen Code genauer anzuschauen..
ata
-
Sodele,
... wenn die Anwedung zentral nur auf diesem Server liegt, dann könnte das funktionieren - allerdings würde ich noch eine Überprüfung einbauen, daß die Anwendung auch wirklich auf dem dafür vorgesehenen Server liegt - und nicht etwa bei einem User Lokal oder sonstwo...
... denn sonst würdest du ein Konfliktmanagement benötigen..
ata
-
@Ata :
Vielen Dank für Deine Antwort, jetzt traue ich mich, das Teil vom Anwender testen zu lassen.
zu eben :
Meinst Du vielleicht im Postopen Ereignis der Anwendung so etwas ? :
@If(@Name([CN]; @Subset(@DbName; 1)) != "";@Return(""); @Do(
@Prompt([OK];"Restriction"; "Database can only run on server");
@PostedCommand([FileCloseWindow]) ) )
Weitere Idee :
Ich habe gelesen, dass man Lock-Objekte erzeugen kann, bringt das hier etwas oder ist der nur für Agenten ?
ciao
Don Pasquale
-
Moin moin
@If(@Name([CN]; @Subset(@DbName; 1)) != "";@Return(""); @Do(
@Prompt([OK];"Restriction"; "Database can only run on server");
@PostedCommand([FileCloseWindow]) ) )
... damit unterbindest du eine lokale Verwendung der DB. Du kannst es auch beim Verschieben wollen abfragen, dann kann die DB Lokal verwendet werden, aber Dokumente nicht verschoben...
Ich habe gelesen, dass man Lock-Objekte erzeugen kann, bringt das hier etwas oder ist der nur für Agenten ?
... ist denke ich nur für Agenten - in R6 siehts dann besser aus...
ata