Tüm Platformlar için Hızlı Uygulama Geliştirme Kitabı... Delphi

Konuyu Paylaş : facebook gplus twitter

Konuyu Oyla:
  • Derecelendirme: 5/5 - 1 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Servis (wsdl) dönen değeri işleme
#1
Merhaba arkadaşlar, e-fatura için bir entegratör ile iletişime geçmiştim. Bağlantı ve metod ların gönderimi ve geri dönüşleri alabiliyorum (httprio, d7 ile) fakat şöyle bir fonksiyon ve dönen bir değer var bir türlü value değerlerine erişemedim. Aşağıda fonksiyon ve dönen tipleri yazıyorum.

    
function  GetEInvoiceUsers(const userInfo: UserInformation; const pagination: PagedQueryContext): SystemUsersResponse; stdcall;
/////////////////////////////////////////////////////////////////////////
SystemUsersResponse  = class;
/////////////////////////////////////////////////////////////////////////
  SystemUsersResponse = class(Response)
  private
    FValue: PagedResponseOfSystemUser;
  public
    destructor Destroy; override;
  published
    property Value: PagedResponseOfSystemUser read FValue write FValue;
  end;
////////////////////////////////////////////////////////////////////////

PagedResponseOfSystemUser = class;
/////////////////////////////////////////////////////////////////////////
  PagedResponseOfSystemUser = class(TRemotable)
  private
    FPageIndex: Integer;
    FPageSize: Integer;
    FTotalCount: Integer;
    FTotalPages: Integer;
    FItems: Items;
  public
    constructor Create; override;
    destructor Destroy; override;
    function   GetInvoiceDataArray(Index: Integer): InvoiceData;
    function   GetInvoiceDataArrayLength: Integer;
    property   InvoiceDataArray[Index: Integer]: InvoiceData read GetInvoiceDataArray; default;
    property   Len: Integer read GetInvoiceDataArrayLength;
  published
    property PageIndex: Integer read FPageIndex write FPageIndex stored AS_ATTRIBUTE;
    property PageSize: Integer read FPageSize write FPageSize stored AS_ATTRIBUTE;
    property TotalCount: Integer read FTotalCount write FTotalCount stored AS_ATTRIBUTE;
    property TotalPages: Integer read FTotalPages write FTotalPages stored AS_ATTRIBUTE;
    property Items: Items read FItems write FItems;
  end;
//////////////////////////////////////////////

  InvoiceData = class(TRemotable)
  private
    FData: TByteDynArray;
    FLocalDocumentId: WideString;
    FExtraInformation: WideString;
    FInvoiceId: WideString;
  published
    property Data: TByteDynArray read FData write FData;
    property LocalDocumentId: WideString read FLocalDocumentId write FLocalDocumentId stored AS_ATTRIBUTE;
    property ExtraInformation: WideString read FExtraInformation write FExtraInformation stored AS_ATTRIBUTE;
    property InvoiceId: WideString read FInvoiceId write FInvoiceId stored AS_ATTRIBUTE;
  end;

  Items      = array of InvoiceData;            { "http://tempuri.org/" }

TotalCount, TotalPages gibi değerleri okuyabiliyorum fakat şu value.InvoiceDataArray[x]  dolu gelmiyor yada ben okuyamıyorum. Yazdığım kod;

    
var
userInfo:UserInformation;
sayfala : PagedQueryContext;
servis : IBasicIntegration;
sysusers : systemUsersResponse; // PagedResponseOfSystemUser

X:INTEGER;
begin
userInfo  := UserInformation.Create;
sayfala := PagedQueryContext.Create;
sysusers := SystemUsersResponse.Create;

 try
   HTTPRIO1.HTTPWebNode.UseUTF8InHeader := True;
   Servis := GetIBasicIntegration(False, 'http://efatura-test.uyumsoft.com.tr/Services/BasicIntegration', HTTPRIO1);
    userInfo.Username:='Uyumsoft'; // test user
    userInfo.Password:='Uyumsoft'; // test pass
     sayfala.PageIndex:=1;
     sayfala.PageSize :=1;


sysusers:=Servis.GetEInvoiceUsers(userInfo, sayfala);

memo1.Text:='njt - T.Count : '+INTTOSTR(sysusers.Value.TotalCount)+' T.Pages : '+INTTOSTR(sysusers.Value.TotalPages);

For X:=0 To 19 // her defasında 20 kayıt dönüyor
    Do Begin
MEMO1.Lines.Add(INTTOSTR(X)+' - '+sysusers.Value.InvoiceDataArray[x].InvoiceId); // sürekli boş dönüyor
       End;
  except
  ShowMessage('hata');
  end;

