Skip to main content
Skip table of contents

Filtri

Introduzione

In Vibecode viene utilizzata un'unica sintassi per filtrare i dati contenuti in una classe.

Attualmente questi comandi possono essere utilizzati nella gestione dei workflow per disabilitare\abilitare specifiche transizioni oppure nella gestione dei gruppi (clienti, clienti fidelizzati, prodotti, negozi, etc. )

Di seguito verranno riportati alcuni esempi utili su come creare un filtro, dal più semplice al più complesso.

Per poter impostare un filtro occorre innanzitutto conoscere le classi e proprietà definite in Vibecode.

Consultare la struttura del database di Vibecode

Tramite il menu di Vibecode è possibile consultare il repository di tutte le classi (tabelle) e relative proprietà (campi) che potranno poi essere utilizzate nei filtri.

Nella App Administrator si trova il menu Class repository\Vibecode classes 

Tramite il tasto Modifica possiamo visualizzare le proprietà della classe selezionata.

I valori riportati nella colonna Nome Proprietà sono i valori da utilizzare per comporre i filtri.

Filtri

Filtri semplici

Il caso più semplice di filtro è campo uguale a valore costante.

La sintassi di Vibecode per questo tipo di filtro può essere schematizzata così: 

CODE
field(<nomecampo>) eq(<valore>)

Occorre fare distinzione fra valori stringa, valori numerici e valori data.

Nel caso di stringhe il valore va messo fra apici singoli.

Esempio 1 (valori stringa):

si vogliono filtrare tutti i clienti fidelizzati che abitano nella città di Milano.

In questo caso la proprietà della classe (kLoyaltyCustomer) da utilizzare è Address.City .

Il valore è ovviamente 'Milano'.

Il filtro viene quindi composto come di seguito:

CODE
field(Address.City) eq('Milano')

Esempio 2 (valori numerici):

si vogliono filtrare tutti i clienti che hanno fornito il consenso al documento di privacy (proprietà PrivacyAgreed).

CODE
field(PrivacyAgreed) eq(1)

 

Esempio 3 (valori data):

nel caso di filtri su date, la data formattata secondo lo standard ISO (YYYY-MM-DD) e racchiusa tra apici singoli.

Quindi apice singolo, 4 cifre per l'anno, trattino, 2 cifre per il mese, trattino, 2 cifre per il giorno.

Ad esempio la data 31 gennaio 2000 viene scritta : '2000-01-31'.

Quindi se si vogliono filtrare tutti i clienti fidelizzati nati il 31 gennaio 2000 (proprietà DateOfBirth):

CODE
field(DateOfBirth) eq('2000-01-31')

Note importanti sulla composizione dei filtri

Riprendiamo il comando per i filtri riportato al capitolo precedente:

CODE
field(<nomecampo>) eq(<valore>)

Occorre notare che non ci sono spazi fra il parametro field e la parentesi aperta e nemmeno fra il parametro !FOARMAT=BOLD eq e la successiva parentesi.

Sono pertanto errati filtri come:

field (campo) eq('valore')

field(campo) eq ('valore')

field (campo) eq('valore')

In questi casi il filtro non viene applicato.

Lo spazio prima di eq, o delle altre tipologie di condizione che vedremo più avanti nei prossimi capitoli, invece è opzionale

Filtro su tabelle esterne

Nel caso in cui la proprietà di una tabella si riferisca ad una altra tabella (esterna), occorre specificare la proprietà della tabella esterna da utilizzare come filtro.

Il motivo è che il valore della proprietà della tabella sorgente è un identificativo interno a Vibecode, non significativo per l'utente.

Esempio 1:

si vogliono filtrare tutti i clienti la cui professione (Occupation) ha il codice (Code) CAS (Casalinga).

La proprietà in questione è Occupation che è di tipologia kOccupation.

La tabella kOccupation tra le sue proprietà , il campo Code che utilizzeremo come filtro.

La sintassi del filtro è quindi la seguente:

CODE
field(Occupation.Code) eq('CAS')

 

Esempio 2:

si vogliono filtrare tutti i clienti residenti in Europa.

La tabella Nazioni (kCountry) ha una proprietà Continent che si riferisce alla tabella  kContinent nella quale è presente la proprietà Code.

