4. Juli 2011 23:01
5. Juli 2011 09:19
5. Juli 2011 09:49
HattrickHorst hat geschrieben:Grundsätzlich möchte ich vorab erwähnen, daß eine Lösung mit SendKeys immer mit Vorsicht zu geniessen ist. Ich sehe das immer wieder, daß einige Programmierer das als Lösung ansehen, wobei das aus meiner Sicht immer nur ein Workaround sein kann. Da du es verwendest, wirst du bereits wissen, daß das nur eine Emulation einer Benutzereingabe ist und kein echter programmtechnischer Code. Das kann immer zu Problemen führen, wie z.B. mit Latenzzeiten, Multilanguagefähigkeit,...
Zum Thema Codeunit aus Dataport aufrufen:
Die Transaktion muß beendet werden, wenn du Codeunit.RUN verwendest. Und ja, man kann mehrere DataItems im Dataport verwenden, allerdings keine eingerückten. Diese werden dann schlicht und ergreifend einfach nacheinander abgearbeitet.
5. Juli 2011 12:57
5. Juli 2011 13:20
HattrickHorst hat geschrieben:Nur nochmal, damit ich das richtig verstehe. Du liest eine ganze Reihe von Fertigungsaufträgen per Dataport ein und gehst dann jeden einzelnen, neuen Auftrag auf der Karte durch und löst dort per SendKeys jeweils immer mit F11 den Buchungsvorgang inkl. aller Bestätigungen aus?
Einer Codeunit einen Datensatz mitzugeben, ist nicht besonders schwierig. Guck es dir einfach mal im Standard an, z.B. beim Erstellen eines Auftrags aus einem Angebot. Es gibt in der Codeunit ein Property TableNo, mit welchem du steuern kannst, welchen Datensatz (also von welcher Tabelle) die Codeunit beim Aufruf mit RUN aufnehmen soll.
Eine andere relativ einfache Variante wäre eine Funktion in der Codeunit zu definieren, der du immer den Datensatz als Parameter mitgibst, d.h. SetProductionOrder(Rec "Production Order") oder ähnliches. Danach muß die Codeunit natürlich mit genau diesem Datensatz weiterarbeiten und sie darf nicht zwischendurch initialisiert werden.
Es gibt noch andere Möglichkeiten, aber die braucht man eigentlich nur in besonderen Situationen und die liegen hier, soweit ich das im Moment sehen kann, nicht vor.
5. Juli 2011 13:37
5. Juli 2011 14:17
HattrickHorst hat geschrieben:Wenn du das alles nicht weißt, wie hast du dann deine bisherige Lösung hinbekommen? Erstaunlich!
HattrickHorst hat geschrieben:Sind das alles nur Zeilen eines FAs, die da pro Dataportaufruf eingelesen werden? Wenn ja, mußt du ja an irgendeiner Stelle den passenden Kopf dazu erstellen lassen (oder siehe unten).
[/quote]HattrickHorst hat geschrieben:Diesen Record kannst dann verwenden, um ihn der Codeunit zu übergeben (CODEUNIT.RUN(CODEUNIT::Nummer,DeinFAkopf)). Das ist aber etwas gefährlich, da die Transaktion bei einem Dataport erst am Ende beendet sein/werden sollte, also das implizite Transaktionsende. Baut man jetzt noch ein explizites irgendwo dazwischen ein, weil man bspw. Codeunit.RUN benutzen möchte, kann es passieren, je nach Konstellation, daß nur ein Teil der Daten eingelesen wurde. Also, von dieser Version würde ich dringend abraten. Es sei denn....
Sehe ich das richtig, daß du die Daten nach dem Import gar nicht speichern möchtest, sondern die CSV-Datei nur als Liste aller zu buchenden FA-Zeilen verwendest?
5. Juli 2011 15:09
5. Juli 2011 15:55
HattrickHorst hat geschrieben:Also, wenn du nur FA-Zeilen in deiner CSV-Datei hast, dann brauchst du kein DataItem für den FA-Kopf. Schließlich hast du ja gar nichts, was du hier importieren kannst. Außerdem würden erst alle FA-Zeilen durchlaufen werden und anschließend erst die FA-Köpfe. Das geht so nicht.
Menge_Buchung - FA - Zeilennr. <--Erstes DataItem, Fertigungszeile mit einigen Records die auch importiert werden soll
1;FA0110650;10000
5;FA0110650;20000
3;FA0110650;30000
10;FA0110655;40000
1;FA0110656;10000
<-- Import erstes DataItem Fertigungszeile abgeschlossen, alles ist auf jeden Fall in Navision
FA-Nr. <-- Zweites DataItem, Fertigungskopf, keine Daten die verändert werden, nur für die Codeunit
FA0110650
(CODEUNIT OnAfterImportRecord BUCHEN FA0110650) <-- Nur zur veranschaulichung, steht natürlich nicht im dataport / in der csv
FA0110655
(CODEUNIT OnAfterImportRecord BUCHEN FA0110650) <-- Nur zur veranschaulichung, steht natürlich nicht im dataport / in der csv
FA0110656
(CODEUNIT OnAfterImportRecord BUCHEN FA0110650) <-- Nur zur veranschaulichung, steht natürlich nicht im dataport / in der csv
5. Juli 2011 16:14