Edellisessä kirjoituksessa rakensimme sovelluksen, jolla voi hallinnoida työkohteisiin liittyviä tapaamisia. Varsin pienellä vaivalla saimme aikaiseksi käyttökelpoisen sovelluksen.

Sovelluksen teossa hyödynsimme Power Platformin uutta generative pages -toiminnallisuutta, jossa käyttäjä kuvailee millaisen sovelluksen tarvitsee, minkä jälkeen tekoäly toteuttaa sen (React-koodina). Työstimme sovellusta pienissä paloissa. Pyysimme tekoälyltä aina pieniä korjauksia ja lisäyksiä sen tuottamaan ratkaisuun.
Tällä kertaa lähestymme aihetta toisin. Pääsemmekö samaan lopputulokseen, mikäli pyrimme jo ensimmäisessä promptissa kuvaamaan haluamamme lopputuloksen mahdollisimman tarkkaan?
Mutta sitä ennen otetaan lyhyet tyypit generative pagesin käytöstä GPT-5.0:lla.
Generative Pages – GPT-5.0 vs GPT-4.1
Aloitetaan identtisellä promptilla kuin edellisellä keralla GPT-4.1 kanssa.

Työkalu etenee kuten GPT-4.1 mallia käyttäen, mutta on huomattavasti nopeampi.

GPT-5.0 generoi koodia ainoastaan 224 riviä. GPT-4.1 puski ulos samalla promptilla 841 riviä. Lopputuloksetkin poikkeavat toisistaan. Tosin lopputulos tuppaa olemaan jokaisella yrityksellä (samaa promptia käyttäen) erilainen riippumatta siitä kumpaa kielimallia käyttää.


Yhteenvetona voidaan todeta, ettei kumpikaan kielimalli tuottanut toimivaa sovellusta näin kevyellä aloituspromptilla.
Esimerkki – Interaktiivinen Gantt-kaavio v2.0
Yritetään seuraavaksi toteuttaa edellisessä kirjoituksessa toteutettu interaktiivinen Gantt-kaavio uudelleen. Tällä kertaa aloitetaan huomattavasti kattavammalla promptilla sekä kasvatetaan samalla vaikeuskerrointa lisäämällä sovellukseen uusia ominaisuuksia.
Tavoittelemme seuraavanlaista sovellusta.
- Sovellus esittää tapaamiset (Work appointments) työkohteittain visuaalisesti aikajanalla.
- Tapaamiset esitetään eri väreillä riippuen siitä mikä niiden tila (appointment status) on
- Oletuksena aikajana on seuraavat 7 päivää, mutta sen voi vaihtaa esittämään esittämään seuraavat 30 päivää
- Näkymää voi selata eteen ja taaksepäin. Aina niin monta päivää kerrallaan kuin olemme tarkastelemassa (7 tai 30)
- Oletuksena tapaamiset näytetään työkohteittain (work order), eli rivi per työkohde. Myös ne työkohteet näytetään, joilla ei ole tapaamisia aktiivisella aikavälillä
- Tapaamiset voidaan vaihtaa näkymään myös per tekijä (tapaamisen Engineer -sarake). Tällöin näytetään vain tekijät, joilla on tapaamisia kyseisellä aikavälillä. Tekijän nimi löytyy User taulun full name sarakkeesta.
- Tapaamisia voi uudelleenaikatauluttaa raahamalla niitä aikajanalla. Tapaamisia voi myös siirtää työkohteelta toiselle raahaamalla. Tapaamiset tulee esittää aikajanalla niin että niissä on visuaalinen vihje siitä että niiden alku- ja loppuaikaa voi muokata raahaamalla.
- Tapaamista raahatessa aikajanalla näytetään käyttäjälle kokoajan tapaamisen alku- ja loppuaika.
- Tapaamisen alku- ja loppuaika on aina 15min tarkkuudella (mahdolliset minuuutit ovat 0,15,30,45)
- Näkymää voi suodattaa haulla. Haku kohdistuu työkohteen nimeen, mikäli tapaamiset esitetään per työkohde. Mikäli taas tapaamiset esitetään per tekijä, kohdistuu haku tekijän nimeen.
- Käyttäjä voi lisätä uusia tapaamisia (oma painike) tai muokata olemassa olevaa tapaamista tuplaklikkaamalla sitä
- Tapaamista lisätessä / muokatessa lomakkeella annetaan seuraavat tiedot: tapaamisen nimi, tapaamisen tila (appointment status), tekijä (engineer), työkohde (work order)
Lista toimii mainiona lähtökohtana. Pyydetään copilotia kirjoittamaan sen pohjalta meille prompti, jonka annamme generative pagesille.
Aloitetaan GPT-5.0 mallilla. Kehoite on vajaa 2000 merkkiä pitkä ja sisältää myös mallikuvan tavoitellustakäyttöliittymästä.

Koodi generoituu nopeasti.

Koodia on ainoastaan 186 riviä, eikä sovelluksessa toimi käytännössä mikään. Yhtään tapahtumaa ei näy eikä uusia tapahtumia pysty luomaan (lomake ei aukea). Kaiken lisäksi taulukon piirtäminen kestää luokattoman kauan.
Yritetään samalla kehoitteella käyttäen GPT-4.1 -mallia.

Malli generoi noin 700 riviä ohjelmakoodia ja lopettaa virheeseen.
Ei kauhean lupaavaa.

Olemmekin nyt koko toiminnallisuuden ytimessä. Kaiken mennessä hyvin, tämä on mitä loistavin työkalu. Mutta entä jos koodin generointi keskeytyy virheeseen tai lopputulos ei toimi lainkaan? Mitä silloin voin tehdä?
Hyvä kysymys. Toiminnallisuus on edelleen preview-vaiheessa. Toisina päivinä se tuntuu toimivan paremmin kuin toisina. Tänään en saanut siitä ulos mitään toimivaa. Mutta oliko syy liian pitkän / huonon / monimutkaisen promptin? En voi lopputuloksen perusteella tietää.
Tämänhetkisen kokemuksen perusteella lähtisin edelleen rakentamaan sovellusta generative pages -toiminnallisuudella kuten teimme edellisessä jutussa. Ensin perustoiminnallisuus kasaan (esim Gantt-kaavion esittäminen). Ja sitten pikkuhiljaa pyydetään tekoälyä rakentamaan siihen lisää ominaisuuksia. Yksi kerrallaan.
Sovelluksen jatkotyöstäminen
Aiemmin luotuja sivuja voi myöhemmin edelleen muokata. Aivan riskitöntä se ei kuitenkaan ole. Edellisessä kirjoituksessa rakensimme seuraavanlaisen sivun.

Pyydetään tekoälyä tekemään siihen pieni muutos. Lisätään lomakkeelle tapaamisen tila (appointment status) -kenttä.
Kokeillaan ensin GPT-4.1 ja kehotteena seuraava:
add work appointment status to the appointment form. default value is new
Lopputuloksena koodin generointi jää silmukkaan ja päättyy lopulta virheeseen.

Muutetaan hieman kehoitetta.
Current work appointment form includes only name and work order fields. add apoointment status field there as well
Ja kas,tekoälyavustajamme onnistuu tekemään muutoksen.

Käytännössä pienetkin erot kehotteessa ovat merkityksellisiä.
Muutosten kanssa kannattaa olla muutenkin varovainen. Joskus pienen muutoksen pyytäminen tuhoaa koko sovelluksen. Jäljelle jää vain valkoinen ruutu. Onneksi muutoksissa voi aina peruuttaa taaksepäin. Tosin onnistuin tuhoamaan tekemäni sovelluksen myös pakittamalla muutoshistoriassa liian monta askelta taaksepäin. En päässyt enää palaamaan takaisin vaan päädyin tilaan, jossa sovellus oli ensimmäisen kehoitteen jälkeen. Tylsää.
Kaikesta huolimatta tämä on kyllä hauskinta sitten canvas Power Appsin keksimisen!