sammelxport
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user