Izrada velikih i složenih aplikacija podloge za crtanje

Većina članaka u ovom odeljku dokumentacije pokriva performanse aplikacija tokom izvršavanja koje doživljavaju osobe koje ih koriste. Ovaj članak pokriva performanse aplikacije koje doživljavaju osobe koje ih prave.

Kako aplikacije postaju veće i složenije, potrebno Power Apps Studio je učitati i upravljati većim brojem kontrola, formula i izvora podataka, a sve to sa međuzavisnostima koje eksponencijalno rastu. Power Apps Studio može da potraje duže, a funkcije kao što su IntelliSense i kodiranje boja mogu da zaostaju. Koristite preporuke koje slede da biste bolje radili sa velikim i složenim aplikacijama Power Apps Studio. One takođe mogu da pomognu u poboljšanju performansi izvršavanja aplikacija.

Primeri iz ovog članka koriste rešenje uzorka hitnog reagovanja bolnice.

Koristite App.Formulas umesto App.OnStart

Savet

Funkciju i funkciju podloge za crtanje možete da koristite prilagođena izlazna svojstva kao alternativu imenovanim formulama.

Najbolji način da smanjite vreme učitavanja i za jedno i za Power Apps Studio drugo i za aplikaciju je da zamenite promenljivu i pokretanje kolekcije u app.OnStart imenovanim formulama u App.Formulas.

Pogledajmo sledeći primer koji koristi App.OnStart.

// Get the color of text on a dark background.
Set(varColorOnDark,RGBA(0, 0, 0, 1));

// Get the color of the menu icons.
Set(varColorMenuIcon,"#0070a9");

// Get the styles for a form.
Set(varFormStyle,
    {
        DataCard: { Height: 50 },
        Title: { Height: 50, Size: 21, Color: varColorOnDark },
        Control: { Height: 50, Size: 18 },
        Label: { Size: 18, Color: varColorOnDark }
    }
);

ClearCollect(
    FacilitiesList,
    ForAll(
        Facilities,
        { Name: 'Facility Name', Id: Facility }
    )
);
If(
    Not IsBlank(Param("FacilityID")),
    Set(ParamFacility,
        LookUp(
            FacilitiesList,
            Id = GUID(Param("FacilityID"))
        ).Name
    );
);

Pošto su to niz izjava, vaša aplikacija mora da proceni ove Set i Prikupi pozive da bi prikazala prvi ekran, što čini da se aplikacija sporije učitava. I zato što se cela Aplikacija.OnStart mora uzeti u obzir kao celina, očuvana porudžbina i greške koje se prikupljaju pre nego što se vrati konačni rezultat, formula je Power Apps Studio složena za analizu.

Postoji bolji način. Umesto toga koristite App.Formule i definišite ove promenljive i kolekcije kao imenovane formule, kao u sledećem primeru.

// Get the color of text on a dark background.
varColorOnDark = RGBA(0, 0, 0, 1);

// Get the color of the menu icons.
varColorMenuIcon = "#0070a9";

// Get the styles for a form.
varFormStyle = 
    {
        DataCard: { Height: 50 },
        Title: { Height: 50, Size: 21, Color: varColorOnDark },
        Control: { Height: 50, Size: 18 },
        Label: { Size: 18, Color: varColorOnDark }
    };

FacilitiesList =
    ForAll(
        Facilities,
        { Name: 'Facility Name', Id: Facility }
    );

ParamFacility = 
    If( Not IsBlank(Param("FacilityID")),
        LookUp(
            FacilitiesList,
            Id = GUID(Param("FacilityID"))
        ).Name,
        Blank()
    );

Ova promena možda deluje malo, ali može imati ogroman uticaj. Pošto je svaka imenovana formula nezavisna od ostalih, Power Apps Studio može nezavisno da ih analizira, efikasno deleći veliku Aplikaciju.OnStart na manje komade. Videli smo da Power Apps Studio vreme opterećenja pada za čak 80% samo sa ovom promenom.

Aplikacija se takođe brže učitava jer ne mora da procenjuje ove formule dok joj ne bude potreban rezultat. Prvi ekran aplikacije se prikazuje odmah.

Imenovane formule se ne mogu koristiti u svim situacijama jer ne možete da ih menjate ili koristite sa funkcijom "Set ". Neke situacije zahtevaju upotrebu promenljive stanja koja se može izmeniti. Set je savršen za ovakve situacije i treba da nastavite da ga koristite. Ali, češće nego što nije, koristite globalne promenljive u onStart-u da biste podesili statičke vrednosti koje se ne menjaju. U tim slučajevima, imenovana formula je bolji izbor.

