2013

Mar

22

Av Rolf

Web service och öppna data är aktuella modeord just nu. Web services är enkelt uttryckt inget annat än en webbsida avsedd för datorer. Det finns näst intill oändligt många web services tillgängliga runt om i världen, även FileMaker kan använda dem. 

För att hitta bland web services finns det olika kataloger, i Sverige finns t.ex. en sammanställning på www.mashup.se och www.programmableweb.com har en sammanställning från hela världen. Det är bara att välja och vraka 🙂

Jag har tidigare visat hur FileMaker kan använda web services, t.ex. för att importera valutakurser från klient och från servern, samt att hämta aktuella bolån från en ”vanlig” webbsida vilket också är en slags web service. Du kan också ladda ner vår FileMaker Go-app för valutakurser med dagliga uppdateringar.

Det finns några olika sätt att använda web services i FileMaker, vilket man väljer beror på vilket resultat som web servicen ger, hur anropet ska göras osv. Med manussteget Infoga från URL kan i princip alla web services användas, men man får då vara beredd på att hämta önskade värden med beräkningar (precis som jag gjorde för bolånen). Om web services kan ge XML som resultat tycker jag det är bättre att använda manussteget Importera poster (i XML-format) eftersom man då slipper beräkningar, men kanske måste göra XSLT istället. FileMaker har dock begränsningar: anrop med s.k. POST och inloggningar med t.ex. oAuth etc. är inte möjligt i standardprogrammet (men det går, läs längre ner!).

Exempel Arbetsdagar

Jag har flera gånger på bloggen använt beräkning av arbetsdagar som exempel, så också denna gång 🙂 Vi har, förutom vår populära iPhone-app, vår webb-tjänst och vår FileMaker Go-app, även gjort en web service (API) som är gratis att använda.

I exemplet vill jag beräkna leveransdatum, från dagens datum och ett visst antal arbetsdagar framåt. Det går såklart att använda en formel av typen ”dagens datum + dagar”, men då tas inte hänsyn till lördagar, söndagar och andra arbetsfria dagar som t.ex. Långfredag och Annandag påsk. Jag kan förstås gå till mitt tidigare blogginlägg och kopiera beräkningarna för hur man räknar fram arbetsdagar, men det är faktiskt enklare att använda en web service från www.arbetsdag.se. Där finns en funktion för att hämta arbetsdag ett antal dagar framåt i XML-format och det går att lägga till ett id-nummer som även skickas tillbaka med resultatet. På så sätt kan jag importera från web services och uppdatera matchande post för att uppdatera aktuell post i FileMaker.

I min FileMaker-databas finns 3 fält, id (ett löpnummer som är unikt för varje post), arbetsdagar och leveransdatum. Tanken är att skriva in ett antal i fältet arbetsdagar och få ett datum i fältet leveransdatum, som är antal arbetsdagar framåt räknat från idag.

Jag börjar med att registrera mig på www.arbetsdag.se för att få en s.k. API-nyckel, som används för att kontrollera behörigheten. API-nyckeln används sedan i alla anrop till web servicen. Jag läser dokumentationen och ser att det anrop jag ska göra ser ut så här:

https://api.arbetsdag.se/v2/nasta_arbetsdag.xml?fran=idag&dagar=15&key=NYCKEL&id=1234

Jag börjar med att göra ett manus som utför manussteget Importera poster, väljer att importera från ”XML-data”, klistrar in anropet till web servicen och till XSLT-formatmallen (som www.arbetsdag.se mycket förnämligt tillhandahåller speciellt för FileMaker-användare) enligt bilden nedan.

API_http2

Byt ut ”NYCKEL” mot din API-nyckel.

Klicka sedan på knappen Ange importordning för manussteget.

API_import

Markera alternativet att ”Uppdatera matchande poster” och matcha id-fältet från web servicen med id-fältet i din FileMaker-tabell, skickar du in samma id så uppdateras aktuell post vilket är precis det jag vill.

Gå tillbaka och ändra XML-datakällan till beräkning istället, sätt in innehållet i ditt fält för antal dagar och postens id-nummer istället för de ursprungliga värdena.

API_Calc

Markera fältet för antal arbetsdagar i layoutläge och ställ in manusutlösare för VidObjektValidera till att utföra manuset. När du i bearbetningsläge skriver ett värde i fältet för antal dagar kommer leveransdatum att beräknas med hjälp av web servicen, om du har tillgång till internet förstås.

Andra sätt

Många web service använder inte XML, kräver inloggning eller att information skickas med http-kommandot POST till dem. Dessa kan inte FileMaker direkt använda. Men det finns alternativ, t.ex. kan man använda en gratis plugin från Goya som heter BaseElements, eller (vilket jag brukar göra) använda samma teknik som ovan men göra en egen webbsida (i t.ex. PHP) som skickar anrop vidare med t.ex. cURL. På så sätt kan man använda vilken web service som helst, t.ex. Ratsit.se, Apsis, Eniro eller liknande, med FileMaker.

Uppdatering FileMaker 16: Från och med version 16 finns cURL inbyggt i FileMaker tillsammans med JSON-funktioner. Nu går det att göra anrop till de allra flesta web services direkt från FileMaker Pro, Server eller Go.

Skriv en kommentar

Din epost-adress stannar hos oss.