Bonjour à tous,

Dans l'optique d'une migration d'application développée entièrement en Powerbuilder (Client lourd / Serveur) vers une architecture 3 Tiers (IHM .NET Web ou WinForm, Composants métiers PB11, BdD Oracle), je suis confronté à un problème.

Powerbuilder 11 offre la possibilité de construire des assemblies .NET à partir d'objets non visuels. Tout se fait très facilement.

Je vais exposer ici le contexte de mon problème, vous pouvez le zapper si çà ne vous interesse pas
Voici un exemple pour bien comprendre mon problème:
- Je créé un nouveau projet .NET Assembly sous PB.
- Je créé dans ce projet un objet non visuel nvo_listeClient.
- Dans le constructeur de cet objet, je créé une transaction vers Oracle, j'instancie un datastore ids_client (déclaré en variable d'instance), execute une requete de type "SELECT CODE, NOM, ADRESSE, VILLE FROM CLIENT", et réalise un retrieve().
- Je créé ensuite 2 méthodes:
* of_getNbClients(), qui fait :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
RETURN ids_client.rowCount()
* of_getClient(int ai_code), qui fait :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
RETURN ids_client.getItemString(ids_client.find("CD_CLIENT = " + string(ai_CodeClient), 0, ids_client.rowCount()), "NOM")
- Je déploie mon application.
- Je référence ensuite dans Visual Studio cette assembly fraichement créée dans le répertoire "pb2csdotnettempout".
- Dans mon code C#, je fais un truc du style:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
using nom_assembly;
nvo_listeClient l = new nvo_listeClient();
Response.write(l.of_getNbClients());
Response.write(l.of_getClient(1));
Bon, tout fonctionne très bien. La référence vers mon composant PB est reconnue, la transaction et le retrieve se font correctement, et tout s'affiche bien. Je pense également respecter les principes d'une architecture 3 Tiers.

Fin du contexte. Je reprend mon explication de mes problèmes.

Mais suite à çà, j'ai quelques questions (désolé d'être si long avant d'en venir au fait...):
- Mon premier problème est un peu compliqué à expliquer. Je souhaiterais connecter "simplement" et "automatiquement" mes objets métiers créés en PB, mes composants, à des contrôles visuels Visual Studio (GridView par exemple). Je suppose donc qu'il faut que je connecte via des méthodes mon objet métier nvo_listeClient à un objectdatasource .NET. Dans la MSDN, voici ce qu'il est indiqué :
"Les méthodes de récupération de données de l'objet source doivent retourner un objet DataSet, DataTable ou DataView, ou un objet qui implémente l'interface IEnumerable"
. Bon...
Comment puis-je en PB construire une méthode qui puisse me retourner un DataSet, DataTable ou DataView, et qui soit quand meme déployable sous forme d'assembly ? (j'ai une méthode qui retourne le datastore par exemple, mais elle n'est pas sélectionnable pour etre déployée, surement parceque le type est trop complexe).
Sinon, comment puis je implémenter l'interface IEnumerable à mon objet nvo_listeClient, sachant 2 choses:
* L'implémentation d'interface n'existe pas en PB (j'ai lu çà quelquepart),
* Cette implémentation implique la déclaration d'un objet IEnumerator, connu de l'environnement .NET, et je ne sais pas comment déclarer ou hériter en PB d'objets du framework .NET ...

Alors, evidemment, peut-être que tout çà est impossible... Donc je suis ouvert à tout! Peut-être qu'il existe un autre objet PB autre que le datastore qui permette de faire ceci, peut être qu'il faut que je passe par une autre forme de communication que l'objet à objet (XML...).
La chose à garder à l'esprit est que pour l'instant je ne fais que réaliser des tests, mais le but est de migrer une énorme application, il me faut donc une méthode que je peux généraliser à tous mes objets métiers... Il faut quelquechose qui ne soit pas du "bricolage" :-) et qui respecte le 3 Tiers.

Le support Sybase me parle de Datawindow .NET. Cet outil permet d'intégrer des composants PB dans l'environnement Visual Studio... En gros, au lieu d'utiliser un gridview et un objet métier pour gérer mes données, je vais utiliser une datawindow dans visual studio (le but est de faire évoluer l'interface, pas de me retrouver avec des datawindows...) et faire mes requêtes dans mes formulaires (plus de 3 tiers...).

J'espère que je me suis bien exprimé.

- Mon deuxième problème est plus rapide à répondre. Toujours le déploiement de composants dans visual studio. Je voudrais cette fois savoir si le principe objet de composition fonctionne. Je m'explique. Si l'on reprend mon objet métier de tout à l'heure nvo_listeClient, que l'on imagine que cet objet possède une liste de nvo_client. Ma méthode of_getClient() ne retourne plus un nom, mais un nvo_client. Lorsque je déploie mes composants, Visual Studio sera-t-il en mesure de comprendre que ces 2 composants sont liés par une relation de composition ? Est ce que je pourrais écrire un truc du style:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
nvo_listeClient l = new nvo_listeClient();
nvo_client c = new nvo_client();
c = l.getClient(1);
Est-ce que les phases de marshalling / démarshalling prennent en compte les objets métier complexes, ou visual studio à un plus haut niveau ?


Ouf... J'ai écris un pavé, désolé. Mais c'est important!

Merci d'avance de m'avoir lu, et eventuellement de m'avoir apporté une réponse.