Developpez.com

Club des développeurs et IT pro
Plus de 4 millions de visiteurs uniques par mois

Developpez.com - 4D
X

Choisissez d'abord la catégorieensuite la rubrique :


Les macros 4D évoluent avec la 2004

Date de publication : Décembre 2004

Par Jonathan LE (Technical Support, 4D Inc.)
 

Les macros sont des outils très utiles pour utiliser et réutiliser du code. Avec les nouvelles possibilités d'organisation des fichiers de macros et une nouvelle balise <method>, 4ème Dimension est plus productif que jamais.

I. Introduction
II. Les fichiers inclus avec la démo
III. Les nouveautés
Un nouvel emplacement
Une nouveau balise
IV. Les balises d’une macro
La balise « macros »
La balise « macro »
Les balises simples
Les balises doubles
La balise text
La balise method
V. Créer des macros
Emplacement des macros
Petite macro entre amis...
Appel d’une méthode 4D depuis une macro
Les variables en entrée
Les variables en sortie
Appeler une macro pour ajouter un enregistrement
VI. Conclusion
VII. Base exemple


I. Introduction

Les macros sont une façon très pratique pour générer des portions de code sans à avoir à les retaper. Par exemple, vous pouvez insérer de longs commentaires d'entête à toutes vos méthodes sans saisir un seul caractère au clavier.

Avec l'ajout d'une nouvelle balise dans la version 2004, vous pouvez à présent faire appel à des méthodes 4D.


II. Les fichiers inclus avec la démo

Nous avons accompagné cette note technique d'un fichier de macros « samplemacros.xml ». Ce fichier est pleinement fonctionnel et vous avez juste à le glisser dans votre dossier 4D :

Pictures 0605x0417
Figure 1 : Mettez votre fichier de macros dans le dossier macros

III. Les nouveautés


Un nouvel emplacement

Avec la version 2003 vous aviez pris l'habitude d'avoir un fichier Macros.xml. Dorénavant, comme nous venons de le voir plus haut, les macros 2004 peuvent prendre place dans divers fichiers XML situés dans un dossier spécial du dossier 4D actif. Cette caractéristique va permettre aux auteurs de macros de les répartir et ainsi mieux organiser leur usage.


Une nouveau balise

Encore une nouveauté : la balise <method> </method> qui permet de dynamiser les macros en y ajoutant des méthodes 4D :
   <macro name="FirstTable">
      <text>
         <method>FirstTable</method>
      </text>
   </macro>

IV. Les balises d’une macro


La balise « macros »

La balise macros (avec un s) est la plus haute de toutes dans le fichier XML. On ne peut la trouver qu'une seule fois par fichier XML.
   <macros>
      <macro name="TestMacro">
         < !-- Définition de la macro ici-->
      </macro>
   </macros>

La balise « macro »

La balise macro (sans s) débute la description d'une macro. A l'intérieur de ce tag vous définissez ce que doit faire la macro.

Les balises suivantes s'utilisent en solitaire et ne sont pas attachées à une valeur. Notez la position du slash / : <caret/> et non <caret></caret>.


Les balises simples

<Selection/> cette balise est remplacée par la sélection

<caret/> quand la macro est appliquée, le point d'insertion se trouve à la place de "caret"

<user_4D/> cette balise est remplacée par le nom d'utilisateur de la session 4D

<user_os/> cette balise est remplacée par le nom de l'utilisateur système courant

<method_name/> cette balise est remplacée par le nom de la méthode 4D executée

<date/> cette balise est remplacée par la date système

<time/> cette balise est remplacée par l'heure système

<clipboard/> cette balise est remplacée par le contenu du presse-papiers.


Les balises doubles

<method> cette balise est remplacée par le résultat de la méthode exécutée

<text> encadre les valeurs de votre méthode.


La balise text

Tout texte contenu entre les balises text sera inséré dans la méthode. Il n'est pas possible d'imbriquer deux balises text l'une dans l'autre :


Cette forme d'écriture est impossible :
   <macro name=”SayHello”>
      <text>
         <text>Hello, <user_os/></text>
      </text>
   </macro>

La bonne syntaxe est :
   <macro name=”SayHello”>
      <text>
         Hello, <user_os/>! 
      </text>
   </macro>

La balise method

La balise method permet à une macro d'exécuter une méthode 4D de la base de données. À l'intérieur de cette balise, vous écrivez le nom de la méthode et de ses paramètres s'ils existent.

Imaginons que nous ayons une méthode projet SuperMethode qui utilise un paramètre de type texte. La macro peut faire cet appel :
   <macro name=”Appel_Methode”>
      <text>
         <method>SuperMethode(“<method_name/>”)</method>
      </text>
   </macro>

V. Créer des macros


Emplacement des macros

4D 2004 permet l'usage de plusieurs fichiers de macro. Ces fichiers XML doivent être placés dans un dossier « Macros » lui-même placé à côté du fichier de macros Macros.xml, le fichier par défaut.


Petite macro entre amis...

Nous allons nous essayer à la création d'une petite macro. Ouvrez votre éditeur de texte favori (Sur Mac BBedit est idéal) et écrivez :
   <macros>
      <macro name="TestMacro">
         <text>
            ` Salut, mon nom est <user_os/>
            ` Et je vous donne l'heure. Il est : <time/>
            ` J'ai selectionné le texte <selection/>
            ` Et je continue de saisir ici <caret/>
         </text>
      </macro>
   </macros>

Sauvegardez le tout sous le nom « testMacros.xml ». S'il n'existe pas déjà, créez un dossier Macros dans le dossier 4D actif. Mettez-y « testMacros.xml ». Si vous souhaitez aller plus vite, utilisez le fichier SampleMacros.xml livré avec la démo de la Note technique.

A partir de 4D, ouvrez une méthode et appelez la macro. En version 2004 un nouveau bouton d'appel des macros est accessibles depuis la barre d'entête de l'éditeur de méthode. Comme dans la version précédente, vous avez toujours la possibilité de faire un clic droit sur Windows ou contrôle clic sur Mac et choisir la macro.

Pictures 0604x0459
Figure 4 : Appeler une macro depuis la barre d'outils de l'éditeur de méthode


Et voici le résultat après application de la macro :

Pictures 0604x0461
Figure 5 : le résultat

Appel d’une méthode 4D depuis une macro

Avec l'explication qui suit vous serez en mesure d'appeler une méthode depuis une macro. Cela est rendu possible grâce à la balise <method>. Exemple suivant appelle la méthode FirstTable :
   <macros>
      <!-- macros -->
      <macro name=”FirstTable”>
            <text>
            <method>FirstTable</method>
            </text>
      </macro>
   </macros>


Jetons un œil sur la méthode FirstTable (ma première table)

      ` La variable fait savoir à 4D quel type de substitution aura lieu

   C_ENTIER LONG(_action)

   ` On fixe le remplacement de blob en utilisant cette variable
   C_BLOB(_blobReplace)

      ` La méthode ne fait que créer du code pour créer des champs
   C_POINTEUR($pTable)
   $pTable:=Table(1)

   TABLEAU TEXTE($fieldTitles;0)
   TABLEAU ENTIER LONG($fieldNums;0)

   LIRE TITRES CHAMPS($pTable->;$fieldTitles;$fieldNums)

   C_ENTIER LONG($i)
   C_TEXTE($codeLine;$tableName)

      ` Construction du code et renseignement de la variable de sortie
   $tableName:="["+Nom de la table($pTable)+"]"
   Boucle ($i;1;Taille tableau($fieldTitles))
      $codeLine:=$tableName+$fieldTitles{$i}+":="+Caractere(Retour chariot )
      TEXTE VERS BLOB($codeLine;_blobReplace;Texte sans longueur ;*)
   Fin de boucle

      ` Disons à 4D que nous voulons insérer _blobReplace dans la méthode

   _action:=2



Ouvrons une nouvelle méthode et exécutons la macro FirstTable :

Pictures 0501x0293
Figure 7 : les macros peuvent être appelées par la saisie prédictive


La méthode génère le code qui va vous permettre d'assigner une valeur à chacun des champs de la table 1 comme ceci :

   [Table 1]Field1:=
   [Table 1]Field2:=
   [Table 1]Field3:=

Pictures 0344x0164
Figure 8 : le résultat de la macro


Il y a deux variables à remarquer dans la méthode FirstTable : _action et _blobReplace.

Ces variables process réservées disent à 4D que certaines actions doivent être exécutées quand la macro est appliquée. Ces variables process sont gérées par 4D et sont soit des variables d'entrée (contenant des valeurs fournies par 4D), soit des variables de sortie, que vous, développeur, devez assigner.


Les variables en entrée

Type Nom   Description
C_TEXTE _textSel <-- Texte sélectionné (vide si > 32 000 caractères)
C_BLOB _blobSel <-- Texte sélectionné
C_ENTIER LONG _selLen <-- Longueur du texte sélectionné
C_TEXTE _textMethod <-- Texte de la méthode (vide si > 32 000 caractères)
C_BLOB _blobMethod <-- Texte de la méthode
C_ENTIER LONG _methodLen <-- Longueur du texte de la méthode

Les variables en sortie

Type Nom   Description
C_TEXTE _textReplace --> Résultat à subsituter ("" par défaut)
C_BLOB _blobReplace --> Résultat à subsituter ("" par défaut)
C_ENTIER LONG _action --> Type de substitution dans la méthode d’appel
            0 = Néant
            1 = Insérer _textReplace
            2 = Insérer _blobReplace
            3 = Remplacer la méthode par _textReplace
            4 = Remplacer la méthode par _blobReplace

Appeler une macro pour ajouter un enregistrement

À présent nous ne souhaitons qu'effectuer des actions sans procéder à des remplacements.

Tout ce que la balise <method> sait faire est d'exécuter une méthode. C'est comme si elle était exécutée dans 4D lui-même, une méthode projet, méthode-objet, etc.

Ceci étant posé, la prochaine macro appellera une méthode TouchTable, créera un enregistrement selon les paramètres passés, sauvegardera et ouvrira une fenêtre affichant le résultat.
   <macro name="TouchTable">
      <text>
         <method> TouchTable("Ajouté par <user_os/>";"<time/>") </method>
      </text>
   </macro>

La macro est toujours du même type si ce n'est que nous passons des paramètres de type chaîne.

Le code de la méthode Touchtable :

      ` Méthode appelée de la macro TouchTable

   C_TEXTE($1;$description)
   C_TEXTE($2;$timeString)
   C_HEURE($time)

   $description:=$1
   $timeString:=$2

   $time:=Heure($timeString)

      ` Créé un enregistrement pour la table Logs et règle certaines valeurs
   CREER ENREGISTREMENT([Logs])
   [Logs]Description:=$description
   [Logs]Timestamp:=$time
   [Logs]Id:=Numerotation automatique([Logs])
   STOCKER ENREGISTREMENT([Logs])

      ` Affichage du formulaire sortie de la table logs
   TOUT SELECTIONNER([Logs])

      ` Ouverture du formulaire sortie
   C_ENTIER LONG($window)
   $window:=Creer fenetre(100;100;500;500;Fenêtre standard ;"Logs";"CancelButton")
   MODIFIER SELECTION([Logs];*)

   FERMER FENETRE($window)


Cette fois-ci il n'a pas de variables process réservées. La méthode projet est des plus classique et peut être appelée de n'importe où. Essayez vous-même...


VI. Conclusion

Les macros sont des outils très utiles pour utiliser et réutiliser du code. Avec les nouvelles possibilités d'organisation des fichiers de macros et cette nouvelle balise <method>, 4ème Dimension est plus productif qu'il ne l'a jamais été.

Pour aller plus loin, une note technique 4D-200311-32-FR, également sur les macros, a été publiée pour la version 2003.


Pour des exemples de macros, vous pouvez vous rendre dans la caverne des macros d'Ali Baba sur http://forum.4D.fr .



VII. Base exemple

Téléchargez la base exemple :

base exemple

__________________________________________________
Copyright © 1985-2009 4D SA - Tous droits réservés
Tous les efforts ont été faits pour que le contenu de cette note technique présente le maximum de fiabilité possible.
Néanmoins, les différents éléments composant cette note technique, et le cas échéant, le code, sont fournis sans garantie d'aucune sorte. L'auteur et 4D S.A. déclinent donc toute responsabilité quant à l'utilisation qui pourrait être faite de ces éléments, tant à l'égard de leurs utilisateurs que des tiers.
Les informations contenues dans ce document peuvent faire l'objet de modifications sans préavis et ne sauraient en aucune manière engager 4D SA. La fourniture du logiciel décrit dans ce document est régie par un octroi de licence dont les termes sont précisés par ailleurs dans la licence électronique figurant sur le support du Logiciel et de la Documentation afférente. Le logiciel et sa documentation ne peuvent être utilisés, copiés ou reproduits sur quelque support que ce soit et de quelque manière que ce soit, que conformément aux termes de cette licence.
Aucune partie de ce document ne peut être reproduite ou recopiée de quelque manière que ce soit, électronique ou mécanique, y compris par photocopie, enregistrement, archivage ou tout autre procédé de stockage, de traitement et de récupération d'informations, pour d'autres buts que l'usage personnel de l'acheteur, et ce exclusivement aux conditions contractuelles, sans la permission explicite de 4D SA.
4D, 4D Calc, 4D Draw, 4D Write, 4D Insider, 4ème Dimension ®, 4D Server, 4D Compiler ainsi que les logos 4e Dimension, sont des marques enregistrées de 4D SA.
Windows,Windows NT,Win 32s et Microsoft sont des marques enregistrées de Microsoft Corporation.
Apple, Macintosh, Power Macintosh, LaserWriter, ImageWriter, QuickTime sont des marques enregistrées ou des noms commerciaux de Apple Computer,Inc.
Mac2Win Software Copyright © 1990-2002 est un produit de Altura Software,Inc.
4D Write contient des éléments de "MacLink Plus file translation", un produit de DataViz, Inc,55 Corporate drive,Trumbull,CT,USA.
XTND Copyright 1992-2002 © 4D SA. Tous droits réservés.
XTND Technology Copyright 1989-2002 © Claris Corporation.. Tous droits réservés ACROBAT © Copyright 1987-2002, Secret Commercial Adobe Systems Inc.Tous droits réservés. ACROBAT est une marque enregistrée d'Adobe Systems Inc.
Tous les autres noms de produits ou appellations sont des marques déposées ou des noms commerciaux appartenant à leurs propriétaires respectifs.
__________________________________________________
 



Valid XHTML 1.1!Valid CSS!

Ce document est issu de http://www.developpez.com et reste la propriété exclusive de son auteur. La copie, modification et/ou distribution par quelque moyen que ce soit est soumise à l'obtention préalable de l'autorisation de l'auteur.
Contacter le responsable de la rubrique 4D