Vaikka PowerApps + Dynamics 365 uutisointi on viimeaikoina keskittynyt model-driven appseihin sekä CDS (common data service) 2.0:aan, ei perinteistä (Canvas) PowerAppsia kannata todellakaan unohtaa. Se on edelleen erinomainen työkalu toteuttaa nopeasti (mobiili) sovelluksia Dynamics 365:n päälle.

Kokemukseni perusteella PowerApps on houkuttelevimmillaan kun halutaan tarjota käyttäjille mahdollisimman helppokäyttöinen tapa suorittaa yksinkertainen operaaatio, jossa käsitellään samanaikaisesti useita Dynamics 365:n entiteettejä. Esimerkiksi

  • luodaan liidi ja lisätään siihen liittyvä kuva
  • luodaan asiakas ja sen ensisijainen yhteyshenkilö

Esimerkki – Uuden asiakkaan ja sen yhteyshenkilön lisääminen mobiilisti Dynamics 365:een

Eihän tämä olisi hauskaa, ellei itse kokeiltaisi. Tehdään tabletilla käytettävä PowerApps, jolla voi luoda uuden asiakkaan, sekä siihen liittyvän yhteyshenkilön.

Ei voi olla vaikeaa.

Aloitetaan luomalla tyhjä sovellus.

add dynamics powerapps.png

Asiakakastietolomakkeen lisääminen

Tehdään ensimmäisenä lomake, jolla syötetään asiakkaan perustiedot. Tätä varten tarvitsemme yhteyden Dynamics 365:een. Se hoituu lisäämällä uusi tietolähde (data source).

add datasource.png

Muutaman hiirenklikkauksen jälkeen päästään valitsemaan, mitä tietolähdettä käytetään. Valitaan Dynamics 365.

add dynamics.png

Lopulta valitaan taulu (table), jota halutaan käsitellä. Asiakkaat ovat Accounts -entiteetin tietueita. Valitaan siis se.

add dynamics accounts.png

Seuraavaksi luodaan lomake (form). Tarkoitus on syöttää uusia tietoja, joten valitaan Edit -tyyppinen lomake.

add form.png

Liitetään lomake oikeaan Dynamicsin entiteettiin valitsemalla tietolähteeksi Accounts. Valinnan jälkeen PowerApps muodostaa automaattisesti lomakkeen.

set form.png

Haluamme lomakkeesta mahdollisimman yksinkertaisen, joten siivotaan kaikki turhat kentät pois. Tämä saattaa olla hankalaa, jos Dynamics ei ole tuttu. PowerAppsista kun ei näe, mitkä kentistä ovat Dynamicsin päässä pakollisia.

Pienen muokkauksen jälkeen lomake näyttää seuraavalta.

dynamics account form ready.png

Yhteyshenkilölomakkeen luominen

Lisätään vastaavalla tavalla näytölle lomake, jolla syötetään asiakkaan yhteyshenkilön tiedot. Yhteyshenkilö tallennetaan Dynamicsin Contacs -entiteetin tietueeksi.

Jälleen pienen siistimisen jälkeen lomake näyttää tältä.

dynamics forms ready.png

Käydään lopuksi vaihtamassa molempien lomakkeiden oletustilaksi (default mode) uusi (new). Nyt PowerApps ymmärtää tarkoituksemme olevan luoda uusia tietueita.

default mode.png

Lisättävä yhteyshenkilö ei ole mikä tahansa yhteyshenkilö, vaan samassa yhteydessä luotavan asiakkaan yhteyshenkilö. Pitää siis keksiä mikä contacts –entiteetin tietue liittää sen accounts –entiteettiin. Näiden selvittäminen vaatii joskus salapoliisityötä (tai lähellä istuvan Dynamics 365 -asiantuntijan).

Asiakkaan accountid tulee tallennetaa yhteyshenkilön Company Name -kenttään. En olisi heti arvannut. Varsinkin kun kenttä on oikeasti nimeltään parentcustomerid_value.

Suunnitelma on yksinkertainen. Add -painikkeella tallennetaan asiakkaan tiedot ja heti perään tallennetaan yhteyshenkilön tiedot.  Yhteyshenkilön parentcustomerid_value –kenttään asetataan luodun asiakkaan accountid:n arvo.

Mutta… Eihän PowerAppsin submitForm -komento palauta mitään arvoja.

Mistä ihmeestä saan selville lisäämäni asiakkaan accountid:n?

Vaihtoehto 1 – Tallentaminen Flow:n avulla

