Lotus Notes / Domino Sonstiges > Tipps und Tricks

Dokument zum bearbeiten sperren -> Erweitert

(1/2) > >>

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