Domino 9 und frühere Versionen > ND9: Entwicklung
[Erledigt ohne Erfolg] Import einer CSV-Datei beim Maileingang
Michael Kl:
Moin,
Datei ist vom Typ NotesEmbeddedObject.
Lokal funktioniert es wunderbar, jedoch automatisiert (bei Maileingang) vom Server nicht :(
Anbei den ganzen Code.
--- Code: ---Option Public
Option Declare
Sub Initialize
' Deklaration & Initialisierung
Dim session As New NotesSession 'Sitzung deklarieren
Dim db As NotesDatabase 'Datenbank deklarieren
Dim document As NotesDocument 'Dokument deklarieren
Dim importdocument As NotesDocument 'Importdokuemnt deklarieren
Set db = session.CurrentDatabase 'Datenbank definieren
Dim view As NotesView 'Ansicht deklarieren
Set view = db.Getview("Maileingang") 'Ansicht öffnen
Dim viewentry As NotesViewEntry
Dim viewcollection As NotesViewEntryCollection 'Ansichtssammlung deklarieren
Set viewcollection = view.Allentries 'Alle Dokumente der Ansicht zur Sammlung hinzufügen
Set viewentry = viewcollection.Getfirstentry() 'Auswählen des ersten Eintrages in der Ansicht
On Error GoTo Fehler
Set document = viewentry.Document 'Auswählen des ersten Dokumentes
Dim rtitem As notesrichtextitem
Dim strZeile As variant
Dim intnum As integer
Dim impfile As String
Dim datei As NotesEmbeddedObject
Dim temp, pfad As String
' Bearbeitung und Ausgabe
'MsgBox (viewcollection.count) 'Anzahl der Dokumente in der Ansichtssammlung als Prompt ausgeben
' Schleifenanfang Jeden Anhang importieren und anschließend Mail löschen, bzw. verschieben
Do While Not viewentry Is Nothing 'Schleifenbedingung
If Not document.Hasembedded Then GoTo looop
'document.Test = "Test" 'Testdaten schreiben
Dim anhang As Variant 'Anhang als Variant deklarieren
Set rtitem = document.Getfirstitem("Body") 'Richtextitem als Body bestimmen
ForAll i In document.Items 'Alle Items im body auslesen
If i.type=Attachment Then 'Ausführen, wenn Item = Anhang (Datei)
Set anhang = document.Getattachment(i.values(0))'Anhang als Variant setzen
Set datei = document.Getattachment(anhang.name) 'Anhang als Objekt setzen
'MessageBox anhang.source 'Dateinamen vom Anhang ausgeben
If Left(anhang.source, 10) = ("Infobau_Au") Then'Die ersten 10 Buchstaben von Links sind zur Erkennung einer Ausschreibung gedacht
If Right(anhang.source, 3) = ("csv") Then 'Die letzten 3 Buchstaben deuten auf eine CSV Datei hin
'MsgBox("Anhang ist eine Ausschreibung")
temp = Environ("Temp") 'Temporären Ordner bestimmen
pfad = temp & "\" & anhang.source 'Dateipfad bestimmen
Call datei.ExtractFile ( pfad ) 'Datei lokal speichern
impfile = pfad 'Dateipfad angeben für den Import
intNum = FreeFile()
Open pfad For Input As intnum 'Datei öffnen
Do While Not EOF(intNum)
Set importdocument = db.CreateDocument
importdocument.form="Projekt"
Line Input #intNum, strZeile
If FullTrim (StrToken(strZeile, ";",1)) = "ObjNr" GoTo jump
importdocument.IBAUNUMMER = FullTrim (StrToken(strZeile, ";",1))
importdocument.OBJEKT= FullTrim(StrToken(strZeile, ";",2))
importdocument.SUBMISSIONSDATUM = FullTrim (StrToken(strZeile, ";",3))
importdocument.SPARTEN = FullTrim (StrToken(strZeile, ";",4))
importdocument.BAUPLZ = FullTrim (StrToken(strZeile, ";",6))
importdocument.BAUORT = FullTrim (StrToken(strZeile, ";",7))
importdocument.AUSSCHREIBER = FullTrim (StrToken(strZeile, ";",9))
importdocument.STRASSE = FullTrim (StrToken(strZeile, ";",10))
importdocument.PLZ= FullTrim (StrToken(strZeile, ";",11))
importdocument.ORT = FullTrim (StrToken(strZeile, ";",12))
importdocument.TEL = FullTrim (StrToken(strZeile, ";",14))
importdocument.FAX = FullTrim (StrToken(strZeile, ";",15))
importdocument.AUSSCHREIBUNGSTEXT = FullTrim (StrToken(strZeile, ";",16))
importdocument.LVANFORDERUNG = FullTrim (StrToken(strZeile, ";",20))
importdocument.BAUBEGINN = FullTrim (StrToken(strZeile, ";",23))
importdocument.BAUENDE = FullTrim (StrToken(strZeile, ";",24))
importdocument.STATUS = "Unberührt"
Call importdocument.save(True,True)
jump:
Loop
End if
elseIf Left(anhang.source, 10) = ("Infobau_Su") Then 'Die ersten 10 Buchstaben von Links sind zur Erkennung eines Submissionsergebnisses gedacht
If Right(anhang.source, 3) = ("csv") Then 'Die letzten 3 Buchstaben deuten auf eine CSV Datei hin
'MsgBox("Anhang ist ein Submissionsergebnis")
Set datei = document.Getattachment(anhang.name)
temp = Environ("Temp") 'Temporären Ordner bestimmen
pfad = temp & "\" & anhang.source 'Dateipfad bestimmen
Call datei.ExtractFile ( pfad ) 'Datei lokal speichern
impfile = pfad 'Dateipfad angeben für den Import
intNum = FreeFile()
Open pfad For Input As intnum 'Datei öffnen
Do While Not EOF(intNum)
Set importdocument = db.CreateDocument
importdocument.form="Submissionsergebnis"
Line Input #intNum, strZeile
If FullTrim (StrToken(strZeile, ";",1)) = "ObjNr" GoTo jump2
importdocument.IBAUNUMMER = FullTrim (StrToken(strZeile, ";",1))
importdocument.SDATUM= FullTrim(StrToken(strZeile, ";",2))
importdocument.SAUSSCHREIBER= FullTrim (StrToken(strZeile, ";",3))
importdocument.SOBJEKT = FullTrim (StrToken(strZeile, ";",4))
importdocument.SBAUPLZ = FullTrim (StrToken(strZeile, ";",5))
importdocument.SBAUORT = FullTrim (StrToken(strZeile, ";",6))
importdocument.SPLATZ = FullTrim (StrToken(strZeile, ";",10))
importdocument.SSUMME = FullTrim (StrToken(strZeile, ";",11))
importdocument.SPROZENT = FullTrim (StrToken(strZeile, ";",12))
importdocument.BIETER = FullTrim (StrToken(strZeile, ";",15))
importdocument.BSTRASSE = FullTrim (StrToken(strZeile, ";",16))
importdocument.BPLZ = FullTrim (StrToken(strZeile, ";",17))
importdocument.BORT = FullTrim (StrToken(strZeile, ";",18))
importdocument.BTEL = FullTrim (StrToken(strZeile, ";",19))
importdocument.BFAX = FullTrim (StrToken(strZeile, ";",20))
importdocument.BMAIL = FullTrim (StrToken(strZeile, ";",21))
importdocument.SBINDEFRIST = FullTrim (StrToken(strZeile, ";",25))
importdocument.SNACHLASS = FullTrim (StrToken(strZeile, ";",26))
importdocument.SBEMERKUNG = FullTrim (StrToken(strZeile, ";",27))
document.SBAUENDE = FullTrim (StrToken(strZeile, ";",30))
Call importdocument.save(True,True)
jump2:
Loop
End if
Else
'MsgBox(anhang.source & " ist nicht für den Import geeignet")'Ausführen, wenn Dateiname unbekannt
End If
End If 'Schleifenende
End ForAll 'Schleifenende
document.importiert = "1"
Call document.Save(True,true) 'Dokument speichern
Set viewentry = viewcollection.Getnextentry(viewentry) 'Nächsten Eintrag in der Ansicht auswählen
Set document = viewentry.Document 'Auswählen des nächsten Dokumentes
looop:
loop
' Schleifenende
' Fehlerbehandlung
Fehler: 'Ausführen, wenn Fehler
Resume Fehlerbehandlung 'Fortfahren bei Fehler
Fehlerbehandlung:
End Sub
--- Ende Code ---
Driri:
Meine Erfahrung ist, daß der Zugriff auf Dateien nur verlässlich funktioniert, wenn man sie auf die lokale Platte löst und von da aus verarbeitet.
Die Erfahrungen basieren noch auf Domino 5/6.x, aber es würde mich doch wundern, wenn IBM an der Stelle etwas optimiert hätte ;)
rambrand:
Die Umgebungsvariable TEMP sollte - eigentlich - auch beim Server auf die lokale Platte verweisen.
Kannst Du im TEMP auf dem Server mal schauen, was er da für eine Datei dann abgelegt hat? Ist die lesbar?
Hängt die Datei im Body mit drin? Oder warum hast Du Dir das rtitem gezogen?
Bye
Markus
thkn777:
@Michael Kl
Also ich würde mir die Datei mal ansehen, die da im Notes-Dokument gespeichert ist. Da Dein Script die exportierten Dateien nicht löscht, sollte diese ja noch im TEMP-Pfad sein.
Vielleicht steht da einfach "Müll" drin?
Ansonsten: auf NotesStream umsteigen und mit Charset arbeiten. Darauf zielt ja auch rambrand's Frage ab.
Viel Erfolg!
Michael Kl:
Hey,
danke für eure Hilfe ;)
In der Datei steht sicherlich kein Müll drin, da ich sie selber zum testen weiterleite.
Ich erhalte die Dateien von einem externen Diensleister und die Dateien sind immer gleich.
Die Datei wird auch säuberlich erkannt und importiert.
Der Anhang befindet sich im Body, deswegen das rtitem.
--- Code: --- Set rtitem = document.Getfirstitem("Body") 'Richtextitem als Body bestimmen
ForAll i In document.Items 'Alle Items im body auslesen
If i.type=Attachment Then 'Ausführen, wenn Item = Anhang (Datei)
Set anhang = document.Getattachment(i.values(0))'Anhang als Variant setzen
Set datei = document.Getattachment(anhang.name) 'Anhang als Objekt setzen
'MessageBox anhang.source 'Dateinamen vom Anhang ausgeben
If Left(anhang.source, 10) = ("Infobau_Au") Then'Die ersten 10 Buchstaben von Links sind zur Erkennung einer Ausschreibung gedacht
If Right(anhang.source, 3) = ("csv") Then 'Die letzten 3 Buchstaben deuten auf eine CSV Datei hin
'MsgBox("Anhang ist eine Ausschreibung")
--- Ende Code ---
Ich habe gerade erfahren, dass der Server eventuell das "\" nicht versteht, sondern ein "/" benötigt.
Das werde ich gleich testen und euch berichten.
Ansonsten werde ich mir den NotesStream-Part anschauen ;)
Navigation
[0] Themen-Index
[#] Nächste Seite
[*] Vorherige Sete
Zur normalen Ansicht wechseln