Autor Thema: Ui Funktionen periodisch nutzen  (Gelesen 2183 mal)

Offline AlexS78

  • Frischling
  • *
  • Beiträge: 40
Ui Funktionen periodisch nutzen
« am: 18.05.06 - 16:59:28 »
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

Offline smoki

  • Senior Mitglied
  • ****
  • Beiträge: 325
  • Geschlecht: Männlich
    • Smoki's Lotus Notes
Re: Ui Funktionen periodisch nutzen
« Antwort #1 am: 18.05.06 - 23:44:08 »
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

Offline Wilhelm

  • Aktives Mitglied
  • ***
  • Beiträge: 214
  • Geschlecht: Männlich
Re: Ui Funktionen periodisch nutzen
« Antwort #2 am: 19.05.06 - 09:23:17 »
Hallo zusammen...

@Chris: Lösungsansatz via COM:
Zitat
NotesUIWorkspace class 
Note  This class is not supported in COM.

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
Ich will endlich die F9-Taste in diesem Forum haben!!!

Offline smoki

  • Senior Mitglied
  • ****
  • Beiträge: 325
  • Geschlecht: Männlich
    • Smoki's Lotus Notes
Re: Ui Funktionen periodisch nutzen
« Antwort #3 am: 19.05.06 - 10:17:19 »
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

Du benötigst für die Base64 funktionen, von nfstools.com
-> http://www.nsftools.com/tips/NotesTips.htm#lsencryption

Gruss
Chris

Offline boemitsu

  • Aktives Mitglied
  • ***
  • Beiträge: 190
  • What goes around comes around
Re: Ui Funktionen periodisch nutzen
« Antwort #4 am: 05.01.07 - 15:57:59 »
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 ?
Gruss

Michael

Offline m3

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.102
  • Geschlecht: Männlich
  • Non ex transverso sed deorsum!
    • leyrers online pamphlet
Re: Ui Funktionen periodisch nutzen
« Antwort #5 am: 05.01.07 - 16:25:36 »
Erst speichern, dann senden?
HTH
m³ aka. Martin -- leyrers online pamphlet | LEYON - All things Lotus (IBM Collaborations Solutions)

All programs evolve until they can send email.
Except Microsoft Exchange.
    - Memorable Quotes from Alt.Sysadmin.Recovery

"Lotus Notes ist wie ein Badezimmer, geht ohne Kacheln, aber nicht so gut." -- Peter Klett

"If there isn't at least a handful of solutions for any given problem, it isn't IBM"™ - @notessensai

Offline boemitsu

  • Aktives Mitglied
  • ***
  • Beiträge: 190
  • What goes around comes around
Re: Ui Funktionen periodisch nutzen
« Antwort #6 am: 05.01.07 - 16:40:15 »
Sorry, das hatte ich ebenfalls schon probiert...bringt nix.

Habe auch probiert, ein neues Dok. zu setzen:

Nach dem ersten Speichern die UNID merken und am Ende das Dok. wieder holen (getDocumentbyUNID) und dieses dann verschicken...brachte auch nix.

Wenn ich mir einen separaten Agent schreibe, der mir das Dok. mit der UNID holt und versendet, funktionerts...Es muss also grundsätzlich möglich sein, aber wie  ???



Gruss

Michael

Offline smoki

  • Senior Mitglied
  • ****
  • Beiträge: 325
  • Geschlecht: Männlich
    • Smoki's Lotus Notes
Re: Ui Funktionen periodisch nutzen
« Antwort #7 am: 08.01.07 - 19:24:46 »
Da das Dokument "ausserhalb" vom DXL bearbeitet wird, solltest du es dir nochmal neu über die NotesID holen!

Dann sollte es gehen!

Gruss
Chris

Offline boemitsu

  • Aktives Mitglied
  • ***
  • Beiträge: 190
  • What goes around comes around
Re: Ui Funktionen periodisch nutzen
« Antwort #8 am: 10.01.07 - 18:14:30 »
ich habs so gelöst, dass am Ende ein anderer Agent aufgerufen und die NoteID mitgegeben wird (agent.Run bzw. agent.ParameterDocID). Funktioniert einwandfrei.

@smoki:
Da das Dokument "ausserhalb" vom DXL bearbeitet wird, solltest du es dir nochmal neu über die NotesID holen!

Mit der NoteID hat es leider auch nicht funktioniert (innerhalb der Routine). Wie meinst du "ausserhalb" ?

Vielleicht weil man beim DXL Importer nur die DB als Input abgeben kann ??

Wenn mir ein DXL Guru etwas Licht in meine dunkle Vermutungen spenden könnte, wäre ich dankbar...

Anyway, tausend Dank an Chris fürs Skript ! Coole Sache !
Gruss

Michael

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz