Einleitung – Business Central Page Scripting
Nach Updates und Anpassungen in Microsoft Business Central ist es wichtig sicherzustellen, dass alle Anwendungsfälle wie erwartet funktionieren bevor sie in die Produktivumgebung ausgespielt werden. Dazu kann man unter anderem vor Veröffentlichung den Anwendern die Möglichkeit bieten, mit dem System zu interagieren und zu prüfen, ob bestimmte Funktionen übersehen wurden oder Fehler enthalten. Dies wird häufig auch als User Acceptance Testing (UAT) bezeichnet und ist ein wesentlicher Bestandteil der Qualitätssicherung in der Softwareentwicklung.
Das Page Scripting Tool (auch Seitenskript-Tool) in Business Central bietet dazu eine innovative Lösung zur Aufzeichnung und Wiederholung von Interaktionen mit der Benutzeroberfläche (UI). Ob Öffnen von Seiten, Ausführung von Aktionen oder das Ausfüllen von Feldern – mit diesem Tool können wir die erforderlichen Schritte aufzeichnen und später automatisiert ausführen. Es erleichtert und beschleunigt den Testprozess, indem es die Notwendigkeit auf ein Minimum reduziert jedes Szenario manuell durchzugehen bzw. auszuführen.

Einen guten Überblick über die Funktionen und Anwendung finden wir auf den Microsoft Learn Seiten:
- Seitenskript-Tool im Client für Akzeptanztests verwenden | Microsoft Learn
- Use page scripting tool for acceptance testing (preview) – Business Central | Microsoft Learn
In diesem Artikel geht es jedoch nicht um die Anwendung des Page Scripting Tools sondern um die Organisation und Verwaltung der Scripte/Aufzeichnungen.
Oft gibt es nicht nur einen Tester sondern es sind mehrere Personen (Fachbereiche) in den UAT (Akzeptanztests) involviert, die untereinander die Tests organisieren und verwalten müssen. Daraus ergeben sich einige Fragen:
- Wie findet der Austausch der Scripte innerhalb des (Tester-) Teams statt?
- Wo werden die Dateien (YAML-) Scripte zentral abgelegt?
- Wo und wie kann ich zusätzliche Informationen zu einem Testfall erfassen?
- In welchem Testsystem kann ich die Scripte ausführen?
- Wie kann ich zu einem Testfall schnell & einfach Rückfragen stellen?
Ziel: Komfortable Verwaltung & Ausführung
Auf all diese Fragen versuchen wir mit den bestehenden Tools und Applikationen aus dem Microsoft 365 Ökosystem eine Lösung zu erstellen. Im konkreten werden wir lediglich anhand des Aufzeichnungslinks (ohne vorheriges Speichern der Aufzeichnung im Dateisystem) die relevanten Schrittabfolgen mit Power Automate extrahieren, zentral in einer SharePoint-Liste erfassen und allen Zugriffsberechtigten zur Verfügung stellen. In der SharePoint-Liste findet dann die Kollaboration, Austausch sowie die Ausführung bzw. Aufruf der Aufzeichnungen in verschiedenen Testsystemen statt.
Analyse des Business Central Aufzeichnungslinks
Auf den Microsoft Learn Seiten steht, dass der Link die vollständige Aufzeichnung und das Wiedergabeergebnis enthält. Analysieren wir daher zunächst den Link einer Aufzeichnung. Beispielhaft die Anlage einer neuen Zahlungsform in Business Central:
https://businesscentral.dynamics.com/1b11bb11-1bb1-99b9-b99b-00b00bb00bbb/EvBu/do?dc=0&company=CRONUS%20DE
#open-replaylog=H4sIAAAAAAAAA82Uy27CMBBF93zF_ACgLrqJIqRAaYVUUsSji24qE0-CVceObAfE39d2SkN4FCGhttl5ZnLnXE8ygu
QYwBtZ8VJkOpUqb2lDlAlaAIWSKeM23V_MRvFwNoNxFEdPwykMX6PnRTQfvcS2GgvtqttgtoUtFmTNMmLQhgCsVIZezD1tKEhmSyZkm6Mw
MEazklT7LEWdKFYYJkUA8ZcGGNlgQ7HXyGm19UpuhBfQslQJ7lqdb5RLSngAKeG6YlSlMCzHEQ1gSe-PYSZWCsKE-GOviRN2d3HYEA2eprPHyMRaflx7FXtQU0xrKvcWSSqogRRGSf4e48bnqkZz33QXa7gY-QKXAylqOzGWtYc98FQmpb4ht8IC7UDVN
_nddyplyKmLUzzGfnQcNa4rOsnLRFGav-FdE15WHQrCT128JYPQV_WqorBbnSy1_cAvm_v9YTzUDi7OpG9zK4VsaX
-LfzKbQ_ybjeii14RLjW3n60aGG6ADp-5FGn-wFT63lg73peejVy3M6
_bjzzh-S1YMnVZDZY7a2MkmUlEmstYnnrl9XJgGAAA&zip=1&base64=1
Die Aufzeichnung beginnt ab #open-replaylog= bis zum ersten &-Zeichen. Diesen kryptischen Teil müssen wir später mit Power Automate in ein lesbares Format (YAML) extrahieren.
Für die Analyse sind aber auch noch die zwei anderen Parameter relevant: zip=1 und base64=1. Der erste Parameter zip gibt an, dass es sich um ein komprimierte Zeichenfolge/Format handelt und der zweite Parameter base64 ist die angewendete Kodierung. Nach einiger Recherche und Analyse mit KI/ChatGPT kommen wir zum Schluss, dass es sich bei der (kryptischen) Zeichenfolge um ein komprimiertes GZip (gz) Format handelt.
Die GZip Dekomprimierung der Zeichenfolge mit Online-Tools wie z.B. Gzip to Text Decompress using gzip, deflate and brotli algoithms (multiutil.com) schlagen jedoch fehl: Die Ausgabe ist leider nicht leserlich bzw. ist kein YAML-Format wie wir es mit Speichern der Aufzeichnung direkt in Business Central erhalten würden.
Die weitere Analyse ergibt, dass bestimmte Zeichen in der Base64 kodierten Zeichenfolge ersetzt bzw. entfernt wurden. Wir verwenden Repair Base64 | Tools | Base64 und ermitteln die betroffenen Zeichen: +, / wurden ersetzt und und das = Zeichen entfernt, gut ersichtlich an der folgenden Abbildung:

Mit den neuen Erkenntnissen kopieren wir nun die „reparierte“ Base64 Zeichenfolge und versuchen erneut mit einem Online Tool die GZip Dekomprimierung. Die Ausgabe kann sich jetzt sehen lassen – wir haben ein leserliches YAML Format.

Fassen wir kurz zusammen:
- Die Aufzeichnung in der URL ist im GZip (gz) Format
- Es wurden einige Zeichen in der Base64 Zeichenfolge innerhalb der URL ersetzt oder entfernt: +, /, =
- Erfolgreiche Ausgabe im YAML Format nach angepasster GZip Dekomprimierung
Automatisierung mit Power Automate
Den ersten Schritt haben wir geschafft, in dem wir manuell die Aufzeichnung anhand der Page Scripting URL in das Ziel-Format YAML konvertiert haben. Jetzt ist die Automatisierung mit Power Automate an der Reihe.
Zerlegen der Business Central URL in ihre einzelnen Bestandteile
Dazu splitten wir die vollständige Page Scripting Aufzeichnungs-URL in Ihre einzelnen Bestandteile:
- Basis URL
- Lesezeichen und Mandant
- Page Scripting Information
Dazu nutzen wir weitestgehend zwei Power Automate Funktionen für String-Operationen:
- indexOf – Gibt die Anfangsposition oder den Anfangsindexwert für eine Teilzeichenfolge zurück.
Referenzhandbuch für Ausdrucksfunktion: indexOf – Azure Logic Apps | Microsoft Learn - slice – Gibt durch die Angabe der Anfangs- oder Endposition bzw. eines entsprechenden Werts eine Teilzeichenfolge zurück
Referenzhandbuch für Ausdrucksfunktion: slice – Azure Logic Apps | Microsoft Learn
Ein beispielhafter Auszug aus dem Flow, um die Page Scripting Aufzeichnung aus der URL zu ermitteln:
slice(
outputs('Business_Central_Page_Scripting_URL')
, add(indexOf(outputs('Business_Central_Page_Scripting_URL'), 'open-replaylog='), 15)
, indexOf(outputs('Business_Central_Page_Scripting_URL'), '&zip=')
)
Im Flow sieht es dann wie folgt aus:

Anpassen der Base64 Zeichenfolge (Business Central Page Scripting Aufzeichnung)
Im nächsten Schritt „reparieren“ wir die Base64 Zeichenfolge. Die notwendigen Schritte haben wir bereits im Abschnitt „Analyse des Aufzeichnungslinks“ ermittelt. D.h. wir ersetzten „-“ mit einem „+“ und „_“ mit einem „/“. Danach fügen wir noch die notwendigen „=“ Zeichen am Ende des Strings hinzu.
Die Flow-Schritte im Detail:

GZip Dekomprimierung mit Power Automate
Power Automate bietet out of the box keine integrierten GZip Funktionen an wie zum Beispiel eine GZip Dekomprierung. Da wir keine Drittanbieter-Konnektoren verwenden möchten, erstellen wir unseren eigenen benutzerdefinierten Konnektor (custom connector). Bei der Erstellung orientieren wir uns dabei an folgendem YouTube-Video:
Unser C# Code (erstellt mit Hilfe KI/GPT) für den benutzerdefinierten Konnektor um GZip zu dekomprimieren, sieht wie folgt aus:
public class Script: ScriptBase{
public override async Task<HttpResponseMessage> ExecuteAsync(){
var response = new HttpResponseMessage();
var contentAsString = await this.Context.Request.Content.ReadAsStringAsync().ConfigureAwait(false);
var contentAsJson = JObject.Parse(contentAsString);
string compressedBase64String = (string)contentAsJson["input"];
string decompressedText = DecompressGZipBase64String(compressedBase64String);
JObject output = new JObject
{
["GZipCompressed"] = compressedBase64String,
["GZipDecompressed"] = decompressedText,
};
response = new HttpResponseMessage(HttpStatusCode.OK);
response.Content = CreateJsonContent(output.ToString());
return response;
}
private string DecompressGZipBase64String(string compressedBase64String)
{
byte[] compressedBytes = Convert.FromBase64String(compressedBase64String);
using (var inputStream = new MemoryStream(compressedBytes))
using (var gzipStream = new GZipStream(inputStream, CompressionMode.Decompress))
using (var outputStream = new MemoryStream())
{
gzipStream.CopyTo(outputStream);
return Encoding.UTF8.GetString(outputStream.ToArray());
}
}
}
Nachdem wir den Konnektor zur Dekomprimierung von GZip erstellt haben, steht uns der benutzerdefinierte Konnektor in Power Automate zur Verfügung:

Im Flow sieht die Anwendung dann folgendermaßen aus:

Wenn wir die bisherigen Schritte testweise ausführen, sieht die Ausgabe sehr gut aus:

Fassen wir auch diesen Abschnitt kurz zusammen:
- Mit Power Automate haben wir die URL in ihre einzelnen Bestandteile aufgeteilt
- Wir haben die Base64 Zeichenfolge mit der Page Scripting Aufzeichnung korrigiert/angepasst.
- Wir haben einen benutzerdefinierten Konnektor erstellt, der eine GZip Base64 Zeichenfolge dekomprimiert
- Mit der GZip Dekomprimierung haben wir die Page Scripting Aufzeichnung in das Zielformat (YAML) konvertiert
Verwalten der Page Scripting Aufzeichnungen mit Microsoft Lists
In diesem Abschnitt befassen wir uns mit der Verwaltung der Page Scripting Aufzeichnungen. Wenn wir später eine Page Scripting URL per Formular erfassen, müssen in der Liste die Informationen korrekt zugeordnet werden und abrufbar sein. Dazu erstellen wir eine neue Liste z.B. „Business Central Page Scripting Manager“ und legen die erforderlichen/gewünschten Spalten an.
Spaltenbezeichnung | Typ | Anmerkung |
Titel* | Eine Textzeile | Bezeichnung des UAT Testfalls |
Page Scripting Link* | Mehrere Textzeilen | Vollständige URL aus Business Central |
Page Scripting Link wo Base URL* | Mehrere Textzeilen | URL ohne die Basis URL |
Page Scripting Sequence* | Mehrere Textzeilen | Konvertierte Zeichenfolge, Page Scripting Aufzeichnung im YAML Format |
ActionBar* | Eine Textzeile | Aktionsleiste, um Script in anderem System auszuführen, Download etc. |
JIRA | Eine Textzeile | Angabe einer JIRA Vorgangsnummer |
DevOps | Eine Textzeile | Azure DevOps work item Nummer |
Keywords | Mehrere Textzeilen | Schlagwörter |
Nach Anlage der Liste und der Spalten sieht unsere Liste von der Struktur her folgendermaßen aus:

ActionBar: Spaltenformatierung in SharePoint-Listen
In der Spalte „ActionBar“ sehen wir einige Icons/Schaltflächen, doch was hat es damit auf sich?
Nun, hier sehen wir ein praktisches Beispiel der erweiterten Spaltenformatierung in SharePoint-Listen. Die erweiterte Spaltenformatierung bietet uns viele Möglichkeiten, um die Übersichtlichkeit und Lesbarkeit von Daten in SharePoint-Listen zu verbessern und wichtige Informationen hervorzuheben.
In unserem Fall erstellen wir mit der Spaltenformatierung unsere Aktionsleiste, mit der wir anschließend verschiedene Links aufrufen können:
- Aufruf des Test-Systems inkl. Page Scripting Aufzeichnung zur direkten Ausführung
- Aufruf des QA-Systems inkl. Page Scripting Aufzeichnung zur direkten Ausführung
- Vorgang in JIRA aufrufen
- Teams Call zu Element erstellen
- Download der Page Scripting Aufzeichnung im YAML Format
Eine sehr flexible Angelegenheit, da wir beim Erstellen der Links auf die Inhalte der bestehenden Spalten in der SharePoint-Liste zurückgreifen und verwenden können. Für die erweiterte Spaltenformatierung in SharePoint wird hauptsächlich JSON verwendet, beispielhaft:
{
"$schema": "https://developer.microsoft.com/json-schemas/sp/v2/column-formatting.schema.json",
"children": [
{
"attributes": {
"class": "ms-fontColor-themePrimary ms-fontColor-themeDarker--hover",
"href": {
"operands": [
"https://businesscentral.dynamics.com/9a99aa99-9aa9-99a9-a99a-99a99aa99aaa/DEV/",
"[$PageScriptingLinkwoBaseURL]"
],
"operator": "+"
},
"iconName": "MasterDatabase",
"target": "_blank",
"title": "Page Scripting Aufzeichnung in DEV Testsystem aufrufen"
},
"elmType": "a",
"style": {
"padding": "0 2px",
"text-decoration": "none"
}
}
],
"elmType": "div",
"style": {
"font-size": "24px"
}
}
Drop Zone – SharePoint Lists Formular zur Erfassung der Business Central Page Scripting URL
Wir möchten es uns und unseren Anwendern/Testern so angenehm wie möglich gestalten. Statt über die reguläre Liste einen neuen Datensatz anzulegen, erstellen wir ein Formular. Denn Formulare ermöglichen uns (den Benutzern), Daten einfach und intuitiv einzugeben – ohne die eigentliche Liste sehen zu müssen. Bestimmte Felder können ein- oder ausgeblendet, umsortiert und formatiert werden.
Wir erstellen somit das Formular „Drop Zone – Business Central Page Scripting Link„, um lediglich die wesentlichen Felder abzufragen bzw. zu erfassen. Alle anderen Felder werden später automatisch per Power Automate Flow befüllt oder haben eine andere Funktion.

Nach Erstellen des Formulars können wir den Link abrufen und das Formular zur Verwendung bereitstellen:

SharePoint Listenelement mit Power Automate aktualisieren
Anschließend passen wir den bestehenden Power Automate Flow an und legen den Trigger (das auslösende Ereignis) fest. Unser Flow soll auslösen, wenn über das SharePoint-Liste Formular ein neuer Listeneintrag erfasst wird. Dazu wählen wir den SharePoint-Trigger „Wenn ein Element erstellt wird“ aus und vervollständigen die Angaben, so dass der Trigger auf unsere SharePoint-Liste verweist.

Am Ende des Flows aktualisieren wir unser SharePoint Listenelement mit der Page Scripting Aufzeichnung im GZip/Base64 als auch im YAML Format.
Zusätzlich erstellen wir eine Datei, die die Page Scripting Aufzeichnung im YAML Format enthält und ordnen sie dem SharePoint Listenelement zu. Die Datei bzw. der Inhalt entspricht genau dem Format, als wenn wir die Date direkt in Business Central speichern würden.

Fassen wir die Aktivitäten/Aktionen im Flow kurz zusammen:
- Der Flow wird ausgelöst, wenn ein SharePoint Listenelement erstellt wird (per Formular)
- Die übergebene Page Scripting URL wird in ihre einzelnen Bestandteile zerlegt
- Die GZip Base64 Zeichenfolge wird angepasst/repariert
- Die GZIP Zeichenfolge im Base64 Format wird mit einem benutzerdefinierten Konnektor dekomprimiert
- SharePoint Listenelement wird mit Page Scripting Aufzeichnung (YAML Format) aktualisiert
- Datei mit Page Scripting Aufzeichnung im YAML Format wird erstellt und dem SharePoint Listenelement zugeordnet

Zusammenfassung (Video)
Genug der der trockenen Theorie, schauen wir uns die wesentlichen Punkte in einem Video an.
Anwendungsfälle & Ausblick
Betrachten wir zum Abschluss noch einige Anwendungsfälle:
- In der Softwareentwicklung verwenden wir unser „Standard“-Produkt, welches wird dann im Rahmen des Projektgeschäfts individualisieren. Kommt es bei der Qualitätssicherung zu Unstimmigkeiten, stellen wir uns oft die Frage, ob es sich um einen Fehler im Standard oder in der individuellen Entwicklung handelt.
Die Kombination aus Page Scripting Aufzeichnungen und der Verwaltung in SharePoint Lists gibt uns schnell Aufschluss auf die Frage. Denn wir haben nun die Möglichkeit ein und dieselbe Page Scripting Aufzeichnung mit nur wenigen Klicks in den gewünschten Systemen auszuführen. Kein lästiges/manuelles Anpassen der URL oder Download der Datei und Upload im Ziel-Testsystem. - Im Projekt melden unsere Kunden Unstimmigkeiten per JIRA und im Idealfall zusammen mit den dazugehörigen Reprosteps an. Auch hier kann uns die Kombination aus Page Scripting Aufzeichnung und der Verwaltung in SharePoint Lists unterstützen. Statt uns die Reprosteps zur Verfügung zu stellen, wird uns im JIRA Vorgang die Page Scripting URL durch den Kunden zur Verfügung gestellt. Mit Erstellen eines JIRA Vorgangs wird ein Power Automate Flow ausgeführt, der den Listeneintrag in unserem „Business Central Page Scripting Manager“ samt JIRA-Vorgangsnummer erstellt. Unser Tester (Entwickler/Consultant) führt dann das Script mit wenigen Klicks in unseren internen System aus und kann unserem Kunden schnell Feedback geben, z.B. ob sich der Fall nachstellen lässt.
- Der Flow könnte erweitert werden, z.B. mit ChatGPT, die eine Zusammenfassung der einzelnen Schritte erstellt und daraus folgend eine Art Dokumentation.