Dokument aus einer anderen Datenbank in RichText-Feld einfügen

  • Hallo zusammen,


    ich möchte gerne Mails aus dem Posteingang vollständig in ein Richtext-Feld eines neuen Dokuments übernehmen. Das "Problem" ist, dass das neue Dokument nicht im Mailfile erzeugt werden soll, sondern in einer anderen Datenbank. Außerdem kann ich die Gestaltung des Mailfiles nicht anpassen.


    Ich brauche also eine Funktion in meiner neuen Datenbank, die quasi temporär den Posteingang öffnet, mich ein Dokument auswählen lässt, und den vollständigen Inhalt in das Feld "Body" übernimmt. Ich habe es bisher mit @Picklist probiert, aber damit habe ich bisher nur eine Spalte aus dem Posteingang übernehmen können.


    Ich kann kein LotusScript, bin aber lernwillig. Wer kann mich in die richtige Richtung schubsen?


    Danke im voraus! :)

  • Da wirst du auf jeden Fall mit LotusScript arbeiten müssen.


    Grobe Vorgehensweise:


    Mit PickListCollection die Dokumente auswählen lassen.


    Die Collection dann durchgehen.


    Ein neues Dokument im Backend erstellen (CreateDocument oder New NotesDocument)


    Dort dann ein RichTextItem erstellen (CreateRichTextItem)


    Und dann mit RenderToRTItem das Dokument aus der Collection in das RichTextItem rendern.


    Dokument speichern (Save) und ggfls öffnen (EditDocument)


    Mit der Suche nach den genannten Methoden findest du in der Designerhilfe Details dazu und wenn da noch konkrete Fragen sind kannst du sie gerne stellen

  • Danke schonmal für das Schubsen in die richtige Richtung!


    Nachdem ich mir Deine Hinweise ausführlich zu Gemüte geführt habe, und folgenden Code zusammengefriemelt:


    Leider funktioniert das Script so nicht. Ich bekomme natürlich die Picklist angezeigt, danach aber den "Object Variable not set". Ein Dokument wird nicht erstellt. Wenn ich das was ich geschrieben habe einigermaßen richtig verstehe, liegt es wohl in der Umwandlung der Collection in ein Dokument, weil für das RendertoRTItem ein Dokument benötigt wird. Ist das mein Fehler? Und wonach muss ich suchen, um es richtig zu machen?


    Servername und Username habe ich bei mir natürlich durch die echten Namen ersetzt. Würde ich natürlich auch gerne variabel gestalten, nach etwas wie "currentserver" oder "currentuser" habe ich bereits gesucht, aber auch nichts gefunden.


    Danke im voraus!

  • Also auf die Dokumente in der Collection greifst du per GetFirstDocument und GetNextDocument zu. Darum dann eine SChleife wenn du mehrere Dokumente auswählst, ansonsten reiucht einfach ein GetFirstDocument.


    In welcher zeile kommt denn der Fehler genau ?


    Sinnvollerweise baust du ein Errorhandling mit ein damit du diese infos bekommst oder du nutzt den Debugger.


    Du willst doch das in der PickList ausgewählte Dokument in das neue Dokument rendern, oder ?
    Dann sind die uidoc Zeilen überflüssig, denn damit holst du dir nur das gerade geöffnete Dokument nicht aber das ausgewählte.


    Den aktuellen Server bekommst du indem du NotesDatabase.Server abfrägst, den aktuellen User per NotesSession.CurrentUser

  • Juhu, die erste Hürde ist genommen. Nachdem ich die GetFirstDocument methode eingefügt habe, tritt der Fehler nicht mehr auf. Zusätzlich ein Error-Handling, falls der Picklist-Dialog abgebrochen wird, damit kein leeres Dokument erzeugt wird.


    Zwei Bitten habe ich noch:
    1. Für meinen ersten Tag mit LotusScript glaube ich nun, in etwa verstanden zu haben, was ich da geschrieben habe. Daran werde ich mich zukünftig sicherlich auch orientieren. Es wäre mir daher lieb, wenn Du noch einen Blick darauf werfen würdest, ob ich überflüssige Schnipsel verwendet habe.
    2. Ich verneige mich vor Deinem Wissen, aber einfach so NotesDatabase.Server und NotesSession.CurrentUser in den Raum zu werfen überfordert mich heute. Wenn ich nach den Begriffen in der Hilfe suche, finde ich nichts passendes. Sind das Variablen, die ich in den Abschnitt "Auslesen der MailDB" einbauen soll oder ist der Ansatz bereits falsch?


    Und noch drei Fragen:
    1. Ist das normal, dass in der deutschen Designer-Hilfe die Dokumente zu LotusScript trotzdem alle in Englisch sind?
    2. Wo kann ich eine Hilfe/ein Handbuch zu LotusScript in Deutsch finden?
    3. Bei dem Befehl "Set doc = New NotesDocument( db )" ist keine Maske vorgegeben, allerdings habe ich ja ein "doc.Form = "Testmaske"" eingebaut. Bewirkt das tatsächlich die Wahl der Maske?


    Vielen Dank für die Hilfe!


  • Zitat


    2. Ich verneige mich vor Deinem Wissen, aber einfach so NotesDatabase.Server und NotesSession.CurrentUser in den Raum zu werfen überfordert mich heute. Wenn ich nach den Begriffen in der Hilfe suche, finde ich nichts passendes. Sind das Variablen, die ich in den Abschnitt "Auslesen der MailDB" einbauen soll oder ist der Ansatz bereits falsch?


    NotesDatabase und NotesSession sind Objekte und Server und CurrentUser Eigenschaften dieser. Entweder suchst du nach NotesDatabase und findest dort dann die Server Eigenschaft oder du suchst nur nach Server.


    Die Schreibweise Objekt.Eigenschaft sollte eigentlich nur den Zusammenhang verdeutlichen, denn die Objekte selber verwendest du ja schon.


    Zitat


    Und noch drei Fragen:
    1. Ist das normal, dass in der deutschen Designer-Hilfe die Dokumente zu LotusScript trotzdem alle in Englisch sind?


    Also zumindest teilweise ist das so. Ich selbst verwende eh nur die englische Hilfe, da ich diese persönlich besser finde und man gerade mit den englischen Stichworten, die z.B. bei Fehlermeldungen kommen, einfach leichter zu finden sind.
    Mal davon abgesehen, daß es in der IT ja eh so ist, daß die besten Dokus auf englisch sind.


    Zitat


    2. Wo kann ich eine Hilfe/ein Handbuch zu LotusScript in Deutsch finden?


    Ist mir keines bekannt außer der Designerhilfe, die ja aber zum Teil zumindest in englisch ist, wie du schon festgestellt hast.


    Zitat


    3. Bei dem Befehl "Set doc = New NotesDocument( db )" ist keine Maske vorgegeben, allerdings habe ich ja ein "doc.Form = "Testmaske"" eingebaut. Bewirkt das tatsächlich die Wahl der Maske?


    Das ist der absolut korrekte Weg, wobei das nur bedeutet, daß beim Öffnen des Dokumentes diese Maske verwendet wird.
    Um z.B. berechnete Felder der Maske auch in dem Dokument zu berechnen musst du vor dem Speichern noch ein ComputeWithForm aufrufen.


    Als Hinweis noch:


    Die Variante, wie du die MailDB ausliest, funktioniert einwandfrei, sofern immer nur auf den Server und das dort liegende Mailfile zugegriffen wird.
    Verwendet der User z.B. eine lokale Arbeitsumgebung und hat gerade keinen Zugriff auf den Server dann wird das nicht funktionieren.
    Idealerweise erzeugst du eine leere NotesDatabase (New NotesDatabase("","")) und rufst dann die Methode OpenMail auf, dann hast du das in der aktuellen Arbeitsumgebung definierte Mailfile.


    Aber alleine wie du auf diese Variante über die NotesRegistration-Klasse gekommen bist, verdient für einen Anfänger schon mal Respekt

  • Zitat

    NotesDatabase und NotesSession sind Objekte und Server und CurrentUser Eigenschaften dieser. Entweder suchst du nach NotesDatabase und findest dort dann die Server Eigenschaft oder du suchst nur nach Server.


    Die Schreibweise Objekt.Eigenschaft sollte eigentlich nur den Zusammenhang verdeutlichen, denn die Objekte selber verwendest du ja schon.


    Ja, ich finde da etwas, aber ich bekomme es (rein gedanklich) nicht auf die Reihe. Ich brauche ja mailserver$ und mailfile$. Die lese ich per NotesRegistration-Klasse aus dem Adressbuch aus. Muss ich beim Server vorher eine Variable definieren, dieser den Wert notesSession.ServerName zuweisen und dann als Parameter an die Registration-Klasse übergeben? Sorry, ich stehe gerade voll auf dem Schlauch. :(


    Zitat

    Also zumindest teilweise ist das so. Ich selbst verwende eh nur die englische Hilfe, da ich diese persönlich besser finde und man gerade mit den englischen Stichworten, die z.B. bei Fehlermeldungen kommen, einfach leichter zu finden sind.
    Mal davon abgesehen, daß es in der IT ja eh so ist, daß die besten Dokus auf englisch sind.


    Da gebe ich Dir Recht. Allerdings lese ich gerne parallel, um einige Dinge schneller verstehen zu können.


    Zitat

    Das ist der absolut korrekte Weg, wobei das nur bedeutet, daß beim Öffnen des Dokumentes diese Maske verwendet wird.
    Um z.B. berechnete Felder der Maske auch in dem Dokument zu berechnen musst du vor dem Speichern noch ein ComputeWithForm aufrufen.


    Auch das möchte ich richtig verstehen können. Normalerweise wird ja am Dokument gespeichert, welche Maske verwendet wird. Mir ist klar, dass die Maske nicht im Dokument gespeichert wird (es sei denn, ich setze entsprechende Option). Eigentlich möchte ich ja nur erreichen und sicherstellen, dass nicht immer die Vorgabemaske genommen wird, sondern dass ich durchaus auch zwei ähnliche Scripts in einer Datenbank verwenden kann, die dann unterschiedliche Masken verwenden. Kurzum: Das wie an jedem "normalen" Notes-Dokument die zu verwendende Maske gespeichert wird. Wenn ich das damit erreiche, bin ich ja zufrieden.


    Zitat

    Die Variante, wie du die MailDB ausliest, funktioniert einwandfrei, sofern immer nur auf den Server und das dort liegende Mailfile zugegriffen wird. Verwendet der User z.B. eine lokale Arbeitsumgebung und hat gerade keinen Zugriff auf den Server dann wird das nicht funktionieren. Idealerweise erzeugst du eine leere NotesDatabase (New NotesDatabase("","")) und rufst dann die Methode OpenMail auf, dann hast du das in der aktuellen Arbeitsumgebung definierte Mailfile.


    Wenn ich die Hilfe dazu richtig verstehe, liefert mir das den Server und die Datenbankbezeichnung aus der notes.ini. Die Datenbankbezeichnung ist mir aber doch relativ egal, ich brauche ja eigentlich Namen und Pfad zur Datei. Kann ich nicht dann auch gleich die "GetEnvironmentString method" verwenden? Denn sowohl Servername als auch Pfad zum Mailfile stehen doch in der Notes.ini.
    Mir geht es aber in erster Linie hierbei um eine einfache Variante. Augenblicklich sind bei uns sowohl die neue Datenbank als auch Mailfile auf dem Server, lokale Repliken gibt es nicht. Insofern ist die "failsave"-Variante nette Zukunftsabsicherung aber im Moment nicht zwingend notwendig.

  • Wie gesagt, wenn du den richtigen MailServer und MailPfad ermitteln willst, dann würde ich die am Ende genannte Variante verwenden.
    OpenMail liefert dir ein NotesDatabase-Objekt zurück das die aktuelle Maildatenbank des Users enthält. Die Definition holt er sich aus der Arbeitsumgebung bzw Notes.ini. Dort steht aber MailServer und MailPfad.
    Und dann kannst du einfach über die Eigenschaften Server und FilePath diese an deine Funktion übergeben.


    Klar könntest du dir das ganze auch aus der Notes.ini holen, allerdings habe ich schon festgestellt, daß da manchmal etwas alte Werte zurückgeliefert werden, da die Änderungen zeitversetzt dort hineingeschrieben werden.
    Und wenn der User direkt davor erst die Arbeitsumgebung gewechselt hat, dann kann das auch schief laufen.


    Die sicherste Variante ist definitiv die mit OpenMail


    Zum Thema Form:


    Das Feld Form definiert, wie du richtig geschrieben hast, die Maske mit der zuerst versucht wird ein Dokument zu öffnen.
    Erfüllt also den von dir genannten Zweck

  • Ich habe es jetzt auf Dein Anraten mit OpenMail probiert. Dazu habe ich folgenden Code verwendet:

    Code
    Dim db2 As New NotesDatabase ( "", "" )
    Call db2.OpenMail


    db2 habe ich verwendet, weil ich db und db2 für eine Variable halte, die sinnvollerweise dann eindeutig und nur einmal verwendet werden sollte. Ich hoffe, dass ich damit richtig liege.


    Mit einer Messagebox werden mir die Werte db2.Server und db2.Filepath auch einwandfrei ausgegeben. Da ich davon ausgehe, dass es sich bei mailserver$ ebenfalls um eine Variable handelt, habe ich sie einfach ausgetauscht. Doch scheinbar geht das nicht. Wie bekomme ich nun die mit OpenMail ermittelten Werte als Parameter an die PickListCollection übergeben?


    P.S.: Was hältst Du von so einem Buch:
    http://www.amazon.de/LotusScri…oks&qid=1219831371&sr=1-1

  • Auweia, ich habe zwar db2.Server angepasst, aber mailfile$ gelassen. Klar, dass ich eine Fehlermeldung bekommen habe. :wuet: Es ist meistens die eigene Dummheit, die einen stoppt... :)


    Ich danke recht herzlich für die Hilfe und die behutsame Heranführung an LotusScript.


    Fehlt mir nur noch eine Buchempfehlung, damit ich irgendwann auch mal etwas zurückgeben kann... :)