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 :
 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.
 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 :
 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>
<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 :
 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:=
 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
__________________________________________________
Copyright © 1985-2008 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.
__________________________________________________
 
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.
|