Autor Thema: [Lotus Script] Bilder in ein Richtextfeld importieren  (Gelesen 17421 mal)

Offline TMC

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.660
  • Geschlecht: Männlich
  • meden agan
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. Hintergrund

Lotus 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. Zweck

Es 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. Problemstellung

Es 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. Anforderungen

Fü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.Import
in 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.1



Zur Umsetzung kann man z.B. die jeweilige Dateiendung in ein String setzen - und dann über "Select Case" im Script jeweils den Import umsetzen.


6. Praxis

Hier ein Beispiel-Script, welches für eine Aktion in einer Maske gedacht ist:

Code
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. Konsequenzen

Evtl. 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 Informationen

Bilder in ein Richtext-Item eines Backend-Dokuments schreiben
Im 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

« Letzte Änderung: 06.11.05 - 14:43:54 von TMC »
Matthias

A good programmer is someone who looks both ways before crossing a one-way street.


 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz