Das Notes Forum

Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: Marshuhn am 24.10.03 - 10:12:40

Titel: Dokument löschen über Rollenabfrage aber bei Ausführung "Object Variable not se
Beitrag von: Marshuhn am 24.10.03 - 10:12:40
Hallo,

ich möchte, das in ein bestimmter Dokumententyp nur von der Rolle "Serverloesch" gelöscht werden darf. Bei allen anderen möchte die Löschung verhindern. Ich habe das Script, welches fett unterlegt ist, aus der Notes-Hilfe übernommen. An der Stelle (Meiner Meinung nach) die fett und rot unterlegt, bekomme ich bei der Ausführung die Fehlermeldung "Object Variable not set". Ich habe das ganze Script mehrfach Buchstabe für Buchstabe überprüft. Ich habe keinen Fehler gefunden. Kann mir hier jemand auf die Sprünge helfen.

Vielen Dank schon einmal im Voraus.

Danke Marshuhn


Sub Querydocumentdelete(Source As Notesuidatabase, Continue As Variant)
   
Dim session As New NotesSession
   Dim db As NotesDatabase
   Dim acl As NotesACL
   Dim entry As NotesACLEntry
   Set db = session.CurrentDatabase
   Set acl = db.ACL

   Dim collection As NotesDocumentCollection
   Set collection = source.documents
   Set note=collection.getfirstdocument

   If  Entry.IsRoleEnabled("[Serverloesch]" ) And note.Form(0) = "LogArchiv" Then  

      Messagebox "Sie dürfen Dokumente löschen"
      Else
         Messagebox "Sie dürfen keine Dokumente löschen. ", 0, "Fehler"
      End If
   If note.Form(0) = "Reservation" Then
      Dim doc As notesdocument
      Set doc=db.createdocument
      Dim feld As notesitem
      Set view=db.getview("LogFile")
      doc.form="LogArchiv"
      Set feld=doc.appenditemvalue("ArchivFeld", note.ResourceName)
      Set feld=doc.appenditemvalue("UserFeld", session.CommonUserName)
      Set feld=doc.appenditemvalue("DatumvonbisFeld", note.CalendarDateTime)
      Set feld=doc.appenditemvalue("RaumFeld", note.ApptUNID)
      Set feld=doc.appenditemvalue("LoeschDatum", Now)      
      Call doc.Save(True, False)
      Exit Sub
   End If
   While Not note Is Nothing
      If  note.Form(0) = "Resource"  Then
         Messagebox "Um eine Ressource zu löschen, müssen Sie die Aktionsschaltfläche 'Ressource löschen' im Dokument verwenden.", 0, "Fehler"
         Continue = False
         Exit Sub
      End If
      
      If (note.Form(0) = "SiteProfile")  Then
         Server=source.database.server
         note.server=server
         RoomLookup=Evaluate (|@IsError(@DbLookup("":"NoCache";Server:"names.nsf";"($Rooms)";Site;1))|, note)
         ResourceLookup=Evaluate (|@IsNotMember(Site;@DbColumn("":"NoCache";Server:"names.nsf";"($Resources)";2))|, note)
         
         If(RoomLookup(0) = 0 Or  ResourceLookup(0) = 0) Then
            Messagebox "Dieses Standortprofil kann nicht gelöscht werden, da im Adreßbuch noch Ressourcen auf den Standort verweisen. Sie müssen zuerst diese Ressourcen löschen. Verwenden Sie dazu die Aktionsschaltfläche 'Ressource löschen' in den Ressource-Dokumenten.", 0, "Fehler"
            Continue = False
            Exit Sub
         End If
      End If
      Set note=collection.getnextdocument(note)
   Wend   
   Set w=New NotesUIWorkspace
   
End Sub
Titel: Re:Dokument löschen über Rollenabfrage aber bei Ausführung "Object Variable not
Beitrag von: Driri am 24.10.03 - 10:34:16
Das Objekt Entry ist leer, klar daß da die Fehlermeldung kommt. Du mußt Entry erstmal etwas zuweisen.

z.B. so :

