zentraler export
This commit is contained in:
@@ -7,34 +7,34 @@ Stand: 2026-04-15
|
||||
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
|
||||
- `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
|
||||
- Zusätzlich werden Datensätze in eine zentrale SQLite-Tabelle geschrieben
|
||||
- Ein konsolidierter Export liest aus dieser zentralen Tabelle
|
||||
- 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` für:
|
||||
Es gibt zentrale Zugangsdaten in `ExportSettings` fuer:
|
||||
|
||||
- `SAP`
|
||||
- `BI1`
|
||||
- `SAGE`
|
||||
|
||||
Zusätzlich gibt es pro Standort optionale Overrides:
|
||||
Zusaetzlich gibt es pro Standort optionale Overrides:
|
||||
|
||||
- `UsernameOverride`
|
||||
- `PasswordOverride`
|
||||
|
||||
Auflösungsreihenfolge:
|
||||
Aufloesungsreihenfolge:
|
||||
|
||||
1. Standort-Override
|
||||
2. zentrale Credentials des Quellsystems
|
||||
3. bei HANA zusätzlich Fallback auf alten `HanaServer.Username/Password`
|
||||
3. bei HANA zusaetzlich Fallback auf alten `HanaServer.Username/Password`
|
||||
|
||||
## 2. SAP von BI1/HANA getrennt
|
||||
### 2. SAP von BI1/HANA getrennt
|
||||
|
||||
`SAP` nutzt nicht mehr den HANA-Pfad, sondern eine eigene Gateway/OData-Strecke.
|
||||
|
||||
@@ -56,21 +56,21 @@ 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
|
||||
- Entity Set separat auswaehlen
|
||||
|
||||
## 3. SAP-Quellen, Joins und Feldmappings
|
||||
### 3. SAP-Quellen, Joins und Feldmappings
|
||||
|
||||
Für SAP gibt es mehrere neue Modelle:
|
||||
Fuer SAP gibt es mehrere neue Modelle:
|
||||
|
||||
- `SapSourceDefinition`
|
||||
- `SapJoinDefinition`
|
||||
- `SapFieldMapping`
|
||||
|
||||
Unterstützt wird:
|
||||
Unterstuetzt wird:
|
||||
|
||||
- mehrere SAP-Quellen pro Standort
|
||||
- Alias pro Quelle
|
||||
- Primärquelle
|
||||
- Primaerquelle
|
||||
- Join-Definitionen
|
||||
- Mapping von `Alias.Feldname` auf zentrales Schema
|
||||
|
||||
@@ -79,9 +79,9 @@ 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
|
||||
- `Auto-Match` fuer gleiche Feldnamen zwischen Primaerquelle und anderen Quellen
|
||||
|
||||
## 4. Zentrale Datenspeicherung
|
||||
### 4. Zentrale Datenspeicherung
|
||||
|
||||
Neue Tabelle:
|
||||
|
||||
@@ -89,7 +89,7 @@ Neue Tabelle:
|
||||
|
||||
Verwendung:
|
||||
|
||||
- pro Standort werden alte zentrale Sätze dieses Standorts ersetzt
|
||||
- pro Standort werden alte zentrale Saetze dieses Standorts ersetzt
|
||||
- konsolidierte Excel liest aus `CentralSalesRecords`
|
||||
|
||||
Wichtig:
|
||||
@@ -97,9 +97,9 @@ Wichtig:
|
||||
- zentrale Excel wird nicht appendet
|
||||
- sie wird aus dem aktuellen Zustand der zentralen Tabelle neu erstellt
|
||||
|
||||
## 5. Exportpfade
|
||||
### 5. Exportpfade
|
||||
|
||||
Neue Konfigurationsmöglichkeiten:
|
||||
Neue Konfigurationsmoeglichkeiten:
|
||||
|
||||
Zentral in `Settings`:
|
||||
|
||||
@@ -118,16 +118,16 @@ Fallback wenn leer:
|
||||
|
||||
relativ zum App-Verzeichnis.
|
||||
|
||||
## 6. SharePoint
|
||||
### 6. SharePoint
|
||||
|
||||
SharePoint-Upload ist optional.
|
||||
|
||||
Wenn keine vollständige SharePoint-Konfiguration vorhanden ist:
|
||||
Wenn keine vollstaendige SharePoint-Konfiguration vorhanden ist:
|
||||
|
||||
- Excel wird trotzdem lokal erzeugt
|
||||
- kein Upload nach SharePoint
|
||||
|
||||
Benötigte SharePoint-Werte:
|
||||
Benoetigte SharePoint-Werte:
|
||||
|
||||
- `Tenant ID`
|
||||
- `Client ID`
|
||||
@@ -135,7 +135,7 @@ Benötigte SharePoint-Werte:
|
||||
|
||||
Das sind Entra App Registration Werte, nicht normale Benutzer-Credentials.
|
||||
|
||||
## 7. Config Import/Export
|
||||
### 7. Config Import/Export
|
||||
|
||||
Es gibt JSON-Import/Export der Konfiguration mit Checkbox:
|
||||
|
||||
@@ -153,9 +153,9 @@ Enthalten sind u. a.:
|
||||
- SAP-Joins
|
||||
- SAP-Mappings
|
||||
|
||||
## 8. Logging und Live-Status
|
||||
### 8. Logging und Live-Status
|
||||
|
||||
Neue technische Logs über `AppEventLogs`.
|
||||
Neue technische Logs ueber `AppEventLogs`.
|
||||
|
||||
Sichtbar:
|
||||
|
||||
@@ -172,11 +172,11 @@ Geloggt werden u. a.:
|
||||
- zentrale Tabellenspeicherung
|
||||
- Export erfolgreich / fehlgeschlagen
|
||||
|
||||
## 9. Excel öffnen
|
||||
### 9. Excel oeffnen
|
||||
|
||||
Im Dashboard gibt es neben `Export` den Button:
|
||||
|
||||
- `Excel öffnen`
|
||||
- `Excel oeffnen`
|
||||
|
||||
Dieser nutzt `ExportLogs.FilePath`.
|
||||
|
||||
@@ -186,9 +186,9 @@ Voraussetzungen:
|
||||
- `FilePath` gespeichert
|
||||
- Datei existiert lokal
|
||||
|
||||
## 10. Management Cockpit
|
||||
### 10. Management Cockpit
|
||||
|
||||
Es gibt einen neuen Menüpunkt:
|
||||
Es gibt einen neuen Menuepunkt:
|
||||
|
||||
- `Management Cockpit`
|
||||
|
||||
@@ -196,19 +196,19 @@ Funktion:
|
||||
|
||||
- Auswahl vorhandener Excel-Dateien
|
||||
- Analyse einer exportierten Standort-Datei
|
||||
- Kennzahlen für Geschäftsinhaber / Management
|
||||
- Kennzahlen fuer Geschaeftsinhaber / Management
|
||||
|
||||
Aktuell enthalten:
|
||||
|
||||
- Umsatz
|
||||
- geschätzte Kosten
|
||||
- geschätzte Marge
|
||||
- geschaetzte Kosten
|
||||
- geschaetzte Marge
|
||||
- Rechnungsanzahl
|
||||
- Kundenanzahl
|
||||
- Top Kunden
|
||||
- Top Produktgruppen
|
||||
- Top Sales Owner
|
||||
- Datenqualitätshinweise
|
||||
- Datenqualitaetshinweise
|
||||
- automatische Management-Aussagen
|
||||
|
||||
## Wichtige Dateien
|
||||
@@ -249,7 +249,7 @@ Aktuell enthalten:
|
||||
|
||||
## Datenbank / Migrationen
|
||||
|
||||
Viele Änderungen laufen über `DatabaseInitializationService`.
|
||||
Viele Aenderungen laufen ueber `DatabaseInitializationService`.
|
||||
|
||||
Wichtige neue oder erweiterte Tabellen/Felder:
|
||||
|
||||
@@ -273,52 +273,46 @@ Wichtige neue oder erweiterte Tabellen/Felder:
|
||||
- `CentralSalesRecords`
|
||||
- SAP-Konfigtabellen
|
||||
|
||||
## Aktuell offenes Hauptproblem
|
||||
## Letztes Hauptproblem und Loesung
|
||||
|
||||
### Zentrale Speicherung hängt noch
|
||||
### Export hing nach zentraler Speicherung
|
||||
|
||||
Die große Problemstelle war die zentrale SQLite-Speicherung.
|
||||
Der Export blieb zuletzt nach
|
||||
|
||||
Bereits probiert:
|
||||
- `Zentrale Tabelle: 20106 Datensaetze gespeichert.`
|
||||
|
||||
- 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
|
||||
haengen.
|
||||
|
||||
Aktueller Stand:
|
||||
Die eigentliche Ursache war am Ende nicht mehr der Batch-Insert selbst, sondern ein kaputter SQLite-Schemazustand:
|
||||
|
||||
- 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
|
||||
- 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
|
||||
|
||||
Datei:
|
||||
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
|
||||
|
||||
Die nächste Session sollte genau dort weiter debuggen, falls es noch hängt.
|
||||
Danach wurde der Export erfolgreich getestet und geht jetzt wieder durch.
|
||||
|
||||
Wichtig:
|
||||
## Was bei einer naechsten Stoerung zuerst zu pruefen ist
|
||||
|
||||
- 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
|
||||
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
|
||||
|
||||
@@ -334,14 +328,3 @@ Ergebnis:
|
||||
- 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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user