Événement de champ vue

image.png

Ninext ajoute des événements aux vues de Ninox : le clic sur une ligne d'un champ vue (onclick) et la sélection d'une fiche dans la vue d'une table (onselected). Dans vos formules, ces fonctions s'écrivent exactement ainsi, en minuscules.

Ces événements se désactivent dans les Paramètres Ninext, section « Améliorations de l'interface » : Événements de vue (onClick, onSelect) (activé par défaut).

Clic sur une ligne d'un champ vue : onclick

Aperçu rapide des propriétés JSON transmises à onclick

PropriétéDescriptionExemple / usage
previousIDL'identifiant de l'enregistrement sélectionné dans la vue avant le clic ; vide s'il n'y en avait pas.“A1”
targetIDL'identifiant de l'enregistrement visé par le clic.“A3”
targetLineNumLe numéro de la ligne sur laquelle l'utilisateur a cliqué (à partir de zéro).3
targetColumnNumLe numéro de la colonne cliquée dans la vue (à partir de zéro).4
targetColumnValueLa valeur textuelle affichée dans la cellule cliquée.“Lisa”
targetColumnCaptionLe libellé de la colonne, issu de la configuration du champ (via « caption » ou « field.caption »).“First Name”

Marche à suivre générale

  1. Définir la fonction onclick dans la formule du champ vue
    La fonction onclick doit être intégrée à la formule du champ vue. Elle reçoit un objet (nommé « event ») qui contient les propriétés décrites ci-dessus. Dans cette fonction, this désigne l'enregistrement qui porte le champ vue, et non la ligne cliquée : celle-ci se retrouve par event.targetID.
  2. Exécuter du code personnalisé
    Lorsqu'un utilisateur clique ou appuie sur une cellule de la vue, le point d'accroche de Ninext exécute la fonction onclick. Le script peut alors, par exemple :
    • Mettre à jour les propriétés d'un enregistrement (basculer un champ booléen, par exemple).
    • Stocker l'identifiant de l'enregistrement cliqué dans un champ dédié.
    • Déclencher des actions conditionnelles selon la colonne cliquée.
  3. Renvoyer le contenu de la vue
    À la fin de la fonction, la formule doit renvoyer le contenu de la vue (par exemple « select Customer »). C'est ce qui indique à Ninox quels enregistrements afficher après l'exécution du script.

Exemples de mise en œuvre

Exemple complet

Ninox
function onclick(event : any) do
    'ID of selected customer' := event.targetID;
    var selCustomer := first(select Customer where Id = event.targetID);
    debug("onclick");
    if event.targetColumnCaption like "checked" then
        selCustomer.(Checked := not Checked);
        true
    else
        if event.targetColumnNum = 0 then
            true
        else
            false
        end
    end
end;
select Customer

Commentaires :

  • La fonction commence par stocker l'identifiant de l'enregistrement cliqué dans le champ « ID of selected customer ».
  • Elle récupère ensuite l'enregistrement correspondant dans la table « Customer ».
  • Si le libellé de la colonne cliquée contient « checked », elle bascule le champ « Checked » de cet enregistrement et renvoie true pour signaler que le clic a été traité.
  • Sinon, la fonction renvoie true ou false selon que le numéro de la colonne cliquée vaut 0 ou non.
  • Enfin, la formule renvoie « select Customer », ce qui affiche le contenu de la vue après l'exécution du script.

Exemple minimal

Ninox
function onclick(event : any) do
     'ID of selected customer' := event.targetID;
     debug("Clicked on Customer " + event.targetID);
     "No specific action is performed here.";
     false
 end;

select Customer

Commentaires :

  • Ce script se contente de stocker l'identifiant de l'enregistrement cliqué et d'écrire un message de débogage.
  • En renvoyant false, on laisse le comportement par défaut s'appliquer aux actions qui ne sont pas traitées explicitement.
  • Comme toujours, la formule se termine par « select Customer » pour afficher le contenu de la vue.

Points essentiels à retenir

  • Emplacement dans la formule du champ vue :
    La fonction onclick doit être définie directement dans la formule du champ vue, et non dans un déclencheur ou ailleurs dans l'application.
  • Renvoi du contenu de la vue :
    Contrairement à d'autres fonctions qui attendent un booléen, la dernière ligne de la formule doit renvoyer le contenu de la vue (par exemple « select Customer »).
  • Valeur renvoyée par onclick :
    true signale que le clic est traité : Ninox n'ouvre pas la fiche cliquée. false, ou aucune valeur, laisse Ninox appliquer son comportement habituel et ouvrir la fiche. Un clic sur une ligne de regroupement n'appelle pas onclick.
  • Une fonction évaluée à part :
    Ninext extrait la seule fonction onclick de la formule, puis l'évalue à part. Elle ne voit donc ni les variables ni les autres fonctions déclarées ailleurs dans la formule : déclarez à l'intérieur d'onclick tout ce dont elle a besoin.
  • Utilisation des paramètres de l'événement :
    Servez-vous des informations fournies par l'objet « event » (previousID, targetID, targetLineNum, targetColumnNum, targetColumnValue, targetColumnCaption) pour adapter vos actions au contexte du clic.
  • Essais sur différents appareils :
    Assurez-vous que la fonction marche aussi bien sur ordinateur que sur appareil tactile, car le point d'accroche traite à la fois les événements « click » et « touchend ».

Sélection d'une fiche dans la vue d'une table : onselected

Ninext appelle une fonction onselected() chaque fois qu'une ligne est sélectionnée dans la vue d'une table (la liste des fiches de la table). Déclarez-la, sans paramètre, dans la formule du droit de lecture de la table (« Readable if »). Dans cette fonction, this désigne la fiche sélectionnée. La valeur qu'elle renvoie n'est pas utilisée, et Ninox ouvre la fiche comme d'ordinaire.

Ninox
function onselected() do
    debug("customer->onselect : " + this)
end;
true

Ici, chaque sélection écrit dans le Traceur de débogage, panneau Ninext ouvert, une ligne qui résume la fiche choisie.

La formule garde son rôle : c'est sa dernière valeur que Ninox utilise pour décider qui peut lire la table. Terminez-la donc par votre condition de lecture habituelle ; true, comme ici, ne change rien au droit de lecture d'une table ouverte à tous. Comme onclick, la fonction est extraite seule de la formule.