Domino 9 und frühere Versionen > ND8: Entwicklung

GIF Dateien importieren

<< < (3/3)

pram:
Weiß zwar jetzt nicht ob bzw. was du mit Tode ausgemacht hast, aber wenn man sich nicht mit DXL/C-API rumschlagen will, kann man das mit MIME machen... was zwar nicht weniger kompliziert ist, aber hier schon eine nahezu fertige Lösung existiert, wie man ein Inline-Image importiert:

http://atnotes.de/index.php/topic,52040.0.html


--- Zitat ---- Durch Setzen von session.convertMime = true wird beim nächsten Zugriff auf das Item (über doc.getFirstItem) das Mime-Item von Notes wieder in einen Richtext konvertiert. Dieses Item kann dann an ein anderes Richtext-Item angefügt werden.
Damit kann man z.B. speziell formatierte Texte/Links/Bilder/... an ein bestehendes RICHTEXT-Item anhängen.
--- Ende Zitat ---

Gruß
Roland

mweitzel:
Danke an alle Tips,


ich habe es mittlerweile selbst hinbekommen. So schaut das Script nun aus.

Sub Initialize

   Dim session As New NotesSession
   Dim db As NotesDatabase
   Dim newdoc As NotesDocument
   Dim workspace As New NotesUIWorkspace
   Dim rtitem As NotesRichTextItem
   Dim uidoc As NotesUIDocument   
   Dim fileNum As Integer
   Dim counter As Integer
   Dim countRec As Integer
   Dim txt As string
   Dim view As NotesView
   Dim Temp As String
   Dim TempArray As integer
   Dim filename As String
   Dim columnNames As Variant
   Dim Anzahlspalten As Variant
   Dim KTOp As variant
   Set db = session.CurrentDatabase
filename$="Q:\batch\indextest.txt"
   fileNum% = FreeFile()
   counter% = 0
   
   Set view = db.GetView( "Ansicht" )
   
   Open filename$ For Input As fileNum%
   
   Do While Not EOF(fileNum%)
      
      Line Input #fileNum%, txt$
      
      ktop = InStr(txt,".")
      ktop = Left(txt,KTOp - 1)
      
      Set newDoc = New NotesDocument( db)
      newDoc.Form = "Unterschriften erfassen"
      newDoc.Ueberprueft = "Ja"
      newDoc.tKontonummer = ktop
      Set rtitem = New NotesRichTextItem( newdoc, "ScanRT" )
      Call newDoc.Save( false, false )
            
      newDoc.Aktiv = "1"
      
      Set uidoc = workspace.EditDocument(True,newdoc)
      Call uidoc.GotoField("ScanRT")
      Call uidoc.import("GIF Image","\\FS00G97N\html\gif\" & TXT)
      Call uidoc.save
      Call uidoc.close
      counter% = counter% + 1
   Loop
   
   
   
   'Die Datei auch wieder schliessen...
   Close fileNum%   
   
End Sub

Peter Klett:
Und das funktioniert bei 7.000 Dateien? Nach meiner Erfahrung raucht Notes bei solchen Agenten etwa bei dem 40. bis 50. Dokument ab, da uidoc öffnen, speichern schließen, nächstes uidoc öffnen usw. nicht sequentiell abläuft. Vielleicht sind Deine Dokumente schlanker als meine und Notes schafft dadurch mehr, aber 7.000 will ich nicht wirklich glauben. Für eine Einmalaktion ist das aber gut genug, notfalls kannst Du die Dateien ja aufteilen.

Die Lösung mit der txt-Datei, die die Dateinamen enthält, ist auch ok. Falls Du das Erstellen der Datei sparen wolltest, könntest Du den Befehl Dir in LotusScript verwenden, etwa so:

datei = Dir (pfad)
Do While datei <> ""
   'mach was mit der Datei
   datei = Dir ()
Loop

Es gibt meistens mehrere Wege, ein Ziel zu erreichen, entscheidend ist aber, dass man ankommt. Gut, dass Du es selbst geschafft hast.

Tode:
Schön das Du es geschafft hast, ansonsten kann ich Peter zu 100% Recht geben.

ERR:
Hallo,

hier ein kleiner Beitrag meinerseits:


--- Code: ---Option Public
Option Declare

Sub Initialize

'Fehlerbehandlung
On Error GoTo Error_Handler
'
'Variablen
Dim nsession As New NotesSession
Dim ndb As NotesDatabase
Dim ndo As NotesDocument
Dim nritbody As NotesRichTextItem
Dim strFileName As String
'
'Prozedur
Set ndb = nsession.CurrentDatabase

' NotesDocument aus UnprocessedDocuments ermitteln
Set ndo = ndb.Unprocesseddocuments.Getfirstdocument()

' Dateiname mit Pfad
strFileName = "E:\a.gif"

' Feld im NotesDocument für die Grafik
Set nritbody = New NotesRichTextItem(ndo, "BODY")

' Grafik importieren
Call nritbody.AppendRTItem(fktGrabImage(ndo, strFileName, ""))

' RichTextItem updaten
Call nritbody.Update

' Dokument speichern
Call ndo.Save(True, True, True)

Exit Sub

Error_Handler:
Print Err, Erl, Error
End Sub

Function fktGrabImage(ndo As NotesDocument, ByVal strFilepath As String, ByVal strType As String) As NotesRichTextItem

'Fehlerbehandlung
On Error GoTo Error_Handler
'
'Variablen
Dim nsession As New NotesSession
Dim nstream As NotesStream
Dim nMIMEhdr As NotesMIMEHeader
Dim nMIMEEntity As NotesMIMEEntity
Dim varCID As Variant
Dim strRTIName As String
Dim strTmp As String
Dim lngSeqNo As Long
Dim boolConvert As Boolean
'
'Prozedur
lngSeqNo = 1

' Dateierweiterung prüfen
If strType = "" Then
strTmp = LCase(StrRightBack(strFilePath, "."))
Select Case strTmp
Case "gif", "jpeg", "tiff"
' wird unterstützt
strType = strTmp
Case "jpg"
' wird unterstützt, muß aber angepasst werden
strType = "jpeg"
Case Else
' wird nicht unterstützt
Error 10030, {Unknown image file extension "} & strTmp & {"}
End Select
End If

' Name für MIME-Entity erzeugen
varCID = Evaluate({ @Replacesubstring(@Text(@Now; "*"); ":"; "") } )
strRTIName = "i" & varCID(0) & "-" & lngSeqNo

' MIME-Entity erzeugen
Set nMIMEEntity = ndo.CreateMIMEEntity(strRTIName)

' MIME-Header erzeugen
Set nMIMEhdr = nMIMEEntity.CreateHeader("MIME-Version")
If Not (nMIMEhdr Is Nothing) Then
Call nMIMEhdr.SetHeaderValAndParams(|1.0|)
End If

' NotesStream aus Datei erzeugen
Set nstream = nsession.CreateStream
If nstream.Open(strFilePath, "Binary") Then
' Datei in MIME-Entity einfügen
Call nMIMEEntity.SetContentFromBytes(nstream, "image/" & strType, ENC_IDENTITY_BINARY)
Else
' Datei konnte nicht geöffnet werden
Error 10029, "Image file not found: " & strFilepath
End If

' MIME Verarbeitung beenden
Call ndo.CloseMIMEEntities(True, strRTIName)

' ConvertMime Zustand merken
boolConvert = nsession.ConvertMime

' ConvertMime auf True setzen, damit der MIME-Inhalt konvertiert wird
nsession.ConvertMime = True

Set fktGrabImage = ndo.GetFirstItem(strRTIName)

' ConvertMime wieder auf den vorherigen Zustand zurücksetzen
nsession.ConvertMime = boolConvert

Exit Function

Error_Handler:
Print Err, Erl, Error
End Function

--- Ende Code ---

Mit diesem Agenten kann man Grafiken in Richtext-Felder importieren. Initialize muß nach Bedarf entsprechend angepasst werden.

MFG
ERR

Navigation

[0] Themen-Index

[*] Vorherige Sete

Zur normalen Ansicht wechseln