SCR/AL1 - TOME IV. Les librairies internes
2.3 Emploi des Actions utilisateur
Les actions utilisateurs sont des fonctions C qui peuvent être définies en cours d'exécution du programme ou par le mot clé UACT suivi du numéro de l'action utilisateur dans les ACTIONS SCR.
ACTION {UACT 1}
L'objectif est de permettre l'installation de fonctions différentes suivant les conditions de l'exécution : une delete_fn dans un ISAM peut être modifiée en cours d'exécution, une action dans un MENU de même, etc.
Un maximum de 100 fonctions utilisateurs peuvent être définies de la sorte.
Le processus doit être effectué comme suit :
1. Enregistrer par ACT_ufn_install() la fonction à exécuter et ses paramètres
ACT_ufn_install(fn, client_int, client_ptr)
Cette fonction retourne un "handle" qui doit être retenu pour deux raisons : il faut installer cette valeur dans l'action visée et éventuellement désinstaller l'action en cours de programme. Le Handle a une valeur comprise entre 3900 et 3999.
Si on souhaite exécuter l'ancienne action, il faut d'abord en extraire le numéro (is->is_delete_act) et l'exécuter dans la fonction utilisateur par la fonction ACT_exec_nu(num); Un handle négatif indique que tous les handles sont occupés.
On peut aussi souhaiter que l'action exécute la fonction désirée, mais aussi une autre action. On utilisera pour cela la fonction suivante :
ACT_ufn_install_old(old_handle, fn, client_int, client_ptr)
où old_handle peut par exemple être
SCR_NU(action_name)
ou l'ancienne action d'un évènement comme par exemple
is->is_rewrite_act
2. Installer l'action dans l'objet SCR visé
Par exemple,
is->is_delete_act = handle;
A partir de ce moment, la nouvelle action s'exécutera en remplacement de l'ancienne lors du delete d'un record de is (ou en complément de celle-ci)
3. Exécution de l'action
Cette action est exécutée automatiquement dans le déroulement normal du programme, mais peut aussi l'être par la fonction
ACT_exec_nu(handle).
4. Désinstallation
Pour désinstaller l'action, et libérer le handle, il suffit de remettre l'ancien handle dans la structure :
is->is_delete_act = old_handle;
et de libérer le handle par la fonction
ACT_ufn_uninstall(handle);
L'ancien handle passé comme paramètre de ACT_ufn_install_old peut être retrouvé par la fonction
ACT_ufn_get_old(handle)
Copyright © 1998-2015 Jean-Marc Paul and Bernard PAUL - Envoyez vos remarques ou commentaires à bernard@xon.be