Verständnis-Problem: Notes-Designer-Hilfe

  • Hallo Experten,


    ich habe ein Verständnisprolbem zu einem Hinweis in der Notes-Designer Hilfe. Dort heißt es zur Eigenschaft NotesDataBase.Views:


    Each element of the array is a NotesView object representing a public view or folder in the database. If the database is local, personal folders are also included.


    Ich habe eine Test-Datenbank mit mehreren Ordnern von allen Typen:
    - shared
    - private
    - shared, private on first use
    - shared, desktop on first use


    Egal ob ich mir diese Ordner nun mit einem Agenten in einer lokalen DB oder einer serverseitigen Kopie anschaue: Ich bekomme immer alle Ordner über db.views 'zu fassen'.
    Das würde aber dem Doku-Eintrag wiedersprechen, oder?


    Edit: Gleiches gilt für die Methode db.getView() - auch mit dieser kann ich bei der serverseitigen DB auf alle (auch die privaten) Views zugreifen... - vielleicht hier noch kurz der Code mit dem ich zugreife:



    Unabhängig davon:
    Wo werden denn private und Desktop-Ordner effektiv gespeichert?
    In der DB? oder in der Desktop.dsk? oder anderswo?


    Danke für eure Infos im voraus.

  • Also zumindest in der 8er Designer Hilfe steht es etwas anders drin:


    Zitat


    Each element of the array is a NotesView object representing a public view or folder in the database, or a private view or folder owned by the effective id running the agent and stored in the database. Private views or folders stored in the desktop are not included.


    Und so kenne ich das Verhalten auch


    Der Speicherort ist abhängig von der ACL.
    Hat der Benutzer das Recht private Ordner/Ansichten anzulegen, dann in der DB ansonsten in der Desktop-Datei.
    Grundsätzlich kann jeder User private Ordner/Ansichten anlegen, der Zugriff auf die DB hat. Nur wo sie abgelegt werden ist abhängig von der ACL.

  • Hallo taurec,


    dank Dir! Der von Dir zitierte Doku-Text deckt sich mit dem bei mir festgestellten Verhalten.


    Nach deiner Beschreibung der Speicherorte stehe ich dann vor folgendem Problem:


    Ich muss alle Mails aus dem Archiv einer Mail-DB wieder in die DB zurück schaufeln. Private Views/Folder, die nicht in der DB gespeichert werden durften würde ich dann in der Archiv-DB nicht packen können.


    Andersherum kann ich aber in der Destop.ndk auch nicht identifizieren welche der dort enthaltenen Views/Ordner zur der Archiv-DB gehören, oder?

    • Offizieller Beitrag

    Oh oh.


    Schreib Dir einen Script-Agenten, den der User ausführen muss.


    Der User bekommt das Recht private Ordner ind er DB anzulegen.


    Der Agent erstellt alle privaten Ordner neu und zwar in einen Unterordner, verschiebt die Dokumente von dem Original-Ordner in den neu erstellten Ordner, löscht den Original-Ordner und benennt den neuen Ordner um (Name des Original-Ordners).


    Hast Du mehrere User, die auf der gleichen DB arbeiten, dann müssen die einzelnen User den Agenten nacheinander ausführen.


    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

  • Hi Dirk,


    wahrscheinlich hab ich nur einen Denkfehler - und auch noch nicht ausgetestet:


    Das der Agent mit Anwenderrechten laufen muss, erzwingt wohl allein schon die Tatsache, dass auch Admins private Ordner nicht sehen können - und somit auch keine Agenten, die von Admins ausgeführt werden.


    Wenn ein Agent mit User-Rechten ausgeführt wird, und alle Views bearbeiten soll, die er in der serverseitig gespeicherten Datenbank findet - dann erfasst dieser Agent doch die in der Desktop.ndk gesicherten Ordner gar nicht, oder?!
    Somit könnte ich die Ordner zwar neu anlegen - hätte aber keine Quelle aus der ich Inhalte entnehmen und in die neuen (jetzt in der DB gespeicherten) Ordner einfügen könnte.


    Muss ich denn wirklich die DB zuerst nach lokal replizieren um dort dann auch die Ordner packen zu können, die in der Desktop.dsk stehen?

    • Offizieller Beitrag

    an die lokalen Ordner kommt der Agent ran, wenn er auf dem Client des Users und mit dem User ausgeführt wird, dann sieht der Agent, was der User sieht.


    Gruß
    Dirk

  • Hallo Dirk,


    aber wiederspricht das dann nicht wieder dem Doku-Auszug ?!


    Zitat

    Each element of the array is a NotesView object representing a public view or folder in the database, or a private view or folder owned by the effective id running the agent and stored in the database. Private views or folders stored in the desktop are not included.


    Demnach komme ich doch gerade an die privaten Folder, die nicht bereits in der DB sind, eben nicht dran, oder?

  • Was genau ist jetzt deine Frage? Wenn ichs richtig verstehe, bekommst du genau das, was du willst: sämtliche Ordner, aus denen du dann die Mails umschaufeln kannst.

    Life is not a journey to the grave with the intention of arriving safely in a pretty and well-preserved body, but rather to skid in broadside, thoroughly used up, totally worn out, and loudly proclaiming "Wow, what a ride!!! :evil:
    Beschleunigung ist, wenn die Tränen der Ergriffenheit waagrecht zum Ohr hin abfliessen - Walter Röhrl

    • Offizieller Beitrag

    Wo habt Ihr denn den Hilfetext her?


    Also private Ordner und Ansichten lasse ich fast immer im Desktop erstellen. Und die Scripte zum suchen der privaten Ordner oder Ansichten führt dann der User selber aus (z.B. im DB-Open-Script). Dabei werden auch die privaten Ordner gefunden - zumindest in 4.5.x, 4.6.x und 6.5.x - 6.5.4. Wäre aber schlecht wenn sich daran jetzt was geändert hätte, weil ich als Entwickler dann gar keine Möglichkeit mehr habe auf die Ordner/Ansichten, die im Desktop gespeichert sind, zuzugreifen.


    Suche mal im Forum, da gibt es das Script.


    Gruß
    Dirk

  • Hallo RockWilder,
    hallo Dirk


    Zitat

    Was genau ist jetzt deine Frage? Wenn ichs richtig verstehe, bekommst du genau das, was du willst: sämtliche Ordner, aus denen du dann die Mails umschaufeln kannst.


    Eben nicht...
    Zumindest laut der Doku (sofern ich diese richtig verstanden habe) komme ich an Ordner in der desktop.dsk nur dran, wenn die DB lokal liegt. Also nur über den Workaround die DB zuerst nach lokal kopieren/replizieren zu müssen - was aber sehr schmerzhaft ist, wenn es um 1-2GB große Mailfiles und rund 1000 Mailboxen geht.


    Zitat

    Wo habt Ihr denn den Hilfetext her?


    Folgender Hilfstext stammt aus der Domino-Designer 6.5 Hilfe:


    Zitat

    Each element of the array is a NotesView object representing a public view or folder in the database. If the database is local, personal folders are also included.


    Folgender Hilfstext stammt aus der Domino-Designer 8 Hilfe (bereitgestellt von Taurec):


    Zitat

    Each element of the array is a NotesView object representing a public view or folder in the database, or a private view or folder owned by the effective id running the agent and stored in the database. Private views or folders stored in the desktop are not included.



    Die Hilfstexte sind jeweils zum Stichwort NotesDatabase-Klasse --> Views-Eigenschaft

  • Zitat


    Zumindest laut der Doku (sofern ich diese richtig verstanden habe) komme ich an Ordner in der desktop.dsk nur dran, wenn die DB lokal liegt.


    Nein, wo die DB liegt ist nicht wesentlich. Wichtig ist nur, wo der Agent läuft.

    Life is not a journey to the grave with the intention of arriving safely in a pretty and well-preserved body, but rather to skid in broadside, thoroughly used up, totally worn out, and loudly proclaiming "Wow, what a ride!!! :evil:
    Beschleunigung ist, wenn die Tränen der Ergriffenheit waagrecht zum Ohr hin abfliessen - Walter Röhrl

  • Hallo Experten,


    leider habe ich hier noch immer ein Problem:
    Szenario
    Ich habe eine Datenbank mit einer "Gemeinsam, für Desktop privat bei Erstbenutzung"-Ordner. Der Ordner beinhaltet momentan ein einziges Dokument und wurde von mir selbst erstellt.


    Ich möche mit einem Agent, der in der gleichen Datenbank existiert auf das Dokument in diesem Ordner zugreifen und versuche dies folgendermaßen:



    Dabei bekomme ich für 'test' immer 'nothing' zurück.
    Ich kann also auf den Ordner per Agent nicht zugreifen.
    Was mache ich falsch?


    (Anmerkung: Es geht mir nicht um den Zugriff auf das eine Dokument, sondern um den Zugriff auf den Ordner, um alle darin enthaltenen Dokumente erreichen zu können).


    Nebenfrage:
    Kann man eigentlich per LS auslesen wieviele gemeinsame,private,spofu,pfu,pdfu Views/Folder in einer DB existieren?
    Oder kann man erkennen von welchem der genannten Type eine View/Folder ist?

    • Offizieller Beitrag

    Du arbeitest im Backend. Wie soll dann eine private Kopie des öffentlichen Ordners angelegt werden?


    Nichts anderes geschieht bei einem Ordner vom Typ "Gemeinsam, für Desktop privat bei Erstbenutzung".


    Öffne mal den Ordner im Notes Client und lass dann Deinen Agenten noch einmal laufen.


    Gruß
    Dirk

  • Und wieso arbeitest du nicht so wie in deinem ersten Post geschrieben ?


    Auslesen kannst du nur wieviele es füpr den aktuellen User gibt.
    Und die Typen kannst du mit den entsprechenden Script Eigenschaften auslesen.


    Diali


    Der Ordner war doch schon angelegt, sonst wäre ja kein Dokument drin

  • Hallo Taurec,


    Zitat

    Und wieso arbeitest du nicht so wie in deinem ersten Post geschrieben ?


    Ich bekomme zwar mit db.getViews den Ordner noch in die NotesViewCollection; der Versuch auf den DPOFU-Ordner per db.getView zuzugreifen schlägt aber fehlt (=ich bekomme 'nothing' zurück).


    Wenn ich mir im LS-Debugger die NotesViewCollection anschaue, finde ich darin auch noch den DPOFU-Ordner, finde auch noch die üblichen Properties zu diesem - stelle aber dann z.B. bei der Eigenschaft "AllEntries" fest, dass dieser Ordner angeblich 0 Dokumente beinhaltet. Im Notes-Client ist definitv ein Dokument in diesem Ordner zu finden.


    Zitat

    Und die Typen kannst du mit den entsprechenden Script Eigenschaften auslesen


    Ich hab die "isPrivate"-Property übersehen. Kann ich auch noch unterscheiden ob sich die View in der desktop.dsk/db befindet - also zw. SPOFU und SDPOFU unterscheiden? Und zwischen einer normalen shared-view und SPOFU, wenn die view noch nicht benutzt wurde?

  • Nein eben nicht. denn dieser Ordner existiert für jeden user zweimal.
    Einmal als das designelement, daß du in der DB angelegt hast und einmal als privater ordner.
    Also musst du eben die Eigenschaften überprüfen welchen der beiden du erwischt hast.
    Normalerweise bekommst du als erstes immer den den du im Design angelegt hast und der ist grundsätzlich leer, weil ihn direkt ja keiner benutzt.
    Damit siehst du sicher auch wieso du den Ordner nicht per GetView bekommen kannst

  • Wenn ich dich richtig verstanden habe, müsste ich die SPOFU Views/Folder also 2 mal in meiner NotesViewCollection haben.


    Dem ist aber leider nicht so - es gibt nur einen Eintrag darin.
    (Nämlich offenbar das Design-Element). Die private Kopie fehlt in der Liste - und mir somit eine Möglichkeit um drauf zuzugreifen.

  • Dann stimmt aber was grundsätzlich nicht.
    Ich habe bei einem privaten Ordner in NotesDatabase.Views immer 2 Views des gleichen Namens drin: Einmal den im Design angelegten und einmal den privaten der die Eigenschaft ViewInheritedName gesetzt hat

  • Ich habe nochmal eine leere Datenbank mit je einer View und einem Folder von jeder Art angelegt; anschließend alle Views/Folder 'initialisiert' indem ich ihnen Dokumente zugeordnet habe.


    Notes-Database.views zeigt im Debuger folgende ausgabe (siehe Anhang).


    Hier sind nun die Privat-on-first-use Views/Folder wie von dir beschrieben doppelt vorhanden. Die Desktop-privat-on-first-use Views/Folder aber nicht.

    • Offizieller Beitrag

    hole Dir mal die desktop.dsk als DB-Objekt. Bzw. öffne diese mal im Client, dort sind die Ansichten/Ordner gespeichert.


    Zur Not greifst Du über die Desktop.dsk darauf zu.


    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