Changements récents - Rechercher:

Tutoriel Filemaker

  1. Structure
  2. Modèles
  3. Opérations diverses
  4. Calculs
  5. Scripts
  6. Privilèges d'accès

Filemaker avancé

  1. Partage des données
  2. Astuces et Exemples
  3. Développement

Règles de nommage

Versions de FileMaker Pro

Liens utiles Contact Commentaires

edit SideBar

Script d'impression

<==Un peu d'ordre ^ Scripts Sous scripts et paramètres==>

On ne va pas se contenter ici de faire un script d'une ligne, mais on va tenter d'élaborer un script pour générer le rapports avec sous-totaux que l'on avait fabriqué dans la section Modèles.

Description
Le script

Remarques

Bouton pour l'impression



Description


Pour rappel, pour générer ce rapport, on devait :

  • Rechercher
  • Trier
  • Passer en mode prévisualisation
  • Imprimer

Comme c'était passablement laborieux, autant inclure toutes ces étapes dans un script ! Le script comprendra également le calcul automatique de l’année scolaire en cours, vérifiera que des enreg. sont trouvés, et terminera par un retour au mode normal « Utilisation ».

<pause philosophique>

Comme on vient de le faire, autant prendre l'habitude, avant d'attaquer un script, de décrire que qu'on attend de lui et ce qu'il doit faire. Bien entendu ce qu'il doit faire si tout va bien, mais surtout ce qu'il doit faire quand tout va mal... Un développeur FileMaker Pro américain dit ainsi que ce qu'il attend d'un script, ce n'est pas tellement qu'il fasse quelque chose, mais surtout qu'il ne plante jamais... A méditer !

</pause philosophique>

Le script


Dans notre fichier nous allons donc créer un nouveau groupe de scripts intitulé "Imp__Impressions" et un nouveau script intitulé "ImpressionRapport". Vous allez pouvoir utiliser l'entête que nous avons mis dans les scripts de travail (copier-coller, puis remplacer les commentaires). Ah, juste un truc utile. Quand on "colle" des lignes de scripts dans un script déjà existant, elles se placent à la fin ou juste après la ligne sélectionnée. Comme ScriptMaker ne permet de bouger (monter ou descendre) les lignes de scripts que une par une, plutôt que de le faire plusieurs fois (si par exemple vous voulez rajouter notre en-tête au début d'un script existant), le plus simple est de coller ces lignes juste après la première ligne existante. Il n'y aura que cette ligne à descendre, au lieu de remonter toutes les autres.

Voici le script

Voici également une version en pdf. Nous allons le détailler...

En-tête

Notre en-tête commence toujours par

  • Gestion erreurs [Oui]

En effet, il est nettement préférable de gérer soi-même les erreurs que peut rencontrer le script, plutôt que de laisser l'utilisateur face aux messages de l'application sans forcément qu'il sache quoi faire. De plus ceci nous permet d'interagir en cas d'erreur avec la suite du script que nous voulons au lieu de laisser la machine décider. Enfin seul cette instruction permet de définir une action de notre choix en cas d'erreur. Par contre, il implique de prévoir et gérer ces "erreurs" puisque les réactions automatiques de FileMaker sont alors inhibées.
Mais qu'est-ce qu'une erreur ? Toutes sortes d'évènements peuvent générer des codes dit d'erreur. Un exemple très simple que nous allons d'ailleurs exploiter ici : une recherche qui ne trouve pas d'enregistrements.

  • Autor. annulation utilisateur [Non]

