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!




Risposte
Visite
Domanda
1
risposta
79
vis.
domanda inviata 11 mesi fa da
aggiornato 11 mesi fa da
6 Giugno 2024 09:47
Grazie per la segnalazione. Era un errore nella descrizione, il meetup è corretto. :) .g.
domanda inviata 11 mesi fa da
1
risposta
85
vis.
domanda inviata 3 anni fa da
aggiornato 3 anni fa da
Categoria: FileMaker 9
Categoria:
23 Settembre 2021 18:23
Buongiorno, Vincenzo. due possibilità: - fai tre richieste differenti (una per ciascuna regione), entrando in modo trova e usando il comando nuovo record/richiesta - crei un campo globale con i valori che ti servono, lo metti in relazione con la tabella in cui sono i dati per nomecampo=tuatabella::regione e con una singola istruzione di vai a (leggi di più)
domanda inviata 3 anni fa da
Categoria: FileMaker 9