PC SOFT

FORUMS PROFESSIONNELS
WINDEVWEBDEV et WINDEV Mobile

Accueil → WINDEV Mobile 2024 → [WM17] Connexion entre FileMaker et mon application WM17 Androïd
[WM17] Connexion entre FileMaker et mon application WM17 Androïd
Débuté par Bastien MAITRE, 30 avr. 2012 13:58 - 12 réponses
Membre enregistré
6 messages
Posté le 30 avril 2012 - 13:58
Bonjour à tous,

Je suis nouveau sur le forum et je me suis inscrit car j'ai besoin d'informations.

Je travaille au sein de l'administration publique d'une commune suisse, au service informatique. Nous nous occupons du parc informatique de celle-ci et aussi des écoles primaires et enfantines. Je fais partie de ceux qui s'occupent des écoles.
Sur chaque poste sont étiquetés des QR codes contenant diverses informations telles que l'adresse IP, le nom du poste, etc... Actuellement, nous utilisons une application iPhone nommée i-nigma permettant uniquement la lecture de ces QR codes et tous les équipements sont stockés dans une BD FileMaker Pro 10.

Il m'a été demandé de créer une application Androïd tournant sur une Samsung Galaxy tab 8.9 avec l'AGL Windev Mobile 17 permettant de scanner ces QR codes et d'afficher la fiche de l'équipement sur la tablette. Une fois affichées, je dois pouvoir consulter, modifier ou supprimer un équipement en cas de besoin et cela devra mettre à jour la BD.

Mon chef a déjà commandé FileMaker Pro 12 et nous sommes en discussion pour l'achat de FileMaker Server 12 Advanced (ODBC/JDBC client et serveur). La BD FileMaker Pro 12 sera directement installée sur un Mac OS X server et un accès sera donné à mon chef pour modifier cette BD depuis son poste.

Mon soucis principal et ce pourquoi je suis venu poster sur le forum est que je ne sais pas comment effectuer une connexion entre ma BD FileMaker et mon application Androïd puisqu'il n'existe pas de driver ODBC pour Androïd (à ma connaissance du moins) et je pense qu'un Webservice pourrait pallier le problème mais je ne connais pas du tout la marche à suivre...

Est-ce que vous auriez une solution afin de me dépanner sachant que j'ai 3 contraintes, 1. je dois absolument garder FileMaker comme SGBD, 2. l'interrogation de la BD se fera online (connexion Wifi via le réseau des écoles) et enfin 3. Développer sur Androïd (car il existe un système FileMaker go pour IOS mais je suis obligé de développer sur Androïd) ?

J'attends vos réponses avec impatience et si jamais quelque chose n'est pas clair, je vous donnerai plus de détails. Merci d'avance et j'espère que vous pourrez me dépanner...

Cordialement,

Bastien
Posté le 30 avril 2012 - 17:07
Bonjour,

Il n'existe effectivement pas en WM de driver ODBC.
Si vous êtes forcés de vous servir de cette base de donnée, cela signifie qu'il vous faut impérativement cet accès ODBC d'une façon ou d'une autre.
Le WebService est effectivement une bonne solution. Tout comme tout mode de communication permettant de faire du client / serveur.

Le principe n'est pas compliqué :
Se baser sur un format de transmission de données qu'Android va supporter.
Avec un webservice, en fait, le principe est assez simple. La théorie est plus compliquée, car basée sur des appels SOAP, ce qui implique d'écrire du XML à la louche pour réaliser les appels / réponses.
Problème : Il faut avoir WD/WB pour réaliser un WebService.

Il existe toutefois une autre solution : Utiliser un autre langage.
A la façon des WebServices, il est possible de développer dans n'importe quel langage ( de préférence Web avec un support ODBC intégré ) une interface, qui aura à sa charge de créer le 'driver ODBC' Android.
L'idée est que cette seconde application aura en charge, à partir d'une information contenue dans votre QR, d'effectuer la requête sur votre serveur FileMaker, et de renvoyer les informations à l'application Android. Celle çi disposera ensuite des informations dans le format que vous aurez décidé.
Le souci étant qu'il faut coder la translation des données à la main dans la plupart des cas, car il est difficile de sérialiser un RowSet entre langages. Pour cela, l'idéal : XML.
Ce qui a plusieurs avantages :
Toutes les applications supportent XML ( et les langages ne supportant pas XML aujourd'hui sont rares. A moins que vous ne programmiez régulièrement en BrainFuck ou en Piet. )
C'est un moyen de transmission standardisé
La transmission se fera sur le port 80
Il est très facile d'étendre les possibilités de votre application Android, par l'adjonction d'un site web, par exemple.

Donc, là est le principe : Gérer un serveur indépendant d'Android qui vous permettra de faire le lien Android - ODBC.

Cette application devrait effectuer :
- Authentification de la requête ( indispensable dans un contexte ou on utilise une architecture comme celle là, on ne veux pas que n'importe qui puisse supprimer n'importe quoi. Et là, c'est difficile pour moi de dire qu'utiliser. On peut commencer par utiliser HTTPS , déjà. Puis utiliser une authentification dans le terminal qui sera transmise et vérifiée par le serveur. )
- Identification de l'action à réaliser ( en général par des appels sur des pages différentes )
- Requête sur FileMaker
- Création de la réponse XML à partir du RowSet de la DB
- Retour de la requête, avec, dans l'idéal, un moyen de l'authentifier ( Même si normalement, en utilisant HTTPS , c'est plutôt bon. )

Android n'aura plus qu'à faire :
- HTTPRequete()
- Et voilà les données en XML, je les exploite

En espérant que cela vous aidera.

Bonne journée !
Posté le 30 avril 2012 - 18:11
Hello,

Je pense que pour résoudre ton problème il te faut implémenter un webservice que tu appelleras depuis ton application Android.

Ton webservice peut-être écrit dans un language hétérogène. Dans mon cas, j'ai utilisé cette méthode pour mettre à jour une base de donnée lotus notes et ça fonctionne très bien.

L'appel à une URL est aussi possible, mais plus difficile à gérer dans le cas de passage de paramêtres.

Bonne Chance.

Bernard Vésy



Boris MAGNIER wrote in news message <6e9012630ff9b6d72324fa89a0a34ecb@news.pcsoft>:
Bonjour,

Il n'existe effectivement pas en WM de driver ODBC.
Si vous êtes forcés de vous servir de cette base de donnée, cela signifie qu'il vous faut impérativement cet accès ODBC d'une façon ou d'une autre.
Le WebService est effectivement une bonne solution. Tout comme tout mode de communication permettant de faire du client / serveur.

Le principe n'est pas compliqué :
Se baser sur un format de transmission de données qu'Android va supporter.
Avec un webservice, en fait, le principe est assez simple. La théorie est plus compliquée, car basée sur des appels SOAP, ce qui implique d'écrire du XML à la louche pour réaliser les appels / réponses.
Problème : Il faut avoir WD/WB pour réaliser un WebService.

Il existe toutefois une autre solution : Utiliser un autre langage.
A la façon des WebServices, il est possible de développer dans n'importe quel langage ( de préférence Web avec un support ODBC intégré ) une interface, qui aura à sa charge de créer le 'driver ODBC' Android.
L'idée est que cette seconde application aura en charge, à partir d'une information contenue dans votre QR, d'effectuer la requête sur votre serveur FileMaker, et de renvoyer les informations à l'application Android. Celle çi disposera ensuite des informations dans le format que vous aurez décidé.
Le souci étant qu'il faut coder la translation des données à la main dans la plupart des cas, car il est difficile de sérialiser un RowSet entre langages. Pour cela, l'idéal : XML.
Ce qui a plusieurs avantages :
Toutes les applications supportent XML ( et les langages ne supportant pas XML aujourd'hui sont rares. A moins que vous ne programmiez régulièrement en BrainFuck ou en Piet. )
C'est un moyen de transmission standardisé
La transmission se fera sur le port 80
Il est très facile d'étendre les possibilités de votre application Android, par l'adjonction d'un site web, par exemple.

Donc, là est le principe : Gérer un serveur indépendant d'Android qui vous permettra de faire le lien Android - ODBC.

Cette application devrait effectuer :
- Authentification de la requête ( indispensable dans un contexte ou on utilise une architecture comme celle là, on ne veux pas que n'importe qui puisse supprimer n'importe quoi. Et là, c'est difficile pour moi de dire qu'utiliser. On peut commencer par utiliser HTTPS , déjà. Puis utiliser une authentification dans le terminal qui sera transmise et vérifiée par le serveur. )
- Identification de l'action à réaliser ( en général par des appels sur des pages différentes )
- Requête sur FileMaker
- Création de la réponse XML à partir du RowSet de la DB
- Retour de la requête, avec, dans l'idéal, un moyen de l'authentifier ( Même si normalement, en utilisant HTTPS , c'est plutôt bon. )

Android n'aura plus qu'à faire :
- HTTPRequete()
- Et voilà les données en XML, je les exploite

En espérant que cela vous aidera.

Bonne journée !
Membre enregistré
6 messages
Posté le 02 mai 2012 - 11:02
Merci beaucoup pour vos réponses ! J'ai appris pas mal de choses grâce à vous ;-)

J'ai réussi à acquérir auprès de mon professeur accompagnant une version de Windev 17 qui me permettrait donc de créer un Webservice :-)

Je pense qu'étant donné que je suis un piètre développeur il sera plus simple de passer par un webservice que je créerai en Windev 17 et que j'exporterai vers mon projet en VM17. Ne connaissant pas les webservices puisque je ne les ai jamais utilisés, est-ce que c'est compliqué à mettre en place ?

Pourriez-vous me décrire les différentes étapes à effectuer dans le cas de mon projet ?

Cordialement,

Bastien
Posté le 02 mai 2012 - 12:12
Bonjour,

N'ayant jamais crée de WebService, je ne peux pas vous dire précisément la marche à suivre, à part ce qui est présent dans la documentation. De ce que j'y ai lu, la partie complexe de la mise en place d'un WebService SOAP est très simplifiée.
Il vous suffit de créer un projet sous WD de type WebService, ce qui vous amènera à un projet sans interface, avec des procédures globales, qui seront les méthodes accessibles à distance par le WebService.
Une fois le WebService crée ( au moins les déclarations des fonctions ), il suffit de l'importer,
Pour créer un mécanisme d'authentification, il faut soit s'appuyer sur une entête SOAP, et jouer avec SOAPAjouteEntête / SOAPRécupèreEntête, soit s'appuyer sur un contexte ( ce qui impose toutefois d'utiliser la "nouvelle" version des WebServices, et donc un serveur d'application WB, je vous renvoie à cette page pour le détail http://doc.pcsoft.fr/fr-FR/?3086002 ) avec DéclareContexteWebservice.

Et là, vient la partie intéressante, mais que je ne connais pas : Quelle est la méthode à employer pour passer les paramètres aux fonctions du WebService. La doc n'est vraiment pas claire sur ce point. Il faut visiblement déclarer des variables de types étranges... Mais je suppose que Windev vous orientera en live sur ces questions.

Finalement, il ne vous restera qu'à déployer le WebService, avant de tester votre application, puis déployer votre application.

Pour résumer : (L'ordre n'est pas forcément absolu. L'étape 8 est, ou n'est pas, selon vos besoins, optionnelle)
1 : Créez le WebService sous WD et les méthodes dont vous avez besoin pour les appels
2 : Écrivez votre code du WebService : je pense que rien ne s'oppose à une programmation propre, pourquoi pas objet, la seule restriction visible étant de ne pas avoir d'interface.
3 : Créez la procédure d'installation du WebService
4 : Importez le dans WM
5 : Déployez le WebService
6 : Écrivez les procédures ayant à faire appel au WebService dans votre application WM
7 : Testez votre application
8 : Tapez vous la tête contre le mur le plus proche
9 : Recommencez l'étape 6
10 : Et voilà ! Une application fonctionnelle

Bonne journée ! :D

Bastien MAITRE a écrit dans le message de news <ee644cc61de1ab66da08c74fd11bda64@news.pcsoft> :
Merci beaucoup pour vos réponses ! J'ai appris pas mal de choses grâce à vous ;-)

J'ai réussi à acquérir auprès de mon professeur accompagnant une version de Windev 17 qui me permettrait donc de créer un Webservice :-)

Je pense qu'étant donné que je suis un piètre développeur il sera plus simple de passer par un webservice que je créerai en Windev 17 et que j'exporterai vers mon projet en VM17. Ne connaissant pas les webservices puisque je ne les ai jamais utilisés, est-ce que c'est compliqué à mettre en place ?

Pourriez-vous me décrire les différentes étapes à effectuer dans le cas de mon projet ?

Cordialement,

Bastien
Membre enregistré
6 messages
Posté le 02 mai 2012 - 13:24
Merci beaucoup, je pense que l'étape 8 va être indispensable ;-)

Sinon est-ce que je suis obligé d'avoir Webdev 17 pour mon webservice ou non ?

Parce que j'ai jeté un coup d'oeil à votre lien "Générer un Webservice" et ils disent qu'il faut déployer le webservice sur un serveur d'application Webdev seulement je n'ai pas Webdev à disposition...
Membre enregistré
6 messages
Posté le 02 mai 2012 - 14:06
Je crois que j'ai ma réponse et qu'il n'y a pas besoin de Webdev grâce au lien ci-dessous:

http://doc.pcsoft.fr/fr-FR/?3086001&product=WM
Posté le 02 mai 2012 - 14:06
Non, en fait, ce qui est (presque) indispensable, c'est un serveur d'application WebDev.

Il y a d'un côté Webdev ( pour développer ) et de l'autre, le serveur d'application, qui fait tourner le site. Ce sont deux produits (quasiment) indépendants. Le principe du WebService étant de s'appuyer sur HTTP pour transmettre des données, il est nécessaire d'avoir à disposition un serveur web, avec Apache ou IIS. Ensuite, il existe deux solutions :
1. L'ancien mode, qui n'est plus supporté, seulement en compatibilité, qui ne nécessite que ce serveur.
2. Le nouveau mode, qui fait l'objet d'une propagande forte, qui nécessite en plus de cela un module d’exécution de code Webdev : le serveur d'application WebDev. Ce n'est pas en lui même un serveur Web, car il a besoin d'Apache/IIS. Il ne sert qu'à l’exécution du programme : le serveur web lui passe la main pour l’exécution, se contentant de relayer entrées et sorties.
3. Non, celui là, c'est juste pour la Spanish Inquisition.

A savoir qu'il existe un serveur 10 connexions ici :
http://www.pcsoft.fr/st/telec/webdev17/webdev17_69m-dep.htm
Et que sur le papier, il est possible de générer une installation de votre WebService contenant directement cette version du serveur 10 connexions.

En fait, vous verrez, au moment de la génération du projet, une option vous sera proposée, a savoir la génération en mode ISAPI, qui ne nécessite pas de serveur WB, seulement un serveur Apache/IIS. Toutefois, cette solution a des limitations : Limité à Windows 32bits, une seule requête traitée à la fois, et obligation de déploiement par média physique. L'autre option est la génération en mode Webdev, avec moins de limitations (64bits & Linux, multi-requêtes, déploiement FTP).

Bonne journée à nouveau.
PS : Attention à ne pas abimer le mur !

Bastien MAITRE a écrit dans le message de news <9cc7f99b471ffbf48e51cdfe2f98dd17@news.pcsoft> :
Merci beaucoup, je pense que l'étape 8 va être indispensable ;-)

Sinon est-ce que je suis obligé d'avoir Webdev 17 pour mon webservice ou non ?

Parce que j'ai jeté un coup d'oeil à votre lien "Générer un Webservice" et ils disent qu'il faut déployer le webservice sur un serveur d'application Webdev seulement je n'ai pas Webdev à disposition...
Membre enregistré
6 messages
Posté le 02 mai 2012 - 17:11
Okeyyy je comprends mieux !!! :)

Donc je peux sans autre générer mon webservice en Windev 17, l'importer dans mon projet WM17 et le faire tourner à l'aide du serveur d'application WebDev 17 (10 connexion) sachant qu'il n'y aura pas plus de 2 connexions simultanées sans obligatoirement devoir acquérir WebDev 17 ???

C'est top je vois le bout du tunnel pour ce qui est de la procédure à effectuer pour l'élaboration de mon projet. Le mur devrait rester en place ^^

En tout cas je vous remercie mille fois pour l'aide que vous m'apportez car en temps que néophyte en développement Windev et du haut de mes petits 22 ans, cela me rassure d'obtenir l'avis et les conseils de personnes plus expérimentés !

Bonne journée à vous ;)
Posté le 02 mai 2012 - 17:21
Okeyyy je comprends mieux !!! :)

Donc je peux sans autre générer mon webservice en Windev 17, l'importer dans mon projet WM17 et le faire tourner à l'aide du serveur d'application WebDev 17 (10 connexion) sachant qu'il n'y aura pas plus de 2 connexions simultanées sans obligatoirement devoir acquérir WebDev 17 ???

C'est top je vois le bout du tunnel pour ce qui est de la procédure à effectuer pour l'élaboration de mon projet. Le mur devrait rester en place ^^

En tout cas je vous remercie mille fois pour l'aide que vous m'apportez car en temps que néophyte en développement Windev et du haut de mes petits 22 ans, cela me rassure d'obtenir l'avis et les conseils de personnes plus expérimentés !

Bonne journée à vous ;)
Posté le 02 mai 2012 - 18:00
En effet, c'est l'idée.
De toute façon, le choix se porte entre une solution qui accepte maximum 10 connexions à la fois, et une autre qui n'en accepte qu'une seule. Mieux : Sans WebDev, vous pourrez certainement installer le serveur sur le poste de développement, du moins pour la période de test.

C'est une excellente nouvelle pour le mur, je suis certain qu'il vous en sera infiniment reconnaissant. Ce qui, pour un mur, est déjà beaucoup. Ils ne sont pas connus pour être reconnaissants, et assez casse-tête avec le protocole.

Ah, oui, et de rien. Avec un peu de chance, c'est vous qui m'aiderez, un autre jour. ;)

Bonne journée !

PS : L'âge et l'expérience sont sans lien. A moins que ce ne soit vraiment de très petites années. Je n'ai que deux ans de plus. ;)

Bastien_CH a écrit dans le message de news <4fff0e09f55a186e21b6838b96be1369@news.pcsoft> :
Okeyyy je comprends mieux !!! :)

Donc je peux sans autre générer mon webservice en Windev 17, l'importer dans mon projet WM17 et le faire tourner à l'aide du serveur d'application WebDev 17 (10 connexion) sachant qu'il n'y aura pas plus de 2 connexions simultanées sans obligatoirement devoir acquérir WebDev 17 ???

C'est top je vois le bout du tunnel pour ce qui est de la procédure à effectuer pour l'élaboration de mon projet. Le mur devrait rester en place ^^

En tout cas je vous remercie mille fois pour l'aide que vous m'apportez car en temps que néophyte en développement Windev et du haut de mes petits 22 ans, cela me rassure d'obtenir l'avis et les conseils de personnes plus expérimentés !

Bonne journée à vous ;)
Membre enregistré
6 messages
Posté le 03 mai 2012 - 12:46
Re bonjour :-)

Encore une fois je vous remercie pour vos conseils et j'ai analysé la solution dont on a parlé. Le fait est que mon serveur de production est un MacOSX Server, est-ce que le serveur d'application Webdev tourne sur Mac ?

Deuxième chose, je me suis demandé s'il ne serait pas plus simple de faire une liaison par IP, qu'est-ce que vous en pensez et est-ce que j'aurais la possibilité d'utiliser cette méthode compte tenu des contraintes de mon projet ?

Merci d'avance et bonne journée ;)

PS: Le mur est en train d'être repeint en rouge sang... ^^
Posté le 03 mai 2012 - 18:11
Bonjour à nouveau,

Encore une fois, de rien.

Et c'est... Dommage ! MacOS n'est actuellement pas du tout supporté par WD & Co.
Il doit toutefois être possible d'utiliser la virtualisation pour ne pas avoir à investir dans un nouveau matériel.

Faire une liaison par IP ? Mais vous êtes fou ?!

Non, en fait, c'est surtout que je ne vois pas ce que vous voulez dire. :p
IP en lui même ne réglera rien. IP ne sert qu'au réseau. Ce qu'il vous faut est un méthode au niveau application, pour transmettre vos données.

Le rouge sang est une couleur très tendance, et admirable, elle change au cours du temps. Il faut en revanche aimer l'ambiance.

Bon courage !

Bastien MAITRE a écrit dans le message de news <aa57015e52d9837429ad974adbd63b4d@news.pcsoft> :
Re bonjour :-)

Encore une fois je vous remercie pour vos conseils et j'ai analysé la solution dont on a parlé. Le fait est que mon serveur de production est un MacOSX Server, est-ce que le serveur d'application Webdev tourne sur Mac ?

Deuxième chose, je me suis demandé s'il ne serait pas plus simple de faire une liaison par IP, qu'est-ce que vous en pensez et est-ce que j'aurais la possibilité d'utiliser cette méthode compte tenu des contraintes de mon projet ?

Merci d'avance et bonne journée ;)

PS: Le mur est en train d'être repeint en rouge sang... ^^