Idem, nous préférons gérer nous-même les conditions d'annulation du script, plutôt que de laisser l'utilisateur libre de le faire. Ainsi, nous pouvons décider en cas d'annulation de la suite du script. En cours d'écriture, on peut désactiver cette commande (// devant la ligne, qui devient un commentaire et n'est plus interprétée), ce qui nous permet, en cours de test, d'annuler, justement, si besoin l'exécution ou la poursuite du script. Cette commande sera réactivée lorsque notre script sera terminé et testé.

Viennent ensuite nos fameuses explications.

Recherche par script

  • Une sage précaution lorsqu'on fait une recherche par script est de commencer par se positionner sur le modèle ad hoc, afin d'être dans le bon environnement. Dans notre cas, la première opération sera donc d''activer le modèle INS_Fiche' sur lequel se trouvent les rubriques nécessaires à notre recherche
  • Mode Recherche [].
    • Soit on opte pour la pause, ce qui permet d'encoder des critères de recherche. Dans ce cas il faut mettre un bouton sur le modèle de recherche pour reprendre le script ou indiquer de faire "Enter" pour continuer.
    • Soit on définit directement son ou ses critères de recherche, comme c'est le cas ici avec l'année scolaire en cours et le type. FileMaker Pro propose deux manières de faire :
      • soit le ou les critères sont directement définis dans la commande "Mode Recherche"
      • soit, après la commande "Mode Recherche" sans pause, on met la commande "Définir rubrique" pour définir au sein d'une rubrique son ou ses critères de recherche, et ce, autant de fois que nécessaire. Pour des raisons, entre autres, de visibilité à la lecture et de contrôle du script, nous conseillons cette dernière méthode
  • Définir rubrique []
  • Nous aurons souvent recours à cette commande, très pratique. Tout d'abord, il faut savoir que pour définir le contenu d'une rubrique dans FileMaker, on n'utilise jamais (ou presque) le copier-coller, mais donc ce fameux définir rubrique.
  • Ici nous allons nous en servir pour définir nos critères de recherche, comme si nous faisions la recherche manuelle. Il faut donc commencer par choisir la rubrique à définir, puis indiquer son contenu. ceci se fait à l'aide des deux boutons du bas, lorsque la ligne est sélectionnée.
  • Le premier permet d'indiquer la "rubrique cible", celle que l'on veut définir. Le deuxième permet de définir le contenu, par un calcul ou différentes manières.
    • Pour définir le type, nous allons juste saisir "élève". C'est simple.
    • Pour l'année en cours, par contre, nous allons la calculer pour que notre script fonctionne quelle que soit l'année en cours, justement...
      • Calcul de l'année en cours
        • La recherche sur la rubrique "INS__::zkc_Annee" devrait être quelque chose comme "2007-2008". Si le mois est 10, 11 ou 12 (< 9...), l’année scolaire est définie par l’année en cours et l’année en cours + 1, sinon, c’est l’année en cours – 1 et l’année en cours. Le calcul à mettre dans notre "définir" :

Cas(

Mois ( Obtenir (DateActuelle)) > 9 ;
Annee (Obtenir (DateActuelle)) & "-" & (Annee ( Obtenir (DateActuelle)) +1) ;
Annee (Obtenir (DateActuelle)) - 1) & "-" & Annee ( Obtenir (DateActuelle) )
)
  • Exécuter la requête []
    • Les critères étant définis, on lance la commande "Exécuter la requête". C'est à ce moment seulement que la recherche, sur les critères définis précédemment, est effectuée.
    • Comme nous sommes au sein d'un script, une bonne règle est de toujours faire suivre la commande "Exécuter la requête" par une vérification du résultat de cette requête.
  • Si [Obtenir(NombreEnregTrouvés) > 0] Nous aurions pu mettre cette commande, assez explicite. Toutefois, nous utiliserons couramment
  • Si [Obtenir ( Dernière erreur) ≠ 0 ] ou Si [Obtenir ( Dernière erreur) > 0 ]

Arrêtons-nous un instant sur ces lignes qui comportent deux choses essentielles :

  • Si []
  • Comme son nom l'indique, cette commande permet de vérifier SI une condition est vérifiée.
    • elle est toujours suivie d'un Fin de si. C'est entre ces deux lignes que nous allons définir ce qui se passe si la condition est vérifiée.
      • Lorsque la condition qui suit le "Si" n'est pas vérifiée, le script saute directement au "Fin de si" associé
      • Si elle est vérifiée, il exécute les lignes comprises entre le "Si" et le "Fin de si"
    • Il peut y avoir entre si et fin de si un Sinon ou un Sinon si ce qui permet de tester plusieurs hypothèses successives
      • Dans ce cas, c'est au "Sinon" ou "Sinon si" que saute le script si la condition n'est pas vérifiée.
      • Mais si elle est vérifiée, le "Sinon" sera ignoré
      • Sinon se comporte ensuite comme un "Si", vers la prochaine condition ou le "Fin de si"
  • On peut évidemment imbriquer les "Si"... "Fin de si". ScriptMaker décale l'écriture à chaque nouvelle condition.
  • Obtenir ( Dernière erreur)
  • Cette commande intercepte le numéro de "l'erreur" généré par la dernière action du script (juste avant cette ligne).
  • Lorsque tout se passe bien, le code obtenu est 0.
  • Si, par exemple, la recherche ne trouve aucun enregistrement, un code est généré. La liste des codes est disponible dans le menu d'aide installé avec FileMaker (ou sur Internet. On y trouve l'erreur 401 "Aucun enregistrement ne correspond à cette requête", mais aussi 400 "Les critères de recherche sont vides" ou encore 508 "Valeur incorrecte saisie en mode Recherche" et plein d'autres possibilités encore de faire échouer une recherche. Nous ne prenons pas de risque en spécifiant donc que si le code erreur est supérieur, ou mieux encore, différent de 0, c'est qu'il y a un problème
  • Mais chaque commande génère son code de bonne ou mauvaise exécution, il faut donc impérativement intercepter le code juste après la commande à vérifier
  • Ouvrir boîte dial. peron. []
  • cette commande, fort pratique mais dont nous verrons vite les limites, permet, comme son nom l'indique d'afficher un message pour l'utilisateur. Nous y reviendrons un peu plus loin dans le script.
    • ici, nous allons juste lui indiquer un titre, le message et ne laisser qu'une seule possibilité de réponse à l'utilisateur, c'est à dire OK.
  • Fin de script []
  • Comme aucun enregistrement n'a été trouvé, il n'y a pas de rapport à trier et imprimer. Si on se contente d'afficher le message de la boîte de dialogue entre le "Si" et le "Fin de si", notre script va continuer après la "Fin de si". Il faut donc terminer le script ici.
    • on peut générer un résultat de Fin de script, mais nous verrons cela plus tard...

Modèle d'impression

  • Activer modèle []
  • La recherche étant faite, et si elle a été non nulle, on se rend sur le modèle d'impression, dans ce cas INS_RapportClasses, de l'ancre INS__.
  • Important, nous venons de changer de modèle. Si le script est interrompu ou se termine, c'est ce modèle qui sera affiché, avec le résultat de la recherche. Ne l'oublions pas !!!

Tri du rapport

Le tri se fait sur :

  • ins_CLA::Année
  • ins_CLA::Nom
  • Trier enregistrements [ Rétablir ; Sans fenêtre ]
  • Ici nous connaissons notre ordre de tri, nous pouvons donc en fixer les critères dans le script.
  • Du coup, pas besoin d'afficher la fenêtre de tri (dans laquelle l'utilisateur pourrait modifier les choix).

Impression

L'impression se déroule en 3 étapes au sein d'un script, la 1ère étant optionnelle :

  1. On se met d'abord en Mode Prévisualisation, afin que l'utilisateur puisse vois à l'écran la façon dont le rapport sera imprimé. Il faut bien sûr garder alors l'option de la pause, dont on sort en faisant "Enter".
  2. Avant de lancer l'impression, on appelle une Configuration d'impression, précisant par exemple l'orientation de la page.
  3. Enfin, on lance la commande Impression.

Quelques remarques sur le mode prévisualisation...
Nous permettons à notre utilisateur de vérifier si le document lui convient. Mais s'il ne lui convient pas, il faut qu'il puisse le signaler. En effet, si nous passons directement après la pause à l'impression, ce contrôle est purement formel.
Nous allons donc retrouver ici notre boîte de dialogue pour lui demande ce qu'il souhaite faire. Contrairement à notre première boîte de dialogue, purement informative, celle si propose un choix. Il faut donc interpréter ce choix pour la suite du script.

  • Si [ Obtenir ( DernierChoixMessage ) ]
  • Voici la commande qui va nous permettre d'agir en fonction du bouton cliqué.
  • Chaque bouton renvoie un numéro différent :
    • 1 pour le premier (OK par défaut)
    • 2 pour le deuxième (Annuler par défaut)
    • 3 pour le troisième
  • Ici nous offrons deux choix : OK pour imprimer (donc pour poursuivre le script) ou Annuler pour arrêter.
  • Il suffit donc dans le "Si" de tester l'annulation (choix 2). Si le bouton 1 a été cliqué, alors on va directement à "Fin de si" et on poursuit l'exécution.
    • si le choix est d'annuler, on n'oublie pas de revenir sur un modèle utilisateur et en mode utilisation (car nous sommes toujours en mode prévisualisation).

Fin du script

Même après la phase d'impression, nous sommes toujours en mode prévisualisation et sur le modèle d'impression. Il faut donc revenir au Mode Utilisation et on active un modèle utilisateur, INS_Fiche.

Remarques


Commentaires

Il est toujours intéressant d’ajouter des commentaires au sein du script, décrivant ce qu’on y fait (et éventuellement pourquoi). Ceci est simplement fait à l’aide la ommande Commentaire, que l'on retrouve en fin de liste des commandes.

Gestion des erreurs

Nous avons vu comment gérer les erreurs et que notre première ligne gestion des erreurs ( Oui) bloquait toute intervention de FileMaker lui-même.
On peut donc utilement placer une recherche de la dernière erreur juste après l’impression, avec boite de dialogue :

Remarque concernant l'impression par script

FMP possède un « effet mémoire » concernant les configurations d’impression, notamment l’orientation du papier. C’est pourquoi, avant de placer la commande Imprimer, il est utile de placer la commande Configuration impression, qui fixera les paramètres à utiliser.

Il en est de même pour la commande Impression, qui fixe la sélection à imprimer :

  • Soit l’enregistrement courant
  • Soit l’ensemble trouvé.

Ces deux commandes étant définies, elles ne changeront plus.

Bouton pour l'impression


Il faut noter que, grâce à la commande Activer Modèle [ INS_Fiche ] placée en début de script, ce script peut être placé sur n’importe quel bouton. En toute logique, on va placer ce bouton sur le modèle INS_Fiche :

Ainsi, un simple clic sur ce bouton génèrera le rapport correctement et lancera l'impression.

Ouf ! Voici de longues explications pour un seul script. Mais rassurez-vous, la méthode comprise, tout sera plus facile ensuite. Et nous avons abordé ici des notions fondamentales de recherche, interception de messages, si et fin de si etc.

D'ailleurs, reprenons notre fichier et passons au chapitre suivant pour améliorer encore (un tout petit peu) notre script...

<==Un peu d'ordre ^ Scripts Sous scripts et paramètres==>
Éditer - Historique - Imprimer - Changements récents - Rechercher
Page mise à jour le 28 mai 2017 à 18h33