Domino 9 und frühere Versionen > ND8: Entwicklung

EditMode verwehren - Object variable not set

(1/2) > >>

Thunder:
Hallo Notes-Gemeinde,

ich benutze schon seit Ewigkeiten folgenden Code, um den EditMode einzugrenzen. Ich weiß - er lässt sich umgehen, reicht aber für meine Ansprüche. Den Code habe ich damals auch in diesem Forum gefunden meine ich.
Bearbeiten kann man das Dokument dann über einen Button, der vorher einfach das Feld 'Bearbeiten' erzeugt und nach Öffnen auch sofort wieder gelöscht wird. Das klappt auch eigentlich super - nur bei ganz wenigen Datenbanken erhalte ich die Fehlermeldung (Siehe Betreff) und ich weiß nicht warum. Den Code kopiere ich von einer anderen DB, wo es funktioniert. Muss also eine andere Ursache haben.
Jmd eine Idee?

Gruß
Remko


in den Globals (Declaration):
Dim ws As NotesUIWorkspace
Dim uidoc As NotesUIDocument
Dim doc As NotesDocument


in PostOpen:
Sub Postopen(Source As Notesuidocument)
     Set ws=New NotesUIWorkspace
     Set uidoc=ws.CurrentDocument
     Set doc=uidoc.Document
End Sub


in QueryModeChange:
Sub Querymodechange(Source As Notesuidocument, Continue As Variant)
     If doc.hasitem("bearbeiten") Then
          Call doc.removeitem("bearbeiten")
     Else
          continue=False
          Msgbox"Sie haben keine Berechtigung dieses Dokument zu ändern !"
     End If
End Sub

koehlerbv:
Vermutlich sind globale Variablen in den Declarations der Maske vergessen worden.

A-Bär: Im PostOpen ist der Code reichlich sinnfrei (ausser zur Instantiierung von doc), und den Fall, daß ein User aus der Ansicht heraus mit Strg_B (dt. Client) ein Dokument öffnet, deckt das Procedere auch nicht ab.
Auf die Erzeugung und Löschung des Items "bearbeiten" kann man auch verzichten.

Hier im BP-Board ist ein funktionierendes Verfahren beschrieben - auch mit dem deutlichen Vermerk, daß "sicher" etwas ganz anderes ist.

Bernhard

Thunder:
Wie gesagt - ich weiß, dass es umgangen werden kann. aber 97,2% wissen es nicht ;-)
Dein Best Practice und einige weitere Einträge habe ich auch bereits gelesen.
Wie gesagt. Eigentlich löppt der Code - nur jetzt habe ich mal wieder eine am wickel, die nicht so möchte.

Der komplette Rest der Maske spielt sich mit Formeln ab. Muss also nix deklariert werden oder?
Es gibt auch nichts weiteres in den Events.

pram:
Sofern du keinen anderen Code hast, der auf doc zugreift, würde ich diesen wie folgt auf das "QueryModeChange" beschränken, da dein doc wahrscheinlich nicht vom PostOpen bis zum queryModeChange "überlebt"

in den Globals:

--- Code: ---Option Declare ' wichtig um Compilefehler gleich beim Speichern zu bemerken

--- Ende Code ---


--- Code: ---Sub Querymodechange(Source As Notesuidocument, Continue As Variant)
     Dim doc as NotesDocument
     Set doc = Source.document
     If doc.hasitem("bearbeiten") Then
          Call doc.removeitem("bearbeiten")
     Else
          continue=False
          Msgbox"Sie haben keine Berechtigung dieses Dokument zu ändern !"
     End If
End Sub

--- Ende Code ---

Postopen sollte dann entfallen, aber wie Bernhard schon sagt, sollte in queryopen noch Code, der Continue auf false setzt, wenn das Dok mit Strg+B/E im Editmode geöffnet wird.

Gruß
Roland

Werner Götz:
Ein doc "überlebt" auf alle Fälle vom PostOpen bis zum QueryModeChange.

Hatte (in anderen Konstellationen!) schon böse Überraschungen erlebt, was das ws.CurrentDocument angeht ... Ich würde deshalb im PostOpen auf alle Fälle mit
   Set uidoc = Source
arbeiten, dann ist man auf der sicheren Seite.

-Werner

Navigation

[0] Themen-Index

[#] Nächste Seite

Zur normalen Ansicht wechseln