Ciao a tutti,
mi rendo conto che la richiesta in corso non e' tra le piu' facili da
soddisfare in quanto i parametri richiesti per le prove non sono di dominio
pubblico.
Quindi gli eventuali test, da farsi dietro i vostri suggerimenti (che
seguiro' scrupolosamente), saranno fatti in seguito.
Quello che e' pubblico e' il sito di farmaclick dove si trovano i file
originali wsdl che e'
http://www.farmaclick.it/I-servizi-documentazione_0204.html
In linea ci sono 3 livelli diversi di standard pubblicati
2005
2008
2010
Quello maggiormente in uso e' il 2005, in pratica _anche_ il 2005 puo'
essere usato sui server che, di fatto, utilizzano il 2010.
Prima di procedere alla richiesta di un ddt, si deve fare la procedura di
login per ottenere un ID di sessione
procedure TFRL.OttieniID;
Var LogIn : LoginInputBean; // nel file importato da wsdl
importer
LogInOutput : LoginOutputBean;
CF : ArrayOf_soapenc_string;
FornitoriBean : ArrayOf_tns1_FornitoreBean;
I,B : Integer;
S : string;
begin
MM1.Clear; // TMemo
SetLength(CF,1);
CF[0]:='';
LogIn:=LoginInputBean.Create;
LogIn.nomeTerminale:='01';
LogIn.userName:='UserName'; // UserName usato per quel fornitore di
servizio
LogIn.password:='Password'; // Password
LogIn.arrayCodiciFornitori:=CF;
LogInOutput:=(HTLog As farmaclick2005001).FCKLogin(LogIn); //
HTLog=THTTPRIO
if LogInOutput.esitoServizio=0 then
begin
FornitoriBean:=LogInOutput.arrayFornitori;
for I:=0 to High(FornitoriBean) do
begin
SessionID:=FornitoriBean[I].IDSessione; // E' sempre lo stesso ....
non cambia
MM1.Lines.Add('ID Sessione: ' + FornitoriBean[I].IDSessione);
MM1.Lines.Add('CAP: ' + FornitoriBean[I].cap);
MM1.Lines.Add('CODICE: ' + FornitoriBean[I].codice);
MM1.Lines.Add('CODICE INTERNO: ' +
FornitoriBean[I].codiceInternoGrossista);
MM1.Lines.Add('Nodo Principale: ' +
FornitoriBean[I].indirizzoNodoPrincipale);
MM1.Lines.Add('Servizzi');
for B:=0 to High(FornitoriBean[I].arrayServiziAttivi) do
begin
MM1.Lines.Add(IntToStr(B)+' - ' +
FornitoriBean[I].arrayServiziAttivi[B]);
end;
MM1.Lines.Add('');
end;
end;
FreeAndNil(LogIn);
MM1.Update;
end;
Questa procedura funziona benissimo !!!
L'ID di sessione 'e salvato in SessionID
Qui la procedura per richiedere il documento elettronico ....
procedure TFRL.RichiediDocumento;
var RInDocumento : RichiestaDocumentoInputBean; // nel file importato da
wsdl importer
ROutDocumento : RichiestaDocumentoOutputBean;
DT : TXSDateTime;
begin
MM1.Lines.Add('');
MM1.Lines.Add('Bolla Elettronica');
MM1.Lines.Add('');
RInDocumento:=RichiestaDocumentoInputBean.Create;
RInDocumento.dataDocumento:=TXSDateTime.Create;
// RInDocumento.dataDocumento.AsDateTime:=StrToDate('02/05/2013/');
// RInDocumento.numeroDocumento:=''; // credo sia il numero di bolla ....
ma non ne sono certo !!
RInDocumento.IDSessione:=SessionID; // ottenuto con la procedura sopra
indicata
RInDocumento.codiceFornitore:='Pippo'; // In realta' e' il nome del
fornitore del servizio
DT:=TXSDateTime.Create;
DT.AsDateTime :=Date;
RInDocumento.dataDocumento:=DT;
RInDocumento.numeroDocumento:=''; // Numero del documento, ma puo' essere
null
RInDocumento.descrizioneArticoli:=True;
RInDocumento.dataContenitori:=True;
RInDocumento.siglaDocumento:=''; // anche questo come il precedente
RInDocumento.tipoDocumento:=1;
ROutDocumento:=(HTDoc as
farmaclick2005001).FCKRichiestaDocumento(RInDocumento);
MM1.Lines.Add('Esito Servizio: ' + IntToStr(ROutDocumento.esitoServizio));
// Restituisce SEMPRE errore 10, ovvero errore interno server farmaclick
RInDocumento.dataDocumento.Free;
RInDocumento.dataDocumento:=nil;
FreeAndNil(RInDocumento);
// DT.Free // qui mi da un errore ... scusate .... non lo scritto !!!!
If Assigned(DT) then DT:=nil; // e' corretto fare cosi' ???
end;
In pratica non invia neanche la richiesta al server.
Ovviamente ho cercato lumi al servizio assistenza del "fornitore" il quale
mi ha risposto che non conoscono i formati wsdl e non sanno come vanno
configurati (sempre che non sia una risposta cortese per evitare di dirmi
.... non romprere !!!!).
Sempre in delphi xe 2.
qualche suggerimento ???
Grazie
Ciao
Daniele