bloggers bloggers

Marco Napolitano
Messaggi: 79
Stelle: 0
Data: 17/02/22
Jader Jed Francia
Messaggi: 63
Stelle: 0
Data: 18/02/21
Paolo Gambetti
Messaggi: 2
Stelle: 0
Data: 11/11/19
Katia Pazzi
Messaggi: 1
Stelle: 0
Data: 27/06/19
Ezio Lombardi
Messaggi: 11
Stelle: 0
Data: 10/04/18
Chiara Mambretti
Messaggi: 25
Stelle: 0
Data: 27/02/17
Serena Traversi
Messaggi: 3
Stelle: 0
Data: 21/07/16
Francesco Falanga
Messaggi: 8
Stelle: 0
Data: 14/06/16
Antonio Musarra
Messaggi: 2
Stelle: 0
Data: 18/11/13
Simone Celli Marchi
Messaggi: 6
Stelle: 0
Data: 09/07/13
Indietro

Estrarre asset utilizzando tags e categorie in Liferay 6

L'asset publisher è lo strumento fornito out of the box da Liferay per estrarre contenuti dal portale in base a una query costruita settando diversi parametri, tra i quali categorie di appartenenza o tag assegnati all'asset.
I casi d'uso coperti da questo strumento sono molteplici, ma per i requisiti che non dovessero essere soddisfatti dalle possibili parametrizzazioni, vediamo come interrogare l'asset framework per mezzo dell'oggetto AssetEntryQuery.


AssetEntryQuery ci consente di costruire una query specificando quali regole in termini di associazione di tag e categorie devono rispettare i nostri asset: l'esempio di seguito vuole porre particolare attenzione su come utilizzare i metodi setAllTagIds e setAnyTagIds per ottenere diverse combinazioni di risultato.
Lo scenario che vogliamo riprodurre è una classificazione di elementi eterogenei tra mezzi a motore di diversa natura; in particolare i nostri asset saranno:

  • Motore benzina - tags "benzina"
  • Motore diesel - tags "diesel"
  • Fiat Punto 1.2 - tags "benzina", "fiat"
  • Fiat Punto MJet - tags "diesel", "fiat"
  • Yamaha Tmax - tags "benzina", "yamaha"
  • Yamaha 422 Sterndrive Diesel - tags "diesel", "yamaha", "marine"


Entrambi i metodi sopra citati accettano come parametro un array di long, pertanto sarà necessario attenere l'id dei tag o delle categorie che vogliamo utilizzare nella query: le due classi contenenti i metodi per l'estrazione sono sostanzialmente AssetTagLocalServiceUtil e AssetCategoryLocalServiceUtil. Al fine di identificare gli id, può essere utile anche fare riferimento alle tabelle del portale assettag e assetcategory.

Vediamo un primo caso nel quale vogliamo ottenere tutti i mezzi contenenti il tag "diesel":

AssetEntryQuery assetEntryQuery = new AssetEntryQuery();
assetEntryQuery.setAllTagIds(new long[]{17458});
List<AssetEntry> results = AssetEntryLocalServiceUtil.getEntries(assetEntryQuery);


Con questo codice otteniamo tutti gli asset ai quali è associato il tag "diesel", che ha id = 17458.
Il risultato sarà quindi:

  • Yamaha 422 Sterndrive Diesel
  • Fiat Punto MJet
  • Motore diesel


Allo stesso modo, otteniamo tutti i mezzi contenenti il tag "benzina" (id = 17462):

AssetEntryQuery assetEntryQuery = new AssetEntryQuery();
assetEntryQuery.setAllTagIds(new long[]{17462});
List<AssetEntry> results = AssetEntryLocalServiceUtil.getEntries(assetEntryQuery);

  • Yamaha Tmax
  • Fiat Punto 1.2
  • Motore benzina


Vediamo ora un esempio un po' più complesso, che prevede un'intersezione di tag e che dimostra le differenze di funzionamento tra il metodo setAnyTagIds e setAllTagIds.
Voglio estrarre tutti gli i prodotti (asset) del marchio yamaha (id = 17473), motorizzati diesel (id = 17458):

AssetEntryQuery assetEntryQuery = new AssetEntryQuery();
assetEntryQuery.setAllTagIds(new long[]{17473, 17458});
List<AssetEntry> results = AssetEntryLocalServiceUtil.getEntries(assetEntryQuery);


Il risultato sarà:

  • Yamaha 422 Sterndrive Diesel


in quanto è l'unico asset con l'associazione di entrambi i tag "diesel" e "yamaha"
Se l'esigenza fosse stata invece quella di ottenere tutti gli asset contenenti i tag "diesel" o "yamaha", avremmo dovuto utilizzare il metodo setAnyTagIds:

AssetEntryQuery assetEntryQuery = new AssetEntryQuery();
assetEntryQuery.setAnyTagIds(new long[]{17473, 17458});
List<AssetEntry> results = AssetEntryLocalServiceUtil.getEntries(assetEntryQuery);

  • Yamaha 422 Sterndrive Diesel
  • Fiat Punto MJet
  • Yamaha Tmax
  • Motore diesel


L'oggetto AssetEntryQuery mette a disposizione metodi per l'utilizzo di altri parametri per restringere ulteriormente la selezione: è possibile settare categorie, className e className id e tutti i metodi fin qui elencati in logica negata.
Infine, la presenza dei metodi setStart e setEnd invita lo sviluppatore a ingegnerizzare il proprio codice utiilzzando il classico searchContainer come elemento per la visualizzazione dei risultati.

Precedente
Commenti
Nessun commento. Vuoi essere il primo.