Sub Queryopen(Source As Notesuidocument, Mode As Integer, Isnewdoc As Variant, Continue As Variant)
If mode = 1 Then Continue = False
End Sub
Verhinderst du damit nicht das Editieren von jedem Dokument dieser Maske, also nicht nur die, welche im Feld "Status" einen bestimmten Wert haben.
Ich glaube im QueryOpen hast du das Problem, dass du keine Feldwerte abfragen kannst.
Klassische Lösung - wie auch hier des öfteren gepostet - ist zusätzlich zum code in querymodechange, code in postopen, so nach der Art :
if doc.getItemValue("status")(0) = "wertx") then
if (Source.editmode = true) then
Msgbox "verbohten"
continue = false
Exit sub
end if
end if
Wir hatten letztens eine längere Debatte, wo die Fraktion "man-löst-solche-Dinge-mit-Autorenfeldern" gute Argumente hatten. Einziger Nachteil ist, daß Autoren-Felder nur für Autoren gelten.
Richtig sicher ist das nämlich nicht, Sicherheit an die Maske zu binden (diese Lösung) und nicht ans Dokument (Autrenfelder). Die Maske kann nämlich vom Dokument entkoppelt werden: Dokument mit einer anderen Maske öffnen (oder so ähnlich).
Axel
Stimmt. Da gibt es überhaupt kein "Continue"-Objekt im Postopen.
Noch eleganter als deine Lösung ist wohl:
if doc.getItemValue("status")(0) = "wertx") then
if (Source.editmode = true) then
Msgbox "Rumkritzeln in Feldern verboten. Dokument wird im Lesemodus geöffnet."
Source.editmode = false
Exit sub
end if
end if
Source.editmode = false setzt das Dokument automatisch in den Lesemodus.
Noch eleganter als deine Lösung ist wohl:
Code:
if doc.getItemValue("status")(0) = "wertx") then
if (Source.editmode = true) then
Msgbox "Rumkritzeln in Feldern verboten. Dokument wird im Lesemodus geöffnet."
Source.editmode = false
Exit sub
end if
end if
Elegant ja, allerdings greift die Lösung nicht wenn gleichzeitig im Postopen und Querymodechange ein Script steht das das "In Bearbeitung" - Öffnen verbietet.
Was u.a. letztendlich geht ist folgendes:
Postopen
Sub Postopen(Source As Notesuidocument)
field$ = source.FieldGetText("Status")
If field$ ="IchBinStatus" Then
If (Source.editmode = True) Then
Msgbox "Changes not allowed.", 16, "Error"
Call source.close
Continue = False
Exit Sub
End If
End If
End Sub
(man beachte dabei das call source.close - es bleibt sonst das Dok geöffnet im Edit-Modus).
Querymodechange
Der Vollständigkeit halber nochmal ein Beispiel für's Querymodechange:
Sub Querymodechange(Source As Notesuidocument, Continue As Variant)
field$ = source.FieldGetText("Status")
If field$ ="IchBinStatus" Then
Msgbox "Changes not allowed." , 16, "Error"
continue = False
Exit Sub
End If
End Sub
TMC