Donnerstag, 9. Februar 2023

Better Access Charts: Versuche mit Chart.js 3 und höher

Im letzten Beitrag habe ich erläutert, dass ein wesentliches Hindernis für die Verwendung der Version 3 und höher von Chart.js beseitigt ist. In diesem Beitrag erläutere ich meine Bemühungen Charts.js ab der Version 3 einzusetzen.

Seit Beginn des Projekts Better Access Charts verwende ich die Version 2.9.4 von Chart.js. Bisher hat mich das verwendete Plug-In für die Color-Schemes davon abgehalten, mich mit der Version 3 und höher zu beschäftigen. Jetzt ist eine Alternative verfügbar. Darüber habe ich ausführlich im letzten Blog-Beitrag berichtet.

Im ersten Versuch habe ich mich ganz naiv an die Arbeit gemacht. Als erstes habe ich für die Bibliothek von Chart.js die Version 3.0.2 konfiguriert. Ich habe mich mit Absicht für diese niedrige Version entschieden, um eventuelle Probleme, die vielleicht erst mit einer Folgeversion auftreten, am Anfang auszuschließen. Dabei bin ich an einer Kleinigkeit gescheitert. Der Name der Bibliothek wird jetzt nicht mehr groß, sondern klein geschrieben.

Danach habe ich den VBA-Code angepasst. Die Zeilen für die Verwendung des Plug-Ins "Color-Schemes" habe ich ausgeblendet; ich weiß ja, dass es mit Chart.js ab der Version 3 nicht kompatibel ist. Im ersten Schritt ist es mir auch egal, dass dann alle Daten grau dargestellt werden. Es geht hier schließlich nur um einen ersten Test.

Als nächstes habe ich den VBA-Code so angepasst, dass keine der möglichen Optionen Eingang in die html-Datei findet. Als Datenquelle habe ich die eingebauten Demodaten verwendet und als Chart-Typ einen Bar Chart. Auf diese Weise habe ich einen minimalen Chart konfiguriert. Dies war mir wichtig, damit ich mich in den ersten Tests auf die Grundfunktionalität konzentrieren kann.

Und dann ging es auch schon los mit dem ersten Test. Einfach auf den Button "Update Chart" klicken und ... es erschienen zwei Fehlermeldungen: "Script Error" und "Chart ist undefiniert". Es wäre ja auch zu schön gewesen, wenn es einfach so funktioniert hätte.

Da die generierte html-Datei den gewünschten Chart zeigt, wenn man sie mit Chrome öffnet, war schnell klar, dass es sich hier um ein spezifisches Problem des IE 11 handelt. Also habe ich mich im GitHub Projekt von Chart.js auf die Suche gemacht.

Die Entwickler dort haben sich entschieden, mit der Einführung der Version 3 den Support für den Internet Explorer 11 einzustellen. (Siehe: Issue #8042) Man hat festgestellt, dass die Dateigröße für das Gesamtprojekt sinkt. (Siehe: Issue #8009) Auch in der Dokumentation findet sich ein entsprechender Hinweis im Abschnitt Browser Support.

Nun bin ich nicht der erste Entwickler, der sich mit der Unterstützung von veralteten Browsern beschäftigen darf. Nach einer kurzen Recherche bin ich auf eine mögliche Lösung gestoßen: Polyfills. Das sind Bibliotheken, die dem Browser nicht bekannten Funktionen als eigene Funktionen nachbilden.

Um herauszufinden, für welchen Befehl ich ein Polyfill suchen muss, habe ich die Bibliothek von Chart.js in der nicht minimierten Version heruntergeladen und eingebunden. Danach habe ich die html-Datei im Internet Explorer geöffnet und bin zur Fehlermeldung gesprungen:


Der Fehler befindet sich in Zeile 25. Es handelt sich um eine so genannte Arrow-Function. Diese Funktionen werden vom IE 11 nicht unterstützt.

Leider können Arrow-Functions nicht durch einen Polyfill ersetzt werden, da es sich hierbei nicht um eine fehlende Funktion, sondern um eine nicht akzeptierte Syntax handelt.

Nachdem wir jetzt wissen, dass ein Polyfill nicht funktionieren kann, bleibt als mögliche Lösung nur noch der Einsatz eines Transpilers. Dies bringt aus meiner Sicht jedoch weitreichende Nachteile mit sich, auf die ich hier nicht näher eingehen möchte.

Daher bleibt mir nur noch übrig, zu akzeptieren, dass der Einsatz von Chart.js in der Version 3 oder höher mit dem (aktuellen) Webbrowser-Steuerelement von Access nicht möglich ist.

Keine Kommentare: