Lotus Notes / Domino Sonstiges > Tipps und Tricks
Dokument zum bearbeiten sperren -> Erweitert
TMC:
Hi,
bisher wurde ja immer gepostet, das ganze im Querymodechange abzufangen, also z.B.
--- Zitat ---Sub Querymodechange(Source As Notesuidocument, Continue As Variant)
feld$ = source.FieldGetText("Status")
If feld$ ="Ich bin der Status" Then
Msgbox "Finger weg.",0,"Iss nicht!"
continue = False
Exit Sub
End If
End Sub
--- Ende Zitat ---
Bekanntes Problem:
Wenn Dok aus Ansicht in Bearbeitungsmodus geöffnet wird (also CTRL+B, bzw. englischer Client CTRL+E - oder Rechtsclick und Edit), dann klappt das nicht.
Daher der Tipp, den ich halbfertig in der Designerhilfe grad gefunden habe:
Das ins Queryopen:
--- Zitat ---Sub Queryopen(Source As Notesuidocument, Mode As Integer, Isnewdoc As Variant, Continue As Variant)
If mode = 1 Then Continue = False
End Sub
--- Ende Zitat ---
Na ja, vielleicht auch noch ne Msgbox rein, damit der User Bescheid weiss.
Und Vorsicht beim Öffnen der Maske per Script z.B. über
Set uidoc = uiws.editDocument(True, newdoc)
Dann muss ein False gesetzt werden statt True und danach die Zeile
uidoc.EditMode = True
hth,
TMC
Axel Janssen temp:
--- Code: ---Sub Queryopen(Source As Notesuidocument, Mode As Integer, Isnewdoc As Variant, Continue As Variant)
If mode = 1 Then Continue = False
End Sub
--- Ende Code ---
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 :
--- Code: ---if doc.getItemValue("status")(0) = "wertx") then
if (Source.editmode = true) then
Msgbox "verbohten"
continue = false
Exit sub
end if
end if
--- Ende Code ---
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
TMC:
Hi Axel,
Du hast natürlich Recht, meine Lösung hilft so wie sie ist bei den meisten Fragestellungen nicht weiter.
Eine Anmerkung noch zu Deiner Postopenformel:
Sollte da nicht statt "continue = false" ein "Call uidoc.close" rein?
Denn so wie ich Postopen verstehe ist ja das Doc bereits offen....
cu,
TMC
Axel_Janssen:
Stimmt. Da gibt es überhaupt kein "Continue"-Objekt im Postopen.
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
--- Ende Code ---
Source.editmode = false setzt das Dokument automatisch in den Lesemodus.
TMC:
--- Zitat ---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
--- Ende Zitat ---
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
--- Code: ---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
--- Ende Code ---
(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:
--- Code: ---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
--- Ende Code ---
TMC
Navigation
[0] Themen-Index
[#] Nächste Seite
Zur normalen Ansicht wechseln