Delphi Can
Web Servis (WDSL) veri çekmeye çalışıyorum - Baskı Önizleme

+- Delphi Can (https://www.delphican.com)
+-- Forum: Delphi (https://www.delphican.com/forumdisplay.php?fid=3)
+--- Forum: Genel Programlama (https://www.delphican.com/forumdisplay.php?fid=6)
+--- Konu Başlığı: Web Servis (WDSL) veri çekmeye çalışıyorum (/showthread.php?tid=6582)



Web Servis (WDSL) veri çekmeye çalışıyorum - KUNTAY - 30-01-2022

Web servis dökümanında örnek olarak fatura kayıtlarını çekmek için bir örnek vermişler bu örnek ve WDSL import ettiğim şekle göre. 


 Döküman da verilen örnek :
Kod:
SalesPurchase sService=new SalesPurchase();
InvoiceSearchParameter sSearchParam=new InvoiceSearchParameter();
sSearchParam.InvoiceNumber =”1234567”;
SalesPurchaseService.InvoiceParameter[] sParams= sService.SalesInvoiceSearch (sSearchParam,”Authorization_Key_Değeri”, ”Active_Company_Kodu”,”Active_Branch_Kodu”);

  Kendi Yazdığım Delphi 10.4 kodlarım :
Kod:
var
SearchParam : InvoiceSearchParameter;
Fatura_List : ArrayOfInvoiceParameter2;
ilktarih,sontarih : TXSDateTime;

begin

ilktarih:=TXSDateTime.Create;
sontarih:=TXSDateTime.Create;
ilktarih.AsDateTime:=StrToDate('01.01.2022');
sontarih.AsDateTime:=StrToDate('31.01.2022');
SearchParam.BeginDate:=ilktarih;
SearchParam.EndDate:=sontarih;
Fatura_List:= GetSalesPurchaseSoap.SalesInvoiceSearch(SearchParam, Key, 'XXXX','XXXXX');

end;

Çalıştırınca hata alıyorum direk. istediğim fatura_list dizesine faturaları eklemek.

Aşağıda WDSL importtan gelen değerler.

Kod:
function  SalesInvoiceSearch(const SearchParameter: InvoiceSearchParameter; const AuthorizationKey: string; const ActiveCompany: string; const ActiveBranch: string): ArrayOfInvoiceParameter2; stdcall;


Kod:
// ************************************************************************ //
 // XML       : InvoiceSearchParameter, global, <complexType>
 // Namespace : http://tempuri.org/
 // ************************************************************************ //
 InvoiceSearchParameter = class(InvoiceParameter2)
 private
   FBeginDate: TXSDateTime;
   FEndDate: TXSDateTime;
   FBeginDateTime: TXSDateTime;
   FEndDateTime: TXSDateTime;
   FBeginDocumentDate: TXSDateTime;
   FEndDocumentDate: TXSDateTime;
 public
   destructor Destroy; override;
 published
   property BeginDate:         TXSDateTime  Index (IS_NLBL) read FBeginDate write FBeginDate;
   property EndDate:           TXSDateTime  Index (IS_NLBL) read FEndDate write FEndDate;
   property BeginDateTime:     TXSDateTime  Index (IS_NLBL) read FBeginDateTime write FBeginDateTime;
   property EndDateTime:       TXSDateTime  Index (IS_NLBL) read FEndDateTime write FEndDateTime;
   property BeginDocumentDate: TXSDateTime  Index (IS_NLBL) read FBeginDocumentDate write FBeginDocumentDate;
   property EndDocumentDate:   TXSDateTime  Index (IS_NLBL) read FEndDocumentDate write FEndDocumentDate;
 end;

 ArrayOfInvoiceParameter2 = array of InvoiceParameter2;   { "http://tempuri.org/"[GblCplx] }
 ArrayOfInvoiceParameter =  type ArrayOfInvoiceParameter2;      { "http://tempuri.org/"[GblElm] }

Kod:
// ************************************************************************ //
 // XML       : InvoiceParameter, global, <complexType>
 // Namespace : http://tempuri.org/
 // ************************************************************************ //
 InvoiceParameter2 = class(BaseParameter)
 private
   FLines: ArrayOfInvoiceLineParameter;
   FLines_Specified: boolean;
   FDiscounts: ArrayOfInvoiceDiscountParameter;
   FDiscounts_Specified: boolean;
   FRefDocuments: ArrayOfInvoiceRefDocumentParameter;
   FRefDocuments_Specified: boolean;
   FDiscountItemDetails: ArrayOfInvoiceDiscountItemDetailParameter;
   FDiscountItemDetails_Specified: boolean;
   FPaymentPlans: ArrayOfInvoicePaymentPlanParameter;
   FPaymentPlans_Specified: boolean;
   FDiscountPrints: ArrayOfInvoiceDiscountPrintParameter;
   FDiscountPrints_Specified: boolean;
   FProgressPayments: InvoiceProgressPaymentParameter;
   FProgressPayments_Specified: boolean;
   FInvoiceNumber: string;
   FInvoiceNumber_Specified: boolean;

   Çok uzun bir liste burada kestim ben..



Web Servis (WDSL) veri çekmeye çalışıyorum - 3ddark - 31-01-2022

Ne hatası aldığını yazmamışsın. Ayrıca gördüğüm kadarıyla SearchParam : InvoiceSearchParameter; sınıfını create etmemişsin bundan olabilir mi?
SearchParam := InvoiceSearchParameter.Create(); gibi


Cvp: Web Servis (WDSL) veri çekmeye çalışıyorum - KUNTAY - 01-02-2022

(31-01-2022, Saat: 08:54)3ddark Adlı Kullanıcıdan Alıntı: Ne hatası aldığını yazmamışsın. Ayrıca gördüğüm kadarıyla SearchParam : InvoiceSearchParameter; sınıfını create etmemişsin bundan olabilir mi?
SearchParam := InvoiceSearchParameter.Create(); gibi

Sınıfı create edince çalıştı, 
 
dizeye verileri çekmeyi başardımmı onuda bilmiyorum bir hata almıyorum

test etmek için 

Kod:
Edit1.Text:=Fatura_List[0].InvoiceNumber;
   

access vialation şeklinde bir hata alıyorum.


Web Servis (WDSL) veri çekmeye çalışıyorum - 3ddark - 01-02-2022

Dönen sonucunuzu (Fatura_List) debug edin. Inspect ile bakın bence birşeyler geliyor fakat farklı erişim kısmında sorununuz olabilir veya tip hatanız olabilir.
Sonuç içinde hata mesajı veya uyarı gönderilmiş olabilir. InvoiceParameter2 -> BaseParameter sınıfından miras almış. Belki sunucu yanıtı bu BaseParameter içinde ortak olan mesaj hata uyarıları gönderiyor olabilir.

En uygunu sizin bunu Debug ile gelen sonucu ayrıntılı olarak incelemenizdir.


Cvp: Web Servis (WDSL) veri çekmeye çalışıyorum - KUNTAY - 02-02-2022

(01-02-2022, Saat: 08:27)3ddark Adlı Kullanıcıdan Alıntı: Dönen sonucunuzu (Fatura_List) debug edin. Inspect ile bakın bence birşeyler geliyor fakat farklı erişim kısmında sorununuz olabilir veya tip hatanız olabilir.
Sonuç içinde hata mesajı veya uyarı gönderilmiş olabilir. InvoiceParameter2 -> BaseParameter sınıfından miras almış. Belki sunucu yanıtı bu BaseParameter içinde ortak olan mesaj hata uyarıları gönderiyor olabilir.

En uygunu sizin bunu Debug ile gelen sonucu ayrıntılı olarak incelemenizdir.

Debug edip Inspect ile bakınca boş  Evaluate ile bakınca 0 değeri var. 

Baseparameter  bu sınıftan miras almış ama ben bu sınıfı nasıl kontrol edebilirim fatura_list bomboş geliyor.

Kod:
 BaseParameter = class(TRemotable)
 private
   FRecordState: string;
   FRecordState_Specified: boolean;
   FCode: string;
   FCode_Specified: boolean;
   FDescription1: string;
   FDescription1_Specified: boolean;
   FBranchId: string;
   FBranchId_Specified: boolean;
   FCompanyId: string;
   FCompanyId_Specified: boolean;
   FCreatedDateTime: TXSDateTime;
   procedure SetRecordState(Index: Integer; const Astring: string);
   function  RecordState_Specified(Index: Integer): boolean;
   procedure SetCode(Index: Integer; const Astring: string);
   function  Code_Specified(Index: Integer): boolean;
   procedure SetDescription1(Index: Integer; const Astring: string);
   function  Description1_Specified(Index: Integer): boolean;
   procedure SetBranchId(Index: Integer; const Astring: string);
   function  BranchId_Specified(Index: Integer): boolean;
   procedure SetCompanyId(Index: Integer; const Astring: string);
   function  CompanyId_Specified(Index: Integer): boolean;
 public
   destructor Destroy; override;
 published
   property RecordState:     string       Index (IS_OPTN) read FRecordState write SetRecordState stored RecordState_Specified;
   property Code:            string       Index (IS_OPTN) read FCode write SetCode stored Code_Specified;
   property Description1:    string       Index (IS_OPTN) read FDescription1 write SetDescription1 stored Description1_Specified;
   property BranchId:        string       Index (IS_OPTN) read FBranchId write SetBranchId stored BranchId_Specified;
   property CompanyId:       string       Index (IS_OPTN) read FCompanyId write SetCompanyId stored CompanyId_Specified;
   property CreatedDateTime: TXSDateTime  Index (IS_NLBL) read FCreatedDateTime write FCreatedDateTime;
 end;



Web Servis (WDSL) veri çekmeye çalışıyorum - 3ddark - 02-02-2022

Dışarıdan küçük bir kod parçası üzerinden yorum yapması zor. Ama hatasız sonuç alıyorsanız.
Parametre kısmında hatanız veya girdiğiniz parametreye uyan sunucu tarafından kayıt olmayabilir.
Tarih formatını sunucu farklı kullanıyor olabilir.
Ayrıca sunucu üzerinden bildiğiniz bir kaydı fatura numarası ile çağırın.

Bunun için SOAP Servis dokümanı varsa bunu iyice okuyun.


Cvp: Web Servis (WDSL) veri çekmeye çalışıyorum - KUNTAY - 03-02-2022

(02-02-2022, Saat: 08:07)3ddark Adlı Kullanıcıdan Alıntı: Dışarıdan küçük bir kod parçası üzerinden yorum yapması zor. Ama hatasız sonuç alıyorsanız.
Parametre kısmında hatanız veya girdiğiniz parametreye uyan sunucu tarafından kayıt olmayabilir.
Tarih formatını sunucu farklı kullanıyor olabilir.
Ayrıca sunucu üzerinden bildiğiniz bir kaydı fatura numarası ile çağırın.

Bunun için SOAP Servis dokümanı varsa bunu iyice okuyun.

Bende sizinle aynı fikirdeyim şuan acaba girdiğim paramatredeki tarih de bir hata var ve boş kayıt mı dönüyor bana diye düşündüm. 

bu gün firmadan fatura numrası alıp dediğiniz gibi bir test yapacağım sonuç gelirse parametre değerlerinde bir hata yapıyor olabilirim. 

SAP programı üzerinde işlem yapan bir web servis bu parametre hatası olabilir dediğiniz gibi.


Web Servis (WDSL) veri çekmeye çalışıyorum - mkysoft - 03-02-2022

SAP tarafinda tarih formati genelde 2022-02-03 seklindedir, bazen de direk 20220203 seklinde yayinlanir.


Cvp: Web Servis (WDSL) veri çekmeye çalışıyorum - KUNTAY - 06-02-2022

(02-02-2022, Saat: 08:07)3ddark Adlı Kullanıcıdan Alıntı: Dışarıdan küçük bir kod parçası üzerinden yorum yapması zor. Ama hatasız sonuç alıyorsanız.
Parametre kısmında hatanız veya girdiğiniz parametreye uyan sunucu tarafından kayıt olmayabilir.
Tarih formatını sunucu farklı kullanıyor olabilir.
Ayrıca sunucu üzerinden bildiğiniz bir kaydı fatura numarası ile çağırın.

Bunun için SOAP Servis dokümanı varsa bunu iyice okuyun.

Direk bir fatura numarası ile veri çekmeyi denedim hata vermiyor ama kaydın içi boş geliyor. 
Servis adresi incelmek isterseniz : https://vp.golfdondurma.com.tr/SAASWebService/Sales/SalesPurchase.asmx

Kod:
var
SParams : InvoiceParameter2;
begin

SParams := InvoiceParameter.Create;
SParams := GetSalesPurchaseSoap.SalesGet('2022020111588959', Key, 'XXXXX','XXXX');
Edit2.Text := sparams.InvoiceNumber;
end;

yukarıdaki tek fatura kaydı sorgulamak için servis dökümanında yazan 

SalesGet() fonksiyonu ise, parametre olarak fatura numarası, AuthorizationKey, ActiveCompany ve ActiveBranch parametrelerini almaktadır. Bu fonksiyon, sadece fatura numarası ile arama yapılabildiği için tek bir satış verisini tutan InvoiceParameter classı döndürmektedir. 

Örnek Kod: 
SalesPurchase sService=new SalesPurchase(); 
SalesPurchaseService.InvoiceParameter iParam= sService. SalesGet(“Verisi_Aranacak_Satış_Verisi_Fatura_Numarası”,”Authorization_Key_Değeri”, ”Active_Company_Kodu”,”Active_Branch_Kodu”);