Domino 9 und frühere Versionen > ND6: Entwicklung
Ui Funktionen periodisch nutzen
AlexS78:
Hi,
um ein Bild in einer Mail anzuzeigen, benötige ich im Skript UI Funktionen.
(Call uidoc.Import) Da es diesen Befehl im Backend nicht gibt.
Da dies aber pereodisch geschehen soll funktioniert der entsprechende Agent, wegen den UI Befehlen, natürlich nicht.
Gibt es irgendeine Möglichkeit (Workaround) mit dem sich dies doch lösen lässt?
Vielen Dank
Alex
smoki:
Hallo!
Im Backend, kannst du Bilder nur als Anhang einhängen. Das ist nicht "immer" schön, aber vielleicht die beste, weil einfachste Lösung (einfach=stabil). In der Regel können sich die Anwender damit abfinden.
Sollte es immer das gleiche Bild sein, kannst du es in eine Datenbank in ein Bodyfeld ablegen und dieses vielleicht in die Mail kopieren?! (Nie versucht)
Mit UI-Klassen kommst du vermutlich nicht weit. Ausser du schreibst etwas, dass ausserhalb des Servers läuft und wo ein Client installiert ist. Dort könntest du via "VBScript" und via CreateObject("Notes.NotesUiWorkspace") die Aktion durchführen. Dieser Lösungsansatz ist aber ggf. etwas instabil (da COM verwendet wird... Client muss immer gestartet sein usw.).
Mit DXL müsste man eigentlich auch ein Bild einfügen können, leider habe ich mich bisher nur am Export eines Bildes versucht... Prinzipiell müsste es aber umgekehrt auch gehen.
Ich kopiere den gesamten Beispiel-Source für den Export lieber nicht hier herein... da es schon etwas länger ist, hier mein Link: http://smoki.atblogs.de/index.php?op=ViewArticle&articleId=359&blogId=82
Prinzipiell geht es aber ähnlich, du müsstest das File (GIF oder GMP) mit dem Bild laden (FileInputStream) , uuencodieren und dann mit den entsprechenden Tags <gif> oder <bmp> in ein Richtextfeld einfügen.
Anschliessend mit einem DXLImporter als Dokument in eine Datenbank importieren. Dieses Dokument müsstest du anschliessend versenden können.
Irgendwann will ich auch das Gegenbeispiel schreiben, aber bisher hatte ich noch nicht die Zeit dafür gefunden und kann dir auch nicht versprechen, dass ich diese bald finde.. :(
Vielleicht hilft dir ja einer der Lösungsansätze weiter? (ggf. kannst du ja die Anwender mit dem Bild als Attachment zufrieden stellen und ihnen versprechen, dass zu einem späteren Zeitpunkt eine bessere Lösung nachgereicht wird??)
Gruss
Chris
Wilhelm:
Hallo zusammen...
@Chris: Lösungsansatz via COM:
--- Zitat ---NotesUIWorkspace class
Note This class is not supported in COM.
--- Ende Zitat ---
Zum anderen muss bei einer COM-Sitzung der Notes-Client nicht zwingend gestartet werden.
@Alex: In ein RichText-Feld hängst Du über Backend das Bild an.
Mittels eines Java-Appletts lässt Du dir den Inhalt des Attachments anzeigen. Diese Methode ist nicht wirklich die schnellste, aber funktioniert recht brauchbar.
Sollte es sich um ein Standard-Mailtemplate handeln, kommst Du aber hiermit auch nicht weit.
Gruß
Willi
smoki:
Ok.. Aber ich hats glaub ich irgendwann mal laufen, mit COM?! Aber vielleicht irre ich mich da auch...
So... Ich habe mal probiert ein GIF mittels DXL in ein Richtext einzufügen, via LotusScript. (Ist Quick & realy dirty *G*)
Hier der Code:
--- Code: ---Sub Initialize
Dim s As New NotesSession
Dim db As NotesDatabase
Dim doc As NotesDocument
Dim inputStream As NotesStream
Dim outputStream As NotesStream
Dim dxlexporter As NotesDXLExporter
Dim docNode As NotesDOMDocumentNode
Dim nodeList As NotesDOMNodeList
Dim node As NotesDOMNode
Dim parnode As NotesDOMNode
Dim textnode As NotesDOMNode
Dim pictureNode As NotesDOMElementNode
Dim gifNode As NotesDOMNode
Set db = s.CurrentDatabase
Set doc = db.CreateDocument
doc.Form = "Test"
Set rtitem = doc.CreateRichTextItem("Body")
Call doc.save(True,False)
Set inputStream = s.CreateStream
Set outputStream = s.CreateStream
Set dxlexporter = s.CreateDXLExporter(doc,inputStream)
Call dxlexporter.process()
Set domParser=s.CreateDOMParser(inputStream, outputStream)
domParser.Process
'get the document node
Set docNode = domParser.Document
' process here
Set nodeList = docnode.GetElementsByTagName("richtext")
Set node = nodelist.GetItem(1)
Set parnode = docNode.CreateElementNode("par")
Call node.AppendChild(parnode)
Set pictureNode = docNode.CreateElementNode("picture")
Call parnode.AppendChild(pictureNode)
Dim heightAttr As NotesDOMAttributeNode
Dim widthAttr As NotesDOMAttributeNode
Set gifnode = docNode.CreateElementNode("gif")
Call pictureNode.AppendChild(gifnode)
Dim picture As String
Dim fin As Integer
Dim finOpen As Integer
Dim worktext As String, leftover As String
fin = Freefile
picture=""
Open "c:\test.gif" For Input As fin
'** start getting data from the input file, encoding it, and sending it
'** to the output file
Const CHUNKSIZE = 15000
datain = GetFileChunk(fin, CHUNKSIZE)
Do While (Len(datain) > 0)
'** encode in groups of 57 characters, which will give us output
'** in lines of 76 characters (fairly standard)
leftover = leftover & datain
While (Len(leftover) > 57)
worktext = Left$(leftover, 57)
leftover = Mid$(leftover, 58)
dataout = EncodeBase64(worktext)
picture=picture+dataout
Wend
datain = GetFileChunk(fin, CHUNKSIZE)
Loop
'** encode anything we had left, and close the files
If (Len(leftover) > 0) Then
picture=picture+EncodeBase64(leftover)
End If
Close #fin
Set textNode = docNode.CreateTextNode(picture)
Call gifnode.AppendChild(textNode)
Call domparser.serialize()
Print outputstream.ReadText
Dim importer As NotesDXLImporter
Set importer = s.CreateDXLImporter ( outputstream , db )
importer.DocumentImportOption = DXLIMPORTOPTION_REPLACE_ELSE_IGNORE
importer.ExitOnFirstFatalError = False
Call importer.Process
End Sub
--- Ende Code ---
Du benötigst für die Base64 funktionen, von nfstools.com
-> http://www.nsftools.com/tips/NotesTips.htm#lsencryption
Gruss
Chris
boemitsu:
Habe den Code von smoki ausprobiert und funktioniert soweit wie gewünscht. Dokument wird mit dem Bild erstellt und Bild wird angezeigt.
Nun sollte ich eben dieses erzeugte Dok. noch intern und extern versenden können.
Ein doc.send am Ende (nach Call importer.Process) verschickt mir zwar ein Mail, dies enthält aber kein Bild...
Wenn ich das Dok. in der DB anschaue, ist alles i.O.
Wie kann ich das Bild mitschicken ?
Navigation
[0] Themen-Index
[#] Nächste Seite
Zur normalen Ansicht wechseln