Automatisches einlesen von text Files mit dem CC

11. Juli 2013 15:40

Hallo zusammen,

ich habe ne Frage.
Ich möchte mit dem NAS eine Codeunit starten die ein txt-File einliest, dieses dann verarbeitet und die antwort auch wieder als txt-file ausgibt.
An sich kein Problem, jedoch kann der NAS ja nur jede Minute loslaufen.

Ich mein mal ich habe gesehen das der NAS so konfiguriert war das er erkennt wenn ein txt-File vorliegt und dann die Verarbeitung startet.
Könnt Ihr mir bitte sagen was ich hier einrichten muss?

Zum Hintergrund. Es kommt über ein MDE Gerät eine Anfrage, die als txt-File in einen Ordner gelegt wird. DAnn soll die Verarbeitung gestartet werden und die Antwort dann auch wieder in einen Ordner gelegt werden. Wenn der User mit dem MDE Gerät eine Minute warte muss ist das evtl. zu lange.

Danke

Viele Grüße

Re: Automatisches einlesen von text Files mit dem CC

11. Juli 2013 15:43

flip377 hat geschrieben:An sich kein Problem, jedoch kann der NAS ja nur jede Minute loslaufen.


Wer sagt das resp. wo steht das?

Re: Automatisches einlesen von text Files mit dem CC

11. Juli 2013 15:46

Dachte ich das die kürzeste Zeit bis zum nächsten Start 1 Minute ist.
Ich kann ja auf der Karte des Warteschlangepostens auch nur eine 1 eintragen und nicht weniger.

Re: Automatisches einlesen von text Files mit dem CC

11. Juli 2013 15:50

Nun, der NAS mag vielleicht schneller los laufen können, aber er beschäftigt dann irgendwann den Rechner so sehr, das man nicht mehr damit arbeiten kann :-?

Hier wäre es besser sich mal mit dem Thema Filesystem- Events auseinander zu setzen. Die Job-Queue ist dafür sicherlich der falsche Ansatz, da sollte schon ein expliziter NAS für diese Aufgabe eingesetzt werden.

Wie kommt das MDE denn dahinter, das da eine neue Datei ist?

Gruß, Fiddi

Re: Automatisches einlesen von text Files mit dem CC

11. Juli 2013 15:55

Puuh keine Ahnung. Das machen die Jungs von der Scannerfirma.
Ich soll das File nur in einem bestimmten Ordner ablegen da holen die es ab, aber keine Ahnung wie :-)

@Fiddi: Kannst Du mir bitte erklären wie ich den NAS explizit für die Aufgabe einrichte?

Re: Automatisches einlesen von text Files mit dem CC

11. Juli 2013 16:18

flip377 hat geschrieben:Ich mein mal ich habe gesehen das der NAS so konfiguriert war das er erkennt wenn ein txt-File vorliegt und dann die Verarbeitung startet.
Könnt Ihr mir bitte sagen was ich hier einrichten muss?

"DER NAS" kann erst einmal per se nichts.
Über die Aufrufparameter im NAS-Dienst steuerst du, welche Codeunit gestartet wird. Innerhalb der gestarteten Codeunit befindet sich normalerweise ein sog. Timer, der zum Beispiel alle 5 Sekunden irgendetwas macht. Dann hängst du dich in den Timer rein und sorgst so dafür, dass ab jetzt alle 5 Sekunden das Importverzeichnis geprüft und entsprechend verarbeitet wird. Der NAS läuft permanent und wird nicht ständig angehalten und wieder gestartet. Hierfür haben wir ja den Timer.

Ich empfehle dir ganz dringend, dich mit der im Standard vorhandenen Projektwarteschlange auseinander zu setzen. Die ist schon fertig implementiert und du brauchst dich praktisch nur noch per Einrichtung reinhängen: in den sog. Projektwarteschlagenposten bindest du deine Codeunit ein, welche das Verzeichnis prüft und verarbeitet (nein, hier brauchst du keinen Timer). Außerdem regelst du in der Einrichtung, wann diese Prüfungen statt finden sollen (welcher Tag, welche Uhrzeit, etc.).

Re: Automatisches einlesen von text Files mit dem CC

11. Juli 2013 16:32

ein anderer Ansatz ist:
du überwachst mit einem externen Service(dienst) das Dateiverzeichnis, sobald sich da was tut, kann er in NAV einen Webservice(ab 2009) auslösen, der dann den Rest macht.

Re: Automatisches einlesen von text Files mit dem CC

11. Juli 2013 16:41

Natalie hat geschrieben:Ich empfehle dir ganz dringend, dich mit der im Standard vorhandenen Projektwarteschlange auseinander zu setzen. Die ist schon fertig implementiert und du brauchst dich praktisch nur noch per Einrichtung reinhängen: in den sog. Projektwarteschlagenposten bindest du deine Codeunit ein, welche das Verzeichnis prüft und verarbeitet (nein, hier brauchst du keinen Timer). Außerdem regelst du in der Einrichtung, wann diese Prüfungen statt finden sollen (welcher Tag, welche Uhrzeit, etc.).


