Méthodes CTRL_BOUTON_CHOISIR_INTERNE, CTRL_BOUTON_GERER_INTERNE et CTRL_BOUTON_CREER_INTERNE
Un des automatismes liés à la Norme Composant est la possibilité d'appeler des objets d'un composant en lien sans écrire de code.
Dans un écran, si un bouton porte le code [code_composant]_CHOISIR, en cliquant sur le bouton, le système va appeler la méthode CHOIX du composant en lien et récupérer la valeur de retour.
Exemple : la fiche 'Client' (composant CLIENT) possède un lien vers une 'Famille' (composant FAMILLE). C'est à dire que la table CLIENT possède un champ FAMILLE_IDENT. Dans l'écran de gestion des Clients il suffit de nommer un bouton FAMILLE_CHOISIR. En cliquant sur le bouton et en sélectionnant une famille, le système va affecter l'identifiant de la Famille à la fiche Client (CLIENT.FAMILLE_IDENT = I_FAMILLE.IDENT).
Il existe en tout 3 possibilités de code :
[code composant]_CHOISIR : ouverture de l'écran de CHOIX.
[code composant]_GERER : ouverture de l'écran de GESTION en mode Visualisation.
[code composant]_CREER : ouverture de l'écran de GESTION en mode Création.
Remarque : dans les modèles gérant les Droits d'accès (ex: GESTION2), on peut également utiliser les suffixes _CHOIX, _GESTION et _CREATION.
Personnalisation ou réécriture de la méthode de CHOIX
Concernant la sélection d'une fiche en lien, il est souvent utile de contrôler le choix de l'utilisateur. Par exemple, on ne souhaite pas autoriser la sélection de la Famille "AFRIQUE" pour un client français.
On peut le faire à la fin de la méthode CTRL_BOUTON_CHOISIR_INTERNE mais c'est déjà un peu tard car la sélection a déjà été faite. A la limite, on pourrait afficher un simple message d'avertissement.
Dans la plupart des cas on est obligé de réécrire la méthode complète. Voici un exemple complet :
Methode FAMILLE_CHOISIR
// sauvegarde de l'identifiant
Variables : Chaine vident
vident = FAMILLE_IDENT
// ouverture de l'écran de choix
AppliquerMethodeComposant FAMILLE.CHOIX (vident)
// analyse du choix de l'utilisateur
// ErreurRendue: 1=Annuler
Si ErreurRendue = 1 Alors
Quitter
FinSi
// ErreurRendue: 0=OK, 2=Aucune
// lecture de l'interface de FAMILLE
LireInterface FAMILLE
// test pour rejeter certaines sélections
Si I_FAMILLE.CODE = "AFRIQUE" Alors
BoiteMessage "Sélection AFRIQUE interdire"
// relecture de la famille d'origine
AppliquerMethodeComposantLire FAMILLE.LECTURE (FAMILLE_IDENT)
Quitter
FinSi
// on prévient le système qu'on modifie une valeur manuellement
Si Saisie=0 Alors
AppliquerMethode CTRL_DEBUT_MODIF
FinSi
// affectation du champ de la table principale
FAMILLE_IDENT = I_FAMILLE.IDENT
// affichage des autres zones liées
Afficher "I_FAMILLE.CODE","I_FAMILLE.DESIG"
FinMethode
Il peut également être intéressant de filtrer l'écran de choix si l'utilisateur a commencé a saisi les premières lettres de la famille souhaitée.
De même un contrôle peut être fait lorsque l'utilisateur a saisi la famille dans la zone prévue à cet effet.
Voir aussi : Les automatismes des composants