# 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