Hallo liebe Leser, mit Dynamics NAV 2013 wurde uns die Objektart Query ( MSDN – Queries / MSDN – Working with Queries ) vorgestellt und von Microsoft zur Verfügung gestellt. In der letzten Zeit sah ich mehrere alte Umsetzungen oder auch neue Anfragen zu Programmierungen, wo es sich förmlich anbot Queries als Objektart zu verwenden. Daher möchte ich heute kurz darauf eingehen, wo und wann sich die Verwendung von Queries lohnen kann und habe dafür auch ein Beispiel vorbereitet. Meiner Meinung nach gibt es zwei signifikante Unterschiede zwischen RETEAP UNTIL NEXT Schleifen und Queries: Mit einem FINDSET oder FIND(‚-‚) werden immer alle Felder aus der entsprechenden Tabelle geholt. Bei der Query ruft man nur die benötigten Felder ab. Bei verschachtelten Schleifen (Beispiel Debitor -> Debitorenposten) wird zu jedem Debitor einzeln alle gefilterten Debitorenposten geholt. Eine Query holt diese Daten kombiniert, da das SQL Skript anders aufgebaut ist. Wie groß der Unterschied zwischen einer Query und verschachtelten Schleifen oder auch Datasets sein kann, werde ich an folgender Anforderung zeigen: „Erstelle einen Monatsbericht, der pro Monat und pro Mitarbeiter anzeigt, ob dieser mehr als 8 Stunden gearbeitet hat.“ Das Beispiel ist stark vereinfacht und bezieht sich jetzt auf folgende Tabellen: Ressource, Projektposten, (optional Projektbuchblattzeile). Wir befassen uns nur mit dem Ermitteln der erforderlichen Daten. Die Ausgabe und die Filterung lasse ich komplett außen vor. Das Dataset könnte beispielsweise so aussehen: Ressource –>Projektposten: Hierbei würden alle Projektposten einfach im Dataset übergeben und im RDL summiert. Alternativ dazu könnten wir die Daten auch im C/AL schon gruppieren (Buffertabelle) Die Laufzeit bei ca. 1 Millionen Projektposten beträgt bei mir ca. 42 Sekunden (nur die Verarbeitung im C/AL ohne Datasetübergabe oder Layout. Ressource –> Datum –> Projektposten: Pro Ressource bauen wir per Dataset eine Schleife über jeden Tag im Filter und laufen dann pro Tag durch die Projektposten der Ressource Die Laufzeit bei ca. 1 Millionen Projektposten beträgt bei mir auch hier ca. 42 Sekunden (nur die Verarbeitung im C/AL ohne Datasetübergabe oder Layout. Warum in diesem Fall nicht eine Query nutzen, die mir schon pro Ressource und pro Tag die summierte Menge ausgibt? Die Query muss dann so aussehen: Wir benötigen die Ressourcennummer, das Buchungsdatum und das summierte Feld Menge. Sobald wir „Method Type“ = Totals auf dem Feld Menge einstellen, bekommen alle anderen Felder den Haken „Group by“. Die Ressourcen-Tabelle wird über die Nummer mit der Projektpostentabelle über den DataItemLink verknüpft. Das war’s, mehr muss man nicht machen. Führen wir die Query einfach mal aus: Die Abfrage dauert keine 2 Sekunden, obwohl ich am 02.01.2016 1 Millionen Projektposten erstellt habe. Diese Query integriere ich nun in einen Bericht. Leider weiß ich nicht wie viele Einträge die Query hat, daher habe ich mich entschieden, die Query in eine temporäre Buffer Tabelle zu schreiben und die Buffertabelle dann noch komplett zu durchlaufen (Gibt dazu auch ein HowDoI Video für eine Debitoren TOP 10 Liste: How Do I: Create a Report Using a Query in Microsoft Dynamics NAV 2013 R2 ) Die Laufzeit beträgt dann sage und schreibe 2 Sekunden. Für mich ist das ein Unterschied wie Tag und Nacht. Ok, ich habe nun keine Möglichkeit alle Felder der Tabelle für die Filterung des Anwenders zu nutzen, aber das ist meistens auch nicht nötig. Die benötigten Felder kann man entsprechend als Filter in der Query und als Filter in der Requestpage (ausprogrammiert) hinterlegen und das sorgt für einen erheblichen Performanceboost. Wer es selber ausprobieren möchte, kann die Objekte in einer Cronus DB ausführen. Ihr müsst Euch lediglich vorher genug Projektposten erstellen. FOB und TXT könnt ihr hier herunterladen: 161029_queryimreport.zip Wer sich damit noch nicht befasst hat, sollte mal einen Blick darauf werfen.
↧
Blog Post: Dynamics NAV – Verwendung von Queries
↧
Blog Post: NAV 2017-C/AL Properties
In NAV 2017 some new C/AL properties has been introduced by looking at the user requirement . These properties are introduced to give user more flexibility over the UI and give more user friendly experience. Application Area :- This property set application areas that apply to the control and this property applies to Page field, part, and action controls. Report request page field controls. MenuSuite items This property used to hide the control in user interface .i.e. You need to tag the controls by specifying the text string with comma separated values Example If you want tag Vendor list in Menu Suite then you can mention #Basic,#Suite in applicationarea Note :- This property is working based on the table 9178 application area setup .You can define more but still in future release it may be change again. Gesture:- This property specially for touch interface devices like Phone client. The property has the following values: Value Description None No gesture for the action. LeftSwipe Swipe in from the right edge of the touch interface. RightSwipe Swipe in from the left edge of the touch interface. You typically use the Gesture property on list type pages for executing an action on items in a repeater control. In Action Designer, you can use the Gesture column to view the Gesture property value for all page actions. If the Gesture column is not visible, then on the View menu, choose Show Column , and then select Gesture . TestPermissions :- Specifies a value that can be used to determine which permission sets are used on tests that are run by test codunits or test functions. This property applies To test codeunits that have subtype property set to Test To Test functions are functions that have the FunctionType property set to Test . The property has the following values: Disabled Restrictive NonRestrictive InheritFromTestCodunit PromotedOnly:- This property specifies whether actions to be displayed on HOME tab of ribbon and not on the tab where it is defined. You can set either Yes or No in this property . Default value is No This property in not relevant on Microsoft Dynamics NAV Tablet client and Microsoft Dynamics NAV Phone client because only promoted actions are displayed on these clients. Cheers...
↧
↧
Blog Post: Dynamics NAV – Verwendung von Queries #2 – Generische Diagramme
Hallo Leute, im Beitrag Dynamics NAV – Verwendung von Queries habe ich über einen nützlichen Anwendungsfall von Queries (Abfragen) gesprochen. In diesem Beitrag möchte ich über eine weitere Einsatzmöglichkeit von Queries, den generischen Diagrammen, berichten. Wer sich zuerst einlesen möchte, der kann sich den Beitrag im MSDN ansehen ( How to: Create Generic Charts ). Des Weiteren gib es hier auch eine Einleitung auf deutsch, wie generische Diagramme eingerichtet werden können ( Microsoft Dynamics NAV 2013 – neue Auswertungsmöglichkeiten ). In den generischen Diagrammen kann ich grundsätzlich zwischen zwei Datenquellen wählen: Tabellen und deren Felder Abfragen (Queries) und deren Spalten & Filter Generische Diagramme bieten sich für eine schnelle Auswertung bestimmter Daten an. In meinem Beispiel befassen wir uns daher mit Kunden- und Lieferanten-Stammdaten. Wir wollen beispielsweise wissen, welche Kunden oder Lieferanten ein Saldo von höher als 1.000 bzw. 10.000 € aufweisen. Wir schauen uns daher die Debitoren mit einem Saldo von mehr als 10.000 € an. Diese Information steht uns im Microsoft Standard über das Feld Saldo in der Kundentabelle (Tabelle 18 Customer) und in der Lieferantentabelle (Tabelle 23 Vendor) bereits mit dem Flowfield „Balance“ (Saldo) zur Verfügung. Wenn wir nun versuchen unsere Anforderung mit einem generischen Diagramm umzusetzen, dann könnte das so aussehen: ID = T18_50000 (Tabelle 18 / 50000 erstes individuelles generisches Diagramm) Name = Debitor (Saldo MW > 10000) Herkunftsart = Tabelle Herkunfts-ID = 18 Erforderliche Kennzahl (Balance LCY) -> Saldo (MW) y-Achse – Titel = Saldo (MW) x-Achse – Feld = Name x-Achse – Titel = Name Beschreibung = Zeigt alle Debitoren mit einem Saldo (MW) > 10.000 € Filter auf das Feld Balance (LCY) = „>10000“ Nun integrieren wir das Diagramm in unserer Rollencenter. Dafür führe ich folgende Schritte durch: Öffnen des Rollencenters (Ich nutze für mein Beispiel das Rollencenter 9007 -> Profil Einkäufer) Anpassen der Rollencenterseite Diagrammabschnitt hinzufügen und somit ein „Leeres Diagramm“ im Layout des Rollencenters erzeugen. Im Rollencenter das „Leere Diagramm“ auswählen und dort auf Anpassen klicken: Das individuelle Diagramm auswählen „T18_50000“ und mit „OK“ bestätigen. Nun können wir uns das Ergebnis ansehen: Je nach Anzahl der detaillierten Debitorenposten kann die Performance hier stark schwanken. Ich habe per Stapelverarbeitung 500.000 detaillierte Debitorenposten in einem Cronus Mandanten erzeugt. Trotz meiner sehr leistungsstarken Testumgebung benötigt das generische Diagramm nun ca. 30 Sekunden zum Anzeigen der Daten. Es kann also festhalten werden: Umso mehr detaillierte Debitorenposten vorhanden sind umso länger braucht das Diagramm. Das liegt einfach daran, dass die folgenden Kriterien ungünstig sind: Berechnung eines Flowfields pro Debitor Filterung auf ein FlowField So sieht das dann für den Anwender aus und das jedes Mal, wenn die Rollencenterseite geöffnet wird. Das ist dann nicht mehr so schön. Die Alternative dazu stellt eine Query da, die wesentlich schneller ist. Ich orientiere mich am Flowfield, da ich das exakt gleiche Ergebnis haben möchte. So sieht dann meine Query aus: No. – aus der Debitorentabelle Name – aus der Debitorentabelle Amount / Amount (LCY) aus der Detaillierten Debitorenpostentabelle und die Verknüpfung über das Feld Debitorennr. Die Einrichtung des generischen Diagramms ist fast identisch mit der Einrichtung der Debitorentabelle (siehe oben). Folgende Änderungen sind vorhanden: Herkunftart = Abfrage Herkunfts-ID: 50001 Erforderliche Kennzahl -> Aggragation „Summe“ Ansonsten sind nur die Feldnamen etwas anders. Nun können wir das Diagramm im Rollencenter austauschen und müssen dann den Client einmal neustarten: Nach dem Neustart ist das generische Diagramm sofort geladen. Keine Wartezeit! Hier ist die Query wesentlich schneller als die Flowfield Variante. Auch wenn ich viel Kritik über Query gelesen habe und es auch berechtigte Kritik gibt, weil es beispielsweise keine Standardintegration von Queries in Seiten oder Berichten als SourceTable gibt, so darf man nicht vergessen, dass Queries in manchen Bereichen sehr große Vorteile aufweisen können. Das Query Objekt (Debitorensalden) könnt ihr hier herunterladen: 161030_CustomerBalanceQuery.zip
↧
Blog Post: Cannot build the page XX. The metadata object Table 0 was not found.
This error can occur during or after an upgrade process. Cause: In the source table of the page there is a field with a wrong tablerelation, in that case with value “Table 0”. That can occur, if the selected table in the table relation was moved, removed or renamed, especially, if that table is a custom table or a table part of a module. Solution: Edit the source table of that page, check all fields with tablerelations. Replace value “Table 0” with the correct value ...read more
↧
Forum Post: RE: Can we check Navision 2013 R3 SQL server performance using external SQL Query
Thanks Erik
↧
↧
Blog Post: Dynamics NAV 2017: Bringing Two Worlds Together
Dynamics NAV 2017 is now generally available for download on PartnerSource. Here on our blog, we’ll post a couple of overviews of what is new in this release, and we’ll share some technical insights with you. First in this series is today’s story of how Dynamics NAV 2017 brings two worlds together. In Office 365 experience...
↧
Forum Post: RE: ERROR WHEN RENAMING CUSTOMER NUMBER
Hello Erik, I tried all that, but I havent got any solution so far.
↧
Blog Post: Microsoft Dynamics Webcasts This Week: AX BI & reporting; NAV native controls; GP BI & reporting; Migrating to AX
Here's what's happening on this week's live webcast schedule. Register to attend live or to gain access to the recordings. Tuesday, November 1, 2016 Reporting and BI for Dynamics AX: How to Fulfill Users' Top Priority in Digital Transformations , 12:00 PM EDT Register Microsoft Dynamics AX users believe in d... read more ...read more
↧
Blog Post: List pages in Nav 2017 – a new look and feel
TharangaC has written an interesting posting about one of Nav 2017’s new features. Maybe not really a new process or technical feature. It’s more a Wow! This web client feature is the new optional style of list pages . It’s possible to show the items in a list like in a catalogue, has more look and feel of a phone/tablet’s convenient app. Seems that the webclient gets more cool features than the windows client. For the complete blog post follow here . cheers Filed ...read more
↧
↧
Forum Post: RE: ERROR WHEN RENAMING CUSTOMER NUMBER
Strange. I'm sure that the table relation hides somewhere in your custom table. Which version of Navision are you using?
↧
Forum Post: RE: ERROR WHEN RENAMING CUSTOMER NUMBER
2016
↧
Blog Post: Supply chain: What's new in Microsoft Dynamics 365 for Operations (AX7), Part 1
Microsoft Dynamics 365 is a new approach to business applications which brings together Dynamics CRM, AX, NAV and Office 365 strengths with a unified application platform and a common data service (known until very recently as a "common data model"). Common data service is going to be the backbone and foundation of entire Dynamics 365 offering as an out-of-box business database for storing and managing business entities. With additional capabilities coming from Azure, Power BI ...read more
↧
Forum Post: RE: ERROR WHEN RENAMING CUSTOMER NUMBER
Which objects did you check?
↧
↧
Forum Post: RE: ERROR WHEN RENAMING CUSTOMER NUMBER
I checked in the Onrename Trigger on CU 1 but it was blank. How can i Track down the custom code/table?
↧
Forum Post: RE: ERROR WHEN RENAMING CUSTOMER NUMBER
CU 1 as in codeunit 1?? You don't find any table relations in codeunit 1. As to how to find it in other objects, check my first reply: "The easiest way to see if the is a table relation "hidden" in an object is to export the object to text, and search for table relations."
↧
Blog Post: Nav 2017 – First videos
Found some cool new videos about Nav 2017 … Whats New in Microsoft Dynamics NAV 2017 – Part 1 ( Saurav Dhyani ) Whats New Microsoft Dynamics NAV 2017 (Cosmoconsult) What’s New Microsoft Dynamics NAV 2017 (BSS, german) cheers Filed under: dynamics nav , nav 2017 , new version , Video ...read more
↧
Forum Post: RE: Mobile App - Setup of Dynamics NAV
Hi KESHAB ROY , 1. If all steps followed from 1 To 4 then you should be able to connect to RTC with username password. Is that working? 2. After step 5 First we need to configure and test the web client. I think that is not working. Could you please first confirm that Windows client is working or not?
↧
↧
Blog Post: MSDW Podcast, October 31, 2016: Examining the new Dynamics SMB partner cloud survey with Linda Rose
Get the MSDW Podcast RSS feed or subscribe on iTunes or Stitcher . The feel-good conference season is over, with its keynotes, success stories and D... read more ...read more
↧
Forum Post: RE: ERROR WHEN RENAMING CUSTOMER NUMBER
Hi You need to check the rename trigger of customer table as there might be some relation of another table has been defined.
↧
Forum Post: RE: ERROR WHEN RENAMING CUSTOMER NUMBER
Hello Enrik, I already did that more than enough. There is none.
↧