Boucler sur enregistrements d'un tab extensible - InfoPath Dev
in

InfoPath Dev

Boucler sur enregistrements d'un tab extensible

Last post 11-14-2006 07:30 AM by Coita Thierry. 6 replies.
Page 1 of 1 (7 items)
Sort Posts: Previous Next
  • 11-06-2006 06:27 AM

    Boucler sur enregistrements d'un tab extensible

    Bonjour,

    Voici ce que je cherche à réaliser :



    Le combobox au dessus à gauche a pour source une table "client".
    Pour enregistrer le contenu de ce champ, j'utilise un webservice qui écrit dans ma base de données SQL Server (code ci dessous). Ok.


    [WebMethod]
    public void AddAnnonces(int IDClient)
    {
    //---Définition de la procédure stockée---//
    SqlCommand Insert = new SqlCommand("INSERTION",this.Connexion);
    Insert.CommandType=CommandType.StoredProcedure;

    //---Définition des paramètres---//
    Insert.Parameters.Add("@IDClient",SqlDbType.Int);

    //---Attribution des valeurs---//
    Insert.Parameters["@IDClient"].Value=IDClient;


    this.Connexion.Open();
    Insert.ExecuteNonQuery();
    this.Connexion.Close();

    return;
    }



    En dessous, par contre, je bloque. Je souhaiterais enregistrer mes différentes lignes dans ma base de données. Je ne vois pas comment procéder. Le nombre de lignes étant variable (tableau extensible) je ne peux utiliser la même méthode (?). Je suppose que dans mon code source, je vais boucler sur le tableau, extraire 2 par 2 mes résultats, appeler un WebService qui pointera sur ma base de données qui lui sera appelé un nombre de fois égal au nombre de lignes dans mon tableau...

    Est-ce que quelqu'un pourrait m'expliquer comment faire pour :
    - Boucler sur un tableau extensible afin de récupérer les différentes valeurs des champs.
    - Boucler l'envoi de paramètres à un WebService...
  • 11-06-2006 01:31 PM In reply to

    Re: Boucler sur enregistrements d'un tab extensible

    Si tu veux insérer dans ta bdd tous tes enregistrement vaux mieux tous les envoyé d'un coup au ws et pas un à un.

    Tu peux par exemple envoyé des xmldocument, un tableau de int ou des string en forme de xml (ou encore envoyé les IXMLDOMNodeList de Infopath mais faut référencé la dll de Infopath coté webservices)

    dans ton code il te suffit de faire un selectsinglenode de ton tableau et de l'envoyé ou de faire un selcetnodes pour construire ton tableau de int

    IXMLDOMNodelist IdList = thisXDocument.DOM.selectsingleNode("/Root/tableau-repetitif");
    AddAnnonces.Service WsAddAnnonces = new AddAnnonces.Services()
    int Result = WsAddAnnonces.Service(IdList.xml);//envoie en string
    if(Result==1)
    ThisXdocument.ui.alert("ok");
    else
    ThisXdocument.ui.alert("Problème");

    coté WS ca donnera un truc du genre:
    [WebMethod]
    public int AddAnnonces(string IDList)// ou int[]IDList ou XmlDocument comme tu veux
    {
    //---Définition de la procédure stockée---//
    SqlCommand Insert = new SqlCommand("INSERTION",this.Connexion);
    Insert.CommandType=CommandType.StoredProcedure;
    // Fait une boucle sur tes noeuds ou sur tes éléments
    for(int i ; i<IDList.Count ;i++)
    {
    //---Définition des paramètres---//
    Insert.Parameters.Add("@IDClient",SqlDbType.Int);
    //---Attribution des valeurs---//
    Insert.Parameters["@IDClient"].Value=IDList;
    }
    this.Connexion.Open();
    Insert.ExecuteNonQuery();
    this.Connexion.Close();
    //Retour de la valeur 1 si tous c'est passé correctement
    return 1;
    }

    Pour ce qui est de la partie enregistrement dans SQL je connais pas ou peux, alors je peux pas dire si tu peux faire mieux que ca mais sa devrait marché.

    Le but est de faire une appel avec tout les enregistrement a ajouté et non pas faire un appel pour chaque enregistrement(trop couteux en temps de transfert).
    Infopath 2007, Langage: C#2.0 (Modèle Objet 2003)
    merci de lire ceci
  • 11-07-2006 03:04 AM In reply to

    Re: Boucler sur enregistrements d'un tab extensible

    Merci de ta réponse.

    Le WebService je pense que c'est ok.
    Juste un petit problème en C# sous VS2003 pour mon projet InfoPath.


    [InfoPathEventHandler(MatchPath="CTRL4_5", EventType=InfoPathEventType.OnClick)]
    public void CTRL4_5_OnClick(DocActionEvent e)
    {
    // Write your code here.
    IXMLDOMNodelist IdList = thisXDocument.DOM.selectsingleNode("/Root/groupe1");
    AddAnnonces2.Service WsAddAnnonces = new AddAnnonces2.Services();
    WsAddAnnonces.Service(IdList.xml);//envoie en string
    }



    IXMLDOMNodelist n'est pas reconnu, un using manquant ? J'ai (rapidement je l'avoue) regardé dans msdn, je n'ai rien vu comme import à effectuer.

    ("/Root/groupe1") correspond bien au nom donné au tableau extensible je suppose...

    AddAnnonces2.Service : Le nom de ma connexion sortante vers mon WS ? J'ai essayé de lui donner le même nom, et il ne compile pas...

    IdList.xml : Comment est ce que je connais le nom du fichier XML à envoyer ?

    Désolé parfois pour les questions un peu bêbête, mais je débute et m'efforce de bien comprendre tous les fonctionnements internes. Merci.
  • 11-07-2006 03:16 AM In reply to

    Re: Boucler sur enregistrements d'un tab extensible

    ...




    IXMLDOMNodeList IdList = thisXDocument.DOM.selectNodes("/Root/groupe1");
    AddAnnonces2.Service WsAddAnnonces = new AddAnnonces2.Services();
    WsAddAnnonces.Service(IdList.xml);//envoie en string



    IXMLDOMNodeList... simplement sensible à la casse désolé.
    Par contre j'ai du modifier le selectSingleNodes en selectNodes... Sinon il ne me compile pas.

    Le reste des erreurs n'est pas résolu, j'attends ta réaction à mes questions précédentes.

    Merci.
  • 11-07-2006 04:56 AM In reply to

    Re: Boucler sur enregistrements d'un tab extensible

    ok c'est vrai j'ai fait une faute c'est bien singlenode et pas nodes...

    pour ce qui est de la liaison avec ton WS as-tu fait une webreference?

    si oui c'est très simple tu déclare le même nom que tu as données pour faire la webreference .Service si tu n'a pas changé le namespace de ton WS.

    AddAnnonces2.Service WsAddAnnonces = new AddAnnonces2.Service();


    Ce qui te donne la première ligne et pour la seconde ben tu appelles ta méthod (AddAnnonces) c'est à dire:

    WsAddAnnonces.AddAnnonces(IdList.xml);//envoie en string 


    et en parenthèse tu devras données les paramètre que tu as donnés dans ton WS!

    ++

    Thierry
    Infopath 2007, Langage: C#2.0 (Modèle Objet 2003)
    merci de lire ceci
  • 11-07-2006 05:55 AM In reply to

    Re: Boucler sur enregistrements d'un tab extensible

    Je ne vois pas ce que tu veux dire par Webreference...
    J'ai simplement créé une connexion sortante (outils, connexion de données, ajouter) vers un webservice... Cette connexion se nomme AddAnnonce 2 tout comme ma fonction dans mon WebService. Le namespace de mon webservice est WebServiceT mais cela ne fonctionne pas non plus si je l'indique dans le code... Il doit y avoir un détail qui m'échappe.

    Ensuite je ne vois pas où je récupère le nom du fichier *.xml que mon formulaire va générer.

  • 11-14-2006 07:30 AM In reply to

    Re: Boucler sur enregistrements d'un tab extensible

    Salut,

    Ouais ok je comprend moi quand je fait des sauvegardes je n'utilise pas Infopath mais le code behind pour faire mon appel.

    Pour ajouter une webreference tu va dans l'exploratuer de solution en haut à droite dans ton projet tu as un répertoire Reference clic droit dessus et ajoute une webreference indique ou se trouve le ws http://...) et donne lui un nom dans mon exemple je l'ai appeleé AddAnnonces2.

    Pour la suite tu devrais pouvoir te débrouiller!

    ++

    Thierry
    Infopath 2007, Langage: C#2.0 (Modèle Objet 2003)
    merci de lire ceci
Page 1 of 1 (7 items)
Copyright © 2003-2019 Qdabra Software. All rights reserved.
View our Terms of Use.