Power BI Connector Powered by Fenix

Microsoft julkaisi viimen vuoden alkupuolella Power BI nimisen raportointialustan, jolla pystyy tekemään nopeasti visuaalisesti näyttäviä raportteja. Raporttien lähteenä voi käyttää esimerkiksi omia Excel-tiedostoja tai tietokantaa. Useat suositut pilvipalvelut ovat myös tuettuna ja näistä mainittakoon Dynamics CRM Online ja sosiaalisen median puolelta Twitter ja Facebook. Lista päivittyy lähes viikottain, joten on hyvä tarkastaa nykyinen tilanne.

Power BI on uusi kehityskohde RS (Reporting Services) raportointialustan tilalle, jonka kehitys on päättynyt. Lisätietoa Power BI raportointialustasta saa täältä: https://powerbi.microsoft.com/en-us/

Havaitsin koekäytössä, että tuote ei tukenut kunnolla OnPremise CRM:ään kytkeytymistä, mikäli OnPremise CRM oli asennettu niin, että siihen pääsi myös ulkoverkosta kiinni (IFD-konfigurointi). Yritykset käyttää Power BI:n OData connectoria päättyivät aina virheilmoitukseen. Tämän johdosta lähdin tutkimaan Power BI:n omaa ohjelmointirajapintaa. Rajapinta käyttää REST-tekniikkaa ja tarjoaa laajat toiminnot omien tietojoukkojen ja tietojen viemiseen. Lisätietoa Power BI ohjelmointirajapinnasta saa täältä: https://msdn.microsoft.com/en-us/library/dn877544.aspx

Pähkinän kuoressa asiat, jotka connector ratkaisee ovat:

  • Rajaa siirrettävä tiedot jo CRM:ssä
  • Valitse tuotavat sarakkeet tiedot jo ennen tuontia
  • Päivitä tietoja PowerBI palveluun automaattisesti CRM:stä

Ensimmäinen ratkaistava asia, joka kehityksessä tuli vastaa oli kirjautuminen Power BI palveluun: dokumentaation mukaan Power BI REST rajapinta käyttää Azuren AD autentikointia, joka tapahtuu käyttäen OAuth2 protokollaa.

Autentikointi lähtee liikkeelle siitä, että meillä on rekisteröity sovellus omaan Azuren pilvipalvelun tiliin ja rekisteröinnin yhteydessä kerromme, että mitä oikeuksia sovelluksemme pyytää: tässä tapauksessa kysytty oikeus oli pääsy Power BI tilin tietoihin. Rekisteröinnin jälkeen saamme oman uniikin clientid tiedon, joka yksilöi sovelluksemme ja clientsecretin, jota tarvitsemme yhdessä clientid kanssa pyytääksemme tokenia itse Power BI kutsun suorittamiseen. Token tulee osana kutsua otsikkotietona. Seuraavaksi kaaviossa on kohta, jossa kirjautumisen jälkeen käyttäjä viedään sovelluksen rekisteröinnissä määritetyllä sivulle (sivun osoitteeseen lisätään code parametri, jolla voidaan kysellä varsinainen token) ja tämä kohta aiheutti pohdintaa, sillä toiminnallisuus tulisi osana CRM:ää ja emme mitenkään helposti voisi ohjata sivustoa kirjautumisen jälkeen takaisin alkuperäiselle sivulle, koska emme tiedä osoitetta ja emme sitä selaimen turvallisuusasetuksien johdosta saa selville. Ratkaisuna oli käyttää html postmessage toimintoa, joka on turvallinen tapa välittää eri domainissa olevien sivujen välillä viestintää. Tein yhden geneerisen uudelleen ohjaus-sivun, joka puolestaan välittää postmessage tiedossa osoitteen code parametrin. Toiminnallisuuden pääsivu puolestaan kuuntelee tällaisia viestejä ja ja tarkastaa, että viesti tuli tältä tietyltä sivulta. Lisätietoa postmessage toiminnosta saa täältä: https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage

Toinen ongelma, joka tuli autentikointiongelman jälkeen liitty myös selaimien turvallisuusasetuksiin: kutsut toisiin sivustoihin ei onnistu selaimen puolella, joten ongelmaan piti löytää toinen ratkaisu. Pienen pohdinnan jälkeen päädyin tekemään tietomalliin laajennusta ja tähän uuteen tietomalliin kiinni oman pluginin, joka tekisi varsinaiset kutsut Power BI REST rajapintaan. Selaimen puolella luodaan vain uusia esiintymiä tietyillä parametreilla ja vastaukset tallennetaan pluginin toimesta paluutietoon, joka taas luetaan selaimen puolella. Tällöin sain kierettyä cross domain ongelman. Hyödynsin CRM:än operaatioihin kätevää SDK.Jquery kirjastoa (osa CRM:än SDK:ta), jonka saa ladattua käyttöön ilmaiseksi. Käyttöliittymän rakentamiseen käytin puolestaan perinteistä jquery ja jquery-ui kirjastoa. Seuraavassa vielä listaus linkeistä, joista oli minulle hyötyä:

SDK.JQuery: https://msdn.microsoft.com/en-us/library/gg309549(v=crm.7).aspx

jQuery: https://jquery.com/

jQuery UI: https://jqueryui.com/dialog/

Valmiin Dynamics CRM:än Power BI Connectorin saa ladattua täältä