retourne null pour indiquer qu’il faut agir sur toute la liste (donc pas uniquement sur getCurrentList qui n’est que la page en cours en mémoire, il faut donc faire l’action sur un this.search() non paginé)
retourne un vecteur vide = rien de sélectionné
retourne un vecteur non vide = une liste d’id des lignes sélectionnées (sur plusieurs pages)
exemple pour boucler sur tous les cas possibles:
var ids = this.getSelectedIds();
var list = ids || this.search();
for (var j=0; list && j<list.size(); j++) {
var id = ids ? list.get(j) : list.get(j)[0];
if (this.select(id) && this.getStatus() == "ELIGIBLE" ) {
this.setStatus("ACCEPTE");
this.save();
}
}
Si rien n’est coché, la mise à jour doit normalement se faire sur toutes les pages donc le search() doit répondre au besoin (votre code doit retirer certains filtres avant ou travailler sur une instance autre que celle affichée), mais vous pouvez faire n’importe quel autre recherche au niveau du code (filters, searchspec…) ou alors changer d’API :
this.getCurrentList() = accesseur à la liste affichée
this.search(true) = fait la recherche paginée en base (ne ramène que la page active avec les filtres/searchspec de l’objet)
this.search() = fait la recherche non paginée en base sur l’instance (avec ses filtres/searchspec courant
Je viens de faire un test et le filtre additionnel d’un item de vue est bien conservé dans l’objet si on sélectionne toute les pages + modifier en masse :
testé en 3.0 sur la vue ViewGrant du socle en n’affichant que les usr_lang='FRA' : si on met à jour toutes les adresses, seuls les utilisateurs de langue Française sont modifiés.
il faudrait ajouter des console.log un peu partout pour vérifier à quel moment le filtre disparaît (en entrée + sortie des hooks implémentés pre/postSearch + pre/postSelect). ou si ce n’est pas la bonne instance d’objet IHM qui travaille mais une instance temporaire ou autre.
On peut revoir le code pour “forcer” le filtre en fonction de l’instance d’objet,
exemple de code :
var ids = this.getSelectedIds();
var list = null;
// Force des filtres sur l'instance home
if (!ids && this.getInstanceName()=="home_objetXXX") {
this.getField("champ_annee").setFilter("2017");
list = this.search();
}
else list = ids || this.search();
for (var j=0; list && j<list.size(); j++) {
var id = ids ? list.get(j) : list.get(j)[0];
if (this.select(id) && this.getStatus() == "ELIGIBLE" ) {
this.setStatus("ACCEPTE");
this.save();
}
}