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

InfoPath .NET Discussion :

[INFOPATH 2003] Cloner Section: Pblme replacechild


Sujet :

InfoPath .NET

  1. #1
    Membre éprouvé
    Homme Profil pro
    Référent technique
    Inscrit en
    Juillet 2007
    Messages
    834
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Référent technique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 834
    Points : 1 219
    Points
    1 219
    Par défaut [INFOPATH 2003] Cloner Section: Pblme replacechild
    Bonjour,
    Par rapport à mon problème précédent (cf Reinitialiser formulaire), j'ai décidé de m'attaquer à l'initialisation de certaines de mes sections et je suis tombé sur un code de la forme suivante:


    IXMLDOMDocument2 NewForm = (IXMLDOMDocument2thisXDocument.CreateDOM();

    //Cette ligne ci-dessous est importante si xsi:nil est déclaré dans le schéma elle permet d'éviter
    //la validation par le schéma lors du chargement du xml.
    NewForm.validateOnParse = false;

    //Chargement du fichier xml template.xml qui est utilisé par Infopath lors de la création du formulaire.
    NewForm.load("template.xml");

    //Remplacement des anciens noeud en oubliant pas de les cloner
    thisXDocument.DOM.replaceChild(NewForm.documentElement.selectSingleNode("//my:Sec_Test").cloneNode(true), thisXDocument.DOM.documentElement.selectSingleNode("//my:Sec_Test"))


    Dans ce cas la, je suis sur la section Se_Test.
    Mais le replacechild ne fonctionne pas.
    Mais il ne me trouve le namespace "my" alors qu'il est déclaré plus haut (entre le namespace et ma classe).


    Aidez moi svp!
    Merci.
    Rémi MATAYRON
    N'hésitez pas à visiter mon blog dédié à InfoPath et SharePoint : http://rmatayron.blogspot.com/

    Pour plus de visibilité sur le forum, marquer la question en [Résolu] lorsque la réponse fournie vous convient.

  2. #2
    Membre expérimenté
    Avatar de virgul
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 625
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 625
    Points : 1 666
    Points
    1 666
    Par défaut
    Salut,

    Pour faire un replace child il faut deja te placer correctement sur ton document avant de donner l'orde donc mon je verrais plutot ceci:

    thisXDocument.DOM.documentElement.replaceChild(NewForm.documentElement.selectSingleNode("my:Sec_Test").cloneNode(true), thisXDocument.DOM.documentElement.selectSingleNode("my:Sec_Test"));

    // sert à séléctionner tout les noeuds my:Sec_Test alors si tu fait un selectsinglenode (séléctionner un noeud) ben sa sert à rien...

    on est d'accord my:Sec_Test est l'élément Root de ton xml?
    "Life is short don't forget to inhale"
    Mais: "Mieux vaux arriver en retard dans ce monde... qu'en avance à l'autre."

  3. #3
    Membre éprouvé
    Homme Profil pro
    Référent technique
    Inscrit en
    Juillet 2007
    Messages
    834
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Référent technique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 834
    Points : 1 219
    Points
    1 219
    Par défaut
    Ah merci pour le tuyau.

    Non Sec_Test n'est pas le root de mon arborescence XML.
    Elle se présente de la façon suivante:

    <my:meschamps>
    -- <my:champ1>
    -- <my:champ2>
    ...
    -- <my:Sec_Test>
    ---- <my:champssec1></my:champssec1>
    ---- <my:champssec2></my:champssec2>
    ---- ...
    -- </my:Sec_Test>


    -- </my:champ8>
    -- </my:champ9>
    -- ...
    </my:meschamps>


    Je ne veux changer (faire un replacechild à priori) que la partie en rouge...
    Qui peut m'aider, c'est vraiment urgent en plus...

    Merci d'avance
    Rémi MATAYRON
    N'hésitez pas à visiter mon blog dédié à InfoPath et SharePoint : http://rmatayron.blogspot.com/

    Pour plus de visibilité sur le forum, marquer la question en [Résolu] lorsque la réponse fournie vous convient.

  4. #4
    Membre expérimenté
    Avatar de virgul
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 625
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 625
    Points : 1 666
    Points
    1 666
    Par défaut
    Citation Envoyé par billout rm
    Qui peut m'aider, c'est vraiment urgent en plus...
    Il n'y pas de chose urgente, il n'y a que des chose en retard

    Blague mise à part, comme je te le disait faut que tu te positionne dans le parent de ce que tu veux remplacer et après tu dis replacechild donc:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    thisXDocument.DOM.selectSingleNode("/my:meschamps/my:champ1/my:champ2").replaceChild(NewForm.documentElement.selectSingleNode("my:Sec_Test").cloneNode(true), thisXDocument.DOM.documentElement.selectSingleNode("/my:meschamps/my:champ1/my:champ2/my:Sec_Test"));
    "Life is short don't forget to inhale"
    Mais: "Mieux vaux arriver en retard dans ce monde... qu'en avance à l'autre."

  5. #5
    Membre éprouvé
    Homme Profil pro
    Référent technique
    Inscrit en
    Juillet 2007
    Messages
    834
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Référent technique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 834
    Points : 1 219
    Points
    1 219
    Par défaut
    Merci pour l'exemple.

    Je ne sais pas si tu as vu mais champ1, champ2 et Sec_Test sont au même niveau dans l'arborescence (et les champs dans Sect_T sont au niveau au dessous bien-sûr).
    Je vais donc essayer d'adapter ton code.

    Le truc c'est que cela ne répond pas à mon problème de namespace "my"...
    Rémi MATAYRON
    N'hésitez pas à visiter mon blog dédié à InfoPath et SharePoint : http://rmatayron.blogspot.com/

    Pour plus de visibilité sur le forum, marquer la question en [Résolu] lorsque la réponse fournie vous convient.

  6. #6
    Membre expérimenté
    Avatar de virgul
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 625
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 625
    Points : 1 666
    Points
    1 666
    Par défaut
    Citation Envoyé par billout rm
    Le truc c'est que cela ne répond pas à mon problème de namespace "my"...
    tu peux l'ajouter via la propriétés add de la méthode namespaces de l'object IXMLDOMDocument2 .
    "Life is short don't forget to inhale"
    Mais: "Mieux vaux arriver en retard dans ce monde... qu'en avance à l'autre."

  7. #7
    Membre éprouvé
    Homme Profil pro
    Référent technique
    Inscrit en
    Juillet 2007
    Messages
    834
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Référent technique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 834
    Points : 1 219
    Points
    1 219
    Par défaut
    C'est bon en fait j'ai trouvé l'erreur.
    Pour info, j'ai utilisé la méthode suivante:

    IXMLDOMDocument2 NewForm = (IXMLDOMDocument2)thisXDocument.CreateDOM();
    //Cette ligne ci-dessous est importante si xsi:nil est déclaré dans le schéma elle permet d'éviter
    //la validation par le schéma lors du chargement du xml.
    NewForm.validateOnParse = false;
    //Chargement du fichier xml template.xml qui est utilisé par Infopath lors de la création du formulaire.
    NewForm.load("template.xml");
    IXMLDOMNode referenceNode = thisXDocument.DOM.selectSingleNode("//my:mesChamps");
    ((IXMLDOMDocument2)NewForm).setProperty("SelectionNamespaces","xmlns:my='" + referenceNode.namespaceURI + "'");



    Mais bon toujours ce problème de lenteur!!!
    Tout ça pour pas grand chose... Je vais essayer d'optimiser
    Rémi MATAYRON
    N'hésitez pas à visiter mon blog dédié à InfoPath et SharePoint : http://rmatayron.blogspot.com/

    Pour plus de visibilité sur le forum, marquer la question en [Résolu] lorsque la réponse fournie vous convient.

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 16/08/2007, 16h44
  2. [InfoPath 2003] Additioner des zones d'expression
    Par solveig dans le forum InfoPath
    Réponses: 7
    Dernier message: 05/06/2007, 15h59
  3. Sql Report 2005 et InfoPath 2003
    Par diaboloche dans le forum InfoPath
    Réponses: 2
    Dernier message: 29/05/2007, 10h36
  4. Infopath 2003 et Visual Studio 2005
    Par Philippe Vialatte dans le forum InfoPath
    Réponses: 2
    Dernier message: 25/05/2007, 16h35
  5. [InfoPath 2003] Erreur suspecte
    Par diaboloche dans le forum InfoPath
    Réponses: 6
    Dernier message: 04/05/2007, 13h35

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