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 :

libelles et entêtes de colonnes dynamiques


Sujet :

XMLRAD

  1. #1
    Membre à l'essai
    Inscrit en
    Juin 2003
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 31
    Points : 12
    Points
    12
    Par défaut libelles et entêtes de colonnes dynamiques
    Bonjour,

    Dans XMLRad 8, je souhaiterais modidifer dynamiquement, au moment de l'affichage (dans la dll en Delphi) les libellé des champs de formulaires et des entetes de colonnes.
    J'ai vu que ca se passait dans un fichier "locales". peut-on y accéder dans la dll ? Si oui connaissez-vous la syntaxe pour modifier un libellé?

    merci d'avance.

  2. #2
    Membre actif Avatar de Jeweller
    Inscrit en
    Août 2003
    Messages
    357
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 357
    Points : 278
    Points
    278
    Par défaut
    Plusieurs solutions s'offrent à toi, en fonction de ce que tu veux faire exactement.
    Pour commencer le principe des locales est justement de ne pas avoir à modifier un libellé par code au moment de l'execution. Il te suffit de définir les libellés de ta colonne dans chaque langue et dans ton xsl de référencer la bonne entrée, par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <th><xsl:value-of select="/document/Locales/libcolST_COD"/></th>
    Le framework fournira automatiquement la grappe XML avec les locales de la langue de l'utilisateur courant pour que la bonne tradution y figure.

    Sinon effectivement tu peux aussi depuis delphi aller lire/modifier/ajouter des valeurs dans la grappe. Mais autant faire le moins de code Delphi possible et utiliser les instructions du XMLGRAM (genre un assign) pour faire ce genre de chose, mais tout dépend. Ensuite dans ta feuille xsl tu référence simplement l'entrée que tu es allé modifier.

    Sous Delphi ca donnerait un truc comme ca (fait un tour du coter des XMLCursor: appendChild, getvalue, setvalue, etc...):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    OnAfterXMLGram:
     OutPutDoc.setValue('/document/LIBELLE_COLONNES/ST_COD',sthg)
    Mais je prefere en général passer par le context et renseigner une entrée ajouter à la grappe par un assign:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    OnBeforeXMLGRAM
     Context.SetValue('libcolST_COD',sthg)
    Biensur, tu pourrais aussi directement modifier la locale dans la grappe, mais la je ne vois plus trop l'interet

    Michael

  3. #3
    Membre à l'essai
    Inscrit en
    Juin 2003
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 31
    Points : 12
    Points
    12
    Par défaut
    Ok merci, en fait mes libellés me proviennent d'un fichier bd et ils peuvent être modifiés par l'utilisateur. Par ailleurs, chaque champ dispose d'un libellé court (listes) et d'un libellé long. Donc, comme toutes mes feuilles xsl référencent en entête de colonne des éléments des "locales" (Nom de Champ + "Header" si entête de colonne), il me suffirait d'aller modifier ces valeurs par le code au moment où elles sont appellées.

    je devrais pouvoir m'en sortir avec tes indications.

    merci encore.

  4. #4
    Membre à l'essai
    Inscrit en
    Juin 2003
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 31
    Points : 12
    Points
    12
    Par défaut
    Bon mes questions sont peut être triviales mais je suis vraiment bloqué :

    J'ai effectivement besoin de me balader dans la grappe pour modifier les locales (entre autre). Apparemment cela passe par un objet XMLCursor.
    Dois-je l'instancier? Comment puis-je le faire pointer sur la bonne grappe xml ? Je ne vois rien auquel me raccrocher dans les paramètres de l'évènement OnAfterXMLGram...

    Help!....

  5. #5
    Membre expérimenté

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

    Informations forums :
    Inscription : Mars 2002
    Messages : 520
    Points : 1 446
    Points
    1 446
    Par défaut
    Les Locales sont ajoutées juste après le process du XMLGram, donc elle ne sont pas encore accessible dans le AfterXMLGram.
    Il faut alors implémenter le gestionnaire BeforeXSL dans lequel tu as accès à l'objet Output représentant la grappe XML qui va servir à la transformation XSL.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    procedure TYakaWM.FormSTAGEBeforeXSL(XMLService: IXMLService;
      e: TBeforeXSLEventArgs);
    var
     p, mot: IXMLCursor;
     i: integer;
    begin
      p := e.OutputDoc.Select('Locales');
      mot := p.Select('Submit');
      i := e.Count; // nb d'éléments locales
    end;
    Après tu manipules p avec les méthodes de XMLCursor.
    Dans l'ex. : mot désigne la locale Submit (cf output XML)<Locales><Submit>tralala</Submit>...</Locales>

    Mais je dirais comme Michaël, je vois pas trop d'intérêt de modifier les locales. Autant ajouter des nouvelles grappes représentant les données issues de ta base. Et y faire référence dans ton xsl à la place de faire référence aux locales.

    Sylvain
    .NET / ASP.NET MVC / Delphi / XMLRAD / XSL / Technos Web

    Mon Blog : http://blog.developpez.com/index.php?blog=89
    Mes Articles : http://sjames.developpez.com/
    Rubrique XMLRAD: http://xmlrad.developpez.com

  6. #6
    Membre à l'essai
    Inscrit en
    Juin 2003
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 31
    Points : 12
    Points
    12
    Par défaut
    Bon j'espère que c'est la dernière fois que je vous dérange. J'ai fait comme vous avez suggéré (ajouté une nouvelle grappe). Tous mes libellés (il y en a 400!) sont ajoutés comme suit :

    procedure TMain.FormSearchFPRDBASEBeforeXSL(XMLService: IXMLService;
    e: TBeforeXSLEventArgs);
    var
    p: IXMLCursor;
    begin
    p := e.OutputDoc.Select('Locales'); /*j'ai choisi d'insérer ma grappe après les locales
    p.InsertAfter('FDD','');
    Try
    If not QrDD.Active then QrDD.Open;
    p.InsertFirstChild(QrDD.GetFieldAsString('FRDTAI'),QrDD.GetFieldAsString('LBL')); /*nomchamp;libellé
    While Not QrDD.EOF do
    begin
    p.InsertAfter(QrDD.GetFieldAsString('FRDTAI'),QrDD.GetFieldAsString('LBL'));
    QrDD.Next;
    end;
    finally
    QrDD.close;
    end;
    end;

    J'ai deux donc ultimes questions :
    1/ mon code ne marche pas ,tous mes libellés sont à blanc dans ma page html. Pourtant ils pointent bien sur document/FDD/XXX.

    2/Dans la mesure ou j'ai une grappe de 400 éléments à rajouter à mon xml (il serait trop fastidieux de sélectionner uniquement les champs concernés par une liste ou un formulaire donné), serait-il possible de stocker cette grappe dans une var globale de la dll et de l'affecter en une instruction à chaque XMLService (dans beforeXSL) qui en a besoin?

    Merci infiniment pour vos réponses.

  7. #7
    Membre actif Avatar de Jeweller
    Inscrit en
    Août 2003
    Messages
    357
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 357
    Points : 278
    Points
    278
    Par défaut
    Bon j'espère que c'est la dernière fois que je vous dérange
    C'est à ca que sert in forum d'entre-aide, ne te gene pas!

    Je n'ai pas regardé ton code, mais il suffit que tu te positionne mal au départ pour que cela ne fonctionne pas. Consulte la grappe XML avant la génération pour bine comprendre ce qu'il se passe, ca va beaucoup t'aider! Pour cela il faut rajouter un paramètre dans ta requette HTTP: XMLC_OutPutParam=XML

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    http://localhost/myAppBin/myApp.dll/Action?p=p1&p2=p2&XMLC_Outputformat=XML


    Si tes 400 lignes ne changent pas, tu peux les placer dans un fichier XML et les charger avec une instruction FILE dans ta grappe. Mais attention, 400 lignes dans une grappe ca fait beaucoup juste pour un label!! Tu devras avoir un gros serveur si tu veux monter en charge. Tu devrais sélectionner juste ce que tu as besoin et renseigner un paramètre. En principe pas de code Delphi pour faire ca! Inspire toi des démos, elles sont pas mal.

    Bon courage
    Michael

  8. #8
    Membre à l'essai
    Inscrit en
    Juin 2003
    Messages
    31
    Détails du profil
    Informations forums :
    Inscription : Juin 2003
    Messages : 31
    Points : 12
    Points
    12
    Par défaut
    Merci bcp. Ca marche nickel.

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

Discussions similaires

  1. Template dynamique pour entête de colonne
    Par Deesmon dans le forum Windows Presentation Foundation
    Réponses: 1
    Dernier message: 08/02/2013, 12h30
  2. Réponses: 2
    Dernier message: 15/05/2007, 10h34
  3. Libellés de colonnes Dynamiques
    Par talys dans le forum Langage SQL
    Réponses: 4
    Dernier message: 03/05/2007, 12h59
  4. Colonnes dynamiques dans Rave report
    Par omarkrachni dans le forum Rave
    Réponses: 1
    Dernier message: 10/05/2005, 18h33
  5. DBGrid - changer le noms des entête de colonnes ?
    Par safab dans le forum Bases de données
    Réponses: 2
    Dernier message: 12/11/2004, 16h49

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