Power Apps mielletään työkaluksi, jolla toteutetaan nopeasti uusia itsenäisiä sovelluksia. Ja siihen se sopiikin erinomaistesti.

Usein vähemmälle huomiolle jää toinen tapa ottaa ilo irti Power Appsista. Sillä voi nimittäin erinomaisesti täydentää olemassa olevia työkaluja.

Tällä kertaa tutustutaan tähän maailmaan esimerkin avulla.

Efecte ja assetin tietojen haku viivakoodin avulla

Efecte on kotimainen ohjelmistotalo, jonka IT-palvelunhallintaratkaisu (ITSM) on Suomessa varsin suosittu ja laajalti käytössä. Organisaatiolla saattaa kuitenkin olla tarve hyödyntää sitä luovalla tavalla. Tavalla, jota Efecte ei tuotteena suoraan (vielä) tue. Esimerkiksi

  • Integroida tiketöintiin liittyvää kommunikointia Teamsiin
  • Luoda käyttäjän Efecteen tekemästä laitetilauksesta oikea tilaus toimittajan tilausjärjestelmään API:n/RPA:n avulla
  • Tarjota käyttäjiolle osa Efecten palveluista sisäisen chatbotin avulla (avaa uusi tiketti, näytä avaamien tikettien tila jne)

Unohdetaan kuitenkin nämä ja tehdään tällä kertaa mobiilisovellus IT-tukihenkilön käyttöön. Sovellus on yksinkertainen. Sillä voi skannata laitteeseen kiinnitetyn viivakoodin Tämän jälkeen

  • Sovellus näyttää skannatun laitteen perustiedot (nimi, tyyppi, omistaja, hankintapäivä jne)
  • Sovellus näyttää laitteeseen liittyvät vanhat tiketit. Onko kyseinen laite temppuillut vastaavasti jo aiemmin? Tai muuten vain temppuillut paljon?
  • Sovelluksesta voi luoda uuden tiketin

Aloitetaan!

Flow – Hae Assetin x tiedot

Aivan ensimmäiseksi tarvitsemme Flow’n, joka hakee skannatun laitteen tiedot Efectestä. Flow käynnistyy Power Appsista ja ensimmäisenä tallennamme Power Appsista saadun laitteen tunnisteen (AssetID) muuttujaan (variable).

Tämän jälkeen haemme kyseisen laitteen tiedot Efecten API:a hyödyntäen.

API:n käyttö on suoraviivaista

  • Basic autentikointi (älä tallenna salasanaa Flow’hun kuten minä)
  • Kaikki itsm-moduliin tehtävät haut: https://your_organization_efecte.com/api/itsm/search.ws
  • Kysely upotetaan url:iin SQL:n kaltaista EQL-syntaksia (Efecte Query Language) käyttäen
  • AttributeCodes url-parametrilla voi rajata mitä kenttiä paluusanoma sisältää
  • Muista vaihtaa kyselyn sisällä olevat erikoismerkit!
  • Paluusanoma on XML-muodossa. Ei JSON.

Haluamme hakea laitteen (näyttö, tulostin, puhelin tai tietokone), jonka tunniste (efecte_id) on ”PRI-000022”. Tämä onnistuu seuraavalla kyselyllä.

https://your_organization_efecte.com/api/itsm/search.ws?query=select entity from entity where template.code in ('display','printer','mobile_device','server','workstation') and ($efecte_id$='PRI-000022')&attributeCodes=efecte_id,device_owner

Tunnisteen tilalla käytämme luonnollisesti Power Appsilta saatua tunnistetta.

Lopuksi vastaus palautetaan Power Appsille. Tämä tehdään Response-toiminnolla, jotta mukaan saadaan liitettyä paluusanoman kuvaus (schema).

Ja paluuarvoa ei voi käyttää sellaisenaan. Se tulee ensin muuntaa JSON-muotoon.

json(xml(body('HTTP')))

Vinkki: Kuvauksesta (schema) saat luotua ensimmäisen version tallentamalla http-kutsun palauttaman arvon json-muodossa muuttujaan ja hyödyntämällä sen jälkeen Parse JSON -toiminnon ”luo kuvaus esimerkin avulla” -ominaisuutta.

Flow – Hae Assettiin x liittyvät tiketit

Laitteeseen liittyvät tiketit haetaan vastaavalla tavalla. Käytettävä kysely vain on toinen.

https://your_organization_efecte.com/api/itsm/search.ws?query=select entity from entity where template.code='incident' and $related_configuration_items:efecte_id$='PRI-000022'

Flow – Uuden tiketin luominen

Uuden tiketin luontia varten tallennamme Power Appsilta saamamme parametrit omiin muuttujiinsa. Esim

  • Asiakkaan nimi (Customer)
  • Asiakkaan sähköposti (Customer email)
  • Otsikko (Subject)
  • Kuvaus (Description)
  • Liittyvät laitteet (Related items)
  • jne

Samalla tikettiä varten muodostetaan ulkoinen tunnus (external ID). Sitä käyttäen tiketti voidaan tarvittaessa hakea. Kätevää, sillä API ei palauta tiketin luonnin yhteydessä luodun tiketin sisäistä tunnistetta.

Seuraavaksi luomme tiketin. Käytettävä osoite on https://your_organization_efecte.com/api/itsm/dataCardImport.ws. Luotavan tiketin tiedot välitetään kutsun rungossa (body). Ja XML-muodossa. Sinne vain sekaan oikeat arvot muuttujista.

Lopuksi palautetaan Power Appsille tiedoksi

  • Onnistuiko luonti (StatusCode)
  • Luodun tiketin ulkoinen tunniste (external_id)

Power Apps

Esivalmistelut on tehty. Voimme vihdoin rakentaa itse sovelluksen.

Luodaan tyhjä Power Apps (mobiiliasettelu) ja lisätään siihen viivakoodinlukija.

Lisätään kolme juuri luomaamme Flow’ta Power Appsin tietolähteiksi (Data).

Laitteen perustietojen hakeminen

Haluamme hakea laitteen tiedot käyttäjän skannatessa viivakoodin. Lisäämme siis viivakoodinlukijan OnScan-tapahtumaan seuraavan kaavan.

Haemme Flow’n avulla kokoelmaan (colTmpAssetInfo) skannatun laitteen tiedot Efectestä.

ClearCollect(
    colTmpAssetInfo,
    GetAssetDetails.Run(BarcodeScanner1.Value)
)

Paluuarvo on hieman kurjassa muodossa. Yksi tietue, josta löytyy ?xml ja entityset -lohkot. Helpotetaan tekemistämme ja haetaan muuttujaan (varAssetInfo) ne kiinnostavat entiteetit (entity).

Set(
     varAssetInfo,
     First(colTmpAssetInfo).entityset.entity
 )

Nyt sisältö näyttää käyttökelpoiselta.

Skannauksen jälkeen siirrymme Asset-näytölle.

Navigate('Asset Screen');

Kyseinen näyttö pitää tietenkin ensin tehdä.

Asset-näyttö

Luodaan uusi näyttö (Asset Screen). Ja lisätään siihen muutama tekstikenttä (label). Laitteen nimi löytyy muuttujan @name -ominaisuudesta.

Muiden kenttien arvot löytyvät haulla (LookUp) attributes -taulukosta.

LookUp(varAssetInfo.attribute, '@name' = "Device owner").reference.'@name'

Sieltä voi poimia näytölle kaiken haluamansa.

Laitteeseen liittyvät tiketit

Haetaan vielä näytön (Asset screen) avaamisen yhteydessä (OnVisible) kysieseen laitteeseen liittyvät tiketit.

ClearCollect(
colTmpForTickets,
GetTicketsforasset.Run(brcAssetScanner.Value)
);
ClearCollect(
colAssetTicketsDataForGallery,
First(
colTmpForTickets.entityset
).entityset.entity
);

Lisätään näytölle galleria, jonka tietolähteenä muodostamamme kokoelma (colAssetTicketsDataForGallery) on. Näin meillä on samalla näytöllä laitteen perustiedot, sekä siihen liittyvät tiketit!

Uuden tiketin luominen

Lisätään oma näyttö tiketin luontia varten. Aluksi siinä voi olla kentät ainoastaan tiketin otsikolle ja kuvaukselle.

Painikkeesta käynnistetään Flow, joka luo tiketin annetuilla parametreilla. Paluuarvo tallennetaan muuttujaan (varTicketCreationReturnValue).

Set(varTicketCreationReturnValue, 
       AddTicketRelatedtoAsset.Run(
          User().FullName,
          User().Email,
          inpSubject.Text,
          inpDescription.Text,
          "category here",
          BarcodeScanner1.Value
       )
   )

Näin sovelluksemme toiminnallisuus on kasassa.

Power Appsin siistiminen

Mietitään lopuksi hetki, mitä tietoja haluamme käyttäjälle missäkin näyttää. Ja siistitään sovellustamme hieman. Lopputulos näyttää tältä.

API-kutsut vievät aikansa. Lisätään vielä jokaisen kutsun yhteyteen visualisointi, josta käyttäjä ymmärtää että taustalla tapahtuu jotain.

Yhteenveto

Efecten laajentaminen Power Platformilla oli hauska harjoitus. Vastaavia ratkaisuja voit tehdä minkä tahansa järjestelmän kanssa, kunhan kohdejärjestelmä tarjoaa toimivat API:t.

Huomioi kuitenkin

  • Http request luetaan Power Platfomissa ns. premium toiminnoksi. Sovelluksen käyttäjillä tulee olla vähintään Power Apps per app plan -lisenssi.
  • Mikäli organisaatosi käyttää Azure API managementia, voit lisätä API:t sinne ja käyttää niitä Office 365 -lisensseillä Dataverse for Teamsista! Tällöin voit rakentaa myös chatbotteja (Power Virtual Agents) sisäiseen käyttöön
  • Tarvitset API:n käyttöön avaimen (API KEY). Efecten tapauksessa saat sen luonnollisesti Efecteltä. Korvausta vastaan.