Konuyu Oyla:
  • Derecelendirme: 4/5 - 1 oy
  • 1
  • 2
  • 3
  • 4
  • 5
WebService Response
#1
webservice'te 

function  TransactionList(const parameters: TransactionList): TransactionListResponse; stdcall;

adında bir fonksiyon var dönüş değeri aşağıdaki gibi

 
TransactionListResponse2 = array of TransactionResult;   { "http://sinerji-srv1/BKST_EXT.Services:BKST_EXT_READ_SERVICE"[Lit][GblCplx] }

TransactionListResponse =  type TransactionListResponse2;     { "http://sinerjisrv1/BKST_EXT.Services:BKST_EXT_READ_SERVICE"[Lit][GblElm] }

vcl(form) kısmında aşşağıdaki vermiş olduğum kodu yazdım ama hep hata veriyor arkadaşlar.Bunun nedeni ne olabilir?

procedure TFTBSGelenBildirimler.TBXItem21Click(Sender: TObject);
Var
Sorgu:TransactionList;
Service:BKST_EXT_READ_SERVICE_PortType;
BaslangicTarih,BitisTarih:TXSDateTime;
Cevap2:TransactionListResponse;
//Cevap2:TransactionListResponse;
begin
try
  Sorgu:=TransactionList.Create;
  BaslangicTarih:=TXSDateTime.Create;
  BitisTarih:=TXSDateTime.Create;

  Service:=GetBKST_EXT_READ_SERVICE_PortType(False,'',nil);
  Sorgu.GLN_PN:='00000000007';//Fdata.TBS_GLN;
  BaslangicTarih.AsDateTime:=EncodeDate(2017,01,01);
  BitisTarih.AsDateTime:=Now;
  Sorgu.StartDate:=BaslangicTarih;
  Sorgu.EndDate:=BitisTarih;
  //Sorgu.DocumentNumber:='11915';

  Cevap2:=Service.TransactionList(Sorgu);


  ShowMessage(Cevap2[0].RECEIVER);
except
  ShowMessage('hata');
end;
end;
Cevapla
#2
Ne hatası veriyor? Daha detaylı anlatırsanız , ve lütfen code kısımlarını delphi kodu tagları arasında yazın ki okunabilirliği artsın
Cevapla
#3
@malitutuncu
hak vererek hatanın olduğu satır ve hata metnini yazarsanız faydalı olur. 
Ek olarak test için 

Cevap2:=Service.TransactionList(Sorgu);

ile

ShowMessage(Cevap2[0].RECEIVER);

kısım(lar)ını // ile comment satırına dönüştürüp devre dışı bırakın. 
yerine alt satırına cevap2'ye aktarım olmaksızın

Service.TransactionList(Sorgu);
şeklinde test edin. 

Hata ortadan kalkıyorsa cevap2'nin tipinde soruna odaklanırsınız 

Aktarım olmaksızın yine hata veriyorsa Sorgu parametrenize yoğunlaşıp hatayı orada arayın. 

Hata ayıklama için önce parametreden sonra aktarım yapılan değişkenden kaynaklı sorunu ararsanız erkenden sonuca ulaşabilirsiniz. 
Saygılarımla
Muharrem ARMAN

guplouajuixjzfm15eqb.gif
Cevapla
#4
Sorunu çözdüm arkadaşlar aşağıdaki kodu showmessage kısmın üzerine yazdım sorun çözüldü ilgilendiğiniz için teşşekür ederim

Cevap:=Cevap2[0];
Cevapla
#5
Şöyle bir kod yazıyorum yukarıda uses da WS tanımlı parametrelerde doğru
SOAPUI'de denedim cevap geldi.
procedure TForm1.Button3Click(Sender: TObject);
var
servis:QueryDocumentWS;
cevapBig GrinocumentQueryResponse;
begin
servis:=GetQueryDocumentWS(False,hizliservis2,HTTPRIO1);
cevap:= servis.QueryOutboxDocument('Envelope_UUID','f661c25c-61ac-4a16-aa8e-5366b8117288','XML');
ShowMessage(cevap.stateExplanation);

end;

Ancak Delphi'de şöyle bir hata mesajı veriyor
[dcc32 Error]
AnaForm.pas(140): E2010 Incompatible types: 'InvoiceWS1.DocumentQueryResponse' and 'QueryDocumentWS1.DocumentQueryResponse'

Metot bilgileri:
3.png
Cevap yapı Bilgileri
2.png
Bizde bilirdik firavunun yanında olmayı, musa'nın haklı olduğunu bilmeseydik
Cevapla
#6
İyi çalışmalar. servis:=GetQueryDocumentWS; atamasında servis değişkeni GetQueryDocumentWS fonksiyonununun bulunduğu Unit'e ait değil. GetQueryDocumentWS fonksiyonu hangi unit ise değişkeni o unit altından tanımlamanız gerekmektedir. Hatta fonksiyonu da o Unit üzerinden çağırmakta fayda vardır. Mesela InvoiceWS1 içinde ise bunlar aşağıdaki gibi tanımlamakta ve çağırmakta fayda var.
var
servis:InvoiceWS1.QueryDocumentWS;
begin
  servis:=InvoiceWS1.GetQueryDocumentWS(False,hizliservis2,HTTPRIO1);
Kolay gelsin.
Cevapla




Konuyu Okuyanlar: 1 Ziyaretçi