sammelxport

This commit is contained in:
2026-04-15 11:37:47 +02:00
parent 90133cd0e2
commit 7891dfb3dd
6 changed files with 672 additions and 28 deletions
+347
View File
@@ -0,0 +1,347 @@
# TrafagSalesExporter Handoff
Stand: 2026-04-15
## Zielbild
Die App wurde von einem reinen BI1/HANA-Exporter zu einer kombinierten Plattform erweitert:
- `BI1` und `SAGE` bleiben auf direktem HANA-Zugriff
- `SAP` läuft separat über SAP Gateway / OData
- SAP-Quellen können gelesen, gejoint und auf das zentrale `SalesRecord`-Schema gemappt werden
- Standort-Exporte werden lokal als Excel geschrieben
- Zusätzlich werden Datensätze in eine zentrale SQLite-Tabelle geschrieben
- Ein konsolidierter Export liest aus dieser zentralen Tabelle
## Wichtigste umgesetzte Funktionen
### 1. Zentrale Credentials pro Quellsystem
Es gibt zentrale Zugangsdaten in `ExportSettings` für:
- `SAP`
- `BI1`
- `SAGE`
Zusätzlich gibt es pro Standort optionale Overrides:
- `UsernameOverride`
- `PasswordOverride`
Auflösungsreihenfolge:
1. Standort-Override
2. zentrale Credentials des Quellsystems
3. bei HANA zusätzlich Fallback auf alten `HanaServer.Username/Password`
## 2. SAP von BI1/HANA getrennt
`SAP` nutzt nicht mehr den HANA-Pfad, sondern eine eigene Gateway/OData-Strecke.
Pro SAP-Standort gibt es:
- `SapServiceUrl`
- `SapEntitySet`
- `SapEntitySetsCache`
- `SapEntitySetsRefreshedAtUtc`
Refresh der SAP-Quellen erfolgt nur auf Knopfdruck.
Beispiel Service URL:
```text
http://travt762.sap.trafag.com:8000/sap/opu/odata/sap/ZPOWERBI_EINKAUF_SRV/
```
Wichtig:
- Service URL immer nur bis zum Service
- Entity Set separat auswählen
## 3. SAP-Quellen, Joins und Feldmappings
Für SAP gibt es mehrere neue Modelle:
- `SapSourceDefinition`
- `SapJoinDefinition`
- `SapFieldMapping`
Unterstützt wird:
- mehrere SAP-Quellen pro Standort
- Alias pro Quelle
- Primärquelle
- Join-Definitionen
- Mapping von `Alias.Feldname` auf zentrales Schema
UI-Erweiterungen:
- `Quellen refreshen`
- `Felder aus Quellen laden`
- Join-Key-Auswahl aus Metadaten
- `Auto-Match` für gleiche Feldnamen zwischen Primärquelle und anderen Quellen
## 4. Zentrale Datenspeicherung
Neue Tabelle:
- `CentralSalesRecords`
Verwendung:
- pro Standort werden alte zentrale Sätze dieses Standorts ersetzt
- konsolidierte Excel liest aus `CentralSalesRecords`
Wichtig:
- zentrale Excel wird nicht appendet
- sie wird aus dem aktuellen Zustand der zentralen Tabelle neu erstellt
## 5. Exportpfade
Neue Konfigurationsmöglichkeiten:
Zentral in `Settings`:
- `LocalSiteExportFolder`
- `LocalConsolidatedExportFolder`
Pro Standort:
- `LocalExportFolderOverride`
Fallback wenn leer:
```text
./output
```
relativ zum App-Verzeichnis.
## 6. SharePoint
SharePoint-Upload ist optional.
Wenn keine vollständige SharePoint-Konfiguration vorhanden ist:
- Excel wird trotzdem lokal erzeugt
- kein Upload nach SharePoint
Benötigte SharePoint-Werte:
- `Tenant ID`
- `Client ID`
- `Client Secret`
Das sind Entra App Registration Werte, nicht normale Benutzer-Credentials.
## 7. Config Import/Export
Es gibt JSON-Import/Export der Konfiguration mit Checkbox:
- mit Secrets
- ohne Secrets
Enthalten sind u. a.:
- SharePoint Config
- ExportSettings
- HanaServers
- Sites
- Transformation Rules
- SAP-Quellen
- SAP-Joins
- SAP-Mappings
## 8. Logging und Live-Status
Neue technische Logs über `AppEventLogs`.
Sichtbar:
- auf `/logs`
- im Dashboard als `Live-Status`
Geloggt werden u. a.:
- HANA-Query Start
- SAP Refresh
- SAP Reads
- Transformationen
- Excel-Erstellung
- zentrale Tabellenspeicherung
- Export erfolgreich / fehlgeschlagen
## 9. Excel öffnen
Im Dashboard gibt es neben `Export` den Button:
- `Excel öffnen`
Dieser nutzt `ExportLogs.FilePath`.
Voraussetzungen:
- letzter Export erfolgreich
- `FilePath` gespeichert
- Datei existiert lokal
## 10. Management Cockpit
Es gibt einen neuen Menüpunkt:
- `Management Cockpit`
Funktion:
- Auswahl vorhandener Excel-Dateien
- Analyse einer exportierten Standort-Datei
- Kennzahlen für Geschäftsinhaber / Management
Aktuell enthalten:
- Umsatz
- geschätzte Kosten
- geschätzte Marge
- Rechnungsanzahl
- Kundenanzahl
- Top Kunden
- Top Produktgruppen
- Top Sales Owner
- Datenqualitätshinweise
- automatische Management-Aussagen
## Wichtige Dateien
### Modelle
- `Models/Site.cs`
- `Models/ExportSettings.cs`
- `Models/ExportLog.cs`
- `Models/CentralSalesRecord.cs`
- `Models/SapSourceDefinition.cs`
- `Models/SapJoinDefinition.cs`
- `Models/SapFieldMapping.cs`
- `Models/ManagementCockpitModels.cs`
- `Models/ConfigTransferPackage.cs`
### Services
- `Services/SiteExportService.cs`
- `Services/ConsolidatedExportService.cs`
- `Services/CentralSalesRecordService.cs`
- `Services/SapGatewayService.cs`
- `Services/SapCompositionService.cs`
- `Services/ConfigTransferService.cs`
- `Services/AppEventLogService.cs`
- `Services/ManagementCockpitService.cs`
- `Services/DatabaseInitializationService.cs`
- `Services/ExportOrchestrationService.cs`
### UI
- `Components/Pages/Standorte.razor`
- `Components/Pages/Settings.razor`
- `Components/Pages/Dashboard.razor`
- `Components/Pages/Logs.razor`
- `Components/Pages/ManagementCockpit.razor`
- `Components/Layout/NavMenu.razor`
## Datenbank / Migrationen
Viele Änderungen laufen über `DatabaseInitializationService`.
Wichtige neue oder erweiterte Tabellen/Felder:
- `Sites`
- `UsernameOverride`
- `PasswordOverride`
- `SapServiceUrl`
- `SapEntitySet`
- `SapEntitySetsCache`
- `SapEntitySetsRefreshedAtUtc`
- `LocalExportFolderOverride`
- `ExportSettings`
- zentrale SAP/BI1/SAGE Credentials
- `LocalSiteExportFolder`
- `LocalConsolidatedExportFolder`
- `DebugLoggingEnabled`
- `ExportLogs`
- `FilePath`
- neue Tabellen:
- `AppEventLogs`
- `CentralSalesRecords`
- SAP-Konfigtabellen
## Aktuell offenes Hauptproblem
### Zentrale Speicherung hängt noch
Die große Problemstelle war die zentrale SQLite-Speicherung.
Bereits probiert:
- EF `RemoveRange + SaveChanges`
- EF Batch-Speichern
- Dashboard-Polling reduziert
- SQLite WAL + busy timeout
- direkte SQLite-Inserts in einer großen Transaktion
- jetzt: kleine abgeschlossene Transaktionen pro Batch
Aktueller Stand:
- zentrale Excel ist jetzt sehr schnell
- das Hängen wurde stark eingegrenzt
- zuletzt wurde der Schreibpfad so umgebaut, dass:
- Löschen in eigener kurzer Transaktion läuft
- Inserts batchweise mit Commit pro Batch laufen
Datei:
- `Services/CentralSalesRecordService.cs`
Die nächste Session sollte genau dort weiter debuggen, falls es noch hängt.
Wichtig:
- Das Problem ist nicht SAP
- nicht SharePoint
- nicht mehr der große EF-Insert
- sondern sehr wahrscheinlich SQLite-Commit/Lock-Verhalten rund um die zentrale Tabelle
## Letzte bekannte Beobachtung
Der User meldete zuletzt:
- vorher Hänger bei `Zentrale Tabelle: Abschluss speichern...`
- danach wurde auf Commit pro Batch umgestellt
- neue Session soll testen, ob es jetzt bei
- `Batch x/y speichern...`
- `Batch x/y abschliessen...`
- oder gar nicht mehr hängt
## Build-Status
Letzter Build:
```text
dotnet build TrafagSalesExporter.sln
```
Ergebnis:
- erfolgreich
- bekannte Warnungen bleiben:
- SAP HANA Architekturwarnung `MSB3270`
- MudBlazor Analyzer `Dense`
## Hinweise für nächste Session
1. Zuerst aktuellen Export testen
2. Genaue letzte Live-Status-Meldung notieren
3. `Services/CentralSalesRecordService.cs` prüfen
4. Falls nötig:
- SQLite pragmas weiter anpassen
- zentrale Tabelle temporär ganz abschaltbar machen
- oder Schreiben über separate DB / Queue entkoppeln