Forum > Lazarus e il web

Consumare un webservice con Lazarus utilizzando SOAP e WSDL

<< < (2/4) > >>

Legolas:
Rispondo solo ora perché mi sono preso un week-end in famiglia lontano da tutto (l'unico contatto con internet era Youtube per i cartoni di Peppa Pig e della Pimpa per il pupo, che altrimenti non mangia...  ::) ;D )

Comunque grazie! Ho cercato un po' in rete e ho trovato un articolo per Delphi XE2 e, dopo qualche affanno, sono riuscito a farlo funzionare anche con Lazarus. Si tratta di un semplice programmino che controlla la validità del VAT dei membri di uno Stato europeo.

Occorre prima di tutto generare le unit dal file WSDL disponibile qui:
http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl
che, grazie all'aiuto di WST è un'operazione da un paio di click :D

Il progetto richiede un tedit (edVAT) e un tbutton (btnVAT). Bisogna aggiungere wst_synapse e wst_core tra i packages richiesti dal progetto, oltre che aggiungere tra gli uses le unit generate da WST.

Senza dilungarmi troppo, per chi fosse interessato, ecco il codice:

--- Codice: delphi ---
unit Unit1;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,
  checkVatService, checkVatService_proxy,
  urn_ec_europa_eu_taxud_vies_services_checkVat_types,
  synapse_http_protocol;

type

  { TForm1 }

  TForm1 = class(TForm)
    btnVAT: TButton;
    edVAT: TEdit;
    procedure btnVATClick(Sender: TObject);
  private
    { private declarations }
  public
    { public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.lfm}

{ TForm1 }

procedure TForm1.btnVATClick(Sender: TObject);
var
  WS: checkVatPortType;
  inp: checkVat_Type;
  outp: checkVatResponse;
begin
  SYNAPSE_RegisterHTTP_Transport();
  WS := wst_CreateInstance_checkVatPortType();
  inp := checkVat_Type.Create;
  try
    inp.countryCode := Copy(edVAT.Text,1,Pos(#32,edVAT.Text)-1);
    inp.vatNumber := Copy(edVAT.Text,Pos(#32,edVAT.Text)+1,255);
    outp := WS.checkVat(inp);
    if outp.valid then
      ShowMessage('OK: ' + outp.name + #13#10 + outp.address)
    else ShowMessage(outp.vatNumber + ' not OK')
  finally
    inp.Free;
    outp.Free
  end
end;

end.


--- Termina codice ---


E' solo un inizio, ma ora credo di aver capito come funziona il tutto :)

Ettore Cicinelli:
Salve, scusate sono nuovo in questo forum, ma sto cercando di imparare a programmare in Lazarus, avevo letto l'articolo del Dr. Bob's riguardo l'incorporazione del VIES in Delphi, poi per fortuna ho trovato la versione in lazarus proposta da Legolas ed ho eseguito le istruzioni fedelmente. Alla fine quando cerco di compilare il progetto mi da sempre il seguente errore:"checkVatService_proxy.pas(...)Error:Identifier not found "urn_ec_europa_eu_taxud_vies_services_checkVat_types" e successivamente: checkVatService_proxy.pas(...) Error: interface type expected, but got "<erroneus type>", non trova quell'identificatore anche se c'è. Non capisco.
Grazie per l'attenzione e scusate in anticipo se ho sbagliato qualcosa.

DragoRosso:
Ripartiamo da zero.

Prima cosa devi scaricare il file "checkVatService.wsdl" dal link indicato (http://ec.europa.eu/taxation_customs/vies/checkVatService.wsdl

Poi dal OPL (Online Package Manager) devi scaricare ed installare il componente WST con tutti i suoi collegati.

Ora possiamo continuare.

Dalla voce di menu "Progetto/Web Services Toolkit" scegli "Import WDSL file" ti si aprirà un pagina e imposta il file di input (scaricato prima) e la directory dove verranno generati i wrapper pascal.

Se tutto OK, allora hai tutto.

PER USARE I WRAPPER GENERATI, vai nel menu "Progetto/Opzioni di progetto" e sotto "Opzioni Compilatore/Percorsi" devi aggiungere  la path dove ci sono i wrapper appena generati nella prima linea a destra "Altri file unit (-Fu):".

Ciao

DragoRosso:
Aggiornamento, devi portare due modifiche ai wrapper creati.

Nel file "checkvatService_proxy.pas" alla riga 19 devi eseguire la sostituzione come indicato qui sotto:


--- Codice: ---
 
//Dichiarazione orignale
  //TcheckVatPortType_Proxy=class(TBaseProxy,urn_ec_europa_eu_taxud_vies_services_checkVat_types.checkVatPortType,urn_ec_europa_eu_taxud_vies_services_checkVat_types.checkVatPortTypeEasy)

//Dichiarazione corretta
  TcheckVatPortType_Proxy=class(TBaseProxy, checkVatService.checkVatPortType, CheckVatService.checkVatPortTypeEasy)
--- Termina codice ---

e alla riga 69 (o giù di li) sempre dello stesso file:


--- Codice: ---
class function TcheckVatPortType_Proxy.GetServiceType() : PTypeInfo;
begin
  result := TypeInfo(checkVatService.checkVatPortType);
end;

--- Termina codice ---

Ultima cosa: l'immisione della partita IVA è:

 codice paese (le due lettere internazionali, per l'Italia è IT)
 SPAZIO
 PARTITA IVA

Ciao

Ettore Cicinelli:
Grazie infinite per la sollecita risposta, ma avevo già fatto quasi tutto come hai detto, non avevo collegato soltanto i wrapper generati con l'opzione "Compilatore/Percorsi", ma li avevo riposti nella stessa dir del progetto e li avevo lanciati manualmente. Comunque anche così ottengo sempre i 2 errori che avevo detto nel precedente nella unit checkVatService_proxy.
Grazie comunque e se vi sovviene altro alla soluzione del problema ve nesarei grato.

Navigazione

[0] Indice dei post

[#] Pagina successiva

[*] Pagina precedente

Vai alla versione completa