Danjo's two cents NAV, Powershell, Android, C#, Lync, Win8, …

30Okt/120

Dynamics Technical Airlift – Das SQL-Statement hinter der Query

Während meines Vortrages habe ich ein SQL-Statement gezeigt, welches mit dem SQL-Profiler während der Laufzeit einer Query aufgezeichnet wurde.

Hierbei handelt es sich um eine Query, welche das selbe Ergebnis liefert wie der TOP-10-Debitoren-Report. Die Query benötigt gerade in großen Datenbank merklich weniger Zeit.

Hier noch einmal das SQL-Statement zum nachlesen:

SELECT TOP (10) ISNULL("Customer"."No_",@0) AS "No",ISNULL("Customer"."Name",@1) AS "Name",ISNULL(SUM("SUB$Customer$Sales (LCY)"."Sales (LCY)$Cust_ Ledger Entry$SUM$Sales (LCY)"),@3) AS "Sum_Sales_LCY",ISNULL(SUM("SUB$Customer$Balance (LCY)"."Balance (LCY)$Detailed Cust_ Ledg_ Entry$SUM$Amount (LCY)"),@5) AS "Sum_Balance_LCY" FROM "Demo Database NAV (7-0)"."dbo"."CRONUS AG$Customer" AS "Customer" WITH(READUNCOMMITTED)

OUTER APPLY (SELECT TOP (1) ISNULL(SUM("Sales (LCY)$Cust_ Ledger Entry"."Sales (LCY)"),@2) AS "Sales (LCY)$Cust_ Ledger Entry$SUM$Sales (LCY)" FROM "Demo Database NAV (7-0)"."dbo"."CRONUS AG$Cust_ Ledger Entry" AS "Sales (LCY)$Cust_ Ledger Entry" WITH(READUNCOMMITTED)  WHERE ("Sales (LCY)$Cust_ Ledger Entry"."Customer No_"="Customer"."No_")) AS "SUB$Customer$Sales (LCY)"

OUTER APPLY (SELECT TOP (1) ISNULL(SUM("Balance (LCY)$Detailed Cust_ Ledg_ Entry"."Amount (LCY)"),@4) AS "Balance (LCY)$Detailed Cust_ Ledg_ Entry$SUM$Amount (LCY)" FROM "Demo Database NAV (7-0)"."dbo"."CRONUS AG$Detailed Cust_ Ledg_ Entry" AS "Balance (LCY)$Detailed Cust_ Ledg_ Entry" WITH(READUNCOMMITTED)  WHERE ("Balance (LCY)$Detailed Cust_ Ledg_ Entry"."Customer No_"="Customer"."No_")) AS "SUB$Customer$Balance (LCY)"

ORDER BY "Sales_LCY" DESC,"No" ASC OPTION(OPTIMIZE FOR UNKNOWN, FAST 50, FORCE ORDER, LOOP JOIN)

Dies ist auch ein schönes Beispiel wie die Query im Hintergrund mit verschachtelten Abfragen, der TOP-Klausel und den SQL eigenen Funktionen wie SUM arbeitet.

23Okt/121

NAV2013 – Zugriff auf OData

Habt ihr schon einmal die neuen Möglichkeiten mit OData ausprobiert die euch Microsoft Dynamics NAV 2013 bietet?

Hier einmal ein kurzer Überblick über die Zugriffsmöglichkeiten auf OData-Webservices.

Alle hier genannten Beispiele funktionieren mit der Standardinstallation von Cronus und dem veröffentlichten Webservice Customer mit dem Typ Seite und der ID 22.

 

Zeige alle OData-feeds:

http://localhost:7048/DynamicsNAV70/odata

Zeige Metadaten:

http://localhost:7048/DynamicsNAV70/odata/$metadata

Gib alle Debitoren aus:

http://localhost:7048/DynamicsNAV70/odata/Customer

Gib den Debitoren mit dem Primärschlüssel 10000 aus (Primärschlüssel verwenden):

http://localhost:7048/DynamicsNAV70/odata/Customer('10000')

Gib alle Debitoren mit dem Lagerort BLAU aus (Verwendung von Feldfiltern):

http://localhost:7048/DynamicsNAV70/odata/Customer?$filter=Location_Code eq 'BLAU'

Gib Name, Lagerortcode und Kreditlimit(MW) aus (Abruf einzelner Felder):

http://localhost:7048/DynamicsNAV70/odata/Customer?$select=Name, Location_Code, Credit_Limit_LCY

Gib Name, Lagerortcode und Kreditlimit (MW) für alle Debitoren aus der Lagerortcode BLAU ist (einzelne Felder kombiniert mit Filtern):

http://localhost:7048/DynamicsNAV70/odata/Customer?$filter=Location_Code eq 'BLAU' &$select=Name, Location_Code, Credit_Limit_LCY

12Okt/120

NAV 2009: Probleme mit korrupten / gelöschten METADATEN

Beim arbeiten mit Microsoft Dynamics NAV kann es passieren, dass die Metadaten eines Objektes korrupt sind.

Das ist an und für sich kein Problem, da die Metadaten immer dann neu erzeugt werden, wenn ich das Objekt über den Object Designer kompiliere. Aber wie sieht das bei den versteckten Systemtabellen aus?

Oder was fast noch schlimmer ist: Was mache ich, wenn ich versehentlich alle Metadaten gelöscht habe?

Dieses Problem lässt dich nur auf einem Weg korrekt lösen.

Erst öffnest du den "Alter Database"-Dialog und setzt die Datenbank in den single user Zustand.

Anschliessend wird das Kennzeichen Enable for Microsoft Dynamics NAV Server deaktiviert..

Wenn das alles durch ist setzt du den Haken wieder und kannst zuschauen wir der Client die Objekte (inklusive der Systemtabellen) kopmiliert. Ist dieser damit fertig muss die Datenbank nur noch für Benutzer wieder frei gegeben werden. (Single user wieder deaktivieren)

   
%d Bloggern gefällt das: