# Dotnet > Gnral Dotnet > Dveloppement Office System > InfoPath >  Envoi de donnes dans un formulaire InfoPath avec PostgreSQL

## cnguyen

Bonjour,

Dbutant en InfoPath, j'ai quelques problmes pour voir la manire de communiquer avec InfoPath.

Pour explication, je dsire cr un formulaire InfoPath via Visual Studio 2005 et la base de donnes PostgreSQL.

J'aimerai savoir comment je pourrais faire pour, par exemple, remplir une liste droulante du formulaire via des donnes de la BDD PostgreSQL.

Et de quelle maniere, envoyer les donnes du formulaire dans la base de donnes ?

Merci d'avance

----------


## virgul

Salut,

D'aprs ce que je sais de l'intgration des base de donnes dans Infopath tu ne peux que li une bdd SQL ou ACCESS directement donc ca ne va malheureusement pas march comme ca avec PostgreSQL...

Il faut donc que tu passes par des Services Web (Webservices) afin qu'il transforme ton rsultat de ta query en xml et aprs comme ca tu pourras interroger ta bdd.

Utiliser les Webservices a un grand avantage ce que tu n'aie pas oblig d'exposer ta base de donnes et c'est donc un peu plus scuris comme solution.

++

Thierry

----------


## cnguyen

Salut,

Et merci pour la rponse.

En effet, ayant lu ce petit problme de base de donnes, j'avais dj cr un Web Service (novice dans sa conception) ainsi, j'ai par exemple les ids et les noms des entreprises (situ dans ma BDD) que je souhaiterai implmenter dans une liste droulante InfoPath.

Par contre, je ne vois pas trs bien comment faire pour lui envoyer ? 
J'ai fait un test mais je ne sais pas si c'est la bopnne faon de s'y prendre.

Je m'explique :

J'ai cr une classe entreprise renvoyant une "List" contenant les ids et les noms des entreprises.

Ainsi, j'ai cris dans mon WS :



```

```

Est-ce ainsi qu'il faut faire ?


Merci encore!

----------


## virgul

Ok t'es sur le bon chemin mais n'oublie pas que Infopath travaille en XML. Donc ton retour du webservices doit tre en XML si tu veux travailler dans le mode design de Infopath.

donc le mieux pour populer une listebox est de faire un liaison via une base de donnes secondaire sur ton web services et aprs dnas ton controle listebox tu le lie a cette dernire.


++

Thierry

----------


## cnguyen

Merci, par contre je n'ai pas tout saisie, de quelle manire pourrais-je renvoyer les donnes en XML ? 

Par exemple, lorsque l'on cre un WS que l'on l'execute cela renvoi pour "HelloWord":



```

```

Mais lorsque j'appelle mon WS cela me donne :



```

```

Je n'arrive pas  voir ce que je dois faire.

Sinon comment faire une liaison d'une base de donnes secondaire ?

Car via mes diffrentes couches utilises avant il y a deja une couche s'occupant de rcuprer les donnes de la BDD en faisant :



```

```

llLe problme c'est que la, le WS me renvoit direct une ArrayList alors que je pensais qu'il allait me renvoyer les donnes de cette manire par exemple :

<id>1</id>
<nomEntreprise>Test</nomEntreprise>

etc...

Merci encore

----------


## virgul

Ben oui mais faut transformer ton Array en de donnes XML.

et au lieu de renvoyer un array list tu retourne un XmlDocument donc tu dclarera ton webservices comme ceci:



```

```

au lieu de : 


```

```

----------


## cnguyen

Sinon, j'ai vu des classes DataSourceCollection, DateSource, est-ce qu'il faut les utiliser ?

En est-il de mme pour XPathNavigator et XPathNodeIterator?

Par contre, pour gnrer un XmlDocument  partir de ma list, je dois donc dfinir moi-mme sa structure ?
Est-possible de faire simplement 



```

```

Sinon voici ce que j'ai fait :



```

```

Mais cela me gnre l'erreur :



```

```

Pourquoi? Je comprends bien l'erreur qui dis que le format renvoy n'est pas reconnu mais pourquoi?

----------


## virgul

On a aussi un truc comme ca avec mon collgue et on a rsolu ca comme ceci:



```

```

Y a surement un meilleur moyen de le faire mais pour l'instant il a laiss ca comme ca... 

Enfaite le souci est qu'en faisant un appendchild directement dans un XmlDocument il ne comprend pas son encoding et donc renvoi type inconnu...

Si tu trouve une meilleur solution merci de m'en faire profiter  :;):  

++

Thierry

----------


## virgul

Excuse il faut ajouter System.XML dans les rfrences pour avoir ce namespace XML

----------


## cnguyen

Je n'ai pas compris comment marche ton code :



```

```

Comment rajoute-tu les lments ??? Et leur valeur ?

Sinon j'ai cherch pour continuer avec la solution de base mais pas grand chose sur le net pour aider  comprendre l'erreur  ::cry::

----------


## virgul

Oups j'ai fait mon code trop vite....

Voila maintenant il est corrig.

----------


## cnguyen

Je ne sais pas si j'ai bien compris ce que tu souhaites faire mais voici ce que j'ai fait et j'ai toujours l'erreur.



```

```

En faites j'ai pas trs bien capt ta faon de rajouter un noeud par exemple ou un lment.

J'ai surtout vu que tu avais prcis l'encodage.

Merci.

----------


## virgul

Es-ce que ton Webservice est public? si oui pourrais-je avoir l'adresse (envoie moi la par mp)


Ben insertbefore comme son nom l'indique insre un noeud avant celui que tu donne en rfrence.

.documentelement slctionne le noeud root du xml (peu importe son nom) 

et pour create declaration ca fait :


```
<?xml version="1.0" encoding="UFT-8"?>
```

----------


## cnguyen

Salut,

Pour le problme, c'est rsolu partiellement. J'entends par l que maintenant la fonction arrive a afficher correctement le fichier XML sous cette forme :



```

```

Le problme n'tant pas li au XML en lui-mme mais  son remplissage par la List<Entreprise>

Par contre, aprs avoir li le WS  la liste droulante, j'ai cette erreur l :



```

```

Pourquoi?

Car quand je change de methode en rcuprant directement le fichier XML enregistr ca marche.


J'ai aussi un WS qui fait une insertion lors du clic sur le bouton Envoyer et il me mets un message du mme style :


```

```

Merci encore!

----------


## virgul

Ca doit tre des problme de droit je pense as-tu essayer de publier ton formulaire et l'ouvrir depuis cette endroit ca fait toujours l'erreur?

Car la ca doit faire l'erreur quand tu part en debug?

----------


## cnguyen

Toujours aussi ractif! C'est chouette  :;): 

Enfin je sais que c'est la connexion au reseau ou  la base qui foire en faites.

Je fais tout en local actuellement, donc :
 - J'ai ma BDD postgreSQL en local
 - Mon form InfoPath en local

Sinon, lors du debug avec VSTS, tout se passe nickel, au niveau de la rcupration des donnes. C'est uniquement quand je lie mon form local InfoPath aux donnes que je n'arrive pas  y accder.

ENfin lors de l'ouverture du formulaire il me dis :



```
Au moins une des sources de données requises pour ce formulaire n'est pas disponible.....
```

Quand j'essayde faire "Essayer de se connecter" il me mets :


```
InfoPath a contacté une sorce de données mais la réception a echoué.
```

Et dans les dtails il me mets donc :


```

```

----------


## virgul

Mais la je comprends plus bien... T'avais pas fait un webservice pour faire le query de ta base de donnes?

Car au moins avec un WS tu t'vite ces problme de droit vu que c'est que le WS qui a le droit d'crire dans ta bdd

----------


## cnguyen

C'est justement pour ca que je ne comprends pas.

C'est dans une de mes couches que je fais la connexion  la base de donnes et que je rcupre les donnes.

Aprs mon WS ne fait qu'xecuter cette mthode et rcupre donc le XmlDocument cr.

Donc dans le WS j'ai simplement :
 DAO :


```

```

BLL :



```

```

et dans mon WS :



```

```

----------


## virgul

oui ok mais enlve moi un doute quand tu as fait ta connection  ton WS t'as mis quoi comme chemin? si tu le tape l'adresse dans le navigateur tu arrive sur la page de slction des diffrentes mthodes (si c'est du .Net)?

T'as pas mis localhost au moins?

----------


## cnguyen

Salut,

Je ne suis pas sur de bien comprendre.

Alors travaillant en local, j'ai essay avec localhost, 127.0.0.1 ou l'adresse IP de ma machine mais cela n'y change rien.

Enfin quand tu parles de ma connexion  mon WS, tu parles bien de ma connection PostgreSQL effectue pour rcuprer les infos? Si oui, j'ai utilis localhost.

Mais, lorsque je build via VSTS ma solution, l'adresse me presentant les diffrentes mthodes et WS est : http://localhost:1515/

Merci

----------


## virgul

Dans ton ws qui est local tu peux mettre localhost si ta bdd est sur le mme PC ca y a pas de souci...

Moi ce que je parle c'est l'adresse du Webservice que tu as mis dans l'assistant d'infopath? Es-ce que tu as mis localhost? Et si tu tapes sur ton PC-Test l'addresse de ton Webservice es-ce que tu arrive sur une page ou ca te mets une erreur (genre page non trouv)?

----------


## cnguyen

Ah ok, je viens de voir l'adresse que j'ai mise pour le WS Infopath et c'est en effet http://localhost....

Si j'ai bien compris ce n'est pas cela qu'il faut mettre, mais que faut-il mettre alors?

Sinon, si je teste en tapant l'adresse avec le WS, en effet je trouve bien mes WS.

Merci

----------


## virgul

Oui mais pas si tu es sur un autre PC tu pourras pas atteindre le localhost de ton pc de dv.

Ben c'est comme pour un site internet...

----------


## cnguyen

Je vois bien mais l, je suis donc en localhost, et quand je mets pour le WS d'InfoPath l'adresse de ma machine cela ne passe pas donc je ne sais pas quel est le problme.

----------


## virgul

Ok faut peut-tre que je t'explique quelquechose:

Un webservice est un peu comme un site internet c'est une adresse que tu atteint via http (ou une IP fixe) et qui te fournit de mthode (le tienne c'est pour faire un insert dans une base donnes) et un site web te fournit des info fixe (qui peuvent biensur tre actualiser).

Donc il faut que tu publie ton Webservice sur un serveur qui est contient (ou qui a accs ) ta bdd. Et il faut que tu dfinisse dans ISS l'adresse IP fixe du site ou tu l'as publi... 

C'est comme pour un site internet! sauf que faut pas oublier de cliquer sur le bouton crer dans les proprits d'IIS (onglet rpertoire) et autoriss script et xcutables.

----------


## cnguyen

Juste une question :

Quand je build, VSTS me lance donc un serveur localhost o il est possible d'xcuter les WS.

Donc c'est que les WS sont accesible via un serveur, en l'occurence, celui cre par VSTS.

Si on ne souhaite faire que des tests, est-on oblig de dployer les WS sur un ISS alors qu'ils sont deja sur un serveur fait par VSTS ?

----------


## virgul

Si ton projet est dans un rpertoire qui est partag dans IIS et que tu actives l'xcution de script et xcutable oui.

Sinon c'est comme un site web si te le rends pas dispo il ne va pas ce mettre tout seul...

----------

