Mallipohjaisen Power Appsin toiminnallisuuksia voi laajentaa monin tavoin. Yksi tapa on lisätä sovelluksen komentovalikkoon (command bar) omia toimintoja.

Aiemmin toimintojen toteuttaminen edellytti JavaScript osaamista. Nyt toimintoja voi toteuttaa myös Power Apps -tekijöille tutulla Power Fx:llä.

Käydään tällä kertaa läpi mitä kaikkea Power Fx:llä voi komentovalikosta käsin tehdä. Ja mitä ei.

Esimerkki – Taloyhtiöiden hallinnointi

Esimerkkinä toimii aiemmassa jutussa esitelty taloyhtiöiden hallinnointiin tarkoitettu sovellus. Lisätään huoneisto-lomakkeelle uusi toiminto. Avataan sovellus muokkaustilaan ja valitaan navigaatiosta huoneiston kohdalta ”Edit command bar”.

Seuraavaksi valitaan mihin taulun komentovalikkoon olemme tekemässä muutoksia. Haluamme muokata lomakkeella näkyviä toimintoja, joten valintamme on Main form.

Komentorivin vakiotoimintoja ei voi muokata. Mikäli haluat niistä eroon, kannattaa tutustua aiempaan kirjoitukseeni. Tällä kertaa lisätään uusi toiminto (New -> Command).

Valitaan Power Fx ja painetaan Continue. Power Fx koodien säilytykseen luodaan automaattisesti komponenttikirjasto (component library).

Luotu komponettikirjasto ilmestyy ratkaisuumme (solution). Tämä kirjasto sisältää sovelluksen kaikkien komentovalikoiden Power Fx -toiminnot.

Peruskomennot

Lisäsimme komentovalikkoon uuden painikkeen. Mitä kaikkea Power Fx:llä voi painiketta painettaessa tehdä?

Keskeisintä on että lomakkeella näkyviin tietoihin pääsee käsiksi (Self.Selected.Item). Esimerkiksi tietueen nimi löytyy

Self.Selected.Item.Name

Myös tietueeseen liittyviin toisiin tietueisiin pääsee käsiksi. Huoneistoon liittyvät remontti-ilmoitukset löytyvät seuraavasti

Self.Selected.Item.'Remontti-ilmoitukset'

Voit tarkistaa onko lomakkeella tallentamattomia muutoksia (Self.Selected.Unsaved) tai ollaanko luomassa uutta tietutetta (Self.Selected.State = FormMode.New).

Huom! Mikäli AutoSave on päällä, tallennetaan lomake aina ennen PowerFx:n suorittamista.

Painikkeen toiminnallisuuden lisäksi Power Fx:ää voi hyödyntää painikkeen näkyvyyden hallintaan.

Näytetään painike esimerkiksi vain silloin, kun käyttäjä on luonut kyseisen tietueen

Visible: Self.Selected.Item.'Created By'.'Azure AD Object ID' = User().EntraObjectId

Katsotaan seuraavaksi toiminnoista muutama käytännön esimerkki.

Tietueen kopiointi

Luodaan komento, joka tekee kopion lomakkeella esitettävästä tietueesta.

Suoritettava komento on seuraava.

IfError(
    Patch(Huoneistot, 
        Defaults(Huoneistot), 
            {Name:Self.Selected.Item.Name & " copy", 
            Taloyhtiö:Self.Selected.Item.Taloyhtiö, 
            Huoneistotyyppi: Self.Selected.Item.Huoneistotyyppi, 
            'Pinta-ala':Self.Selected.Item.'Pinta-ala', 
            Osakkeet:Self.Selected.Item.Osakkeet}
        );
    Notify("Copy created!",NotificationType.Success)   ,
    Notify("Error! Could'n make copy of the record",NotificationType.Error))

Kopion voi tehdä vain olemassaolevasta tietuteesta, joten rajataan painike näkymään ainoastaan muokkauslomakkeella:

Visibile = Self.Selected.State = FormMode.New

Tallennetaan, julkaistaan (Save and Publish) ja testataan painamalla Copy.

Kopio luotiin onnistuneesti.

Ja siellä se on.

Navigointi tietueelle

Kopioinnin jälkeen on luontevaa siirtyä juuri syntyneelle tietueelle.

Tyhjälle lomakkelle navigoidaan komennolla Navigate(Defaults(_TableName_)). Tietyn tietueen muokkauslomakkeelle navigoidaan antamamalla tietue parametrina Navigate -komennolle. Tyyliin Navigate(galItems.Selected).

Muokataan edellisen esimerkin komentoa hieman.

IfError(
    Navigate(Patch(Huoneistot, 
        Defaults(Huoneistot), 
            {Name:Self.Selected.Item.Name & " copy", 
            Taloyhtiö:Self.Selected.Item.Taloyhtiö, 
            Huoneistotyyppi: Self.Selected.Item.Huoneistotyyppi, 
            'Pinta-ala':Self.Selected.Item.'Pinta-ala', 
            Osakkeet:Self.Selected.Item.Osakkeet}
        ));
    Notify("Copy created!",NotificationType.Success) ,
    Notify("Error! Could'n make copy of the record",NotificationType.Error))

Nyt kopioinnin jälkeen siirrytään suoraan luotuun kopioon.

Power Fx:llä voi siirtyä myös listanäkymiin

  • Navigate(Accounts) – Accounts -taulun oletusnäkymä tai
  • Navigate( ’Accounts (Views)’.’My Active Accounts’)

Tai räätälöidylle sivulle (custom page)

  • Navigate(omaSivu)

Varmistusdialogi

Haluamme vielä erikseen varmistaa käyttäjältä haluaako hän todella tehtä tästä tietueesta kopion. Tämä onnistuu Confirm-toiminnolla.

Muokataan jälleen hieman komentoa.

If(Confirm("You are creating copy of this record. Are you sure?", {Title:"Copy record",
  ConfirmButton: "Yes", CancelButton: "No" }) = true,
  IfError(
    Navigate(Patch(Huoneistot, 
        Defaults(Huoneistot), 
            {Name:Self.Selected.Item.Name & " copy", 
            Taloyhtiö:Self.Selected.Item.Taloyhtiö, 
            Huoneistotyyppi: Self.Selected.Item.Huoneistotyyppi, 
            'Pinta-ala':Self.Selected.Item.'Pinta-ala', 
            Osakkeet:Self.Selected.Item.Osakkeet}
        ));
    Notify("Copy created!",NotificationType.Success) ,
    Notify("Error! Could'n make copy of the record",NotificationType.Error)
   )
)

Nyt käyttäjältä kysytään vielä vahvistus ennen kopiointia.

Syntynyt komponenttikirjasto

Avataan komentovalikkoa vastaava komponenttikirjasto. Lisätyt painikkeet löytyvät sieltä omina komponentteinaan.

Kirjastosta löytyvät myös käytettävät tietolähteeet. Oletuksena komennoissa voi käyttää vain taulua, jonka komentovalikkoon toiminto liittyy.

Lisäämällä kirjastoon Dataverse-tauluja, pääsee niitä käyttämään Power Fx komennoissa.

Voit lisätä myös muita tietolähteitä.

Ne näkyvät kyllä editorissa. Mutta ne eivät toimi.

Et voi lähettää Power Fx:llä sähköpostia tai lisätä rivejä SharePoint-listalle tms.

Flow’n käynnistys komentovalikosta

Onko vihdoin mahdollista käynnistää työnkulku suoraan komentovalikosta?

Ei. Komponenttikirjastoon ei pysty lisäämään työnkulkuja.

Entä jos tekisi oman toiminnon (custom action), jonka käynnistäisi Power Fx:llä komentovalikosta? Tämä taas käynnistäisi edelleen flow’n.

Ei onnistu sekään. Ainakaan vielä.

Yhteenveto

Mikäli Power Fx ei ole vielä tuttua, suosittelen perhetymään. Power Fx:ltä ei voi Power Platform:in parissa välttyä.

Mutta ne komentovalikon Power Fx toiminnot… Lyhyesti

  • Tiettyihin tarpeisiin todella käteviä ja helppoja toteuttaa
  • Toimintojen käynnistyminen komentovalikosta hieman hidasta
  • Debuggaus hankalaa