7.3 KiB
TrafagSalesExporter Handoff
Stand: 2026-04-15
Zielbild
Die App wurde von einem reinen BI1/HANA-Exporter zu einer kombinierten Plattform erweitert:
BI1undSAGEbleiben auf direktem HANA-ZugriffSAPlaeuft separat ueber SAP Gateway / OData- SAP-Quellen koennen gelesen, gejoint und auf das zentrale
SalesRecord-Schema gemappt werden - Standort-Exporte werden lokal als Excel geschrieben
- zusaetzlich werden Datensaetze 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 fuer:
SAPBI1SAGE
Zusaetzlich gibt es pro Standort optionale Overrides:
UsernameOverridePasswordOverride
Aufloesungsreihenfolge:
- Standort-Override
- zentrale Credentials des Quellsystems
- bei HANA zusaetzlich 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:
SapServiceUrlSapEntitySetSapEntitySetsCacheSapEntitySetsRefreshedAtUtc
Refresh der SAP-Quellen erfolgt nur auf Knopfdruck.
Beispiel Service URL:
http://travt762.sap.trafag.com:8000/sap/opu/odata/sap/ZPOWERBI_EINKAUF_SRV/
Wichtig:
- Service URL immer nur bis zum Service
- Entity Set separat auswaehlen
3. SAP-Quellen, Joins und Feldmappings
Fuer SAP gibt es mehrere neue Modelle:
SapSourceDefinitionSapJoinDefinitionSapFieldMapping
Unterstuetzt wird:
- mehrere SAP-Quellen pro Standort
- Alias pro Quelle
- Primaerquelle
- Join-Definitionen
- Mapping von
Alias.Feldnameauf zentrales Schema
UI-Erweiterungen:
Quellen refreshenFelder aus Quellen laden- Join-Key-Auswahl aus Metadaten
Auto-Matchfuer gleiche Feldnamen zwischen Primaerquelle und anderen Quellen
4. Zentrale Datenspeicherung
Neue Tabelle:
CentralSalesRecords
Verwendung:
- pro Standort werden alte zentrale Saetze 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 Konfigurationsmoeglichkeiten:
Zentral in Settings:
LocalSiteExportFolderLocalConsolidatedExportFolder
Pro Standort:
LocalExportFolderOverride
Fallback wenn leer:
./output
relativ zum App-Verzeichnis.
6. SharePoint
SharePoint-Upload ist optional.
Wenn keine vollstaendige SharePoint-Konfiguration vorhanden ist:
- Excel wird trotzdem lokal erzeugt
- kein Upload nach SharePoint
Benoetigte SharePoint-Werte:
Tenant IDClient IDClient 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 ueber 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 oeffnen
Im Dashboard gibt es neben Export den Button:
Excel oeffnen
Dieser nutzt ExportLogs.FilePath.
Voraussetzungen:
- letzter Export erfolgreich
FilePathgespeichert- Datei existiert lokal
10. Management Cockpit
Es gibt einen neuen Menuepunkt:
Management Cockpit
Funktion:
- Auswahl vorhandener Excel-Dateien
- Analyse einer exportierten Standort-Datei
- Kennzahlen fuer Geschaeftsinhaber / Management
Aktuell enthalten:
- Umsatz
- geschaetzte Kosten
- geschaetzte Marge
- Rechnungsanzahl
- Kundenanzahl
- Top Kunden
- Top Produktgruppen
- Top Sales Owner
- Datenqualitaetshinweise
- automatische Management-Aussagen
Wichtige Dateien
Modelle
Models/Site.csModels/ExportSettings.csModels/ExportLog.csModels/CentralSalesRecord.csModels/SapSourceDefinition.csModels/SapJoinDefinition.csModels/SapFieldMapping.csModels/ManagementCockpitModels.csModels/ConfigTransferPackage.cs
Services
Services/SiteExportService.csServices/ConsolidatedExportService.csServices/CentralSalesRecordService.csServices/SapGatewayService.csServices/SapCompositionService.csServices/ConfigTransferService.csServices/AppEventLogService.csServices/ManagementCockpitService.csServices/DatabaseInitializationService.csServices/ExportOrchestrationService.cs
UI
Components/Pages/Standorte.razorComponents/Pages/Settings.razorComponents/Pages/Dashboard.razorComponents/Pages/Logs.razorComponents/Pages/ManagementCockpit.razorComponents/Layout/NavMenu.razor
Datenbank / Migrationen
Viele Aenderungen laufen ueber DatabaseInitializationService.
Wichtige neue oder erweiterte Tabellen/Felder:
SitesUsernameOverridePasswordOverrideSapServiceUrlSapEntitySetSapEntitySetsCacheSapEntitySetsRefreshedAtUtcLocalExportFolderOverride
ExportSettings- zentrale SAP/BI1/SAGE Credentials
LocalSiteExportFolderLocalConsolidatedExportFolderDebugLoggingEnabled
ExportLogsFilePath
- neue Tabellen:
AppEventLogsCentralSalesRecords- SAP-Konfigtabellen
Letztes Hauptproblem und Loesung
Export hing nach zentraler Speicherung
Der Export blieb zuletzt nach
Zentrale Tabelle: 20106 Datensaetze gespeichert.
haengen.
Die eigentliche Ursache war am Ende nicht mehr der Batch-Insert selbst, sondern ein kaputter SQLite-Schemazustand:
- mindestens eine Tabelle referenzierte per FK noch
main.Sites_old - dadurch scheiterte
SaveChangesAsync()spaeter beim Schreiben inAppEventLogsoderExportLogs - die alte Tabelle
Sites_oldexistierte nicht mehr
Beobachteter Fehler:
SQLite Error 1: 'no such table: main.Sites_old'
Umgesetzte Korrekturen
Components/Pages/Dashboard.razor- Live-Status pollt waehrend laufendem Export nicht mehr permanent
AppEventLogs - stattdessen Anzeige ueber den In-Memory-Status aus
ExportOrchestrationService
- Live-Status pollt waehrend laufendem Export nicht mehr permanent
Program.cs- SQLite
Default Timeoutvon10auf60erhoeht
- SQLite
Services/CentralSalesRecordService.cs- nach abgeschlossenem Batch-Insert wird explizit
Zentrale Tabelle aktualisiertgesetzt
- nach abgeschlossenem Batch-Insert wird explizit
Services/DatabaseInitializationService.cs- automatische Reparaturlogik fuer Tabellen, deren
CREATE TABLE-SQL nochSites_oldreferenziert - betroffene Tabellen werden beim Start neu aufgebaut und Daten rueberkopiert
- automatische Reparaturlogik fuer Tabellen, deren
Danach wurde der Export erfolgreich getestet und geht jetzt wieder durch.
Was bei einer naechsten Stoerung zuerst zu pruefen ist
- Tritt beim App-Start die Schema-Reparatur sauber durch?
- Gibt es noch weitere Tabellen mit FK-Referenz auf
Sites_old? - Erst danach wieder Insert-/Commit-Batches der zentralen Speicherung untersuchen
Build-Status
Letzter Build:
dotnet build TrafagSalesExporter.sln
Ergebnis:
- erfolgreich
- bekannte Warnungen bleiben:
- SAP HANA Architekturwarnung
MSB3270 - MudBlazor Analyzer
Dense
- SAP HANA Architekturwarnung