SupportAnmelden
Sprechen Sie mit uns
FlowFields aus MS Dynamics NAV 2013 oder neuer lesen

FlowFields aus MS Dynamics NAV 2013 oder neuer lesen

March 25, 2016 · Michael Bock · Funktionen

FlowFields und berechnete Felder aus MS Dynamics NAV zu lesen, ist jetzt einfacher

Wir freuen uns, mitteilen zu können, dass wir jetzt das Lesen von FlowFields bzw. berechneten Feldern aus MS Dynamics NAV 2013 oder neuer unterstützen (tatsächlich werden NAV 2009, NAV 2013, NAV 2015 und NAV 2016 alle unterstützt).

Da Microsoft den Support für die C/Front-Schnittstelle eingestellt hat (die letzte Version mit c/Front-Unterstützung war NAV 2009), ist es schwieriger geworden, die FlowFields aus der NAV-Datenbank abzurufen. Am leistungsfähigsten ist es, direkt in der NAV-Datenbank eine neue View anzulegen, die den passenden SIFT-Index einbindet. Ja – das klingt kompliziert, aber lesen Sie weiter: Es gibt jetzt einen einfacheren Weg, FlowFields wie Balance eines Customers oder Inventory eines Items zu lesen.

Eine neue View, die den passenden SIFT-Index einbindet, ist immer die performanteste Lösung, denn die View lässt sich so zuschneiden, dass sie Ihnen alle benötigten Felder in einer einzigen Abfrage an den Datenbankserver von MS Dynamics NAV (SQL Server) liefert. Wenn Sie das technisch beherrschen und es Ihnen nichts ausmacht, bei Upgrades usw. eine zusätzliche View in NAV zu pflegen, bleibt das die beste Option.

Berechnete Felder mit RapidiOnline abrufen

Wenn Sie die MS Dynamics NAV-Datenbank jedoch sauber halten und Zeit sparen möchten, erreichen Sie dasselbe Ergebnis direkt im RapidiOnline-Setup. Sie können jetzt unsere DBLookup-Funktion nutzen, um diese FlowField-Summen aus MS Dynamics NAV abzurufen. Es gibt sogar Unterstützung für das Setzen der FlowFilters, sodass Sie die Summe zum Beispiel für ein bestimmtes Datumsintervall berechnen können.

In neueren Versionen von RapidiOnline werden die Formeln und auch die DBLookups auf dem RapidiConnector ausgewertet. Diese neue Lösung ist daher recht performant, da alle Abfragen der SQL-Datenbank lokal stattfinden.

Nachfolgend einige Beispiele für die Nutzung dieser neuen Funktion:

Balance für jeden Customer abrufen

##DBLookup('SOURCEDS','Detailed Cust_ Ledg_ Entry$VSIFT$4','Customer No_',"No_",'SUM$Amount')

Beim obigen DBLookup gehen wir davon aus, dass Sie aus der NAV-Tabelle Customer lesen und dass wir die Balance für jeden gelesenen Customer möchten. Wir verwenden den SIFT-Index "Detailed Cust_ Ledg_ Entry$VSIFT$4" und filtern das Feld "Customer No_" mit dem Wert aus jedem Customer (dem Wert aus "No_"). Den Wert holen wir aus dem Feld "SUM$Amount". Tatsächlich sieht das verwendete Select-Statement etwa so aus: SELECT SUM("SUM$Amount") FROM "Detailed Cust_ Ledg_ Entry$VSIFT$4" WHERE "Customer No_" = 'xxx' (wobei xxx durch die jeweilige Customer No ersetzt wird) – Sie geben es aber einfach wie oben an.

Total Sales (LCY) für das Jahr 2012 für jeden Customer abrufen

##DBLookup('SOURCEDS','Cust_ Ledger Entry$VSIFT$1','Customer No_',"No_",'Posting Date','##"Posting Date">=\'2012-01-01\' and "Posting Date"<=\'2012-12-31\'','SUM$Sales (LCY)')

Auch bei diesem DBLookup lesen wir aus der NAV-Tabelle Customer und möchten den Total Sales (LCY) für das Jahr 2012 für jeden gelesenen Customer ermitteln. Wir verwenden einen anderen SIFT-Index, diesmal "Cust_ Ledger Entry$VSIFT$1", und filtern das Feld "Customer No_" mit dem Wert aus jedem Customer (dem Wert aus "No_"). Zusätzlich müssen wir auch das Feld "Posting Date" filtern, allerdings nicht auf ein bestimmtes Datum, sondern auf ein Intervall. Das erledigt unser spezieller Formelfilter (das ## bewirkt, dass der restliche String als fester Filter gesetzt wird). Innerhalb des Filter-Strings müssen wir das einfache Anführungszeichen mit dem \ (Backslash) "escapen" – unser Formelinterpreter entfernt den \, behält aber das ' (einfache Anführungszeichen), das die WHERE-Klausel in SQL benötigt. Das SQL-Select-Statement sieht etwa so aus: SELECT SUM("SUM$Sales (LCY)") FROM "Cust_ Ledger Entry$VSIFT$1" WHERE "Customer No_" = 'xxx' AND "Posting Date">='2012-01-01' and "Posting Date"<='2012-12-31' (wobei xxx durch die jeweilige Customer No ersetzt wird).  

Inventory für jedes Item abrufen

##DBLookup('SOURCEDS','Item Ledger Entry$VSIFT$3','Item No_',"No_",'SUM$Quantity')

In diesem letzten Beispiel lesen wir aus der NAV-Tabelle Item und möchten für jedes gelesene Item das gesamte Inventory ermitteln. Wir verwenden den SIFT-Index "Item Ledger Entry$VSIFT$3" und filtern das Feld "Item No_" mit dem Wert aus jedem Item (dem Wert aus dem Feld "No_"). Das resultierende SQL-Select-Statement sieht etwa so aus: SELECT SUM("SUM$Quantity") FROM "Item Ledger Entry$VSIFT$3" WHERE "Item No_" = 'xxx' (wobei xxx durch die jeweilige Item No ersetzt würde). 

Welcher SIFT-Index verwendet werden soll

Welcher SIFT-Index für die Berechnung einer bestimmten Summe zu verwenden ist, lässt sich nicht an einer einzigen Stelle ablesen und kann sich je nach NAV-Version und Umfang der Anpassungen von Installation zu Installation unterscheiden. Erste Hinweise finden Sie in NAV im Object Designer bei der betreffenden Tabelle, und anschließend können Sie sich die Views ansehen, die in der NAV-SQL-Datenbank selbst definiert sind (schauen Sie unter Views).

Um diese neue Funktion zu nutzen, müssen sowohl der zentrale Rapidi-Service als auch der RapidiConnector auf Version 3.2.92v oder höher laufen. Bitte kontaktieren Sie unseren Support, um bei Bedarf ein Upgrade zu vereinbaren.

Treffen Sie unser Customer Success Team – jetzt Termin buchen!

Finden Sie heraus, ob es zu Ihrer Umgebung passt

Sagen Sie uns, welche Systeme Sie nutzen, und wir sagen Ihnen offen, ob Rapidi das richtige Werkzeug ist.