# Optimierungsanalyse: Canvas App "bmvcc" **App ID:** dad7be8c-eae6-4976-987d-f951b9e7ed79 **App Name:** bmvcc_bmvcc_31122 **Status:** Ready **Analysedatum:** 9. April 2026 **Client Version:** 3.26034.12.0 --- ## Executive Summary Die Canvas App **`bmvcc`** ist die zentrale Anwendung zur Betriebsmittelverwaltung. Die Monitor-Daten zeigen kein kritisch langsames Startverhalten, sondern eine insgesamt akzeptable Ladezeit von rund **4,5 Sekunden**. Die Optimierung sollte deshalb nicht primär auf generisches Startup-Tuning zielen, sondern auf die im Trace sichtbaren Risiken: **screenuebergreifende Control-Referenzen**, **nicht delegierbare LookUp-/Filter-Muster** und **kumulative Netzwerklast**. ### Trace-basierte Kernaussagen - Initiale Navigation: ca. **317 ms** - `LoadScreen (Home)`: ca. **1.149 ms** - Netzwerklast gesamt: ca. **3.068 ms** aus **12 Calls** - Auffaellige Architekturwarnungen: **2 InefficientControlReferences** - Auffaellige Skalierungswarnungen: **14 nicht delegierbare LookUp-/Filter-Muster** --- ## 1. Performance-Optimierungen ### 1.1 Trace-basierte Daten- und Formularoptimierung (HIGH PRIORITY) **Befund:** Die App konsumiert 11 Dataverse-Tabellen mit direktem `default.cds`-Zugriff: - Relations - bmvcc_firma - bmvcc_kontakt - bmvcc_artikel - bmvcc_equipmentrecord (Geraete) - bmvcc_organizationlocation (Standorte) - bmvcc_hersteller - systemuser (Benutzer) - bmvcc_timetrackingentry (Zeiterfassung) - businessunit (Org-Einheiten) - bmvcc_pruefbericht (Pruefberichte) Der Monitor zeigt dabei kein dramatisch langsames Initial-Loading, aber eine fragile Struktur: - **2 `InefficientControlReferences`** erzwingen vorzeitiges Laden weiterer Screens - **14 nicht delegierbare LookUp-/Filter-Muster** begrenzen die Skalierung - **12 Netzwerkanfragen** summieren sich auf rund **3.068 ms** - einzelne Aufrufe liegen bereits im Bereich von **>500 ms** **Problem:** - **Screen-Kopplung:** Home referenziert Controls aus `scrBexioKOntakteDetail` und erzeugt dadurch zusaetzliche Ladezeit - **Delegationsrisiko:** Formeln mit komplexem `LookUp`/`Filter` verlagern Arbeit auf den Client statt auf Dataverse - **Kumulative Netzwerklast:** Der Start ist aktuell akzeptabel, hat aber wenig Reserven fuer wachsende Datenmengen **Empfehlung:** ```text Priority: HOCH 1. Entferne screenuebergreifende Control-Referenzen: - Keine direkten References von Home auf Controls in Detail-Screens - Werte ueber Variablen, Context oder Collections uebergeben 2. Behebe nicht delegierbare Formeln: - LookUp/Filter-Pruefung in allen Galerie-Items und Suchfeldern - Beispiel aus dem Trace: Time Tracking Entry Filter auf Delegation pruefen - StartsWith, direkte Vergleiche und serverseitig delegierbare Operatoren bevorzugen 3. Reduziere kumulative Netzwerklast: - Stammdaten cachen, wenn sie mehrfach pro Session verwendet werden - langsame Controls priorisiert untersuchen, insbesondere Kontakt- und Standortauswahl 4. Lazy Loading nur gezielt einsetzen: - nicht als Hauptmassnahme fuer den Start - sondern fuer selten genutzte Bereiche wie Zeiterfassung oder Nebenscreens ``` **Konkreter Implementierungsleitfaden:** → Siehe [Control-Reference Fix-Leitfaden](control-reference-fix-guide.md) fuer Schritt-fuer-Schritt Anleitung zur Beseitung der screen­uebergreifenden Referenzen (**~668 ms Ersparnis**). **Geschaetzter Impact:** - Screen-Wechsel und Initialkontext: -15 bis -25% - Skalierbarkeit bei groesseren Datenmengen: deutlich verbessert - Risiko spaeterer Performance-Probleme: stark reduziert --- ### 1.2 Office 365 Connector Optimierung (MEDIUM PRIORITY) **Befund:** Drei Office 365-Connectoren sind konfiguriert: - Power Apps for Makers - Office 365 Users (SearchUser, UserPhotoMetadata, UserPhoto_V2) - Office 365 Groups (ListGroupMembers, ListGroups) **Problem:** - **SearchUser Calls:** Möglicherweise auf jedem Keypress ausgeführt - **Foto-Metadaten:** UserPhoto_V2 fordert für jede Zeile Fotos an - **Groups-Calls:** Unnecessary ListGroups auf jedem Render **Empfehlung:** ```text Priority: MITTEL 1. Batch-Abfragen fuer User-Fotos: - Verwende Dataverse entityimage_url - Nicht einzelne UserPhoto_V2-Calls pro Kontakt 2. Verzögerte User-Suche (Debounce): - SearchUser erst nach 300ms Tastatureingabe - Minimale Suchlaenge: 3 Zeichen - Maximum Results: 10 3. Groups-Cache: - varCachedGroups = First(Office365Groups.ListGroups()) - Nur einmal pro Session laden 4. Ersetze Office 365 Connector teilweise mit Dataverse: - systemuser-Daten sind bereits in Dataverse - Verwende direkte Dataverse-Filter ``` **Geschaetzter Impact:** - API Calls: -50% - User Experience (Suche): -70% Latenz - Connector Ressourcen: -40% --- ## 2. Architektur & Design Verbesserungen ### 2.1 Canvas Component Library Refactoring (MEDIUM PRIORITY) **Befund:** App importiert 16 Komponenten aus `cre77_pagcomponents_21a73` **Problem:** - **Unbekannte Komponenten:** Component-IDs statt beschreibender Namen dokumentiert - **Versionierung:** Alle Komponenten auf Version 2026-03-07 – unklar ob aktuell - **Potenzielle Duplikate:** 16 Komponenten für eine App könnten überflüssig sein - **Tightly-Coupled Library:** Abhängigkeit auf externe Library mit Hard-dependency **Empfehlung:** ```text Priority: MITTEL 1. Component Audit durchfuehren: - Welche 16 Komponenten werden verwendet? - Redundante Komponenten entfernen - Ziel: auf 8-10 kritische reduzieren 2. Interne Komponenten-Dokumentation: { "ComponentID": "0d0af31cdc9d4299b71f8fe32e6a1c80", "Purpose": "Header Navigation Bar", "Usage": "Every Screen", "Critical": true } 3. Library-Update-Strategie: - Version 2026-03-07 ist uber 1 Monat alt - Quarterly-Updates etablieren 4. Dependency Decoupling: - Evaluiere ein-zwei Komponenten als native - Verbessert Portabilitaet ``` **Geschaetzter Impact:** - App-Load: -15% - Wartbarkeit: +40% - Deployment-Sicherheit: +50% --- ### 2.2 Connection References Cleanup (LOW PRIORITY) **Befund:** App definiert 3 Connection References: - 02e7af1d-4ba1-45e1-b766-a7eb5dac9185: Power Apps for Makers - ae45c343-8c81-4cda-80a9-a0e118e64138: Office 365 Users - 2832be09-a75f-4f0b-800c-20ae0e156fe1: Office 365 Groups **Problem:** - Power Apps for Makers: Nur für Maker-UI nötig - Office 365 Connectoren: Könnten durch Dataverse ersetzt werden **Empfehlung:** ```text Priority: NIEDRIG 1. Audit der Connection-Nutzung: - Power Apps for Makers: Nur in Edit-Mode? - Falls nicht verwendet: entfernen 2. Dataverse statt Office 365 in Produktion: - systemuser-Daten: Filter(Users, Status = Active) - Keine zusaetzliche Connector-Lizenz 3. Multi-Environment-Szenario: - Nutze EnvironmentVariablen fuer Connector-Auswahl ``` **Geschaetzter Impact:** - Lizenzkosten: sparen - Deployment-Komplexität: -20% - Fehlerquellen: -15% --- ## 3. Skalierbarkeit & Stabilität ### 3.1 Tablet-Optimierung (MEDIUM PRIORITY) **Befund:** ```text Device: Tablet (Primary) Size: 2136 x 1488 px Supports: Portrait & Landscape ``` **Problem:** - Hohe Auflösung führt zu grösseren Assets - Portrait-Modus: Weniger Platz für Listen/Tabellen - Responsive Design möglicherweise nicht optimal **Empfehlung:** ```text Priority: MITTEL 1. Responsive Breakpoints definieren: - Tablet Portrait: Primary View - Tablet Landscape: Secondary View - Optional: Desktop Support testen 2. Layout-Optimierungen: - Portrait Mode: Horizontal scrollende Tabellen - Landscape Mode: Split-View (Liste + Details) - Buttons: Mindestens 44px Hoehe 3. Asset-Groessenkontrolle: - Hintergrundbilder: Max 5MB - Icons: Built-in Icon-Set statt Assets - Bilder: Vector statt Raster 4. Performance auf HD-Screens: - Teste auf iPad Pro, Samsung Tab S - Rendering bei 4K Displays ``` **Geschaetzter Impact:** - User Experience: +45% - Device Support: +70% - Crash-Rate: -30% --- ### 3.2 Fehlerbehandlung & Logging (MEDIUM PRIORITY) **Befund:** App hat minimal erkennbare Error-Handling-Konfiguration in Metadata. **Problem:** - Keine sichtbaren Fehlermetriken dokumentiert - Keine Telemetrie-Konfiguration in Tags - Wenn Dataverse-Abfragen fehlschlagen: Nutzer sieht nichts **Empfehlung:** ```text Priority: MITTEL 1. Implementiere Fehler-Toast-Notifications: If(IsError(result), Notify("Error loading", NotificationType.Error, 5000), Notify("Data loaded", NotificationType.Success)) 2. Fallback-Logik: - Geraete-Fehler: Zeige cached Daten - Sync-Fehler: Informiere Nutzer - Timeout nach 30s: Zeige Meldung 3. Monitoring / Application Insights: - Enable PA App Analytics - Uptime, Error-Rate tracken - Weekly Dashboard-Review 4. Fehler-Tracker: - Log PA Errors zu bmvcc_bexiosyncerror - Trend-Analyse ueber Zeit ``` **Geschaetzter Impact:** - Debugging-Zeit: -60% - User Confidence: +50% - Incident Response: -75% --- ## 4. Dependency Management ### 4.1 Component Library Version Alignment (LOW PRIORITY) **Befund:** ```text Canvas Component Library: cre77_pagcomponents_21a73 Version: 2026-03-07T06:22:26Z (ueber 1 Monat alt) Tenant: b966f9cd-0013-403b-8f43-242a7d3f632f Environment: a7fad185-af79-edb4-8abc-616761480446 ``` **Problem:** - Version ist nicht aktuell - Hard-Abhängigkeit auf spezifische Tenant+Environment - Erschwert App-Portierung zu anderen Umgebungen **Empfehlung:** ```text Priority: NIEDRIG 1. Quarterly Update-Cycle etablieren: - Q2 2026: Update auf Latest Library Version - Q3 2026: Pruefe Breaking Changes - Q4 2026: Full Regression Test 2. Version-Locking in Dokumentation: | App Version | Library Version | Status | | 31122 | 2026-03-07 | ACTIVE | | 31122 | 2026-04-09 | READY | 3. Multi-Environment Ready Checklist: - [ ] Can Library be imported to Prod? - [ ] Tenant ID matches prod tenant - [ ] Version control for library updates ``` **Geschaetzter Impact:** - Stabilität: +20% - Deployment-Zeit: -10% - Wartbarkeit: +15% --- ## 5. Quick Wins (Sofort Umzusetzen) | # | Massnahme | Aufwand | Impact | Prioriaet | | --- | --- | --- | --- | --- | | 1 | Screen-Referenzen zwischen Home und Detail-Screens entfernen | 1-2h | HOCH | KRITISCH | | 2 | 14 nicht delegierbare LookUp-/Filter-Formeln bereinigen | 3-4h | HOCH | KRITISCH | | 3 | SearchUser Debounce | 1h | MITTEL | HOCH | | 4 | Cache fuer wiederverwendete Stammdaten | 2h | MITTEL | HOCH | | 5 | Error-Toast Notifications | 2h | NIEDRIG | MITTEL | --- ## 6. Monitoring & Metriken ### Baseline vor Optimierung | Metrik | Aktuell | Ziel | Methode | | --- | --- | --- | --- | | App Load Time | ca. 4.5s | <3.5s | Power Apps Monitor Trace | | LoadScreen Home | ca. 1.149s | <0.8s | Power Apps Monitor Trace | | Netzwerkdauer gesamt | ca. 3.068s | <2.5s | Power Apps Monitor Trace | | Netzwerkanfragen beim Start | 12 | <10 | Power Apps Monitor Trace | | Delegationswarnungen | 14 | 0 | Formula Review / App Checker | | InefficientControlReferences | 2 | 0 | Power Apps Monitor Trace | ### Monitoring-Setup ```text 1. Power Apps Analytics aktivieren Settings > Analytics > Enable 2. Woechentliche Reports: - Top Errors - Session Duration - Query Performance - User Load Distribution 3. Alert-Schwellwerte: - Load Time > 5s: Warning - Error Rate > 2%: Alert - API Rate Limit: Critical ``` --- ## 7. Implementierungs-Roadmap ### Phase 1: Kritische Massnahmen (Woche 1-2) - Screen-Referenzen zwischen Home und Detail-Screens entfernen - Nicht delegierbare LookUp-/Filter-Formeln priorisiert korrigieren - Office 365 SearchUser Debounce ### Phase 2: Performance Verbesserungen (Woche 3-4) - Collection-Cache fuer wiederverwendete Stammdaten - Langsame Netzwerkaufrufe in Kontakt- und Standortkomponenten pruefen - UserPhoto optimieren ### Phase 3: Architektur Refactoring (Woche 5-6) - Component Audit durchführen - Component Library Version Update - Connection References Cleanup ### Phase 4: Monitoring & Stabilität (Woche 7) - Analytics aktivieren - Fehler-Tracking Setup - Dokumentation aktualisieren --- ## 8. Geschaetzte Ergebnisse nach Optimierung | Bereich | Vorher | Nachher | Verbesserung | | --- | --- | --- | --- | | App Load Time | ca. 4.5s | 3.0-3.5s | -20 bis -35% | | LoadScreen Home | ca. 1.149s | <0.8s | -30% | | Netzwerkanfragen beim Start | 12 | 8-10 | -15 bis -30% | | Delegationswarnungen | 14 | 0 | -100% | | InefficientControlReferences | 2 | 0 | -100% | | Wartungsrisiko bei Wachstum | Hoch | Mittel | deutlich reduziert | --- ## 9. Kontakt & Support **Fragen zur Implementierung?** - Siehe Technische Details: [technische-details.md](technische-details.md) - Canvas App Flows: [fachliche-prozesse.md](fachliche-prozesse.md) - Architecture Overview: [architektur.md](architektur.md) **Nächste Schritte:** 1. Reviewe diese Empfehlungen im Team 2. Schaetze Aufwaende fuer Phase 1 3. Plane Sprint-Integration 4. Etabliere Monitoring vor Optimierungen