Maailma siirtyy pikkuhiljaa BizTalkista Azureen. BizTalk-kehittäjänä minunkin täytyy myöntää, että tietyt asiat on helpompi toteuttaa Azuressa – ja vielä selvästi nopeammin kuin BizTalkissa.
Esimerkkitapaus: haetaan (ns. “pollataan”) JSON dataa APIsta ja tallennetaan siitä osa SQL-tietokantaan. Ns. ‘perinteisessä’ BizTalk-maailmassa toteutus menisi näin:
· Luodaan taulu tietokantaan
· Luodaan projekti, jossa on orkestraatio. Sillä haetaan dataa APIsta
· Lisätään JSON-XML muunnos (JSON receive pipeline)
· Lisätään XML-skeema (SQL-tietokannan table insert, generoitu adapterilla)
· Lähes aina tarvitaan vielä muunnos, jos SQL-taulun kenttien nimet ovat eri tai pelkkä arvojen siirto ei riitä vaan tarvitaan jotain lisälogiikkaa. Tässä tapauksessa arvot saavat mennä sellaisenaan tauluun.
· Lisäksi pitää konfiguroida erikseen porttien tiedot BizTalkin käyttöliittymässä.
Azuressa tämä onnistuu parhaimmillaan yhdellä Logic Appilla:
· Luodaan SQL-taulu (Azure SQL) tietokantaan
· Luodaan tallennettu proseduuri tietokantaan (tästä kohta lisää)
· Kutsutaan APIa, joko suoraan HTTP-toimintoon (action) tai vaihtoehtoisesti Azure API Managementin kautta, jos pääsy APIin on päätetty toteuttaa sen kautta (kuten tässä esimerkissä)
· JSON data syötetään suoraan “SQL server”- ”Execute stored procedure v2”-toimintoon
· Jos meillä on SQL yhteys jo käytössä, voidaan valita kaikki parametrit (SQL palvelimen nimi, tietokannan nimi, proseduurin nimi ja sen parametrit) alasvetolaatikosta

Varsinainen juju on kuitenkin tallennetussa proseduurissa:
· Siinä on yksi input-parametri (tyyppiä NVARCHAR(MAX) ), johon syötetään APIsta pollattu JSON data
· Proseduurin käyttämällä ”SELECT … FOR OPENJSON … WITH …” lauseella saadaan JSON datan arvot tietokantaan.
Alla proseduurin TSQL-esimerkkikoodi:
CREATE PROC [dbo].[sp_myFOObjectsMerge] (@json NVARCHAR(MAX) )
AS
BEGIN
WITH cte AS (
--- all FO objects
SELECT
[FOObjectName],
[Code],
[Name]
FROM OPENJSON ( @json, '$.results' )
WITH
(
--- specify which json property
[FOObjectName] VARCHAR(100) '$.__metadata.type',
[Code] VARCHAR(100) '$.externalCode',
[Name] NVARCHAR(100) '$.name'
)
)
MERGE [dbo].[tbl_myFOObjects] TARGET
USING cte SOURCE
ON (TARGET.[Code] = SOURCE.[Code] AND TARGET.[FOObjectName]=SOURCE.[FOObjectName])
(...)
END
Mikä on tässä tapauksessa Azuren toteutuksen hyöty verrattuna BizTalkiin? Ainakin vähemmän ”liikkuvia osia”:
· JSON->XML muunnos (json receive pipeline) jää pois
· Tietokannan XML-skeema jää pois
· Lisäksi ylläpito yksinkertaistuu: Jos tulee muutoksia APIn tai tietokantaan, riittää että tehdään tarvittavat muutokset SQL proseduuriin ja/tai tauluun.
· Myös testaaminen ja muokkaaminen on helpompaa, koska kehitysympäristössä ei tarvitse jokaisen muutoksen jälkeen ajaa asennusta (deployment) BizTalkille ja käynnistellä sen jälkeen prosesseja uusiksi.
· Testaamisessa auttaa myös se, että Logic Appsien käyttöliittymästä saa helposti poimittua mahdollisia virheitä aiheuttavan datan suoraan selaimen ikkunasta käsin tapahtuvaa jatkoselvitystä auttamaan, eikä virhettä/dataa tarvitse hakea BizTalkin lokimassan seasta.
Nämä asiat vielä korostuvat, kun katsotaan alkuperäisen BizTalk pollausratkaisun kokonaisuutta: listoja on yhden sijaan useampia ja niissä kaksi eri listatyyppiä – toisessa kaksi ja toisessa viisi eri listaa. Jokaiselle noista 7 noudosta on tehty oma BizTalk Send ja Receive -portti, ja Receive-puolelle on pitänyt konfiguroida mäppäys. Vastaava Azure Logic Apps ratkaisu voisi olla alla kuvattu ratkaisu:


· Pollattavien listojen urlit määritellään omassa arraysssa (tai array-parametrina).
· For-Each loopissa pollataan, ja lisätään dataa tietokantaan.
· Ainoa paikka joka vaatii muutoksia on tallennetun proseduurin koodit (jos logiikka on pollatusta listasta riippuvainen)
Koko ratkaisu on siis selvästi nopeammin laajennettavissa Azuressa kuin BizTalkissa.
INTEGRATE REMOTE 2021
Jos Azure-integraatiot kiinnostavat, niin INTEGRATE REMOTE 2021 -konferenssi lähestyy – Esa Vanhanen-Varho kirjoitti perusteluja yhdessä järjestäjien kanssa, miksi kannattaisi osallistua. Huhtikuun loppuun asti vielä alennettu Early Bird hinta. Lisäksi rekisteröinnin yhteydessä voit saada 20% alennuksen lipuista käyttämällä “INT2021-PARTNER-Bilot” koodia.

