fbpx

Power Automate – jak na ARES a VIES

Pokud jste někdy v Power Apps nebo SharePointu pracovali s firemními kontakty, určitě jste narazili na potřebu jejich načtení nebo ověření v některé z dostupných internetových databází. Pro české kontakty je nejpopulárnější volbou ARES, který poskytuje poměrně širokou paletu dat a jeho použití je v menším rozsahu zadarmo. Pro zahraniční kontakty pokud vím neexistuje žádná centrální EU nebo dokonce světová databáze s detailními informacemi o firmách. Pokud ale jsou zpracovávané kontakty dál využívány například k platebnímu styku, není špatné alespoň ověřit platnost čísla DIČ. K tomuto účelu lze opět bezplatně využít evropskou databázi VIES.

Použití ARES a VIES zároveň slouží jako dobrý příklad volání externích webových služeb pomocí Power Automate a zpracování odpovědi.

ARES

Webové služby ARES jsou popsány zde: http://wwwinfo.mfcr.cz/ares/ares_xml. Ukázaná varianta volání je jedna z nejjednodušších variant – volání HTTP GET služby basic.

V naší konkrétní aplikaci voláme Power Automate z Power Apps, předávaný parametrem je IČ subjektu. V prvním kroku si pro přehlednost uložíme IČ předané z Power Apps do proměnné Power Automate: 

Nyní provedeme vlastní volání webové služby ARES pomocí akce HTTP. Tato akce patří mezi prémiové, uživatelé využívající tento flow budou tedy potřebovat prémiovou licenci. Voláme metodou GET na URL: https://wwwinfo.mfcr.cz/cgi-bin/ares/darv_bas.cgi?ico=@{variables(‚ic‘)}.

Ze služby obdržíme výsledné XML, ze kterého stačí vyparsovat potřebné údaje. Protože Power Automate bohužel nemá podporu XML namespace, použili jsme hledání pomocí prvního lokálního jména – pokud by v XML odpovědi bylo více subjektů, obdržíme pouze ten první. Při dotazu na IČ ale více subjektů se stejným IČ neočekáváme, není to tedy problém. Funkce pro jednotlivé údaje vypadají takto (Použita akce SET VARIABLE):

  • DIČ – first(xpath(xml(body(‚Query_ARES_HTTP‘)),’//*[local-name()=“DIC“]/text()‘))
  • Název subjektu – first(xpath(xml(body(‚Query_ARES_HTTP‘)),’//*[local-name()=“OF“]/text()‘))
  • Ulicefirst(xpath(xml(body(‚Query_ARES_HTTP‘)),’//*[local-name()=“UC“]/text()‘))
  • Město – first(xpath(xml(body(‚Query_ARES_HTTP‘)),’//*[local-name()=“N“]/text()‘))
  • PSČfirst(xpath(xml(body(‚Query_ARES_HTTP‘)),’//*[local-name()=“PSC“]/text()‘))
  • Státfirst(xpath(xml(body(‚Query_ARES_HTTP‘)),’//*[local-name()=“NS“]/text()‘))

Tím je v podstatě hotovo, stačí vrátit hodnoty do Power Apps, nebo je například ve stejném toku zapsat do SharePoint listu.

V uvedeném příkladu neřešíme, pokud ARES vrátí chybové XML. Výsledkem je, že tok vrátí prázdné hodnoty – stejně, jako když nenajde zadané IČ. Pro účely jednoduché formulářové aplikace je toto chování vyhovující.

V přehledu vypadá celý tok takto:

VIES

Volání VIES je svým způsobem obdobné. Z VIESU nedostaneme detaily subjektu, pouze na dotaz obsahující DIČ obdržíme odpověď, zda je v rámci EU platné nebo neplatné.

Začneme opět uložením DIČ do proměnné (SET VARIABLE) pro přehlednost:

Následuje vlastní volání webové služby VIES (dokumentace zde: https://ec.europa.eu/taxation_customs/vies/technicalInformation.html)  probíhá opět prémiovou akcí HTTP, ale metodou POST, do které musíme sestavit dotaz ve formě dokumentu XML včetně obálky SOAP. Parametry jsou:

URI

http://ec.europa.eu/taxation_customs/vies/services/checkVatService

Headers
  • SOAPAction: checkVat
  • Content-Type: text/xml;charset=UTF-8
Body

<?xml version=“1.0″ encoding=“UTF-8″?>
<env:Envelope
xmlns:xsd=“http://www.w3.org/2001/XMLSchema“ xmlns:xsi=“http://www.w3.org/2001/XMLSchema-instance“
xmlns:tns1=“urn:ec.europa.eu:taxud:vies:services:checkVat“
xmlns:env=“http://schemas.xmlsoap.org/soap/envelope/“
xmlns:ins0=“urn:ec.europa.eu:taxud:vies:services:checkVat:types“>
<env:Body>
<ins0:checkVat>
<ins0:countryCode>@{substring(variables(‚dic‘),0,2)}</ins0:countryCode>
<ins0:vatNumber>@{substring(variables(‚dic‘),2,sub(length(variables(‚dic‘)),2))}</ins0:vatNumber>
</ins0:checkVat>
</env:Body>
</env:Envelope>

Z VIESu parsujeme jediný parametr, a to zda je zadané DIČ platné. V tomto případě chybu webové služby bereme jako neplatné DIČ, do Power Apps vracíme hodnoty typu řetězec. Podmínka vypadá takto:

if(bool(first(xpath(xml(body(‚Query_HTTP_SOAP‘)),’//*[local-name()=“valid“]/text()‘))),’Platné‘,’NEPLATNÉ‘)

Závěrem stačí vrátit hodnoty do Power Apps. V přehledu vypadá výsledný tak takto: 

Závěr

V uvedených příkladech jsme si ukázali, jak snadné je volání užitečných webových služeb pomocí Power Automate a jeho případné napojení na Power Apps. Příklady jsou vhodné pro poměrně jednoduché použití, pro sofistikovanější aplikace by bylo nutné ošetřit chyby a řešit možnost více vrácených subjektů.

Napsat komentář

Vaše emailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *