IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)

Créer une application web .NET avec XMLRAD

XMLRAD est un substitut à ASP.NET pour créer des applications web avec .NET. La technologie est basée sur XML/XSL pour générer les pages HTML.

Article lu   fois.

L'auteur

Profil ProSite personnel

Liens sociaux

Viadeo Twitter Facebook Share on Google+   

Introduction

Pour créer une application web en .NET, on utilise généralement ASP.NET. Il existe une autre voie : XMLRAD, qui se base sur la technologie standard XML/XSL pour générer les pages HTML.

La technologie XML/XSL permet une séparation des données (XML) de leur représentation (XSL). Cela facilite le développement et la maintenance de l'application. Le code de gestion est lui placé dans le Code Behind de façon similaire à ASP.NET. L'accès aux données est par contre pris en charge par le framework XMLRAD et les requêtes SQL sont décrites dans des fichiers XML, facilitant là aussi le développement.

Nous allons voir dans cet article comment développer notre application web avec XMLRAD : création du projet, connexion à la base de données, génération des premiers écrans et l'implémentation de règles de gestion. La création d'une application, quel que soit votre environnement est décrite en détail dans l'article XMLRAD: premiers pas. Je vous invite à le parcourir avant de commencer celui-là.

Création du projet

Lancez XMLRAD, et cliquez sur Create a new project. Sélectionnez Simple project.

Image non disponible

Nommez votre projet MyDotNETProject et sélectionnez votre IDE (VisualStudio.NET ou SharpDevelop) et votre langage.

Créez votre projet avec des XMLModules normalisés. Votre projet est alors généré sur disque dans le répertoire C:\Program Files\Delos\Projects\MyDotNETProject.

Image non disponible

Dans le répertoire du projet, vous avez un répertoire Bin dans lequel se trouve toute l'application. Un répertoire Data sera automatiquement créé pour toutes les traces, logs d'erreur, profiles, etc.

Dans ce répertoire Bin se trouvent tous les fichiers de configuration XML :

On y trouve aussi les fichiers source et le projet VisualStudio.NET ou SharpDevelop.

Dans le sous-répertoire bin se trouvent les assemblies : XMLCLX.dll qui est l'assembly du framework XMLRAD et XMLServer.dll qui est l'assembly du projet (=Code Behind).

Le sous-répertoire XML contient tous les fichiers XML décrivant les actions (XMLServices) et les fichiers XSL.

Connexion à une base de données

Après avoir généré le projet sur disque, on tombe sur un assistant de connexion à une base de données.

Image non disponible

Vous avez le choix entre cinq bases de données principales (Access, Interbase/Firebird, MySQL, Oracle et SQLServer). Si vous utilisez une autre base de données ou si vous voulez configurer manuellement l'accès à votre base de données, choisissez Other. Pour plus d'informations sur la configuration manuelle, reportez-vous à l'Appendix 3 : Configuring DataSources. Nous allons ici nous connecter à une base MySQL qui est fournie avec le produit : Training.

Pour vous connecter à une base MySQL, outre le serveur MySQL, il vous faudra le .NET Data Provider spécifique pour MySQL que vous pouvez télécharger à l'adresse http://dev.mysql.com/downloads/connector/net/1.0.html. Pour plus d'informations, consultez la FAQ à ce sujet.

Le setup XMLRAD installe normalement la base Training pour MySQL dans le répertoire data du serveur de base de données. La base devrait donc être directement disponible. Si ce n'est pas le cas, vous avez la base dans le répertoire C:\Program Files\Delos\Demos\Data\training.

Une fois que vous avez choisi MySQL, vous allez rentrer les informations d'authentification pour vous connecter au serveur.

Image non disponible

Si les informations sont correctes, l'application essaye de s'y connecter et récupère la liste des bases installées sur le serveur.

Image non disponible

Nous allons choisir la base training et valider. Si la connexion s'est bien passée, on tombe sur l'assistant de création de la première action. Sinon on se retrouve devant l'écran de configuration manuelle de l'accès aux données.

Image non disponible

Création des écrans

Créons nos premiers écrans visuels. Il nous faut tout d'abord une liste des ORGANIZATIONS. Sélectionnez dans l'assistant de création des XMLServices Data Table qui permet de générer une liste de données d'une table.

Image non disponible

Suivez les étapes de l'assistant pour générer la liste sur la table ORGANIZATION. Reportez-vous au tutoriel XMLRAD : premiers pas pour plus de détails.

Image non disponible

De même maintenant, avec le formulaire de modification d'une ORGANIZATION. Sélectionnez Simple Form dans l'assistant.

Image non disponible

Suivez à nouveau les étapes de l'assistant pour générer le formulaire sur la table ORGANIZATION. Assurez-vous que l'Update statement est généré automatiquement avec le formulaire sur le dernier écran de l'assistant. Reportez-vous au tutoriel XMLRAD : premiers pas pour plus de détails.

Image non disponible

L'application est invoquée avec l'URL suivante : http://localhost/MyDotNETProjectBin/Global.aspx/Formorganization?ORG_ID=101. MyDotNETPRojectBin est un répertoire virtual IIS créé automatiquement par XMLRAD. Global.aspx est un fichier fictif permettant le déclenchement du framework .NET pour cet alias. C'est ensuite le framework XMLRAD qui prend le relais. Formorganization est le nom de l'action ou XMLService à exécuter.

Ajout de règles de gestion

Architecture des XMLServices

Chaque écran ou XMLService est composé d'un fichier XMLGram décrivant les actions à effectuer par l'intermédiaire d'instruction et d'un fichier XSL qui sera appliqué au document XML résultant de l'exécution du XMLGram.

Image non disponible

L'écran de la liste des ORGANIZATIONS a le XMLGram suivant :

 
Sélectionnez
<xmlgram name="Listorganization">
    <DBExtract Name="organization">
        <DataSource>Database</DataSource>
        <Kind>Multiple</Kind>
        <MaxRows>10</MaxRows>
        <MultipleContainerName>organizationS</MultipleContainerName>
        <RecordName>organization</RecordName>
        <Fields/>
        <Params/>
        <Statement>
            <![CDATA[SELECT organization.ORG_ID, 
                     organization.ORG_NAME
                 FROM organization organization]]>
        </Statement>
    </DBExtract>
</xmlgram>

L'extraction y est décrite par l'instruction DBExtract : quelle DataSource utiliser, extraction multienregistrement, 10 enregistrements par page, requête SQL… Les enregistrements extraits seront ajoutés dans un document XML appelé OutputDoc (document de sortie) avant d'être traités par le XSL pour produire la page HTML.

Pour le formulaire, le XMLGram est similaire, mais avec l'extraction d'un seul enregistrement. Pour le XMLService UpdateORGANIZATION qui ne fait qu'une mise à jour vers la base de données, le XMLGram est différent :

 
Sélectionnez
<xmlgram name="Updateorganization">
    <Match Name="Matchorganization">
        <FillContext>True</FillContext>
        <Select>organization</Select>
        <DBBatch Name="organization">
            <DataSource>Database</DataSource>
            <Params>
                <Param>
                    <Name>ORG_NAME</Name><Type>VARCHAR</Type>
                </Param>
                <Param>
                    <Name>ORG_ADDRESS1</Name><Type>VARCHAR</Type>
                </Param>
                <Param>
                    <Name>ORG_ADDRESS2</Name><Type>VARCHAR</Type>
                </Param>
                <Param>
                    <Name>ORG_STATE</Name><Type>VARCHAR</Type>
                </Param>
                <Param>
                    <Name>ORG_ZIP</Name><Type>VARCHAR</Type>
                </Param>
                <Param>
                    <Name>ORG_CITY</Name><Type>VARCHAR</Type>
                </Param>
                <Param>
                    <Name>COUNTRY_ID</Name><Type>INTEGER</Type>
                </Param>
                <Param>
                    <Name>ORG_PHONE</Name><Type>VARCHAR</Type>
                </Param>
                <Param>
                    <Name>ORG_FAX</Name><Type>VARCHAR</Type>
                </Param>
                <Param>
                    <Name>ORG_INFO</Name><Type>INTEGER</Type>
                </Param>
                <Param>
                    <Name>ORG_DATA</Name><Type>INTEGER</Type>
                </Param>
                <Param>
                    <Name>ORG_ID</Name><Type>INTEGER</Type>
                </Param>
            </Params>
            <Statement>
                <![CDATA[UPDATE organization organization
                     SET  ORG_NAME = :ORG_NAME, 
                       ORG_ADDRESS1 = :ORG_ADDRESS1, 
                       ORG_ADDRESS2 = :ORG_ADDRESS2, 
                       ORG_STATE = :ORG_STATE, 
                       ORG_ZIP = :ORG_ZIP, 
                       ORG_CITY = :ORG_CITY, 
                       COUNTRY_ID = :COUNTRY_ID, 
                       ORG_PHONE = :ORG_PHONE, 
                       ORG_FAX = :ORG_FAX, 
                       ORG_INFO = :ORG_INFO, 
                       ORG_DATA = :ORG_DATA
                     WHERE organization.ORG_ID = :ORG_ID]]>
            </Statement>
        </DBBatch>
    </Match>
</xmlgram>

Là le XMLGram comprend une autre instruction : DBBatch qui permet d'envoyer des ordres de mises à jour (INSERT, UPDATE, DELETE). Les paramètres de la requête SQL y sont décrits avec leurs types. Ici pas besoin de XSL puisqu’aucun enregistrement n'est extrait. À l'issue de l'exécution de ce XMLService ce sera le XMLService FormORGANIZATION qui sera appelé pour afficher à nouveau le formulaire avec les nouvelles modifications.

Pour plus d'informations sur les instructions d'un XMLGram, reportez-vous à l'Appendix 13 : XMLGram reference.

Où insérer une règle de gestion ?

Ce que nous voulons faire ici, c'est interdire une mise à jour d'une ORGANIZATION dont le nom n'a pas été indiqué. En d'autres termes si le champ ORG_NAME est à une chaine vide, il faut refuser la mise à jour.

Pour intervenir dans le processus d'un XMLService, nous avons à disposition plusieurs événements.

Image non disponible
  • BeforeXMLService ;
  • BeforeXMLGram ;
  • AfterXMLGram ;
  • BeforeXSL ;
  • AfterXSL ;
  • AfterXMLService.

Nous voulons intervenir avant que la mise à jour soit effectuée, c'est-à-dire avant que le XMLGram soit exécuté. Nous allons donc ici utiliser l'événement BeforeXMLGram.

Comment insérer une règle de gestion ?

Il nous faut maintenant ouvrir le projet dans notre environnement VisualStudio.NET ou SharpDevelop. Allez dans le répertoire du projet et ouvrez le fichier du projet.

Image non disponible

Vous trouvez dans votre projet les fichiers MyDotNETProject.cs, MyDotNETProjectAdm.cs, MyDotNETProjectBM.cs, MyDotNETProjectRM.cs et MyDotNETProjectWM.cs qui correspondent aux modules de votre projet que vous avez dans XMLRAD. Le XMLService UpdateORGANIZATION sur lequel nous voulons implémenter le gestionnaire d'événement BeforeXMLGram se trouve dans le module MyDotNETProjectBM.cs. Ouvrez ce fichier.

Le module est un conteneur avec une partie conception dans VisualStudio.NET. Vous pouvez installer les composants dans la toolbox en ajoutant l'assembly XMLCLX.dll se trouvant C:\Program Files\Delos\Projects\MyDotNETProject\Bin\bin. Pour l'UpdateORGANIZATION nous allons utiliser un composant BusinessService. Vous trouverez dans les propriétés du composant les événements, dont le BeforeXMLGram. En double cliquant devant l'événement, vous générez le gestionnaire d'événement automatiquement.

Image non disponible

Si vous n'utilisez pas les composants ou si vous utilisez SharpDevelop, il faut déclarer une donnée membre, dans la classe du module, du nom du XMLService (UpdateORGANIZATION) et de type XMLComponent.BusinessService :

 
Sélectionnez
    public class TMyDotNETProjectBM : XMLModule.TXMLModule
    {
        private XMLComponent.BusinessService UpdateORGANIZATION;
        ...
    }

Puis, dans la méthode InitializeComponent, on l'instancie et on lui rattache un gestionnaire sur l'événement BeforeXMLGram. VisualStudio vous facilite la vie en vous proposant, après avoir tapé l'opérateur +=, de générer le gestionnaire en tapant deux fois sur Tab.

Image non disponible
 
Sélectionnez
    private void InitializeComponent()
    {
        UpdateORGANIZATION = new XMLComponent.BusinessService();
        UpdateORGANIZATION.BeforeXMLGram += new XMLComponent.TBeforeXMLGramEventHandler(UpdateORGANIZATION_BeforeXMLGram);
    }

Dans le gestionnaire d'événement, nous allons maintenant insérer notre règle de gestion. Le formulaire FormORGANIZATION a transmis avec un input type text le champ ORG_NAME. Il se trouve donc dans les paramètres HTTP POST. Les paramètres HTTP sont accessibles via l'objet Context. Il nous suffit donc de tester que la valeur du champ ORG_NAME dans le Context est à chaine vide. Si c'est le cas, nous levons une exception.

Pour plus d'informations sur l'objet Context, lisez l'article Le Context ou comment transmettre des valeurs d'une page à l'autre.

 
Sélectionnez
    private void UpdateORGANIZATION_BeforeXMLGram(IXMLGram XMLGram, XMLComponent.TBeforeXMLGramEventArgs e)
    {
        if (Context.GetValue("ORG_NAME") == "")
            throw new Exception("Nom d'organisation vide");
    }

Même s'il est possible d'utiliser les exceptions du langage, il est recommandé d'utiliser la méthode XMLRequest.RaiseError() disponible dans tous les langages et plateformes supportés par XMLRAD. Pour plus d'information sur les objets et méthodes, reportez-vous à l'Appendix 12 : Programmer's reference.

Vous pouvez maintenant compiler votre application et l'exécuter à partir de XMLRAD. Essayez de mettre à jour une organization avec un nom vide, vous devez obtenir un message d'erreur.

Image non disponible

Si vous avez besoin de déboguer votre code, reportez-vous à l'Appendix 7 : Debugging web application.

Conclusion

Nous avons vu dans cet article comment créer une application web .NET avec un substitut à ASP.NET basé sur la technologie XML/XSL. En nous connectant à une base MySQL, nous avons généré des écrans permettant de lister et de modifier des enregistrements. Nous avons aussi implémenté une règle de gestion en C#.

XMLRAD supporte aussi d'autres langages comme Delphi, Java, JScript et d'autres plateformes comme Win32 et Linux.

Liens

Vous avez aimé ce tutoriel ? Alors partagez-le en cliquant sur les boutons suivants : Viadeo Twitter Facebook Share on Google+   

Copyright © 2005 Jean-Philippe. Aucune reproduction, même partielle, ne peut être faite de ce site ni de l'ensemble de son contenu : textes, documents, images, etc. sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.