delete private views (agent)

  • Hallo,


    wie kann ich am einfachsten einen Agenten erstellen, der einmal in der Woche die private views auf der Datenbank löscht?


    Kann ich das auch mit Formelsprache realisieren?


    Danke für die Hilfe


    p.s. (muss mich noch an den neuen Aufbau des Forums gewöhnen.....)

    • Offizieller Beitrag

    mit @Funktionen wüsste ich nicht, dass es geht. Mit Script kannst du:


    - alle Ansichten einer DB durchgehen (NotesDatabase.Views)
    - abfragen, ob eine Ansicht privat ist (NotesView.IsPrivate)
    - und löschen (NotesView.Remove)


    Gruß
    Dirk

    Rein logisches Denken verschafft uns keine Erkenntnis über die wirkliche Welt.
    Alle Erkenntnis der Wirklichkeit beginnt mit der Erfahrung und endet mit ihr.
    Alle Aussagen, zu denen man auf rein logischen Wegen kommt, sind, was die Realität angeht, vollkommen leer.
    Albert Einstein

  • Zitat


    taurec schrieb:
    Beachte noch, daß private Ansichten auch eventuell nur auf dem Client auf dem sie erstellt worden sind. Dann kann man sie auch nur über einen agenten löschen der genau auf diesem Client läuft


    Sorry, hatte nicht gedacht, dass man das erwähnen muss. GENAU darum geht es.


    Hintergrund ist dieser.. Ich habe Ansichten die als "Shared, private on first use" deklariert sind. Wenn ich nun mal Änderungen vornehme, werden diese dann beim Client nicht angezeigt.. erst dann, wenn die private views gelöscht sind.


    Ich brauche als ein Agenten, der NUR die private Views löscht, die auf dem Client sind und neu generiert wurden..


    Danke euch.

    • Offizieller Beitrag

    Führe doch im PostOpen der DB ein Script aus, welches die entsprechenden Ansichten löscht.


    Nachteil: Die privaten Ansichten müssen jedesmal neu erstellt und der Ansichtsindesx neu aufgebeut werden.


    Eventuell noch als Löschkriterium das Erstelldatum der Ansicht benutzen.


    Gruß
    Dirk

  • Die Frage ist welche Rechte deine Benutzer haben:
    Dürfen sie die privaten Ansichten in der Datenbank anlegen oder werden sie lokal in der Desktop angelegt.


    Wenn letzteres, dann musst du die Aktion auf dem lokalen Client ausführen, z.b. mit einem Script im QueryOpen der Datenbank.


  • Wie würde es scripttechnisch aussehen? und wo ist das PostOpen der DB? (sorry......................)

    Zitat


    taurec schrieb:


    Die Frage ist welche Rechte deine Benutzer haben:
    Dürfen sie die privaten Ansichten in der Datenbank anlegen oder werden sie lokal in der Desktop angelegt.


    Wenn letzteres, dann musst du die Aktion auf dem lokalen Client ausführen, z.b. mit einem Script im QueryOpen der Datenbank.


    Also ich habe schon ein paar Testuser drauf und auf der Datenbank sehe ich alle private Views..aber nur von mir! D.h. deren private Views wurden dann bei denen lokal erstellt..


    [img align=left]http://home.arcor.de/ftpmz/ACL.jpg[/img]

    • Offizieller Beitrag

    da "Create private views/folders" aktiviert ist, werden die Ordner/Ansichten in der DB selber gespeichert. Ist diese Option deaktiviert, dann können trotzdem private Ansichten / Ordner erstellt werden, nur werden diese in der Desktop gespeichert.


    Postopen:
    - im Designer
    - "Andere"
    - "Datenbankressourcen"
    - "Datenbank-Script"


    Beispiel:

    Code
    Dim session As New NotesSession
    Dim db As NotesDatabase
    Dim views As Variant
    Set db = session.CurrentDatabase
    views = db.Views
    Forall v In views
       If v.IsPrivate then
          v.Remove
       End if
    End Forall


    Gruß
    Dirk

  • Das war nicht so praktisch :) jetzt hat er mir auch meine entwickelten "Shared, private on first use" Views gelöscht (auf der Datenbank!!


    was ein glück, dass ich backup habe................. ;)


    Gibt es eine Funktion das zu umgehen? also nur "private views" nicht "shared, private on first use" ..

    • Offizieller Beitrag
    Zitat

    Das war nicht so praktisch jetzt hat er mir auch meine entwickelten "Shared, private on first use" Views gelöscht (auf der Datenbank!!


    :-?
    In einigen DBs lösche ich auf diese Art die privaten Ordner der User. Ich benutzte die Vorgehensweise schon unter 4.6.x.


    Hast du eventuell nicht in der gemeinsamen sondern in der privaten Ansicht die Änderungen vorgenommen?


    Gruß
    Dirk


  • weder noch.. ich habe deinen scipt ins PostOpen der Database Script eingefügt, wie du es mir gesagt hattest.. Ich hab die Datenbank geöffnet und ging dann zurück in den Designer.. Siehe da.. Alle privaten (also die beim öffnen generiert werden) und die views die als "shared, private on first use" deklariert sind WEG :)

    • Offizieller Beitrag

    is ja der Hammer.


    Ich hatte es nicht unter 4.6.x sondern 5.x eingesetzt, IsPrivate gibt es erst ab 5.x.


    Hab es jetzt im 6.x probiert und verhällt sich du es sagst. :-?
    In der DB, in der ich es benutze funktioniert es anders, aber das Script wurde noch nicht mit 6.x gespeichert. Mache ich eine Kopie von der DB und speicher das Datenbank-Script, dann verhällt sich mein Script so, dass es alle Ansichten mit der Eigenschaft "Privat", "Gemeinsam, privat bei Erstbenutzung" und "Gemeinsam, für Desktop privat bei Erstbenutzung" löscht.


    Da werden bei IsPrivate im Notes 5.x und 6.x andere Ergenbnisse zurückgegeben.


    Gruß
    Dirk

    • Offizieller Beitrag

    und nun der Oberhammer mit der Notes-API funktioniert es.


    Code
    Const APIModule = "NNOTES" ' nur Win32!Const NOTE_CLASS_VIEW= &H0008Declare Function OSPathNetConstruct Lib APIModule Alias "OSPathNetConstruct" _( Byval NullPort As Long, Byval Server As String, Byval FIle As String, Byval PathNet As String) As IntegerDeclare Function NSFDbOpen Lib APIModule Alias "NSFDbOpen" _( Byval PathName As String, DbHandle As Long) As IntegerDeclare Function NSFDbClose Lib APIModule Alias "NSFDbClose" _( Byval DbHandle As Long) As IntegerDeclare Function NIFFindPrivateDesignNote Lib APIModule Alias "NIFFindPrivateDesignNote" _( Byval hdb As Long, Byval NoteName As String, Byval NoteClass As Integer, NoteID As Long ) As Integer



    Code-Benutzung auf eigene Gefahr, da nicht mit allen wenn und aber getestet.


    Gruß
    Dirk

  • wegen einer kurzfristigen, aber doch längeren Reise, kam ich bis jetzt nicht dazu. wird im laufe dieser oder nächster woche getestet, danke.


  • Hallo Dirk,


    soll ich das unter "Database Script" eintragen?
    Den ersten Teil bei "(Declarations)" und den zweiten Teil? unter Postopen?


    Danke für die Geduld...

  • Da wuerde es funktionieren.
    Und willst Du alle privaten Ansichten geloescht haben, ersetzt Du im Initialize-Event den Code mit:

    Code
    Dim session As New NotesSession
    	Dim db As NotesDatabase
    	Set db = Session.CurrentDatabase
    	Forall v In db.views
    		If v.IsPrivate Then
    			Call DeletePrivateView(db, v.name)
    		End If
    	End Forall
  • [size=large]SUUUUPER! Das klappt einwandfrei*![/size]
    *naja, fast zumindest :D Ich erhalte beim öffnen der DB folgendes Error: [img align=left]http://home.arcor.de/ftpmz/Noteserror.jpg[/img]











    am code selbst habe ich nichts geändert - 1 zu 1 das eingefügt, was oben steht.


    die view heisst "My Actions" und hat keinen alias.


    Am liebsten hätte ich natürlich garkeine Meldung!


    [color=FF0066]Was muss ich tun um den Error zu fixen?[/color]


    Danke für eure Hilfe.

  • Ich vermute, es wird versucht beim Oeffnen der DB in die geloeschte ansicht zu wechseln. Die DB muesste aber dennoch zu oeffnen sein. Danach, wenn eine andere Ansicht gewaeht wurde, sollte wieder Ruhe einkehren.