Dans la même veine que le script vu précédemment, on aimerait créer des nouveaux enregistrements (des classes par exemple) tout en empêchant la modification des données déjà encodées et présentes dans le fichier. On a vu que la boite de dialogue FileMaker Pro permettait de procéder ainsi, mais on y observe de sacrées limites :
- Limitation à 3 rubriques d'encodage maximum
- Taille et position de la boite de dialogue non maîtrisables
- Pas de possibilité de formater les rubriques (format de données, listes de valeurs, cases à cocher, etc)
Il existe un "plug-in" payant qui améliore considérablement la chose, mais restons simples, et débrouillons-nous par nous-même ! Nous allons tout simplement ouvrir, non pas une boite de dialogue, mais une nouvelle fenêtre, dont on maîtrisera le contenu, la taille et la position. C'est une fenêtre pop-up. De plus, notre fenêtre sera une fenêtre modale : il faudra la fermer pour continuer dans l'application, et il ne sera pas possible de fermer la fenêtre principale tant que notre fenêtre pop-up sera ouverte (par contre, FileMaker Pro pourra être fermé). En voilà bien des choses !
Eh bien, ce n'est pas tout ! Nous allons également voir le contrôle d'un sous-script, ainsi que la montée d'une variable dans un script.
Remarque
Sous Windows, si on travaille en plein écran avec une seule fenêtre principale, on a un réel souci : le fait d'ouvrir une 2e fenêtre de dimension réduite fait quitter le mode plein écran à l'ensemble des fenêtre FileMaker Pro... Donc, la fenêtre principale, qui se trouvera en arrière plan, risque fort de se redimensionner n'importe comment, en dehors de tout contrôle !
Nous terminerons donc le script en ajustant la fenêtre plein écran si on est en Windows, mais il y aura un peu de chahut !
|
Description
- Dans notre fichier, depuis le modèle CLA_Fiche, on va créer un nouvel enregistrement et ouvrir une nouvelle fenêtre, de taille réduite, et comportant les 4 rubriques de données de la table CLA_Classes. On pourra ainsi y encoder ce qui est nécessaire.
- Dans la nouvelle fenêtre, il y aura 2 boutons, "OK" et "Annuler".
- On veut impérativement que l'utilisateur utilise ces boutons pour fermer cette fenêtre
- il ne doit pas avoir accès à une autre fenêtre de l'application tant qu'il n'a pas cliqué sur l'un de ces deux boutons
- Chacun de ces boutons comportera donc un script et un paramètre de script sous forme de variable $$.
- Selon la valeur de cette variable, le script sera annulé ou non.
- La petite fenêtre sera ensuite fermée, et la fenêtre principale ajustée si besoin.
La fenêtre
Tout d'abord, on va construire la fenêtre d'encodage. Pour ce faire, on crée un nouveau modèle vierge, sur l'ancre CLA__, et on le nomme "CLA_Saisie" :
- On y place un rectangle de couleur qui va contenir les autres éléments.
- On verrouille ce "fond" (Objets=> Verrouiller)
- On y place ensuite les 4 rubriques depuis l'ancre CLA__ :
- On les met en empreinte et on les aligne, on change éventuellement les titres pour qu'ils soient plus clairs (et leur remettre des accents)
- On y place également 2 boutons, "OK" et "Annuler", sans rien dedans pour le moment.
- On veille à ce qu'il n'y ait ni en-tête ni pied de page et on remonte la base du corps du modèle juste en dessous du rectangle englobant les rubriques et les boutons (c'est à dire jusqu'au moment ou FileMaker Pro refuse de monter encore plus !).
- On range notre nouveau modèle dans la liste des modèles
On quitte ensuite le mode modèle pour revenir sur le modèle CLA_Fiche.
Le script
Voici le script brut :
Appelons-le, pour les besoins de la cause, "NouvelleClasseII"
Début du script->
Regardons attentivement les pemières commandes du script :
Dans l'ordre :
- On empêche l'annulation par l'utilisateur (il y a intérêt, sinon on pourrait se rerouver avec 2 fenêtres au lieu d'une en finale !) et on gère les erreurs nous-même.
- On démarre tout du modèle CLA_Fiche, donc, par précaution, on active ce modèle (quoique, normalement, on s'y trouve déjà)
- Tout est prêt : on peut Ouvrir une Nouvelle fenêtre. A ce moment, le modèle de cette nouvelle fenêtre n'est pas sélectionné. Il le sera après. Le modèle d'ouverture de la fenêtre est le même que la fenêtre principale, CLA_Fiche. Lorsqu'on clique sur le bouton "Définir" de la commande, la fenêtre de définition permet une série d'option :
- Le titre de la fenêtre : on va mettre "Nouvelle classe".
- La hauteur et la largeur en pixel. Dans notre cas, on laisse à blanc et nous utiliserons plus loin un autre stratagème...
- La distance à partir du haut, en pixel. Disons 250 pour un écran de 768 pixels de hauteur totale.
- La distance à partir de la gauche. Mettons 350 pour un écran de 1024 de large.
- Maintenant que la nouvelle fenêtre est ouverte, elle est totalement hors contrôle, sauf sa position haut/gauche. Il est temps de reprendre la main.
- D'abord dans cette fenêtre le bon modèle : CLA_Saisie, encore chaud, que l'on vient de créer.
- Ensuite, masquer la zone d'état, dont on n'a franchement pas besoin ! En option, on peut même la bloquer, si on veut !
- Enfin, la re-dimensionner, vu qu'on ne l'a pas fait lors de l'ouverture. Grâce au rectangle qui en fait partie, on peut utiliser la commande "Ajuster fenêtre" et comme choix : Ajuster la taille au contenu, le contenu le plus grand étant notre rectangle !
- Maintenant que la fenêtre est ouverte, positionnée, sur le bon modèle et ajustée en taille, on peut, comme lors du script précédent, créer un nouvel enregistrement.
Attente du sous-script
Lorsque le nouvel enregistrement est créé dans la nouvelle fenêtre, si on en reste là, il est tout à fait possible de fermer la fenêtre principale, en arrière plan... Ce serait une belle catastrophe ! Heureusement, il y a moyen de rester "calé" sur la fenêtre qui vient d'être ouverte et la rendre modale, en suspendant le script : Suspendre/reprendre script [].
Il est en pause et attend l'ordre de reprise. Donc, il existe toujours, il n'a pas fini. On peut saisir des données dans la fenêtre au premier plan, mais cette simple manoeuvre suffit à bloquer toutes les fenêtres FileMaker Pro ouvertes !
Comme option, on demande que le script soit suspendu indéfiniment. Nous voilà donc sur notre belle fenêtre pop-up, prêt à encoder les données d'une nouvelle classe (ou d'annuler), tandis que notre script attend...
Reprise du script
Les données de la nouvelle classe étant encodées, il y a deux boutons sur notre modèle pop-up : OK et Annuler. Pour l'instant, il n'y a rien derrière...on va y placer un script identique, mais dont le paramètre sera différent ! Donc, on crée un nouveau script (eh oui...), appelé NouvelleClasseII_Reprise, d'une ligne de commande (ouf !) qui est la définition d'une variable $$classe, dont le contenu sera le paramètre de script de chacun des boutons :
Comme il convient de passer la valeur obtenue par le paramètre de script d'un script à un autre, l'utilisation d'une variable de session : $$ (double $) est nécessaire.
On sauve ce script, on reprend le modèle CLA_Saisie, et, sur chaque bouton, on va placer le script « NouvelleClasseII_Reprise », avec :
- "OK" comme paramètre de script sur le bouton « OK »
- "Annuler" comme paramètre de script sur le bouton « Annuler »
Attention à bien noter la façon dont vous avez écrit OK et Annuler, car leur récupération devra se faire à l'identique.
Comme le titre l'indique, on sélectionnera également l’option Reprise pour le script actif, ce qui va faire reprendre le script principal, qui est en pause actuellement, rappelons-le ! C'est donc ce script secondaire qui va commander la reprise du script principal.
Il faut évidemment sélectionner "Reprise" pour chacun des deux boutons.
Ce point est essentiel. Si vous l'oubliez, votre script ne reprendra pas. Et si, malgré nos conseils, vous n'avez pas désactiver Annulation Utilisateurs (non) avant de faire vos essais...
Suite du script principal
La suite du script principal, qui est maintenant repris, peut tenir compte du contenu de la variable $$classe, définie avec le sous-script :
- Le script se contente d'analyser le contenu de la variable $$classe :
- Si $$classe = "Annuler", on supprime l’enregistrement
- Si $$classe = "OK", on valide l'enregistrement
Et c'est généralement là qu'on regrette d'avoir écrit Annuler dans la variable et Annuller dans le test (mais ce n'est pas notre genre).
- Ensuite, on fait le ménage :
- On ferme notre fenêtre pop-up : on nomme par précaution la fenêtre à fermer ("Nouvelle Classe"), des fois que...
- pas besoin de spécifier sur quel modèle on arrive, puisque nous l'avons spécifié en début de script
- On vide la variable $$classe : elle pourra resservir ! Pour vider, on la définit simplement avec la valeur"".
- On affiche tous les enregistrements (sinon, celui qui vient d'être créé ne fera pas partie de la sélection d'enregistrements de la fenêtre principale, qui a gardé en mémoire les enregistrements sélectionnés avant l'exécution du script. C'est comme ça, et c'est très utile !).
- On affiche le dernier enregistrement, qui est celui que l'on vient de créer, bien sûr (sauf si on a annulé, mais dans ce cas on revient quand même au dernier saisi).
- L'arme anti-chahut de Windows : si la plateforme est Windows (Si [Obtenir(PlateformeSystème) = -2] que nous avons vu précédemment), on Ajuste la fenêtre en plein écran, qui est l'option Agrandir.
...Et on a terminé !
Bouton
Il reste à placer le script sur le bouton Nouvel enregistrement du modèle CLA_Fiche à la place du précédent.
Souvent, tout content de son nouveau script, on oublie cette dernière étape. Comme le bouton exécute déjà un script, on a connu quelques développeurs veiller très tardivement avant de comprendre que ce n'était pas le script qui ne faisait pas ce qui était prévu, mais simplement le bouton qui lançait toujours l'ancien script en lieu et place du nouveau !
Bien sûr, on commente nos scripts, comme toujours. Et on teste notre fichier.
D'ailleurs, avec tout ce que vous savez déjà, vous pourriez améliorer un peu le script en lui faisant vérifier que les rubriques soient remplies, par exemple...