2022

Aug

04

Av Rolf

Microsoft Teams har de senaste åren blivit ett av de mest använda programmen för kommunikation, både digitala möten och som chatt-program på företaget. Jag har tidigare visat hur FileMaker kan skicka meddelande till en Slack-kanal, självklart går det att skicka meddelande från FileMaker även till en chatt i Teams!

FileMaker är fantastiskt bra på att hämta, beräkna och sammanställa värden av olika slag från en eller flera källor. Tänk om FileMaker en gång om dagen kan skicka värdefull data till företagets chatt-kanal i Teams? Det kan t.ex. vara senaste veckans säljresultat, gårdagens kassarapporter, aktuellt lagersaldo för storsäljare, gårdagens inleveranser till lagret, dagens besök eller vad du vill hålla dig och alla medarbetare på företaget automatiskt uppdaterade om.

I det här exemplet vill jag varje dag se senaste veckans resultat från Allsvenskan i fotboll :) Alla resultat publiceras löpande på SVT Text-TV(!) och sedan flera år hämtar jag resultat från sidan 344 en gång varje dygn. Det görs med ett schemalagt script i FileMaker Server och manussteget Infoga från URL. (Metoden för hur det kan göras kan du läsa om här). Varje match sparas i en post med datum, lag och resultat.

Det jag nu vill göra är att sammanställa senaste veckans resultat och skicka det till företagets gemensamma Teams-chatt varje morgon. Det görs enklast med ett schemalagt script på FileMaker Server som körs vid lämplig tidpunkt. Det går förstås också att skicka meddelanden från FileMaker Pro.

Teams-meddelande måste ha ett visst format, ett JSON-baserat format som kallas Adaptive Cards. För att göra det enkelt har jag satt ihop JSON-koden med den speciella editor som finns att tillgå på Adaptive cards och skrivit "koder" där jag vill få in resultat och annan text. Hela meddelandet kopierar jag till ett textfält i FileMaker som jag sedan använder som en mall. Fältet innehållet meddelandet i dess speciella format (JSON-baserat) med "koder" som .tex. "##RUBRIK##" där jag vill få in en rubriktext och "##RESULTAT##" där alla resultaten ska hamna.

Med funktionen Substitute ersätter jag mina "koder" i meddelande-mallen med de texter som jag vill ska finnas i meddelandet. Om t.ex. favoritlaget vinner kommer det såklart att framgå extra tydligt :)

Först sammanställer jag matchresultaten från senaste veckan. Jag går till layouten "Allsvenskan" och söker fram alla resultat från de senaste 7 dagarna.

Sök[]
Tilldela fält [Datum; ">=" & Get (AktuelltDatum) - 7]
Tilldela fält [Resultat; ">0"]
Utför sökning[]

I tabellen har jag gjort ett beräkningsfält som jag kallar JSON. Formeln ser ut så här:

JSONSetElement ( "";
  ["title"; If(Get(Postnummer) > 1 and 
       GetNthRecord ( datum; Get(Postnummer) -1 ) ≠ datum; datum; "" ); JSONString];
  ["value"; 
    Let([
      mål = Substitute ( Allvenskan::resultat; "-"; "¶" );
      hemma = GetValue(mål; 1);
      borta = GetValue(mål; 2)
    ];
      If (hemma > borta; "**"; "") & Allvenskan::hemmalag & If (hemma > borta; "**"; "") & " - " &
      If (hemma < borta; "**"; "") & Allvenskan::bortalag & If (hemma < borta; "**"; "") & " " & Allvenskan::resultat
    ); JSONString]
)

Ganska lång formel men tanken är att:

  • datum endast ska visas för första raden om det finns flera matcher med samma datum (sparas i "title") och
  • segrande lag ska visas med fet stil. För det behövs "**" både före och efter lagnamnet (sparas i "value").
  • Resultatet av beräkningen ska vara i JSON-format för att passa in i Teams-meddelandets format.

Det finns också ett statistikfält Stat_JSON i tabellen som sätter ihop fältet JSON för alla hittade posterna till ett textfält (Statistik Lista över) där jag sedan byter ut radmatningar mellan posterna till kommatecken (,) för att få ett godkänt JSON-format. Det gör jag med följande manussteg:

Ange variabel [$allsvenskan; Substitute (Stat_JSON; "¶";",")]

I nästa steg ersätter jag "koderna" i meddelandemallen med rubrik, resultat, en beskrivning och aktuell tid.

Scriptsteget med funktionen för att ersätta koderna kan se ut så här. Meddelandet sparas i variabeln $fmtext:

Ange variabel [$fmtext; 
Substitute ( Meddelandemall;
  ["##RUBRIK##";"Allsvenskan"];
  ["##RESULTAT##"; $allsvenskan];
  ["##TIDSSTÄMPEL##";Get ( AktuellTidsstämpel )];
  ["##BESKRIVNING##";"Matcher och resultat hämtade från 
     [SVT Text-TV sidan 344](https://www.svt.se/text-tv/344)."]
)
]

Meddelandet är nu sammanställt i rätt format och färdigt att skickas. Men hur skickas det? Du behöver starta Teams och skapa en s.k. Incoming webhook. Starta Teams-appen på din dator och visa dina chattar. Till höger finns 3 punkter som du klickar på och väljer "Hantera appar" (om de inte redan visas). Klicka på Fler appar och sök efter "webhook". Du ska hitta appen "Incoming webhook" från Microsoft.

Klicka på appen och sedan på knappen Lägg till i ett team. Välj ditt team och du får sedan se en URL i formen:

https://DITT_TEAM_NAMN.webhook.office.com/webhookb2/xxx/IncomingWebhook/yyy/zzz

Kopiera den och klistra in som URL i FileMakers scriptsteg Infoga från URL. I fältet cURL-tillval skriver du:

"-X \"POST\" -d @$fmtext"

Det fullständiga scriptet kan se ut så här:

Sen är det bara att köra scriptet.

Resultatet kan se ut så här i din Teams-app:

En textfil med meddelandemallen för exemplet kan du ladda ner här: teams_meddelandemall.txt

Skriv en kommentar

Din epost-adress stannar hos oss.