Autor Thema: GIF Dateien importieren  (Gelesen 5694 mal)

Offline mweitzel

  • Junior Mitglied
  • **
  • Beiträge: 88
  • Ich liebe dieses Forum!
GIF Dateien importieren
« am: 10.12.12 - 09:53:05 »
Hallo,

ich möchte ein Script programmieren das folgenden Sachverhalt abarbeiten soll.

Ich einem Verzeichnis auf der Festplatte sind ca 7000 GIF Dateien. Diese gesamten Dateien sollen nun in eine Lotus Notes Datenbank importiert werden. Und zwar soll für jede Datei ein eigenes Dokument erstellt werden. Der Maskenname lautet UPS, der Dateiname ohne .GIF Erweiterung soll in das Feld "Name" eingestellt werden weiterhin soll die GIF Datei selber in der Richtextfeld "Bilddatei" importiert werden.

Hat jemand evtl. ein ähnliches Script schon erstellt, das mit wenigen Handgriffen auch von einem nicht so erfahrenen Scriptprogrammierer umgebaut werden kann, und würde mir das hier zur Verfügung stellen?

Danke!

Offline Tode

  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 6.885
  • Geschlecht: Männlich
  • Geht nicht, gibt's (fast) nicht... *g*
Re: GIF Dateien importieren
« Antwort #1 am: 10.12.12 - 10:46:36 »
Wenn Du die Images als Attachments importieren willst, kriegt das jeder halbwegs begabte Hilfe- Leser alleine hin (sind ca. 50 Zeilen Code wenns hochkommt).

Willst Du die Images als Embedded Images importieren wird es Tricky, weil es dafür keine Klassen gibt.
Hier muss man mit Base64- Encoding und XML- Import arbeiten...

Vielleicht findest Du einen Samariter, der Dir den Code schenkt, aber im Normalfall steckt in solchen Anforderungen einiges an Hirnschmalz, und die meisten, die solchen Code schreiben, sind nun mal Dienstleister, die genau damit Ihr Geld verdienen.

Ich weiss, dass ich für diese Aussage jetzt gleich wieder haue kriege, aber so ist das nun mal.

u.U. findest Du etwas mit den richtigen Suchbegriffen bei openntf, und ich weiss, dass auch Ulrich Krause (eknori) über sowas ähnliches schonmal gebloggt hat, aber fertigen Code wirst Du hier (wahrscheinlich) nicht frei Haus geliefert bekommen.
Gruss
Torsten (Tode)

P.S.: Da mein Nickname immer mal wieder für Verwirrung sorgt: Tode hat NICHTS mit Tod zu tun. So klingt es einfach, wenn ein 2- Jähriger versucht "Torsten" zu sagen... das klingt dann so: "Tooode" (langes O, das r, s und n werden verschluckt, das t wird zum badischen d)

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: GIF Dateien importieren
« Antwort #2 am: 10.12.12 - 10:59:39 »
"Dir" ist der Befehl zum Auslesen der Dateien, weiterhin brauchst Du die Klasse NotesRichtextItem, dort vor allem EmbedAttachment.

Obwohl Torsten (Tode) wieder Schläge für seinen Hinweis erwartet, wären die m.E. absolut nicht angebracht. Im Gegenteil!

Du solltest mindestens ein Gerüst des Scriptes selbst zusammenbekommen (z.B. das Auslesen der Dateien, oder das Erstellen des jeweiligen Dokuments), denn diese Scripte stehen fertig in der Designerhilfe. Wenn es dann im Detail hakt, findest Du hier immer jemanden, der weiter hilft.

Offline mweitzel

  • Junior Mitglied
  • **
  • Beiträge: 88
  • Ich liebe dieses Forum!
Re: GIF Dateien importieren
« Antwort #3 am: 10.12.12 - 11:41:54 »
Ich wäre auch bereit ein paar € dafür zu Zahlen. Je nach Aufwand.

Offline Tode

  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 6.885
  • Geschlecht: Männlich
  • Geht nicht, gibt's (fast) nicht... *g*
Re: GIF Dateien importieren
« Antwort #4 am: 10.12.12 - 11:55:04 »
Wie bereits in meinem ersten Post angedeutet, unterscheidet sich der Aufwand je nachdem, ob Du einfach nur die GIFs als Attachments importieren willst, oder ob Du das als Embedded Image haben willst. Was soll es denn sein?
Gruss
Torsten (Tode)

P.S.: Da mein Nickname immer mal wieder für Verwirrung sorgt: Tode hat NICHTS mit Tod zu tun. So klingt es einfach, wenn ein 2- Jähriger versucht "Torsten" zu sagen... das klingt dann so: "Tooode" (langes O, das r, s und n werden verschluckt, das t wird zum badischen d)

Offline mweitzel

  • Junior Mitglied
  • **
  • Beiträge: 88
  • Ich liebe dieses Forum!
Re: GIF Dateien importieren
« Antwort #5 am: 10.12.12 - 12:05:17 »
Wenn man das Notes-Dokument öffnet soll man das Bild sehen.

Offline mweitzel

  • Junior Mitglied
  • **
  • Beiträge: 88
  • Ich liebe dieses Forum!
Re: GIF Dateien importieren
« Antwort #6 am: 10.12.12 - 12:50:06 »
Hallo,

folgendes Script habe ich schon gebastelt. Dieses erstellt ein neues Dokument, importiert den Inhalt der Datei.

Zur Zeit hänge ich daran, dass alle Dateien eines Verzeichnisses abgearbeitet werden.

Sub Initialize

   Dim session As New NotesSession
   Dim db As NotesDatabase
   Dim doc As NotesDocument
   Dim workspace As New NotesUIWorkspace
   Dim rtitem As NotesRichTextItem
   Dim uidoc As NotesUIDocument   
   
   Set db = session.CurrentDatabase
   Set doc = New NotesDocument ( db )
      
   doc.form = "UPS"
   
   Set rtitem = New NotesRichTextItem( doc, "BILD" )
   Call doc.Save(True,True)
   
      
   Set uidoc = workspace.EditDocument(True,doc)
   Call uidoc.GotoField("BILD")
   Call uidoc.import("GIF Image","c:\users\public\k13366.gif")
   
End Sub

Offline Tode

  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 6.885
  • Geschlecht: Männlich
  • Geht nicht, gibt's (fast) nicht... *g*
Re: GIF Dateien importieren
« Antwort #7 am: 10.12.12 - 13:12:44 »
Sehr schön... Leider funktioniert dieser Code aufgrund der Verwendung des uidoc nicht im Batch- Betrieb (also theoretisch schon, aber Du wirst da in ein Speicherproblem laufen, wenn Du ständig Dokumente auf- und wieder zumachst).

Fürs Backend solltest Du folgendes machen: Schau Dir mal die Klasse "DXLExporter" und die dazu gehörigen Beispiele in der Hilfe an. Damit kannst Du mal ein Beispiel- Dokument, das ein Bild enthält, wie Du es Dir vorstellst, als DXL exportieren, und Dir in einem Text- Editor Deiner Wahl anschauen.
Dann siehst Du auch, wie Du ein Dokument mit Richtextitem zusammenbauen müsstest, um es per DXLImporter wieder importiert zu bekommen. Die Herausforderung ist, das Bild von dem Dir vorliegenden Binären Format in ein Base64 encodiertes Format zu bekommen, aber dazu gibt es genügend Anleitungen im Web.

Den Aufwand, Dir das fertig zu liefern würde ich auf 1-2 Stunden schätzen. Wenn das ganze nur einmalig und nur auf Windows laufen muss, kannst Du Dir auch mal das hier  anschauen...
Gruss
Torsten (Tode)

P.S.: Da mein Nickname immer mal wieder für Verwirrung sorgt: Tode hat NICHTS mit Tod zu tun. So klingt es einfach, wenn ein 2- Jähriger versucht "Torsten" zu sagen... das klingt dann so: "Tooode" (langes O, das r, s und n werden verschluckt, das t wird zum badischen d)

Offline mweitzel

  • Junior Mitglied
  • **
  • Beiträge: 88
  • Ich liebe dieses Forum!
Re: GIF Dateien importieren
« Antwort #8 am: 10.12.12 - 13:18:04 »
Es muss nur einmalig laufen und nur unter Windows.
« Letzte Änderung: 10.12.12 - 13:37:55 von mweitzel »

Offline Tode

  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 6.885
  • Geschlecht: Männlich
  • Geht nicht, gibt's (fast) nicht... *g*
Re: GIF Dateien importieren
« Antwort #9 am: 10.12.12 - 13:24:38 »
keine Nummer öffentlich bitte... habe sie notiert...
Gruss
Torsten (Tode)

P.S.: Da mein Nickname immer mal wieder für Verwirrung sorgt: Tode hat NICHTS mit Tod zu tun. So klingt es einfach, wenn ein 2- Jähriger versucht "Torsten" zu sagen... das klingt dann so: "Tooode" (langes O, das r, s und n werden verschluckt, das t wird zum badischen d)

Offline pram

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.170
  • Geschlecht: Männlich
    • Foconis Object Framework
Re: GIF Dateien importieren
« Antwort #10 am: 10.12.12 - 14:14:19 »
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.

Gruß
Roland
Roland Praml

IBM Certified Application Developer - Lotus Notes and Domino 8
Ich verwende das Foconis Object Framework

Offline mweitzel

  • Junior Mitglied
  • **
  • Beiträge: 88
  • Ich liebe dieses Forum!
Re: GIF Dateien importieren
« Antwort #11 am: 10.12.12 - 15:38:16 »
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

Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: GIF Dateien importieren
« Antwort #12 am: 11.12.12 - 07:08:50 »
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.

Offline Tode

  • Moderatoren
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 6.885
  • Geschlecht: Männlich
  • Geht nicht, gibt's (fast) nicht... *g*
Re: GIF Dateien importieren
« Antwort #13 am: 11.12.12 - 07:18:46 »
Schön das Du es geschafft hast, ansonsten kann ich Peter zu 100% Recht geben.
Gruss
Torsten (Tode)

P.S.: Da mein Nickname immer mal wieder für Verwirrung sorgt: Tode hat NICHTS mit Tod zu tun. So klingt es einfach, wenn ein 2- Jähriger versucht "Torsten" zu sagen... das klingt dann so: "Tooode" (langes O, das r, s und n werden verschluckt, das t wird zum badischen d)

Offline ERR

  • Frischling
  • *
  • Beiträge: 46
  • Geschlecht: Männlich
Re: GIF Dateien importieren
« Antwort #14 am: 21.12.12 - 15:04:24 »
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

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

MFG
ERR

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz