Excel Buffer in Dynamics NAV 2013: Geschwindigkeit ist keine Hexerei

Excel Buffer in Dynamics NAV 2013: Geschwindigkeit ist keine Hexerei

Rate This
  • Comments 3

Servus und Bongiorno!

Italien ist immer eine Reise wert. Gerade jetzt, da die Temperaturen locker 10 Grad über denen in Deutschland liegen. Neidisch? Wäre ich auch J Allerdings bin ich durchaus zum Arbeiten hier, was aber meine Freude darüber nur ein ganz klein wenig trübt.

Aber zum Thema: Mein werter Kollege Lars-Bo Christensen hat im NAV Team Blog zwei Artikel veröffentlicht, in denen es um die Umgestaltung und den Technologiewechsel der Excel Buffer-Funktionen geht. Wir nutzen dort nun, wie an den meisten Stellen in Dynamics NAV, keine Automations mehr, sondern .NET. Hier das Open XML SDK 2.0 für Microsoft Office. Mehr dazu in den folgenden englischsprachigen Artikeln.

Excel Buffer Using Open XML Instead of Excel Automation (Part 1 of 2)

Use Open XML to Extend the Excel Buffer Functionality (Part 2 of 2)

Hier soll es aber um etwas anderes gehen. Die in den Artikeln genutzten Tags NAV 2013, Office und Development sind aus meiner Sicht ein wenig emotionslos, da ein ganz entscheidender Hinweis fehlt: PERFORMANCE!

Das hat mein lieber Kollege Duilio Tacconi - und er bat mich ganz explizit, ihn als „Italian ***“ Smile zu referenzieren – uns durch einige eigene Tests wissen lassen. Auch die Objekte stammen von Ihm. Vielen Dank Duilio Smile

Und genau an dieser Performance-Demo möchte ich auch Sie teilhaben lassen. Sie basiert auf der Ausgabe der Tabelle 99000757 „Calendar Entry“ in eine Excel-Tabelle. Wenig funktional sinnvoll, aber effektiv für diesen Zweck. Im CRONUS finden sich in der Tabelle ca. 9400 Datensätze mit 18 Spalten. Also eine, wie ich finde, durchschnittliche Menge an Daten im Hinblick auf einen Export.

Die Testgestaltung ist recht übersichtlich. Im OnPreDataItem() Trigger werden die Überschriften ausgegeben:

clip_image002

Dann im OnAfterGetRecord() die Zeilen:

clip_image004

Und abschließend, im Trigger OnPostDataItem(), wird das Excel-Workbook erzeugt:

clip_image006

Die Erzeugung ist in Dynamics NAV 2013 etwas unterschiedlich gelöst, deshalb hier noch einmal der dortige Quellcode:

clip_image008

Die Laufzeit der Variante unter dem RoleTailored Client für Dynamics NAV 2009 R2 ist sehr… Sagen wir einfach, sie führt im Diagramm dazu, dass die Laufzeit unter Dynamics NAV 2013 nicht mehr sichtbar ist. Aus dem Grund lasse ich diese aus der Betrachtung heraus.

Prego!

clip_image009

Der Export unter Dynamics NAV 2009 R2 dauert 7 Minuten und 14 Sekunden. Unter Dynamics NAV 2013 allerdings nur – aufgerundet – 32 Sekunden. Die Performance ist also um den Faktor 13 bis 14 besser, läuft also dramatisch schneller.

Geschuldet ist das vor allem der Open XML Implementierung, die um einiges schneller ist. Übrigens betrifft das viele Bereiche in Dynamics NAV 2013.

Um die Performance auch in Dynamics NAV 2009 zu steigern, möchte ich Ihnen noch den folgenden Artikel meiner Kollegin Jasminka Thunes ans Herz legen: Export to Excel on Dynamics NAV: RTC.

Bis zum nächsten Post, Arrividerci!

 

Carsten Scholling

Microsoft Dynamics Germany
Microsoft Customer Service und Support (CSS) EMEA

Email: cschol@microsoft.com
Microsoft Connect: http://connect.microsoft.com
Online Support: http://www.microsoft.com/support
Sicherheitsupdates: http://www.microsoft.de/sicherheit

Microsoft Deutschland GmbH
Konrad-Zuse-Straße 1
D-85716 Unterschleißheim
http://www.microsoft.de

Attachment: ExcelBuffer.zip
Leave a Comment
  • Please add 5 and 3 and type the answer here:
  • Post
  • Hallo,

    ein NAV- Programmierer aus den Niederlanden hat hier (www.kauffmann.nl/.../export-to-excel-on-rtc-using-net-interop) auch noch eine Lösung zum besten gegeben, die auch unter 2009 den RTC- Excelbuffer sehr beschleunigt. Nach dem ich mal 10000 Excelzeilen mit jeweils 10 Feldern im RTC importieren wollte (mit dem gleichen Ergebnis wie hier beschrieben), war dies doch schon eine erhebliche Verbesserung.

    Gruß,

    Hans H. Fiddelke  

  • Danke Hans Heinrich,

    das Prinzip dort scheint genau das aktuelle zu sein. Also eine gigantische Steigerung der Performance.

    Viele Grüße,

    Carsten

  • Hallo

    Habe beim Einsatz von ClosedXML Probleme mit dem Ausführen der Excel-Formeln. Der Code im Classic:

    XlSheet.Range(lrecMappZeile.Zelle + FORMAT(j)).Columns.AutoFit;

    ltxtFormel := '=LÄNGE(' + lrecMappZeile.Zelle + FORMAT(j) + ')';

    XlSheet.Range('IV' + FORMAT(j)).Formula := ltxtFormel;

    ltxtLänge := FORMAT(XlSheet.Range('IV' + FORMAT(j)).Value);

    EVALUATE(lintLaenge,ltxtLänge);

    Die Automation liefert mir in ltxtLänge die Länge des Zelleninhaltes zurück, wie erwartet.

    Der gleiche Code-Block mit ClosedXML / OpenXML SDK:

    XlWrkShtDotNet.Columns(j,i).AdjustToContents();

    ltxtFormel := '=LEN(' + lrecMappZeile.Zelle + FORMAT(j) + ')';

    XlWrkShtDotNet.Cell(j,i).FormulaA1 := ltxtFormel;

    ltxtLänge := FORMAT(XlWrkShtDotNet.Cell(j,i).Value);

    EVALUATE(lintLaenge,ltxtLänge);

    In diesem Fall erhalte ich in ltxtLänge einfach die Formel zurück und nicht das gewünschte Ergebnis wie unter Classic. Das gleiche Problem habe sinnigerweise auch mit anderen Formeln. Kann mir jemand einen Hinweis geben, was ich da falsch mache.

    Besten Dank für die Hilfe.

    Gruss

    Marian Kostek

Page 1 of 1 (3 items)