aynı servise soapuni ile bağlanınca sonuçlar gayet düzgün dönüyor, aşağıda çıktısı var.
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
  <s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
     <GetEInvoiceUsersResponse xmlns="http://tempuri.org/">
        <GetEInvoiceUsersResult IsSucceded="true">
           <Value PageIndex="1" PageSize="20" TotalCount="6392" TotalPages="320">

              <Items Identifier="1111111011" PostboxAlias="defaultpk" Title="xxx Test Kullanıcısı" Type="Özel" SystemCreateDate="2011-01-28T17:19:53" FirstCreateDate="2011-01-28T17:19:53" Enabled="true"/>
              <Items Identifier="1111111012" PostboxAlias="defaultpk" Title="xxx Test Kullanıcısı" Type="Özel" SystemCreateDate="2011-01-31T09:13:49" FirstCreateDate="2011-01-31T09:13:49" Enabled="true"/>
              <Items Identifier="1111111013" PostboxAlias="defaultpk" Title="xxx Test Kullanıcısı" Type="Özel" SystemCreateDate="2011-12-15T12:10:29" FirstCreateDate="2011-02-15T10:28:50" Enabled="true"/>
              <Items Identifier="1111111014" PostboxAlias="defaultpk" Title="xxx Test Kullanıcısı" Type="Özel" SystemCreateDate="2011-02-16T14:36:39" FirstCreateDate="2011-02-16T14:36:39" Enabled="true"/>
              <Items Identifier="1111111015" PostboxAlias="defaultpk" Title="xxx Test Kullanıcısı" Type="Özel" SystemCreateDate="2011-03-21T10:27:40" FirstCreateDate="2011-03-21T10:27:40" Enabled="true"/>
              <Items Identifier="1111111016" PostboxAlias="defaultpk" Title="xxx Test Kullanıcısı" Type="Özel" SystemCreateDate="2011-03-21T10:55:05" FirstCreateDate="2011-03-21T10:55:05" Enabled="true"/>
              <Items Identifier="1111111018" PostboxAlias="defaultpk" Title="xxx Test Kullanıcısı" Type="Özel" SystemCreateDate="2011-05-30T15:51:16" FirstCreateDate="2011-05-30T15:51:16" Enabled="true"/>
              <Items Identifier="1111111019" PostboxAlias="defaultpk" Title="xxx Test Kullanıcısı" Type="Özel" SystemCreateDate="2011-06-16T14:19:35" FirstCreateDate="2011-06-16T14:19:35" Enabled="true"/>
              <Items Identifier="1111111020" PostboxAlias="defaultpk" Title="xxx Test Kullanıcısı" Type="Özel" SystemCreateDate="2011-06-16T15:50:12" FirstCreateDate="2011-06-16T14:55:14" Enabled="true"/>
              <Items Identifier="1111111021" PostboxAlias="defaultpk" Title="xxx Test Kullanıcısı" Type="Özel" SystemCreateDate="2011-07-06T09:37:29" FirstCreateDate="2011-06-27T10:35:23" Enabled="true"/>
              <Items Identifier="1111111022" PostboxAlias="defaultpk" Title="xxx Test Kullanıcısı" Type="Özel" SystemCreateDate="2011-07-06T09:38:40" FirstCreateDate="2011-07-05T15:51:45" Enabled="true"/>
              <Items Identifier="1111111023" PostboxAlias="defaultpk" Title="xxx Test Kullanıcısı" Type="Özel" SystemCreateDate="2011-07-18T14:04:13" FirstCreateDate="2011-07-18T14:04:13" Enabled="true"/>
              <Items Identifier="1111111024" PostboxAlias="defaultpk" Title="xxx Test Kullanıcısı" Type="Özel" SystemCreateDate="2011-07-28T09:23:06" FirstCreateDate="2011-07-28T09:23:06" Enabled="true"/>
              <Items Identifier="1111111025" PostboxAlias="defaultpk" Title="xxx Test Kullanıcısı" Type="Özel" SystemCreateDate="2011-10-07T11:19:25" FirstCreateDate="2011-10-07T11:19:25" Enabled="true"/>
              <Items Identifier="1111111026" PostboxAlias="defaultpk" Title="xxx Test Kullanıcısı" Type="Özel" SystemCreateDate="2011-10-10T13:54:33" FirstCreateDate="2011-10-10T13:54:33" Enabled="true"/>
              <Items Identifier="1111111027" PostboxAlias="defaultpk" Title="xxx Test Kullanıcısı" Type="Özel" SystemCreateDate="2011-11-23T15:13:41" FirstCreateDate="2011-11-23T15:13:41" Enabled="true"/>
              <Items Identifier="1111111028" PostboxAlias="defaultpk" Title="xxx Test Kullanıcısı" Type="Özel" SystemCreateDate="2011-12-15T10:39:18" FirstCreateDate="2011-12-15T10:39:18" Enabled="true"/>
              <Items Identifier="1111111029" PostboxAlias="defaultpk" Title="xxx Test Kullanıcısı" Type="Özel" SystemCreateDate="2011-12-20T16:49:07" FirstCreateDate="2011-12-20T16:49:07" Enabled="true"/>
              <Items Identifier="1111111030" PostboxAlias="defaultpk" Title="xxx Test Kullanıcısı" Type="Özel" SystemCreateDate="2011-12-28T16:36:39" FirstCreateDate="2011-12-28T16:36:39" Enabled="true"/>
              <Items Identifier="1111111031" PostboxAlias="defaultpk" Title="xxx Test Kullanıcısı" Type="Özel" SystemCreateDate="2012-01-02T17:06:31" FirstCreateDate="2012-01-02T17:06:31" Enabled="true"/>
           </Value>
        </GetEInvoiceUsersResult>
     </GetEInvoiceUsersResponse>
  </s:Body>
