Forum des développeurs  

Le forum de référence en programmation et développement. Articles, cours et tutoriels du débutant au chef de projet et DBA confirmé.
Précédent   Forum des développeurs > Hardware, Systèmes et Logiciels > Microsoft Office > InfoPath

InfoPath Forum d'entraide sur InfoPath (concevoir des formulaires basés sur XML)

Réponse
 
Outils de la discussion
Vieux 05/05/2008, 17h39   #1 (permalink)
Membre du Club
 
Avatar de cocosql
 
Date d'inscription: avril 2008
Âge: 19
Messages: 83
Par défaut Erreur d'index ?

Au secours !!!

je viens de terminer la programmation de mes webservices en c# et quand je lance un apercu de formulaire, j'ai l'erreur suivante :

Code :
Impossible de créer ou d'initialiser le DataObject suivant*: GetServiceFromSalarié
Impossible d'exécuter la requête pour le DataObject suivant*: GetServiceFromSalarié
InfoPath ne peut pas exécuter la requête spécifiée.
La réponse SOAP indique qu'une erreur s'est produite sur le serveur*:
 
System.Web.Services.Protocols.SoapException: Le serveur n'a pas pu traiter la demande. ---> System.ArgumentOutOfRangeException: L'index était hors limites. Il ne doit pas être négatif et doit être inférieur à la taille de la collection.
Nom du paramètre*: index
   à System.Collections.ArrayList.get_Item(Int32 index)
   à Service.GetServiceFromSalarié(String Nom, String Prenom) dans c:\Documents and Settings\WebServicesSalariés\App_Code\Service.cs:ligne 192
   --- Fin de la trace de la pile d'exception interne ---
 

J'ai créé un webservice qui récupère le service dans lequel travaille le salarié en fonction de son nom. J'effectue une simple requête et je récupère le résultat dans un Arraylist (via un curseur) de la manière suivante :

Code :
SqlDataReader monCurseur = maCommande.ExecuteReader();
        ArrayList TabService = new ArrayList();
        while (monCurseur.Read())
        {
            TabService.Add(monCurseur.GetValue(0));
        }
        string Service = (string)TabService[0];
        maConnection.Close();
        return Service;

L'erreur proviendrait-elle du fait qu'au moment ou j'appelle le webservice, il y a une valeure nulle dans les paramètres et du coup, TabService[0] prend pour valeur -1 ?


Je ne vois vraiment pas d'ou peut venir cette erreur ni comment la résoudre,

aidez moi s'il vous plait
cocosql est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 06/05/2008, 01h29   #2 (permalink)
Expert Confirmé
 
Avatar de virgul
 
Date d'inscription: novembre 2004
Localisation: I Love Techno me voila!!!
Âge: 24
Messages: 1 603
Envoyer un message via MSN à virgul Envoyer un message via Skype™ à virgul
Par défaut

Salut,

Es-ce que tu arrives à atteindre ton webservice via Internet Explorer ou Firefox et vu que tes deux param sont des string tu peux l'interroger depuis la. Es-ce que ca marche?

Si ca marche es-ce que tu n'aurais pas changer le nom de un de tes paramètres et tu n'aurais pas mis a jour la web reference?

++

Thierry
__________________
"Life is short don't forget to inhale"
Mais: "Mieux vaux arriver en retard dans ce monde... qu'en avance à l'autre."

Microsoft Office InfoPath MVP - Mon blog
virgul est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 06/05/2008, 08h13   #3 (permalink)
Membre du Club
 
Avatar de cocosql
 
Date d'inscription: avril 2008
Âge: 19
Messages: 83
Par défaut

Le webservice fonctionne parfaitement en dehors d'infopath (sur IE)
Je lui passe effectivement les 2 paramètres via IE et il me retourne la bonne réponse.

Et je n'ai pas modifié le webservice entre le moment ou j'ai testé le webservice sur IE et le moment ou j'ai créé le formulaire et importé le webservice sur Infopath, c'est ca qui est bizarre
cocosql est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 06/05/2008, 08h56   #4 (permalink)
Membre du Club
 
Avatar de cocosql
 
Date d'inscription: avril 2008
Âge: 19
Messages: 83
Par défaut

J'ai essayé de changer de webservice, ce coup-ci je récupere le numéro de salarié et j'ai à présent une autre erreur
je vous la soumet donc :

Code :
Impossible d'exécuter la requête pour le DataObject suivant*: GetNumSalFromNom
InfoPath ne peut pas exécuter la requête spécifiée.
La réponse SOAP indique qu'une erreur s'est produite sur le serveur*:
 
System.Web.Services.Protocols.SoapException: Le serveur n'a pas pu traiter la demande. ---> System.InvalidCastException: Le cast spécifié n'est pas valide.
   à Service.GetNumSalFromNom(String Nom, String Prenom) dans c:\Documents and Settings\WebServicesSalariés\App_Code\Service.cs:ligne 133
   --- Fin de la trace de la pile d'exception interne ---
 

et voici la ligne 133

Code :
 
(ligne 133)Int32 NumSal = (Int32)maCommande.ExecuteScalar();
(ligne 134)maConnection.Close();
(ligne 135)return NumSal;
 


EDIT : ^^ j'ai oublié de préciser : je remplis les champs que je passe comme paramètres pour le web service à partir d'une listbox qui est la concaténation de deux champs dans la base ('Nom' + ' ' + '-' + ' ' + 'Prenom') (le '-' me sert de caractère de séparation pour les fonctions "sous-chaîne-avant" et "sous-chaîne-après" que j'utilise pour remplir les champs paramètres du webservice).

Dernière modification par cocosql ; 06/05/2008 à 09h57
cocosql est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 06/05/2008, 10h04   #5 (permalink)
Expert Confirmé
 
Avatar de virgul
 
Date d'inscription: novembre 2004
Localisation: I Love Techno me voila!!!
Âge: 24
Messages: 1 603
Envoyer un message via MSN à virgul Envoyer un message via Skype™ à virgul
Par défaut

Es-qu'elle n'a au moins pas changer??? car tu me dit que tu n'as qu'un param et dans le code j'en voit deux?

Si ca marche pas refait l'assistant de connexion (tu choisi ta bdd et tu clic sur modifier et tu refais le petit assistant).

Mais t'es sure que Infopath envoie bien ces valeurs? Si tu essaye de faire fichier enregistrer sous es-ce que les valeur sont juste?

Y a juste un truc que je capte pas comment ca se fait que via IE Ca marche et pas dnas Infopath alors que la ligne que tu me montre ne fait pas appelle au param d'entré du webservice?

Mais c'est toujours a l'ouveture qui fait l'erreur?
__________________
"Life is short don't forget to inhale"
Mais: "Mieux vaux arriver en retard dans ce monde... qu'en avance à l'autre."

Microsoft Office InfoPath MVP - Mon blog
virgul est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 06/05/2008, 10h14   #6 (permalink)
Membre du Club
 
Avatar de cocosql
 
Date d'inscription: avril 2008
Âge: 19
Messages: 83
Par défaut

Oui il y'a bien 2 paramètres, le nom et le prénom.
je les récupere de la lisbox, je les colle dans 2 champs textes, et je modifie la liaison pour signaler que ces 2 champs sont les paramètres du webservice.

Lorsque je passe un paramètre de valeur fixe, il m'affiche le message d'erreur, mais il effectue quand même la requete et renvoie la bonne réponse dans le champ texte de réponse.

L'erreur proviendrait-elle du code ? Se peut-il qu'il ne puisse interpreter certaines parties du code ?

je te donne une plus grande partie de mon code ici :
Code :
maConnection.Open();
        SqlCommand maCommande = maConnection.CreateCommand();
        maCommande.CommandType = CommandType.Text;
        maCommande.CommandText = "SELECT Max(IdSal) FROM T_SAL WHERE Nom = @Nom AND Prenom = @Prenom;";
        SqlParameter param = maCommande.CreateParameter();
        param.ParameterName = "@Nom";
        param.DbType = DbType.String;
        param.Value = Nom;
        maCommande.Parameters.Add(param);
        SqlParameter param2 = maCommande.CreateParameter();
        param2.ParameterName = "@Prenom";
        param2.DbType = DbType.String;
        param2.Value = Prenom;
        maCommande.Parameters.Add(param2);
        SqlDataReader monCurseur = maCommande.ExecuteReader();
        ArrayList TabNumSal = new ArrayList();
        while (monCurseur.Read())
        {
            TabNumSal.Add(monCurseur.GetValue(0));
        }
        Int32 NumSal = (Int32)TabNumSal[0];
        maConnection.Close();
        return NumSal;
cocosql est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 06/05/2008, 10h20   #7 (permalink)
Expert Confirmé
 
Avatar de virgul
 
Date d'inscription: novembre 2004
Localisation: I Love Techno me voila!!!
Âge: 24
Messages: 1 603
Envoyer un message via MSN à virgul Envoyer un message via Skype™ à virgul
Par défaut

Citation:
Lorsque je passe un paramètre de valeur fixe, il m'affiche le message d'erreur, mais il effectue quand même la requete et renvoie la bonne réponse dans le champ texte de réponse.
Ca je comprend pas désolé...

Désolé mais moi et les connexions SQL ca fait deux et oui j'ai un collègue qui gère ca

Si dans IE ca marche c'est que forcément tu passe mal tes param dans ton webservice quand tu utilise Infopath.

Donc essaye de faire afficher dans un messagebox les valeurs de ton query avant de le faire et regarde si c'est correct soit via les régle soit via le code:

Code :
thisXDocument.UI.Alert("ton string");
__________________
"Life is short don't forget to inhale"
Mais: "Mieux vaux arriver en retard dans ce monde... qu'en avance à l'autre."

Microsoft Office InfoPath MVP - Mon blog
virgul est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 06/05/2008, 10h27   #8 (permalink)
Membre du Club
 
Avatar de cocosql
 
Date d'inscription: avril 2008
Âge: 19
Messages: 83
Par défaut

Citation:
Lorsque je passe un paramètre de valeur fixe, il m'affiche le message d'erreur, mais il effectue quand même la requete et renvoie la bonne réponse dans le champ texte de réponse.

C'est quand je passe une valeur au paramètre au moment ou j'ajoute une connexion de données, je coche webservice, je donne le lien, je choisis le bon webservice, et la il m'affiche la liste des paramètres. Et ben ici quand je donne une valeur constante aux paramètres, le webservice m'affiche un message d'erreur mais renvoie quand même la réponse. Ce qui montre que c'est bien au niveau du passage de paramètre qu'il y'a un problème, mais lequel ? Je passe tout comme il faut, je ne comprends pas pourquoi ca bug, et surtout qu'il y'ait un message d'erreur différent en fonction du webservice, car les paramètres sont exactement les même pour tous les webservices.


Code :
thisXDocument.UI.Alert("ton string");
ca je le met ou et à quel moment ?


Merci de ton aide
cocosql est déconnecté   Envoyer un message privé Réponse avec citation
Réponse

Précédent   Forum des développeurs > Hardware, Systèmes et Logiciels > Microsoft Office > InfoPath

 
Offres d' emploi informatique sur Lesjeudis.com


Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are non
Pingbacks are non
Refbacks are non
Navigation rapide