Possiamo quindi filtrare tutti i clienti europei nel modo seguente:

CODE
field(Country.Continent.Code) eq('EU')

Elenco filtri

Di seguito l'elenco delle tipologie di filtro applicabili in Vibecode.

Filtro uguale a

Parametro eq:

CODE
field(Address.City) eq('Milano')

 

Filtro diverso da

Parametro ne:

CODE
field(Address.City) ne('Milano')

 

Filtro maggiore di

Parametro gt:

In questo esempio vengono riportati tutti i clienti nati dopo il 31 dicembre 1999.

CODE
field(DateOfBirth) gt('1999-12-31')

 

Filtro minore di

Parametro lt:

In questo esempio vengono selezionati tutti i clienti nati prima del 1 gennaio 2000.

CODE
field(DateOfBirth) lt('2000-01-01')

Filtro maggiore o uguale a

Parametro ge:

 In questo esempio vengono selezionati tutti i clienti nati dal 1 gennaio 2000 compreso.

CODE
field(DateOfBirth) ge('2000-01-01')

 

Filtro minore o uguale a

Parametro le:

In questo esempio vengono riportati tutti i clienti nati fino al 31 dicembre 1999 compreso.

CODE
field(DateOfBirth) le('1999-12-31')

 

Filtro presente nella lista

Parametro in:

Valore <valore 1>,<valore 2>,<valore 3>,...

La lista di valori è separata di virgole. Anche qui vale la convenzione descritta nel paragrafo “Filtri Semplici” per i tipi di campo.

Essa va applicata a ogni singolo valore.

In questo esempio vengono selezionati tutti i clienti che abitano a Milano, a Como o a Varese.

CODE
field(Address.City) in('Milano','Como','Varese')

In questo esempio vengono invece selezionati tutti i clienti che hanno un nucleo familiare composto da 4 o cinque membri.

CODE
field(FamilyMembers) in(4,5)

 

Filtro non presente nella lista

Parametro ni:

La sintassi è similare a quella del precedente esempio:

CODE
field(Address.City) ni('Milano','Como','Varese')

 

Filtro contiene

Parametro lk:

Valido solo per proprietà di tipo stringa.

Il campo valore deve essere formattato come nel caso di espressioni LIKE SQL, utilizzando i caratteri speciali  '%' e '?'.

In questo esempio vengono selezionati tutti i clienti il cui nome comincia con la lettera A:

CODE
field(Name) lk('A%')

In questo esempio vengono selezionati tutti i clienti il cui nome finisce con la lettera A:

