- Beiträge: 132
Protokoll-Datei erzeigen
- Ralf Birk
- Autor
- Offline
- Benutzer
ich habe folgendes Problem:
Über einen Batch verarbeite ich alle Daten aus einem Ordner und schreibe die gewandelten Dateien in einen Zielordner. Soweit ist alles klar.
Ich müsste die durchgeführten Aktionen (Dateiname, Anzahl Datensätze und Verarbeitungsstart) in eine Protokolldatei schreiben.
Was ich bisher habe:
Die Daten-Konvertierung läuft bestens.
Für die Protokolldatei deklariere ich mit dem Now Heater (MMMM-yy) den Monat und das Jahr als Variable und setze diese im Write(2.Textadapter-Daten anhängen).
Dies soll pro Monat abgeschlossene Protokolle erzeugen und funktioniert soweit auch gut.
Das Auslesen des Dateinamens und schreiben in die Zieldate, sowie der Timestamp ist auch kein Problem.
Was mir etwas Probleme bereitet ist die Anzahl der Write-Datensätze zu ermitteln und in die Datei zu schreiben.
Über ein Auto-ID-Heater und den Maxheater ermittle ich die Anzahl der Readdatensätze und schreibe diese ins Protokoll.
Um die Anzahl der Protokoll-Datensätze pro Eingangsdate auf 1 zu bringen, habe ich den Max-Wert als $Max$ geklariert und vergleiche über IfThenElse-Heater die aktuelle ID mit dem $Max$ und setze darauf einen Filter-Heater. Leider führt das nicht zu dem gewünschten Ergebnis.
Selbst wenn dies funktionieren würde, hatte ich aber nur die Anzahl der Datensätze aus dem Write-Adapter. Da in der eigentlichen Abfrage (Daten-WriteAdapter, nicht Protokoll-WriteAdapter) aber auch Filter enthält ist die Zahl der Readdatensätze nicht die gleiche wie im Write.
Für die Protokolldatei wird aber nur die Anzahl der Write-Datensätze Benötigt.
Puh.... Ist relativ schlecht zu beschreiben.
Ich hoffe, das sie mir trotzdem mit einem Tip helfen können.
Gruß Ralf B.
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- FlowHeater-Team
- Offline
- Administrator
das geht eigentlich nur vernünftig über den .NET Script Heater und etwas Skript Logik.
Im .NET Script Heater stellen Sie die Option „Ausführen bei“ auf „Ende“ der Verarbeitung. So wird das Protokoll einmalig am Ende geschrieben bzw. an die Protokolldatei angefügt.
Ich habe hier mal ein Beispielskript angefügt. Im Skript finden Sie einige Kommentare was gemacht wird. Ich denke damit sollten Sie zurechtkommen. Das Skript sammelt die gewünschten Informationen und fügt pro Lauf eine Zeile an die Protokolldatei an bzw. erstellt diese falls noch nicht existiert.
C# Skript für Protokoll
gruß
Robert Stark
Wurde Ihre Frage damit beantwortet? Bitte geben Sie ein kurzes Feedback, Sie helfen damit auch anderen die evtl. ein ähnliches Problem haben. Danke.
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- Ralf Birk
- Autor
- Offline
- Benutzer
- Beiträge: 132
sie sind eine "Granate".... Vielen Dank.
Funktioniert gut.
Was das ganze für meinen Zweg perfekt machen würde:
Da ich für verschiedene Abfragen z.T. auf gleiche Ursprungsdateien zugreife, stimmt mit Ihrer Lösung zwar die Write-Menge, es steht aber immer der Read-Dateiname drin.
In den verwendeten .fhd's wird der Dateiname aus dem Read mit verschiedenen Zusätzen für den Write verwendet.
Ist es möglich, nicht den Read-Filename sondern den Write-Filename für das Protokoll zu verwenden? Nur so ist die Übersichtlichkeit und auch eine Eindeutigkeit zu erzielen.
Gruß Ralf B.
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- FlowHeater-Team
- Offline
- Administrator
dazu müssen Sie im Skript lediglich eine Zeile austauschen.
Ersetzen Sie folgende Zeile
sb.Append(((TextFileAdapter)AdapterRead).Filename);
mit dieser hier
sb.Append(((TextFileAdapter)AdapterWrite).Filename);
wird die aktuelle Textdatei ausgegeben die auf der Write Seite verarbeitet wird.
gruß
Robert Stark
Wurde Ihre Frage damit beantwortet? Bitte geben Sie ein kurzes Feedback, Sie helfen damit auch anderen die evtl. ein ähnliches Problem haben. Danke.
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- Ralf Birk
- Autor
- Offline
- Benutzer
- Beiträge: 132
vielen Dank...hätte ich auch selbst darauf kommen können.
Leider ist das Ergebnis ernüchternd. In der jetzigen Form ist die Protokollierung des Read effektiver(aber durch eingesetzte Filter leider falsch), da beim Write nur der Variablenname, nicht aber die Deklaration der Variablen geschrieben wird.
Bsp.: Palettenliste $Mandant$ - $Dateiname$.csv usw.
Gibt es hierzu einen Lösungsansatz?
Gruß Ralf B.
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- FlowHeater-Team
- Offline
- Administrator
gruß
Robert Stark
Wurde Ihre Frage damit beantwortet? Bitte geben Sie ein kurzes Feedback, Sie helfen damit auch anderen die evtl. ein ähnliches Problem haben. Danke.
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- Ralf Birk
- Autor
- Offline
- Benutzer
- Beiträge: 132
jetzt sieht es gut aus
Was so ein "AdapterWrite.ReplaceParameter" alles bewirken kann...
Vielen Dank
Ralf B.
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- Junge Software
- Offline
- Benutzer
- Beiträge: 4
Eine kurze Frage habe ich aber noch:
Wie kann ich einen anderen Pfad für die Protokolldatei angeben ?
Vielen Dank
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- Ralf Birk
- Autor
- Offline
- Benutzer
- Beiträge: 132
um den Speicherort zu ändern, muss man in dem C++-Script nur den String.Format("protokoll_{0}.log" suchen und den ABSOLUTEN Pfad eintragen.
Bsp.: String.Format("C:/Flowtest/protokoll_{0}.log".
Das ist alles.
@Herr Stark: ich habe mich etwas zu früh gefreut.
bei 2 .fhd's funktioniert alles wunschgemäß. Bei 3 weiteren aus der gleichen Batchabfrage schreibt er die Ausgabedateien in der korrekten Menge. Im Protokoll steht bei diesen der korrekte Writename aber 0 Datensätze). Bei den anderen 2 ist die Anzahl der Datensätze korrekt.
Ich habe alle Parameter, Formatierungen usw. angeschaut und kann beim besten willen keinen unterschied entdecken.
An was könnte dies liegen?
Gruß Ralf B.
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- FlowHeater-Team
- Offline
- Administrator
ja das liegt am Memory Modus, hier ist es etwas anders Ich habe das jetzt so angepasst, dass für den Datensatzzähler ein Parameter ROWSWRITE verwendet wird. Dieser wird über den AutoID Heater gesetzt. Hier wurde die Option „gefilterte Datensätze/Zeilen ignorieren“ verwendet. So funktioniert es unter beiden Ausführungen und es werden nur die auf der WRITE Seite verarbeiteten Datensätze gezählt. In der Anlage finden Sie eine Beispiel Definition.
@Junge Software: Das Skript wurde angepasst, so dass separat der Pfad zur Protokolldatei angepasst werden kann, siehe Kommentare im Skript.
C# Skript
gruß
Robert Stark
Wurde Ihre Frage damit beantwortet? Bitte geben Sie ein kurzes Feedback, Sie helfen damit auch anderen die evtl. ein ähnliches Problem haben. Danke.
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- Junge Software
- Offline
- Benutzer
- Beiträge: 4
Bitte Anmelden oder Registrieren um der Konversation beizutreten.
- Ralf Birk
- Autor
- Offline
- Benutzer
- Beiträge: 132
ich bin gerade auf dem Sprung in den Urlaub und kann es daher erst in 2 Wochen testen.
Das ich Sie aber mittlerweile kenne, gehe ich davon aus, das alles perfekt passt und bedanke ich mich schon einmal recht herzlich.
Gruß Ralf B.
Bitte Anmelden oder Registrieren um der Konversation beizutreten.