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

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

XMLRAD Discussion :

Interception des Locales


Sujet :

XMLRAD

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de Jeweller
    Inscrit en
    Août 2003
    Messages
    357
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 357
    Par défaut Interception des Locales
    Bonjour,
    J'aimerai mettre en place une fonctionnalité de "terminologie" sur une application xmlrad2005R2 (Delphi7).
    Mon idée est d'intercepter (par un moyen ou un autre) l'insertion des Locales dans la grappe XML et de remplacer une certaine syntaxe (à définir, inspirée des templates {$....} ) dans les traductions avant (ou apres) que celles ci ne soient disponibles pour la parse XSL.
    Cela m'évite de repasser dans tous mes écrans XSL pour modifier tous mes textes et pointer vers une autre grappe XML. L'ajout d'une nouvelle langue ne répond pas à mes besoins

    Je n'aime (vraiment) pas modifier les sources du framework, mais quelle serait selon vous la meilleure solution ? Si je pouvais écrire un évènement qui s'executerait juste apres la génération des locales ce serait parfait. J'ai pensé rajouter donc qqch dans le xmlcollection et d'en faire l'appel au niveau du AddLocales (xmlservice)... mais ce n'est pas si simple au final... Peut etre qqn à déjà bossé sur ce thème ?

    Michael

  2. #2
    Membre émérite

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    520
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 520
    Par défaut
    Je ne comprends pas très bien ce que tu veux faire exactement avec ce système de "terminologie" et en quoi les locales multi langues ne conviennent pas ?
    Tu pourrais peut-être implémenter les BeforeXSL des XMLServices concernés, le code remplaçant les locales dans l'output.
    On ne peut pas prendre la main avant, à priori, lors du AddLocales.

  3. #3
    Membre éclairé Avatar de Jeweller
    Inscrit en
    Août 2003
    Messages
    357
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 357
    Par défaut
    L'idée c'est de donner la possibilité aux clients de paramétrer son logiciel de façon à ce que certains termes clés correspondent à ceux qu'ils emploient dans leurs différents process. Exemple le mot "equipement" ne veut pas forcément dire la même chose pour tout les clients, un dira plutot "machine" l'autre "appareil" et le troisieme "unité de production"... bref... Et cela pour chaque terme clé (il y a en une petite 20aines).
    Dans mes locales j'aimerai mettre "Voulez vous supprimer cet {$EQUIP}" et remplacer le terme {$EQUIP} par le mot ou la phrase défini par le client (c'est stocké dans la BDD). Une langue supplémentaire obligerait l'intégrateur à modifier toutes les phrases et le gros problème ensuite, c'est comment gérer les mises à jours!!!
    Ensuite j'ai plusieurs centaines de xmlservice, donc si je dois faire cela au niveau d'un évènement pour chacun c'est aussi du boulot.

    En fait je peux peut etre créer un descendant du WebForm en surchargeant le beforeXSL... ca c'est pas bete par contre!

  4. #4
    Membre émérite

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    520
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 520
    Par défaut
    D'accord :-)
    Si tu crées un descendant de webform, ça va se compliquer pour les migrations vers les versions plus récentes du framework.
    D'autre part, je ne pense pas que tu puisses centraliser BeforeXSL pour tous les XMLServices de l'appli (au niveau de XMLCollection).
    Il faudrait créer un hook sur tous les XMLServices concernés... (oui y'en a quand même beaucoup !)
    Ou bien tant pis, modifier le framework...

  5. #5
    RDM
    RDM est déconnecté
    Membre Expert

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    1 424
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 424
    Par défaut
    c'est pas simple ton histoire...
    par contre il est clair que de créer un descendant de WebForm n'est pas pas la bonne solution a long terme (XMLComponent va dégager dans la 2008)
    En fait je pense qu'il te faut un événement equivletn a OnExecuteXMLService mais après l'execution = modif du framework.
    Sinon AfterXMLService ou BeforeXSL sur tous tes XMLServices

  6. #6
    Membre éclairé Avatar de Jeweller
    Inscrit en
    Août 2003
    Messages
    357
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 357
    Par défaut
    Oui, c'est pas simple! Voici la solution pour la quelle je suis en train d'obter... je n'ai pas termine mais ca se passe bien pour le moment:

    Je suis par contre obligé de modifier les sources du framework:
    XMLService.pas, 780, dans Addlocales, juste avant l'ajout des locales au document racine, j'invoque un évènement que j'ai rajouté sur le TXmlcollection (ca m'évite me modifier aussi l'interface!):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if Assigned(TXMLCollection(XMLCollection).OnParseLocales) 
    then TXMLCollection(XMLCollection).OnParseLocales(XMLCollection,Context,LanguageLocales);
    J'affecte dynamiquement mon évènement à la collection dans le onInitialize.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    xmlsession.TXMLCollection(XMLCollection).OnParseLocales := XMLCollectionParseLocales;
    Ensuite lors de l'invocation, j'execute un xmlservice qui extrait les données de ma base (avec une instruction cache biensur) et je m'en sert pour traiter et remplacer les locales...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    procedure TMOS_Security.XMLCollectionParseLocales(XMLCollection: IXMLCollection; Context:IXMLContext; Locales: IXMLCursor);
    var 
        CurLoc, CurVar,Input, OutPut:IXMLCursor; 
    begin
       if Locales = nil then exit;
       try
         CurVar := XMLCollection.Execute2('GetVar',Input,OutPut);
         CurLoc := Locales.select('/Locales/*');
         while not CurLoc.EOF do
         begin
             //traitement des locales
             CurLoc.Next;
         end;
       except
         //comment avertir de l'erreur sans bloquer?
       end;
    end;
    Peut etre que je suis à coté de la plaque, mais je ne vais pas tarder à le savoir! J'espere juste ne pas créer de choses bizzard qui ne fonctionneront que pour un pool et pas un autre, etc...
    Michael

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Interception des erreurs sur un dbnavigator
    Par Jeepy dans le forum Bases de données
    Réponses: 1
    Dernier message: 16/05/2005, 16h59
  2. aide à propos des locale
    Par t_om84 dans le forum Général Python
    Réponses: 4
    Dernier message: 01/04/2005, 16h46
  3. Interception des messages CLAVIER
    Par dede92 dans le forum Windows
    Réponses: 10
    Dernier message: 03/03/2005, 17h47
  4. Interception des commandes in et out
    Par KDD dans le forum x86 16-bits
    Réponses: 13
    Dernier message: 18/12/2002, 16h55
  5. [VB6] Interception des évènement Copier/Couper/Coller
    Par youtch dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 18/10/2002, 17h09

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo