13 KiB
TrafagSalesExporter Handoff
Stand: 2026-04-15
Nachtrag 2026-04-17
Der dokumentierte Stand in diesem Handoff war bei der Waehrungslogik nicht mehr aktuell.
Inzwischen gilt:
- Kurstabellen fuer
CurrencyExchangeRatessind im System vorhanden Settingsenthaelt bereits eine Pflegeoberflaeche fuer WechselkurseExchangeRateImportServiceimportiert ECB-Tageskurse nachCurrencyExchangeRatesNormalizeCurrencyCodeist als Value-Transformation vorhandenConvertCurrencyist als Record-Transformation vorhandenProgram.csregistriert beide Strategien sowieCurrencyExchangeRateServiceundExchangeRateImportService
Wichtig:
- die Roh-Auswertung im
Management Cockpitrechnet Stand heute weiterhin bewusst nicht in CHF um - dort bleibt der Umsatz weiterhin in
Sales Currency - die Waehrungsumrechnung ist aktuell Teil des allgemeinen Transformations-/Mapping-Systems, nicht der Cockpit-Rohsicht
Zusatzlich wurden am 2026-04-17 fehlende Unit-Tests fuer die Waehrungslogik nachgezogen:
CurrencyExchangeRateServiceTestsExchangeRateImportServiceTests- Erweiterungen in
TransformationStrategiesTestsRecordTransformationServiceTestsTransformationCatalogTests
Aktueller Teststatus nach diesem Nachtrag:
dotnet test .\TrafagSalesExporter.Tests\TrafagSalesExporter.Tests.csproj --verbosity minimal
Ergebnis:
- erfolgreich
31/31Tests gruen- bekannte Warnung bleibt:
- SAP HANA Architekturwarnung
MSB3270
- SAP HANA Architekturwarnung
Nachtrag 2026-04-16
Seit dem letzten Handoff wurden weitere Funktionen umgesetzt, die unten im alten Stand noch nicht voll enthalten sind.
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
11. Manueller Excel-Import pro Standort
Es gibt jetzt einen vierten SourceSystem-Typ:
MANUAL_EXCEL
Gedanke:
- Standort ohne Netz-/Systemanbindung liefert nur Excel
- Datei wird im Standort hochgeladen
- Export liest diese Datei statt SAP/HANA
- Daten werden in
CentralSalesRecordsfuer diesen Standort ersetzt - der zentrale Export liest weiter nur aus
CentralSalesRecords
Neue Site-Felder:
ManualImportFilePathManualImportLastUploadedAtUtc
Wichtig:
- das ist kein Excel-zu-Excel-Merge
- die App importiert ins zentrale Schema und erzeugt danach die zentrale Datei neu
12. Dashboard erweitert
Im Dashboard gibt es jetzt zusaetzlich:
- separaten Bereich
Zentrale Datei Excel oeffnenfuer die neueste zentrale DateiSales_All_*.xlsx- Button
Alle exportieren - Button
Zentrale Datei neu erzeugen
Bedeutung:
Alle exportierenliest alle Quellen neu und erzeugt danach die zentrale DateiZentrale Datei neu erzeugenschreibt nur ausCentralSalesRecordseine neue zentrale Excel
13. Management Cockpit Roh-Auswertung aus Zentraldaten
Zusaetzlich zur dateibasierten Cockpit-Analyse gibt es jetzt eine Roh-Auswertung direkt aus CentralSalesRecords.
Aktuell umgesetzt:
- Auswahl Jahr
- optional Auswahl Monat
- Jahresumsatz
- Monatsumsatz
- Tagesumsatz im gewaehlten Monat
- Umsatz nach Quelle
- Umsatz nach Land
- Periodenabdeckung / Zeilen / Rechnungen / Standorte / Laender / Waehrungen
Bewusst noch nicht enthalten:
- kein Intercompany-Filter
- keine CHF-Umrechnung
- kein Budgetvergleich
- keine Spartenlogik
- keine Gruppenlogik
- keine Margenlogik
14. Transformationssystem erweitert
Das Transformationssystem kann jetzt zwei Ebenen:
Valuefuer einfache feldweise Regeln aus der GUIRecordfuer komplexere C#-Strategien per Strategy Pattern
Umgesetzt:
- neues Feld
RuleScopeaufFieldTransformationRule - dynamischer Strategiekatalog
- GUI liest verfuegbare Typen aus dem Katalog
- erste
Record-Strategie:FirstNonEmpty
Beispiel:
TargetField = CustomerNameTransformationType = FirstNonEmptyArgument = CustomerName|SupplierName|Name
15. Schema-Lookup fuer HANA-Standorte
Im Standortdialog fuer HANA-basierte Standorte gibt es jetzt:
- Button
Schemas laden - Lookup mit gueltigen Schemas aus HANA
Die Liste wird nicht blind aus allen Schemas gelesen, sondern auf typische B1-Schemas eingeschraenkt, in denen z. B. Tabellen wie
OINVINV1ORINRIN1OCRDOITM
vorhanden sind.
Wichtig:
- manuelle Eingabe bleibt moeglich
- fuer
BI1undSAGEwerden beim Lookup die effektiven Credentials inkl. zentraler Zugangsdaten / Overrides verwendet - das reduziert Fehler wie
invalid schema name
16. Testabdeckung ausgebaut
Es gibt jetzt ein separates Testprojekt:
TrafagSalesExporter.Tests
Automatisiert getestet werden aktuell:
- Transformationsstrategien
RecordTransformationServiceTransformationCatalogManualExcelImportServiceManagementCockpitServiceConfigTransferService
Wichtiger bereits gefundener Bug:
- deutsches Dezimalformat wie
1,50wurde im manuellen Excel-Import falsch interpretiert - Parsing wurde korrigiert
Wichtige Dateien
Modelle
Models/Site.csModels/ExportSettings.csModels/ExportLog.csModels/CentralSalesRecord.csModels/SapSourceDefinition.csModels/SapJoinDefinition.csModels/SapFieldMapping.csModels/ManagementCockpitModels.csModels/ConfigTransferPackage.csModels/FieldTransformationRule.cs
Services
Services/SiteExportService.csServices/ConsolidatedExportService.csServices/CentralSalesRecordService.csServices/SapGatewayService.csServices/SapCompositionService.csServices/ConfigTransferService.csServices/AppEventLogService.csServices/ManagementCockpitService.csServices/DatabaseInitializationService.csServices/ExportOrchestrationService.csServices/ManualExcelImportService.csServices/TransformationCatalog.csServices/RecordTransformationService.csServices/TransformationStrategies.cs
UI
Components/Pages/Standorte.razorComponents/Pages/Settings.razorComponents/Pages/Dashboard.razorComponents/Pages/Logs.razorComponents/Pages/ManagementCockpit.razorComponents/Pages/Transformations.razorComponents/Layout/NavMenu.razor
Tests
TrafagSalesExporter.Tests/TransformationStrategiesTests.csTrafagSalesExporter.Tests/RecordTransformationServiceTests.csTrafagSalesExporter.Tests/TransformationCatalogTests.csTrafagSalesExporter.Tests/ManualExcelImportServiceTests.csTrafagSalesExporter.Tests/ManagementCockpitServiceTests.csTrafagSalesExporter.Tests/ConfigTransferServiceTests.cs
Datenbank / Migrationen
Viele Aenderungen laufen ueber DatabaseInitializationService.
Wichtige neue oder erweiterte Tabellen/Felder:
SitesUsernameOverridePasswordOverrideSapServiceUrlSapEntitySetSapEntitySetsCacheSapEntitySetsRefreshedAtUtcLocalExportFolderOverrideManualImportFilePathManualImportLastUploadedAtUtc
ExportSettings- zentrale SAP/BI1/SAGE Credentials
LocalSiteExportFolderLocalConsolidatedExportFolderDebugLoggingEnabled
FieldTransformationRulesRuleScope
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