Das Notes Forum
Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: Don Pasquale am 20.01.04 - 10:39:37
-
Hi Folks,
ich möchte mit NotesStream eine BinärDatei erstellen,
als Beispiel habe ich das BodyFeld eines doc welches ich
in eine Datei schreiben möchte.
Ich schreibe zwar die Daten aus dem Body Feld,
aber es wird nur der ASCII Text genommen, alles
was nicht ASCII ist, wird gefiltert. Das will ich verhindern.
Wer weiss Rat ?
Ciao
Don Pasquale
Dim pathname As String
pathname = PFAD & "\" & "mail.dat"
Set stream = session.CreateStream
If Not stream.Open(pathname, "binary") Then
Messagebox pathname,, "Open failed"
' Exit Sub
End If
If stream.IsReadOnly Then
Messagebox pathname,, "File is read-only"
' Exit Sub
End If
If stream.Bytes <> 0 Then
' Exit Sub
End If
Call stream.Truncate
Call stream.WriteText(doc.GetItemValue("Body")(0))
Call stream.Close
-
Nächster Schritt :
Statt Write Text nehme man nur Write.
Call stream.Write(doc.GetItemValue("Body")(0))
Nun wird aber ein Byte Array benötigt.
Wie packt man ein BodyFeld in ein ByteArray ?
-
was liefert denn dieser Ausdruck hier zurück: doc.GetItemValue("Body")(0)
andere Frage: was ist dein Ziel (außer eine Binärdatei zu erstellen)?
-
doc.GetItemValue("Body")(0)
liefert mir den Inhalt des Bodyfeldes des aktuellen Doc´s.
Was ich will ist, den Inhalt des Body-Feldes ohne verlust irgendwelcher Formatierungsinformation in eine Datei schreiben und später wieder zurückschreiben. Alle Varianten bisher ermöglichten nur das abspeichern des ASCII-Textes, aber das reicht mir nicht.
Deswegen der Weg üer ein ByteArray. Irgendwie muß das ja klappen.
Ciao
Don Pasquale
-
doc.GetItemValue("Body")(0)
liefert mir den Inhalt des Bodyfeldes des aktuellen Doc´s.
Was ich will ist, den Inhalt des Body-Feldes ohne verlust irgendwelcher Formatierungsinformation in eine Datei schreiben und später wieder zurückschreiben. Alle Varianten bisher ermöglichten nur das abspeichern des ASCII-Textes, aber das reicht mir nicht.
ich denke nicht, dass du mit
doc.GetItemValue("Body")(0)
irgendwelche Formatierungen auslesen kannst. AFAIK kriegst du da den Text des Feldes (evtl. mit irgendwelchen ASCII-Codes für Zeilenumbrüche oder Tabs), du kriegst aber keine Information darüber, ob da z. B. rote Schrift verwendet wird, oder etwas fett geschrieben ist. Außerdem erhältst du so auch keine Informationen über Attachments oder andere eingebettete Objekte.
Was du tun kannst ist, dein Dokument nach XML zu exportieren, das werden denke ich alle Infos mitgenommen.
-
@Thomas,
ich denke Du hast Recht, das GetItemVlaue liefert mir nur ASCII.
Die Sache mit den Attachments ist längst gelöst.
Ich benötigte nur noch den byteweisen zugriff auf das BodyFeld (einer Mail) der Weg über XML will ich erstmal vermeiden. Das ist ja ebenfalls Neuland für alle Beteiligten hier,
Ciao
Don Pasquale
-
na ja, theoretisch müsstest du dann eben Buchstabe für Buchstabe deines Strings in ein Byte umwandeln und das dann in dein Array schmeißen
z.B.
Buchstabe e = 0x65 = 01000001. Deinem Byte Array müsstest du also für ein e das entsprechende Byte hinzufügen
-
@Thomas,
ja, aber wie kann ich auf das Body Feld zeichen für zeichen zugreifen ?
Ciao
Don Pasquale
-
na ungefähr so
dim sBody as string
sBody = doc.GetItemValue("Body")(0)
dim i as integer
dim sChar as string
for i = 1 to len(sBody)
sChar = mid(sBody,i,1)
...
...
next
-
@Thomas,
wie Du selbst schon geschrieben hast:
GetItemValue bekomme ich nicht die
Sonderzeichen oder Steuerzeichen die sich
ebenfalls im BodyFeld befinden.
Ciao
Don Pasquale
-
da bin ich überfragt. wie so ein RTFeld aufgebaut ist weiß ich ungefähr. wie du das alles in eine Datei rausschreiben kannst -> keine Ahnung, außer der Methode mit dem DXL-Exporter. Ich würde davor auch nicht soviel Respekt haben. Das ist echt kein Hexenwerk, die Hilfe bietet einige Beispiele und hier sind ja ein paar Leute, die sich auch damit auskennen.
-
An den binären Aufbau eines RT-Feldes kommst Du mit Bordmitteln nicht ran. Wie gut der DXL-Exporter das leistet, weiss ich nicht. Sonst gibt es auch hier wieder nur die Möglichkeit, mit Add-Ons wie rtlib ( http://www.rtlib.com ) oder Midas ( http://www.geniisoft.com ) zuzugreiifen.
-
@Semaphor
Gibt es denn die Möglichkeit aus Visual Basic heraus da ran zu kommen ?
Ciao
Don Pasquale
-
Na ja, über die API, aber dann kanns Dus auch gleich aus LS heraus aufrufen. Das ist das, was Normunds in RTLib macht. Das braucht allerdings Geduld und Nerven und die Bereitschaft, mit RBODs zu leben.
-
RBODs ?
-
Siehe unser Wörterbuch ;-)
-
Na ja, über die API, aber dann kanns Dus auch gleich aus LS heraus aufrufen. Das ist das, was Normunds in RTLib macht. Das braucht allerdings Geduld und Nerven und die Bereitschaft, mit RBODs zu leben.
Welche API Befehle könnten das denn sein ?
Aus der RTLib wird man ja nicht schlau, weil geschützt.
Ciao
Don Pasquale
-
Kann ich Dir nicht wirklich sagen. Vielleicht kann Bernhard mal sagen, ob davon was in Normunds Buch steht, glaube ich aber eher weniger. Bei Ben Langhinrichs gibts Tutorials, die sagen, wie die RT-Felder funktionieren. Eines ist sicher, so ein Ding lässt sich nicht so ohne weiteres mit einem einzigen Call auslesen, da steckt deutlich mehr dahinter. Schau mal auf Bens Website nach (wie gesagt, ich weiss nicht, wie tief er da in die Materie wirklich reingeht).
http://www.geniisoft.com
-
was mich mal interessieren würde ist, was du für einen Zweck damit verfolgst, dieses Teil in eine binäre Datei zu exportieren. Was willst du denn mit der Datei mal machen?
-
Die Attachments und der Mailinhalt sollen auf einem Dokumentserver archiviert werden.
Da es kein "Speichern unter " für eMail unter Lotus gibt im Gegensatz zu Outlook sehe ich derzeit nur diesen Weg. Die Dinge müssen ja irgendwann mal auf wieder zurück.
Ciao
Don Pasquale
-
Auch wenn ich mich wiederhole, aber für sowas ist der XML-Export ganz gut geeignet. Das einfachste ist, du exportierst damit komplette Dokumente (dafür gibts Beispiele in der Hilfe, die a. einfach sind und die du b. fast 1:1 übernehmen kannst), da musst du dann nicht noch viel rumprogrammieren, und das resultierende XML kannst du dann auch wieder recht einfach in Notesdokumente zurück "verwandeln"
-
und das resultierende XML kannst du dann auch wieder recht einfach in Notesdokumente zurück "verwandeln"
OK, ich teste mal diesen Weg an. Dafür mache ich aber einen neuen Thread auf.
Ciao
Don Pasquale