Set entry = acl.GetEntry( session.CommonUserName )

Titel: Re:Dokument löschen über Rollenabfrage aber bei Ausführung "Object Variable not
Beitrag von: Marshuhn am 24.10.03 - 10:38:18
Hallo,

ich hatte gearde beim nochmaigen Ansehen auch bemerkt, dass ich diese Zeile vergessen hatte HIER anzugeben. Diese Zeile ist aber im Script enthalten. Trotzdem erhalte ich diese Meldung. Gibt es da noch einen Tipp, woran es liegen könnte.

Gruß + Danke

Marshuhn
Titel: Re:Dokument löschen über Rollenabfrage aber bei Ausführung "Object Variable not
Beitrag von: Semeaphoros am 24.10.03 - 10:46:54
Hast Du die Sache schon mal mit dem Debugger angeschaut?
Titel: Re:Dokument löschen über Rollenabfrage aber bei Ausführung "Object Variable not
Beitrag von: Marshuhn am 24.10.03 - 11:00:06
Wenn ich den Debugger laufen lasse, dann erhalte ich sofort die Meldung (bekannt), danach erhalte ich im Debugger das Bild (kopiert in das angehängte Word Dokument) wo er beim Objekt "Raumreservierung (Datenbank-Script) und beim Ereignis "Querydocumentdelete") anzeigt. Leider hilft mir das nicht weiter.
Es handelt sich bei dieser Datenbank um die Raumreservierung von Lotus Notes.
Als Designer setze ich die Version 5.0.9 ein.

Weiter komme ich damit leider immer noch nicht.

Gruß

Marshuhn
Titel: Re:Dokument löschen über Rollenabfrage aber bei Ausführung "Object Variable not
Beitrag von: koehlerbv am 24.10.03 - 11:01:58
Über den Debugger sollte man den Fehler leicht finden (sprich: Warum ist an dieser Stelle entry nicht instantiiert).
Abgesehen davon muß da aber am Anfang wohl noch mehr Code fehlen.

Und völlig abgesehen davon wird es so sowieso nicht sinnvoll funktionieren: So kann man ja nur NotesSession.Username abfragen - aber der muß ja nicht namentlich in der ACL stehen und wird daher nicht gefunden.
Evaluate ("@UserNamesList" ...  dürfte da ein viel einfacherer und vor allem zuverlässiger Weg zum Ziel sein.

HTH,
Bernhard
Titel: Re:Dokument löschen über Rollenabfrage aber bei Ausführung "Object Variable not
Beitrag von: Semeaphoros am 24.10.03 - 11:03:15
Hmm, vielleicht muss ich die Brille putzen, ich sehe das Bild nicht :-(
Titel: Re:Dokument löschen über Rollenabfrage aber bei Ausführung "Object Variable not
Beitrag von: Semeaphoros am 24.10.03 - 11:07:47
... oder gleich direkt mit @UserRoles oder noch viel direkter

notesACLEntry.Roles

<Edit>
Nachtrag: das stimmt hier wohl nicht, da notesACLEntry.Roles auf den Entry geht und da gilt Bernhards Einwand. Hingegen @UserRoles sollte in dieser Situation funktionieren.
</Edit>
Titel: Re:Dokument löschen über Rollenabfrage aber bei Ausführung "Object Variable not
Beitrag von: Marshuhn am 24.10.03 - 11:09:10
Habe das Bild als Grafik beigefügt. Ich werde mir das mal mit der dem Evaluieren anschauen.

Gruß

Marshuhn
Titel: Re:Dokument löschen über Rollenabfrage aber bei Ausführung "Object Variable not
Beitrag von: Marshuhn am 24.10.03 - 11:25:48
Auch wenn es vielleicht nervt. Aber da ich mir alles selber beibringen darf und keine Hilfe von anderen erwarten kann (weil das kein anderer macht), möchte ich von Euch wissen, wo ich entweder evaluate....(@UserNameList/@UserRoles) einsetzen muss:

muss ich ich dann die eine Zeile folgendermaßen schreiben?:
Set entry = acl.GetEntry (evaluate(|@UserRoles|))

Danke für die Antwort.

Marshuhn
Titel: Re:Dokument löschen über Rollenabfrage aber bei Ausführung "Object Variable not
Beitrag von: koehlerbv am 24.10.03 - 11:29:20
Was steht denn in der Designer-Hilfe zu Evaluate ?
Da wird doch nun alles gesagt.

Ohne Frage, jeder hat mal angefangen, aber dermassen unstrukturiert ... Und dann scheinst Du ja schon an einer produktiven Datenbank herumzudoktern.

Bernhard
Titel: Re:Dokument löschen über Rollenabfrage aber bei Ausführung "Object Variable not
Beitrag von: Semeaphoros am 24.10.03 - 11:32:24
Wenn Du den Debugger benutzest, solltest Du in jedem Falle mal die Variablen anschauen ..... und dann einen Printscreen, der nicht zu >80% einfach weisse Fläche zeigt ... sprich, die Vars würden uns da interessieren.

Wie wärs damit, ein Einführungsbuch unters Kopfkissen zu legen?
Titel: Re:Dokument löschen über Rollenabfrage aber bei Ausführung "Object Variable not
Beitrag von: Axel am 24.10.03 - 12:58:03
Hi,

ich hab mir mal eine kleine Scriptfunktion gebastelt, mit der man die Userroles prüfen kann. Die funktioniert auch mit Gruppenrollen.

Zitat
Function RoleEnabled(sRole As String) As Integer
   
   Dim vResult As Variant
   
   vResult = Evaluate(|@IsMember("| & sRole & |"; @UserRoles)|)
   
   If vResult(0) = 1 Then
      RoleEnabled = 1
   Else
      RoleEnabled = 0
   End If  'If vResult(0) = 1
   
End Function

Nehme diese Funktion in dein Datenbankscript auf (am besten mit Copy & Paste im Options-Abschnitt) und ändere deinen Code wie folgt:

...
 If  RoleEnabled("[Serverloesch]" ) = 1 And note.Form(0) = "LogArchiv" Then
      Messagebox "Sie dürfen Dokumente löschen"
      Else
         Messagebox "Sie dürfen keine Dokumente löschen. ", 0, "Fehler"
      End If

...

Dann sollte das funktionieren.

Axel
Titel: Re:Dokument löschen über Rollenabfrage aber bei Ausführung "Object Variable not
Beitrag von: Marshuhn am 24.10.03 - 14:38:20
Hallo Axel,

recht herzlichen Dank für Deine Hilfe. Damit habe ich jetzt die Abfrage hinbekommen. DANKE.
Wenn ich jetzt aber in dieser besagten Ansicht eine Löschung anbringe, dann wird die Löschmarkierung aber auch gesetzt.
Mein Ziel ist es aber, dass diese Dokumente dann auch wirklich nicht gelöscht werden dürfen. Dieses sollen dann nur Rollen "Serverloesch" durchführen können. Ich hatte eigentlich vorgehanbt, dass ich die Löschmarkierung wieder aufheben kann, aber ich finde in der Hilfe keinen Befehl.
Kannst Du mir da noch einmal weiterhelfen. Habe schon mit MovetoTrash und ähnlichem gearbeitet und die Löschmarkierung bleibt trotzdem bestehen.

Gruß + Danke

Clas
Titel: Re:Dokument löschen über Rollenabfrage aber bei Ausführung "Object Variable not
Beitrag von: koehlerbv am 24.10.03 - 14:53:47
Hallo, Clas,

verläßt Du den QueryDocumentDelete mit Continue = false, wenn die Rollenprüfung negativ ist ?
Was Du beschreibst, sieht danach aus, daß Du das Löschen noch nicht sperrst ...

Bernhard
Titel: Re:Dokument löschen über Rollenabfrage aber bei Ausführung "Object Variable not
Beitrag von: Marshuhn am 24.10.03 - 15:00:34
Hallo Bernhard,

auch ein fettes Merci an Dich.

Jetzt klappt alles.

Danke und schönes Wochenende

Clas