Autor Thema: Dokument löschen über Rollenabfrage aber bei Ausführung "Object Variable not se  (Gelesen 5915 mal)

Offline Marshuhn

  • Junior Mitglied
  • **
  • Beiträge: 74
  • Geschlecht: Männlich
  • Have every day fun
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

Driri

  • Gast
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 )


Offline Marshuhn

  • Junior Mitglied
  • **
  • Beiträge: 74
  • Geschlecht: Männlich
  • Have every day fun
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

Offline Semeaphoros

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.152
  • Geschlecht: Männlich
  • ho semeaphoros - agr.: der Notesträger
    • LIGONET GmbH
Hast Du die Sache schon mal mit dem Debugger angeschaut?
Jens-B. Augustiny

Beratung und Unterstützung für Notes und Domino Infrastruktur und Anwendungen

Homepage: http://www.ligonet.ch

IBM Certified Advanced Application Developer - Lotus Notes and Domino 7 und 6
IBM Certified Advanced System Administrator - Lotus Notes and Domino 7 und 6

Offline Marshuhn

  • Junior Mitglied
  • **
  • Beiträge: 74
  • Geschlecht: Männlich
  • Have every day fun
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

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Ü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

Offline Semeaphoros

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.152
  • Geschlecht: Männlich
  • ho semeaphoros - agr.: der Notesträger
    • LIGONET GmbH
Hmm, vielleicht muss ich die Brille putzen, ich sehe das Bild nicht :-(
Jens-B. Augustiny

Beratung und Unterstützung für Notes und Domino Infrastruktur und Anwendungen

Homepage: http://www.ligonet.ch

IBM Certified Advanced Application Developer - Lotus Notes and Domino 7 und 6
IBM Certified Advanced System Administrator - Lotus Notes and Domino 7 und 6

Offline Semeaphoros

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.152
  • Geschlecht: Männlich
  • ho semeaphoros - agr.: der Notesträger
    • LIGONET GmbH
... 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>
« Letzte Änderung: 24.10.03 - 11:12:21 von Semeaphoros »
Jens-B. Augustiny

Beratung und Unterstützung für Notes und Domino Infrastruktur und Anwendungen

Homepage: http://www.ligonet.ch

IBM Certified Advanced Application Developer - Lotus Notes and Domino 7 und 6
IBM Certified Advanced System Administrator - Lotus Notes and Domino 7 und 6

Offline Marshuhn

  • Junior Mitglied
  • **
  • Beiträge: 74
  • Geschlecht: Männlich
  • Have every day fun
Habe das Bild als Grafik beigefügt. Ich werde mir das mal mit der dem Evaluieren anschauen.

Gruß

Marshuhn

Offline Marshuhn

  • Junior Mitglied
  • **
  • Beiträge: 74
  • Geschlecht: Männlich
  • Have every day fun
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

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
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

Offline Semeaphoros

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.152
  • Geschlecht: Männlich
  • ho semeaphoros - agr.: der Notesträger
    • LIGONET GmbH
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?
Jens-B. Augustiny

Beratung und Unterstützung für Notes und Domino Infrastruktur und Anwendungen

Homepage: http://www.ligonet.ch

IBM Certified Advanced Application Developer - Lotus Notes and Domino 7 und 6
IBM Certified Advanced System Administrator - Lotus Notes and Domino 7 und 6

Offline Axel

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
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
Ohne Computer wären wir noch lange nicht hinterm Mond!

Offline Marshuhn

  • Junior Mitglied
  • **
  • Beiträge: 74
  • Geschlecht: Männlich
  • Have every day fun
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

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
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

Offline Marshuhn

  • Junior Mitglied
  • **
  • Beiträge: 74
  • Geschlecht: Männlich
  • Have every day fun
Hallo Bernhard,

auch ein fettes Merci an Dich.

Jetzt klappt alles.

Danke und schönes Wochenende

Clas

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz