Table of Contents

API und Schnittstellenbeschreibungen

Schaubild: Funktionsweise und Aufbau der Azure Function im Zusammenhang mit RDS und BC

1. Zusammenfassung und Grundstruktur

  • Posteingang: Die Azure Function schreibt bei jedem empfangenen Event einen Eintrag in eine definierte Posteingangstabelle im RDS Portal. Dieser Eintrag enthält den Ereignis-Code und dient als Information, dass ein bestimmtes Event eingetreten ist.

  • Aufgabenwarteschlange: Zwischen RDS und Azure Function besteht eine Warteschlange, über die die Webhooks bzw. Events übermittelt werden. Die Azure Function liest diese Warteschlange regelmäßig (gemäß Einrichtung) aus und verarbeitet die dort abgelegten Nachrichten.

  • Leistungsumfang der Azure Function: Die Azure Function prüft die empfangenen Events gegen eine festgelegte Liste gültiger Codes (Datenentitäten), validiert diese und schreibt sie in die Posteingangstabelle. Sie signalisiert ausschließlich, dass ein To Do vorhanden ist – es findet kein direkter Datenaustausch oder Datenabgleich statt, sondern nur eine Event-Benachrichtigung.

  • Mehrfachinstallation und Datenbankverbindungen: Die Azure Function kann mit mehr als einer Business Central-Datenbank verbunden werden. In diesem Fall muss sie jedoch mehrfach installiert und konfiguriert werden, damit jede Datenbank separat bedient wird. Wichtig: Dies ist in Zusammenarbeit mit RDS zu erfolgen.

2. Woher weiß die Azure Function, welche Events gültig sind?

  • Feste Liste von Events (Datenentität): Es gibt eine zentrale Liste von gültigen Ereigniscodes, die in einer speziellen Einrichtungstabelle in Business Central hinterlegt ist. Diese Tabelle wird über eine API-Page bereitgestellt, über die die Azure Function diese Daten ausliest.

  • Erweiterung der Event-Liste: Die Liste kann nur durch individuelle Entwicklung erweitert werden.

    • Ein Administrator oder Berater kann dies nicht einfach über die Benutzeroberfläche ändern.

    • Änderungen erfordern direkten Eingriff in den Code oder die Datenstruktur von Business Central.

    • Wichtig: Wenn in einem Kundenprojekt neue Events hinzukommen, muss RDS entsprechend informiert werden, damit die Azure Function und das System weiterhin korrekt funktionieren.

3. Kommunikationsweg und Datenfluss

  • Keine direkten Daten: RDS sendet ausschließlich Webhooks mit Ereigniscodes. Keine personenbezogenen Daten oder Detailinformationen werden übertragen.

  • http-Requests: Der Transfer der geänderten/neuen Daten aus der RDS Datenbank (z. B. Kontaktdaten, Banktdaten, etc.) erfolgt ausschließlich über http-Requests zwischen RDS hin zu Business Central und umgekehrt (gemäß der WebHook). Business Central reagiert auf die empfangenen WebHooks, indem es gezielt Daten vom RDS Portal abfragt. Dies geschieht über http-Requests, die den oberen Kommunikationsweg nutzen.

  • Azure Function: Die Azure Function agiert lediglich als Signalgeber und Hinweisgeber:

    • Sie meldet, dass ein bestimmtes Ereignis eingetreten ist.

    • Die tatsächliche Verarbeitung und Reaktion auf diese Events erfolgt anschließend innerhalb von Business Central, basierend auf den Einträgen in der Posteingangstabelle.


RDS Proxy Infrastruktur Einrichtung

Die RDS Portal Extension setzt eine Bereitstellung und Einrichtung von Azure Komponenten durch die GOB-Infrastruktur voraus. Dazu ist eine Azure Subscription beim Kunden unumgänglich. Folgende Schritte müssen in Kooperation mit der GOB-Infrastruktur durchgeführt werden.

Azure Functions Bereitstellung

In der Azure Subscription des Kunden muss eine Azure Function bereitgestellt werden. Der Dienst soll mit folgenden Kennzahlen angelegt werden:

Einstellung Wert
Do you want to deploy code or container image? Code
Runtime stack .NET
Version 8 (LTS) Isolated
Operating System Windows
Hosting Consumption (Serverless)

Nach der Bereitstellung der Azure Ressource muss die aktuelle Version des RDS-Proxy deployed werden. Für das Deployment steht eine ZIP-Datei im Freigabe Verzeichnis zur Verfügung.

Unter Microsoft Learn findet sich eine Anleitung zur Bereitstellung einer Azure Function via ZIP-Deployment: Zip push deployment for Azure Functions | Microsoft Learn

Skript zum Deployen von ZIP-Packages

Import-Module Az.Websites

Update-AzConfig -EnableLoginByWam $false # Aufgrund von aktuellen Bug im AZ-Modul

Connect-AzAccount -Tenant "TenantID" -Subscription "SubscriptionID"

Publish-AzWebapp -ResourceGroupName <group-name> -Name <app-name> -ArchivePath <zip-file-path>

App-Registration Bereitstellung

Die App-Registration wird im SaaS benötigt, bei On-Premises ist sie optional.

Detaillierte Informationen zur Einrichtung einer App-Registration finden Sie in der Microsoft-Dokumentation: Using Service to Service Authentication - Business Central | Microsoft Learn

Die nachfolgenden Schritte zur Einrichtung in Business Central sind stets zu beachten. Auf On-Premises-Systemen ist die BC-Konfiguration entsprechend anzupassen.

Azure Functions Einrichtung

Folgende Einstellungen sind in der Azure Function zu setzen:

SETTINGS → ENVIRONMENT VARIABLES Beschreibung
Runtime:AuthenticationType Basic oder OAuth
abhängig vom gewählten Authentifizierungstyp
Basic:Username Benutzername des Business Central Servicebenutzer
nur in Kombination mit AuthenticationType: Basic
Basic:Password Passwort des Business Central Servicebenutzer
nur in Kombination mit AuthenticationType: Basic
OAuth:TenantId Tenant-ID des Kunden-Tenant
nur in Kombination mit AuthenticationType: OAuth
OAuth:ClientId Client-ID der angelegten App-Registration
nur in Kombination mit AuthenticationType: OAuth
OAuth:ClientSecret Client-Secret der angelegten App-Registration
nur in Kombination mit AuthenticationType: OAuth
OAuth:ApplicationUri SaaS: https://api.businesscentral.dynamics.com

On-Premises: In der App-Registrierung definierte AnwendungsUri
nur in Kombination mit AuthenticationType: OAuth
RdsInterfaceApi:ApiUri SaaS: https://api.businesscentral.dynamics.com/v2.0/[user domain name]/[environment name]/api

On-Premises: [host]:[port]/[instance]/api
RdsInterfaceApi:CompanyId BC-Company-ID
RdsInterfaceApi:Tenant (Optional) z. B. default