CODE
field(Name) lk('%A)

In questo esempio vengono selezionati tutti i clienti il cui nome contiene la lettera A:

CODE
field(Name) lk('%A%')

Filtro non contiene 

Parametro nl:

La sintassi è similare a quella del precedente esempio.

In questo esempio vengono selezionati tutti i clienti il cui nome NON comincia con la lettera A:

CODE
field(Name) nl('A%')

Filtro compreso tra

Parametro bt:

I valori limite della selezione vengono separati da virgola.

Anche qui vale la convenzione descritta nel paragrafo “Filtri Semplici” per i tipi di campo.

In questo esempio vengono selezionati tutti i clienti con dimensione del nucleo familiare compreso tra 3 e 5:

CODE
field(FamilyMembers) bt(3,5)

 

Filtro non compreso tra

Parametro nb:

La sintassi è similare a quella del precedente esempio.

In questo esempio vengono selezionati tutti i clienti con numero componenti famiglia minore di 3 o maggiore di 5:

CODE
field(FamilyMembers) nb(3,5)

 

Filtri fra campi

Oltre a filtrare una proprietà in base ad un valore costante possiamo anche implementare filtri tra proprietà . 

field(<prop 1>) eq(<prop 2>)

In questo esempio vengono selezionati tutti i clienti per i quali la citta di residenza è diversa dalla località del negozio preferito:

CODE
field(favoritestore.address.city) ne(address.city)

Non tutte le tipologie di filtri possono essere utilizzate per confrontare due proprietà .

Al momento non sono supportati i filtri di tipologia: compreso tra (bt), non compreso tra (nb), contiene (lk), non contiene (nl), nella lista (in) e non nella lista (ni).

Filtri composti (operatori logici)

Passiamo ora a illustrare l'utilizzo combinato di più condizioni in Vibecode utilizzando i normali operatori logici and , or e not .

Nota: l'operatore not non è utilizzabile direttamente in Vibecode ma viene specificato assieme agli operatori and e or.

Nei capitoli seguenti verrà utilizzato a titolo di esempio il comando eq (uguale a) ma tutti i filtri elencati nel capitolo “Filtri” possono essere utilizzati con tutti gli operatori logici.

Operatore AND

La sintassi per combinare due condizioni tramite l'operatore AND è la seguente.

field(<filtro 1>) and(<filtro 2>) and(<filtro 3>) ...

equivalente a, ad esempio:

field(<prop 1>) eq(<valore 1>) and(field(<prop 2>) eq(<valore 2>)) and(field(<prop 3>) eq(<valore 3>)) and(...) ...

La condizione che segue l'operatore AND deve essere inclusa fra parentesi.

Nel seguente esempio vengono selezionati tutti i clienti che abitano a Milano la cui professione è casalinga:

CODE
field(Address.City) eq('Milano') and(field(Occupation.Code) eq('CAS'))

Operatore OR

La sintassi per combinare due condizioni tramite l'operatore OR è equivalente a quella dell'operatore AND

field(<filtro 1>) or(<filtro 2>) or(<filtro 3>) ...

equivalente a: 

field(<prop 1>) eq(<valore 1>) or(field(<prop 2>) eq(<valore 2>)) or(field(<prop 3>) eq(<valore 3>)) and(...) ...

Nel seguente esempio vengono selezionati tutti i clienti che abitano a Milano o a Como (alternativa all'utilizzo del filtro in):

CODE
field(Address.City) eq('Milano') or(field(Address.City) eq('Como'))

Combinare gli operatori

Possiamo combinare fra loro gli operatori OR e AND fra di loro.

field(<filtro 1>) ... or(<filtro 2>) and(<filtro 3>) and(<filtro 4>) or(<filtro 2>) ...

La precedenza fra gli operatori logici AND e OR è regolata come in SQL: vengono quindi prima valutate tutte le espressioni in AND e poi le espressioni in OR.

E' possibile innestare più espressioni fra di loro, a più livelli, per cambiare la precedenza degli operatori, mimando le parentesi utilizzate nella sintassi SQL:

field(<prop 1>) eq(<valore 1>) and(<filtro 2> or(<filtro 3>) or(<filtro 4>) )

oppure

field(<prop 1>) eq(<valore 1>) or(<filtro 2> and(<filtro 3>) )

Nel seguente esempio vengono selezionati tutti i clienti residenti a Milano con professione Casalinga o Pensionato:

CODE
field(Address.City) eq('Milano') 
and( field(Occupation.Code) eq('CAS') 
or(field(Occupation.Code) eq('PEN')) )

Casi particolari

Come si può notare una espressione non può cominciare con una parentesi aperta.

Pertanto se volessimo scrivere un filtro come tutti i clienti che abitano a Milano di professione Casalinga oppure abitano a Como e di professione Pensionati non potremmo scriverlo nel modo seguente.

Codice errato

(field(Address.City) eq('Milano') and(field(Occupation.Code) eq('CAS')))

or(field(Address.City) eq('Como') and(field(Occupation.Code) eq('PEN')))

Per ovviare a questo problema possiamo specificare come prima espressione una condizione sempre vera e combinare con l'operatore AND .

Per comodità possiamo utilizzare la proprietà Id presente in tutte le classi e sempre valorizzata.

Codice corretto

CODE
field(id) eq(id) and(field(Address.City) eq('Milano') and(field(Occupation.Code) eq('CAS'))) 
or(field(Address.City) eq('Como') and(field(Occupation.Code) eq('PEN')))

Data Documento

07 Novembre 2016

Titolo Documento

VibeCodeFilterDoc.odt

Revisione Documento

Revisione n. 1

Documento Redatto da

Fabio Radice

Prodotto

Vibecode

 

JavaScript errors detected

Please note, these errors can depend on your browser setup.

If this problem persists, please contact our support.