<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Nutzer on dsyr.DataBridge</title><link>https://databridge.docs.dsyr.de/themen/nutzer/</link><description>Recent content in Nutzer on dsyr.DataBridge</description><generator>Hugo</generator><language>de</language><atom:link href="https://databridge.docs.dsyr.de/themen/nutzer/index.xml" rel="self" type="application/rss+xml"/><item><title>D365BC — Business Central</title><link>https://databridge.docs.dsyr.de/docs/konnektoren/d365bc/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://databridge.docs.dsyr.de/docs/konnektoren/d365bc/</guid><description>&lt;p&gt;Der D365BC-Konnektor verbindet die DataBridge mit &lt;strong&gt;Microsoft Dynamics 365 Business Central&lt;/strong&gt;&#10;über die OData-v4-REST-API (API-Version 2.0). Er unterstützt sowohl Cloud-Umgebungen&#10;(OAuth2) als auch OnPremise-Installationen (Basic Auth).&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Eigenschaft&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Wert&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Lesen&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;✅ unterstützt&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Schreiben&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;✅ unterstützt&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Job-Filter&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;✅ wird als OData-&lt;code&gt;$filter&lt;/code&gt; an BC übergeben&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Status&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Freigegeben&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Getestete Mindestversion&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Business Central v17.0 (Oktober 2020)&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;div class="alert alert-info" role="alert"&gt;&lt;div class="h4 alert-heading" role="heading"&gt;Die Mindestversion wird nicht geprüft&lt;/div&gt;&#10;&lt;p&gt;Die Angabe zur Mindestversion beschreibt den getesteten Stand. Die DataBridge fragt die&#10;Version von Business Central &lt;strong&gt;nicht&lt;/strong&gt; ab und lehnt ältere Stände nicht ab. Ob eine ältere&#10;Installation funktioniert, hängt allein davon ab, ob sie die verwendete API-Version 2.0&#10;und die im Mapping genannten Felder bereitstellt.&lt;/p&gt;&#10;&lt;/div&gt;</description></item><item><title>Funktionsweise</title><link>https://databridge.docs.dsyr.de/docs/mcp-server/funktionsweise/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://databridge.docs.dsyr.de/docs/mcp-server/funktionsweise/</guid><description>&lt;h2 id="endpunkt"&gt;Endpunkt&lt;/h2&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Function&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;Mcp&lt;/code&gt; (&lt;code&gt;DataBridge/Functions/McpApi.cs&lt;/code&gt;)&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Route&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;POST /api/mcp&lt;/code&gt; (JSON-RPC-Austausch); &lt;code&gt;GET /api/mcp&lt;/code&gt; liefert bewusst &lt;code&gt;405&lt;/code&gt; — siehe &lt;a href="https://databridge.docs.dsyr.de/docs/mcp-server/funktionsweise/#bekannte-einschr%c3%a4nkung-get-auf-apimcp"&gt;Bekannte Einschränkung&lt;/a&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Auth-Level&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;Function&lt;/code&gt; (Function Key als &lt;code&gt;?code=&lt;/code&gt;-Query-Parameter)&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Protokoll&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;MCP über Streamable HTTP, &lt;strong&gt;stateless&lt;/strong&gt; — jede POST-Anfrage ist ein eigenständiger JSON-RPC-Austausch, es gibt keine langlebige Server-Session&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;p&gt;Der Server ist damit direkt an einer laufenden Function App (lokal oder in Azure) ansprechbar,&#10;ohne eigenen Prozess oder zusätzliche Infrastruktur. Da die Authentifizierung über den normalen&#10;Azure-Functions-Mechanismus läuft (Function Key), lässt sich der Server ohne zusätzliche&#10;Identity-Provider-Konfiguration einrichten — der Key kann als Query-Parameter oder als Header&#10;übergeben werden, je nachdem, was der jeweilige Client unterstützt (siehe &lt;a href="../nutzung/"&gt;Nutzung&lt;/a&gt;).&lt;/p&gt;</description></item><item><title>Logging &amp; Telemetrie</title><link>https://databridge.docs.dsyr.de/docs/betrieb/logging/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://databridge.docs.dsyr.de/docs/betrieb/logging/</guid><description>&lt;p&gt;Die DataBridge steuert ihr Telemetrie-Volumen über &lt;strong&gt;zwei voneinander unabhängige&#10;Mechanismen&lt;/strong&gt;:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;Gepuffertes Logging&lt;/strong&gt; — Log-Einträge werden pro Funktionsausführung gesammelt und&#10;erst am Ende des Laufs, abhängig vom Ergebnis, selektiv gesendet.&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Sampling von Abhängigkeiten&lt;/strong&gt; — ausgehende Aufrufe an Quell- und Zielsysteme werden&#10;nur anteilig gesendet, sofern sie erfolgreich und schnell waren.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Der zweite Mechanismus ist der eigentliche Kostenhebel: In einer Volumenanalyse über&#10;90 Tage entfielen rund &lt;strong&gt;78 %&lt;/strong&gt; des gesamten Datenvolumens auf Abhängigkeiten und nur ein&#10;Bruchteil auf Log-Einträge.&lt;/p&gt;</description></item><item><title>Metriken</title><link>https://databridge.docs.dsyr.de/docs/betrieb/logging/metriken/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://databridge.docs.dsyr.de/docs/betrieb/logging/metriken/</guid><description>&lt;p&gt;Neben Traces und Requests sendet die dsyr.DataBridge eigene &lt;strong&gt;Custom Metrics&lt;/strong&gt; an&#10;Application Insights. Metriken sind numerische Zeitreihen mit Dimensionen — sie eignen&#10;sich für Dashboards, Trend-Analysen und Metric Alerts, ohne dass dafür Log-Einträge&#10;durchsucht werden müssen.&lt;/p&gt;&#10;&lt;p&gt;Die Metriken werden über &lt;code&gt;TelemetryClient.GetMetric()&lt;/code&gt; &lt;strong&gt;vorab aggregiert&lt;/strong&gt;: Das SDK&#10;sammelt die Werte lokal in 1-Minuten-Intervallen und sendet pro Intervall und&#10;Dimensionskombination einen aggregierten Datenpunkt (Summe, Anzahl, Min, Max).&lt;/p&gt;&#10;&lt;div class="alert alert-info" role="alert"&gt;&lt;div class="h4 alert-heading" role="heading"&gt;Metriken unterliegen keinem Sampling&lt;/div&gt;&#10;&lt;p&gt;Weder das gepufferte Logging noch das Dependency-Sampling noch das&#10;Application-Insights-Sampling wirken auf Custom Metrics. Für belastbare &lt;strong&gt;Mengenangaben&lt;/strong&gt;&#10;sind sie deshalb die einzige verlässliche Quelle.&lt;/p&gt;&#10;&lt;/div&gt;</description></item><item><title>Überblick</title><link>https://databridge.docs.dsyr.de/docs/ueberblick/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://databridge.docs.dsyr.de/docs/ueberblick/</guid><description>&lt;p&gt;Dieses Kapitel erklärt die dsyr.DataBridge auf zwei Ebenen: konzeptuell für alle, die&#10;verstehen wollen &lt;strong&gt;wie&lt;/strong&gt; die Synchronisation abläuft — und technisch für diejenigen, die&#10;den genauen &lt;strong&gt;Aufbau&lt;/strong&gt; der Komponenten kennen möchten.&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Seite&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Zielgruppe&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Inhalt&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://databridge.docs.dsyr.de/docs/ueberblick/wie-es-funktioniert/"&gt;Wie es funktioniert&lt;/a&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Alle Nutzer&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Datenfluss in einfachen Schritten&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://databridge.docs.dsyr.de/docs/ueberblick/architektur/"&gt;Architektur&lt;/a&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Techniker, Administratoren&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Azure-Komponenten, Services, Queues&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;</description></item><item><title>Release v2.3</title><link>https://databridge.docs.dsyr.de/docs/versionen/v2.3/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://databridge.docs.dsyr.de/docs/versionen/v2.3/</guid><description>&lt;h2 id="was-ist-neu"&gt;Was ist neu&lt;/h2&gt;&#10;&lt;h3 id="neue-funktionen"&gt;Neue Funktionen&lt;/h3&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;Metadaten-Abfrage für die SQL-Connectoren&lt;/strong&gt;: Die MCP-Tools &lt;code&gt;list_connector_tables&lt;/code&gt; und &lt;code&gt;get_connector_table_schema&lt;/code&gt; funktionieren jetzt auch für &lt;strong&gt;MSSQL, MySQL, Oracle und PostgreSQL&lt;/strong&gt;. Bisher war das nur für BC, NAV, CE (Dataverse) und OpenAPI möglich, bei SQL-Verbindungen brach der Aufruf mit einer Fehlermeldung ab. Geliefert werden Spaltenname, Typ, Nullable, maximale Länge, bei Dezimalspalten Precision und Scale sowie der Primary Key — direkt aus dem Datenbank-Katalog (&lt;code&gt;INFORMATION_SCHEMA&lt;/code&gt;, bei Oracle &lt;code&gt;USER_*&lt;/code&gt;/&lt;code&gt;ALL_*&lt;/code&gt;-Views).&lt;/p&gt;&#10;&lt;p&gt;Über &lt;code&gt;apiPath&lt;/code&gt; wird das &lt;strong&gt;Schema&lt;/strong&gt; gewählt (MySQL: die &lt;strong&gt;Datenbank&lt;/strong&gt;, Oracle: der Owner). Ohne Angabe gilt das Standard-Schema der Verbindung, sodass gleichnamige Tabellen in verschiedenen Schemas (z. B. &lt;code&gt;dbo.Customers&lt;/code&gt; / &lt;code&gt;archive.Customers&lt;/code&gt;) nicht vermischt werden. Die Metadaten werden zwischengespeichert; Schemaänderungen an der Datenbank werden erst nach einem Neustart der Function App sichtbar. Details: &lt;a href="https://databridge.docs.dsyr.de/docs/mcp-server/operationen/"&gt;MCP-Server → Operationen&lt;/a&gt;.&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;Genaue .NET-Datentypen je Datenbank&lt;/strong&gt;: Die Spaltentypen werden je Datenbank passend abgebildet — z. B. &lt;code&gt;date&lt;/code&gt; als &lt;code&gt;DateOnly&lt;/code&gt;, &lt;code&gt;time&lt;/code&gt; als &lt;code&gt;TimeSpan&lt;/code&gt;, Spalten mit Zeitzone als &lt;code&gt;DateTimeOffset&lt;/code&gt;, Binärspalten als &lt;code&gt;Byte[]&lt;/code&gt;, MySQL &lt;code&gt;BOOLEAN&lt;/code&gt; (&lt;code&gt;tinyint(1)&lt;/code&gt;) als &lt;code&gt;Boolean&lt;/code&gt; und Oracle &lt;code&gt;NUMBER(p,0)&lt;/code&gt; je nach Stellenzahl als &lt;code&gt;Int16&lt;/code&gt;/&lt;code&gt;Int32&lt;/code&gt;/&lt;code&gt;Int64&lt;/code&gt;. Die vollständige Übersicht steht unter &lt;a href="https://databridge.docs.dsyr.de/docs/mcp-server/operationen/#sql-connectoren-datentypen"&gt;MCP-Server → Operationen&lt;/a&gt;.&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;Managed Identity für D365CE (Dataverse)&lt;/strong&gt;: Die Verbindung kann statt über einen Connection-String mit Secret direkt über die Managed Identity der Function App aufgebaut werden. Dazu &lt;code&gt;url&lt;/code&gt; (und optional &lt;code&gt;clientid&lt;/code&gt; für eine benutzer-zugewiesene Identity) in der Connection angeben. Ein vorhandener &lt;code&gt;connectionstring&lt;/code&gt; hat weiterhin Vorrang. Siehe &lt;a href="https://databridge.docs.dsyr.de/docs/konnektoren/d365ce/"&gt;D365CE&lt;/a&gt;.&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;Managed Identity für D365BC (Cloud)&lt;/strong&gt;: Neue Authentifizierungsart &lt;code&gt;ManagedIdentity&lt;/code&gt; für HTTP-Konnektoren. Ohne &lt;code&gt;clientId&lt;/code&gt; wird die system-zugewiesene, mit &lt;code&gt;clientId&lt;/code&gt; die benutzer-zugewiesene Identity genutzt. Der Token wird automatisch erneuert, bevor er abläuft, und mit dem &lt;code&gt;scope&lt;/code&gt; der Connection angefordert. Siehe &lt;a href="https://databridge.docs.dsyr.de/docs/konnektoren/d365bc/"&gt;D365BC&lt;/a&gt;.&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;Neuer Verbindungsparameter &lt;code&gt;authmethod&lt;/code&gt;&lt;/strong&gt;: Erlaubt es, die Authentifizierungsmethode ausdrücklich festzulegen (&lt;code&gt;BasicAuthentication&lt;/code&gt;, &lt;code&gt;OAuth2&lt;/code&gt;, &lt;code&gt;APIKey&lt;/code&gt;, &lt;code&gt;ManagedIdentity&lt;/code&gt;). Ohne Angabe bleibt das bisherige Verhalten unverändert. &lt;code&gt;ManagedIdentity&lt;/code&gt; wird &lt;strong&gt;nie&lt;/strong&gt; automatisch aus fehlenden Zugangsdaten abgeleitet, damit eine unvollständige Connection weiterhin sofort mit einem klaren Fehler abbricht. Siehe &lt;a href="https://databridge.docs.dsyr.de/docs/konfiguration/verbindungen/"&gt;Verbindungen&lt;/a&gt;.&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;</description></item><item><title>Verbindungen (connections)</title><link>https://databridge.docs.dsyr.de/docs/konfiguration/verbindungen/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://databridge.docs.dsyr.de/docs/konfiguration/verbindungen/</guid><description>&lt;p&gt;Die Tabelle &lt;code&gt;connections&lt;/code&gt; ist die Grundlage jeder DataBridge-Konfiguration. Sie enthält&#10;die Zugangsdaten zu allen Systemen, mit denen die DataBridge kommuniziert — sowohl&#10;Quell- als auch Zielsysteme.&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="tabellenstruktur"&gt;Tabellenstruktur&lt;/h2&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Spalte&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Wert&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Beschreibung&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;PartitionKey&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;connection&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Muss immer &lt;code&gt;connection&lt;/code&gt; lauten&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;RowKey&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;frei wählbar&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Eindeutiger Name dieser Verbindung. Wird in der &lt;code&gt;jobs&lt;/code&gt;-Tabelle als Referenz verwendet.&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Timestamp&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;automatisch&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Systemseitig gesetzt, nicht bearbeitbar&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Type&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Connector-Typ&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Gibt an, um welches System es sich handelt (siehe Tabelle unten)&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Json&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;JSON-Objekt&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;System-spezifische Verbindungsparameter (unterscheidet sich je nach &lt;code&gt;Type&lt;/code&gt;)&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;div class="alert alert-warning" role="alert"&gt;&lt;div class="h4 alert-heading" role="heading"&gt;PartitionKey ist nicht frei wählbar&lt;/div&gt;&#10;&lt;p&gt;Die DataBridge liest die Tabelle ausschließlich mit dem Filter&#10;&lt;code&gt;PartitionKey eq 'connection'&lt;/code&gt;. Zeilen mit einem abweichenden PartitionKey werden &lt;strong&gt;ohne&#10;Fehlermeldung und ohne Warnung ignoriert&lt;/strong&gt; — die Verbindung existiert dann für die&#10;DataBridge nicht, und jeder Job, der sie referenziert, wird als unvollständig verworfen.&lt;/p&gt;&#10;&lt;/div&gt;</description></item><item><title>Voraussetzungen</title><link>https://databridge.docs.dsyr.de/docs/einrichtung/voraussetzungen/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://databridge.docs.dsyr.de/docs/einrichtung/voraussetzungen/</guid><description>&lt;p&gt;Bevor die DataBridge installiert werden kann, müssen die folgenden Voraussetzungen&#10;in Azure, Dataverse und Business Central erfüllt sein.&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="azure-abonnement"&gt;Azure-Abonnement&lt;/h2&gt;&#10;&lt;p&gt;Ein aktives Azure-Abonnement ist Pflicht. Im Abonnement müssen die folgenden&#10;&lt;strong&gt;Resource Provider&lt;/strong&gt; registriert sein:&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Provider&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Zweck&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th style="text-align: center"&gt;Pflicht&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;Microsoft.Insights&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Application Insights&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: center"&gt;✅&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;Microsoft.OperationalInsights&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Log Analytics&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: center"&gt;✅&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;Microsoft.ServiceBus&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Service Bus Namespace&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: center"&gt;✅&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;Microsoft.Storage&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Table Storage, Blob Storage&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: center"&gt;✅&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;Microsoft.Web&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Azure Function App&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: center"&gt;✅&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;Microsoft.Dashboard&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Grafana-Dashboard in Application Insights&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: center"&gt;✅&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;Microsoft.KeyVault&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Sichere Speicherung von Connection Strings&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: center"&gt;optional&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;Microsoft.Relay&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Hybrid Connections (OnPremise-Anbindung)&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: center"&gt;optional&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;Microsoft.App&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Container Apps&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: center"&gt;veraltet / deprecated&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;p&gt;Provider können im Azure Portal unter &lt;strong&gt;Abonnement → Ressourcenanbieter&lt;/strong&gt; aktiviert werden.&lt;/p&gt;</description></item><item><title>Wie es funktioniert</title><link>https://databridge.docs.dsyr.de/docs/ueberblick/wie-es-funktioniert/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://databridge.docs.dsyr.de/docs/ueberblick/wie-es-funktioniert/</guid><description>&lt;h2 id="das-grundprinzip"&gt;Das Grundprinzip&lt;/h2&gt;&#10;&lt;p&gt;Die dsyr.DataBridge arbeitet wie ein &lt;strong&gt;kontinuierlicher Datenstrom&lt;/strong&gt; zwischen zwei Systemen.&#10;Sie fragt regelmäßig: &lt;em&gt;„Was hat sich seit dem letzten Mal geändert?&amp;quot;&lt;/em&gt; — und überträgt&#10;genau diese Änderungen ins Zielsystem. Nichts mehr, nichts weniger.&lt;/p&gt;&#10;&lt;p&gt;Kein manueller Export. Kein Doppelpflegen. Keine Vollsynchronisation, die alles neu&#10;schreibt. Nur die Differenz, automatisch, im Minutentakt.&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="der-datenfluss-in-fünf-schritten"&gt;Der Datenfluss in fünf Schritten&lt;/h2&gt;&#10;&lt;pre class="mermaid"&gt;flowchart LR&#10; A([Quelldaten&amp;lt;br/&amp;gt;ändern sich]) --&amp;gt;|&amp;#34;alle 15 Sekunden&amp;lt;br/&amp;gt;prüfen&amp;#34;| B[DataBridge&amp;lt;br/&amp;gt;erkennt Änderung]&#10; B --&amp;gt;|&amp;#34;Datensätze&amp;lt;br/&amp;gt;puffern&amp;#34;| C[(Service Bus&amp;lt;br/&amp;gt;Queue)]&#10; C --&amp;gt;|&amp;#34;Nachricht&amp;lt;br/&amp;gt;verarbeiten&amp;#34;| D[Felder&amp;lt;br/&amp;gt;mappen &amp;amp; wandeln]&#10; D --&amp;gt;|&amp;#34;schreiben&amp;#34;| E([Zielsystem&amp;lt;br/&amp;gt;aktualisiert])&#10; E --&amp;gt;|&amp;#34;Stand merken&amp;#34;| F[(Watermark&amp;lt;br/&amp;gt;gespeichert)]&#10; F -.-&amp;gt;|&amp;#34;nächster Lauf&amp;lt;br/&amp;gt;startet hier&amp;#34;| B&#10;&#10; style A fill:#e8f5f1,stroke:#18b28d,color:#111111&#10; style E fill:#e8f5f1,stroke:#18b28d,color:#111111&#10; style C fill:#fff3e0,stroke:#f57c00,color:#111111&#10; style F fill:#e3f2fd,stroke:#1565c0,color:#111111&lt;/pre&gt;&#10;&lt;h3 id="schritt-1--änderungen-erkennen"&gt;Schritt 1 — Änderungen erkennen&lt;/h3&gt;&#10;&lt;p&gt;Alle 15 Sekunden (konfigurierbar über &lt;code&gt;GetChangesTimerExpression&lt;/code&gt;) startet ein Timer. Die DataBridge fragt das Quellsystem:&#10;&lt;em&gt;„Gib mir alle Datensätze, die seit meinem letzten Stand geändert wurden.&amp;quot;&lt;/em&gt;&lt;/p&gt;</description></item><item><title>Technische Architektur</title><link>https://databridge.docs.dsyr.de/docs/ueberblick/architektur/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://databridge.docs.dsyr.de/docs/ueberblick/architektur/</guid><description>&lt;div class="alert alert-info" role="alert"&gt;&lt;div class="h4 alert-heading" role="heading"&gt;Zielgruppe&lt;/div&gt;&#10;&lt;p&gt;Diese Seite richtet sich an &lt;strong&gt;Administratoren und technische Nutzer&lt;/strong&gt;, die den internen&#10;Aufbau der DataBridge verstehen oder Probleme diagnostizieren möchten.&#10;Für einen konzeptuellen Einstieg siehe &lt;a href="../wie-es-funktioniert/"&gt;Wie es funktioniert&lt;/a&gt;.&#10;Sequenzdiagramme, Bicep-Module, DI-Verdrahtung und Nachrichten-Schemata stehen in der&#10;Entwickler-Dokumentation unter &lt;a href="https://databridge.docs.dsyr.de/entwicklung/architektur/"&gt;Architektur im Detail&lt;/a&gt;.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="azure-komponenten"&gt;Azure-Komponenten&lt;/h2&gt;&#10;&lt;p&gt;Die DataBridge besteht aus mehreren Azure-Diensten, die in einer gemeinsamen&#10;Ressourcengruppe betrieben werden:&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Komponente&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Dienst&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Rolle&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Function App&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Azure Functions (Isolated Worker, .NET 10)&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Ausführungsumgebung für alle Funktionen&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;App Service Plan&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;Microsoft.Web/serverfarms&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Compute-Plan: Y1 (Consumption, Standard) oder EP1–EP3 (Premium)&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Service Bus&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Azure Service Bus Namespace&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Puffer zwischen Erkennung und Verarbeitung&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Table Storage&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Azure Storage Account&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Laufzeit-Konfiguration (Connections, Jobs, Mappings, Watermark)&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Application Insights&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Azure Monitor&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Logging, Telemetrie, Alerting; Traces und ausgehende Aufrufe werden gesampelt&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Grafana-Dashboard&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;Microsoft.Dashboard/dashboards&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Vorkonfiguriertes Betriebsdashboard im Application-Insights-Blade (seit v2.1, wird immer mitdeployt)&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Metric Alerts + Action Group&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Azure Monitor&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Dead-Letter- und Queue-Längen-Alerts, optional über &lt;code&gt;enableAlerts&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;div class="alert alert-warning" role="alert"&gt;&lt;div class="h4 alert-heading" role="heading"&gt;Eigene Infrastruktur&lt;/div&gt;&#10;&#10;&#10;Alle Komponenten laufen im **eigenen Azure-Abonnement** des Kunden. Die DataBridge nutzt&#10;keinen geteilten Dienst im Datenpfad — Datenverkehr und Konfiguration verlassen das&#10;Kunden-Abonnement nicht. Beim containerisierten Betrieb wird lediglich das Container-Image&#10;aus der WYSA-Registry bezogen.&#10;&lt;/div&gt;&#10;&#10;&lt;hr&gt;&#10;&lt;h2 id="architektur-nach-dem-c4-modell"&gt;Architektur nach dem C4-Modell&lt;/h2&gt;&#10;&lt;p&gt;Die folgenden drei Diagramme folgen dem &lt;a href="https://c4model.com/"&gt;C4-Modell&lt;/a&gt; (Context →&#10;Container → Component) — von außen nach innen, jede Ebene zoomt weiter in die&#10;DataBridge hinein.&lt;/p&gt;</description></item><item><title>D365CE — Dataverse / Customer Engagement</title><link>https://databridge.docs.dsyr.de/docs/konnektoren/d365ce/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://databridge.docs.dsyr.de/docs/konnektoren/d365ce/</guid><description>&lt;p&gt;Der D365CE-Konnektor verbindet die DataBridge mit &lt;strong&gt;Microsoft Dataverse&lt;/strong&gt; und&#10;&lt;strong&gt;Dynamics 365 Customer Engagement&lt;/strong&gt; über das offizielle Dataverse SDK.&#10;Er nutzt die Change Tracking API für eine lückenlose Erkennung aller Änderungen.&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Eigenschaft&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Wert&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Lesen&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;✅ unterstützt&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Schreiben&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;✅ unterstützt&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Job-Filter&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;✅ clientseitig nach dem Abruf&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Status&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Freigegeben&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Getestete Mindestversion&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Dataverse / D365CE v9.1&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;p&gt;Die Mindestversion beschreibt den getesteten Stand; eine Versionsprüfung findet im Code&#10;nicht statt.&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="voraussetzung-change-tracking-aktivieren"&gt;Voraussetzung: Change Tracking aktivieren&lt;/h2&gt;&#10;&lt;p&gt;Für alle Dataverse-Tabellen, die als &lt;strong&gt;Quelle&lt;/strong&gt; genutzt werden, muss Change Tracking&#10;aktiviert sein. Ohne Change Tracking kann der Konnektor keine Differenzabfragen&#10;durchführen.&lt;/p&gt;</description></item><item><title>Dokumentation</title><link>https://databridge.docs.dsyr.de/docs/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://databridge.docs.dsyr.de/docs/</guid><description>&lt;p&gt;Willkommen in der dsyr.DataBridge-Dokumentation. Hier findest du alles,&#10;was du für Einrichtung, Konfiguration und Betrieb einer DataBridge-Instanz benötigst.&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="überblick"&gt;Überblick&lt;/h2&gt;&#10;&lt;p&gt;Neu hier? Starte mit dem konzeptuellen Einstieg.&lt;/p&gt;&#10;&lt;div class="td-card-group card-group p-0 mb-4"&gt;&#10;&lt;div class="td-card card border me-4"&gt;&#10;&lt;div class="card-header"&gt;&#10; &lt;strong&gt;Wie es funktioniert&lt;/strong&gt;&#10; &lt;/div&gt;&#10;&lt;div class="card-body"&gt;&#10; &lt;p class="card-text"&gt;&#10; &lt;p&gt;Der Datenfluss in fünf Schritten — verständlich ohne technischen Ballast.&lt;/p&gt;&#10;&lt;p&gt;&lt;a href="https://databridge.docs.dsyr.de/docs/ueberblick/wie-es-funktioniert/"&gt;→ Zum Artikel&lt;/a&gt;&lt;/p&gt;&#10;&lt;/p&gt;&#10; &lt;/div&gt;&#10; &lt;/div&gt;&#10;&#10;&lt;div class="td-card card border me-4"&gt;&#10;&lt;div class="card-header"&gt;&#10; &lt;strong&gt;Technische Architektur&lt;/strong&gt;&#10; &lt;/div&gt;&#10;&lt;div class="card-body"&gt;&#10; &lt;p class="card-text"&gt;&#10; &lt;p&gt;Azure-Komponenten, Queue-Struktur, Service-Schicht und Connector-Hierarchie.&lt;/p&gt;&#10;&lt;p&gt;&lt;a href="https://databridge.docs.dsyr.de/docs/ueberblick/architektur/"&gt;→ Zum Artikel&lt;/a&gt;&lt;/p&gt;&#10;&lt;/p&gt;&#10; &lt;/div&gt;&#10; &lt;/div&gt;&#10;&#10;&lt;/div&gt;&#10;&#10;&lt;hr&gt;&#10;&lt;h2 id="einrichtung"&gt;Einrichtung&lt;/h2&gt;&#10;&lt;div class="td-card-group card-group p-0 mb-4"&gt;&#10;&lt;div class="td-card card border me-4"&gt;&#10;&lt;div class="card-header"&gt;&#10; &lt;strong&gt;Voraussetzungen&lt;/strong&gt;&#10; &lt;/div&gt;&#10;&lt;div class="card-body"&gt;&#10; &lt;p class="card-text"&gt;&#10; &lt;p&gt;Benutzerkonten, Berechtigungen, Azure-Provider, Change Tracking.&lt;/p&gt;&#10;&lt;p&gt;&lt;a href="https://databridge.docs.dsyr.de/docs/einrichtung/voraussetzungen/"&gt;→ Zum Artikel&lt;/a&gt;&lt;/p&gt;&#10;&lt;/p&gt;&#10; &lt;/div&gt;&#10; &lt;/div&gt;&#10;&#10;&lt;div class="td-card card border me-4"&gt;&#10;&lt;div class="card-header"&gt;&#10; &lt;strong&gt;Installation&lt;/strong&gt;&#10; &lt;/div&gt;&#10;&lt;div class="card-body"&gt;&#10; &lt;p class="card-text"&gt;&#10; &lt;p&gt;Azure-Ressourcen per Bicep anlegen, Function App deployen.&lt;/p&gt;&#10;&lt;p&gt;&lt;a href="https://databridge.docs.dsyr.de/docs/einrichtung/installation/"&gt;→ Zum Artikel&lt;/a&gt;&lt;/p&gt;&#10;&lt;/p&gt;&#10; &lt;/div&gt;&#10; &lt;/div&gt;&#10;&#10;&lt;div class="td-card card border me-4"&gt;&#10;&lt;div class="card-header"&gt;&#10; &lt;strong&gt;Umgebungsvariablen&lt;/strong&gt;&#10; &lt;/div&gt;&#10;&lt;div class="card-body"&gt;&#10; &lt;p class="card-text"&gt;&#10; &lt;p&gt;Alle App-Settings mit Standardwerten und Wirkung.&lt;/p&gt;&#10;&lt;p&gt;&lt;a href="https://databridge.docs.dsyr.de/docs/einrichtung/umgebungsvariablen/"&gt;→ Zum Artikel&lt;/a&gt;&lt;/p&gt;&#10;&lt;/p&gt;&#10; &lt;/div&gt;&#10; &lt;/div&gt;&#10;&#10;&lt;/div&gt;</description></item><item><title>Einrichtung</title><link>https://databridge.docs.dsyr.de/docs/einrichtung/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://databridge.docs.dsyr.de/docs/einrichtung/</guid><description>&lt;p&gt;Dieses Kapitel führt Schritt für Schritt durch die erstmalige Einrichtung einer&#10;dsyr.DataBridge-Instanz. Am Ende steht eine vollständig deployete und konfigurierte&#10;Azure Function App, die synchronisieren kann.&lt;/p&gt;&#10;&lt;p&gt;Empfohlene Reihenfolge:&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;&lt;strong&gt;&lt;a href="https://databridge.docs.dsyr.de/docs/einrichtung/voraussetzungen/"&gt;Voraussetzungen&lt;/a&gt;&lt;/strong&gt; — Benutzer, Berechtigungen, Azure-Provider&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;&lt;a href="https://databridge.docs.dsyr.de/docs/einrichtung/installation/"&gt;Installation&lt;/a&gt;&lt;/strong&gt; — Azure-Ressourcen per Bicep anlegen, Function deployen&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;&lt;a href="https://databridge.docs.dsyr.de/docs/einrichtung/umgebungsvariablen/"&gt;Umgebungsvariablen&lt;/a&gt;&lt;/strong&gt; — Alle Einstellungen im Function-App-Kontext&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;p&gt;Ergänzend, außerhalb des regulären Installationswegs:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;&lt;a href="https://databridge.docs.dsyr.de/docs/einrichtung/container-betrieb/"&gt;Container-Betrieb&lt;/a&gt;&lt;/strong&gt; — Betrieb als Container-Image. Beta,&#10;nicht für den Kundenbetrieb vorgesehen.&lt;/li&gt;&#10;&lt;/ul&gt;</description></item><item><title>Installation</title><link>https://databridge.docs.dsyr.de/docs/einrichtung/installation/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://databridge.docs.dsyr.de/docs/einrichtung/installation/</guid><description>&lt;p&gt;Für die Installation gibt es zwei Wege:&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Weg&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Wann geeignet&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;&lt;a href="https://databridge.docs.dsyr.de/docs/einrichtung/installation/#weg-1--azure-marketplace-empfohlen"&gt;Azure Marketplace&lt;/a&gt;&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Regelfall. Läuft vollständig im Azure Portal, keine lokale Software nötig.&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;&lt;a href="https://databridge.docs.dsyr.de/docs/einrichtung/installation/#weg-2--bicep--azure-cli"&gt;Bicep / Azure CLI&lt;/a&gt;&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Automatisierte oder wiederholbare Deployments, Integration in eine Pipeline.&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;p&gt;Beide Wege legen dieselben Ressourcen an und sind gleichwertig im Ergebnis.&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="weg-1--azure-marketplace-empfohlen"&gt;Weg 1 — Azure Marketplace (empfohlen)&lt;/h2&gt;&#10;&lt;h3 id="1-ressourcengruppe-anlegen"&gt;1. Ressourcengruppe anlegen&lt;/h3&gt;&#10;&lt;p&gt;Im Azure Portal eine neue Ressourcengruppe für die DataBridge-Instanz erstellen.&#10;Pro Umgebung (Test, Produktion) wird eine eigene Ressourcengruppe verwendet.&lt;/p&gt;</description></item><item><title>Jobs (jobs)</title><link>https://databridge.docs.dsyr.de/docs/konfiguration/jobs/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://databridge.docs.dsyr.de/docs/konfiguration/jobs/</guid><description>&lt;p&gt;Ein &lt;strong&gt;Job&lt;/strong&gt; beschreibt genau eine Synchronisationsrichtung zwischen zwei Systemen:&#10;er verbindet eine Quelltabelle mit einer Zieltabelle, legt den Zeitplan fest und&#10;verweist auf das zugehörige Mapping.&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="tabellenstruktur"&gt;Tabellenstruktur&lt;/h2&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Spalte&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th style="text-align: center"&gt;Pflicht&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Beschreibung&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;PartitionKey&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: center"&gt;✅&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Muss immer &lt;code&gt;job&lt;/code&gt; lauten.&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;RowKey&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: center"&gt;✅&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Eindeutiger Jobname. Wird im Logging und als Referenz für ResponseJobs verwendet.&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;IsActive&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: center"&gt;✅&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;true&lt;/code&gt; = Job wird von &lt;code&gt;GetChanges&lt;/code&gt; ausgeführt. &lt;code&gt;false&lt;/code&gt; = Job wird nur indirekt (als ResponseJob) aufgerufen.&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;SourceConnection&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: center"&gt;✅&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;RowKey-Referenz auf einen Eintrag in der &lt;code&gt;connections&lt;/code&gt;-Tabelle (Quelldaten).&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;TargetConnection&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: center"&gt;✅&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;RowKey-Referenz auf einen Eintrag in der &lt;code&gt;connections&lt;/code&gt;-Tabelle (Zieldaten).&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Mapping&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: center"&gt;✅&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;PartitionKey-Referenz auf eine Gruppe von Einträgen in der &lt;code&gt;mappings&lt;/code&gt;-Tabelle.&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Source&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: center"&gt;—&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Quellressource (Tabelle, Entität, Pfad oder Aktion). Überschreibt die &lt;code&gt;SourceTable&lt;/code&gt; der Mapping-Zeilen für diesen Job (siehe &lt;a href="https://databridge.docs.dsyr.de/docs/konfiguration/jobs/#source-und-target--job-eigene-ressourcenpfade"&gt;unten&lt;/a&gt;).&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Target&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: center"&gt;—&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Zielressource (Tabelle, Entität, Pfad oder Aktion). Überschreibt die &lt;code&gt;TargetTable&lt;/code&gt; der Mapping-Zeilen für diesen Job (siehe &lt;a href="https://databridge.docs.dsyr.de/docs/konfiguration/jobs/#source-und-target--job-eigene-ressourcenpfade"&gt;unten&lt;/a&gt;).&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Order&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: center"&gt;✅&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Ganzzahl. Legt die Ausführungsreihenfolge fest — muss über &lt;strong&gt;alle&lt;/strong&gt; Jobs eindeutig sein.&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;WatermarkField&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: center"&gt;—&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Feldname im &lt;strong&gt;Quellsystem&lt;/strong&gt;, der als Änderungsindikator genutzt wird (meistens ein Datums-/Zeitstempelfeld). Nur bei &lt;code&gt;WatermarkType&lt;/code&gt; = &lt;code&gt;date&lt;/code&gt; oder &lt;code&gt;datetime&lt;/code&gt; erforderlich; bei &lt;code&gt;string&lt;/code&gt; (Dataverse Change Tracking) bleibt das Feld leer.&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;WatermarkType&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: center"&gt;✅&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Typ des Watermark-Wertes: &lt;code&gt;date&lt;/code&gt;, &lt;code&gt;datetime&lt;/code&gt; oder &lt;code&gt;string&lt;/code&gt; (Details: &lt;a href="../watermarks/"&gt;Watermarks&lt;/a&gt;).&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Filter&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: center"&gt;—&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Filterausdruck für die Quellanfrage. Format ist systemabhängig (siehe unten).&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Schedule&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: center"&gt;—&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;CRON-Ausdruck (6-stellig, NCrontab). Wenn leer, läuft der Job bei jedem Timer-Aufruf.&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Action&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: center"&gt;—&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Steuert, welche Änderungsarten gelesen werden, oder benennt eine Aktion. Leer = &lt;code&gt;NewUpdate&lt;/code&gt;. &lt;strong&gt;Wirkt bei den CRUD-Werten (&lt;code&gt;Delete&lt;/code&gt;, &lt;code&gt;DeleteOnUpdate&lt;/code&gt;) nur bei D365CE als Quellsystem&lt;/strong&gt; (siehe unten); ein nicht erkannter Wert schaltet den Job auf &lt;code&gt;InvokeAction&lt;/code&gt; (siehe unten).&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Priority&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: center"&gt;—&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;Standard&lt;/code&gt; (Vorgabe), &lt;code&gt;High&lt;/code&gt; oder &lt;code&gt;Low&lt;/code&gt;. Steuert die Service-Bus-Queue.&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;ResponseJob&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: center"&gt;—&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;RowKey eines anderen Jobs, der nach erfolgreichem Schreiben automatisch ausgeführt wird.&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;IsValid&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: center"&gt;—&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Reserviert. Die Spalte kommt in bestehenden Tabellen vor, wird von der DataBridge aber nicht gelesen und hat &lt;strong&gt;keine Wirkung&lt;/strong&gt;.&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;div class="alert alert-warning" role="alert"&gt;&lt;div class="h4 alert-heading" role="heading"&gt;PartitionKey ist nicht frei wählbar&lt;/div&gt;&#10;&lt;p&gt;Die DataBridge liest die Tabelle ausschließlich mit dem Filter &lt;code&gt;PartitionKey eq 'job'&lt;/code&gt;.&#10;Zeilen mit einem abweichenden PartitionKey werden &lt;strong&gt;ohne Fehlermeldung und ohne Warnung&#10;ignoriert&lt;/strong&gt; — der Job existiert dann für die DataBridge schlicht nicht.&lt;/p&gt;&#10;&lt;p&gt;Dasselbe gilt für die &lt;code&gt;connections&lt;/code&gt;-Tabelle (dort &lt;code&gt;connection&lt;/code&gt;). Nur bei &lt;code&gt;mappings&lt;/code&gt; ist&#10;der PartitionKey frei wählbar — er dient dort der Gruppierung.&lt;/p&gt;&#10;&lt;/div&gt;</description></item><item><title>Monitoring &amp; Alerts</title><link>https://databridge.docs.dsyr.de/docs/betrieb/monitoring/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://databridge.docs.dsyr.de/docs/betrieb/monitoring/</guid><description>&lt;p&gt;Ein funktionierendes Monitoring erkennt Probleme, bevor sie auffallen.&#10;Die DataBridge kann über &lt;strong&gt;Azure Monitor Alert Rules&lt;/strong&gt; so konfiguriert werden,&#10;dass bei Fehlern, Queue-Staus oder Dead-Letter-Einträgen automatisch Benachrichtigungen&#10;ausgelöst werden.&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="aufbau-des-alert-systems"&gt;Aufbau des Alert-Systems&lt;/h2&gt;&#10;&lt;p&gt;Das Azure-Alert-System besteht aus zwei Komponenten:&lt;/p&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;Alert Rule Action Group&#10;────────────────── ──────────────────────────&#10;Bedingung definieren → Wer wird benachrichtigt?&#10;Scope: Ressource E-Mail, SMS, Webhook, Azure Role&#10;Condition: KQL / Metric&#10;Schwellwert festlegen&#10;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;Empfohlene Reihenfolge:&lt;/strong&gt;&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;Zuerst die &lt;strong&gt;Action Group&lt;/strong&gt; anlegen (Empfänger)&lt;/li&gt;&#10;&lt;li&gt;Dann die &lt;strong&gt;Alert Rules&lt;/strong&gt; darauf zeigen lassen&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="action-group-anlegen"&gt;Action Group anlegen&lt;/h2&gt;&#10;&lt;p&gt;&lt;strong&gt;Azure Portal → Monitor → Warnungen → Action Groups → Erstellen&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>Operationen</title><link>https://databridge.docs.dsyr.de/docs/mcp-server/operationen/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://databridge.docs.dsyr.de/docs/mcp-server/operationen/</guid><description>&lt;p&gt;Alle zehn Tools sind als &lt;code&gt;ReadOnly = true&lt;/code&gt;, &lt;code&gt;Idempotent = true&lt;/code&gt; und &lt;code&gt;Destructive = false&lt;/code&gt; markiert&#10;(MCP-Tool-Annotationen, die dem aufrufenden Client mitgeben, dass wiederholte Aufrufe risikolos&#10;sind). Kein Tool schreibt, löscht oder sendet — weder in der &lt;code&gt;jobs&lt;/code&gt;-/&lt;code&gt;mappings&lt;/code&gt;-Tabelle, noch in&#10;den Service-Bus-Queues, noch in einem Quell-/Zielsystem.&lt;/p&gt;&#10;&lt;div class="alert alert-warning" role="alert"&gt;&lt;div class="h4 alert-heading" role="heading"&gt;Grenze ist Metadaten vs. Nutzdaten, nicht nur lesend vs. schreibend&lt;/div&gt;&#10;&lt;p&gt;Auch innerhalb der reinen Lesezugriffe gibt es eine bewusste zweite Grenze: Betriebs-/&#10;Konfigurationsdaten (Job-Namen, Schemata, Fehlermeldungen, Zeitstempel) sind unkritisch und werden&#10;vollständig zurückgegeben. &lt;strong&gt;Fachliche Nutz-/Kundendaten&lt;/strong&gt; — z. B. der Inhalt einer&#10;Service-Bus-Nachricht — werden dagegen &lt;strong&gt;nie&lt;/strong&gt; zurückgegeben, selbst wenn das zugrunde liegende&#10;Tool ansonsten &amp;ldquo;nur liest&amp;rdquo;. Details dazu unten bei den Peek-Tools.&lt;/p&gt;&#10;&lt;/div&gt;</description></item><item><title>Performance &amp; Laufzeiten</title><link>https://databridge.docs.dsyr.de/docs/betrieb/logging/performance/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://databridge.docs.dsyr.de/docs/betrieb/logging/performance/</guid><description>&lt;p&gt;Die folgenden Abfragen können direkt im &lt;strong&gt;Logs&lt;/strong&gt;-Bereich von Application Insights&#10;(Kusto Query Language) ausgeführt werden.&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="laufzeiten-und-fehler"&gt;Laufzeiten und Fehler&lt;/h2&gt;&#10;&lt;h3 id="laufzeiten-aller-funktionen-letzte-24-stunden"&gt;Laufzeiten aller Funktionen (letzte 24 Stunden)&lt;/h3&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code class="language-kusto" data-lang="kusto"&gt;requests&#10;| where timestamp &amp;gt; ago(24h)&#10;| summarize&#10; Aufrufe = count(),&#10; DurchschnittMs = avg(duration),&#10; P95Ms = percentile(duration, 95),&#10; Fehler = countif(success == false)&#10; by name&#10;| order by DurchschnittMs desc&#10;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="verlauf-einer-einzelnen-funktion-letzte-7-tage"&gt;Verlauf einer einzelnen Funktion (letzte 7 Tage)&lt;/h3&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code class="language-kusto" data-lang="kusto"&gt;requests&#10;| where timestamp &amp;gt; ago(7d)&#10;| where name == &amp;#34;GetChanges&amp;#34;&#10;| summarize&#10; P50Ms = percentile(duration, 50),&#10; P95Ms = percentile(duration, 95),&#10; Fehler = countif(success == false),&#10; Läufe = count()&#10; by bin(timestamp, 1h)&#10;| order by timestamp asc&#10;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="durchschnittliche-laufzeit-der-letzten-30-tage-täglich"&gt;Durchschnittliche Laufzeit der letzten 30 Tage (täglich)&lt;/h3&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code class="language-kusto" data-lang="kusto"&gt;requests&#10;| where timestamp &amp;gt; ago(30d)&#10;| summarize&#10; DurchschnittMs = avg(duration),&#10; P95Ms = percentile(duration, 95)&#10; by name, bin(timestamp, 1d)&#10;| order by name asc, timestamp asc&#10;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="fehlerquote-je-funktion-letzte-7-tage"&gt;Fehlerquote je Funktion (letzte 7 Tage)&lt;/h3&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code class="language-kusto" data-lang="kusto"&gt;requests&#10;| where timestamp &amp;gt; ago(7d)&#10;| summarize&#10; Gesamt = count(),&#10; Fehler = countif(success == false),&#10; FehlerPct = round(100.0 * countif(success == false) / count(), 1)&#10; by name&#10;| order by FehlerPct desc&#10;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="warnungen-und-fehler-im-zeitverlauf"&gt;Warnungen und Fehler im Zeitverlauf&lt;/h3&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code class="language-kusto" data-lang="kusto"&gt;traces&#10;| where timestamp &amp;gt; ago(7d)&#10;| where severityLevel &amp;gt;= 2 // 2 = Warning, 3 = Error&#10;| summarize Anzahl = count() by severityLevel, bin(timestamp, 1h), operation_Name&#10;| order by timestamp asc&#10;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="top-10-häufigste-fehlermeldungen"&gt;Top-10 häufigste Fehlermeldungen&lt;/h3&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code class="language-kusto" data-lang="kusto"&gt;exceptions&#10;| where timestamp &amp;gt; ago(7d)&#10;| summarize Anzahl = count() by outerMessage&#10;| top 10 by Anzahl desc&#10;&lt;/code&gt;&lt;/pre&gt;&lt;hr&gt;&#10;&lt;h2 id="einzelne-ausführung-nachvollziehen"&gt;Einzelne Ausführung nachvollziehen&lt;/h2&gt;&#10;&lt;h3 id="alle-einträge-einer-ausführung-per-operation_id"&gt;Alle Einträge einer Ausführung (per operation_Id)&lt;/h3&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code class="language-kusto" data-lang="kusto"&gt;union requests, traces, exceptions&#10;| where operation_Id == &amp;#34;&amp;lt;operation_Id hier einfügen&amp;gt;&amp;#34;&#10;| project timestamp, itemType, severityLevel, message, outerMessage, operation_Name&#10;| order by timestamp asc&#10;&lt;/code&gt;&lt;/pre&gt;&lt;h3 id="fehlerläufe-mit-allen-zugehörigen-traces-letzte-24-stunden"&gt;Fehlerläufe mit allen zugehörigen Traces (letzte 24 Stunden)&lt;/h3&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code class="language-kusto" data-lang="kusto"&gt;let fehlgeschlagene =&#10; requests&#10; | where timestamp &amp;gt; ago(24h)&#10; | where success == false&#10; | project operation_Id, FunktionsName = name, Startzeit = timestamp;&#10;traces&#10;| where timestamp &amp;gt; ago(24h)&#10;| join kind=inner fehlgeschlagene on operation_Id&#10;| project Startzeit, FunktionsName, severityLevel, message&#10;| order by Startzeit desc, severityLevel desc&#10;&lt;/code&gt;&lt;/pre&gt;&lt;hr&gt;&#10;&lt;h2 id="abhängigkeiten"&gt;Abhängigkeiten&lt;/h2&gt;&#10;&lt;h3 id="langsamste-abhängigkeiten-letzte-24-stunden"&gt;Langsamste Abhängigkeiten (letzte 24 Stunden)&lt;/h3&gt;&#10;&lt;p&gt;Zeigt die ausgehenden Aufrufe an Quell- und Zielsysteme mit den höchsten Laufzeiten:&lt;/p&gt;</description></item><item><title>Release v2.2</title><link>https://databridge.docs.dsyr.de/docs/versionen/v2.2/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://databridge.docs.dsyr.de/docs/versionen/v2.2/</guid><description>&lt;h2 id="was-ist-neu"&gt;Was ist neu&lt;/h2&gt;&#10;&lt;h3 id="neue-funktionen"&gt;Neue Funktionen&lt;/h3&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;Neuer Connector: generische REST-API über OpenAPI-Spezifikation&lt;/strong&gt;: Neben BC, CE, NAV und den SQL-Connectoren steht jetzt ein generischer HTTP-Connector zur Verfügung, der ein beliebiges REST-API anhand seiner OpenAPI-/Swagger-Beschreibung anbindet (neuer Verbindungstyp &lt;code&gt;OPENAPI&lt;/code&gt;). Damit lassen sich Systeme ohne eigenen Connector über ihr veröffentlichtes API-Schema anbinden, statt eine dedizierte Implementierung zu benötigen. Details, Konfigurationsbeispiel und unterstützte Auth-Methoden siehe &lt;a href="https://databridge.docs.dsyr.de/docs/konnektoren/openapi/"&gt;OpenAPI-Connector&lt;/a&gt;.&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;Neue Authentifizierungsart „API-Key“ für HTTP-Connectoren&lt;/strong&gt;: Zusätzlich zu Basic-Auth und OAuth2 unterstützen alle HTTP-basierten Connectoren (BC, NAV, OpenAPI) jetzt die Authentifizierung über einen statischen API-Key, der als Header an jede Anfrage angehängt wird (&lt;code&gt;apiKeyHeader&lt;/code&gt; / &lt;code&gt;apiKeyValue&lt;/code&gt; in der Connection). Zusätzlich kann der OAuth2-Token-Endpunkt über &lt;code&gt;tokenUrl&lt;/code&gt; frei konfiguriert werden, statt fest auf den Microsoft-Login-Endpunkt zu zeigen — relevant für Systeme mit eigenem oder abweichendem Token-Server.&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;Action-Jobs (&lt;code&gt;InvokeAction&lt;/code&gt;)&lt;/strong&gt;: Jobs können jetzt statt eines CRUD-Datenabgleichs eine einzelne benannte Aktion auf dem Zielsystem auslösen (z. B. eine OpenAPI-Action/&lt;code&gt;operationId&lt;/code&gt; oder einen D365CE-&lt;code&gt;OrganizationRequest&lt;/code&gt;). Ein solcher Job benötigt kein Mapping in der Mapping-Tabelle — die Aktion und ihre Parameter werden direkt aus der Queue-Nachricht und dem Job selbst gebildet. Siehe &lt;a href="https://databridge.docs.dsyr.de/docs/konfiguration/jobs/#action---welche-%c3%a4nderungsarten-gelesen-werden"&gt;Action — welche Änderungsarten gelesen werden&lt;/a&gt;.&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;Ressourcenpfad direkt am Job konfigurierbar&lt;/strong&gt;: Jobs können nun ihre Quell- und Zielressource (Tabelle, Entität oder Pfad) direkt in den neuen Job-Feldern &lt;code&gt;Source&lt;/code&gt;/&lt;code&gt;Target&lt;/code&gt; tragen, statt sie zwingend über die Mapping-Tabelle zu beziehen. Bestehende, ausschließlich über die Mapping-Tabelle konfigurierte Jobs funktionieren unverändert weiter; ohne Eintrag in &lt;code&gt;Source&lt;/code&gt;/&lt;code&gt;Target&lt;/code&gt; greift wie bisher die Mapping-Tabelle.&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;Kind-Datensätze einbetten (&lt;code&gt;EmbedChildren&lt;/code&gt;, D365CE)&lt;/strong&gt;: Eine neue Source-Operation erlaubt es, die Datensätze eines referenzierten Kind-Jobs (z. B. Angebotspositionen zu einem Angebot) direkt in die Queue-Nachricht des Eltern-Datensatzes einzubetten, sodass beide gemeinsam in einer Anfrage beim Ziel ankommen. Der Filter des Kind-Jobs kann dabei über &lt;code&gt;{{...%parent.Feldname%...}}&lt;/code&gt; auf Werte des Eltern-Datensatzes zugreifen.&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;Neue Diagnose-Endpunkte &lt;code&gt;GET /job&lt;/code&gt; und &lt;code&gt;GET /mapping&lt;/code&gt;&lt;/strong&gt;: Zwei neue, rein lesende HTTP-Endpunkte (&lt;code&gt;/job&lt;/code&gt;, &lt;code&gt;/job/{rowKey}&lt;/code&gt;, &lt;code&gt;/mapping&lt;/code&gt;, &lt;code&gt;/mapping/{rowKey}&lt;/code&gt;) geben die aktuell geladene Job- bzw. Mapping-Konfiguration zurück — praktisch zur Fehlersuche, ohne direkt in der Table-Storage nachsehen zu müssen.&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;Eingebauter MCP-Server für KI-Assistenten (z. B. Claude Code, GitHub Copilot, Microsoft 365 Copilot)&lt;/strong&gt;: Ein neuer, rein lesender &lt;a href="https://modelcontextprotocol.io/"&gt;Model-Context-Protocol&lt;/a&gt;-Endpunkt (&lt;code&gt;POST /api/mcp&lt;/code&gt;) macht Jobs, Mappings sowie Service-Bus-Diagnosedaten (Queue-Laufzeit-Status, non-destruktives Peek von Nachrichten und Dead-Letter-Nachrichten) als KI-Tools ansprechbar — dediziert dafür gibt es keinen eigenen HTTP-Endpunkt. Zwei der zehn Tools gehen noch einen Schritt weiter: &lt;code&gt;list_connector_tables&lt;/code&gt; und &lt;code&gt;get_connector_table_schema&lt;/code&gt; lesen die &lt;strong&gt;echten&lt;/strong&gt; Tabellen-/Feld-Metadaten (Typ, Nullable, maximale Länge, Primary Key) direkt aus dem Quell-/Zielsystem einer Connection — für BC, NAV, CE (Dataverse) und OpenAPI —, sodass sich ein Mapping gegen das tatsächliche Schema validieren lässt, statt sich auf die Mapping-Konfiguration allein zu verlassen. Für die SQL-Connectoren (MSSQL, MySQL, Oracle, PostgreSQL) ist das noch nicht implementiert.&lt;/p&gt;&#10;&lt;p&gt;Die beiden Peek-Tools geben bewusst &lt;strong&gt;niemals den Nachrichteninhalt&lt;/strong&gt; zurück, nur dessen Größe in Bytes (&lt;code&gt;BodySize&lt;/code&gt;) — der Body kann fachliche Kunden-/Geschäftsdaten des jeweiligen Jobs enthalten, die Kopf-/Fehlerdaten (JobName, ErrorMessage, Stacktrace, Zustellversuche, …) reichen für die Diagnose. Die Tool-Beschreibungen selbst sind auf Englisch verfasst, da sie vom aufrufenden KI-Modell gelesen werden, nicht von einem Menschen. Details, Einrichtung (inkl. GitHub Copilot/VS Code und Microsoft 365 Copilot Studio), die vollständige Tool-Liste mit Lese-Umfang je Tool sowie die Funktionsweise: &lt;a href="https://databridge.docs.dsyr.de/docs/mcp-server/"&gt;MCP-Server&lt;/a&gt;.&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;System-assigned Managed Identity für die Function App&lt;/strong&gt;: Die Azure Function App erhält beim Deployment automatisch eine system-zugewiesene Managed Identity. Ihre Objekt-ID (&lt;code&gt;principalId&lt;/code&gt;) steht als Deployment-Output (&lt;code&gt;functionPrincipalId&lt;/code&gt;) für nachgelagerte Rollenzuweisungen zur Verfügung. Die Identity wird &lt;strong&gt;immer&lt;/strong&gt; angelegt.&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;Optional (Preview): Storage &amp;amp; Service Bus über Managed Identity&lt;/strong&gt;: Über den neuen Schalter &lt;code&gt;enableManagedIdentity&lt;/code&gt; (Standard: &lt;strong&gt;aus&lt;/strong&gt;) lassen sich die Verbindungen zu Storage und Service Bus von Schlüsseln auf identitätsbasierten Zugriff umstellen. Ist der Schalter aktiv, weist das Bicep-Deployment der Identity die nötigen Rollen zu (Storage Table/Blob/Queue, Service Bus Sender/Receiver/Data Owner — Data Owner wird für die Queue-Status-Abfrage des MCP-Tools &lt;code&gt;list_queue_statuses&lt;/code&gt; benötigt) und die App-Settings verwenden &lt;code&gt;AzureWebJobsStorage__accountName&lt;/code&gt; bzw. &lt;code&gt;…__fullyQualifiedNamespace&lt;/code&gt; statt der Schlüssel-Verbindungszeichenfolgen.&lt;/p&gt;&#10;&lt;blockquote&gt;&#10;&lt;p&gt;Standardmäßig bleibt alles beim Schlüssel-basierten Zugriff — ein reines ZIP-/Image-Update ändert daran &lt;strong&gt;nichts&lt;/strong&gt;. Die Umstellung erfolgt nur, wenn das Bicep-Script mit aktiviertem Schalter neu deployt wird (siehe Installationshinweise).&lt;/p&gt;&#10;&lt;/blockquote&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;Leere Quell-Schlüssel gezielt ignorieren (&lt;code&gt;IgnoreEmptySourceKey&lt;/code&gt;, D365CE)&lt;/strong&gt;: Ist das Quellfeld eines Ziel-Schlüssels leer, brach die Verarbeitung der Nachricht bisher immer mit einem Fehler ab — auch dann, wenn ein weiterer Schlüssel den Datensatz noch hätte finden können. Mit dem neuen Feld &lt;code&gt;IgnoreEmptySourceKey&lt;/code&gt; am &lt;code&gt;TargetKey&lt;/code&gt; (Standard: &lt;strong&gt;aus&lt;/strong&gt;) lässt sich das je Schlüssel abschalten: Der betroffene Schlüssel wird übersprungen und die Suche läuft mit dem nächsten Schlüssel nach &lt;code&gt;KeyRank&lt;/code&gt; weiter.&lt;/p&gt;&#10;&lt;p&gt;Das ist vor allem im Multikey-Szenario relevant, wenn ein optionales Feld wie eine externe ID nicht in jedem Quelldatensatz gefüllt ist, ein nachrangiger Schlüssel den Zieldatensatz aber sicher findet.&lt;/p&gt;&#10;&lt;blockquote&gt;&#10;&lt;p&gt;Findet &lt;strong&gt;kein&lt;/strong&gt; Schlüssel einen Datensatz und waren alle leer gebliebenen Schlüssel entsprechend markiert, wird ein &lt;strong&gt;neuer Datensatz angelegt&lt;/strong&gt; statt ein Fehler gemeldet. War auch nur einer der leeren Schlüssel nicht markiert, bleibt es beim Fehler. Details siehe &lt;a href="https://databridge.docs.dsyr.de/docs/konfiguration/mappings/#ignoreemptysourcekey"&gt;IgnoreEmptySourceKey&lt;/a&gt;.&lt;/p&gt;&#10;&lt;/blockquote&gt;&#10;&lt;p&gt;Bestehende Mappings sind nicht betroffen — ohne gesetztes Feld bleibt das bisherige Verhalten unverändert.&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;</description></item><item><title>D365NAV — Microsoft Dynamics NAV</title><link>https://databridge.docs.dsyr.de/docs/konnektoren/d365nav/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://databridge.docs.dsyr.de/docs/konnektoren/d365nav/</guid><description>&lt;p&gt;Der D365NAV-Konnektor verbindet die DataBridge mit &lt;strong&gt;Microsoft Dynamics NAV&lt;/strong&gt;&#10;über OData. Er ist auf die ältere NAV-API-Struktur ausgelegt und unterstützt auch&#10;OnPremise-Installationen mit NTLM-Authentifizierung.&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Eigenschaft&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Wert&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Lesen&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;✅ unterstützt&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Schreiben&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;✅ unterstützt&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Job-Filter&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;✅ wird als OData-&lt;code&gt;$filter&lt;/code&gt; an NAV übergeben&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Status&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Freigegeben&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Getestete Mindestversion&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;NAV 2018&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;div class="alert alert-info" role="alert"&gt;&lt;div class="h4 alert-heading" role="heading"&gt;Die Mindestversion wird nicht geprüft&lt;/div&gt;&#10;&lt;p&gt;Die Angabe beschreibt den getesteten Stand. Die DataBridge fragt die NAV-Version &lt;strong&gt;nicht&lt;/strong&gt;&#10;ab. Ältere Installationen können funktionieren, sofern sie OData mit &lt;code&gt;$metadata&lt;/code&gt;&#10;bereitstellen — abgesichert ist das jedoch nicht.&lt;/p&gt;&#10;&lt;/div&gt;</description></item><item><title>Grafana-Dashboard</title><link>https://databridge.docs.dsyr.de/docs/betrieb/grafana-dashboard/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://databridge.docs.dsyr.de/docs/betrieb/grafana-dashboard/</guid><description>&lt;p&gt;Seit &lt;strong&gt;v2.1&lt;/strong&gt; liefert jede Installation ein vorkonfiguriertes &lt;strong&gt;Grafana-Dashboard&lt;/strong&gt; mit.&#10;Es zeigt auf einen Blick, ob die DataBridge läuft, wie schnell sie arbeitet und wo Fehler&#10;auftreten — ohne dass dafür KQL-Abfragen geschrieben werden müssen.&lt;/p&gt;&#10;&lt;div class="alert alert-info" role="alert"&gt;&lt;div class="h4 alert-heading" role="heading"&gt;Ohne Zutun vorhanden&lt;/div&gt;&#10;&lt;p&gt;Das Dashboard wird bei &lt;strong&gt;jedem&lt;/strong&gt; Deployment automatisch angelegt. Es gibt keinen&#10;Schalter zum Abwählen und keine manuelle Einrichtung. Zusätzliche Kosten entstehen&#10;nicht — die Abfragen laufen gegen die ohnehin vorhandene Application-Insights- und&#10;Service-Bus-Instanz.&lt;/p&gt;&#10;&lt;/div&gt;</description></item><item><title>Konfiguration</title><link>https://databridge.docs.dsyr.de/docs/konfiguration/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://databridge.docs.dsyr.de/docs/konfiguration/</guid><description>&lt;p&gt;Die dsyr.DataBridge hat keine Konfigurationsdateien. &lt;strong&gt;Alle Laufzeit-Einstellungen&lt;/strong&gt; —&#10;Verbindungen zu Quell- und Zielsystemen, Synchronisations-Jobs, Feld-Mappings und&#10;Änderungsstände — leben in vier &lt;strong&gt;Azure Tables&lt;/strong&gt; innerhalb der zugehörigen Ressourcengruppe.&lt;/p&gt;&#10;&lt;p&gt;Das hat einen entscheidenden Vorteil: Anpassungen werden ohne Redeployment wirksam.&#10;Die Tabellen werden beim nächsten Funktionsaufruf automatisch neu eingelesen.&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Tabelle&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Inhalt&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://databridge.docs.dsyr.de/docs/konfiguration/verbindungen/"&gt;connections&lt;/a&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Zugangsdaten zu Quell- und Zielsystemen&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://databridge.docs.dsyr.de/docs/konfiguration/jobs/"&gt;jobs&lt;/a&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Welche Tabellen werden wann in welche Richtung synchronisiert&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://databridge.docs.dsyr.de/docs/konfiguration/mappings/"&gt;mappings&lt;/a&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Welche Felder werden wie übertragen und transformiert&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://databridge.docs.dsyr.de/docs/konfiguration/watermarks/"&gt;watermarks&lt;/a&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Letzter synchronisierter Stand pro Job&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;</description></item><item><title>Mappings (mappings)</title><link>https://databridge.docs.dsyr.de/docs/konfiguration/mappings/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://databridge.docs.dsyr.de/docs/konfiguration/mappings/</guid><description>&lt;p&gt;Die &lt;code&gt;mappings&lt;/code&gt;-Tabelle ist die mächtigste Konfigurationsebene der DataBridge.&#10;Sie legt für jedes Feld fest: woher kommt der Wert, wohin geht er, und wie wird&#10;er unterwegs transformiert.&lt;/p&gt;&#10;&lt;p&gt;Ein Mapping ist eine &lt;strong&gt;Gruppe von Zeilen&lt;/strong&gt; in der Tabelle — alle mit demselben&#10;&lt;code&gt;PartitionKey&lt;/code&gt;. Jede Zeile beschreibt genau eine Feld-Zuordnung.&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="tabellenstruktur"&gt;Tabellenstruktur&lt;/h2&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Spalte&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th style="text-align: center"&gt;Pflicht&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Beschreibung&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;PartitionKey&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: center"&gt;✅&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Name des Mappings. Wird im Job unter &lt;code&gt;Mapping&lt;/code&gt; referenziert. Im Gegensatz zu &lt;code&gt;jobs&lt;/code&gt; und &lt;code&gt;connections&lt;/code&gt; ist der PartitionKey hier &lt;strong&gt;frei wählbar&lt;/strong&gt; — er dient der Gruppierung.&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;RowKey&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: center"&gt;✅&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Eindeutiger Bezeichner innerhalb des Mappings. Konvention: &lt;code&gt;_quellfeld__zielfeld_&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;SourceTable&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: center"&gt;✅&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Name der Quelltabelle/-entität. Muss innerhalb eines Mappings konsistent sein.&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;SourceField&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: center"&gt;—&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Name des Quellfeldes. Kann leer sein (bei &lt;code&gt;DefaultValue&lt;/code&gt;) oder mit &lt;code&gt;_&lt;/code&gt; beginnen — dann handelt es sich um ein &lt;a href="https://databridge.docs.dsyr.de/docs/konfiguration/mappings/#virtuelle-felder"&gt;virtuelles Feld&lt;/a&gt;.&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;TargetTable&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: center"&gt;✅&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Name der Zieltabelle/-entität. Muss innerhalb eines Mappings konsistent sein.&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;TargetField&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: center"&gt;✅&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Name des Zielfeldes. Muss dem tatsächlichen API-/Spaltenname entsprechen.&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;TargetKey&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: center"&gt;—&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;JSON-Objekt. Definiert, wie ein bestehender Datensatz im Zielsystem identifiziert wird (für Upsert-Logik).&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;SourceOperation&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: center"&gt;—&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;JSON-Objekt der Form &lt;code&gt;{ &amp;quot;Operations&amp;quot;: [ … ] }&lt;/code&gt;. Transformation beim &lt;strong&gt;Lesen&lt;/strong&gt; aus der Quelle.&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;TargetOperation&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: center"&gt;—&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;JSON-Objekt der Form &lt;code&gt;{ &amp;quot;Operations&amp;quot;: [ … ] }&lt;/code&gt;. Transformationen beim &lt;strong&gt;Schreiben&lt;/strong&gt; ins Ziel.&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;h3 id="rowkey-namenskonvention"&gt;RowKey-Namenskonvention&lt;/h3&gt;&#10;&lt;p&gt;Die empfohlene Konvention für den RowKey: &lt;code&gt;_quellfeld__zielfeld_&lt;/code&gt;&lt;/p&gt;</description></item><item><title>Nutzung</title><link>https://databridge.docs.dsyr.de/docs/mcp-server/nutzung/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://databridge.docs.dsyr.de/docs/mcp-server/nutzung/</guid><description>&lt;p&gt;Der Server spricht Standard-MCP über Streamable HTTP — grundsätzlich verbindet sich jeder&#10;MCP-fähige Client über dieselbe URL (&lt;code&gt;.../api/mcp?code=&amp;lt;Function-Key&amp;gt;&lt;/code&gt;). Die folgenden Abschnitte&#10;zeigen die konkrete Einrichtung für die gängigsten Clients.&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="claude-code"&gt;Claude Code&lt;/h2&gt;&#10;&lt;p&gt;Dieses Repository bringt bereits eine passende &lt;a href="https://docs.claude.com/en/docs/claude-code/mcp"&gt;.mcp.json&lt;/a&gt;&#10;mit:&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;{&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;mcpServers&amp;#34;&lt;/span&gt;: {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;databridge&amp;#34;&lt;/span&gt;: {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;type&amp;#34;&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;http&amp;#34;&lt;/span&gt;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;url&amp;#34;&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;${DATABRIDGE_MCP_URL:-http://localhost:7062}/api/mcp?code=${DATABRIDGE_FUNCTION_KEY:-local}&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;Lokal (Core Tools / Debugger):&lt;/strong&gt; Der lokale Function-Host prüft den Auth-Level &lt;code&gt;Function&lt;/code&gt; nicht&#10;— der Platzhalterwert &lt;code&gt;local&lt;/code&gt; in der URL reicht aus. Voraussetzung ist nur, dass die Function App&#10;tatsächlich auf &lt;strong&gt;Port 7062&lt;/strong&gt; läuft (nicht der &lt;code&gt;func&lt;/code&gt;-Standard 7071!):&lt;/p&gt;</description></item><item><title>Umgebungsvariablen</title><link>https://databridge.docs.dsyr.de/docs/einrichtung/umgebungsvariablen/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://databridge.docs.dsyr.de/docs/einrichtung/umgebungsvariablen/</guid><description>&lt;p&gt;Die DataBridge Function App wird über &lt;strong&gt;Anwendungseinstellungen&lt;/strong&gt; (Application Settings)&#10;konfiguriert. Diese sind im Azure Portal unter &lt;strong&gt;Function App → Einstellungen →&#10;Umgebungsvariablen&lt;/strong&gt; zu finden und zu bearbeiten.&lt;/p&gt;&#10;&lt;div class="alert alert-info" role="alert"&gt;&lt;div class="h4 alert-heading" role="heading"&gt;Seit v2.1 bereits beim Deployment setzbar&lt;/div&gt;&#10;&lt;p&gt;Der Timer-Ausdruck und alle vier Telemetrie-Einstellungen lassen sich direkt beim&#10;Deployment vorgeben — als Bicep-Parameter (Beispiele in&#10;&lt;code&gt;bicep/params/databridge.sample.bicepparam&lt;/code&gt;) oder im Marketplace-Assistenten unter&#10;&lt;strong&gt;Product Settings&lt;/strong&gt;. Ein nachträgliches Pflegen in den App-Settings ist damit nur noch&#10;für Änderungen im laufenden Betrieb nötig.&lt;/p&gt;&#10;&lt;/div&gt;</description></item><item><title>Release v2.1</title><link>https://databridge.docs.dsyr.de/docs/versionen/v2.1/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://databridge.docs.dsyr.de/docs/versionen/v2.1/</guid><description>&lt;h2 id="was-ist-neu"&gt;Was ist neu&lt;/h2&gt;&#10;&lt;h3 id="neue-funktionen"&gt;Neue Funktionen&lt;/h3&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;Statische Schlüsselwerte für Lookups&lt;/strong&gt;: Ein Lookup kann jetzt gegen einen fest hinterlegten Wert aufgelöst werden, ohne dass dafür ein Quellfeld existieren muss. Dazu wird im Schlüssel (&lt;code&gt;Keyvalue&lt;/code&gt;) statt eines &lt;code&gt;attributeName&lt;/code&gt; ein &lt;code&gt;StaticValue&lt;/code&gt; angegeben. Nützlich, wenn ein Lookup immer auf denselben Zieldatensatz zeigen soll (z.B. eine feste Kategorie oder ein Standard-Datensatz).&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;Mehrere Ziel-Schlüssel je Mapping mit Rangfolge&lt;/strong&gt;: Ein Table-Mapping bzw. ein Lookup kann nun mehrere Ziel-Schlüssel (&lt;code&gt;TargetKeys&lt;/code&gt;) besitzen. Die Schlüssel werden anhand des neuen Felds &lt;code&gt;KeyRank&lt;/code&gt; in aufsteigender Reihenfolge geprüft; sobald ein Schlüssel im Zielsystem einen Datensatz findet, wird dieser verwendet und die weiteren Schlüssel werden übersprungen. Damit lassen sich unterschiedliche Schlüssel gegen das CRM zulassen (z.B. zuerst eine externe ID, danach ersatzweise eine Nummer). Bestehende Mappings mit einem einzelnen &lt;code&gt;TargetKey&lt;/code&gt; funktionieren unverändert weiter.&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;Automatische Anlage bei Lookups abschaltbar&lt;/strong&gt;: Über die neue Option &lt;code&gt;DoNotCreate&lt;/code&gt; am Lookup lässt sich steuern, dass ein nicht gefundener Ziel-Datensatz &lt;strong&gt;nicht&lt;/strong&gt; automatisch angelegt wird. Ist die Option gesetzt, wird der Lookup nur aufgelöst, wenn der Datensatz bereits existiert — andernfalls bleibt das Feld leer, statt einen neuen Datensatz zu erzeugen.&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;String-zu-Decimal-Konvertierung&lt;/strong&gt;: Der Decimal-Resolver akzeptiert jetzt auch Quellwerte vom Typ &lt;code&gt;string&lt;/code&gt; und wandelt sie in einen Dezimalwert um (Interpretation im Format &lt;code&gt;en-US&lt;/code&gt;, d.h. Punkt als Dezimaltrennzeichen). Leere Strings werden zu &lt;code&gt;null&lt;/code&gt;, nicht konvertierbare Werte werfen wie bisher einen Fehler.&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;Vorab-Zwischenspeicherung von Lookups (Pre-Caching)&lt;/strong&gt;: Beim Verarbeiten eines Batches werden benötigte Lookup-Werte vorab gebündelt aufgelöst und zwischengespeichert. Dadurch werden wiederholte Einzelabfragen gegen das Zielsystem vermieden, was die Verarbeitung großer Änderungsmengen beschleunigt.&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;Sampling von Abhängigkeiten (Dependencies)&lt;/strong&gt;: Ausgehende Aufrufe an Quell- und Zielsysteme (D365 OData, SQL, Table Storage, Service Bus) werden von Application Insights automatisch als Abhängigkeiten erfasst und verursachten bisher den Großteil des Datenvolumens — bei minutengenauem Polling ein Vielfaches aller Log-Einträge zusammen. Diese Aufrufe werden nun gefiltert: Fehlgeschlagene sowie langsame Aufrufe werden immer vollständig gesendet, erfolgreiche und schnelle nur zu einem konfigurierbaren Anteil (Standard: 10 %). Das reduziert das tägliche Datenvolumen erheblich; Exceptions, Requests und alle Log-Einträge eines Fehler-Laufs bleiben unverändert vollständig erhalten. Steuerbar über die neuen Einstellungen &lt;code&gt;TELEMETRY_DEPENDENCY_SAMPLE_RATE&lt;/code&gt; und &lt;code&gt;TELEMETRY_DEPENDENCY_SLOW_MS&lt;/code&gt;; Details unter &lt;a href="../../betrieb/logging/"&gt;Betrieb → Logging&lt;/a&gt;.&lt;/p&gt;&#10;&lt;div class="alert alert-warning" role="alert"&gt;&lt;div class="h4 alert-heading" role="heading"&gt;Zu beachten&lt;/div&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;</description></item><item><title>Container-Betrieb</title><link>https://databridge.docs.dsyr.de/docs/einrichtung/container-betrieb/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://databridge.docs.dsyr.de/docs/einrichtung/container-betrieb/</guid><description>&lt;p&gt;Die DataBridge lässt sich als Container-Image bauen und betreiben. Das Image basiert auf&#10;der Azure-Functions-Laufzeit und enthält dieselbe Anwendung wie das reguläre Deployment.&lt;/p&gt;&#10;&lt;div class="alert alert-warning" role="alert"&gt;&lt;div class="h4 alert-heading" role="heading"&gt;Beta — nicht für den Kundenbetrieb&lt;/div&gt;&#10;&lt;p&gt;Der Container-Betrieb ist eine &lt;strong&gt;Beta-Funktion&lt;/strong&gt; und &lt;strong&gt;nicht für den produktiven&#10;Kundenbetrieb&lt;/strong&gt; vorgesehen. Auch der auf dieser Seite beschriebene Weg selbst ist noch&#10;&lt;strong&gt;Beta&lt;/strong&gt;: Abläufe, Dateinamen und Parameter können sich ohne Ankündigung ändern.&lt;/p&gt;&#10;&lt;p&gt;Für Kundeninstallationen gilt weiterhin der reguläre Weg über den&#10;&lt;a href="../installation/"&gt;Azure Marketplace oder Bicep&lt;/a&gt;.&lt;/p&gt;&#10;&lt;p&gt;Wer die DataBridge als Container einsetzen möchte, wendet sich bitte vorab an WYSA —&#10;dort wird der konkrete Anwendungsfall geprüft und der aktuelle Stand mitgeteilt.&lt;/p&gt;&#10;&lt;/div&gt;</description></item><item><title>Konnektoren</title><link>https://databridge.docs.dsyr.de/docs/konnektoren/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://databridge.docs.dsyr.de/docs/konnektoren/</guid><description>&lt;p&gt;Jedes Quell- oder Zielsystem wird über einen &lt;strong&gt;Konnektor&lt;/strong&gt; angebunden. Ein Konnektor&#10;übernimmt die systemspezifische Kommunikation: Authentifizierung, Datenabfrage,&#10;Änderungserkennung und das Schreiben von Datensätzen.&lt;/p&gt;&#10;&lt;h2 id="unterstützte-konnektoren"&gt;Unterstützte Konnektoren&lt;/h2&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Konnektor&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Beschreibung&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th style="text-align: center"&gt;Lesen&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th style="text-align: center"&gt;Job-Filter&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th style="text-align: center"&gt;Schreiben&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Status&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://databridge.docs.dsyr.de/docs/konnektoren/d365bc/"&gt;D365BC&lt;/a&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Dynamics 365 Business Central&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: center"&gt;✅&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: center"&gt;✅&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: center"&gt;✅&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Freigegeben&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://databridge.docs.dsyr.de/docs/konnektoren/d365ce/"&gt;D365CE&lt;/a&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Dynamics 365 / Dataverse&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: center"&gt;✅&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: center"&gt;✅&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: center"&gt;✅&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Freigegeben&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://databridge.docs.dsyr.de/docs/konnektoren/d365nav/"&gt;D365NAV&lt;/a&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Microsoft Dynamics NAV&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: center"&gt;✅&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: center"&gt;✅&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: center"&gt;✅&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Freigegeben&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://databridge.docs.dsyr.de/docs/konnektoren/mssql/"&gt;MSSQL&lt;/a&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Microsoft SQL Server&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: center"&gt;⚠️ Preview&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: center"&gt;✅&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: center"&gt;—&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Preview&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://databridge.docs.dsyr.de/docs/konnektoren/mysql/"&gt;MySQL&lt;/a&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;MySQL / MariaDB&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: center"&gt;⚠️ Preview&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: center"&gt;—&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: center"&gt;—&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Preview, nicht produktionsreif&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://databridge.docs.dsyr.de/docs/konnektoren/oracle/"&gt;Oracle&lt;/a&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Oracle Database&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: center"&gt;⚠️ Preview&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: center"&gt;—&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: center"&gt;—&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Preview, nicht produktionsreif&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://databridge.docs.dsyr.de/docs/konnektoren/pgsql/"&gt;PostgreSQL&lt;/a&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;PostgreSQL&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: center"&gt;⚠️ Preview&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: center"&gt;—&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: center"&gt;—&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Preview&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://databridge.docs.dsyr.de/docs/konnektoren/openapi/"&gt;OpenAPI&lt;/a&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Generische REST-API über OpenAPI-Spezifikation&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: center"&gt;✅&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: center"&gt;⚠️ API-abhängig&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td style="text-align: center"&gt;✅ (inkl. Löschen)&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;In Entwicklung&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;p&gt;Die Konnektoren D365BC, D365CE und D365NAV kommunizieren über HTTP/OData-APIs.&#10;MSSQL, MySQL, Oracle und PostgreSQL verwenden direkte Datenbankverbindungen (ADO.NET).&#10;Der OpenAPI-Konnektor kommuniziert ebenfalls über HTTP, leitet Pfade, Wrapper-Schlüssel und&#10;Feldtypen jedoch aus einer OpenAPI-Spezifikation ab, statt sie fest zu verdrahten.&lt;/p&gt;</description></item><item><title>MSSQL — Microsoft SQL Server</title><link>https://databridge.docs.dsyr.de/docs/konnektoren/mssql/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://databridge.docs.dsyr.de/docs/konnektoren/mssql/</guid><description>&lt;div class="alert alert-warning" role="alert"&gt;&lt;div class="h4 alert-heading" role="heading"&gt;Preview&lt;/div&gt;&#10;&lt;p&gt;Der MSSQL-Konnektor ist als &lt;strong&gt;Vorabversion&lt;/strong&gt; eingestuft. Lesen ist funktionsfähig,&#10;Schreiben wird nicht unterstützt. Vor einem produktiven Einsatz bitte WYSA kontaktieren.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;Der MSSQL-Konnektor ermöglicht das Lesen von Daten aus &lt;strong&gt;Microsoft SQL Server&lt;/strong&gt;-Datenbanken&#10;(OnPremise und Azure SQL) und deren Übertragung in andere Systeme.&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Eigenschaft&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Wert&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Lesen&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;⚠️ Preview&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Schreiben&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;— nicht unterstützt&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Job-Filter&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;✅ wird als &lt;code&gt;WHERE&lt;/code&gt;-Klausel übernommen&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Status&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Preview&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;p&gt;Wie die übrigen drei SQL-Konnektoren wertet MSSQL den Filter des Jobs aus und erzeugt&#10;gültiges Paging für sein Datenbanksystem.&lt;/p&gt;</description></item><item><title>Updates &amp; Upgrades</title><link>https://databridge.docs.dsyr.de/docs/betrieb/updates/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://databridge.docs.dsyr.de/docs/betrieb/updates/</guid><description>&lt;p&gt;Diese Seite beschreibt das &lt;strong&gt;Vorgehen&lt;/strong&gt; bei einem Update. Die vollständigen Änderungen und&#10;Installationshinweise je Release stehen in der &lt;a href="../../versionen/"&gt;Versionshistorie&lt;/a&gt;.&lt;/p&gt;&#10;&lt;h2 id="vorgehen-bei-einem-update"&gt;Vorgehen bei einem Update&lt;/h2&gt;&#10;&lt;p&gt;Die Konfiguration in Table Storage bleibt bei einem Update unverändert — es sei denn, ein&#10;Breaking Change erfordert Anpassungen.&lt;/p&gt;&#10;&lt;h3 id="schritte"&gt;Schritte&lt;/h3&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;&lt;strong&gt;Release Notes prüfen&lt;/strong&gt; — Breaking Changes und Installationshinweise des Zielrelease&#10;und &lt;strong&gt;aller dazwischenliegenden&lt;/strong&gt; Versionen lesen (&lt;a href="../../versionen/"&gt;Versionshistorie&lt;/a&gt;)&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Wartungsfenster einplanen&lt;/strong&gt; — &lt;code&gt;GetChanges&lt;/code&gt; über ein App-Setting deaktivieren:&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;AzureWebJobs.GetChanges.Disabled = true&#10;&lt;/code&gt;&lt;/pre&gt;Bei Bedarf lassen sich die Verarbeiter analog abschalten&#10;(&lt;code&gt;AzureWebJobs.ProcessStandardQueueItems.Disabled&lt;/code&gt; usw.)&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Warten&lt;/strong&gt;, bis alle Queue-Nachrichten verarbeitet wurden (Queue-Länge im Azure Portal&#10;prüfen)&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Neue Version einspielen&lt;/strong&gt; — je nach Betriebsart:&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;Container:&lt;/strong&gt; Image-Tag auf die neue Version setzen&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Marketplace:&lt;/strong&gt; Assistenten erneut durchlaufen (bei unveränderten Standardwerten&#10;ergibt sich keine Änderung an bestehenden Einstellungen)&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Bicep / Pipeline:&lt;/strong&gt; Deployment erneut ausführen&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Zip-Upload:&lt;/strong&gt; Paket über die Pipeline oder manuell einspielen&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Konfigurationsanpassungen&lt;/strong&gt; aus den Installationshinweisen vornehmen&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;GetChanges wieder aktivieren:&lt;/strong&gt;&#10;&lt;pre tabindex="0"&gt;&lt;code&gt;AzureWebJobs.GetChanges.Disabled = false (oder Eintrag löschen)&#10;&lt;/code&gt;&lt;/pre&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Ersten Lauf beobachten&lt;/strong&gt; — z. B. über die Custom Metric &lt;code&gt;ChangesDetected&lt;/code&gt; je Job oder&#10;die Fehlerquoten-Abfrage unter&#10;&lt;a href="../logging/performance/"&gt;Performance &amp;amp; Laufzeiten&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;div class="alert alert-info" role="alert"&gt;&lt;div class="h4 alert-heading" role="heading"&gt;App-Settings lösen einen Neustart aus&lt;/div&gt;&#10;&lt;p&gt;Jede Änderung an den App-Settings startet die Function App neu. Das ist beim Ein- und&#10;Ausschalten der Funktionen in Schritt 2 und 6 eingeplant.&lt;/p&gt;&#10;&lt;/div&gt;</description></item><item><title>Release v2.0</title><link>https://databridge.docs.dsyr.de/docs/versionen/v2.0/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://databridge.docs.dsyr.de/docs/versionen/v2.0/</guid><description>&lt;h2 id="was-ist-neu"&gt;Was ist neu&lt;/h2&gt;&#10;&lt;h3 id="neue-funktionen"&gt;Neue Funktionen&lt;/h3&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;Containerisierung mit Docker Compose&lt;/strong&gt;: Die DataBridge kann nun direkt über &lt;code&gt;docker compose&lt;/code&gt; (bzw. Podman) lokal gestartet werden. Eine neue &lt;code&gt;compose.yml&lt;/code&gt; sowie eine Beispiel-Umgebungsdatei (&lt;code&gt;.podman/podman.env.sample&lt;/code&gt;) sind enthalten. Das Start-Skript &lt;code&gt;start-local.sh&lt;/code&gt; / &lt;code&gt;start-local.ps1&lt;/code&gt; baut den Container, startet ihn und gibt alle HTTP-Trigger-URLs inkl. Authentication-Key direkt aus.&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;Robustere Initialisierung in GetChanges&lt;/strong&gt;: Die Timer-Funktion &lt;code&gt;GetChanges&lt;/code&gt; initialisiert den CoreService jetzt threadsicher (Mutex-Pattern). Schlägt die Initialisierung fehl, wird sie beim nächsten Timer-Durchlauf automatisch erneut versucht (Self-Repair) — analog zu &lt;code&gt;ProcessQueueItems&lt;/code&gt;.&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;ASP.NET Core HTTP-Integration&lt;/strong&gt;: Die Azure Functions App nutzt nun das ASP.NET Core-Integrationsmodell (&lt;code&gt;ConfigureFunctionsWebApplication&lt;/code&gt;). Dies ist die empfohlene Methode ab .NET 8+ und ermöglicht vollständigere HTTP-Features.&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;Custom Metrics&lt;/strong&gt;: Die DataBridge sendet eigene, pre-aggregierte Metriken an Application Insights (Namespace &lt;code&gt;DataBridge&lt;/code&gt;). Erste Metrik: &lt;code&gt;ChangesDetected&lt;/code&gt; mit Dimension &lt;code&gt;JobName&lt;/code&gt; — Anzahl erkannter Änderungen pro Job und GetChanges-Lauf, inkl. Null-Werten. Sichtbar im Metrics Explorer und in der Tabelle &lt;code&gt;customMetrics&lt;/code&gt;; Details unter &lt;a href="../../betrieb/logging/"&gt;Betrieb → Logging&lt;/a&gt;.&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;Gepuffertes Logging mit selektiver App-Insights-Weiterleitung&lt;/strong&gt;: Alle Log-Einträge einer Funktionsausführung werden zunächst im Arbeitsspeicher gepuffert und erst am Ende der Ausführung — abhängig vom Ergebnis — selektiv an Azure Application Insights gesendet. Im Fehlerfall stehen damit auch alle Debug-Einträge rückwirkend zur Verfügung, ohne dass sie bei erfolgreichen Läufen Kosten verursachen. Das Verhalten lässt sich über die Umgebungsvariablen &lt;code&gt;TELEMETRY_CONTROL&lt;/code&gt; und &lt;code&gt;TELEMETRY_INFO_SAMPLE_RATE&lt;/code&gt; steuern. Eine vollständige Beschreibung befindet sich unter &lt;a href="../../betrieb/logging/"&gt;Betrieb → Logging&lt;/a&gt;.&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;strong&gt;Trace-Level für Live-Diagnose&lt;/strong&gt;: Log-Einträge auf Level &lt;code&gt;Trace&lt;/code&gt; (&lt;code&gt;LogTrace&lt;/code&gt;) werden nie an Application Insights gesendet — auch nicht bei Fehler-Läufen. Sie sind ausschließlich live sichtbar: lokal in der Konsole bzw. im Container-Log, in Azure im Log Stream der Function App. Details unter &lt;a href="../../betrieb/logging/"&gt;Betrieb → Logging&lt;/a&gt;.&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;</description></item><item><title>Watermarks (watermark)</title><link>https://databridge.docs.dsyr.de/docs/konfiguration/watermarks/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://databridge.docs.dsyr.de/docs/konfiguration/watermarks/</guid><description>&lt;p&gt;Die Tabelle &lt;code&gt;watermark&lt;/code&gt; ist die Gedächtnisfunktion der DataBridge. Nach jedem&#10;Job-Lauf wird hier gespeichert, bis zu welchem Stand die Daten gelesen wurden.&#10;Beim nächsten Lauf startet der Quellabruf genau an diesem Punkt.&lt;/p&gt;&#10;&lt;p&gt;Diese Tabelle wird vom Deployment angelegt und zur Laufzeit automatisch befüllt —&#10;manuelle Einträge sind normalerweise nicht nötig. Es gibt jedoch Situationen, in denen&#10;ein gezielter Eingriff sinnvoll ist.&lt;/p&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="tabellenstruktur"&gt;Tabellenstruktur&lt;/h2&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Spalte&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Wert&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Beschreibung&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;PartitionKey&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;code&gt;watermark&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Fest vorgegeben — immer &lt;code&gt;watermark&lt;/code&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;RowKey&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Jobname&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Entspricht dem RowKey des zugehörigen Jobs in der &lt;code&gt;jobs&lt;/code&gt;-Tabelle&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Timestamp&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;automatisch&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Systemseitig gesetzt, nicht bearbeitbar&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;Watermark&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Letzter Stand&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Format abhängig vom &lt;code&gt;WatermarkType&lt;/code&gt; des Jobs (siehe unten)&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;LastCronRun&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Zeitstempel&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Beginn der letzten Ausführung des Jobs. Basis für die CRON-Intervallprüfung.&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;hr&gt;&#10;&lt;h2 id="watermark-typen"&gt;Watermark-Typen&lt;/h2&gt;&#10;&lt;p&gt;Der Typ wird im Job über das Feld &lt;code&gt;WatermarkType&lt;/code&gt; festgelegt und bestimmt,&#10;wie der gespeicherte Wert interpretiert wird.&lt;/p&gt;</description></item><item><title>MCP-Server</title><link>https://databridge.docs.dsyr.de/docs/mcp-server/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://databridge.docs.dsyr.de/docs/mcp-server/</guid><description>&lt;p&gt;Die dsyr.DataBridge unterstützt das &lt;a href="https://modelcontextprotocol.io/"&gt;Model Context Protocol (MCP)&lt;/a&gt;&#10;— den offenen Standard, über den KI-Assistenten strukturiert auf externe Systeme zugreifen. Ein&#10;eingebauter, &lt;strong&gt;read-only&lt;/strong&gt; MCP-Server macht dieselben Daten, die auch über die HTTP-APIs&#10;(&lt;code&gt;GetJobByRowKey&lt;/code&gt;, &lt;code&gt;GetMappingByRowKey&lt;/code&gt;) verfügbar sind, sowie die Service-Bus-Queue-Diagnose&#10;zusätzlich als &lt;strong&gt;MCP-Tools&lt;/strong&gt; ansprechbar — sodass ein KI-Assistent (Claude Code, GitHub Copilot,&#10;Microsoft 365 Copilot, …) direkt gegen eine laufende DataBridge-Instanz Fragen stellen kann, statt&#10;Tabellen manuell in Azure Storage Explorer oder per REST-Aufruf durchzusehen.&lt;/p&gt;</description></item><item><title>Ältere Releases</title><link>https://databridge.docs.dsyr.de/docs/versionen/aeltere-releases/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://databridge.docs.dsyr.de/docs/versionen/aeltere-releases/</guid><description>&lt;p&gt;Für die Versionen vor 2.0 existiert keine vollständige Release-Dokumentation. Überliefert&#10;sind die Breaking Changes der jeweiligen Übergänge — sie sind hier unverändert festgehalten,&#10;damit die Migrationshistorie nicht verloren geht.&lt;/p&gt;&#10;&lt;div class="alert alert-warning" role="alert"&gt;&lt;div class="h4 alert-heading" role="heading"&gt;Vor der Migration lesen&lt;/div&gt;&#10;&lt;p&gt;Wer von einer Version vor 2.0 aktualisiert, muss die Schritte &lt;strong&gt;aller&lt;/strong&gt; dazwischenliegenden&#10;Übergänge nacheinander durchführen — zusätzlich zu den Installationshinweisen aus&#10;&lt;a href="../v2.0/"&gt;v2.0&lt;/a&gt; und &lt;a href="../v2.1/"&gt;v2.1&lt;/a&gt;.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;h2 id="10--11"&gt;1.0 → 1.1&lt;/h2&gt;&#10;&lt;p&gt;&lt;strong&gt;Breaking Changes:&lt;/strong&gt;&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Einführung von vier neuen Service-Bus-Warteschlangen:&#10;&lt;code&gt;sbqignored&lt;/code&gt;, &lt;code&gt;sbqtransitivestandart&lt;/code&gt;, &lt;code&gt;sbqtransitivelow&lt;/code&gt;, &lt;code&gt;sbqtransitivehigh&lt;/code&gt;&lt;/li&gt;&#10;&lt;li&gt;Einführung der neuen Anwendungseinstellung &lt;code&gt;SkipOutdatedMessages&lt;/code&gt; in der Azure Function;&#10;beim Upgrade von 1.0 auf &lt;code&gt;false&lt;/code&gt; zu setzen&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;div class="alert alert-info" role="alert"&gt;&lt;div class="h4 alert-heading" role="heading"&gt;Schreibweise der Queue-Namen&lt;/div&gt;&#10;&lt;p&gt;Der Name &lt;code&gt;sbqtransitivestandart&lt;/code&gt; ist im Produkt genau so geschrieben (mit &lt;code&gt;t&lt;/code&gt; am Ende)&#10;und darf beim Anlegen der Warteschlange nicht „korrigiert&amp;quot; werden — sonst findet die&#10;DataBridge die Queue nicht.&lt;/p&gt;&#10;&lt;/div&gt;</description></item><item><title>Betrieb &amp; Wartung</title><link>https://databridge.docs.dsyr.de/docs/betrieb/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://databridge.docs.dsyr.de/docs/betrieb/</guid><description>&lt;p&gt;Eine laufende DataBridge-Instanz braucht Beobachtung. Dieses Kapitel erklärt, wie man&#10;den Betrieb nachvollzieht, Fehler diagnostiziert, Warnungen automatisiert und&#10;die Instanz auf neue Versionen aktualisiert.&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Seite&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Inhalt&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://databridge.docs.dsyr.de/docs/betrieb/logging/"&gt;Logging&lt;/a&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Wie Logs entstehen, Sampling von Traces und Abhängigkeiten, Custom Metrics, KQL-Abfragen&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://databridge.docs.dsyr.de/docs/betrieb/monitoring/"&gt;Monitoring &amp;amp; Alerts&lt;/a&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Azure Alert Rules, Action Groups, empfohlene Schwellwerte&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://databridge.docs.dsyr.de/docs/betrieb/grafana-dashboard/"&gt;Grafana-Dashboard&lt;/a&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Automatisch ausgeliefertes Betriebsdashboard in Application Insights&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://databridge.docs.dsyr.de/docs/betrieb/updates/"&gt;Updates &amp;amp; Upgrades&lt;/a&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Upgrade-Pfade zwischen Versionen, Breaking Changes&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;</description></item><item><title>MySQL — MySQL / MariaDB</title><link>https://databridge.docs.dsyr.de/docs/konnektoren/mysql/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://databridge.docs.dsyr.de/docs/konnektoren/mysql/</guid><description>&lt;div class="alert alert-warning" role="alert"&gt;&lt;div class="h4 alert-heading" role="heading"&gt;Preview — nicht produktionsreif&lt;/div&gt;&#10;&lt;p&gt;Der MySQL-Konnektor ist als &lt;strong&gt;Vorabversion&lt;/strong&gt; eingestuft und für den produktiven Einsatz&#10;derzeit &lt;strong&gt;nicht geeignet&lt;/strong&gt;. Er ist weder freigegeben noch für den Regelbetrieb&#10;abgesichert.&lt;/p&gt;&#10;&lt;p&gt;Wer MySQL oder MariaDB anbinden möchte, wendet sich bitte vorab an WYSA — dort wird der&#10;konkrete Anwendungsfall geprüft und der aktuelle Stand mitgeteilt.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;Der MySQL-Konnektor ist für das Lesen von Daten aus &lt;strong&gt;MySQL&lt;/strong&gt;- und &lt;strong&gt;MariaDB&lt;/strong&gt;-Datenbanken&#10;vorgesehen.&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Eigenschaft&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Wert&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Lesen&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;⚠️ Preview, nicht produktionsreif&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Schreiben&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;— nicht unterstützt&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Job-Filter&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;✅ wird als &lt;code&gt;WHERE&lt;/code&gt;-Klausel übernommen&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Status&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Preview&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;p&gt;Wie beim &lt;a href="../mssql/"&gt;MSSQL-Konnektor&lt;/a&gt; wird der Inhalt des Feldes &lt;code&gt;Filter&lt;/code&gt; am Job — nach&#10;Ersetzung des Platzhalters &lt;code&gt;%watermark%&lt;/code&gt; — wörtlich hinter &lt;code&gt;WHERE&lt;/code&gt; eingesetzt. Ohne Eintrag&#10;im Feld &lt;code&gt;Filter&lt;/code&gt; entsteht keine &lt;code&gt;WHERE&lt;/code&gt;-Klausel und der Job liest bei jedem Lauf die&#10;vollständige Tabelle. Der Ausdruck muss gültiges MySQL-SQL sein; es findet keine&#10;Parametrisierung statt. Details zur Filter-Syntax siehe &lt;a href="../mssql/#filter--die-where-klausel-kommt-aus-dem-job"&gt;MSSQL — Filter&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Oracle — Oracle Database</title><link>https://databridge.docs.dsyr.de/docs/konnektoren/oracle/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://databridge.docs.dsyr.de/docs/konnektoren/oracle/</guid><description>&lt;div class="alert alert-warning" role="alert"&gt;&lt;div class="h4 alert-heading" role="heading"&gt;Preview — nicht produktionsreif&lt;/div&gt;&#10;&lt;p&gt;Der Oracle-Konnektor ist als &lt;strong&gt;Vorabversion&lt;/strong&gt; eingestuft und für den produktiven Einsatz&#10;derzeit &lt;strong&gt;nicht geeignet&lt;/strong&gt;. Er ist weder freigegeben noch für den Regelbetrieb&#10;abgesichert.&lt;/p&gt;&#10;&lt;p&gt;Wer eine Oracle-Datenbank anbinden möchte, wendet sich bitte vorab an WYSA — dort wird der&#10;konkrete Anwendungsfall geprüft und der aktuelle Stand mitgeteilt.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;Der Oracle-Konnektor ist für das Lesen von Daten aus &lt;strong&gt;Oracle-Database&lt;/strong&gt;-Instanzen&#10;vorgesehen.&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Eigenschaft&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Wert&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Lesen&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;⚠️ Preview, nicht produktionsreif&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Schreiben&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;— nicht unterstützt&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Job-Filter&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;✅ wird als &lt;code&gt;WHERE&lt;/code&gt;-Klausel übernommen&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Status&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Preview&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;p&gt;Wie beim &lt;a href="../mssql/"&gt;MSSQL-Konnektor&lt;/a&gt; wird der Inhalt des Feldes &lt;code&gt;Filter&lt;/code&gt; am Job — nach&#10;Ersetzung des Platzhalters &lt;code&gt;%watermark%&lt;/code&gt; — wörtlich hinter &lt;code&gt;WHERE&lt;/code&gt; eingesetzt. Ohne Eintrag&#10;im Feld &lt;code&gt;Filter&lt;/code&gt; entsteht keine &lt;code&gt;WHERE&lt;/code&gt;-Klausel und der Job liest bei jedem Lauf die&#10;vollständige Tabelle. Der Ausdruck muss gültiges PL/SQL sein; es findet keine&#10;Parametrisierung statt. Details zur Filter-Syntax siehe &lt;a href="../mssql/#filter--die-where-klausel-kommt-aus-dem-job"&gt;MSSQL — Filter&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Versionshistorie</title><link>https://databridge.docs.dsyr.de/docs/versionen/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://databridge.docs.dsyr.de/docs/versionen/</guid><description>&lt;p&gt;Hier findet sich die Release-Dokumentation für alle Versionen der dsyr.DataBridge.&lt;/p&gt;&#10;&lt;p&gt;Jede Version beschreibt die wesentlichen Änderungen aus Anwender-Sicht sowie&#10;Installationshinweise für Administratoren, die ein bestehendes System aktualisieren. Die&#10;Details zu etwaigen Breaking Changes stehen jeweils im Abschnitt &lt;strong&gt;Installationshinweise&lt;/strong&gt;&#10;der verlinkten Release-Seite.&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Release&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Schwerpunkt&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Breaking Change&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://databridge.docs.dsyr.de/docs/versionen/v2.3/"&gt;v2.3&lt;/a&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Tabellen- und Spalten-Metadaten der SQL-Connectoren (MSSQL, MySQL, Oracle, PostgreSQL) über den MCP-Server, Mapping-Abfrage per Name, schlankeres NAV-Logging, Managed Identity (System/User-assigned) für D365BC und D365CE mit neuem Verbindungsfeld &lt;code&gt;authmethod&lt;/code&gt;; für Entwickler: lokale Podman-Testumgebung mit HTTP-Mocks, Service-Bus-Emulator und Debug-Modus&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;✅&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://databridge.docs.dsyr.de/docs/versionen/v2.2/"&gt;v2.2&lt;/a&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Neuer OpenAPI-Connector, eingebauter MCP-Server für KI-Assistenten, Action-Jobs, System-assigned Managed Identity für die Function App, Verbesserungen am Grafana-Dashboard&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;✅&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://databridge.docs.dsyr.de/docs/versionen/v2.1/"&gt;v2.1&lt;/a&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Erweiterte Lookup-Funktionen, Sampling von Abhängigkeiten, Grafana-Dashboard, Watermark-Korrekturen&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;✅&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://databridge.docs.dsyr.de/docs/versionen/v2.0/"&gt;v2.0&lt;/a&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Umstellung auf .NET 10, Containerisierung, gepuffertes Logging, Custom Metrics&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;❗&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;a href="https://databridge.docs.dsyr.de/docs/versionen/aeltere-releases/"&gt;Ältere Releases&lt;/a&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Migrationshinweise für die Übergänge 1.0 → 1.1 und 1.1 → 2.0&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;❗&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;div class="alert alert-info" role="alert"&gt;&lt;div class="h4 alert-heading" role="heading"&gt;Vor einem Update lesen&lt;/div&gt;&#10;&lt;p&gt;Die Abschnitte &lt;strong&gt;Installationshinweise&lt;/strong&gt; der jeweiligen Version enthalten die Details zu&#10;Breaking Changes und notwendigen Migrationsschritten. Beim Überspringen von Versionen sind&#10;die Hinweise &lt;strong&gt;aller&lt;/strong&gt; dazwischenliegenden Releases zu beachten — die Spalte oben zeigt&#10;nur, ob ein Übergang &lt;strong&gt;überhaupt&lt;/strong&gt; einen Breaking Change enthält, keine vollständige Liste.&lt;/p&gt;&#10;&lt;/div&gt;</description></item><item><title>PostgreSQL</title><link>https://databridge.docs.dsyr.de/docs/konnektoren/pgsql/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://databridge.docs.dsyr.de/docs/konnektoren/pgsql/</guid><description>&lt;div class="alert alert-warning" role="alert"&gt;&lt;div class="h4 alert-heading" role="heading"&gt;Preview&lt;/div&gt;&#10;&lt;p&gt;Der PostgreSQL-Konnektor ist als &lt;strong&gt;Vorabversion&lt;/strong&gt; eingestuft. Lesen ist funktionsfähig,&#10;Schreiben wird nicht unterstützt. Vor einem produktiven Einsatz bitte WYSA kontaktieren.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;Der PostgreSQL-Konnektor ermöglicht das Lesen von Daten aus &lt;strong&gt;PostgreSQL&lt;/strong&gt;-Datenbanken&#10;und deren Übertragung in andere Systeme.&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Eigenschaft&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Wert&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Lesen&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;⚠️ Preview&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Schreiben&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;— nicht unterstützt&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Job-Filter&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;✅ wird als &lt;code&gt;WHERE&lt;/code&gt;-Klausel übernommen&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Status&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Preview&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;p&gt;Wie beim &lt;a href="../mssql/"&gt;MSSQL-Konnektor&lt;/a&gt; wird der Inhalt des Feldes &lt;code&gt;Filter&lt;/code&gt; am Job — nach&#10;Ersetzung des Platzhalters &lt;code&gt;%watermark%&lt;/code&gt; — wörtlich hinter &lt;code&gt;WHERE&lt;/code&gt; eingesetzt. Ohne Eintrag&#10;im Feld &lt;code&gt;Filter&lt;/code&gt; entsteht keine &lt;code&gt;WHERE&lt;/code&gt;-Klausel und der Job liest bei jedem Lauf die&#10;vollständige Tabelle. Der Ausdruck muss gültiges PostgreSQL-SQL sein; es findet keine&#10;Parametrisierung statt. Details zur Filter-Syntax siehe &lt;a href="../mssql/#filter--die-where-klausel-kommt-aus-dem-job"&gt;MSSQL — Filter&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>OpenAPI — generischer REST-Konnektor</title><link>https://databridge.docs.dsyr.de/docs/konnektoren/openapi/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://databridge.docs.dsyr.de/docs/konnektoren/openapi/</guid><description>&lt;p&gt;Der OpenAPI-Konnektor verbindet die DataBridge mit einer &lt;strong&gt;beliebigen REST-API&lt;/strong&gt;, für die&#10;eine OpenAPI-Spezifikation (JSON oder YAML) existiert. Anders als bei den übrigen HTTP-&#10;Konnektoren werden Pfade, Wrapper-Schlüssel (&lt;code&gt;{&amp;quot;clients&amp;quot;: [...]}&lt;/code&gt; vs. &lt;code&gt;{&amp;quot;client&amp;quot;: {...}}&lt;/code&gt;)&#10;und Feldtypen &lt;strong&gt;nicht&lt;/strong&gt; pro Ressource fest verdrahtet, sondern zur Laufzeit aus der&#10;Spezifikation aufgelöst. Ein Mapping muss dafür lediglich &lt;code&gt;SourceTable&lt;/code&gt;/&lt;code&gt;TargetTable&lt;/code&gt; auf&#10;den Ressourcennamen setzen (z. B. &lt;code&gt;clients&lt;/code&gt;).&lt;/p&gt;&#10;&lt;table&gt;&#10;&#9;&lt;thead&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Eigenschaft&lt;/th&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;th&gt;Wert&lt;/th&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/thead&gt;&#10;&#9;&lt;tbody&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Lesen&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;✅ unterstützt&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Schreiben (Create/Update)&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;✅ unterstützt&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Löschen&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;✅ unterstützt&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Aktionsaufrufe (InvokeAction)&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;✅ unterstützt&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Job-Filter&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;⚠️ wird als Query-String an die Liste-Anfrage angehängt (kein &lt;code&gt;$filter&lt;/code&gt;-Standard, API-abhängig)&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&#9;&#9;&lt;tr&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;Status&lt;/td&gt;&#10;&#9;&#9;&#9;&#9;&#9;&lt;td&gt;&lt;strong&gt;In Entwicklung / Preview&lt;/strong&gt;&lt;/td&gt;&#10;&#9;&#9;&#9;&lt;/tr&gt;&#10;&#9;&lt;/tbody&gt;&#10;&lt;/table&gt;&#10;&lt;div class="alert alert-warning" role="alert"&gt;&lt;div class="h4 alert-heading" role="heading"&gt;Status: in Entwicklung&lt;/div&gt;&#10;&lt;p&gt;Der Konnektor befindet sich noch in aktiver Entwicklung. Die OpenAPI-Spezifikation wird über den&#10;in &lt;code&gt;openApiSpecUrl&lt;/code&gt; konfigurierten Endpunkt geladen. Bekannte Einschränkungen:&lt;/p&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Der Diagnose-Endpunkt &lt;code&gt;CheckList&lt;/code&gt; meldet für OpenAPI-Mappings fälschlich „could not find table“.&#10;Er vergleicht die Tabellennamen mit den Pfaden der Spezifikation (&lt;code&gt;/v1/customers&lt;/code&gt;) statt mit&#10;den Ressourcennamen (&lt;code&gt;customers&lt;/code&gt;). Auf das Lesen und Schreiben hat das keinen Einfluss.&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;get_connector_table_schema&lt;/code&gt; weist keinen Primärschlüssel aus. Intern erkennt der Konnektor&#10;den Schlüssel am Namen der Property (&lt;code&gt;id&lt;/code&gt;, &lt;code&gt;Id&lt;/code&gt;, &lt;code&gt;ID&lt;/code&gt;, &lt;code&gt;uuid&lt;/code&gt;, &lt;code&gt;key&lt;/code&gt;).&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/div&gt;</description></item><item><title>D365BC</title><link>https://databridge.docs.dsyr.de/themen/d365bc/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://databridge.docs.dsyr.de/themen/d365bc/</guid><description/></item><item><title>D365CE</title><link>https://databridge.docs.dsyr.de/themen/d365ce/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://databridge.docs.dsyr.de/themen/d365ce/</guid><description/></item><item><title>D365NAV</title><link>https://databridge.docs.dsyr.de/themen/d365nav/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://databridge.docs.dsyr.de/themen/d365nav/</guid><description/></item><item><title>Docker / Podman</title><link>https://databridge.docs.dsyr.de/themen/docker-podman/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://databridge.docs.dsyr.de/themen/docker-podman/</guid><description/></item><item><title>Entwickler</title><link>https://databridge.docs.dsyr.de/themen/entwickler/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://databridge.docs.dsyr.de/themen/entwickler/</guid><description/></item><item><title>Mapping</title><link>https://databridge.docs.dsyr.de/themen/mapping/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://databridge.docs.dsyr.de/themen/mapping/</guid><description/></item><item><title>MCP-Server</title><link>https://databridge.docs.dsyr.de/themen/mcp-server/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://databridge.docs.dsyr.de/themen/mcp-server/</guid><description/></item><item><title>MSSQL</title><link>https://databridge.docs.dsyr.de/themen/mssql/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://databridge.docs.dsyr.de/themen/mssql/</guid><description/></item><item><title>MySQL</title><link>https://databridge.docs.dsyr.de/themen/mysql/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://databridge.docs.dsyr.de/themen/mysql/</guid><description/></item><item><title>Nutzer</title><link>https://databridge.docs.dsyr.de/themen/nutzer/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://databridge.docs.dsyr.de/themen/nutzer/</guid><description/></item><item><title>OpenAPI</title><link>https://databridge.docs.dsyr.de/themen/openapi/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://databridge.docs.dsyr.de/themen/openapi/</guid><description/></item><item><title>Oracle</title><link>https://databridge.docs.dsyr.de/themen/oracle/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://databridge.docs.dsyr.de/themen/oracle/</guid><description/></item><item><title>PostgreSQL</title><link>https://databridge.docs.dsyr.de/themen/postgresql/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://databridge.docs.dsyr.de/themen/postgresql/</guid><description/></item><item><title>Service Bus</title><link>https://databridge.docs.dsyr.de/themen/service-bus/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://databridge.docs.dsyr.de/themen/service-bus/</guid><description/></item><item><title>dsyr.DataBridge</title><link>https://databridge.docs.dsyr.de/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://databridge.docs.dsyr.de/</guid><description>&lt;link rel="preload" as="image" href="https://databridge.docs.dsyr.de/featured-background.svg" media="(max-width: 1200px)"&gt;&#10;&lt;link rel="preload" as="image" href="https://databridge.docs.dsyr.de/featured-background.svg" media="(min-width: 1200px)"&gt;&#10;&lt;style&gt;&#10;#td-cover-block-0 {&#10; background-image: url(/featured-background.svg);&#10;}&#10;@media only screen and (min-width: 1200px) {&#10; #td-cover-block-0 {&#10; background-image: url(/featured-background.svg);&#10; }&#10;}&#10;&lt;/style&gt;&#10;&lt;section id="td-cover-block-0" class="row td-cover-block td-cover-block--height-full js-td-cover td-overlay td-overlay--dark -bg-dark" &gt;&#10; &lt;div class="col-12"&gt;&#10; &lt;div class="container td-overlay__inner"&gt;&#10; &lt;div class="text-center"&gt;&#10; &lt;h1 class="display-1 mt-0 mt-md-5 pb-4"&gt;dsyr.DataBridge&lt;/h1&gt;&#10; &lt;div class="pt-3 lead"&gt;&#10; &#10;&lt;p class="lead mt-5"&gt;Ihre Geschäftsdaten – synchron, automatisch und sicher in Ihrer eigenen Azure-Umgebung.&lt;/p&gt;&#10;&lt;a class="btn btn-lg btn-primary me-3 mb-4" href="https://databridge.docs.dsyr.de/docs/ueberblick/"&gt;&#10; Überblick &lt;i class="fas fa-circle-info ms-2"&gt;&lt;/i&gt;&#10;&lt;/a&gt;&#10;&lt;a class="btn btn-lg btn-secondary me-3 mb-4" href="https://databridge.docs.dsyr.de/docs/einrichtung/"&gt;&#10; Einrichtung starten &lt;i class="fas fa-arrow-right ms-2"&gt;&lt;/i&gt;&#10;&lt;/a&gt;&#10;&lt;p class="lead mt-4"&gt;Schluss mit Doppelpflege und manuellem Export.&lt;/p&gt;&#10;&#10;&#10;&#10;&lt;a class="btn btn-link text-info" href="#td-block-1" aria-label="Weiterlesen"&gt;&lt;i class="fa-solid fa-circle-chevron-down" style="font-size: 400%"&gt;&lt;/i&gt;&lt;/a&gt;&#10;&#10;&lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;/div&gt;&#10; &lt;/div&gt;&#10; &#10;&lt;/section&gt;&#10;&#10;&lt;div&gt;&lt;a id="td-block-1" class="td-anchor-no-extra-offset"&gt;&lt;/a&gt;&lt;/div&gt;&#10;&lt;section class="row td-box td-box--primary position-relative td-box--height-auto"&gt;&#10;&lt;div class="col-12"&gt;&#10;&lt;div class="container text-center td-arrow-down"&gt;&#10;&lt;div class="h4 mb-0"&gt;&#10;&lt;p&gt;Die &lt;strong&gt;dsyr.DataBridge&lt;/strong&gt; verbindet Microsoft Dynamics 365 Business Central mit Dataverse –&#10;und bei Bedarf weitere Systeme. Daten fließen automatisch dorthin, wo sie gebraucht werden,&#10;ohne dass sie jemals Ihr Haus verlassen.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;/section&gt;</description></item><item><title>Themen</title><link>https://databridge.docs.dsyr.de/themen/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://databridge.docs.dsyr.de/themen/</guid><description/></item><item><title>Watermark</title><link>https://databridge.docs.dsyr.de/themen/watermark/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://databridge.docs.dsyr.de/themen/watermark/</guid><description/></item></channel></rss>