Pošto su imenovane formule nepromenljive, prefiks var (skraćeno od "promenljiva") kao konvencija o imenovanju više nije odgovarajući. Imena u ovom primeru nismo promenili jer bi to zahtevalo da se promene u ostatku aplikacije podudaraju.

Primamljivo je postaviti imenovanu formulu u App.OnStart, ali nemojte. Ne pripadaju tamo. Kao svojstvo On behavior,App.OnStart ocenjuje svaku od svojih izjava redom, kreirajući globalne promenljive i razgovarajući sa bazama podataka samo jednom, kada se aplikacija učita . Imenovane formule su formule koje definišu kako da izračunate nešto kad god je potrebno i uvek su tačne. Ta priroda formule im omogućava da budu nezavisni i omogućava aplikaciji da završi učitavanje pre nego što se proceni.

Razdvajanje dugačkih formula

App.OnStart je jedan od najgorih prestupnika za duge formule i definitivno tamo gde bi trebalo da počnete, ali to nije jedini slučaj.

Naše studije su pokazale da skoro sve aplikacije sa dugim opterećenjem imaju Power Apps Studio bar jednu formulu veću od 256.000 karaktera. Neke aplikacije sa najdužim vremenom učitavanja imaju formule veće od milion znakova. Formule koje su dugo stavljale značajan napor Power Apps Studio.

Da stvar bude gora, kopiranje i lepčenje kontrole dugom formulom duplira formulu u svojstva kontrole, a da ona nije realizovana. Power Apps je po uzoru na Excel, gde je uobičajeno više kopija formule. Međutim, u Excel formulama su ograničene na jedan izraz i sadrže 8.000 znakova. Power Apps formule mogu da rastu mnogo duže sa uvođenjem imperativne logike i operatera lančanog sistema (; ili ;;, u zavisnosti od lokalnog stanovništva).

Opšte rešenje je da podelimo dugačke formule na manje delove i ponovo koristimo delove, kao što smo to uradili u prethodnom odeljku kada smo promenili Set/Collect izjave u App.OnStart na imenovane formule u App.Formulas. U drugim programskim jezicima delovi koji se mogu ponovo koristiti često se nazivaju podbroutini ili korisnički definisane funkcije. Imenovane formule možete da mislite kao jednostavan oblik korisnički definisane funkcije bez parametara ili neželjenih efekata.

Svuda koristite imenovane formule

U ranijem primeru, koristili smo imenovane formule kao zamenu za App.OnStart. Međutim, možete da ih koristite za zamenu izračunavanja bilo gde u aplikaciji.

Na primer, jedan od ekrana u rešenju uzorka hitnog odgovora bolnice uključuje ovu logiku u Screen.OnVisible:

ClearCollect(
    MySplashSelectionsCollection,
    {
        MySystemCol: First(
            Filter(
                Regions,
                Region = MyParamRegion
            )
        ).System.'System Name',
        MyRegionCol: First(
            Filter(
                Regions,
                Region = MyParamRegion
            )
        ).'Region Name',
        MyFacilityCol: ParamFacility,
          MyFacilityColID:  LookUp(
            FacilitiesList,
            Id = GUID(Param("FacilityID"))
        ).Id
    }
); 

Ova formula se može podeliti na skup imenovanih formula. To takođe olakšava čitanje formule.

MyRegion = LookUp(
                    Regions,
                    Region = MyParamRegion
           );

