CMDBuild Forum

Ancora sui filtri CQL

Ciao a tutti,

non riesco proprio a venire a capo di come utilizzare i filtri CQL. In un processo sto cercando di filtrare gli  Asset (reference) in base allo stato ammnistrativo (lookup) e allo stato tecnico (lookup).

I seguenti filtri funzionano:

from Computer where (TechnicalStatus != "broken")

from Computer where (AdministrativeStatus = "not assigned")

from Computer where (AdministrativeStatus = "not assigned" or AdministrativeStatus = "")

se provo a fare qualcosa di diverso, come ad esempio usare l'operatore AND i filtri non funzionano, cioé è come se il filtro non esistesse:

from Computer where (TechnicalStatus != "broken" and AdministrativeStatus = "not assigned")

Esistono degli esempi un po' più articolati rispetto a quelli del manuale per amministratori?

Grazie

Paolo Larcheri

Ciao Paolo,
 
anche io in passato ho avuto di questi problemi, alla fine ho preso l'abitudine di adottare un workaround : spostare la logica in una query o vista SQL.
 
Ad esempio io avrei scritto il filtro CQL così : 
 
from Computer where Id IN /(select "Id" from "Computer" where "TechnicalStatus" != 'broken' AND "AdministrativeStatus"='not assigned' )/
 
spero possa esserti utile, nel frattempo rimango sintonizzato, anche io sarei interessato ad eventuali altri esempi in CQL.
 
Un saluto,
 
Alessandro Grillini
 

Previously Paolo wrote:

from Computer where (TechnicalStatus != "broken" and AdministrativeStatus = "not assigned")

 

Inizio a dubitare che l'operatore logico and

sia supportato.

Potete gentilmente confermarlo così mi rassegno e smetto lottare contro i mulini a vento?

 

Grazie

PL

Buongiorno Paolo,

 

l'operatore and in CQL è supportato nella sua forma contratta &

. La query corretta perciò risulta essere:

 

from Computer where TechnicalStatus!='broken' & AdministrativeStatus='not assigned'

 

provvederemo quindi a correggere il manuale in questo senso.

In ogni caso anche la soluzione proposta da Alessandro è corretta (e può tornare sicuramente utile per la composizione di query più complesse) nella forma:

 

from Computer where Id in (/(select "Id" from "Computer" {WHERE_CLAUSE})/)

 

Dove {WHERE_CLAUSE} è una clausola where complessa a piacere a cui possono essere passati anche parametri {client:...} o {server:...}. La query SQL scritta all'interno delle parentesi (/(...)/) può essere anche facilmente testata con strumenti di interrogazione del datatabse (sostituento opportunamente le variabili con i corrispondenti valori di test).

 

 

Alberto