Jatketaan viime viikolla aloittamaamme teemaa. Eli flow’n ominaisuudet, joista et välttämättä ole tietoinen. Tällä kertaa vuorossa on Dataversen upsert-toiminto.
Saatat arvata jo nimestä mistä on kyse. Upsert on yhdistelmä sanoista update ja insert. Kyseessä on siis toiminto, jolla päivitetään olemassa olevaa riviä. Mikäli riviä ei ole olemassa, sellainen luodaan.
Tutustaan sen toimintaan esimerkin avulla.
Esimerkki – Teamsin hallinta
Päätämme tehdä työkalun organisaatiomme Teams tiimien hallinnointiin. Työkaluun ladataan päivittäin kaikkien tiimien perustiedot, joita sitten täydennetään ajan saatossa hallintamallin edellyttämillä lisätiedoilla.
Todennäköisesti haluamme tallentaa tiimistä ainakin sen nimen (Name) ja tunnisteen (Team GUID), jotta tiedämme mistä tiimistä on kyse.

Perinteinen tapa
Flow joka lisää uudet tiimit, sekä päivittää vanhojen tiedot, näyttää seuraavalta. Perussettiä.
- Haetaan kaikki tiimit
- Käydään tiimit yksi kerrallaan läpi (Apply for each)
- Haetaan Dataversen Teams-taulusta tiimit, joiden TeamGUID-sarakkeen arvo vastaa vuorossa olevan tiimin tunnistetta
- Mikäli sellaisia löytyy, päivitetään niistä ensimmäistä
- Mikäli ei löydy, luodaan sellainen

Flow’n suorituksen jälkeen meillä on Dataversessä lista tiimeistä.

Mutta tämän voi toteuttaa myös toisin.
Upsert-toiminto
Aloitetaan kuten edellisessäkin esimerkissä hakemalla kaikki tiimit. Mutta tämän jälkeen suoritetaan ainoastaan Dataversen update-toiminto käyttäen rivin tunnisteena tiimin tunnistetta (Team Id).

Valmis! Emme tarvitse mitään muuta. Mikäli tiimin tunnisteella löytyy rivi Dataversestä, se päivitetään. Muussa tapauksessa luodaan uusi rivi. Uusi rivi Dataversessä saa tunnisteekseen vastaavan tiimin tunnisteen.
Eli meidän ei tarvitse ylläpitää Dataversessä Team GUID -kenttää.
Homman koukku on se, että meidän tulee käyttää rivien tunnisteena ulkopuolista tunnistetta. Ja sen tulee olla guid-muotoinen. Tämä ei tietenkään ole aina mahdollista.
Rivien poistaminen
Nyt uusien rivien lisääminen ja olemassaolevien päivittäminen on todella suoraviivaista. Miten saisimme helpoiten poistettua Dataversestä ne tiimit, joita ei enää ole?
Upsert (ja update) päivittää riviä aina. Poistetut tiimit erottuvatkin listalta Modified On -kentän perusteella. Flow ei ole päivitänyt niitä.

Tallennetaan flow’n alussa aikaleima compose-toiminnon avulla.

Tiimien läpikäynnin jälkeen haetaan rivit, joita ei tällä kierroksella päivitetty. Eli joiden Modified on -kentän arvo on aikaisempi kuin työnkulun aloitushetki.

Nämä rivit voidaan poistaa.

Flow näyttää kokonaisuudessaan seuraavalta.

Muut tietovarastot?
Toimiiko sama temppu muiden tietovarastojen (SharePoint, SQL, Google Sheet, Excel..) kanssa?
Ei.
Flow’n upsert on kuitenkin mainio ominaisuus. Vaikkakin aika rajattuihin käyttötilanteisiin.