Autor(en): | Matthias TMC |
Stand: | 06.08.2005 |
Version: | 1.1 |
Notes-Versionen: | 5.x, 6.x, 7.x |
@Notes-Thread(s): | @Command([EditInsertPicture]) gibt es nicht? |
Letzte Änderung: | "Weitere Informationen" hinzugefügt (Bild in Backend-Dokument schreiben) |
1. HintergrundLotus Notes ab R5 speichert importierte Bilder nicht als BMP, sondern im jeweils vorliegenden komprimierten Format, dies hat den Vorteil, dass Dokumente nicht unnötig viel Speicherplatz in Anspruch nehmen. Der versierte Anwender wandelt also Bilder vor dem Einstellen in Notes-Dokumente mittels geeigneter Bildbearbeitungssoftware in ein komprimiertes Format um (z.B. gif oder jpeg) und importiert diese dann via Menü: „Create | Picture ...“.
2. ZweckEs soll Anwendern ein Button zur Verfügung gestellt werden, um von Notes unterstützte Bildformate (derzeit: gif, jpg, cgm, pcx, bmp) in ein Richtextfeld zu importieren. Dabei soll abgefangen werden, dass nicht auch z.B. Word-Dokumente oder etwa exe-Dateien ausgewählt werden beim Import, da diese ansonsten als unleserlicher Text hinzugefügt werden.
3. ProblemstellungEs gibt keine @Formel, die es ermöglicht, einen File-Requester zu öffnen und nur die von Lotus Notes unterstützten Bildformate auszuwählen.
@Command([FileImport]) lässt keine Parameter wie z.B. @Command([FileImport]; "GIF" : "JPG") zu.
4. AnforderungenFür den Anwender muss es einfach und schnell möglich sein, Bilder in Notes-Dokumente hinzuzufügen:
Dabei ist auch Menü "Create | Picture ..." hinderlich, da der jeweilige Filetyp ausgewählt werden muss, um das entsprechende Bild auswählen zu können.
5. LösungÜber NotesUIWorkspace.OpenFileDialog ist es möglich, Selektionskriterien vorzugeben, z.B.
vFilepath = uiws.OpenFileDialog( True, db.Title, "All supported Images|*.jpg;*.jpeg;*.cgm;*.bmp;*.gif;*.pcx|GIF-Image|*.gif|JPEG-Image|*.jpg;*.jpeg|BMP-Image|*.bmp|CGM-Image|*.cgm", "c:\")In einigen Fällen wurden wirre Zeichenfolgen am Ende der Dateiliste beobachtet. Abhilfe schafft ein doppeltes Pipe-Zeichen am Ende der Dateiliste. Der Aufruf der Methode OpenFileDialog muss dann so aussehen:
vFilepath = uiws.OpenFileDialog( True, db.Title, "All supported Images|*.jpg;*.jpeg;*.cgm;*.bmp;*.gif;*.pcx|GIF-Image|*.gif|JPEG-Image|*.jpg;*.jpeg|BMP-Image|*.bmp|CGM-Image|*.cgm||", "c:\") Das zurückgegebene Array kann dann jeweils über
NotesUIDocument.Importin das entsprechende Richtextfeld importiert werden.
Dabei muss man aber den jeweiligen Bildtyp abfragen, da z.B. beim Import eines gif-Images, welches bei
NotesUIDocument.Import beispielsweise als BMP Image deklariert ist, auf Fehler läuft.
Welche Formate man bei
NotesUIDocument.Import angeben kann, ist leider nicht in der R5-Designerhilfe ersichtlich, sondern nur in der R6 – Hilfe. Aber selbst dort wird empfohlen, man sieht sich die Liste an, in dem man Menü „File | Import“ vom Client aus aufruft, da die in der R6-Designerhilfe erwähnte Liste nicht unbedingt aktuell ist.
Liste von der R6.5 - Designerhilfe:
ASCII Text
Binary with Text
BMP Image
CGM Image
GIF Image
HTML File
JPEG Image
Lotus 1-2-3
Lotus PIC
Lotus Word Pro
Microsoft Excel
Microsoft RTF
Microsoft Word
PCX Image
TIFF 5.0 Image
WordPerfect 5.x
WordPerfect 6.0/6.1Zur Umsetzung kann man z.B. die jeweilige Dateiendung in ein String setzen - und dann über "Select Case" im Script jeweils den Import umsetzen.
6. PraxisHier ein Beispiel-Script, welches für eine Aktion in einer Maske gedacht ist:
Sub Click(Source As Button)
On Error Goto errHandler
Dim uiws As New NotesUIWorkspace
Dim uidoc As NotesUIDocument
Dim session As New NotesSession
Dim db As NotesDatabase
Dim doc As NotesDocument
Dim vFilepath As Variant
Dim strFilepath As String
Dim strEndung As String
Set db = session.CurrentDatabase
Set uidoc = uiws.CurrentDocument
Set doc = uidoc.Document
'Abfrage ob Cursor in Richtextfeld
On Error 91 Goto SkipRTAbfrage
Dim rti As Variant
Set rti = doc.GetFirstItem(uidoc.CurrentField )
If ( rti.Type <> RICHTEXT ) Then
Msgbox "Bitte setzen Sie den Cursor in ein Richtextfeld," & Chr(10) & "um ein Bild einzufügen.",64 , db.title
Exit Sub
End If
SkipRTAbfrage:
On Error Goto errHandler
vFilepath = uiws.OpenFileDialog( True, db.Title, "All supported Images|*.jpg;*.jpeg;*.cgm;*.bmp;*.gif;*.pcx|GIF-Image|*.gif|JPEG-Image|*.jpg;*.jpeg|BMP-Image|*.bmp|CGM-Image|*.cgm||", "c:\")
If Isempty(vFilepath) Then Exit Sub ' Script verlassen falls User keine Datei auswählt
Forall ImageList In vFilepath ' Durch die augewählten Dateien loopen
strFilepath = ImageList
'Hole die Dateiendung in den String, dabei mit LowerCase auf Kleinschreibung umgestellt
strEndung = Lcase$(Right$(strFilepath, 3))
Select Case strEndung
Case "gif":
Call uidoc.Import("GIF Image",strFilepath)
Case "jpg":
Call uidoc.Import("JPEG Image",strFilepath)
Case "cgm":
Call uidoc.Import("CGM Image",strFilepath)
Case "peg":
Call uidoc.Import("JPEG Image",strFilepath)
Case "pcx":
Call uidoc.Import("PCX Image",strFilepath)
Case "bmp":
Call uidoc.Import("BMP Image",strFilepath)
End Select
End Forall
GoOut:
Exit Sub
errHandler:
Msgbox "Fehler #" & Err & " — " & Error$ & " (Zeile: " & Erl & ")", 48, "Laufzeitfehler"
Resume GoOut
End Sub
7. KonsequenzenEvtl. zukünftig neu dazukommende, von Notes unterstützte, Bildformate müssen manuell im Script nachgezogen werden.
Ansonsten steht nun dem Anwender eine einfache Möglichkeit zur Verfügung, Bilder einfach und schnell in Notes-Dokumente zu importieren.
8. Weiterführende InformationenBilder in ein Richtext-Item eines Backend-Dokuments schreibenIm IBM LDD-Forum wurde eine Lösung vorgestellt, um Bilder in ein Richtext-Item eines Backend-Dokuments (NotesDocument-Objekt) zu schreiben.
Dieses Script ist allerdings mit Vorsicht einzusetzen, da u.a. ein ErrorHandling fehlt, aber WinAPI und NotesAPI eingesetzt wird.
Bei ersten Tests funktionierte das Script unter R5, unter ND 6.5.3 klappte allerdings der Import von JPG-Dateien nicht (es wird ein weisses Bild eingefügt).
Link zum LDD-Beitrag:
Import Image in Backend