Files
Ai/TrafagSalesExporter/HANDOFF_2026-04-15.md
T
2026-04-15 11:37:47 +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 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:

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:

./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:

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