2021

mar

22

Av

JSON, JavaScript Object Notation, är ett populärt text-baserat format för att spara information, eller kommunicera mellan olika program. Sedan FileMaker version 16 finns inbyggda funktioner för att både sätta ihop strängar i JSON-format och hämta information från JSON-strängar. Men hur sparar man en fil i JSON-format från FileMaker? Det finns inget ”färdigt” filformat att välja på i exportera-dialogrutan som t.ex. för Text-tab, CSV eller Excel.

Det första du behöver göra är att sätta ihop den information du vill exportera, eller spara, i lämpligt JSON-format. Fördelen med JSON, liksom XML, är att det egentligen går att spara vad som helst och det finns ingen förutbestämd struktur utan du bestämmer själv. Dock är syntaxen hur du sätter ihop informationen standardiserad. Använder du de inbyggda funktionerna i FileMaker behöver du inte tänka på det, FileMaker ser till att det blir enligt standard.

Du använder funktionen JSONSetElement, t.ex. så här för att skapa en JSON-sträng med 3 värden. I exemplet sparas produktnamn, version och dagens datum.

JSONSetElement ( "";
  ["produktnamn"; "FileMaker Pro"; JSONString];
  ["version"; Get ( Programversion ); JSONString];
  ["datum"; Get ( AktuelltDatum ); JSONString]
)

Resultatet blir så här:

{
  "datum":"2021-03-22",
  "produktnamn":"FileMaker Pro",
  "version":"ProAdvanced 16.0.6"
}

Jag använder en variabel för resultatet som jag kallar $export. Manussteget kan se ut så här:

Ange variabel [$export; JSONSetElement.....]

Exportera med FileMaker Pro

Nästa steg är att konvertera variabeln till en fil. För det behövs ett container-fält, jag kallar det för gExport och definierar det som ett globalt fält. Innehållet i fältet behöver inte sparas, det ska endast användas tillfälligt.

Konverteringen görs med funktionen TextEncode. Manussteget ser ut så här

Tilldela fält [gExport; TextEncode ($export; ”utf-8”; 1 )]

Funktionen konverterar till en fil med teckenuppsättningen ”utf-8” och med standard radmatning, filen sparas i container-fältet.

Sedan är det bara att exportera container-fältet, jag väljer först att ge filen ett namn men det kan du låta användaren själv göra när manuset körs. Exporten görs med manussteget Exportera fältinnehåll.

Ange variabel [$filnamn; Get (Dokumentsökväg) & ”info.json”]
Exportera fältinnehåll [gExport; "$filnamn"]

Jag väljer att spara filen i mappen Dokument (med Get (Dokumentsökväg)) och namnet ”info.json”. Tänk på att container-fältet behöver finnas på layouten, men kan finnas utanför den synliga delen (till höger om).

Exportera med Filemaker Server

Manussteget Exportera fältinnehåll finns inte på servern, men som tur är finns manussteg för att läsa och skriva datafiler från och med version 18. Dessa kan användas på servern och såklart också användas med FileMaker Pro.

Det sista manussteget behöver bytas ut mot dessa:

Verifiera att filen existerar ["$filnamn"; Mål: $fil_finns]
If [not $fil_finns]
  Skapa datafil ["$filnamn"]
End If
Öppna datafil ["$filnamn"; Mål: $id]
Skriv till datafil [Fil-ID: $id; Datakälla: gExport; Skriv som: UTF-8]
Stäng datafil [Fil-ID: $id]

Först görs en kontroll om filen inte finns, då behöver den skapas. Sedan exporteras hela container-fältet till filen innan den stängs. Tänk på att FileMaker Server endast kan exportera till vissa mappar (dokumentmapp och temporär mapp).

Exportera på servern gör du med antingen ett schemalagt manus eller manussteget Utför script på servern.

Exportera direkt till webbserver med FTP

Det här är min favorit! Jag använder ofta FileMaker för att uppdatera någon information på en webbsajt. Det kan vara produktinformation, kommande föreläsningar, ändringar i aktivitetsprogram, senaste fotbollsresultaten eller vad du än har i din FileMaker-databas som behöver publiceras. Webbsajten kan enkelt läsa JSON-filer och visa dess innehåll. Jag har tidigare skrivit om hur du kan ladda upp bilder till en webbsajt med FTP, det här är i princip samma.

Istället för att spara JSON-strängen i en fil på din dator eller på servern skickas filen direkt till en webbsajt. Det gör du med manussteget Infoga från URL (förstås).

Jag behöver inte heller container-fält, att exportera med FTP kan göras med bara $-variabler.

Ange variabel [$fil; TextEncode($export; "utf-8"; 1)]
Infoga från URL [$ftp; 
"ftp://WEBSERVER/WEBSITE/public_html/info.json"; 
"--upload-file $fil --user USERNAME:PASSWORD"

Exempeldatabas som visar de 3 olika metoderna laddar du ner här: ExporteraJSON.fmp12

Skriv en kommentar

  • (will not be published)

Läs också: