Mailablage in zentraler Datenbank

  • Hallo


    Mit eurer Hilfe habe ich eine wirklich tolle, zentrale Mail-Datenbank gestaltet, worauf unsere Mitarbeiter in Zukunft sämtliche, projektspezifischen Mails ablegen sollen. Demnach ist in Notes doch einiges möglich, was bisher von unserem Ober-Admin nicht wirklich zu spüren war.


    Der absolute Hammer wäre nun, wenn ich die Benutzer-Clients so einrichten kann, dass die Mitarbeiter ihre Mails ohne die Mailbox zu verlassen in die zentrale DB ablegen könnten. Bisher ist es mir nicht gelungen eine geeignete Funktion zu programmieren.


    Sinnvoll wären Alternativen zu bestehenden Funktionen wie:
    - in Ordner verschieben ...
    - Senden und ablegen ...
    die statt auf die Struktur der lokalen auf diejenige der zentralen Datenbank zeigen.


    Im Anhang habe ich mir auf die Schnelle eine Variante grafisch zusammengestellt. Den gleichen Effekt wollte ich mit der Funktionstaste 'Archivierung' erreichen.


    Auch eine sehr gute Lösung wäre die Einbindung der zentralen Ablagestruktur in das linke Navigations-Frame (z.B. unter dem Titel 'Ablage').


    Kann mir da jemand helfen, bzw. mitteilen, ob da irgendwas möglich ist in diese Richtung?


    Vielen Dank
    Tombac

  • Ja, super, taurec


    Habe soviel geschrieben, dass ich prompt das Wichtigste vergessen habe.


    Da ich nicht wirklich der Programmierer bin und eigentlich nur Kenntnis von einigen Batch-Sprachen sowie etwas JavaScript kapiert habe, bin ich auch die Formelsprache in LotusNotes zugegangen.
    Dort habe ich allerdings nur mit den folgenden Formeln in verschiedenen Variationen und Kombinationen gespielt:


    @Command([Folder])
    @PickList([Folders];@MailDBName)


    Allerdings habe ich in keinem Fall auf die Zieldatenbank ansprechen können. Natürlich habe die oben eingesetzten Variablen zu ersetzen. So z.B. die @MailDBName durch \\server\mail/objekt-db.nsf.
    Da die Vielfalt der Befehle so gross ist, habe ich mir nach diesen Versuchen gedacht, mal im Forum nachzufragen. Vielleicht ist dieses Problem bekannt, konnte dies allerdings in der Suche nicht finden (mit Ausnahme der @PickList).
    Mir reicht auch schon ein Hinweis, wo ich ansetzen muss bzw. welche Befehle/Sprachen für so was taugen.


    Gruss
    Tombac

  • Na da bist du ja schon auf dem richtigen Weg, nur hattest du einen kleinen Denkfehler drin:


    @MailDBName liefert dir eine Textliste zurück mit Servername und Datenbankpfad und genauso musst du auch deine DB angeben, d.h.


    Code
    @PickList([Folders];"Servername":"Pfad")


    Dann bekommst du auch die Ordner der von dir gewünschten DB angezeigt

  • Perfekt, taurec


    Jetzt sieht ja das schon beinahe wie echt aus.
    Allerdings bringe ich es nicht fertig, die selektierten Dokumente in die gewählte Ordnerstruktur zu verschieben.


    Die folgenden Kombinationen der Befehle @Command und @PickList haben in jedem Fall Fehlermeldungen produziert:
    - @Command([Folder]:@PickList([Folders];"Servername":"Pfad");"";"1")
    - @PickList([Folders];"Servername":"Pfad") & @Command([Folder];"";"1")
    - @Command([Folder];"Servername":"Pfad":"";"1")


    Das Beste, was mir passiert ist, konnte ich mit dem @AddToFolder-Befehl erreichen:
    - @AddToFolder(@PickList([Folders];"Servername":"Pfad");"")
    Hier konnte ich den Ordner aus der zentralen Datenbank wählen, aber passiert ist hernach überhaupt nix. Nicht mal eine Fehlermeldung ist erschienen.


    Wie und mit welchem Befehl muss ich die Ordnerauswahl zusammenhängen?


    Gruss
    Tombac

  • Klar passiert da nichts, weil du das Dokument erst mal in die andere DB kopieren musst bevor du es dort in einen Ordner schieben kannst.


    Und das geht meines Wissens nach dann nur per Script

  • Tja, so wie du dich anhörst, taurec, wird das direkte Verschieben oder Kopieren der Mails aus dem Benutzer-Client in die zentrale Ablage nicht ohne Weiteres realisierbar sein.
    Ziel meiner Übung ist, dass der Benutzer nicht zwischen zwei geöffneten Datenbanken hin und her switchen muss, wenn er die Mails ablegen will.


    Habe inzwischen noch versucht, das Abbild der Verzeichnisstruktur der zentralen Datenbank im NotesMailOutline zu integrieren. Leider bisher ohne Erfolg.


    Kannst du dir noch eine andere Möglichkeit zum einfachen Verschieben/Kopieren zwischen diesen beiden Mail-Datenbanken vorstellen?


    Gruss
    Tombac

  • OK, taurec


    'Einfach' war auch nicht für die zu erstellende Aktion gedacht, sondern für das Handling des Users.
    Ich gehe davon aus, dass du LotusScript meinst, wenn du von Script redest. Dann werde ich versuchen, mich dort einzuarbeiten.


    Gruss
    Tombac

  • Um das Thema "einfach" mal noch etwas zu relativieren:


    Das Kopieren von Dokumenten aus DB A nach DB B ist Handwerk (und tatsächlich nicht mit @functions oder commands zu erreichen - LotusScript bietet sich da wirklich an). Das Handwerk muss man aber verstehen - als Anfängeraufgabe ist dies weniger geeignet (da alleine das Verfahren, die in der Ziel-DB vorhandenen Ordner performant anzuzeigen, schon nicht ganz ohne ist).


    Hinzu kommt aber voll allem folgende "Kunst": Die Aktion (wo auch immer platziert) soll ja in der Mail-DB des jeweiligen Benutzers ausgelöst werden. Und diese Mail-DB basiert auf einem Template. Und das Template möchte man immer auf dem aktuellen Stand halten. Ergo: Der ganze Code muss so gekapselt werden, dass man bei einem gewünschten Design-Update möglichst nur noch ein Design-Element kopieren muss und nichts weiter.


    Und genau dieses solltest Du von vornherein beim Design bedenken.


    Bernhard

  • koehlerbv


    Also da muss ich dir in ein einem Punkt widersprechen:


    Die performante Anzeige der Ordnerstruktur einer beliebigen DB ist sehr simpel zu machen, mit einem @Command. Und danach kann dann ein Script Agent für die weitere Arbeit aufgerufen werden.


    Hab ich schon in einigen Anwendungen realisiert

  • Das ist schon klar, taurec. Wie man dann aber triggert, dass der per @Command ausgewählte Ordner dann den LS-Teil startet und von diesem verwendet wird, würde ich nun nicht gerade als Anfänger-Aufgabe bezeichnen.

  • Das habe ich ja auch nicht behauptet.


    Meine Anmerkung war nur auf den Teil mit der performanten Anzeige der Ordnerstruktur einer anderen DB bezogen. Und deine Aussage suggeriert da irgendwie, daß alleine dieser Punkt schon sehr aufwändig ist.

  • koehlerbv


    Die Problematik mit der Template-Anpassung ist mir bewusst. Aus der Erfahrung mit der Gestaltungs-Anpassung der neuen Ablage-DB habe ich gelernt, dass eine exakte Dokumentation der Anpassungen das Leben nach einem Update doch erheblich verbessern kann. Ab und an ist mir dort eine Gestaltungs-Sperre flöten gegangen.


    Aber vor diesem Thema muss ich einfach mein Aktionen oder Agenten zum Laufen bringen. Ansonsten macht's keinen Spass mehr.


    Gruss
    Tombac

  • koehlerbv
    taurec


    Habe auf meiner Suche nach Lösungen doch immerhin ein Script erstellen können, das selektierte Mails in die zentrale Ablage schiebt. Allerdings mit ein paar Einschränkungen:


    - Das Löschen der Dokumente erzeugt immer den folgenden Fehler: [color=0000CC]Function requires a valid ADT argument[/color].
    - Die Ansicht der Benutzer-DB wird nicht aktualisiert.


    .. und das wichtigste Handicap:


    - Die Mails lassen sich im Augenblick nur in einen [color=CC0000]definierten Ordner [/color] ablegen. Ziel ist, wie ihr ja schon heftig diskutiert habt, den Zielordner aus einem Dialog auszuwählen.


    Hier mein Code:


    *******************
    Sub Click(Source As Button)
    Dim sesMain As New NotesSession
    Dim CurrentDB As NotesDatabase
    Dim TargetDB As NotesDatabase
    Dim docMail As NotesDocument
    Dim tmpdoc As NotesDocument
    Dim DestinationDoc As NotesDocument
    Dim dcl As NotesDocumentCollection

    Set CurrentDB = sesMain.CurrentDatabase

    Set TargetDB = sesMain.GetDatabase("omg-srv-01","mail/Objekte.nsf")
    Set dcl = CurrentDB.UnprocessedDocuments
    Set docMail = dcl.GetFirstDocument
    While Not docMail Is Nothing
    Set tmpdoc = dcl.GetNextDocument(docMail)
    Set DestinationDoc = docMail.CopyToDatabase(TargetDB)
    Call DestinationDoc.PutInFolder("[color=CC0000]000 Vorlagen/Papierkorb\PAPIERKORB[/color]")
    [color=0000FF]Call docMail.Remove(True)[/color]
    Set docMail = tmpdoc
    Set docMail = dcl.GetNextDocument(docMail)
    Wend
    End Sub
    *******************


    Vielen Dank für eure Hilfe


    Gruss
    Tombac

  • Bei der Ordnerwahl wirst du vermutlich etwas tricksen müssen. Im Gegensatz zu @PickList kennt PickListStrings kein "Folder"-Parameter. Daher kansnt du z.B. daher gehen und basierend auf der Ansicht $FolderAllInfo eine eigene Ansicht bauen (bspw. nur die erste Saplte übernehmen) bauen und die mit PickListStrings anzeigen lassen.


    Jedenfalls fällt mir gerade nichts besseres ein....


    Was das "valid" ADT argument" angeht: auch hier fällt mir gerade nichtss Sinniges ein. In der KB allerdings ist in einem Artikel davon die Rede, dass das bei Ressourcen-Dokumenten auftritt, wenn Owner Restrictions drauf liegen. Hast du also z.B. das Recht, das Dokument zu löschen, sowohl von der ACL, wie auch von der DB-Logik her?

    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

  • Also für die Ordnerauswahl kann man wie gesagt durch Kombination von Formelsprache und Script zurückgreifen.


    Und warum dein Script auf ein Fehler läuft ist recht offensichtlich:


    Du holst dir am Anfang der Schleife das nächste Dokument, am Ende weisst du dieses wieder docMail zu und versuchst dann wieder das nächste Dokument zu holen.
    Da du vermutlich nur eines markiert hast, versichst du das nächste Dokument von nichts zu holen und nichts ist eben kein gültiges ADT Argument

  • Das mit dem "invalid ADT argument" ist etwas anders, als meine Vorredner erwähnen ...


    Die Idee mit dem tmpdoc ist schon nicht schlecht, aber dann muss man auch dieses später verwenden. Eine Kombination von docMail.Remove und docMail.dcl.GetNextDocument (docMail) ist dann eben äusserst ungesund - NextDocument zu was? docMail? Das wurde doch gerade explizit gemeuchelt - wie soll da noch der Nachfolger bestimmt werden??


    Bernhard

  • Hallo RockWilder, taurec, koehlerbv


    Weit entfernt vom LotusNotes-Designer möchte ich euch noch für eure Antworten danken.


    Den Fehler mit dem ungülten ADT Argument sehe ich nun klar ein: Wo nichts mehr ist, kann nichts mehr zugeordnet werden. Ich denke, dieses Problem werde ich in den Griff kriegen. An den Rechten kann es sicher nicht liegen, den die selektierten Mails werden ja auch tatsächlich gelöscht.


    Aber das sieht man auf den ersten Blick nicht, es sei denn ich würde die Ansicht übers Script aktualisieren. Aber auch das wird keine Hexerei sein.


    Was ich mir noch nicht ganz vorstellen kann, ist die Kombination von der Formelsprache mit LotusScript. So würde ich mit dem Formelbefehl @PickList([Folders] zuerst eine Auswahl treffen, diese Auswahl einer Stringvariablen zuordnen und dann in meinem Script dem PutInFolder-Befehl übergeben.


    Stimmt das so in etwa?


    Dann müsste ich den Formel-Befehl irgendwie übers Script aufrufen können. Geht das denn?


    Gruss
    Tombac (der Anfänger)