IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Web & réseau Delphi Discussion :

WebService et sérialisation


Sujet :

Web & réseau Delphi

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 41
    Par défaut WebService et sérialisation
    Bonjour,

    Une méthode d'un WebService renvoie le résultat d'une requête qui contiendra plusieurs lignes.

    J'ai créé une classe qui hérite de TRemotable.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
      TStock = class(TRemotable)
      private
        FRegion: AnsiString;
        FGroupe: AnsiString;
        FAgence: AnsiString;
      published
        property Region: AnsiString read FRegion write FRegion;
        property Groupe: AnsiString read FGroupe write FGroupe;
        property Agence: AnsiString read FAgence write FAgence;
      end;
    J'ai ensuite utilisé un TList pour créer une liste:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
     
    function TestWS.StockMini(): TList; stdcall;
    var
      session : TOraSession;
      sqlQuery : TOraQuery;
      stock : TStockIdeal;
      liste : TList;
    begin
      liste := TList.Create;
      session := TOraSession.Create(nil);
      session.ConnectString := 'dev/dev@test';
      sqlQuery := TOraQuery.Create(nil);
      sqlQuery.Session := session;
      sqlQuery.SQL.Text := 'SELECT	REGION, GROUPE, AGENCE FROM STKMINI';
      sqlQuery.Open;
      if sqlQuery.Active then begin
        sqlQuery.First;
        while not sqlQuery.EOF do begin
          stock := TStockIdeal.Create;
          stock.Region := sqlQuery.Fields[0].AsString;
          stock.Groupe := sqlQuery.Fields[1].AsString;
          stock.Agence := sqlQuery.Fields[2].AsString;
          liste.Add(stock);
          sqlQuery.Next;
        end;
      end;
      sqlQuery.Close;
      sqlQuery.Free;
      Result := liste;
    end;
    Cela ne fonctionne évidemment pas...
    Je suppose qu'il faut sérialiser cette liste pour la renvoyer. Je ne sais pas comment gérer la sérialisation et le typage en sortie du WS.

    Si quelqu'un pouvait me donner un début de réponse, ce serait sympa.

  2. #2
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 124
    Par défaut
    il suffit de faire un type tableau et d'avoir un objet qui encapsule le tableau, et de le passer comme paramètre de la fonction

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    TStockArray = array of TStock; 
     
    TStockCollection = class(TRemotable)
    private
      FStocks: TStockArray;
    published
      property Stocks: TStockArray read FStocks write FStocks;
    end;
    Pense à faire un Destroy pour libérer les éléments de TStockArray
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 41
    Par défaut
    Merci pour cette réponse.
    J'ai testé cette encapsulation exactement comme tu as indiqué et j'obtiens cette erreur:

    La conversion de la classe TMSDOMImplementation en SOAP n'est pas prise en charge - les classes SOAP doivent dériver de TRemotable

  4. #4
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 124
    Par défaut
    Quel est le code que tu as ?
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 41
    Par défaut
    J'ai réussi à faire fonctionner le WS!
    J'ai utilisé un tableau en retour, sans l'encapsuler dans une classe.

    Merci pour l'aide

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Sérialiser un objet hérité dans webservice
    Par Rome dans le forum Services Web
    Réponses: 1
    Dernier message: 19/07/2010, 10h33
  2. Réponses: 1
    Dernier message: 14/09/2007, 16h24
  3. Réponses: 1
    Dernier message: 27/10/2006, 16h21
  4. [XMLRAD] Security des WebModules et/ou des WebServices
    Par Lux interior dans le forum XMLRAD
    Réponses: 4
    Dernier message: 18/12/2002, 18h09
  5. WebService Google sur builder 5?
    Par billuh dans le forum C++Builder
    Réponses: 3
    Dernier message: 19/11/2002, 20h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo