2016

Mar

31

Av

Många arbetsuppgifter börjar med att importera data från en extern källa. FileMaker är bra på att importera filer av olika format, det svåra kan ibland vara att hitta filen på hårddisken. Även om du ser filen i Finder/Utforskaren behöver du flytta dig genom mappträdet i öppna-dialogrutan för att leta upp den igen. Det går förstås att göra enklare!

Om du ser filen i Finder/Utforskaren, vad kan vara enklare än att dra filen du vill importera och släppa den på din FileMaker-tillämpning?

I det här exemplet importeras en tab-separerad textfil med kolumner för kommun och dess befolkning, en rad per kommun. Befolkningssiffrorna är hämtade från SCB. De 10 kommuner med störst befolkningsmängd visas i ett diagram. Det kunde förstås lika gärna varit gårdagens försäljningssiffror, månadens fondutveckling eller vad du vill importera!

Exemplet ser ut så här:

ImporteraDra_Layout

 

Exemplet är gjort så att när du släpper en ny fil med befolkningsinformation på tillämpningen, t.ex. för ett annat år, ritas diagrammet om. Tanken är att dra filen från Finder (Mac)/Utforskaren (Windows) och släppa den i den vita ytan upptill till höger på layouten. Den vita ytan där du släpper filen är i själva verket ett container-fält.

I exemplet kan endast information från en fil i taget finnas, det går såklart att skapa nya poster för varje fil, i det här fallet varje år, och visa diagram för respektive post.

Exempeldatabasen består av 2 tabeller. En tabell innehåller endast container-fältet, som är definierat som ett globalt fält, medan den andra innehåller en post för varje rad i filen som importeras, dvs. i det här fallet befolkningssiffrorna.

Jag har använt den nya funktionen i FileMaker 14, Ledtexter i fält, för att visa en text i fältet när det är tomt (s.k. platshållare). Du anger texten i Granskaren i layoutläget under fliken Data när fältet är markerat.

ImporteraDra_Plats

 

Jag har ställt in en manus-trigger (scriptutlösare) att starta ett manus så fort container-fältets innehåll ändras. När du släpper en fil i fältet så ändras fältet och manuset körs. Manus-trigger ställer du in i layoutläget. Markera fältet, högerklicka och välj Ange scriptutlösare. Du kan också välja Ställ in scriptutlösare i menyn Utforma när fältet är markerat.

ImporteraDra_Trigger

Manuset som startas när fältet ändras ser ut så här:

ImporteraDra_Triggermanus

Manuset kontrollerar först att det finns någon fil i container-fältet. Först då utförs manuset Importera fil, som ser ut så här:

ImporteraDra_Importmanus

 

Tricket är sedan att exportera hela filen från container-fältet till en temporär fil som sedan importeras i tabellen för befolkningssiffrorna. Det görs med manussteget Exportera fältinnehåll. Det är detta som sedan gör det möjligt att importera filen med manussteget Importera poster.

Alla poster i tabellen raderas före import så att bara en fil åt gången är importerad. Det sista manuset gör är att ta bort filen från container-fältet och gå tillbaka till layouten med diagrammet som då ritas om.

Den temporära filen exporteras till en temp-mapp och kommer att raderas automatiskt när FileMaker avslutas, variabeln $filnamn sätts till sökvägen till temp-mappen, som fås av funktionen Get (TemporärSökväg), samt namnet på filen du släpper i container-fältet. Filnamnet får du med funktionen GetAsText (container-fältet).

Hur gör jag då för att endast visa de 10 kommuner med störst befolkning? Sortering i fallande ordning efter befolkningsantal görs i relationen mellan den tomma tabellen som visar diagrammet och tabellen med befolkningsinformationen.

ImporteraDra_Sortering

I diagrammet kan jag sedan för y-axeln använda funktionen

LeftValues ( List (Befolkning::Antal); 10)

respektive för x-axeln

LeftValues ( List (Befolkning::Kommun); 10)

för att få fram de 10 största.

Vill du inte dra och släppa en fil har jag gjort exemplet så att du också kan klicka i det vita container-fältet och välja fil att importera. Sedan triggas samma manus igång.

Ladda ner exempeldatabas och exempelfiler.

Se en kort film här:

Skriv en kommentar

  • (will not be published)

Läs också: