# Systemarchitektur
## Architektur-Uebersicht
```mermaid
graph TB
subgraph External["Externe Systeme"]
Bexio["Bexio ERP API"]
SharePoint["SharePoint Online"]
Teams["Microsoft Teams"]
end
subgraph Integration["Integration Layer"]
Connector["Custom Connector
BexioV3"]
Imports["Import/Export
Mechanism"]
end
subgraph DataModel["Dataverse Datenmodell"]
Stamm["Stammdaten
Artikel, Hersteller
Kontakte, Firmen"]
Inventar["Bestandsdaten
Geraete, Standorte
Business Units"]
Geschaeft["Geschaeftsdaten
Relationen, Pruefberichte
Zeit-Tracking"]
Config["Steuerung & Logs
syncconfig
bexiosyncerror"]
end
subgraph Automation["Power Automate Flows"]
SyncKontakte["BexioSynchKontakte
woechentlich"]
SyncRelation["BexioSynchRelation
taeglich 04:00"]
MapFlows["Mapping Flows
Artikel, Pruefbericht
Standort, Hersteller"]
ManualOps["Business Unit
Operationen"]
end
subgraph Apps["User-Facing Apps"]
CanvasMain["Canvas App: bmvcc
Hauptanwendung"]
CanvasBexio["Canvas App: bexiokontakte
CRM-Fokus"]
CanvasTest["Canvas App: test1
Prototype"]
ModelDriven["Model-Driven
Navigation"]
end
Bexio -->|REST API| Connector
Connector -->|Bexio-Daten| SyncKontakte
Connector -->|Kontakt-Relationen| SyncRelation
SyncKontakte -->|Create/Update| Stamm
SyncRelation -->|Create/Update| Geschaeft
Stamm -->|Referenzen| MapFlows
Inventar -->|Device Data| MapFlows
Geschaeft -->|Relations| MapFlows
MapFlows -->|Updates| Inventar
MapFlows -->|Updates| Geschaeft
SyncKontakte -->|Status| Config
SyncRelation -->|Status & Fehler| Config
MapFlows -->|Erfolg/Fehler| Config
Stamm -->|Read| CanvasMain
Inventar -->|Read| CanvasMain
Geschaeft -->|Read| CanvasMain
Config -->|Read| CanvasMain
Stamm -->|Read| CanvasBexio
Geschaeft -->|Read| CanvasBexio
Inventar -->|Read| CanvasTest
CanvasMain -->|Create/Update| Inventar
CanvasMain -->|Create/Update| Geschaeft
CanvasMain -->|Create/Update| Stamm
CanvasBexio -->|Create/Update| Stamm
CanvasBexio -->|Create/Update| Geschaeft
SyncKontakte -->|PostMessage| Teams
SyncRelation -->|PostMessage| Teams
Imports -->|CSV/EXCEL| Inventar
Config -->|Read| Automation
```
## Komponenten im Detail
### Externe Systeme
- **Bexio**: ERP-System, das Kontakt-, Firmen- und Relationsdaten bereitstellt
- **SharePoint**: Optionaler Zielort fuer Datenintegration (via Umgebungsvariable)
- **Microsoft Teams**: Benachrichtigungskanal fuer asynchrone Sync-Status
### Integration Layer
- **Custom Connector BexioV3**: translates REST-API-Aufrufe nach Dataverse
- **Import/Export-Mechanismen**: fuer Bulk-Initialisierung oder Migrationen
### Dataverse Datenmodell
#### Stammdaten-Cluster
- `bmvcc_Artikel`: Produktinformationen
- `bmvcc_Hersteller`: Lieferanten- und Herstellerinformationen
- `bmvcc_Kontakt`: Personenkontakte (hauptsaechlich aus Bexio)
- `bmvcc_firma`: Firmenkontakte (hauptsaechlich aus Bexio)
#### Bestandsdaten-Cluster
- `bmvcc_equipmentrecord`: Geraete und Betriebsmittel
- `bmvcc_organizationlocation`: Standorte und Lagerungen
- `businessunit`: Organizations- und Autorisierungseinheiten
#### Geschaeftsdaten-Cluster
- `bmvcc_relation`: Zuordnungen zwischen Personen und Firmen
- `bmvcc_Pruefbericht`: Inspektionen und Pruefungen
- `bmvcc_timetrackingentry`: Zeit- und Aktivitaetserfassung
#### Steuerungs- und Logging-Cluster
- `bmvcc_syncconfig`: Konfiguration und Status von Synchronisationslaeufen
- `bmvcc_bexiosyncerror`: Fehlerprotokolle fuer Troubleshooting
- `bmvcc_Configuration`, `bmvcc_ConfigurationSetting`: Systemkonfiguration
### Power Automate Flows
#### Geplante Synchronisationen
- **BexioSynchKontakte**: Woechentlich – liest Bexio-Kontakte und Firmen, aktualisiert Dataverse
- **BexioSynchRelation**: Taeglich um 04:00 – liest Bexio-Kontakt-Firma-Beziehungen, aktualisiert `bmvcc_relation`
#### Manuelle Mapping-Flows
- **GeraeteArtikelMapTabelle**: mappt Artikel auf Geraete
- **GeraetePruefberichtMapTabelle(V2)**: verknuepft Pruefberichte mit Geraeten
- **GeraeteStandortMapTabelle**: ordnet Standorte Geraeten zu
- **HerstellerArtikelMapTabelle2**: mappt Hersteller auf Artikel
- **HerstellerBusinessunitsetzen**: setzt Business-Unit-Zuordnungen in Zielumgebungen
### User-Facing Apps
#### Canvas Apps
- **bmvcc**: Hauptanwendung – Zugriff auf alle Datenmodelle, operative Datenpflege
- **bexiokontakte**: Fokussierte CRM-App fuer Firmen und Relationen
- **test1**: Prototyp oder Test-App fuer Geraetedaten
#### Model-Driven Navigation
- **configs**: einfache Navigation auf Konfigurationstabelle
- **kontakte**: einfache Navigation auf Relationstabelle
## Typischer Datenfluss
### Szenario: Kontakt-Synchronisation
1. **Trigger**: Woechentlicher Schedule fuer `BexioSynchKontakte`
2. **Bexio API Call**: Connector ruft Kontakte ueber `Allekontakte`-Operation auf
3. **Dataverse Check**: Flow prueft, welche Kontakte bereits in `bmvcc_Kontakt` vorhanden sind
4. **Upsert**: Neue Kontakte werden angelegt, vorhandene aktualisiert
5. **Status-Schreiben**: Laufstatus und Zeitstempel werden in `bmvcc_syncconfig` geschrieben
6. **Fehler-Logging**: Fehler werden in `bmvcc_bexiosyncerror` protokolliert
7. **Teams-Notification**: optionale Benachrichtigung an ein Team
### Szenario: Benutzer erstellt Geraet in Canvas App
1. **User Action**: Benutzer fuellt Geraete-Formular in `bmvcc`-App aus
2. **Dataverse Record**: neuer Datensatz wird in `bmvcc_equipmentrecord` angelegt
3. **Initial Mapping**: Verweise auf Artikel, Hersteller, Standort werden direkt gesetzt oder leer gelassen
4. **Manual Flow**: Administrator laeuft `GeraeteArtikelMapTabelle` aus
5. **Batch Update**: Flow actualisiert fehlende Artikel-Zuordnungen basierend auf Matching-Logik
6. **View Update**: Benutzer sieht in der App automatic gepflegte Beziehungen
### Szenario: Fehler bei Synchronisation
1. **Connector Fehler**: API-Aufruf schlaegt fehl (z.B. Authentifizierung, Rate Limit)
2. **Error Catch**: Flow traegt Fehler in `bmvcc_bexiosyncerror` ein
3. **Status Update**: `bmvcc_syncconfig` wird mit Fehlerstatus aktualisiert
4. **Teams Alert**: Teams-Benachrichtigung wird gesendet
5. **Manual Review**: Operator prueift das Fehlerprotokoll und triggt ggf. erneuten Lauf
## Skalierungsueberlegungen
- **Datenvolumen**: Flows mit Batch-Request-Logik fuer groessere Datenmengen
- **Trigger-Frequenz**: Geplante Flows laufen zu festen Zeiten; bei Bedarf laufen sie parallel
- **Connection Limits**: Bexio-API hat Ratelimits; Retry-Logik und Paginierung sind wichtig
- **Business Unit Scoping**: nicht alle Flows arbeiten mit globalen Daten; Business-Unit-Filter sind vorhanden
## Deployment-Einheiten
Das Repository enthaelt die gesamte Solution als Einheit. Fuer multi-environment-Deployment sind folgende Items zu beachten:
- Connection References (muessen pro Umgebung neu verlinkt werden)
- Umgebungsvariablen (BusinessUnitId, Dataverse-URL, SharePoint-URL)
- harte URLs in Flows (z.B. in `HerstellerBusinessunitsetzen`)