Looge suuri ja keerukaid lõuendirakendusi
Enamik dokumentatsiooni selle jaotise artikleid käsitleb rakenduste käitusaja toimivust vastavalt sellele, mida kogevad inimesed, kes neid kasutavad. Selles artiklis käsitletakse rakenduste toimivust, mida on kogenud inimesed, kes neid loovad.
Kuna rakendused muutuvad suuremaks ja keerukamaks, Power Apps Studio tuleb laadida ja hallata suuremat hulka juhtelemente, valemeid ja andmeallikaid, millel kõigil on eksponentsiaalselt kasvavad vastastikused sõltuvused. Power Apps Studio laadimine võib võtta kauem aega ning sellised funktsioonid nagu IntelliSense ja värvikoodid võivad hilineda. Kasutage järgnevaid soovitusi, et töötada paremini suurte ja keerukate rakendustega Power Apps Studio. Samuti võivad need aidata parandada teie rakenduste käitusaja toimivust.
Selle artikli näidetes kasutatakse haigla erakorralise vastus näidislahendust.
Rakenduse App.OnStart asemel App.Formulasi kasutamine
Näpunäide
Saate kasutada funktsiooni ja lõuendikomponendi kohandatud väljundatribuute nimega valemite alternatiivina.
Parim viis nii rakenduse kui ka Power Apps Studio teie rakenduse laadimisaja vähendamiseks on asendada rakenduses App.OnStart muutuja ja kogumise lähtestamine rakenduses App.Formulas nimega valemitega ·.
Vaatame järgmist näidet, mis kasutab rakendust 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
);
);
Kuna tegemist on avalduste jadaga, peab teie rakendus hindama neid kõnede seadmist ja kogumist järjekorras, enne kui saab kuvada esimese ekraani, mis muudab rakenduse laadimise aeglasemaks. Ja kuna kogu App.OnStart tuleb enne lõpptulemuse tagastamist käsitleda tervikuna, tellimus säilitada ja vead koondada, on valemit keeruline analüüsida Power Apps Studio .
On parem viis. Kasutage selle asemel rakendust App.Formulas ja määratlege need muutujad ja kogumid nimega valemitena, nagu järgmises näites.
// 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()
);
See muutus võib tunduda väike, kuid sellel võib olla tohutu mõju. Kuna iga nimetatud valem on teistest sõltumatu, Power Apps Studio saab neid iseseisvalt analüüsida, jagades suure rakenduse.OnStart tõhusalt väiksemateks tükkideks. Ainuüksi selle muudatusega oleme näinud, et Power Apps Studio laadimisaeg on vähenenud koguni 80%.
Teie rakendus laaditakse ka kiiremini, kuna see ei pea neid valemeid hindama enne, kui see vajab tulemust. Rakenduse esimene ekraan kuvatakse kohe.
Nimega valemeid ei saa kõigis olukordades kasutada, kuna te ei saa neid funktsiooniga Set muuta ega kasutada. Mõned olukorrad nõuavad olekumuutuja kasutamist, mida saab muuta. Komplekt sobib ideaalselt nendeks olukordadeks ja peaksite selle kasutamist jätkama. Kuid sagedamini kasutate OnStartis globaalseid muutujaid, et seadistada staatilisi väärtusi, mis ei muutu. Sellistel juhtudel on nimetatud valem parem valik.
Kuna nimevalemid on muutumatud, ei ole eesliide var
(lühend sõnast "muutuja") nimekonventsioonina enam asjakohane. Me ei muutnud selles näites nimesid, kuna see nõuaks muudatuste tegemist ülejäänud rakenduses, et see vastaks.
On ahvatlev paigutada nimega valem rakendusse App.OnStart , kuid ärge tehke seda. Nad ei kuulu sinna. Atribuudina On behavior hindab App.OnStart kõiki oma väiteid järjekorras, luues globaalseid muutujaid ja rääkides andmebaasidega ainult üks kord, kui rakendus on laaditud. Nimega valemid on valemid, mis määratlevad, kuidas vajadusel midagi arvutada, ja on alati tõesed. Just see valemi olemus võimaldab neil olla sõltumatu ja võimaldab rakendusel laadimise enne hindamist lõpetada.
Pikkade valemite tükeldamine
App.OnStart on pikkade valemite jaoks üks hullemaid rikkujaid ja kindlasti seal, kust peaksite alustama, kuid see pole ainus juhtum.
Meie uuringud on näidanud, et peaaegu kõigil pika laadimisajaga Power Apps Studio rakendustel on vähemalt üks valem, mis on pikem kui 256 000 tähemärki. Mõne pikima laadimisajaga rakenduse valem on üle 1 miljoni tähemärgi. Valemid, mis pikka aega panevad märkimisväärse koormuse Power Apps Studio.
Olukorra halvendamiseks dubleerib pika valemiga juhtelemendi kopeerimine ja kleepimine juhtelemendi atribuutides olevat valemit, ilma et seda realiseeritaks. Power Apps on modelleeritud Exceli järgi, kus valemi mitu koopiat on tavalised. Kuid Excelis on valemid piiratud ühe avaldisega ja nende ülempiir on 8,000 tähemärki. Power Apps valemid võivad imperatiivse loogika ja aheldamisoperaatori;
(või ;;
sõltuvalt lokaadist) kasutuselevõtuga palju pikemaks kasvada.
Üldine lahendus on pikkade valemite jagamine väiksemateks osadeks ja osade taaskasutamine, nagu tegime eelmises jaotises, kui muutsime rakenduses.OnStart ·/lausete kogumise määramise rakenduses App.Formulas nimega valemiteks ·. Teistes programmeerimiskeeltes nimetatakse korduvkasutatavaid osi sageli alamprogrammideks või kasutaja määratletud funktsioonideks. Võite mõelda nimega valemitest kui kasutaja määratletud funktsiooni lihtsast vormist, millel pole parameetreid ega kõrvaltoimeid.
Nimega valemite kasutamine kõikjal
Varasemas näites kasutasime rakenduse App.OnStart asemel nimega valemeid. Siiski saate neid kasutada arvutuse asendamiseks rakenduse mis tahes kohas.
Näiteks haigla erakorralise vastus näidislahenduse üks ekraanidest sisaldab seda loogikat Screen.OnVisible’is ·:
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
}
);
Selle valemi saab jagada nimega valemite kogumiks. Samuti muudab see valemi hõlpsamini loetavaks.
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
};
Ekstraktisime ParamFacility nimega valemina varem, kui teisaldasime enamiku App.OnStarti määratud kõnedest rakenduse App.Formulas nimega valemitesse.
Nimega valemeid hinnatakse ainult siis, kui nende väärtused on vajalikud. Kui screen.OnVisible’i kasutamise algne eesmärk oli lükata töö edasi kuni ekraani kuvamiseni, siis lükatakse töö ikkagi edasi rakenduses.Formulas globaalsete nimega valemitena.
Kasutage funktsiooni Koos
Loogika tükeldamiseks saate valemis kasutada ka funktsiooni Koos . Looge esimeses parameetris kirje väärtustega, mida soovite väljadena kasutada, ja seejärel kasutage teise parameetri neid välju, et arvutada tagastusväärtus väärtusest Koos. Näiteks võib eelmise näite kirjutada vaid ühe nimega valemina:
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
}
)
Selle viisiga kasutamise üks negatiivne külg on see, et MyFacility
neid ei saa kasutada MyRegion
, kuna need on määratletud samas funktsioonis Funktsiooniga - probleem, mida nimega valemite puhul pole. Üks lahendus on pesastada funktsioonidega ja kasutada märksõna As, et nimetada kirje igaühe jaoks, et anda lihtne juurdepääs kõigile muutujatele .
Kasutage lõuendi komponente
Lõuendi komponente kasutatakse kõige sagedamini kasutajaliidese juhtelemendi loomiseks, mida saab lõuendile paigutada nagu juhtelementi. Saate neid kasutada ka ilma kasutajaliidesesse paigutamata, et teha kohandatud väljundatribuutidega arvutusi nimega valemite alternatiivina. Lõuendikomponente on komponentideteekidega rakenduste vahel lihtne jagada ja erinevalt nimega valemitest on need täielikult toetatud. Kuid neid on raskem konfigureerida ja kasutada kui nimega valemeid.
Loogika tükeldamiseks tehke järgmist.
- Sisse Power Apps Studio aktiveerige puuvaates vahekaart Komponendid.
- Uue komponendi loomine.
- Lülitage paanil Atribuudid sisse Accessi rakenduse ulatus.
- Lisage kohandatud atribuut.
- Määrake atribuudi tüübiks Väljund ja andmetüübiks vastavalt vajadusele.
- Valige käsk Loo.
- Valige ekraani ülaosas valemiriba kõrval olevas atribuudivalijas uus atribuut.
- Kirjutage loogika tükeldamise ja taaskasutamise valem.
Loogika kasutamiseks tehke järgmist.
- Vahekaardi Ekraanid aktiveerimine puuvaates .
- Laiendage paanil Lisa jaotist Kohandatud ja sisestage oma komponent.
- Atribuudiga väärtuse arvutamiseks kasutage väärtust ComponentName.PropertyName.
Suvandi Select kasutamine peidetud juhtelemendiga imperatiivse loogika jaoks
Imperatiivset loogikat kasutatakse oleku muutmiseks funktsiooniga Set and Collect, kasutaja teavitamiseks funktsiooniga Notify, navigeerimise ja käivitamisega teisele ekraanile või rakendusse navigeerimiseks ning väärtuste kirjutamiseks andmebaasi patch,SubmitForm · või RemoveIf abil. · · ·
Nimega valemid ja lõuendikomponendi kohandatud väljundatribuudid ei toeta imperatiivset loogikat. Levinud viis imperatiivse loogika tükeldamiseks on kasutada peidetud juhtelemendi atribuuti OnSelect .
- Nupu juhtelemendi lisamine ekraanile.
- Seadke atribuut OnSelect imperatiivsele loogikale, mida soovite käivitada.
- Seadke atribuudi Nähtav väärtuseks väär, kuna kasutajal pole vaja seda näha ega sellega suhelda.
- Helistage
Select( Button )
, kui soovite imperatiivset loogikat täita.
Näiteks on ühel meie näidise ekraanil nupu juhtelemendil järgmine atribuut OnSelect . (See lihtne näide on mõeldud ainult illustreerimiseks. Tavaliselt kasutaksite seda tehnikat ainult pikemate valemite jaoks.)
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)
);
Selle loogika osadeks jagamiseks võime osad panna eraldi nupu juhtelementidele ja valida need originaalist:
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 );
See tehnika töötab ainult samal ekraanil. Muud tehnikad, mis on veidi keerukamad, töötavad ekraanide vahel, näiteks tumblerjuhtimise kasutamine, OnChecki seadistamine loogikale, mida soovite käivitada, ja vaikeväärtuse seadmine globaalsele muutujale ning seejärel globaalse muutuja ümberlülitamine punktiga Set( global, true ); Set( global, false )
, kus soovite loogikat käivitada.
Selles näites oli mõningane loogika poolitamine juba tehtud. Kommentaaris mainitakse, et "Järgnevad toimingud leiate OnSuccessist." See sündmus käivitab imperatiivse loogika pärast kirje edukat esitamist, mis on funktsioonile SubmitForm omane lahendus.
Rakenduse partitsioon
Mõned rakendused kasvavad tuhandete juhtelementide ja sadade andmeallikateni, mis aeglustub Power Apps Studio. Nagu pikkade valemite puhul, saab ka suured rakendused jagada väiksemateks osadeks, mis töötavad koos, et luua üks kasutajakogemus.
Eraldi lõuendirakendused
Üks lähenemisviis on rakendada jaotisi eraldi lõuendirakendustes ja kasutada käivitusfunktsiooni eraldi rakenduste vahel navigeerimiseks ja vajaliku konteksti edastamiseks.
Seda lähenemist kasutati haigla erakorralise vastus proovi lahenduses. Eraldi rakendused haldavad kogu rakenduse kõiki peamisi valdkondi. Rakendustel on ühine jaotuskilbi komponent komponenditeek kaudu, mida iga rakendus oma käivituskuval kuvab.
Kui kasutaja valib ala, kasutab komponent metaandmeid saadaolevate rakenduste ja selle kohta, milline rakendus komponenti majutab. Kui soovitud ekraan on selles rakenduses (st ThisItem.Screen pole tühi), siis tehakse navigeerimiskõne . Kuid kui soovitud ekraan on teises rakenduses (st ThisItem.PowerAppID pole tühi), siis kasutatakse käivitamisfunktsiooni sihtmärgi rakenduse ID-ga ja FacilityID kontekstiga:
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
)
);
Algse rakenduse olek läheb teise rakenduse käivitamisel kaotsi. Enne käivitusfunktsioonile helistamist salvestage kindlasti mis tahes olek. Kirjutage see andmebaasi, helistage SaveDatale või edastage olek sihtrakendusele parameetritega, mida loetakse funktsiooniga Param .
Mudelipõhine rakendus kohandatud lehtedega
Jaotisi saab rakendada ka kohandatud lehtedena. Kohandatud lehed toimivad minilõuendirakendusena, millel on navigeerimiseks mudelipõhine rakendusekonteiner.
Märkus
Kas saaksite meile dokumentatsiooniga seotud keele-eelistustest teada anda? Osalege lühikeses uuringus. (Uuring on ingliskeelne.)
Uuringus osalemine võtab umbes seitse minutit. Isikuandmeid ei koguta (privaatsusavaldus).