Fähigkeiten-Katalog
Katalog aller Fähigkeiten der dsyr.DataBridge mit ihrer technischen Umsetzung.
Integration und Datenfluss
| Fähigkeit | Umsetzung |
|---|
| Change Detection (Pull) | GetChanges → ProcessJobsForRetrievalInOrderService; je Connector RetrieveChangesAsync (BC/NAV $filter, CE RetrieveEntityChangesRequest, SQL seitenweises SELECT, OpenAPI Query-String) |
| Orchestrierter Abruf | Durable: GetChangesOrchestrator, GetChangesActivity, Entity JobState |
| Asynchrone Entkopplung | Service Bus mit sieben Queues, ServiceBusService mit Batch bis 200 |
| Priorisierte Verarbeitung | JobPriorityType → Queue; drei Trigger |
| Reihenfolgensteuerung | Job.Order |
| Idempotentes Schreiben | Connector.Upsert/Delete; TargetKey/TargetKeys mit KeyRank, erster Treffer gewinnt |
| Aktions-Jobs | InvokeAction: Job-Action ohne CRUD-Bedeutung ruft einen benannten Endpunkt |
| Job-eigene Pfade | Source/Target am Job überschreiben SourceTable/TargetTable des Mappings |
| Eingebettete Kinder | EmbedChildren (nur CE als Quelle) |
| Response-Jobs | Upsert(..., responseMapping, job) → Response-Nachricht |
| Watermarking | WatermarkService + WatermarkValue; Typen date, datetime, string |
Konnektivität
| Fähigkeit | Umsetzung |
|---|
| D365 Business Central | BcConnector : HttpConnectorBase, OAuth2 / Basic / Managed Identity |
| D365 CE / Dataverse | CeConnector : ConnectorBase, ServiceClient (Connection-String oder url + Managed Identity) |
| D365 NAV | NavConnector : HttpConnectorBase |
| REST über OpenAPI | OpenApiConnector : HttpConnectorBase, Spec aus openApiSpecUrl |
| MSSQL, PostgreSQL, MySQL, Oracle | SqlConnectorBase<T>, nur lesend |
| Auth-Varianten HTTP | Basic, OAuth2 Client Credentials mit tokenUrl, API-Key, Managed Identity (explizit über authmethod) |
| Key-Vault-Bezug | keyVaultUrl in der Connection + DefaultAzureCredential |
| Schema-Metadaten | IConnector.GetTableNames, GetTableMetadata für alle Connector-Typen |
| Ad-hoc-HTTP | ExecuteHttpRequest (nur GET) |
| Fähigkeit | Umsetzung |
|---|
| Feld-Mapping | TableMapping + FieldMapping aus mappings |
| Typ-Coercion | AttributeResolver-Familien je Systemtyp |
| Metadaten-basierte Resolver-Wahl | TargetValueMapper je Connector, statische FrozenDictionary-Registry mit Coverage-Tests |
| Default-Werte | Target-Operationen DefaultValue, DefaultValueIfNullOrEmpty, DefaultValueMap |
| Option-/Picklist-Mapping | OptionMapping, CE-Resolver für Picklist, MultiSelect, State/Status |
| Lookup-Auflösung | Source-Operation LookupValue mit Cache; CE mit Batch-Pre-Caching; DoNotCreate |
| CE-Beziehungen | ActivityParty, LinkToRecord |
| ReadFromMessage | Wert aus der Nachricht übernehmen |
| Virtuelle Felder | _-Präfix im SourceField, nie gegen Metadaten validiert |
| Erweiterbarkeit | Source-Operation-Handler per Reflection |
Konfiguration und Steuerung
| Fähigkeit | Umsetzung |
|---|
| Konfigurationsgetriebener Betrieb | Table Storage, StorageService, SettingsService |
| Cron je Job | Job.Schedule, NCrontab.Signed, sechs Felder |
| Manueller Job-Start | ExecuteJob |
| Function-Toggles | AzureWebJobs.<Name>.Disabled, Bicep disabledFunctions |
| Konfig-Diagnose | CheckList, Validate, JobApi, MappingApi |
| KI-Anbindung | MCP-Server mit read-only Tools |
| Self-Repair der Initialisierung | ResetInitialization bei Fehlern |
| Quell-Filter | Job.Filter mit {{…}}-Templating |
| Veraltete Nachrichten überspringen | SkipOutdatedMessages → sbqignored |
Resilienz
| Fähigkeit | Umsetzung |
|---|
| Backoff-Retry | DeliveryCount² · 1000 ms |
| Lock-Renewal | Hintergrund-Task alle 30 s |
| Konflikt-Isolation | TransitiveException → sbqtransitive* |
| Dead-Lettering | maxDeliveryCount, Fehler-Properties an der Nachricht |
| Requeue | DeadLetterMover |
| Kommunikationsfehler | GetChanges fängt EndpointNotFoundException, CommunicationException |
Observability
| Fähigkeit | Umsetzung |
|---|
| Gepuffertes Logging | BufferingLoggerProvider, Flush pro Invocation |
| Dependency-Sampling | DependencySamplingProcessor |
| Custom Metrics | MetricsService (ChangesDetected, MessagesProcessed) |
| Korrelation | InvocationContext, operation_id |
| Steuerung | TELEMETRY_CONTROL, drei Raten-Settings |
| Alerts | DLQ-Stufen, Queue-Länge, Action Group |
| Dashboard | Grafana-Dashboard aus Bicep |
| Version | GetInfo |
Infrastruktur und Auslieferung
| Fähigkeit | Umsetzung |
|---|
| Infrastructure as Code | Bicep mit Modulen und .bicepparam |
| Marketplace | createUiDefinition.json, generierte mainTemplate.json |
| Identitätsbasierter Zugriff | enableManagedIdentity + Rollen |
| Serverless-Skalierung | Y1 / EP1–EP3, functionScaleLimit |
| Run-from-Package | WEBSITE_RUN_FROM_PACKAGE=1 |
| Container | Dockerfile, compose.yml |
| Versionierung | Major.Minor.yyyy.MMdd, manueller Bump |
| CI/CD | Azure Pipelines unter cicd/ |
| Lokale Entwicklung | Podman-Testumgebung mit DBs und HTTP-Mocks |
Qualitätssicherung
| Fähigkeit | Umsetzung |
|---|
| Unit-Tests | DataBridge.Test, xUnit v3, Moq |
| Coverage | Microsoft Testing Platform Code Coverage |
| Resolver-Vollständigkeit | *TargetValueMapperCoverageTests |
| Dokumentation | Hugo/Docsy unter docs/, veröffentlicht per Pipeline |