MyFacility = LookUp(
                    FacilitiesList,
                    Id = GUID(Param("FacilityID")
            );

MySplashSelectionsCollection = 
    {
        MySystemCol: MyRegion.System.'System Name',
        MyRegionCol: MyRegion.'Region Name',
        MyFacilityCol: ParamFacility,
        MyFacilityColID:  MyFacility.Id
    };

ParamFacility smo izdvojili kao imenovanu formulu ranije kada smo premestili većinu Set poziva iz App.OnStart na imenovane formule u App.Formulas.

Imenovane formule se procenjuju samo kada su njihove vrednosti potrebne. Ako je prvobitna namera korišćenja screen.OnVisible bila da odloži rad dok se ekran ne prikaza, onda je rad i dalje odložen kao globalne imenovane formule u App.Formulas.

Korišćenje funkcije "Sa"

Funkciju "Sa" možete da koristite i u formuli da biste razdelili logiku. Kreirajte zapis u prvom parametru sa vrednostima koje želite da koristite kao polja, a zatim koristite ta polja u drugom parametru da biste izračunali povratnu vrednost iz "Sa ". Na primer, prethodni primer se može napisati kao samo jedna imenovana formula:

MySplashSelectionsCollection = 
    With( { MyRegion: LookUp(
                            Regions,
                            Region = MyParamRegion
                      ),
            MyFacility: LookUp(
                            FacilitiesList,
                            Id = GUID(Param("FacilityID")
                      ) 
           },
           {
                MySystemCol: MyRegion.System.'System Name',
                MyRegionCol: MyRegion.'Region Name',
                MyFacilityCol: ParamFacility,
                MyFacilityColID:  MyFacility.Id
           }
    )

Jedna loša strana korišćenja sa ovim načinom MyFacility je to što se ne može koristiti zato što su definisane MyRegion u istoj funkciji Sa funkcijom, problemom koji nije prisutan sa imenovanim formulama . Jedno od rešenja je da se ugnezdi sa funkcijama i da se pomoću ključne reči "Kao " imenuje zapis za svaku od njih kako bi se olakšao pristup svim promenljivim . ·

Korišćenje komponenti podloge za crtanje

Komponente podloge za crtanje se najčešće koriste za kreiranje kontrole UI koja se može postaviti na podlogu baš kao kontrola. Takođe ih možete koristiti bez smeštanja u UI da biste izvršili izračunavanja sa prilagođenim izlaznim svojstvima kao alternativu imenovanim formulama. Komponente podloge za crtanje se lako dele u svim aplikacijama sa bibliotekama komponenti i, za razliku od imenovanih formula, u potpunosti su podržane. Međutim, teže se konfigurišu i koriste od imenovanih formula.

Da biste razdelili logiku:

  1. Prebacite Power Apps Studio se na karticu " Komponente " u prikazu stabla.
  2. Kreiranje nove komponente.
  3. U oknu " Svojstva" uključite opseg Access aplikacija.
  4. Dodajte prilagođeno svojstvo.
  5. Postavite tip svojstva na "Izlaz " i "Tip podataka" na odgovarajući način.
  6. Izaberite Kreiraj.
  7. U biraču svojstva pored polja za formulu na vrhu ekrana izaberite novo svojstvo.
  8. Napišite formulu za logičku podelu i ponovnu nušu.

Da biste koristili logiku:

  1. Prebacite se na karticu "Ekrani " u prikazu "Stablo".
  2. U oknu " Umetanje " razvijte stavku " Prilagođeno " i umetnite komponentu.
  3. Da biste izračunali vrednost sa svojstvom, koristite ComponentName.PropertyName.

Koristi izbor pomoću skrivene kontrole za imperativ logike

Imperativna logika se koristi za menjanje stanja pomoću stavke "Postavi i prikupi", obaveštavanje korisnika pomoću usluge Notify, kretanje do drugog ekrana ili aplikacije pomoću stavke "Pretraživanje i pokretanje" i upisivanje vrednosti u bazu podataka pomoću aplikacije Patch,SubmitForm ili RemoveIf.

Imenovane formule i prilagođena svojstva komponente podloge za crtanje ne podržavaju imperativ logike. Uobičajen način da podelite imperativ logike je da koristite OnSelect svojstvo skrivene kontrole.

  1. Dodajte kontrolu dugmeta na ekran.
  2. Postavite svojstvo OnSelect na imperativnu logiku koju želite da izvršite.
  3. Postavite svojstvo Visible na netačno, pošto nema potrebe da korisnik vidi ili komunicira sa njim.
  4. Pozovite Select( Button ) kada želite da izvršite imperativ logike.

Na primer, jedan od ekrana u našem uzorku ima sledeće svojstvo OnSelect na kontroli dugmeta . (Ovaj jednostavan primer je samo za ilustraciju. Obično biste ovu tehniku koristili samo za duže formule.)

btnAction_17.OnSelect = 
    Trace("Feedback Screen: Submit Button",TraceSeverity.Information);
    If(
        // Proceed if all forms are validated.
        And(
            FormFeedback.Valid
        ),
    
        // Set the updates to static variables.
        Set(updatesFeedback,Patch(Defaults('App Feedbacks'), FormFeedback.Updates));
        // Submit the first form. Subsequent actions can be found in the OnSuccess.
        SubmitForm(FormFeedback);
        ,
    
        Notify("Please complete all fields before proceeding",
               NotificationType.Warning,2000)
    );

Da bismo podelili ovu logiku na delove, možemo da stavimo delove na odvojene kontrole dugmeta i izaberemo ih iz originala:

btnTrace.OnSelect = 
    Trace("Feedback Screen: Submit Button",TraceSeverity.Information);

btnSubmit.OnSelect = 
    If(
        // Proceed if all forms are validated.
        And(
            FormFeedback.Valid
        ),
    
        // Set the updates to static variables.
        Set(updatesFeedback,Patch(Defaults('App Feedbacks'), FormFeedback.Updates));
        // Submit the first form. Subsequent actions can be found in OnSuccess.
        SubmitForm(FormFeedback);
        ,
    
        Notify("Please complete all fields before proceeding",
               NotificationType.Warning,2000)
    );

btnAction_17.OnSelect = 
    Select( btnTrace );
    Select( btnSubmit );

Ova tehnika funkcioniše samo na istom ekranu. Druge tehnike koje su nešto komplikovanije funkcionišu preko ekrana, kao što je korišćenje kontrole "Preklopnik ", podešavanje funkcije OnCheck na logiku koju želite da pokrenete i postavljanje podrazumevane vrednosti na globalnu promenljivu, a zatim preklopanje globalne promenljive Set( global, true ); Set( global, false ) sa tačkom kojom želite da pokrenete logiku.

U ovom primeru, neka logička podela je već bila urađena. U komentaru se pominje da se "naredne radnje mogu naći u OnSuccess-u". Ovaj događaj pokreće imperativ logike nakon uspešnog prosleđivanje zapisa, rešenja specifičnog za funkciju SubmitForm .

Particije aplikacije

Neke aplikacije rastu na hiljade kontrola i stotine izvora podataka, što usporava Power Apps Studio. Kao i kod dugih formula, velike aplikacije se mogu podeliti na manje odeljke koji rade zajedno na kreiranju jednog korisničkog iskustva.

Zasebne aplikacije podloge za crtanje

Jedan od pristupa je implementacija odeljaka u zasebnim aplikacijama podloge za crtanje i korišćenje funkcije "Pokreni" za kretanje između zasebnih aplikacija i dodavanja potrebnog konteksta.

Ovakav pristup je korišćen u rešenju uzorka hitnog reagovanja bolnice. Odvojene aplikacije upravljaju svakom od glavnih oblasti ukupne aplikacije. Aplikacije dele uobičajenu komponentu komandne table kroz biblioteku komponenti koju svaka aplikacija prikazuje na početnom ekranu:

Snimak ekrana aplikacije "Uzorak rešenja za hitne slučajeve u bolnici" koja radi na telefonu, a koja prikazuje komponentu podloge za komandnu tablu.

Kada korisnik izabere oblast, komponenta koristi metapodatke o dostupnim aplikacijama i koja aplikacija hostuje komponentu. Ako se željeni ekran nalazi u ovoj aplikaciji (to jest,ThisItem.Screen · nije prazan), onda se poziva za navigaciju. Ali ako se željeni ekran nalazi u drugoj aplikaciji (to jest, ThisItem.PowerAppID nije prazan), onda se funkcija Launch koristi sa ID-om aplikacije cilja i FacilityID kontekstom:

If(
    IsBlank(ThisItem.Screen),
    If(IsBlank(ThisItem.PowerAppID), 
        Launch(ThisItem.URL),           
        Launch("/providers/Microsoft.PowerApps/apps/" & ThisItem.PowerAppID, 
               "FacilityID", Home_Facility_DD.Selected.Id)
    ),
    Navigate(
        ThisItem.Screen,
        Fade
    )
);

Stanje u originalnoj aplikaciji se gubi kada se lansira druga aplikacija. Uverite se da ste sačuvali bilo koje stanje pre nego što pozovete funkciju "Pokreni ". Zapišite je u bazu podataka, pozovite SaveData ili prosledite stanje ciljnoj aplikaciji sa parametrima koji se čitaju pomoću funkcije Param .

Aplikacija sa modelima sa prilagođenim stranicama

Odeljci se takođe mogu primeniti kao prilagođene stranice. Prilagođene stranice se ponašaju kao aplikacija mini platna sa kontejnerom aplikacije vođene modelom za navigaciju.

Napomena

Možete li nam reći o svojim željenim postavkama jezika u dokumentaciji? Ispunite kratku anketu. (imajte na umu da je ova anketa na engleskom jeziku)

Anketa će trajati oko sedam minuta. Ne prikupljaju se lični podaci (izjava o privatnosti).