Das Notes Forum
Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: bob am 19.07.03 - 19:12:53
-
Hi,
ich habe in einer DB eine Maske u.a. mit dem Feld "Status". Des weiteren sind die Rollen [AlleMitarbeiter] und [T] vorhanden. Des weiteren noch mehrere Ansichten etc.
Was ich bräuchte:
Wenn ein Dokument den Status "In Bearbeitung" hat, dann soll dieses zwar für [AlleMitarbeiter] in den Ansichten erscheinen, aber wenn ein User das Dokument aus der Ansicht heraus (oder via Doc-Link) öffnen will, soll eine Meldung kommen à la "Dok ist in Bearbeitung und darf nicht geöffnet werden", und das Dok soll sich eben nicht öffnen lassen. Nur User mit Rolle [T] sollen das Dok lesen & editieren dürfen.
Nur wenn das Dok den Status "Freigegeben" hat, sollen [AlleMitarbeiter] auch lesen dürfen.
Klar, ich könnte die Doks in der/den Ansicht/en ausblenden, aber
1) möchte ich, dass der Anwender zumindest sieht dass ein Dok vorhanden ist
2) könnte ja der Anwender dann über einen ggf. vorhandenen Dok-Link auf das
Dok zugreifen.
Meine Versuche über Queryopen / Postopen - Abfragen per Formelsprache waren leider nicht erfolgreich :(
Grüße,
Bob
-
Hi,
Du kannst Script verwenden, um zu verhindern, dass das Dokument in den Bearbeitenmodus gesetzt wird.
Habe ich gerade in einer DB programmiert (allerdings unter R4):
(Declaration)
Const ALLOW_ROLE = "[T]"
Dim UserHasAllowRole As Integer
dim Close_Doc_Postopen as integer
dim Status as string
Sub Queryopen(Source As Notesuidocument, Mode As Integer, Isnewdoc As Variant, Continue As Variant)
Close_Doc_Postopen = False
'Prüfe, ob User Rolle [T] hat
UserHasAllowRole = False
userroles = Evaluate("@UserRoles")
Forall rolename In userroles
If rolename = ALLOW_ROLE Then
UserHasAllowRole = True
Exit Forall
End If
End Forall
'Falls das Dokument im Bearbeitenmodus geöffnet wird: In Lesemodus setzen (Dok. wird nach QueryOpen durch Maskeneigenschaft in Bearbeitenmodus gesetzt)
If Not Isnewdoc Then
If Source.Document.Status(0) = "In Bearbeitung" And Not UserHasAllowRole Then
If Source.EditMode Then
Msgbox "Diese Dokument wird bereits bearbeitet.",_
0+64,"Hinweis"
Continue = False
Close_Doc_Postopen = True
End If
End If
End If
End Sub
Sub Postopen(Source As Notesuidocument)
'Dokument schließen, falls im Bearbeitenmodus geöffnet wurde und der Status = "Fertig" ist
If Close_Doc_Postopen Then
Call Source.Close
Exit Sub
End If
End Sub
Sub Querymodechange(Source As Notesuidocument, Continue As Variant)
If Not Source.EditMode Then
If Source.Document.Status(0) = "In Bearbeitung" And Not UserHasAllowRole Then
If Source.EditMode Then
Msgbox "Diese Dokument wird bereits bearbeitet.",_
0+64,"Hinweis"
Source.EditMode = False
Continue = False
End If
End If
end if
End Sub
-
Hi Glombi,
Du kannst Script verwenden, um zu verhindern, dass das Dokument in den Bearbeitenmodus gesetzt wird.
Danke, aber der Anwender (Rolle [AlleMitarbeiter]) soll nicht lesen dürfen...
bye,
Bob
******* EDIT *******
Nachtrag: Wer Bearbeiten darf, manage ich über Autor-Felder; wer lesen darf über Leser-Feld; aber selbst wenn in Lesefeld [AlleMitarbeiter] eingetragen ist, sollen diese erst lesen dürfen, wenn Status = "Freigegeben".
******* EDIT *******
-
Sorry Glombi,
Dein Script war durchaus sehr hilfreich für mich, ich hab's mir nochmal genauer angesehen.....
Realisiert habe ich es wie folgt im QueryOpen:
Sub Queryopen(Source As Notesuidocument, Mode As Integer, Isnewdoc As Variant, Continue As Variant)
Const ALLOW_ROLE = "[T]"
Dim UserHasAllowRole As Integer
Dim Close_Doc_Postopen As Integer
Dim QM_Status As String
Close_Doc_Postopen = False
'Prüfe, ob User Rolle [T] hat
UserHasAllowRole = False
userroles = Evaluate("@UserRoles")
Forall rolename In userroles
If rolename = ALLOW_ROLE Then
UserHasAllowRole = True
Exit Forall
End If
End Forall
'Falls Doc im Status "In Bearbeitung" und User ist NICHT = Rolle [T]: Dok nicht öffnen!
If Source.Document.QM_Status(0) = "In Bearbeitung" And Not UserHasAllowRole Then
Messagebox "Das Dokument ist in Bearbeitung und nicht Freigegeben. Daher dürfen Sie es nicht öffnen.", MB_OK, "Keine Berechtigung"
Continue = False
End If
End Sub
Bye,
Bob