348 lines
7.3 KiB
Markdown
348 lines
7.3 KiB
Markdown
# 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
|
|
|