From FAQ Filemaker

Tutoriel-Filemaker: Les fenêtres pop-up

<==Boite de dialogue ^ Scripts Ouverture du fichier 1==>

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 :

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
La fenêtre
Le script

Bouton




Description


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 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 :

  • 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.

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 :

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 :

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).

...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...

<==Boite de dialogue ^ Scripts Ouverture du fichier 1==>
Récupéré sur http://cqfd-fmp.fr/index.php?n=Tutoriel-Filemaker.Script-Fenetre-Popup
Page mise à jour le 08 avril 2009 à 11h02