21. März 2011 17:40
Hallo zusammen,
brauche euren guten Rat!
Über einen SQL Trigger übergebe ich dem NAV FiBu Buch.-Blatt Daten aus einem anderen System (ERP).
Die Daten müssten ja validiert sein, wenn die im FiBu Buch.-Blatt landen,
so dass z.B. nach dem die Debitorennummer übergeben wird, mehrere Felder im FiBu Buch.-Blatt auch ausgefüllt werden.
In der 3-Tier-Architektur gibt es einige Komponenten, die diese Aufgabe übernehmen. Z.B. steht in der Einführungsunterlagen zu NAV 2009,
dass die Geschäfstlogik unter MS Dynamics NAV Server ausgeführt wird, wie z.B. die FILE-CREATE-Funktion.
Ich verstehe das so nicht ganz genau.
Welche Komponenten sind betroffen, wenn ich Daten ins NAV FiBu Buch.-Blatt übergebe?
Welches ist/sind diese? Wie sieht der Abbild aus? Worauf muss ich achten?
Kann mich jemand bitte aufklären?
Danke !!!
VG
Ahmed
21. März 2011 18:06
AhmedA hat geschrieben:Über einen SQL Trigger übergebe ich dem NAV FiBu Buch.-Blatt Daten aus einem anderen System (ERP).
Die Daten müssten ja validiert sein, wenn die im FiBu Buch.-Blatt landen,
so dass z.B. nach dem die Debitorennummer übergeben wird, mehrere Felder im FiBu Buch.-Blatt auch ausgefüllt werden.
Das schreit förmlich nach Webservices. Mit Webservices kannst du Daten in NAV-Tabellen schreiben UND dabei die NAV-Geschäftslogik nutzen.
Das was die Webservices tun und wie sie es tun muss jedoch von dir erst noch programmiert werden.
In der 3-Tier-Architektur gibt es einige Komponenten, die diese Aufgabe übernehmen. Z.B. steht in der Einführungsunterlagen zu NAV 2009,
dass die Geschäfstlogik unter MS Dynamics NAV Server ausgeführt wird, wie z.B. die FILE-CREATE-Funktion.
Ich verstehe das so nicht ganz genau.
Gemeint (für den RTC) ist:
Der NAV-Quelltext (=Geschäftslogik) wird nicht mehr auf deinem Clientrechner ausgeführt, sondern auf der Maschine, auf der sich der NAV-Server befindet (=Service Tier). Dein Client zeigt nur noch an, was vom Service Tier berechnet zurückkommt.
Dadurch, dass auch Webservices mit dem Service-Tier und
eben nicht direkt mit der Datenank kommuniziert, ist die Nutzung der Geschäftslogik möglich.
Mehr ein Exkurs:
"FILE-CREATE": Die Service-Tier-Maschine ist eben nicht dein Clientrechner und hat somit keinen direkten Zugriff auf deine lokalen Verzeichnisse und Dateien. Soll NAV eine Datei auf deinem Rechner nutzen, muss per Programmierung diese Datei erst zum Service-Tier geschickt werden.
Umgekehrt: Möchtest du eine erstellte Datei nutzen, muss ggf. diese erst vom Service-Tier heruntergeladen werden.
21. März 2011 18:17
Hallo Ahmed,
ich kann nur dringend davor warnen direkt mit einem externen Programm in die Fibu- Buchblatt- Zeile zu schreiben. Diese Tabelle ist sehr empfindlich was die Art und Weise und Reihenfolge des Eingebens der Daten angeht. Als Alternative würden sich hier die Webservices anbieten, die es erlauben auch die Geschäftslogik von NAV zu benutzen.
Es ist generell zu empfehlen externe Daten mit externen Programmen nur dann direkt in NAV- Tabellen zu schreiben, wenn man die genauen Zusammenhänge dieser Tabelle kennt. D.h. im Normalfall, dass man eine Zwischentabelle anlegt, die keinen Bezug zu den normalen NAV-Daten hat, und diese Zwischentabelle später per Report o. Codeunit in die eigentlichen Tabelle zu überführen.
Gruß, Fiddi
21. März 2011 18:30
Hi Ahmed,
benutzt du den NAV Webservice?
Wenn du den Webservice benutzt, dann werden beim einlesen bestimmte Trigger (Funktionen) ausgeführt, so als würdest du direkt in NAV was eingeben.
Z.B. OnModify der Table wird ausgeführt.
gruß
Aydin
21. März 2011 20:50
fiddi hat geschrieben:Es ist generell zu empfehlen externe Daten mit externen Programmen nur dann direkt in NAV- Tabellen zu schreiben, wenn man die genauen Zusammenhänge dieser Tabelle kennt. D.h. im Normalfall, dass man eine Zwischentabelle anlegt, die keinen Bezug zu den normalen NAV-Daten hat, und diese Zwischentabelle später per Report o. Codeunit in die eigentlichen Tabelle zu überführen.
So machen wir es auch und es funktioniert problemlos. Über einen Task (Job Scheduler Management) werden verschiedene Codeunits aufgerufen und die Daten jeweils abgearbeitet. So umgeht man auch probleme mit empfindlichen Tabellen und kann z.B. so ein Buchblatt richtig buchen und die Logik beibehalten.
Gruß
Martin
22. März 2011 11:06
fiddi hat geschrieben:ich kann nur dringend davor warnen direkt mit einem externen Programm in die Fibu- Buchblatt- Zeile zu schreiben.
Schließe mich dem an. Stell dir nur einmal vor, wenn Navision-unverträgliche Daten reingeschrieben werden ... (Beispiel "a" in ein Code-Feld). Wenn dann nur über eine Puffertabelle, welche dann über Navision-Logik die Daten in die eigentliche Zieltabelle überführt. Das macht nicht so viel kaputt im Fehlerfall.
22. März 2011 11:10
Die Dimensionen sollten in diesem Zusammenhang nicht unerwähnt bleiben. Auch die müssen durch Validierung der Felder erzeugt werden.
22. März 2011 11:42
fiddi hat geschrieben:Hallo Ahmed,
ich kann nur dringend davor warnen direkt mit einem externen Programm in die Fibu- Buchblatt- Zeile zu schreiben. Diese Tabelle ist sehr empfindlich was die Art und Weise und Reihenfolge des Eingebens der Daten angeht. Als Alternative würden sich hier die Webservices anbieten, die es erlauben auch die Geschäftslogik von NAV zu benutzen.
Es ist generell zu empfehlen externe Daten mit externen Programmen nur dann direkt in NAV- Tabellen zu schreiben, wenn man die genauen Zusammenhänge dieser Tabelle kennt. D.h. im Normalfall, dass man eine Zwischentabelle anlegt, die keinen Bezug zu den normalen NAV-Daten hat, und diese Zwischentabelle später per Report o. Codeunit in die eigentlichen Tabelle zu überführen.
Gruß, Fiddi
Ich denke mal mit Zwischentabelle ist gemeint, dass ich eine NEUE TABELLE in NAV anlege und die Daten zuerst hierher übergebe.
Heisst es dann, wenn ich die Daten von der Zwischentabelle in die eigentliche Tabelle übertrage, dass die Geschäfts-Logik (d.h. die Daten validiert werden
Natalie hat geschrieben:Die Dimensionen sollten in diesem Zusammenhang nicht unerwähnt bleiben. Auch die müssen durch Validierung der Felder erzeugt werden.
) mit übernommen wird?
22. März 2011 11:45
Dazu musst Du die entsprechenden Felder per VALIDATE übernehmen.
22. März 2011 11:56
AhmedA hat geschrieben:Ich denke mal mit Zwischentabelle ist gemeint, dass ich eine NEUE TABELLE in NAV anlege und die Daten zuerst hierher übergebe.
Genau das ist gemeint. Jans Anmerkung musst du natürlich auch berücksichtigen damit eben die Geschäftslogik durchgeführt wird.
22. März 2011 12:15
JanGD hat geschrieben:Dazu musst Du die entsprechenden Felder per VALIDATE übernehmen.
Wo führe ich diesen VALIDATE aus? Sorry wegen der Frage, aber ich mach sowas zum ersten Mal
22. März 2011 12:36
Du schiebst die Daten stupide über SQL in deine Zwischentabelle. Über eine Verarbeitung (in Navision!) wird dann die Zieltabelle mit Validates gefüllt. Die Zwischentabelle kann dann geleert werden oder als erledigt gekennzeichnet werden und über eine Reorganisation irgendwann gelöscht werden.
22. März 2011 12:45
Sebastian Pfliegel hat geschrieben:Du schiebst die Daten stupide über SQL in deine Zwischentabelle. Über eine Verarbeitung (in Navision!) wird dann die Zieltabelle mit Validates gefüllt. Die Zwischentabelle kann dann geleert werden oder als erledigt gekennzeichnet werden und über eine Reorganisation irgendwann gelöscht werden.
Dann brauche ich doch keine Webservices. Dann kann ich ja weiterhin meinen SQL Trigger für die Datenübertragung von externem ERP nach NAV Zwischentabell benutzen. Dann erst würde ich in NAV über eine Codeunit (oder was anderem??? was wäre hier am Besten) die Daten von NAV Zwischentabelle in die NAV Zieltabelle übergeben, damit die NAV-Logik übernommen wird. ODER!?
22. März 2011 13:51
So haben wir uns das gedacht. Die Codeunit sollte dann halt über einen NAS oder ähnlichem gestartet werden. Du musst dir Gedanken machen wann und wie die Puffertabelle aber auch wieder geleert wird.
Trotzdem nochmal: Direkt über ein externes System in eine Navision-SQL-Datenbank zu schreiben ist nicht die schönste Lösung!
23. März 2011 14:09
Hallo zusammen,
zuerst mal vielen Dank an alle für die wertvollen Ratschläge!
Ich möchte das alles mal anhand des Bildes zusammenfassen.
So würde ich das nach den Ratschlägen lösen wollen. Für Korrekturen und
Ergänzungen wüde ich mich natürlich freuen!
Schritt 1: Tabelle anlegen
Ich werde eine Zwischentabelle in NAV anlegen mit den gleichen Feldern wie
im FiBu Buch.-Blatt.
Schritt 2: SQL Abfrage
Wie unter dem Punkt 1 im Bild zu sehen ist, werden ich die Daten
vom SQL Server des anderen ERP-Systems per SQL-Trigger(Abfrage)
in den NAV-SQL Server übergeben. D.h. die Daten landen zuerst
in der Zwischentabelle.
Schritt 3: Codeunit
Wie unter Punkt 2 im Bild zu sehen, eine Codeunit schreiben, die mir die Daten per VALIDATE
von der Zwischentabelle in die Zieltabelle ständig alle 2 minuten (je nachdem wie nötig)
schreibt. Einen weiteren Codeunit der die Zwischentabelle dann auch löscht.
Wie sieht das programmiertechn. unter Punkt 2 im Bild aus? Muss ich einen Codeunit schreiben,
der mir die Daten aus SQL herholt bzw. liest???
Was mir noch einfällt sind die Mandanten und Sachkonten, die ich auch beachten muss, da
die SQL-Tabellen je nach Mandanten umbenannt sind. Oh mein Gott.....:(
23. März 2011 14:49
hi Ahmed,
wo ist der Webserice in der Abbildung?:-)
Erst über den Webservice kannst du die Buisness-Logik in NAV weiter führen.
ERP-SQL ---------> NAV Webservice -------------> NAV-SQL (zu Punkt 1)
War das nicht die Anforderung?
Gruß
Aydin
23. März 2011 14:51
Was mir als erstes bei Deinem Plan in den Sinn kommt: Wie stellst Du sicher, dass nicht Daten in die Zwischentabelle geschrieben werden solange Du am verarbeiten der Zwischentabelle bist? Dem SQL-Trigger im anderen System dürfte das nämlich ziemlich egal sein.
Volker
23. März 2011 15:16
vsnase hat geschrieben:Was mir als erstes bei Deinem Plan in den Sinn kommt: Wie stellst Du sicher, dass nicht Daten in die Zwischentabelle geschrieben werden solange Du am verarbeiten der Zwischentabelle bist? Dem SQL-Trigger im anderen System dürfte das nämlich ziemlich egal sein.
Volker
Ein Table Lock wird der sql-trigger auch nicht aushebeln können.
23. März 2011 15:20
... und was passiert mit den Daten die der Trigger loswerden wollte? Nirvana?
oder Zwischentabelle abgearbeitet, aber noch nicht gelöscht/geleert aber der Trigger schreibt neue Daten rein?
23. März 2011 15:37
Hi zusammen,
@Aydin: Ich wollte es eigentlich keinen Webservice nutzen, ist nicht unbedingt eine Anforderung. Die Logik soll über eine Codeunit gewährt werden. Oder bin ich jetzt völlig in falschen Gedanken???
@vsnase+JanGD: gute Frage, daran habe ich gar nicht gedacht. Kann man denn nicht die Daten in der Zwischentabelle mit den neuen Daten überschreiben??? Dann ist es ja egal..Oder!?
23. März 2011 16:02
woher weißt du, ob du sie überschreiben darfst?
einfache Lösung die Tabelle erhält eine Zeilennummer als Primärschlüssel. NAV darf nur lesen und löschen/ SQL fügt nur neue ein.
Gruß, Fiddi
23. März 2011 16:02
Hi Ahmed,
hmmm dank dem Webservice kannst du Codeunits und Page ansprechen. Wie willst du sonst eine Codeunit von außerhalb anstoßen?
Über den Webservice kannst du von außerhalb die Funktionen in der Codeunit aufrufen (mit ein paar Einschränkungen), deswegen bleibt die Buissnes-Logik erhalten.
Wenn du direkt auf die Datenbank zugreifst, dann kannst du doch keine Codeunit ausführen.
Klärt mich auf, falls es doch gehen sollte.
Gruß
Aydin
23. März 2011 17:17
aydina81 hat geschrieben:hmmm dank dem Webservice kannst du Codeunits und Page ansprechen. Wie willst du sonst eine Codeunit von außerhalb anstoßen?
Über einen regelmäßigen NAS-Aufruf zum Beispiel.
23. März 2011 17:22
Hi sebastian,
im Grunde ist der NAS auch ein Dienst. Ich arbeite mit dem Webservice kenne mich mit NAS nicht aus.
Zwischen dem NAV-SQL und ERP-SQL braucht man also einen Dienst. Ob nun der Webservice oder NAS zum Einsatz kommt, macht nicht den großen Unterschied.
So wie in der Abbildung von Ahmed dargestellt, ist die Mittelschicht (Service-Tier) anscheindend schon installiert. Also steht der Webservice und NAV-Server zur Verfügung. Dann sollte man auch schon die Ressourcen verwenden, die vorhanden sind.
Gruß
Aydin
Zuletzt geändert von aydina81 am 23. März 2011 17:31, insgesamt 2-mal geändert.
23. März 2011 17:26
Webservice läuft nur auf Nav2009. NAS hingegen schon seit Version 3.xx (wenn nicht schon sogar früher ...). Das ist klar auch ein Vorteil (Kompatibilität zwischen den Versionen). Kommt halt darauf an, was einem wichtiger ist.
Powered by phpBB © phpBB Group.
phpBB Mobile / SEO by Artodia.