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