Ensimmäinen mieleentuleva ratkaisu on toteuttaa asiakkaan tallennus Flow:lla. Sen Dynamics 365 -toiminto palauttaa nätisti luodun tietueen tiedot, mukaan lukien accountid:n.

Flow näyttäisi tältä.

flow for adding account.png

Nyt meillä on tiedossa luodun asiakkaan accountid, jota tarvitsemme yhteyshenkilön luonnissa.

Mutta onhan tämä ihan typerää. Pakko olla joku fiksumpikin tapa.

Ja niin onkin.

Vaihtoehto 2 – LastSubmit property

PowerAppsin lomakkeelta löytyy LastSubmit property, josta pääsee käsiksi viimeksi tallennetun lomakkeen arvoihin. Myös niihin jotka luodaan tallennuksen yhteydessä palvelun puolella. Tässä tapauksessa Dynamics 365:n.

Mikäli taustasi on perinteisessä ohjelmoinnissa, ei tämäntapainen lähestyminen tule ehkä ensimmäisenä mieleen. Ei tullut ainakaan minulle.

Ongelma ratkeaa siis lisäämällä yhteystiedon Company Name -kentän arvoksi Form1.LastSubmit.accountid. Liian helppoa.

accountid in form.png

Piilotetaan lopuksi Company Name -kenttä (Visible = false).

Dynamics 365:n kontaktilla on kenttä (parentcustomerid_type), jossa kerrotaan minkä tyyppiseen entiteettiin kontaktia ollaan liittämässä. Tallennus ei onnistu, ellei tässä kentässä ole arvoa.

Pakotetaan kyseisen valintalistan arvoksi ”accounts”, suodattamalla listasta muut arvot pois.

parent allowed values.png

Kun kentän arvo on manipuloitu oikeaksi, voidaan kenttä piilottaa käyttäjältä.

Lopuksi lisätään Add-painikkeen toiminnoksi molempien lomakkeiden lähettäminen.

submitforms.png

Pakolliset kentät

Ratkaisumme toimii jo, mutta merkitään vielä tärkeimmät kentät pakollisiksi.

required fields.png

Tämä tuo meidät uuden ongelman äärelle. Käyttäjä voi täyttää puutteellisesti asiakkaan tiedot. Tällöin ensimmäinen lomakkeen tallennus epäonnistuu. Add-painikkeeseen määritelty toimintosarja etenee siitä huolimatta ja luo uuden yhteyshenkilön. Mutta sitä ei liitetä mihinkään asiakkaaseen, koska asiakasta ei luotu.

Korjataan tilanne lisäämällä lomakkeiden lähetyksen ehto, jossa tarkistetaan ovatko lomakkeet täytetty kelvollisesti (Form.Valid). Mikäli ovat, voimme hyvillä mielin tehdä tallennuksen. Muussa tapauksessa näytetään virheilmoitus.

validation.png

Viimeinen silaus – ilmoitus onnistuneesta tallennuksesta

Onnnistuneesta tallennuksesta olisi mukava kertoa myös käyttäjälle. Toteutetaan se uudella Notify -toiminnolla, joka lisätään jälkimmäisen lomakkeen OnSuccess -tapahtumaan.

notify.png

Samassa yhteydessä tyhjennetään molemmat lomakkeet (ResetForm), jotta käyttäjä voi syöttää halutessaan seuraavan asiakkaan tiedot.

Valmis!

Valmis ratkaisu näyttää lopulta tältä.

 

Pienellä vaivalla saimme rakennettua käyttöliittymän, joka toimii sekä tabletilla että upotettuna modernille SharePoint -sivulle. Tämän voi antaa käyttäjille testattavaksi ja palautteen perusteella hieroa yksityiskohtia paremmaksi.

Mikäli esimerkiksi käyttäjät eivät haluakaan luoda asiakkaalle aina kontaktia, voidaan lomaketta muuttaa siten että yhteystiedon luominen onkin vapaaehtoista. Kas näin.

 

Mitä tämä leikki maksaa?

Mikäli organisaationne käyttää Office 365 -palvelua on PowerApps osuus mitä todennäköisimmin ilmaista. PowerApps kun sisältyy useimpiin Office 365 -tilauksiin.

Ratkaisulla ei voi kiertää Dynamics 365:n lisenssihankintoja. Käyttäjän käyttäessä Dynamics 365:n tietoja PowerAppsin avulla, tulee hänellä olla kyseiseen käyttöön vaadittava Dynamics 365 -lisenssi.