Autor Thema: EditMode verwehren - Object variable not set  (Gelesen 2108 mal)

Offline Thunder

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 728
  • Geschlecht: Männlich
EditMode verwehren - Object variable not set
« am: 17.02.14 - 14:32:12 »
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
« Letzte Änderung: 18.02.14 - 11:07:32 von Thunder »
Notes Server: 9.0.1 FP10
Workstations: 9.0.1 (ca.350)

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: EditMode verwehren - Object variable not set
« Antwort #1 am: 17.02.14 - 14:38:00 »
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

Offline Thunder

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 728
  • Geschlecht: Männlich
Re: EditMode verwehren - Object variable not set
« Antwort #2 am: 17.02.14 - 14:48:17 »
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.
Notes Server: 9.0.1 FP10
Workstations: 9.0.1 (ca.350)

Offline pram

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.170
  • Geschlecht: Männlich
    • Foconis Object Framework
Re: EditMode verwehren - Object variable not set
« Antwort #3 am: 17.02.14 - 22:29:47 »
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

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

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
« Letzte Änderung: 18.02.14 - 09:25:59 von pram »
Roland Praml

IBM Certified Application Developer - Lotus Notes and Domino 8
Ich verwende das Foconis Object Framework

Offline Werner Götz

  • Aktives Mitglied
  • ***
  • Beiträge: 249
  • Geschlecht: Männlich
Re: EditMode verwehren - Object variable not set
« Antwort #4 am: 18.02.14 - 07:54:27 »
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

Offline pram

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.170
  • Geschlecht: Männlich
    • Foconis Object Framework
Re: EditMode verwehren - Object variable not set
« Antwort #5 am: 18.02.14 - 09:25:07 »
Zitat
Ein doc "überlebt" auf alle Fälle vom PostOpen bis zum QueryModeChange.

Dem "auf alle Fälle" stimme ich nicht zu. Ich würde eher sagen, zu 90%. ;D
Zwischen PostOpen und QueryModeChange kann ja viel Zeit vergehen und diverse Aktionen/Agenten ausgeführt werden.

Wenn nun Code läuft, welcher die Memory-Instanz mit "delete doc" entfernt, dann fliegen alle Instanzen, die das Backend-Dokument cachen, aus dem Speicher.

Ein Agent der Form
Code
   set doc = db.getDocumentByUnid(gleicheUNIDwieCurrentUIDoc)
   delete doc
würde reichen, damit das Doc eben nicht "überlebt"
(Der Agent kann auch in der Ansicht/anderen Maske ausgeführt werden)

Mit ws.currentDocument hatte ich aber auch schon meine Freude. auf "Source" zurückzugreifen ist hier in der Tat der bessere Weg.

Gruß
Roland
Roland Praml

IBM Certified Application Developer - Lotus Notes and Domino 8
Ich verwende das Foconis Object Framework

Offline Thunder

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 728
  • Geschlecht: Männlich
Re: EditMode verwehren - Object variable not set
« Antwort #6 am: 18.02.14 - 11:07:19 »
Danke für die Infos.
Mit dem Code von Roland klappt es jetzt auch ohne Fehlermeldung.

Gruß
Remko
Notes Server: 9.0.1 FP10
Workstations: 9.0.1 (ca.350)

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz