Snapshot Link e nodi al fazzoletto

FileMaker è un database: questo significa che uno dei suoi punti di forza sono le operazioni di ricerca e ordinamento dei dati.

Tuttavia, ci sono casi in cui può essere molto utile memorizzare i risultati di una data ricerca, magari particolarmente lunga o complessa, o semplicemente per storicizzare alcuni dati in un preciso momento.

Uno dei modi più semplici per raggiungere questo scopo è utilizzare gli Snapshot Link di FileMaker.

Cos'è uno Snapshot Link

Uno Snapshot Link non è altro che un file in testo in formato XML in cui sono riportati tutti i dettagli che servono a FileMaker per identificare il foundset, ovvero:

    • il nome e percorso del file;
    • il formato in uso;
    • il modo (usa, trova, anteprima);
    • la vista (tabella, lista, modulo);
  • le presenza o meno della barra di stato;

oltre naturalmente al foundset vero e proprio, rappresentato mediante una lista degli ID record* interessati e il record in esame al momento del salvataggio.

Si tratta di uno strumento potente, facilmente accessibile dal menù File>Salva/Invia record come>Snapshot Link. Solitamente viene usato per inviare un determinato foundset, ed è utile perché porta direttamente ad un certo formato, magari senza barra di stato e in anteprima.

Può tuttavia essere utilizzato in maniera creativa per ricordarci le nostre ricerche: vediamo come.

Snapshot Link in azione

Per prima cosa creiamo una tabella separata nel nostro file, che ci servirà a ospitare i nostri Snapshot Link. È sufficiente un campo contenitore, un campo descrizione e magari un campo data e ora per ricordarci quando è stato creato. Uno popover e portale ci permettono di gestire la procedura in maniera pratica ed elegante.

Schermata 2014-10-24 alle 01.24.40

Schermata 2014-10-24 alle 01.25.01Quindi andremo a creare uno script che ci aiuti nell'impresa. Tanto per rimanere sul semplice creeremo un unico script che gestisca tutte le operazioni, a seconda del parametro con cui viene invocato:

## viene lanciato per creare un nuovo record nella tabella Snapshot Link; il campo globale serve per inserire la descrizione.

If [ Get(ParametroScript)="inizio" ]
Imposta campo [ globali::g_txt; "" ]
Esci dallo script
End If

## ho cambiato idea e non voglio più salvare il miop foundset. Cancello la descrizione e chiudo il popover che uso per l’inserimento.

If [ Get(ParametroScript)="annulla" ]
Imposta campo [ Snapshot_opere_new::descrizione; globali::g_txt ]
Chiudi popover
Esci dallo script
End If

## salvo il mio foundset, ma solo se esistono dei record trovati e ho scritto qualcosa nella descrizione.

If [ Get(ParametroScript)="salva" ]
If [ Get(ContoTrovati) and not EVuoto(globali::g_txt) ]
Imposta variabile [ $descr; Valore:globali::g_txt ]
Imposta variabile [ $record; Valore:Get(ContoTrovati) ]
Imposta variabile [ $path; Valore:If(Assoluto(Get(PiattaformaSistema))=1; "filemac:";"filewin:") & Get (PercorsoTemporaneo)&"SL.fmpsl" ]
Salva record come Snapshot Link [ Nome file: “$path”; Record esaminati ]

## salvo il mio file nel percorso temporaneo, in maniera trasparente all’utente.

If [ Get(NomeTabellaFormato)="opere" ]

## se ho più tabelle nel file devo ricordarmi a quale tabella si riferisce il file.

Inserisci file [ Snapshot_opere_new::SL; “$path” ]
Imposta campo [ Snapshot_opere_new::descrizione; $descr ]
Imposta campo [ Snapshot_opere_new::record; $record ]
Imposta campo [ Snapshot_opere_new::uno; "" ]
Salva record/richieste [ Non eseguire verifica dati inseriti; Senza finestra ]

Else If [ Get(NomeTabellaFormato)="autori" ]
Inserisci file [ Snapshot_autori_new::SL; “$path” ]
Imposta campo [ Snapshot_autori_new::descrizione; globali::g_txt ]
Imposta campo [ Snapshot_autori_new::record; $record ]
Imposta campo [ Snapshot_autori_new::uno; "" ]
Salva record/richieste[ Non eseguire verifica dati inseriti; Senza finestra ]
End If
Imposta campo [ Snapshot_opere_new::descrizione; globali::g_txt ]
Chiudi popover
Esci dallo script

## in tutti i casi, inserisco il file creato nel campo contenitore.

End If
End If

## Questa parte gestisce il recupero del foundset; utilizza al contrario le funzioni utilizzate nella parte salvataggio

If [ Get(ParametroScript)="recover" ]
Imposta variabile [ $path; Valore:If(Assoluto(Get(PiattaformaSistema))=1; "filemac:";"filewin:") & Get(PercorsoTemporaneo)&"SL.fmpsl" ]
Imposta variabile [ $finestra; Valore:Get ( NomeFinestra ) ]
Imposta variabile [ $altofinestra; Valore:Get ( AltoFinestra ) ]
Imposta variabile [ $sinistrafinestra; Valore:Get ( SinistraFinestra ) ]
If [ Get(NomeTabellaFormato)="opere" ]
Esporta contenuto campo [ Snapshot_opere::SL; “$path”; Apri automaticamente ]
Else If [ Get(NomeTabellaFormato)="autori" ]
Esporta contenuto campo [ Snapshot_opere::SL; “$path”; Apri automaticamente ]
End If
Chiudi finestra [ Nome: $finestra; File corrente ]
Sposta/Ridimensiona finestra [ Finestra corrente; Alto: $altofinestra; Sinistra: $sinistrafinestra ]
Imposta titolo finestra [ Finestra corrente; Nuovo titolo: $finestra ]

End If

Considerazioni finali

Nell'ultima parte dello script i sono almeno un paio di aspetti degni di nota.

Il primo è che uno Snapshot Link viene aperto in una nuova finestra: per dare all’utente una sensazione di continuità è stato necessario memorizzare le impostazioni della finestra da cui siamo partiti, riapplicarle alla nuova finestra e chiudere la finestra originale.

Il secondo è che il metodo non funziona se per il percorso viene utilizzata una variabile locale. Questo perché quando FileMaker esporta un file sul desktop si interfaccia con l’OS. In questo particolare caso, FileMaker esporta un file che richiama FileMaker medesimo, quindi assistiamo a un processo FileMaker -> OS -> FileMaker. Nell'ultimo passaggio tuttavia l’OS richiama una nuova istanza di FileMaker, quindi esterna allo script in uso, e non valuta l’utilizzo di variabili locali.

screenshot_fmpsl

Questa tecnica può essere anche utilizzata in multiutenza, legando a ciascun utente esclusivamente le proprie ricerche: pensiamo ad esempio alla gestione di rappresentanti o agenti di commercio. È tuttavia importante ricordare che eventuali aggiunte o cancellazioni ai record non verranno inserite nel foundset. È anche fondamentale ricordarsi di non spostare mai il file: in caso di spostamento, tutti gli Snapshot Link creati in precedenza non funzioneranno.

* Tecnica in pillole: FileMaker identifica ogni record mediante una numerazione progressiva diversa per ciascuna tabella. Anche se questo dato non è visibile all’utente viene comunque registrato, e può essere richiamato in qualunque momento mediante la funzione get( IDrecord ). È utilissimo anche interfacciando PHP con FileMaker… ma questa è un’altra storia!

Scarica il file di esempio:

Qual è il tuo metodo per salvare le tue ricerche con FileMaker? Chiedi un consiglio ai nostri Guru: scopri la community FileMaker su Guru Corner!




Giulio Villani

Utilizza FileMaker dalla versione 2 (A.D. 1993), per sviluppare idee e soluzioni, e risolvere problemi. Membro della Filemaker Business Alliance, sviluppatore Certificato FileMaker su tuttele versioni a partire dalla 11, FileMaker Certified Trainer, si occupa di formazione, consulenza, sviluppo di soluzioni, con qualche incursione nell’editoria. Oltre a “Sviluppo FileMaker consapevole”, è autore di “FileMaker Pro 9 La Grande Guida” e di “FileMaker Pro 10 La Grande Guida”, entrambi editi da Mondadori Informatica, di articoli e di recensioni sulle principali riviste italiane del settore. Utilizza – con sentimenti ambivalenti – anche PHP, JavaScript, CSS/HTML, MySQL e NoSQL. Feroce capacità di analisi e problem solving.
Cerca
Prendi la corsia preferenziale e risolvi i tuoi problemi di sviluppo FileMaker!

Risorse gratuite

Guru Corner

Altri articoli di Giulio Villani

Ultimi articoli