Hallo,
Problembeschreibung: AS/400 exportiert Vorzüge (csv Datei) in ein Verzeichnis. und Notes importiert es aus dem Verzeichnis die Dateien. Ein Agenten gibt es schon. Das Problem ist, wenn der Agent mal nicht laufen sollte, werden die Dateien durch das RPG programm überschrieben. D.h. die Vorzüge gibt es dann nicht mehr im Verzeichnis.
Der Agent läuft jede Stunde. und jede Stunde exportiert es ein rpg programm ins verzeichnis für notes.
Überlegung mit Mitarbeiter ist. Dass der Dateienname neben dem datum auch die uhrzeit(hhmmss) als laufnummer mit gibt. Somit werden die Dateien nicht überschrieben es werden nur neue dateien erstellt.
das heisst mein agent muss in das verzeichnis rein unabhänging vom Datum alle lesen und importieren. Denn die importierten Dateien werden in ein archiv verschoben.
wie könnte ich das am besten lösen? vlt eine Schleife? wäre dankbar für eure vorschläge
Hier der Quellcode
Dim session As New NotesSession
Dim db As NotesDatabase
Dim dc As NotesDocumentCollection
Dim doc As NotesDocument
Dim filenum As Integer, iZaehler As Integer, pos As Integer
Dim filename As String, cRekNo As String, i As String
Dim cTrenn As String, cText As String, cDate As String, cError As String, cSendTo As String, cSubject As String, cAusgabe As String
Dim cSelection As String
Dim vComplainNo As Variant
Dim dtCutOff As New NotesDateTime("31.12.1900")
Dim lDate As Long
Dim cpathName As String
Dim cFilename As String
Dim Pathname As String
Dim csvFilename As String
Set db=session.CurrentDatabase
Set oHeute = New NotesDateTime(Now) ' *** Akt. Datum
cDate = Cstr(oHeute.DateOnly)
lDate = Year(oHeute.DateOnly) * 10000 + Month(oHeute.DateOnly) * 100 + Day(oHeute.DateOnly)
cDate = Cstr(lDate)
iZaehler = 1
cTrenn = ";" ' *** Definition des Trennzeichens
filenum=Freefile()
filename="E:\TestKUR\VerzeichnisTEST\Vorzug_Export_" + cDate + ".csv" ' *** Laufwerk für Zugriff von Alpha und Notes
cSendTo = "support@hilfe.com"
cSubject = "Error asImportCollect"
REM Tracerinitialisierungsparameter
Dim aTracerPara(1) As Variant
cgTracerVorzugImport = "asImportCollect"
aTracerPara(0) = "Import WE-Vorzüge"
aTracerPara(1) = "PDAllgemein"
If Not(xQAnfangID(aTracerPara)) Then
Print "Agent: ImportVorzug: Konnte Tracer/Logger/Protokoll nicht initialisieren. Abbruch der Funktion."
Exit Sub
End If ' If Not(xQAnfangID(aTracerPara)) Then
' *********** Öffnen des csv Datensatzes auf dem File System
cError = "asImportCollect ERROR: No CSV - File found"
On Error Goto EndeFileOpen
pathName$ = "E:\TestKUR\VerzeichnisTEST\Vorzug_Export_" + cDate + ".csv"
cFilename$ = Dir$(pathName$, 0)
If cFilename$ <> "" Then
cPathname = Left(pathName$,22) ' *** Pfadname
filename = cPathname + cFilename$
End If
Name filename As "E:\ImportNotes\Vorzug\Vorzug_Export_" + cDate + ".csv"
filename = "E:\ImportNotes\Vorzug\Vorzug_Export_" + cDate + ".csv"
Open filename For Input As filenum
Seek fileNum,1
On Error Goto ErrorPrint
Do Until Eof (filenum)
Line Input #filenum, i
If i <> "" Then
i = i + cTrenn
iZaehler = iZaehler + 1 ' *** Datensatzzähler
Else
Call XQSchreiben("0", "1", cgTracerVorzugImport, "asNightImport ERROR: Keine Datensätze im CSV-File", 632637&)
Call SendMail(doc, cSendTo, cSubject, "asImportCollect ERROR: Keine Datensätze im CSV-File")
Goto EndeAlles
End If
' ********** Einlesen des csv - Datensatzes **************************
cError = "asImportCollect ERROR: ReadFields" + Cstr(iZaehler)
On Error Goto ErrorPrint
Call ReadFields(i) ' *** neuer Datensatz lesen
' ************* Document Selection - Alle Documente in der DB werden nach der Auftrag/Position durchsucht - Anführungszeichen der Selection beachten !
cSelection = "FORM = ""maNurVorzug"" & fdAuftrag = """+cImString(4)+""" & fdAuftragsposition = """+cImString(5)+""""
Set dc = db.Search ( cSelection , dtCutOff , 0 )
' **************
Set doc = dc.getFirstDocument
If Not doc Is Nothing Then ' *** Dokument mit gleichem Auftrag/Position gefunden
cError = "asNightImport ERROR: UpdateAndReplace " + cImString(4) + " / " + cImString(5)
On Error Goto ErrorPrint
Call UpdateAndReplace(doc, cDate) ' *** Überschreiben der Kopf und ersetzen der Pos-Daten
If dc.count > 1 Then
cError = "asImportCollect ERROR: Multiple Documents " + cImString(4) + " / " + cImString(5)
Call XQSchreiben("0", "1", cgTracerVorzugImport, cError, 632637&)
End If
Else
' **** kein übereinstimmen WE-Vorzug gefunden -> neues Dok wird angelegtm falls Status aktiv ***********
If cImString(1) = "A" Then
Set doc = db.CreateDocument
doc.Form="maNurVorzug"
cError = "asImportCollect ERROR: FillFields " + cImString(4) + "/" + cImString(5)
On Error Goto ErrorPrint
Call FillFields(doc,i,cDate) ' *** Schreiben komplettes Dokument
cError = "asImportCollect ERROR: DocSave " + cImString(4) + "/" + cImString(5)
On Error Goto ErrorPrint
Call doc.save(False,True)
End If
End If ' *** Not doc Is Nothing Then
NextEntry:
Loop ' Until Eof (filenum) **** Neuen csv - Datensatz einlesen
' *** Schleife - lese neuen csv - Datensatz ******************************************************************************
Call XQSchreiben("0", "1", cgTracerVorzugImport, "Ende VorzugImport", 632637&)
EndeGut:
Close filenum
Call XQSchreiben("0", "1", cgTracerVorzugImport, "Vorzug_Export_" + cDate + ".csv - gelöscht ", 632637&)
cText = Cstr(iZaehler) + " Datensätze bearbeitet"
Call XQSchreiben("0", "1", cgTracerVorzugImport, cText, 632637&)
i = 1
pathName$ = "E:\TestKUR\VerzeichnisTEST\Archiv\Vorzug_Export_" + cDate + "*.csv"
cFilename$ = Dir$(pathName$, 0)
Do While cFilename$ <> ""
cPathname = Left(pathName$,29) ' *** Pfadname
csvFilename = cPathname + cFilename$
i = i + 1
cFilename$ = Dir$()
Loop
Filecopy FileName,"E:\TestKUR\VerzeichnisTEST\Archiv\Vorzug_Export_" + cDate + "_" + Cstr(i) + ".csv" ' *** Sichern der aktuellen File ins Archiv
Print cText
Kill filename ' *** Löschen des eingelesenen .csv Datensatzes
Goto EndeAlles
ErrorPrint:
Call XQSchreiben("0", "1", cgTracerVorzugImport, cError, 632637&)
Resume Next
cAusgabe = cError
Call SendMail(doc, cSendTo, cSubject, cAusgabe)
Print cError
EndeFileOpen:
Call XQSchreiben("0", "1", cgTracerVorzugImport, cError, 632637&)
Goto EndeAlles
EndeAlles:
Call xQEnde ' *** Schreiben und schließen LogFile
Exit Sub
End Sub