Files
Ai/TrafagSalesExporter/HANDOFF_2026-04-15.md
T
2026-04-15 14:47:32 +02:00

7.3 KiB

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 laeuft 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:

  • SAP
  • BI1
  • SAGE

Zusaetzlich gibt es pro Standort optionale Overrides:

  • UsernameOverride
  • PasswordOverride

Aufloesungsreihenfolge:

  1. Standort-Override
  2. zentrale Credentials des Quellsystems
  3. 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:

  • SapServiceUrl
  • SapEntitySet
  • SapEntitySetsCache
  • SapEntitySetsRefreshedAtUtc

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:

  • SapSourceDefinition
  • SapJoinDefinition
  • SapFieldMapping

Unterstuetzt wird:

  • mehrere SAP-Quellen pro Standort
  • Alias pro Quelle
  • Primaerquelle
  • Join-Definitionen
  • Mapping von Alias.Feldname auf zentrales Schema

UI-Erweiterungen:

  • Quellen refreshen
  • Felder aus Quellen laden
  • Join-Key-Auswahl aus Metadaten
  • Auto-Match fuer 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:

  • LocalSiteExportFolder
  • LocalConsolidatedExportFolder

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 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 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
  • FilePath gespeichert
  • 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.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 Aenderungen laufen ueber 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

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 in AppEventLogs oder ExportLogs
  • die alte Tabelle Sites_old existierte 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
  • Program.cs
    • SQLite Default Timeout von 10 auf 60 erhoeht
  • Services/CentralSalesRecordService.cs
    • nach abgeschlossenem Batch-Insert wird explizit Zentrale Tabelle aktualisiert gesetzt
  • Services/DatabaseInitializationService.cs
    • automatische Reparaturlogik fuer Tabellen, deren CREATE TABLE-SQL noch Sites_old referenziert
    • betroffene Tabellen werden beim Start neu aufgebaut und Daten rueberkopiert

Danach wurde der Export erfolgreich getestet und geht jetzt wieder durch.

Was bei einer naechsten Stoerung zuerst zu pruefen ist

  1. Tritt beim App-Start die Schema-Reparatur sauber durch?
  2. Gibt es noch weitere Tabellen mit FK-Referenz auf Sites_old?
  3. 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