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.