BSTR und Navision

17. August 2009 11:48

Hallöchen,

hab mal wieder ne kleine Frage zum Navision.

Ich versuche momentan im Outlook E-Mails zu erstellen (direkt über die Automations von Outlook2007, nicht über die Codeunit 397).

Der Body hat dort das Format BSTR. Diesen wollte ich mit viel Text befüllen (wir haben recht lange Artikellangtexte, die in einem Blob-Feld abgelegt sind). Deshalb hatte ich es erst über eine BigText-Variable versucht, aber damit ging es nicht.

Dann bin ich auf den in Codeunit 397 benutzten BSTR-Converter ausfmerksam geworden. Den zu befüllen geht recht einfach.
Ich weiße den Text dem Body mit

Code:
olMailItem.Body:=BSTRConverter.BSTR;


zu. Bei kurzen Mailtexten funktioniert die Sache auch einwandfrei, nur bei größeren Texten ( > geschätze 1024 Zeichen) gibt`s die Fehlermeldung:
Die Länge des Textstrings überschreitet die Größe des Zeichenpuffers.

Hab ich dort nen Fehler gemacht? Wie funktioniert denn die Sache in Codeunit 397? Diese benutzt ja (die wahrscheinlich navision-eigene) Automation 'NS Outlook Synchronization Handler', mit der ich auch längere Texte erzeugt kriege. Ich würde aber gern die Outlook-eigenen Automations nehmen, da diese doch einiges mehr an Funktionen bieten als der 'NS Outlook Synchronization Handler'.

Grüße
enno

Re: BSTR und Navision

17. August 2009 12:11

Ich weis nicht ob es klappt,
könntest du den Text in mehrere Bodys verschieben?

Ich hatte vor ein paar Jahren ähnliches, hier wurden mehrere Zeilen eingefugt.
(Allerdings war die Funktionalität auch auf Zeilen ausgelegt!)

Siehe hier:
http://www.msdynamics.de/viewtopic.php?p=1561#p1561

Re: BSTR und Navision

19. August 2009 17:02

mmhhh, ich glaub wir ham uns mißverstanden.

Und was meinst du denn mit mehreren Bodys? Meines Wissen hat ne Mail doch nur einen, oder? :-D

Deshalb nochmal bisschen Code zur Veranschaulichung, wie ich es mir gedacht habe:

Code:
tabelle.CALCFIELDS(langtextblob);
tabelle.langtextblob.CREATEINSTREAM(in_stream);

WHILE NOT (in_stream.EOS) DO BEGIN
  in_stream.READTEXT(line,260);
  BSTRConverter.AppendNextStringPortion(line);
END;

olMailItem.Body:=BSTRConverter.BSTR;


Der BSTRConverter ist die Automation 'Navision Attain Hash 1.0'.BSTRConverter (siehe auch Verwendung in Codeunit 397),
olMailItem ist die Automation 'Microsoft Outlook 12.0 Object Library'.MailItem (das MailItemobjekt von Outlook 2007).

Hab`s eigentlich ziemlich analog zur Codeunit 397 gebaut, nur halt mit der Outook-eigenen Schnittstelle. Aber bei Texten größer 1024 Zeichen kommt bei der Zuweisung olMailItem.Body:=BSTRConverter.BSTR; die Fehlermeldung "Die Länge des Textstrings überschreitet die Größe des Zeichenpuffers.".

Ich dachte eigentlich genau dafür ist der BSTRConverter da. Und der Body des MailItems sollte eigentlich auch (deutlich) mehr als 1024 Zeichen nehmen.

Jemand ne Idee?

Re: BSTR und Navision

27. November 2009 13:06

Hallo zusammen,

die gleiche Fehlermeldung erhalte ich, wenn ich den BSTR an eine Automation-Funktion mit Parameter BSTR sende [ AutomatioVar.Funktion(BStrVar.BSTR); ]
Wieso ist das so? Hat jemand bereits eine Lösung für das Problem?

Re: BSTR und Navision

27. November 2009 17:36

enno hat geschrieben:Hab`s eigentlich ziemlich analog zur Codeunit 397 gebaut, nur halt mit der Outook-eigenen Schnittstelle. Aber bei Texten größer 1024 Zeichen kommt bei der Zuweisung olMailItem.Body:=BSTRConverter.BSTR; die Fehlermeldung "Die Länge des Textstrings überschreitet die Größe des Zeichenpuffers.".


In CU397 steht bei mir jetzt nur z. B.
Code:
IF Body <> '' THEN BEGIN
  BSTRConverterBody.ResetBSTR;
  BSTRConverterBody.AppendNextStringPortion(Body);
END;
OSendMail.Body := BSTRConverterBody;  << ohne .BSTR

Re: BSTR und Navision

15. Dezember 2013 23:03

Hallo!

Ich habe auch dieses Problem. Hat jemand von Euch mittlerweile eine Lösung?

Ich arbeite mit den Automtions von Outlook, da es hier möglich ist Formatierungen über HTML machen zu können. Das geht mit dem Navision Synchronisation Handler leider nicht.

Gruß
Volker

Re: BSTR und Navision

16. Dezember 2013 10:32

Emails in HTML kann man bspw. über die Codeunit 400 erzeugen. Ist dann zwar SMTP, aber das sollte kein Problem sein, wenn man schon Outlook/Exchange hat. Die Frage ist dann eher, wie aufwendig sollen die Emails aussehen und kann man nicht ggf. ein einfacheres Layout wählen, um die Funktionalität aus dem Standard zu nutzen und im NAV so einfach wie möglich zu bleiben.

Re: BSTR und Navision

16. Dezember 2013 10:46

HattrickHorst hat geschrieben:Emails in HTML kann man bspw. über die Codeunit 400 erzeugen. Ist dann zwar SMTP, aber das sollte kein Problem sein, wenn man schon Outlook/Exchange hat.

Die E-Mails sollen dem User vor dem Versand angezeigt werden. Also ein "EMail-Vorschlag" soll erzeugt werden.

HattrickHorst hat geschrieben:Die Frage ist dann eher, wie aufwendig sollen die Emails aussehen und kann man nicht ggf. ein einfacheres Layout wählen, um die Funktionalität aus dem Standard zu nutzen und im NAV so einfach wie möglich zu bleiben.

In diesem konkreten Fall sollen es keine großartigen Formatierungen werden. Jedoch etwas mehr als ein Standard-Text-Layout.

Ich denke, dass die Lösung zur BSTR-Problematik bei längeren Strings durchaus interessant ist. Bei der Verwendung von anderen Automations könnte das sicherlich auch zu einem vergleichbaren Problem führen.

Re: BSTR und Navision

18. Dezember 2013 09:51

Ich denke, dass BSTR nicht mehr als 1024 Zeichen aufnehmen kann. Es sollen aber wohl mehr als 1024 Zeichen auf einmal übergeben werden (OSendMail.Body := BSTRConverterBody;).

Mit einer kleinen Änderung der Reihenfolge könnte es aber funktionieren. Man müßte doch eigentlich nur kleinere Teile an OSendMail.Body übergeben und dabei die neuen Teile hinten anfügen. Etwa so:
in_stream.READTEXT(line,260);
OSendMail.Body.appendtext := line;

Wenn ich es richtig im Kopf habe, dann macht CU 400 das so und setzt den Mailbody entsprechend zusammen. Zumindest unter http://www.msdynamics.de/viewtopic.php?f=36&t=7840&start=0&hilit=smtp hatte ich es so gelöst.

Volker