</s:Envelope>
Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
WWW
Cevapla
#2
sysusers.Value.InvoiceDataArray[x].InvoiceId ile erişmek yerine sysusers.Value.Items[x].InvoiceId denediniz mi ?
My name is nobody.
WWW
Cevapla
#3
(19-08-2017, Saat: 12:42)ismailkocacan Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye Olsysusers.Value.InvoiceDataArray[x].InvoiceId ile erişmek yerine sysusers.Value.Items[x].InvoiceId denediniz mi ?

Denedim hocam, hepsi boş geliyor Sad

Items zaten
Items = array of InvoiceData; şeklinde
oda
TByteDynArray diye bi tip.
Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
WWW
Cevapla
#4
Gerekli test hesap bilgilerini verirseniz sizin için bakabilirim. Ayrıca şunu da belirteyim.. Fiddler 4 ile takip edin gerçekten de boş geliyor olabilir.
Amatör Küme Bilgisayar Programcısı
WWW
Cevapla
#5
Delphi 7 artık web servis işleri için WsdlImporter'ı çok eski sayılır.
Yanılmıyorsam en azından 64-bit desteğinin geldiği XE2 sürümüne geçmek daha faydalı olacaktır.

Berlin 10.1.2 sürümü ile web servisi import edip yazdığınız kodu test ettiğimde veriler düzgün geliyor.
Ekte benim import ettiğim wsdl'in uniti mevcut.30100 satır olduğunu için buraya yazmadım.
Delphi 7'de kendi import ettiğiniz unit ile ile karşılaştırabilirsiniz.
7N471m.png

Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
Alıntı:Both the client application and server application must register a TRemotable descendant with the remotable class registry before they can use it. To register a remotable class, use the RegisterXSClass method of the object that the global RemTypeRegistry function returns.

Problem import edilen wsdl unit'inin en alt kısmında initialization bölümünde tip bilgilerinin tanıtıldığı(register) kısmında olabilir.
Sizin Delphi 7 ile import ettiğiniz unit'te tip bilgileri eksik ya da yanlış register edilmiş olabilir.Dolayısı ile web servisten dönen xml veriler ilgili sınıfların alanlarına/property'lerine map edilemiyor olabilir.Ekteki unit'i incelediğinizde çok fazla tipin register edildiğini görebilirsiniz.


Ek Dosyalar
.zip   BasicIntegration.zip (Dosya Boyutu: 104,28 KB / İndirme Sayısı: 14)
My name is nobody.
WWW
Cevapla
#6
Merhaba hocam, sorun dediğiniz gibi Delphi 7 kaynaklı olabilir. Register kısmında bir hata vardı onu düzelttim, aşağıdaki satırı register kısmının sonuna eklediğimde en azından sürekli kullanıcı adı ve şifre gönderilmedi hatası giderildi.

"InvRegistry.RegisterInvokeOptions(TypeInfo(IBasicIntegration), ioDocument);"

Ayrıca getsystemdate metodu sonuç döndürüyor. GetEnvoiceUsers fonksiyonuda PageIndex, PageSize, TotalCount, TotalPages değerlerini döndürüyor fakat items kısmına erişemiyorum bir türlü. Bunun yanında; HTTPRIO1AfterExecute olayında gelen stream i bir memoya aktarıp xml dosyayı görebiliyorum fakat kod ile bir türlü şu GetInvoiceDataArray kısmındaki Items lere erişemedim Sad Neyse olmadı xml parse yapıp deniycem.
Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
WWW
Cevapla
#7
Tekrar merhaba,
Daha önce yazdığım gibi HTTPRIO1AfterExecute olayında gelen stream i xml olarak kaydedip, onuda xmldocument nesnesine yükleyip istediğim değerleri almayı başardım. Şimdi iş wsdl unitindeki tüm metodlar için gerekli xml çözen kodları yazıp olayı sonuca bağlamak kaldı.
İlginiz için teşekkürler.
Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
WWW
Cevapla
#8
(21-08-2017, Saat: 08:58)esistem Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlMerhaba hocam, sorun dediğiniz gibi Delphi 7 kaynaklı olabilir. Register kısmında bir hata vardı onu düzelttim, aşağıdaki satırı register kısmının sonuna eklediğimde en azından sürekli kullanıcı adı ve şifre gönderilmedi hatası giderildi.

"InvRegistry.RegisterInvokeOptions(TypeInfo(IBasicIntegration), ioDocument);"

Ayrıca getsystemdate metodu sonuç döndürüyor. GetEnvoiceUsers fonksiyonuda PageIndex, PageSize, TotalCount, TotalPages değerlerini döndürüyor fakat items kısmına erişemiyorum bir türlü. Bunun yanında; HTTPRIO1AfterExecute olayında gelen stream i bir memoya aktarıp xml dosyayı görebiliyorum fakat kod ile bir türlü şu GetInvoiceDataArray kısmındaki Items lere erişemedim Sad Neyse olmadı xml parse yapıp deniycem.

Merahaba Hocam,
ulaşmak istediğiniz veriler 

Identifier
PostboxAlias
Title
Type
SystemCreateDate
FirstCreateDate
Enabled


ise aşağıdaki şekilde deneyebilir misiniz?

MEMO1.Lines.Add(INTTOSTR(X)+' - '+sysusers.Value.Items[x].Identifier+' - '+sysusers.Value.Items[x].Title);
Cevapla
#9
(21-08-2017, Saat: 11:11)Cyber Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlMerahaba Hocam,
ulaşmak istediğiniz veriler 

Identifier
PostboxAlias
Title
Type
SystemCreateDate
FirstCreateDate
Enabled


ise aşağıdaki şekilde deneyebilir misiniz?

MEMO1.Lines.Add(INTTOSTR(X)+' - '+sysusers.Value.Items[x].Identifier+' - '+sysusers.Value.Items[x].Title);

Items olarak maalesef veri getirmiyor, veya getiriyorda ben okuyamıyorum. Items TByteDynArray tipinde fakat bir türlü içeriğini okuyamıyorum. sizeof 4 byte fakat length 0 geliyor.
Daha doğrusu dönen tip PagedResponseOfSystemUser oda InvoiceData tipinde oda TByteDynArray tipinde fakat bir türlü veri göstermiyor.
Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
WWW
Cevapla
#10
Hocam WSDL dosyasını eğer delphi7 ile oluşturduysanız bu yüzden sıkıntı yaşayabilirsiniz, eksik tanımlamalar olmuş olabilir.
Sizin örneğiniz üzerinden söylediğim şekilde test ettiğimde 10.1 ile verilere erişim sağlanabiliyor.
Ekte 10.1 ile oluşturulmuş pas dosyası mevcut bu dosyayı bir karşılaştırın farklılıklar mevcut mu?

asdasdasdasd.png


Ek Dosyalar
.zip   BasicIntegration.zip (Dosya Boyutu: 99,67 KB / İndirme Sayısı: 7)
Cevapla

Konuyu Paylaş : facebook gplus twitter



Konu ile Alakalı Benzer Konular
Konular Yazar Yorumlar Okunma Son Yorum
  Web Servis Access Violation ahmet_sinav 6 134 Dün, Saat: 15:48
Son Yorum: ahmet_sinav
  delphi ile web servis yazmak. Kamuran Alpkaya 4 1.172 20-09-2018, Saat: 18:08
Son Yorum: Bay_Y
  Rest Web Servis Cookie Sıkıntısı Hk. satiuqea 7 201 31-08-2018, Saat: 17:36
Son Yorum: SimaWB
  [ÇÖZÜLDÜ]-cxDBPivotGrid Seçili Satır Alan Değeri Alma hi_selamlar 2 221 21-06-2018, Saat: 10:40
Son Yorum: hi_selamlar
  Delphi ile görüntü işleme narkotik 25 1.424 12-06-2018, Saat: 19:30
Son Yorum: narkotik



Konuyu Okuyanlar: 1 Ziyaretçi