# Magic eDeveloper

Magic eDeveloper (aujourd'hui Magic XPA) est un logiciel de développement rapide d'applications créé en 1983 par Magic Software Enterprises. Il s'est appelé successivement Magic II, puis Magic eDeveloper (versions 9 et 10) puis uniPaaS (depuis 2008) et enfin Magic xpa (depuis 2012).
À partir de la version 6, Magic fonctionne sous Windows. Le logiciel est actuellement écrit en C++.
Certaines personnes pensent que ce logiciel permet l'écriture d'applications sans taper de code, mais ce n'est que partiellement vrai. En effet, une bonne partie du développement en Magic repose sur des "expressions" qui utilisent elles-mêmes sur une syntaxe similaire à celle d'un langage de programmation de troisième génération et sur plus de 400 fonctions pré-fournies. Il est bâti sur un moteur dit en "cycles", permettant d'accéder à des bases de données. Magic eDeveloper possède une suite de 15 instructions pour dicter le comportement d'un programme.
Depuis la version 8, eDeveloper est capable de générer un site web, incluant du code Java.
La dernière version de Magic eDeveloper est la version 10. uniPaas a entamé un nouveau cycle de versions. Il en est actuellement (avril 2010) à la version 1.9.
Les explications qui suivent concernent plutôt les versions antérieures à la version 10 et à uniPaas. Dans ces dernières versions, l'éditeur a modifié certains points fondamentaux du fonctionnement, notamment le cycle des opérations, afin de rendre l'environnement plus adapté au développement graphique / événementiel. De plus, alors que les versions précédentes de Magic (jusqu'à Magic 9) stockaient le "code" des applications dans une table d'une base de données, les dernières versions utilisent des fichiers au format XML, ouvrant ainsi la porte aux gestionnaires de versions ainsi qu'aux opérations de "Merge".

## Cycle Magic

eDeveloper permet d'écrire des programmes en modifiant leur comportement. Un programme sera Online (mode interactif, avec une interface graphique) ou bien Batch (mode cycle, procédure ou fonction), ce qui permet de définir son but.
Étant conçu pour l'accès à une base de données (Oracle, Btrieve ou Pervasive par exemple), la connexion à la base, l'ouverture et la fermeture des tables, une fois déclarées, sont gérés par Magic. L'exécution d'un programme est régie par son lancement, son cœur, et sa fin de vie, selon un modèle préconçu et in-changeable appelé Cycle. Ce cycle fonctionne toujours de la même manière, à savoir :
| Préfixe de Tâche | | |
| Préfixe d'Enregistrement | Corps d'Enregistrement | Suffixe d'Enregistrement |
| | | Suffixe de Tâche |
* Préfixe de Tâche : c'est le début du programme, ce qui est lancé avant toute chose.
* Préfixe d'Enregistrement : une fois la table principale déclarée, dans le Corps d'Enregistrement, le programme va effectuer une boucle à chaque enregistrement lu, jusqu'à épuisement des données, depuis le Préfixe d'Enregistrement, au Suffixe d'Enregistrement, en passant par le Corps. Ainsi, cette partie du programme contient le code à exécuter avant la lecture d'un enregistrement (initialisation de compteur, etc.).
* Corps d'Enregistrement : ici se trouvent les déclarations des champs de la table principale (Select Real), des champs virtuels (Select Virtual), des paramètres (Select Parameter), mais aussi des liens sur d'autres tables ou des appels de sous-programmes ou de programmes externes.
* Suffixe d'Enregistrement : cette partie est seulement exécutée à la modification ou suppression d'un enregistrement. Permet de mettre à jour certains champs déclarés, ou d'effectuer toute autre opération.
* Suffixe de Tâche : c'est la fin de vie du programme, une fois que celui-ci a lu tous les enregistrements contenus dans la table principale (mode Batch) ou si l'utilisateur a interrompu l'exécution du programme (mode Online). Des instructions de fin de tâche peuvent y être incluses.

## Instructions

eDeveloper possède 15 instructions pouvant modifier le comportement d'un programme.
* Remark : Ligne de commentaire.
* Select : Variable. Se décompose en Virtual (variable mémoire), Real (champ d'une table) ou Parameter (paramètre).
* Verify : Boîte de dialogue.
* Link : Effectue un lien sur une autre table.
* End Link : Ferme le lien de cette table.
* Block : Bloc d'instructions pouvant être conditionné (If, Else, Loop).
* End Block : Ferme le bloc d'instructions.
* Call : Appel d'une sous-tâche, d'un programme, d'une requête, d'une fonction externe (DLL) ou d'un objet.
* Evaluate : Evaluation d'une expression contenant une fonction de vérification ou d'exécution.
* Update : Mise à jour d'une variable.
* Output Form : Sortie vers un fichier ou une imprimante.
* Input Form : Entrée à partir d'un fichier.
* Browse : Affichage d'un fichier sous forme de boîte de dialogue.
* Exit : Envoi de commandes DOS vers cmd.exe.
* Raise Event : Appel d'un Handler.