2019

jul

31

Av

Det är ingen hemlighet att manus/script som körs på FileMaker Server går mycket snabbare än om samma manus körs lokalt på en dator. En av de funktioner som jag väntat på alltför ofta är import av poster, ibland verkar det ta en evighet att importera några hundratusen poster. Låt istället importen ske på servern! Du slipper låsa din dator och irritera dig på en långsam progressbar 🙂

Det finns nya manussteg i FileMaker 18 för att läsa och skriva till ”datafiler”, dessa gör det möjligt att välja en fil att importera lokalt på din dator med FileMaker Pro som vanligt (eller varför inte FileMaker Go på din iPhone?) men själva importen görs på servern så du slipper vänta på den. Det förutsätter förstås att du har din databas publicerad på en FileMaker Server 18.

Varför har det inte fungerat i tidigare versioner? Det har helt enkelt inte funnits något (enkelt) sätt att flytta en fil från en lokal dator till servern. Manussteget Exportera fältinnehåll som i tidigare versioner varit det enda sättet att föra över en fil till servern är inaktiverat på server-nivå, antagligen för att det inte ska gå att exekvera ”farliga” program på servern.

Det har förstås gått att göra import på servern även i tidigare FileMaker-versioner med lite ”hack”, dock inte helt ”rumsrent” så därför har jag inte skrivit om det här på bloggen, men precis lika effektivt och användbart. FileMaker har en synnerligen enkel funktion för att föra över filer till en FileMaker Server, container-fält med extern lagring, och med hjälp av ”junctions” eller ”symlinks” kan filer från externt lagrade container-fält nås från FileMakers dokumentmapp där import kan göras.

 

 

Jag har tidigare skrivit om hur filer kan importeras genom att släppas i ett fält i en FileMaker-databas. Nu använder jag samma exempel som då, men skillnaden är att filen flyttas till servern och importeras på server-nivå av FileMaker Server. För små filer som importeras märks ingen tidsskillnad mot tidigare, men med några tusen poster blir skillnaden klart märkbar. Dessutom kan du köra flera importer samtidigt! Och använda din lokala FileMaker till andra arbetsuppgifter under tiden!

I exempeldatabasen finns ett container-fält där den fil du vill importera sätts in. Det finns en script-trigger på fältet som Utför script på servern, i mitt exempel heter manuset som utförs på servern ”Importera fil server”. Det ser ut så här:

 

 

Det viktiga med manus som utförs på servern är att du först måste gå till rätt layout och leta upp rätt post. I manuset på bilden ovan görs det på rad 2-4 genom att helt enkelt visa alla posterna och gå till den första posten, i exemplet är tanken att det endast finns en post som visar ett diagram och importen görs till en annan tabell. Om du vill köra flera importer samtidigt får du istället söka fram rätt post, t.ex. med hjälp av ett id-nummer för posten som du skickar med som manus-parameter.

På rad 5 gör jag en kontroll att det verkligen finns en fil att importera, dvs. att container-fältet där filen infogats inte är tomt. På rad 6-7 sätter jag bara diagrammets titel.

Hemligheten och det nya i FileMaker 18 finns på raderna 9-13 i manuset.

Först skapar jag en variabel med namnet på den fil som ska skapas på servern för att sedan importeras. Jag placerar filen i en temporär mapp, den raderas då automatiskt när manuset är klart. Som filnamn använder jag samma namn som filen har lokalt på din dator.

På rad 10 skapar jag en s.k. datafil, som är ny i FileMaker version 18. På rad 11 öppnas filen och får ett id-nummer i variabeln $id som sedan används för att skriva till datafilen och sedan stänga den.

På rad 12 skriver jag hela container-fältet till filen. Eftersom filen finns i ett container-fält ignoreras både ”Skriv som UTF-16” och ”Lägg till radmatning”, dessutom skrivs alltid hela filen. Skriver du filen från t.ex. ett textfält går det bara att skriva 64 Mb åt gången, men det finns ingen sådan begränsning för filer i container-fält. Viktigt att även stänga datafilen (rad 13).

På rad 15-18 importeras den fil som just skapades.

Nu slipper du vänta på att poster ska importeras!

Du kan ladda ner exempeldatabas och några textfiler (med befolkningsdata hämtat från SCB som tidigare) här: ImporteraServer.zip

OBS! Tänk på att du måste placera databasen på en FileMaker Server 18 för att manuset ska fungera. Logga in i databasen med konto: admin och lösenord: demo.

Skriv en kommentar

  • (will not be published)

Läs också: