Skip to main content
Weil einfach - produktiver ist

Der Daten Spezialist

Konvertieren Sie die Daten mühelos zwischen verschiedenen Formaten ohne Programmierkenntnisse dank Visual Designer. Effizient und super einfach.
Flowheater Download

Protokoll-Datei erzeigen

Mehr
7 Jahre 1 Woche her #3130 von Ralf Birk
Protokoll-Datei erzeigen wurde erstellt von Ralf Birk
Hallo Herr Stark,

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 Ergebniss.
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 um der Konversation beizutreten.

Mehr
7 Jahre 1 Woche her #3131 von FlowHeater-Team
FlowHeater-Team antwortete auf Protokoll-Datei erzeigen
Hallo Herr Birk,

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
Code:
public object DoWork() { // hier evtl. das gewünschte CSV Trennzeichen anpassen string trennzeichen = ";"; // Name der Protokolldatei, es können auch absolute Pfadangaben verwendet werden string protokoll = String.Format("protokoll_{0}.log", DateTime.Now.ToString("yyyyMM")); StringBuilder sb = new StringBuilder(); // aktuelles Datum und Uhrzeit sb.Append(DateTime.Now.ToString("dd.MM.yyyy HH:mm:ss")); sb.Append(trennzeichen); // aktueller Dateiname der im TextFile Adapter auf der READ Seite verarbeitet wird sb.Append(((TextFileAdapter)AdapterRead).Filename); sb.Append(trennzeichen); // im WRITE Adapter verarbeitetet Datensätze sb.Append(AdapterWrite.Rows.ToString("0")); // Zeilenumbruch anfügen sb.Append(Environment.NewLine); // An die Protokolldatei anfügen oder neu erzeugen File.AppendAllText(protokoll, sb.ToString()); // Rückgabewert wird bei "Ausführen bei Ende" nicht benötigt! return null; }

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 um der Konversation beizutreten.

Mehr
7 Jahre 1 Woche her #3132 von Ralf Birk
Ralf Birk antwortete auf Protokoll-Datei erzeigen
Hallo Herr Stark,

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 um der Konversation beizutreten.

Mehr
7 Jahre 1 Woche her #3134 von FlowHeater-Team
FlowHeater-Team antwortete auf Protokoll-Datei erzeigen
Hallo Herr Birk,

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 um der Konversation beizutreten.

Mehr
7 Jahre 1 Woche her #3137 von Ralf Birk
Ralf Birk antwortete auf Protokoll-Datei erzeigen
Hallo Herr Stark,

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 um der Konversation beizutreten.

Mehr
7 Jahre 1 Woche her #3139 von FlowHeater-Team
FlowHeater-Team antwortete auf Protokoll-Datei erzeigen
Ja :) Hier das ganze Skript mit Parameterersetzung.
Code:
public object DoWork() { // hier evtl. das gewünschte CSV Trennzeichen anpassen string trennzeichen = ";"; // Name der Protokolldatei, es können auch absolute Pfadangaben verwendet werden string protokoll = String.Format("protokoll_{0}.log", DateTime.Now.ToString("yyyyMM")); StringBuilder sb = new StringBuilder(); // aktuelles Datum und Uhrzeit sb.Append(DateTime.Now.ToString("dd.MM.yyyy HH:mm:ss")); sb.Append(trennzeichen); // aktueller Dateiname der im TextFile Adapter auf der READ Seite verarbeitet wird sb.Append(AdapterWrite.ReplaceParameter(((TextFileAdapter)AdapterWrite).Filename)); sb.Append(trennzeichen); // im WRITE Adapter verarbeitetet Datensätze sb.Append(AdapterWrite.Rows.ToString("0")); // Zeilenumbruch anfügen sb.Append(Environment.NewLine); // An die Protokolldatei anfügen oder neu erzeugen File.AppendAllText(protokoll, sb.ToString()); // Rückgabewert wird bei "Ausführen bei Ende" nicht benötigt! return null; }

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 um der Konversation beizutreten.

Mehr
7 Jahre 6 Tage her #3146 von Ralf Birk
Ralf Birk antwortete auf Protokoll-Datei erzeigen
Hallo Herr Stark,

jetzt sieht es gut aus :-)
Was so ein "AdapterWrite.ReplaceParameter" alles bewirken kann...

Vielen Dank


Ralf B.

Bitte Anmelden um der Konversation beizutreten.

Mehr
7 Jahre 6 Tage her #3147 von Junge Software
Junge Software antwortete auf Protokoll-Datei erzeigen
Toll, konnte ich auch gerade gebrauchen !

Eine kurze Frage habe ich aber noch:
Wie kann ich einen anderen Pfad für die Protokolldatei angeben ?

Vielen Dank

Bitte Anmelden um der Konversation beizutreten.

Mehr
7 Jahre 6 Tage her #3149 von Ralf Birk
Ralf Birk antwortete auf Protokoll-Datei erzeigen
Hallo "Junge Software",

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 um der Konversation beizutreten.

Mehr
7 Jahre 5 Tage her #3151 von FlowHeater-Team
FlowHeater-Team antwortete auf Protokoll-Datei erzeigen
Hallo Herr Birk,

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
Code:
public object DoWork() { // hier evtl. das gewünschte CSV Trennzeichen anpassen string trennzeichen = ";"; // hier den Ausgabepfad der Protokolldatei ändern. // im Beispiel wird das aktuelle Verzeichnis der Definition verwendet. // es gehen auch ansolute Pfadangaben wie @"C:\Temp\und\so\weiter" string pfad = @".\"; string protokoll = Path.Combine(pfad, String.Format("protokoll_{0}.log", DateTime.Now.ToString("yyyyMM"))); StringBuilder sb = new StringBuilder(); // aktuelles Datum und Uhrzeit sb.Append(DateTime.Now.ToString("dd.MM.yyyy HH:mm:ss")); sb.Append(trennzeichen); // aktueller Dateiname der im TextFile Adapter auf der READ Seite verarbeitet wird sb.Append(AdapterWrite.ReplaceParameter(((TextFileAdapter)AdapterWrite).Filename)); sb.Append(trennzeichen); // im WRITE Adapter verarbeitetet Datensätze sb.Append(Parameter["ROWSWRITE"].GetInt()); // Zeilenumbruch anfügen sb.Append(Environment.NewLine); // An die Protokolldatei anfügen oder neu erzeugen File.AppendAllText(protokoll, sb.ToString()); // Rückgabewert wird bei "Ausführen bei Ende" nicht benötigt! return null; }

Dateianhang:

Dateiname: protokoll.zip
Dateigröße:2 KB

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.
Anhänge:

Bitte Anmelden um der Konversation beizutreten.

Mehr
7 Jahre 5 Tage her #3153 von Junge Software
Junge Software antwortete auf Protokoll-Datei erzeigen
Super, vielen Dank für die Hilfe !!!

Bitte Anmelden um der Konversation beizutreten.

Mehr
7 Jahre 4 Tage her #3154 von Ralf Birk
Ralf Birk antwortete auf Protokoll-Datei erzeigen
Hallo Herr Stark,

ich bin gerade auf dem Sprung in den Urlaub und kann es daher erst in 2 Wochen testen.
Das ich Sie aber mitlerweile kenne, gehe ich davon aus, das alles perfekt passt und bedanke ich mich schon einmal recht herzlich.

Gruß Ralf B.

Bitte Anmelden um der Konversation beizutreten.

Ladezeit der Seite: 0.336 Sekunden

FlowHeater - Der Daten Spezialist

Effiziente Datenintegration und Transformation mit FlowHeater - Ihre Lösung für nahtlosen Datentransfer.

Rechtliches

Support & Kontakt

Kontaktinformation

Telefon:
0951 / 99339792

E-Mail:
Diese E-Mail-Adresse ist vor Spambots geschützt! Zur Anzeige muss JavaScript eingeschaltet sein.


Copyright © 2009-2024 by FlowHeater GmbH. Alle Rechte vorbehalten.