{"id":1215,"date":"2012-09-27T14:04:33","date_gmt":"2012-09-27T14:04:33","guid":{"rendered":"http:\/\/www.navision-blog.de\/?p=1215"},"modified":"2012-09-28T13:22:40","modified_gmt":"2012-09-28T13:22:40","slug":"notizen-von-den-navtechdays-2012-teil-1","status":"publish","type":"post","link":"http:\/\/www.navision-blog.de\/blog\/2012\/09\/27\/notizen-von-den-navtechdays-2012-teil-1\/","title":{"rendered":"Notizen von den NavTechDays 2012 Teil 1"},"content":{"rendered":"<p>Microsoft Dynamics NAV 2013 wurde vorgestern released und so trifft es sich das gerade jetzt die <a href=\"hhtp:\/\/www.navtechdays.com\">NavTechDays 2012 in Antwerpen<\/a> stattfinden. Hier meine Notizen nach fast einem Tag Konferenz.<\/p>\n<h4>Allgemeines<\/h4>\n<ul>\n<li>Das NAV Men&#252; ist bekannterma&#223;en sehr umfangreich -&gt; NAV2013 hat jetzt eine Suche daf&#252;r<\/li>\n<li>Der Classic Client hei&#223;t jetzt Development Environment und ist kein echter Client mehr. Da es keine Forms mehr gibt wird auch gern als \u201eRetired Client\u201c bezeichnet.<\/li>\n<li>Die Administration der Service Tiere kann nun vollst&#228;ndig &#252;ber Powershell gescriptet werden. Das geht auch von remote.<\/li>\n<li>Der Page Designer wurde deutlich\u00a0verbessert und erlaubt nun eine \u201eLive Preview\u201c. Damit kann man die &#196;nderungen direkt betrachten \u2013 ohne zu kompilieren und NAV neu zu starten.\n<ul>\n<li>Gruppen k&#246;nnen eingeklappt werden<\/li>\n<\/ul>\n<\/li>\n<li>NAV2013 unterst&#252;tzt OData\n<ul>\n<li>Erlaubt Query Objekte nach au&#223;en &#252;ber Webservices zu ver&#246;ffentlichen.<\/li>\n<li>Gut f&#252;r Anbindung von externen (Reporting) Tools<\/li>\n<\/ul>\n<\/li>\n<li>Der Windows client (ehemals RTC) wurde verbessert\n<ul>\n<li>Row styles feature erlaubt es Zeilen je nach Bedingung unterschiedlich zu f&#228;rben<\/li>\n<li>Neue Shortcuts (copy &amp; paste, &#8230;.)<\/li>\n<li>Grids erlauben es aus der automatischen Anordnung der Controls auszubrechen<\/li>\n<li>Addins k&#246;nnen .NET Events nutzen<\/li>\n<\/ul>\n<\/li>\n<li>\u201eRapid Start\u201c soll alle Einrichtungsvorgange vereinheitlichen\n<ul>\n<li>Frageb&#246;gen erstellen<\/li>\n<li>Am Ende entsteht ein Package das auf andere Datenbanken angewendet werden kann -&gt; Frageb&#246;gen werden angezeigt und Daten werden eingerichtet<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<h4>Unit Testing<\/h4>\n<ul>\n<li>MS nutzt das Ding jetzt endlich selber (und zeigt es sogar in der Keynote)<\/li>\n<li>Die Testing Features von NAV 2009 wurden nochmal gezeigt\n<ul>\n<li>Konvention: \/\/ *** hinter jede Zeile die Daten f&#252;llt, die f&#252;r den eigentlichen Test unerheblich sind aber aus anderen Gr&#252;nden gef&#252;llt werden m&#252;ssen<\/li>\n<\/ul>\n<\/li>\n<li>Die neuen \u201ePage Testing\u201c features erlauben \u201eScripted UI testing\u201c durch den neuen Datentyp TestPage.\n<ul>\n<li>Erlaubt es Pages zu &#246;ffnen: myPage.OPENNEW;<\/li>\n<li>Kann Daten f&#252;llen: myPage.MyField.SETVALUE(value)<\/li>\n<li>Erm&#246;glicht es Buttons zu dr&#252;cken: myPage.MyAction.INVOKE;<\/li>\n<li>Alle Parts (auch Subpages) k&#246;nnen abgegriffen werden<\/li>\n<li>Felder k&#246;nnen auf Inhalt, Sichtbarkeit, Editierbarkeit usw. gepr&#252;ft werden<\/li>\n<li>\u201ePage traps\u201c: Registriert sich auf ein Page und wenn die ge&#246;ffnet wird dann wird zur&#252;ck in den Test gesprungen<\/li>\n<\/ul>\n<\/li>\n<li>Page Tests dauern l&#228;nger als Unit Tests aber erlauben es aus Usersicht zu testen<\/li>\n<li>\u201cTest Isolation\u201d Ff&#252;hrt ein Change tracking durch und setzt die Datenbank nach einem Test wieder in den Ausgangsstand zur&#252;ck. Teardown Funktionen sind jetzt nicht mehr n&#246;tig. Das funktioniert selbst dann, wenn der zu testende Code ein Commit enth&#228;lt. Wie geil ist das denn? Hammer!<\/li>\n<li>Recorder zur Aufzeichnung von Page Tests ist in Planung.<\/li>\n<\/ul>\n<h4>Debugger<\/h4>\n<ul>\n<li>Debugger ist in C\/AL entwickelt und damit anpassbar. WTF?!<\/li>\n<li>Erlaubt Remote NAS Debugging und zeigt den Code in C\/AL an J<\/li>\n<li>Alle Sessions k&#246;nnen debuggt werden (auch noch nicht etablierte wie Webservice Sessions)<\/li>\n<li>Sogar Endlosschleife k&#246;nnen debuggt werden (ging mit altem Debugger nat&#252;rlich nicht)<\/li>\n<li>Conditional Breakpoints (z.B. nur anhalten wenn Variable &gt; 10)<\/li>\n<li>Man kann Breakpoints hinter das Ende von Funktionen setzen -&gt; h&#228;lt beim Verlassen der Funktion an. Egal welches EXIT genutzt wurde<\/li>\n<li>Im Call Stack kann man auch in anderen Ebenen die Variablen inspizieren<\/li>\n<li>\u201eDebugger Breakpoint List\u201c erlaubt es die Breakpoints in Gruppen an und ab zu schalten<\/li>\n<li>\u201eBreak on record changes\u201c erlaubt es bei jedem DB write anzuhalten.<\/li>\n<li>Debugger hat Option um Codeunit 1 zu skippen<\/li>\n<li>\u201eCode Coverage\u201c Feature kann aus C\/AL gestartet werden. Ber&#252;hrte Codezeilen k&#246;nnen abgefragt und ausgewertet werden -&gt; kommt ins Test Framework<\/li>\n<\/ul>\n<h4>Performance talk<\/h4>\n<ul>\n<li>Die Data Access Layer ist jetzt komplet neu in Managed Code geschrieben. Damit ist das Anlegen von Records jetzt deutlich schneller, da nicht zwischen C++ und .NET vermittelt werden muss.\n<ul>\n<li>Temp Records neu geschrieben. Haben jetzt selbe Sortierung wie normale Records.<\/li>\n<li>Marked Records sind jetzt auch entsprechend richtig sortiert.<\/li>\n<li>@-Operator funktioniert jetzt wieder richtig beim Filtern.<\/li>\n<\/ul>\n<\/li>\n<li>Query object\n<ul>\n<li>Erlaubt Joins (inner, outer,..) und Aggregations (sum, count, average)<\/li>\n<li>Wird auf dem SQL Server ausgef&#252;hrt -&gt; Kein Netzwerktraffic zum NAV Server<\/li>\n<li>Massive Performancegewinne m&#246;glich<\/li>\n<li>Abgefragte Daten sind read-only -&gt; aber dadurch kaum Locks<\/li>\n<li>Programmiermodel analog wie Reports<\/li>\n<li>Gut z.B. f&#252;r alle Statistik Pages<\/li>\n<li>Wird bereits in vielen Teilen des Standard genutzt<\/li>\n<\/ul>\n<\/li>\n<li>Background Sessions erlauben \u201eFire and Forget\u201c-Tasks. Das funktioniert sogar in andere Mandanten.\n<ul>\n<li>Beispiel: Buch.-Blatt starten und die Buchungen werden asynchron auf dem Server ausgef&#252;hrt. Der Client kann ganz normal weiter arbeiten. Wird bereits zum Buchen von Rechnungen verwendet.<\/li>\n<li>Erzeugt allerdings eine komplett neue Session \u2013 samt Login usw.<\/li>\n<li>Background Sessions kosten nichts f&#252;r die Lizenz.<\/li>\n<li>Die Tasks gehen in eine Job Queue. Die erlaubt dass die Tasks nicht alle parallel stattfinden. Durch diese Linearisierung gibt es weniger konkurrierende Locks.<\/li>\n<\/ul>\n<\/li>\n<li>CALCSUMS geht auch auf Feldern die nicht im SIFT sind. Wird dann auf dem SQL Server summiert -&gt; schneller als manuelles Summieren auf dem NAV Server.<\/li>\n<li>SETAUTOCALCFIELDS (\u201eSmart SQL\u201c) erm&#246;glicht es, dass FlowFields immer direkt beim Abrufen des eigentlichen Datensatzes mit abgerufen werden. -&gt; Weniger Roundtrips zum SQL-Server.\n<ul>\n<li>Immer an bei Pages und Reports.<\/li>\n<\/ul>\n<\/li>\n<li>Connection Pooling zum SQL Server. Nur noch ein Account n&#246;tig. Das spart sehr viel Memory.<\/li>\n<li>Data caching wurde verbessert. Jetzt werden Record API calls benutzer&#252;bergreifend gecached.<\/li>\n<li>Security model wurde vereinfacht. \u201eSynchronize all logins\u201c f&#228;llt weg, da Permissions nur noch im NAV Server gepr&#252;ft werden.<\/li>\n<li>Isolation Level wurde von SERIALIZABLE auf REPEATABLE READ ge&#228;ndert.<\/li>\n<li>Locks wurden massiv reduziert bzw. es wird viel viel sp&#228;ter gelockt (90% vs. 10% der Zeit beim Buchen)<\/li>\n<li>Dimensionen wurden komplett &#252;berarbeitet (viel weniger Datens&#228;tze, weniger Writes).<\/li>\n<li>\u201eBuffered inserts\u201c werden jetzt viel &#246;fter genutzt.<\/li>\n<li>\u201eSQL callstack trace\u201c erlaubt es heraus zu bekommen welche Codezeile ein bestimmtes (schlechtes) SQL statement erzeugt hat.<\/li>\n<li>Es werden keine Cursors mehr f&#252;r den SQL Server benutzt sondern Multiple Active Result Sets (MARS).\n<ul>\n<li>Folge: Kein SETCURRENTKEY mehr nutzen wenn man die Sortierung nicht braucht. (SETCURRENTKEY ist nur noch schlecht auf SQL Server da er sortieren muss.)<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>Morgen dann sicher mehr.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Microsoft Dynamics NAV 2013 wurde vorgestern released und so trifft es sich das gerade jetzt die NavTechDays 2012 in Antwerpen stattfinden. Hier meine Notizen nach fast einem Tag Konferenz. Allgemeines Das NAV Men&#252; ist bekannterma&#223;en sehr umfangreich -&gt; NAV2013 hat jetzt eine Suche daf&#252;r Der Classic Client hei&#223;t jetzt Development Environment und ist kein echter [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[222,5,6],"tags":[],"_links":{"self":[{"href":"http:\/\/www.navision-blog.de\/blog\/wp-json\/wp\/v2\/posts\/1215"}],"collection":[{"href":"http:\/\/www.navision-blog.de\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.navision-blog.de\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.navision-blog.de\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/www.navision-blog.de\/blog\/wp-json\/wp\/v2\/comments?post=1215"}],"version-history":[{"count":4,"href":"http:\/\/www.navision-blog.de\/blog\/wp-json\/wp\/v2\/posts\/1215\/revisions"}],"predecessor-version":[{"id":1218,"href":"http:\/\/www.navision-blog.de\/blog\/wp-json\/wp\/v2\/posts\/1215\/revisions\/1218"}],"wp:attachment":[{"href":"http:\/\/www.navision-blog.de\/blog\/wp-json\/wp\/v2\/media?parent=1215"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.navision-blog.de\/blog\/wp-json\/wp\/v2\/categories?post=1215"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.navision-blog.de\/blog\/wp-json\/wp\/v2\/tags?post=1215"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}