Per realizzare una ricerca custom all'interno di un'applicazione web Documentum-based (mediante l'utilizzo di Webtop oppure di WDK) è solitamente necessario creare un'apposito "component" e conseguentemente una classe Java per le eventuali funzionalità custom di business.
Questa classe Java solitamente estende le superclassi AdSearchEx
(oppure direttamente AdvSearchExBase
) andando a specificare il metodo:
protected IDfQueryBuilder buildQuery() throws Exception;
che si occupa di configurare e restituire un oggetto IDfQueryBuilder
contenente la struttura della query da eseguire.
Supponiamo quindi di dover eseguire una query DQL su di un campo di tipo repeating e vediamo come configurare l'oggetto IDfQueryBuilder
; la query da eseguire è la seguente (notare la clausola ANY
per la ricerca su attributi repeating):
SELECT * FROM my_document WHERE ANY my_field = 'text';
Il codice Java che andremo a scrivere è il seguente:
protected IDfQueryBuilder buildQuery() throws Exception {
// si recupera dalla superclasse un oggetto preconfigurato
// su cui lavorare
IDfQueryBuilder qb = super.buildQuery();
// in alternativa sarebbe stato possibile creare un nuovo
// oggetto da zero ricordandosi però di configurare
// correttamente la DOCBASE di riferimento
// IDfQueryBuilder qb = getSearchInfo().getSearchService()
.newQueryMgr()
// .newQueryBuilder("my_document", -1, true);
// qb.addSelectedSource(getDfSession().getDocbaseName());
// [...] eventuali colonne da restituire in output
// si recupera l'insieme delle clausole di WHERE
IDfExpressionSet expressionSet = qb.getRootExpressionSet();
expressionSet.addSimpleAttrExpression("my_field",
IDfValue.DF_STRING,
IDfSimpleAttrExpression.SEARCH_OP_EQUAL,
false,
true,
"text");
// [...] eventuali clausole di ordinamento
return qb;
}
Il punto fondamentale è il metodo addSimpleAttrExpression
pertanto analizziamone i parametri usati (confrontandoli con la query DQL vista sopra):
"my_field"
, è il nome del campo su cui dobbiamo fare la ricerca;IDfValue.DF_STRING
, è il tipo del campo (stringa, intero, boolean, ...);IDfSimpleAttrExpression.SEARCH_OP_EQUAL
, è l'operazione di filtro da eseguire (=, >, <, ...);false
, abilita/disabilita la ricerca case sensitive;true
, configura l'attributo come repeating in modo che il framework utilizzi la clausola ANY
;"text"
, testo da cercare.
Enjoy!