Dynamischer Daten Import / Export

datenbank

weil Einfach - produktiver ist
Mit der Freeware Version können bis zu 100.000 Datensätze verarbeitet werden!
Willkommen, Gast
Benutzername: Passwort: Angemeldet bleiben:
Willkommen im FlowHeater Support Forum!

Hier werden Fragen zum Umgang mit dem FlowHeater beantwortet.
  • Seite:
  • 1

THEMA: Protokoll-Datei erzeigen

Protokoll-Datei erzeigen 8 Monate 3 Tage her #3130

  • Ralf Birk
  • Ralf Birks Avatar Autor
  • Offline
  • Senior Member
  • Senior Member
  • Beiträge: 70
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 oder Registrieren um der Konversation beizutreten.

Protokoll-Datei erzeigen 8 Monate 2 Tage her #3131

  • FlowHeater-Team
  • FlowHeater-Teams Avatar
  • Offline
  • Administrator
  • Administrator
  • Beiträge: 1248
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
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;
}

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

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.

Protokoll-Datei erzeigen 8 Monate 2 Tage her #3132

  • Ralf Birk
  • Ralf Birks Avatar Autor
  • Offline
  • Senior Member
  • Senior Member
  • Beiträge: 70
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 oder Registrieren um der Konversation beizutreten.

Protokoll-Datei erzeigen 8 Monate 1 Tag her #3134

  • FlowHeater-Team
  • FlowHeater-Teams Avatar
  • Offline
  • Administrator
  • Administrator
  • Beiträge: 1248
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.

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

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.

Protokoll-Datei erzeigen 8 Monate 1 Tag her #3137

  • Ralf Birk
  • Ralf Birks Avatar Autor
  • Offline
  • Senior Member
  • Senior Member
  • Beiträge: 70
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 oder Registrieren um der Konversation beizutreten.

Protokoll-Datei erzeigen 8 Monate 10 Stunden her #3139

  • FlowHeater-Team
  • FlowHeater-Teams Avatar
  • Offline
  • Administrator
  • Administrator
  • Beiträge: 1248
Ja :) Hier das ganze Skript mit Parameterersetzung.
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;
}

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

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.

Protokoll-Datei erzeigen 7 Monate 4 Wochen her #3146

  • Ralf Birk
  • Ralf Birks Avatar Autor
  • Offline
  • Senior Member
  • Senior Member
  • Beiträge: 70
Hallo Herr Stark,

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.

Protokoll-Datei erzeigen 7 Monate 4 Wochen her #3147

  • Junge Software
  • Junge Softwares Avatar
  • Offline
  • New Member
  • New Member
  • Beiträge: 4
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 oder Registrieren um der Konversation beizutreten.

Protokoll-Datei erzeigen 7 Monate 4 Wochen her #3149

  • Ralf Birk
  • Ralf Birks Avatar Autor
  • Offline
  • Senior Member
  • Senior Member
  • Beiträge: 70
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 oder Registrieren um der Konversation beizutreten.

Protokoll-Datei erzeigen 7 Monate 4 Wochen her #3151

  • FlowHeater-Team
  • FlowHeater-Teams Avatar
  • Offline
  • Administrator
  • Administrator
  • Beiträge: 1248
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
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
Anhang:

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

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.

Protokoll-Datei erzeigen 7 Monate 4 Wochen her #3153

  • Junge Software
  • Junge Softwares Avatar
  • Offline
  • New Member
  • New Member
  • Beiträge: 4
Super, vielen Dank für die Hilfe !!!

Bitte Anmelden oder Registrieren um der Konversation beizutreten.

Protokoll-Datei erzeigen 7 Monate 4 Wochen her #3154

  • Ralf Birk
  • Ralf Birks Avatar Autor
  • Offline
  • Senior Member
  • Senior Member
  • Beiträge: 70
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 oder Registrieren um der Konversation beizutreten.

  • Seite:
  • 1
Moderatoren: FlowHeater-Team
Ladezeit der Seite: 0.132 Sekunden