Besserer Code

Sep 17, 2024
Power Apps Besserer Code

Effizientere Power Apps mit der With Funktion – So optimierst du deinen Code

Ich zeige dir, wie du deinen Code lesbarer und performanter gestaltest. Nutze dazu die With Funktion, um Variablen zu definieren, die nur in einer bestimmten Formel genutzt werden.

Ausgangssituation: Lagerverwaltungs-App

Als Ausgangslage nutze ich eine Lagerverwaltungs App, die ich in meinem neuen Power Apps Einstiegskurs vorstelle und Schritt für Schritt erstelle.

Nähere Details zum Einstiegskurs findest du hier.

Mithilfe dieser App können Buchung angelegt und entsprechend in SharePoint abgespeichert werden. Über das OnSuccess Event des Bearbeitungsformulars wird die Buchungstabelle sowie die Produkttabelle mit dem neuen Lagerbestand aktualisiert.

Bearbeitungsformular
OnSuccess=
If(frm_Buchungen.LastSbumit.Typ = "Kauf";
    Patch(
        Produkte;LookUp(Produkte;Produkt = frm_Buchungen.LastSubmit.Produkt
        );
    {
        Produkt: frm_Buchungen.LastSubmit.Produkt;
        Lagerbetsand:LookUp(
            Produkte;Produkt = frm_Buchungen.LastSubmit.Produkt
            ).Lagerbestand + Value(frm_Buchungen.LastSubmit.Menge)
    }
);    
Patch(
    Produkte;
    LookUp(
        Produkte;
        Produkt = frm_Buchungen.LastSubmit.Produkt
        );
    {
        Produkt: frm_Buchungen.LastSubmit.Produkt;
    Lagerbetsand:LookUp(
        Produkte;
        Produkt = frm_Buchungen.LastSubmit.Produkt
    ).Lagerbestand - Value(frm_Buchungen.LastSubmit.Menge)
}
)
)

Die With Funktion: Mehr Ordnung im Code

Im aktuellen Code gibt es viele Wiederholungen, z.B. beim Abrufen des Produkts. Dieses wird mehrmals aus dem Bearbeitungsformular geladen. Nutze die With Funktion, um eine lokale Variable zu erstellen, die nur in der jeweiligen Formel verwendet wird.

Schritt 1: Variable definieren

Definiere am Anfang der Formel eine lokale Variable für das Produkt. Dadurch hast du die Mehrfachnennungen eliminiert und kannst überall, wo vorher auf das Produkt zugegriffen wurde, einfach die Variable einsetzen.

Bearbeitungsformular
OnSuccess=
With({varProdukt:frm_Buchungen.LastSubmit.Produkt};
    If(frm_Buchungen.LastSbumit.Typ = "Kauf";
        Patch(
            Produkte;LookUp(Produkte;Produkt = varProdukt
            );
        {
            Produkt: varProdukt;
            Lagerbetsand:LookUp(
                Produkte;Produkt = varProdukt
                ).Lagerbestand + Value(frm_Buchungen.LastSubmit.Menge)
        }
    );    
    Patch(
        Produkte;
        LookUp(
            Produkte;
            Produkt = varProdukt
            );
        {
            Produkt: varProdukt;
        Lagerbetsand:LookUp(
            Produkte;
            Produkt = varProdukt
        ).Lagerbestand - Value(frm_Buchungen.LastSubmit.Menge)
        }
    )
    )
)

Schritt 2: Weiter Variablen hinzufügen

Du kannst auch mehrere Variablen in der gleichen With Funktion definieren. Zum Beispiel kannst du auch die Menge als Variable festlegen.

Bearbeitungsformular
OnSuccess =
With({varProdukt:frm_Buchungen.LastSubmit.Produkt;varMenge:frm_Buchungen.LastSubmit.Menge};
    If(frm_Buchungen.LastSbumit.Typ = "Kauf";
        Patch(
            Produkte;LookUp(Produkte;Produkt = varProdukt
            );
        {
            Produkt: varProdukt;
            Lagerbetsand:LookUp(
                Produkte;Produkt = varProdukt
                ).Lagerbestand + Value(varMenge)
        }
    );    
    Patch(
        Produkte;
        LookUp(
            Produkte;
            Produkt = varProdukt
            );
        {
            Produkt: varProdukt;
        Lagerbetsand:LookUp(
            Produkte;
            Produkt = varProdukt
        ).Lagerbestand - Value(varMenge)
        }
    )
    )
)

Performance Verbesserung durch LookUp Optimierung

Ein großer Vorteil der With Funktion liegt auch in der Performance Verbesserung. Besonders bei LookUps kann es vorkommen, dass dieselbe Datenquelle mehrmals abgefragt wird. Dies belastet die Performance der App unnötig. Durch die Verwendung von geschachtelten With Funktionen (Nested With Functions) kannst du dies vermeiden und die LookUp Funktion nur einmal ausführen. Das verbessert die App Performance spürbar und hält deinen Code übersichtlich.

Bearbeitungsformular
OnSuccess=
With({varProdukt:frm_Buchungen.LastSubmit.Produkt;varMenge:frm_Buchungen.LastSubmit.Menge};
    With({varProduktDatensatz:LookUp(Produkte;Produkt = varProdukt)};
        If(frm_Buchungen.LastSbumit.Typ = "Kauf";
            Patch(
                Produkte;LookUp(Produkte;Produkt = varProdukt
                );
            {
                Produkt: varProdukt;
                Lagerbetsand:varProduktDatensatz.Lagerbestand + Value(varMenge)
            }
        );    
        Patch(
            Produkte;
            LookUp(
                Produkte;
                Produkt = varProdukt
                );
            {
                Produkt: varProdukt;
            Lagerbetsand:varProduktDatensatz.Lagerbestand - Value(varMenge)
            }
        )
        )
    )
)

Ich hoffe dieses Tutorial hilft dir dabei, deine Business Apps benutzerfreundlicher und effizienter zu gestalten.

 

Melde dich gerne für meinen Newsletter an, in dem ich dir Tipps und Tricks rund um Power Apps & Power Automate zusende.

 Hier gehts zum Detailvideo: