ADF : Recherche d'un Row dans ViewObject

Grâce à l’article ADF : Copier/Coller un ViewObject vous avez appris à copier/coller un Row dans un ViewObject. Aujourd’hui nous allons remonter d’un cran dans l’algorithme et nous allons chercher le Row à copier, nous allons donc voir comment récupérer une ligne à partir d’un ID.
Je vais donc vous présenter deux méthodes de recherche dans un ViewObject : la première par Key et la seconde par ViewCriteria.

Première méthode : findByKey

La recherche par Key correspond à mon goût à la méthode qui fournit le code le plus propre. Elle nous permettra de récupérer un tableau de Row.
Dans notre cas, le tableau ne contiendra qu’un seul élément car nous allons filtrer sur la clé primaire.

ViewObject bookVO = /* récupération du ViewObject */;
Integer searchedID = /* l'id recherché */;
// Création du filtre de recherche
AttributeList list = new AttributeListImpl();
list.setAttribute("BookId", searchedID);
// Construction de la Key à partir du filtre
Key key = bookVO.createKey(list);
// Application du filtre
// "1" signifie qu'on ne veut qu'une seule ligne
Row[] foundRows = bookVO.findByKey(key, 1);
// On vérifie qu'une ligne a été trouvée
if (foundRows.length == 1) {
	// Ici on lance la copie
}

Seconde méthode : findByViewCriteria

La recherche par ViewCriteria est également une possibilité pour trouver un ou des enregistrements.
Voici donc un exemple qui présente le même fonctionnement que ci-dessus.

ViewObject bookVO = /* récupération du ViewObject */;
Integer searchedID = /* l'id recherché */;
// Création du filtre de recherche
ViewCriteria bookVC = bookVO.createViewCriteria();
ViewCriteriaRow bookVCR = bookVC.createViewCriteriaRow();
bookVCR.setAttribute("BookId", searchedID);
bookVC.addRow(bookVCR);
// Application du filtre
// "1" signifie qu'on ne veut qu'une seule ligne
// QUERY_MODE_SCAN_ENTITY_ROWS signifie qu'on effectue la recherche dans les Entities
RowIterator bookRI = bookVO.findByViewCriteria(bookVC, 1, ViewObject.QUERY_MODE_SCAN_ENTITY_ROWS);
Row[] foundRows =  bookRI.getAllRowsInRange();
if (foundRows.length == 1) {
	// Ici on lance la copie
}

Conclusion

Nous avons vu deux méthodes pour effectuer des recherches dans un ViewObject.
Nous aurions également pu parcourir l’ensemble des Row du ViewObject afin de trouver les lignes qui correspondaient à notre recherche. Cette méthode qui est beaucoup plus lourde à l’exécution aurait apporté l’avantage d’effectuer des recherches plus complexes. Nous aurions pu, par exemple, lister les lignes qui ont été modifiée depuis le dernier commit, mais cela sera abordé dans un futur article.
Parmis les deux méthodes présentées dans cet article, l’important est de choisir celle qui vous parle le plus.