Das wird in diesem Fall nicht wirklich gut funktionieren, wenn in der txt.Datei z.B. ein Barcode steht und der Anwender am Artikel dann im schlimmsten Fall 1 Minute auf die Antwort warten soll (weniger als 1 Minute kann der Projektwarteschlange nicht, und das ist auch gut so).

Gruß, Fiddi

Re: Automatisches einlesen von text Files mit dem CC

12. Juli 2013 07:36

@ tba: Hört sich gut. So kann ich mir evtl. die Lizenz für den NAS sparen :-)
Gibts da ne Anleitung für?

Re: Automatisches einlesen von text Files mit dem CC

12. Juli 2013 08:11

http://msdn.microsoft.com/de-de/library/zt39148a(v=vs.80).aspx
kombiniert mit http://msdn.microsoft.com/de-de/library/system.io.filesystemwatcher(v=vs.80).aspx oder http://msdn.microsoft.com/de-de/library/system.timers.timer.aspx
und Zugriff auf http://msdn.microsoft.com/en-us/library/dd355398.aspx.

Du musst sicherstellen, dass die Datei(en) währende der Verarbeitung durch NAV bzw. MDE nicht überschreiben werden (z. B. durch verschieben und umbenennen in ein Arbeitsverzeichnis) und Du musst sicherstellen, dass keine Seite Daten doppelt sendet bzw. klären ab welchem Punkt eine Transaktion abgeschlossen ist. Beispiel: MDE sendet Daten NAV verarbeitet die Daten und während der Rückmeldung an MDE tritt ein Fehler auf, z. B Verbindungsabbruch. Nach 1 Minute versucht MDE die Daten erneut an NAV zu senden und NAV verarbeitet brav => und schon haben wir doppelten Wareneingang.

Volker

Re: Automatisches einlesen von text Files mit dem CC

12. Juli 2013 08:26

Danke für die LInks. Werde ich mir gleich mal zu Gemüte führen. :-)

Ne andere Frage bzw. anderes Szenario das ich mir vorstellen könnte.
Kann ich auf diesem Weg folgendes abbilden.
Datenbank A fragt Informationen z.B. Artikelinfo aus Datenbank B an.
-> Datenbank B verarbeitet die Info und gibt das Ergebnis zurück
-> Datenbank A liest Ergebnis und gibt dies am Bildschirm aus.
Könnte ich das mit auf diesem Weg mit dem Austausch von txt-Files abbilden?

Re: Automatisches einlesen von text Files mit dem CC

12. Juli 2013 08:43

Könnte ich das mit auf diesem Weg mit dem Austausch von txt-Files abbilden?


Über Webservices Ja, über Datenbankabfragen nur, wenn keine Businesslogik dahinter steckt (keine Belegerstellung, keine Preise, wohl aber Artikelbeschreibung o.ä.)

Gruß, Fiddi

Re: Automatisches einlesen von text Files mit dem CC

12. Juli 2013 09:06

Ich bin da etwas anderer Meinung als Fiddi.

Über Webservices ist bei mir kein eindeutiges ja. Das kann nämlich eine ganz böse Performance-Falle sein.

1. Server A setzt eine Abfrage an Server B via Webservice ab.
2. Server B verarbeitet diese und gibt ein Ergebnis zurück.
3. Server A verarbeitet das Ergebnis.

Das Problem ist aber, dass der gesamte Vorgang aus Sicht von Server A nicht aus 3 Stufen, sondern nur aus einer besteht, da dies alles in einem Prozess abläuft. Die Folge können lange dauernde Locks bei Server A sein.

Wir haben bei uns wo möglich und sinnvoll solche Sachen entkoppelt (hierfür z. B. SQL Broker mit External Activtion).

Volker

Re: Automatisches einlesen von text Files mit dem CC

12. Juli 2013 10:08

ok, würde es gehen wenn ich hier 2 Ordner verwende.
Quasi Import / Export?

Re: Automatisches einlesen von text Files mit dem CC

12. Juli 2013 10:32

Szenario 1:
MDE 1 erstellt die Datei order.txt
=> NAV startet die Verarbeitung
MDE 2 erstellt eine Datei order.txt
=> oh!

Szenario 2:
MDE 1 erstellt die Datei order.txt
=> NAV startet die Verarbeitung
MDE 1 erstellt eine weitere Datei order.txt weil in NAV ein Verarbeitungsfehler aufgetreten ist und es keine Rückmeldung an MDE gab.

Wie Du siehst da helfen auch nicht unbedingt verschiedene Verzeichnisse.

Volker

Re: Automatisches einlesen von text Files mit dem CC

12. Juli 2013 11:22

Shit,
dachte das wäre einfach :-D