I campi multipli - di cui abbiamo parlato in un articolo precedente - sono una delle caratteristiche di FileMaker più bistrattate dagli sviluppatori professionisti, spesso utilizzati nel modo più sbagliato possibile (ovvero in maniera operativa al posto di una tabella correlata).

Tuttavia, se usati bene i campi multipli possono portare a risultati impensati, e diventare addirittura indispensabili, anche al posto di una tabella correlata. 🙂

Vediamo come.

Accendiamo i motori: funzioni multiple e funzioni di ricavo

Gli strumenti che FileMaker ci mette a disposizione per interagire con i campi multipli sono le funzioni multiple, ovvero Espanso(), Ricavaripetizioni() e Ultimo() e due funzioni di ricavo: Get ( NumeroRipetizioneCalcolo ) e Get ( NumeroRipetizioneAttiva ).

Utilizzando queste funzioni, da sole o in combinazione con altre, è possibile ottenere parecchi risultati.

Ricavaripetizioni() e Ultimo()

Fra le funzioni multiple che ci accompagnano fin dalle prime versioni di FileMaker, Ricavaripetizioni() e Ultimo() non sono di molta utilità: la prima può essere spesso bypassata usando la sintassi nomecampo[numeroripetizione] e la  seconda ha un uso molto limitato (alzi la mano chi l’ha usata più di una volta in un lustro).

Espanso()

Espanso() ha tutt’altro utilizzo: è lo strumento principe per far interagire le ripetizioni con i campi non multipli. FileMaker infatti interpreta tutti i campi come aventi una singola ripetizione, se non altrimenti specificato. Se utilizziamo un calcolo con campi normali in un campo multiplo, infatti, il motore di calcolo valuta quanto inserito solo nella prima ripetizione del campo multiplo, dato che non esistono altre ripetizioni del testo che corrispondano alle ripetizioni del campo multiplo.

La funzione Espanso() serve a definire il testo contenuto come valido per tutte le ripetizioni. Dato che non è possibile Espandere() un calcolo, nel caso serva un valore calcolato di solito si utilizza prima la funzione Dichiara() per utilizzare il valore come variabile.

Get ( NumeroRipetizioneAttiva ) e Get ( NumeroRipetizioneCalcolo )

Per quanto attiene invece alle funzioni di ricavo, Get ( NumeroRipetizioneAttiva ) è nata insieme al campo multiplo ed è relativa all’interfaccia, quindi utilizzata via script, formattazione condizionale e similari, mentre Get ( NumeroRipetizioneCalcolo ) è utilizzata dal motore di calcolo per i calcoli puri. Questa funzione è il vero cuore di buona parte dei calcoli basati sui multipli, in quanto ricava dinamicamente il numero della ripetizione in cui il calcolo viene valutato, dando quindi un risultato differente per ogni ripetizione.

In pratica

Partiamo da un esempio tipico, che abbiamo introdotto nell'articolo precedente : vogliamo inserire un testo nelle caselle fisse di un classico bollettino postale. Utilizziamo quindi una ripetizione del nostro campo per ciascuna casella, in ciascuna delle quali dobbiamo posizionare una lettera (o un numero).

Possiamo usare il classico calcolo:

Mezzo ( Espanso (TESTODAINSERIRE) ; Get ( NumeroRipetizioneCalcolo ) ; 1 )

per il quale è proprio la funzione Get ( NumeroRipetizioneCalcolo )  che si occupa di inserire la lettera o cifra relativa in ciascuna ripetizione: traducendo in italiano possiamo dire che per ciascuna ripetizione viene presa una lettera (1 carattere da prendere in Mezzo al testo, a partire dal numero della ripetizione in cui il calcolo viene valutato).

Space: the final frontier...

Questo calcolo ci mostra in maniera evidente un concetto forse ovvio, ma che necessita una ulteriore disamina:

Il motore di calcolo di FileMaker valuta il calcolo in maniera diversa per ogni singola ripetizione di un campo multiplo.

Il che fa sì che possiamo avere tutti i vantaggi di campi separati uniti ai vantaggi di una numerazione specifica per ciascuna ripetizione.

Ciò presuppone il fatto che a livello di formattazione condizionale le singole ripetizioni vengano interpretate separatamente. Esplorando questo concetto possiamo scoprire che il metodo più semplice in assoluto per creare un grafico con barra singola è proprio un campo multiplo vuoto, senza nemmeno un calcolo.

Prendiamo ad esempio una lista clienti, ciascuno con il proprio fatturato e un campo percentuale fatturato che viene ricavato rispetto al campo riassunto generato dal foundset. Spolverando qualche ricordo delle scuole medie nostro calcolo sarà qualcosa del tipo: Arrotonda(totale_fatture_cliente*100/riassunto_totale_fatture; 2) e il risultato un numero sul tipo 15,25.

Se vogliamo avere a fianco di ciascun cliente in lista una barra esemplificativa non dobbiamo fare altro che creare un campo multiplo di qualunque tipo con 100 ripetizioni, piazzarlo sul formato lista a fianco al nome cliente, renderlo di una dimensione accettabile e impostarne una volta sola la formattazione condizionale, con una formula semplicissima:

Arrotonda(Clienti::campo_calcolato_percentuale;0) ≥ Get(NumeroRipetizioneCalcolo)

assegnando un colore di riempimento di campo a piacere.

Tutto qui?

Tutto qui. E funziona pure sulle Runtime, dove la funzione Grafico di FileMaker non è operativa per motivi di licenza. E pure in un portale, in un popover o dove preferite voi.

…to boldly go where no man has gone before!

A questo punto, i più smaliziati avranno capito che se possiamo inserire in ciascuna ripetizione le singole lettere di un testo, nulla ci impedisce di inserire anche i singoli valori di una lista.

Questo apre la strada a molte possibilità, soprattutto a proposito di interfaccia, calcoli e refresh. Possibilità che andremo ad esplorare nella seconda parte di questo articolo, a breve in pubblicazione.

Alla ricerca di nuove forme di vita e di civiltà dell'universo FileMaker? Scopri la community FileMaker su Guru Corner!

LASCIA UN COMMENTO

Please enter your comment!
Please enter your name here