FileMaker 18 si apre all’esterno ed inizia  a dialogare “di fino” con i file esterni: una esigenza sentita, presente da tempo, che ha portato negli scorsi anni allo sviluppo di vari plugins (come ad esempio BaseElements).
Adesso FileMaker 18  fa sua questa esigenza e ci propone una serie di funzioni volte alla manipolazione dei files e del loro contenuto. Con queste funzioni potremo quindi creare files, verificare l’esistenza e la dimensione del file, eliminarli, rinominarli, ed anche scriverci dentro.
Ciliegina sulla torta, le funzioni sono disponibili anche su FileMaker Server, e questo apre prospettive interessanti. 🙂

Ma andiamo a vedere cosa possiamo fare e come utilizzare le funzioni in dettaglio:

1. Creazione di files.

La  creazione di un file procede in 2 fasi: prima il file va creato, nasce quindi vuoto e chiuso, va poi aperto e ci vanno scritti i dati che vogliamo. Quindi:

1.1 Creiamo il file

Per creare il file dobbiamo usare l'istruzione Crea File Dati, cui dovremo passare il percorso completo al file e scegliere se consentire o meno la creazione di nuove cartelle.
Per passare il percorso dovremo usare gli stessi strumenti con i quali siamo già familiari, le variabili, ed indicare dove creare il file e che nome dargli; se l’opzione Crea Cartelle è attiva possiamo direttamente indicare le sottocartelle in cui il file dovrà essere creato e tali sottocartelle verranno automaticamente create (questa opzione è adesso presente anche nel step Esporta Contenuto Campo).
Sul nome del file FileMaker non fa storie, accetta tutto, ma è chiaro che la natura dei dati che ci mettiamo deve essere coerente col nome del file e compatibile con la funzione di scrittura dati che andiamo a utilizzare

1.2. Lo apriamo. 

Questo step è centrale nella gestione dei files da parte di FileMaker. Aprendo un file gli viene assegnato un ID che andremo a memorizzare in una variabile, così da poterlo poi referenziare negli step successivi.
L'istruzione è Apri File Dati [ origine ; target ] dove origine è il percorso al file, target la variabile o il campo in cui memorizziamo l’ID del file. Apri File Dati ha la particolarità di creare al volo la variabile in cui memorizzare l’ID e quindi è per certi versi contro-intuitiva, dato che generalmente siamo soliti utilizzare l'istruzione Imposta Variabile per inserirvi un valore. In questo caso invece (ma anche in altre funzioni della categoria File  Dati) viene invocato l'istruzione da eseguire (Apri File Dati) ed indicando che vogliamo memorizzare l’ID del file in una variabile quest’ultima viene creata e popolata.
FIleMaker non accetta di tenere aperti più di 25 files, ma il mio consiglio è di chiuderli direttamente dopo aver fato quanto vogliamo: comunque se abbiamo fatto confusione possiamo risalire a cosa abbiamo lasciato aperto con una nuova funzione Get(InfoFileDatiAperti) che ci ritorna la lista degli ID e dei files aperti.

1.3  Ci scriviamo dentro i dati

L'istruzione da utilizzare è Scrivi su File Dati [ File ID ; Sorgente Dati ; Scrivi come: UTF-8/16 ; Aggiungi avanzamento riga: On/Off ] 

Dovremo quindi passare: 
- File ID: l’ID del file (che abbiamo memorizzato utilizzando lo step Apri File Dati).
- Sorgente Dati: la variabile o il campo che contiene il testo da scrivere. Lo step NON utilizza il box di calcolo, ma richiede un campo o una variabile; in altre parole se volete passare Cognome & “ ” & Nome dovrete impostare una variabile e passare la variabile come origine.
C’è un limite alla dimensione dei dati che è possibile passare, ed è 64 Mb, ma FMI consiglia di rimanere entro i 64 Kb: comunque questo limite è relativo alla singola istruzione, non alle  dimensioni del file: se i dati da passare sono di più possiamo utilizzare più volte Scrivi su File Dati dividendo il nostro testo in tranches.
- Scrivi come: va indicato il tipo di codifica dei dati: FileMaker accetta solo UTF-8 e UTF-16, a parte i dati binari presenti nei files inseriti nei campi contenitori, che possono essere scritti in un file dello stesso tipo dell’originale (in sostanza lo step diventa una forma alternativa della funzione Esporta Contenuto campo, salvo aver minor capienza …).
- Aggiungi avanzamento riga: si può indicare se inserire un return alla fine dei dati che vengono scritti.

1.4. Fine Procedura

Se non dobbiamo fare altro consiglierei di chiudere il file con lo step Chiudi File Dati (FileID), passandogli l’ID del file da chiudere:
Nota: se abbiamo fatto confusione ed abbiamo lasciato vari files aperti possiamo chiuderli tutti con l'istruzione di cui sopra passando al posto dell’ID dei singoli files un asterisco:
Chiudi File Dati [ File ID: "*" ]

Script base d’esempio

Imposta Variabile [ $nomefile; “il_mio_file.txt”]
//Opzionalmente
If (not Evuoto (campo_cartella))
Imposta Variabile [ $cartella ; campo_cartella & “/”
EndIf
Imposta Variabile [ $expo; Value:
If (Assoluto ( Get ( PiattaformaSistema ) ) = 1 ; Get ( PercorsoDesktop ) & $cartella & $nomefile ; //Mac OSX
"filewin:" & Get ( PercorsoDesktop ) & $cartella & $nomefile ) // Windows ] 
Crea File Dati [ “$expo” ; Create folders: On ]
Apri File Dati [ “$expo” ; Target: $file_id ]
Write to Data File [ File ID: $file_id ; Il campo testo da scrivere; Write as: UTF-8 ; Aggiungi avanzamento riga: On ] 
Chiudi File Dati [ File ID: $file_id ] 

Verifica esistenza file

Funzione semplice ma finora mancante nel nostro armamentario, in genere surrogata dall’uso di plugins o con qualche workaround.
Si memorizza in una variabile il percorso al file e si usa l'istruzione Ottieni esistenza File (File di origine ; destinazione) indicando come origine il percorso al file e come target una variabile o un campo. Anche in questo caso compare la particolare sintassi vista sopra per l'istruzione Apri File Dati: il risultato può essere scritto in un campo o in una variabile, che quindi viene creata contestualemte dall'istruzione stessa.

In questo caso la funzione si applica  a tutti i tipi di file, a prescindere dal fatto che siano stati creati con FileMaker

Calcola dimensioni file

Funzione semplice, di facile utilizzo:
Si memorizza in una variabile il percorso al file e si usa lo step Ottieni dimensioni File (File di origine ; destinazione) indicando come origine il percorso al file e come target una variabile o un campo. La dimensione del file corrisponde alla posizione finale nel file, e  può quindi essere usata per posizionarsi a fine file per aggiungere dati.
In questo caso la funzione si applica  a tutti i tipi di file, a prescindere dal fatto che siano stati creati con FileMaker

Elimina file

Step semplice e diretto: si memorizza in una variabile il percorso al file e si usa lo step Elimina file (percorso), indicando come target il percorso al file. Una buona istruzione, che ci consente di risparmiarci il workaround dell’Esporta contenuto campo usando un campo contenitore vuoto.
Come nel caso precedente la funzione si applica  a tutti i tipi di file, a prescindere dal fatto che siano stati creati con FileMaker

Rinomina file

Altro step semplice e diretto: si memorizza in una variabile il percorso al file e si usa l'istruzione Rinomina file[ File di origine: “$expo” ; Nuovo nome: “nuovo_nome.txt” ]   indicando il nuovo nome da dare al file.
Non ci sono opzioni relative ad eventaule spostamento del file, cosa che ritengo valida  in quanto evita inutili complicazioni:anche in questo caso la funzione si applica  a tutti i tipi di file, a prescindere dal fatto che siano stati creati con FileMaker

Leggi i dati del file

Il contenuto del file può inoltre essere letto mediante l'istruzione Leggi da File Dati[ File ID; quantità ; Destinazione; Leggi come ].
Dovremo quindi passare: 
-File ID: l’ID del file (che abbiamo memorizzato utilizzando lo step Apri File Dati).
- Quantità: il numero di byte da leggere; se vuoto verrà letto il contenuto dell’intero file.
- Destinazione: una variabile o un campo in cui scrivere i dati letti.
FileMaker accetta solo UTF-8 e UTF-16, a parte i dati binari presenti nei files inseriti nei campi contenitori, che possono essere scritti in un file dello stesso tipo dell’originale (in sostanza lo step diventa una forma alternativa della funzione Esporta Contenuto campo, salvo aver minor capienza …).
- Leggi come: va indicato il tipo di codifica dei dati: sono possibile 3 opzioni UTF-8, UTF-16 e Bytes; in quest’ultimo caso il file viene letto un byte alla volta; se il target è una variabile o un campo contenitore il file viene “copiato” per intero come tale, con lo stesso nome.

Manipolazione dati

Abbiamo già visto l'istruzione Scrivi su File Dati che abbiamo utilizzato per scrivere nel file appena creato. La funzione può essere utilizzata anche su files quindi che già contengono testo, per scrivere dell’altro testo.
Questa istruzione ha 2 caratteristiche:
- inizia a scrivere nel punto del file che gli diciamo noi (di default tale punto è la fine del file quando il file viene letto mentre è all’inizio del file quando viene aperto). Per gestire questa cosa esistono due funzioni che ci dicono dove siamo e che ci consentono di posizionarci dove vogliamo.
L'istruzione Ottieni Posizione File Dati (file id, Destinazione) ritorna il punto in cui ci troviamo nel file, indicando l’ID del file e come target una variabile o un campo in cui scrivere il risultato.
L'istruzione Imposta Posizione File Dati ( File ID ; Nuova Posizione) imposta il punto in cui ci troviamo nel file; va passato l’ID del file ed una espressione numerica col valore desiderato (in questo caso possiamo usare il motore di calcolo di FileMaker).
- sovrascrive i successivi caratteri all’interno del file, contrariamente alla ormai consolidata abitudine di vedere il testo scritto inserirsi nel punto in cui viene scritto e “spostare” verso destra quello già presente. Come regolarci per modificare il contenuto di un file ? Dipende da cosa dobbiamo fare:

1. Vogliamo aggiungere testo a fine file: è sufficiente posizionarsi alla fine del file (cosa automatica quando il file viene letto; in alternativa si usa la funzione Get File Size per sapere dove finisce il file e la funzione Set Data File Position per posizionarsi a fine file) ed usare la funzione Write data per aggiungere il testo desiderato. Scrivendo del testo ci posizioniamo automaticamente alla fine di quanto scritto, per cui diventa semplice aggiungere testo ulteriore

2. Vogliamo invece aggiungere testo in mezzo al file: la cosa è più complessa, ed in linea di massima dobbiamo 
- posizionarci nel punto che ci interessa
- memorizzare il testo dopo tale punto
- scrivere il testo aggiuntivo
- aggiungere il testo memorizzato 

3. Vogliamo modificare il testo all’interno del file: in questo caso la via migliore è memorizzare il contenuto del file, manipolarlo con le (potenti) funzioni di gestione del testo di FileMaker e riscrivere il testo manipolato all’interno del file. Niente vieta di calcolare quanto scriviamo apposto di quanto c’era prima, ma si rischia di imbarcarsi in una impresa titanica

Utilizzo da FileMaker Server

Tutte le istruzioni funzionano anche quando lo script viene eseguito su server. Il limite è quello classico delle cartelle su FM Server, per cui possono essere utilizzate solo la cartella Temporanea e la cartella Documenti, ed eventuali sottocartelle al loro interno.
Per fortuna è un limite è trascurabile, mentre è tutt’altro che trascurabile l’utilità di poter far riferimento - in lettura e/o in scrittura - ad un unico file, comune a tutti gli utenti e non accessibile dall’esterno, da chi non ha accesso alla macchina server

Qualche esempio ? Pronti !

Vogliamo creare un file nel quale scrivere le modifiche effettuate ad uno o più campi

Finora la cosa è stata fatta utilizzando campo all’interno di ogni tabella in cui “ammucchiare” le varie modifiche ai campi, oppure una tabella di FileMaker in cui registrarle. In entrambi i casi tanto appesantimento in termini di dati, di struttura e di procedure.
Con le nuove funzioni di FileMaker 18 possiamo con poca fatica scrivere tali modifiche in un file ad hoc, un file cui confluiranno le modifiche di tutti gli utenti.

Vogliamo creare un file nel quale registrare gli errori che si verificano durante l’esecuzione di script

Qui andiamo a vedere una nuova feature di FileMaker 18, l'istruzione SetErrorLogging

SetErrorLogging

Quando attivato registra nel file Doumenti/ScriptError.log dell’utente gli errori che si verificano durante l’esecuzione di script.
Le informazioni che vengono registrate sono:
- Timestamp
- ID  della sessione
- Nome del file
- Account con cui si è entrati
- Nome dello script [numero di indice] (il numero di indice è il numero nell’elenco degli script)
- Numero di linea all’interno dello script
- Codice di errore di FileMaker
- Informazioni custom: possiamo utilizzare il motore di calcolo di FileMaker per passare informazioni aggiuntive, di ogni genere.

È una funzione molto interessante, ma col limite che le info vengono registrate localmente. Anche in questo caso possiamo usare le nuove funzioni di FileMaker 18 possiamo trascrivere tali modifiche in un file ad hoc, un file cui confluiranno gli errrori di tutti gli utenti

C’è qualcosa che manca ?

A ben vedere le funzioni essenziali ci sono tutte, e sono semplici da usare, dirette. Altre funzioni disponibili con vari plugins non le trovo così importanti…
Dovessi chiedere una cosa in più vorrei una funzione per elencare i files presenti dentro una cartella, ma a noi assatanati filemakeristi manca sempre qualcosa 🙂

Conclusioni

FileMaker 18 ci mette in pole position per una gestione semplice ma efficace dei files di testo (e non solo), compiendo un ulteriore passo verso l’integrazione tra i nostri database ed il mondo esterno. Tuttavia, anche in questo caso è necessario valutare bene le tipologie di deployment: le funzioni non sono disponibili su WebDirect e Runtime, mentre sono compatibili con FileMaker Go.

Scopri tutte le novità di FileMaker 18 in questo articolo di Giulio Villani e vieni a parlarne con con noi sul gruppo Facebook FileMaker Developer Italia.

Vuoi aggiornare a FileMaker 18? Scopri come risparmiare il 10% sugli aggiornamenti dalle versioni precedenti.

LASCIA UN COMMENTO

Please enter your comment!
Please enter your name here