Universal Code
Die Universal Code-Initiative ist Microsofts strategische Vorgabe, dass jede Business Central-Umgebung grundsätzlich SaaS-fähig sein muss. In der Praxis heißt das: Sämtliche Erweiterungen – unabhängig davon, ob sie von ISVs stammen oder kundenindividuell entwickelt wurden – müssen cloudfähig sein. Seit 2023 erhebt Microsoft für nicht-konforme Apps schrittweise zusätzliche Lizenzgebühren.
Unser Ziel ist es, dass unser gesamter Code diesen Vorgaben entspricht.
Target=Cloud
Ob eine App als cloudfähig gilt, bestimmt die Einstellung Target=Cloud in der zugehörigen app.json.
Steht dort der Wert OnPrem, werden seit Oktober 2022 zusätzliche Granules in der Business Central-Lizenz benötigt. Seit 2024 – bzw. seit 2023 für Anpassungen an der BaseApp – sind damit auch zusätzliche Lizenzgebühren verbunden.
Betroffener Code
Folgende Konstrukte verhindern die Cloudfähigkeit und müssen durch geeignete Alternativen ersetzt werden:
| Konstrukt | Problem |
|---|---|
| Dateioperationen | Direkter Zugriff auf das Server-Dateisystem ist in der Cloud nicht möglich. |
| .NET-Integration | Eigene oder externe .NET-Assemblies können nicht in SaaS-Umgebungen geladen werden. |
[OnPrem]-Funktionen |
AL-Funktionen mit dem Attribut [OnPrem] stehen in der Cloud nicht zur Verfügung. |
Technische Lösungen
Nachfolgend werden bewährte Lösungsansätze für häufige technische Fragestellungen beschrieben.
Dateiverarbeitung / SFTP
Benutzergesteuerte Verarbeitung
Interaktive Szenarien sind nicht betroffen: Anwender können weiterhin lokale Dateien von ihrem PC hochladen, die Business Central anschließend verarbeitet.
Automatisierte Verarbeitung
Hintergrundprozesse – etwa über die Aufgabenwarteschlange – haben keinen Zugriff auf lokale Dateien. Der Business Central-Standard sieht hierfür Azure Blob Storage als zentrales Austauschmedium vor. In KatarGo bzw. der TSO System App stehen die nötigen Objekte und Funktionen bereit, um diese Verarbeitung zu automatisieren. Weitere Informationen dazu gibt es hier: KatarGo - Dateitransfer Cloud
OnPrem-Alternative
Für OnPrem-Projekte haben wir einen lokalen Dienst entwickelt, der direkten Dateisystemzugriff bietet – ohne Azure Blob Storage. Die Architektur erlaubt einen späteren Wechsel auf Azure Blob Storage ohne größere Anpassungen.
Ausblick: Natives SFTP
Microsoft plant, mit BC28 native SFTP-Unterstützung in der System App bereitzustellen. Damit lassen sich SFTP-Server künftig direkt aus AL ansprechen.
.NET-Integration
Standard-Funktionalität über die System App
Viele gängige Aufgaben – Stringverarbeitung, Verschlüsselung, Streamverarbeitung u. v. m. – deckt Microsoft bereits über die System App ab. Vor einem eigenen Workaround sollte daher immer geprüft werden, ob eine passende Funktion dort schon existiert.
Eigene .NET-Assemblies ablösen
Selbst entwickelte .NET-Assemblies lassen sich nicht mehr direkt in AL einbinden. In solchen Fällen sollte zunächst geprüft werden, ob ein Redesign auf Basis der System-App-Funktionen möglich ist. Ist das nicht der Fall, bietet sich eine WebService-basierte Lösung an: Business Central ruft hierbei per HTTP-Request einen externen Dienst auf, der die benötigte .NET-Logik ausführt – beispielsweise über eine Azure Function.
Für OnPrem-Projekte kann der lokale Dienst, der bereits bei der Dateiverarbeitung zum Einsatz kommt, um die benötigte .NET-Funktionalität erweitert werden.
Base App [OnPrem]-Funktionen
Funktionen in der Base App oder System App, die Microsoft mit [OnPrem] markiert hat, stehen bei Target=Cloud nicht zur Verfügung – ihr Aufruf führt zu einem Kompilierfehler.
Besonders relevant ist das bei Upgrades: Wurden in einer früheren Version Funktionen genutzt, die Microsoft inzwischen als [OnPrem] gekennzeichnet hat, ist ein Redesign des betroffenen Codes erforderlich.