Dokument per Agent ein Ordnerverzeichnis erstellen

  • Hallo Leute,


    ich bin vor kurzem in Lotus Notes eingestiegen und hätte da eine Frage an euch. Vorher habe ich mich mit der App Entwicklung beschäftigt. Nun meine Frage.


    ich habe eine Datenbank und in dieser Datenbank sind viele Dokumente. Ein dokument beihnhaltet folgende Felder (Datum, sender, empfänger...). Nun will ich die ganzen Dokumente wie ein Ordnerverzeichnis nach Datum aufbauen, d.h. Ich hab ein Ordner z.B. 2014 und in dem ordner sind unterordner mit dem Monat z.B. 1 für Januar. Diese Datumswerte soll der Agent von dem Feld "Date ablesen" und dann richtig in das jeweilige ordner verschieben. Ist das eigentlich per Agent möglich?


    würde mich auf eine Antwort freuen.
    vielen Dank im Voraus

  • Sowas ist möglich, halte ich aber für schlechtes Design. Im Normalfall würde man hier eine einzige Ansicht machen, die zwei kategorisierte Spalten hat: Jahr und Monat... Damit brauchst Du keinen Agenten, und die Struktur "pflegt" sich selbst...

  • Dieses Forum ist nicht dazu da, Lösungen vorzukauen, sondern um bei der Problemlösung konkreter Fragen zu helfen.
    In Deinem Fall holst Du Dir ne Notesdocumentcollection mit NotesDatabase.UnprocessedDocuments, durchläufst die, baust Dir über den Feldwert, den Du mit NotesDocument.GetItemValue ausliest und mit year() und month() zerpflückst den Ordnernamen, um das Dokument dann per NotesDocument.PutInFolder dorthin zu packen. Probier das aus, und wennDu dann eine konkrete Frage hast, wird Dir hier sicher mit der Beantwortung derselben geholfen.

  • Hallo Torsten vielen Dank für deine hilfreichen Antworten. Ich bin etwas weitergekommen. Wie pflücke ich das Datum in Jahr und Monat?


    Sub Initialize

    Dim s As New NotesSession
    Dim db As NotesDatabase
    Dim doc As NotesDocument
    Dim ndc As NotesDocumentCollection
    Dim Datum As notesdatetime


    Set db = s.currentdatabase
    Set ndc = db.Unprocesseddocuments
    Set ndc = db.Alldocuments
    Set doc = ndc.Getfirstdocument


    Do While Not doc Is Nothing
    Set Datum = New NotesDateTime(doc.Date(0))
    Set doc = ndc.Getnextdocument(doc)
    Loop





    End Sub



    Vielen Dank im Voraus

  • So, jetzt werden die Fragen ja endlich konkret...


    ALSO: Du definierst Datum nicht als NotesDateTime sondern als Variant.


    Dann benutzt Du folgenden Code, um das auseinanderzunehmen:

    Code
    Dim Datum as Variant
    Dim Jahr as Integer
    Dim Monat as Integer
    Datum = doc.GetItemValue( "Date" )(0) '- doc.Date(0) würde auch gehen, aber das hat diverse Nachteile, deshalb verwende ich das nie)
    Jahr = Year( Datum )
    Monat = Month( Datum )


    P.S.: Code bitte immer in CODE- Tags einschliessen, das erleichtert das lesen

  • ok alles klar. Habe zuerst auch das Datum als Varian deklariert, dann habe ich in der Hilfe die NoteDateTime Klasse gefunden.


    Und jetzt noch ein Frage ich hoffe, dass du mir dabei auch behilflich sein kannst.


    Wie erstelle ich automatisch jetzt ein Ordner mit dem Ordnernamen und bringe das Dokument in den Ordner rein?

  • Echt: Du musst Dich mit der Designer- Hilfe beschäftigen... Die hat eine Suchfunktion und ist sehr gut. Ein wenig Eigeninitiative ist nie verkehrt, wenn man was lernen will. Außerdem habe ich Dir die Antwort schon in meinem zweiten Post gegeben...

  • Sub Initialize


    Dim s As New NotesSession
    Dim db As NotesDatabase
    Dim doc As NotesDocument
    Dim ndc As NotesDocumentCollection
    Dim Datum As Variant
    Dim Jahr As Integer
    Dim Monat As Integer
    Dim folder As NotesView


    Set db = s.currentdatabase
    Set ndc = db.Unprocesseddocuments
    Set ndc = db.Alldocuments
    Set doc = ndc.Getfirstdocument


    Do While Not doc Is Nothing
    Datum = doc.GetItemValue( "Date" )(0)
    Jahr = Year( Datum )
    Monat = Month( Datum )
    Set folder = db.GetView("Jahr")
    Set doc = ndc.Getnextdocument(doc)
    Loop



    End Sub


    Würde das so passen?

  • Wo in meiner zweiten Antwort steht "GetView" ? Und wo ist plötzlich Dein "Monat" hin... ausserdem holst Du dir die View mit dem Namen "Jahr" anstatt die mit dem Namen, der in der Variablen Jahr gespeichert ist, und ausserdem ist Jahr eine Zahl, getView erwartet aber einen String...


    Und willst Du jetzt in ndc die UnprocessedDocuments oder die AllDocuments?


    Also: NEIN, das passt so nicht... Mach Dir doch einfach eine Test- Datenbank und probiers aus...

  • Auf persönlichen Wunsch per PM und gegen meine Überzeugung (weil Du lernst dabei ÜBERHAUPT NIX) hier der fertige Code (als Alternative zum schlichten ignorieren des Posts...):



    Nachdem der Agent gelaufen ist, die Datenbank schliessen und wieder öffnen, dann siehst Du die neuen Ordner...


    Das alles ändert NIX daran, dass das ein besch... Design ist... und kein erfahrener Notes- Entwickler das tun würde (behaupte ich mal so), aber das möchtest Du ja nicht hören...

  • und schon bereue ich es wieder... Max123: Bitte unterlass das Schreiben von PMs, wir kommunizieren hier über das Forum, nicht über PMs, denn Sinn eines Forums ist nicht nur, Deine aktuellen Probleme zu lösen, sondern anderen zu helfen, die vielleicht später mal das gleiche oder ein ähnliches Problem haben.


    An alle: Jetzt kam per PM die Frage "wie exportiere ich diese Ordner denn jetzt so, dass ich sie nach Sharepoint importieren kann"...


    Und da lautet die Antwort ganz einfach: gar nicht... Denn Ordner sind in Lotus Notes nichts "Greifbares"... Der ganze Ansatz ist also von vorne herein falsch...
    Man exportiert keine Ordner, sondern Dokumente... Und dafür gibt es zig verschiedene Wege.


    Mit solchen Migrationen verdiene ich im übrigen (unter anderem) mein Geld. Und da ich hier (Aufgrund der Grundlagen von Max und der offensichtlichen fehlenden Unterstützung in der eigenen Firma) wenig Hoffnung sehe, mit kleinen Tipps zu einem Ergebnis zu kommen, werde ich diesen Thread für mich abschliessen.


    Sorry, aber für kostenlosen Migrations- Support bin ich die falsche Ansprechperson...

  • Zumal die "Ordner" im Sharepoint tatsächlich nicht "im Sharepoint" liegen, sondern unterm Strich auch nur Einträge in einer der vielen Tabellen der drunterliegenden SQL-DB sind. Der Ansatz, über den erfragten Weg zu gehen, ist somit gleich in zweifacher Hinsicht falsch.

    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