HKS WebServis ArrayOfString2 Hatası

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
zagerx
Üye
Mesajlar: 20
Kayıt: 18 Ara 2010 02:42

HKS WebServis ArrayOfString2 Hatası

Mesaj gönderen zagerx »

Merhabalar Hal kayıt sistemi web servislerinin kullanımını çözmeye çalışıyorum il ilçe cins gibi bilgileri alabiliyorum şimdilik bir yerde takıldım (Bildirim servisindeki) tc veya vergi no gönderip kayıtlımı sıfatları nedir gibi bilgileri geri alacagım fakat "Istek.TcKimlikVergiNolar" alanına değer atayamıyorum heryolu denedim c# textbox direkt atamış ve olmuş bunun karşılığı delphide yokmudur. ilginize teşekkürler yardımlarınızı bekliyorum

var
servis :IBildirimService;
kisi :BaseRequestMessageOf_KayitliKisiSorguIstek;
kisicevap :BaseResponseMessageOf_KayitliKisiSorguCevap ;
I: Integer;
begin
try
memo1.Clear;
servis:= GetIBildirimService(false,'',HTTPRIO1);
kisi:= BaseRequestMessageOf_KayitliKisiSorguIstek.Create;
kisi.UserName:='xxxx';
kisi.Password:='xxxxxx';
kisi.ServicePassword:='!1QAZWSX';
kisi.Istek:=KayitliKisiSorguIstek.Create;
kisi.Istek.TcKimlikVergiNolar[0]:= '6290164516'; ******* kendi tc nomu veya şirket vno yu yazıyorum hep hata veriyor invalid read adress gibi
kisicevap:=servis.BildirimServisKayitliKisiSorgu(kisi);
for I:= 0 to kisicevap.Sonuc.TcKimlikVergiNolar.Len-1 do
begin
memo1.Lines.Add(kisicevap.Sonuc.TcKimlikVergiNolar.TcKimlikVergiNo);
end;
finally
kisi.Free;
end;
Kullanıcı avatarı
vkamadan
Kıdemli Üye
Mesajlar: 1935
Kayıt: 17 Mar 2004 03:52
Konum: Adapazarı
İletişim:

Re: HKS WebServis ArrayOfString2 Hatası

Mesaj gönderen vkamadan »

Merhaba ,
Sorun dinamik diziye boyut belirtmediğiniz için yaşanıyor.

Kod: Tümünü seç

kisi.Istek.TcKimlikVergiNolar[0]:= '6290164516'; ******* kendi tc nomu veya şirket vno yu yazıyorum hep hata veriyor invalid read adress gibi
SetLength ile TcKimlikVergiNolar ın boyunu belirtmelisiniz, fakat "Property" olarak tanımlı olduğu için doğrudan boyut belirtemezsiniz, öncelikle aynı tipte bir yerel değişken tanımlayın örneğin TcKimlikVergiNolar tipi TArrayOfString olsun örnek şu hale gelmeli,

Kod: Tümünü seç

var
 intTCVergiNolar : TArrayOfString ;
begin
..
.
SetLength(intTCVergiNolar , 1) ; // kaç adet kimlik atayacaksanız boyutu belirtin, ben 1 dedim
intTCVergiNolar[0] := '6290164516'; 
kisi.Istek.TcKimlikVergiNolar := intTCVergiNolar ;
..
.
end;
iyi çalışmalar.
Volkan KAMADAN
www.polisoft.com.tr
zagerx
Üye
Mesajlar: 20
Kayıt: 18 Ara 2010 02:42

Re: HKS WebServis ArrayOfString2 Hatası

Mesaj gönderen zagerx »

volkan bey ilginize teşekkürler ederim uzun bi süredir kişisel sorunlarımla uğraştığımdan
cevabınızı yeni gördüm dediğiniz gibi yapmaya çalıştım birtürlü olmadı servisteki tip tanımı şu şekilde

// ************************************************************************ //
// XML : ArrayOfstring, global, <complexType>
// Namespace : http://schemas.microsoft.com/2003/10/Se ... ion/Arrays
// ************************************************************************ //
ArrayOfstring2 = class(TRemotable)
private
Fstring_: Array_Of_string;
Fstring__Specified: boolean;
procedure Setstring_(Index: Integer; const AArray_Of_string: Array_Of_string);
function string__Specified(Index: Integer): boolean;
public
function GetstringArray(Index: Integer): string;
procedure SetstringArray(Index: Integer; const Item: string);
function GetstringArrayLength: Integer;
procedure SetstringArrayLength(Len: Integer);

property stringArray[Index: Integer]: string read GetstringArray write SetstringArray; default;
property Len: Integer read GetstringArrayLength write SetstringArrayLength;
published
property string_: Array_Of_string Index (IS_OPTN or IS_UNBD or IS_NLBL) read Fstring_ write Setstring_ stored string__Specified;
end;


// ************************************************************************ //
// XML : ArrayOfstring, global, <element>
// Namespace : http://schemas.microsoft.com/2003/10/Se ... ion/Arrays
// ************************************************************************ //
ArrayOfstring = class(ArrayOfstring2)
private
published
end;

arrayofstring2 tanımı yaptığımda SetLength () hataveriyor [DCC Error] Unit1.pas(96): E2008 Incompatible types ilginize teşekkürler

procedure TForm1.Button2Click(Sender: TObject);
var
servis :IBildirimService;
kisi :BaseRequestMessageOf_KayitliKisiSorguIstek;
kisicevap :BaseResponseMessageOf_KayitliKisiSorguCevap ;
I: Integer;
tcArray : ArrayOfstring2 ;
begin
try
memo1.Clear;
servis:= GetIBildirimService(false,'',nil);
kisi:= BaseRequestMessageOf_KayitliKisiSorguIstek.Create;
kisi.UserName:='444';
kisi.Password:='4444';
kisi.ServicePassword:='!1QAZWSX';
kisi.Istek:=KayitliKisiSorguIstek.Create;

SetLength(tcArray,1);
tcArray[0] := '444';
kisi.Istek.TcKimlikVergiNolar:=tcArray;

kisicevap:=servis.BildirimServisKayitliKisiSorgu(kisi);

for I:= 0 to kisicevap.Sonuc.TcKimlikVergiNolar.Len-1 do
begin
memo1.Lines.Add(kisicevap.Sonuc.TcKimlikVergiNolar.TcKimlikVergiNo);
end;
finally
kisi.Free;
end;
end;
Kullanıcı avatarı
vkamadan
Kıdemli Üye
Mesajlar: 1935
Kayıt: 17 Mar 2004 03:52
Konum: Adapazarı
İletişim:

Re: HKS WebServis ArrayOfString2 Hatası

Mesaj gönderen vkamadan »

merhaba ,
ArrayofString2, TRemotable single bir obje, yukarıda ki kodu yazarken ilk yazdığınız kodda yer alan URL den WSDL i import ederek kontrol etmiştim, (şuan kaldırmışısınız sanırım URL görünmüyor)
neyse BaseRequestMessageOf_KayitliKisiSorguIstek.istek.TcKimlikVergiNolar : TArrayOfString tipnde tanımlıydı.
Volkan KAMADAN
www.polisoft.com.tr
zagerx
Üye
Mesajlar: 20
Kayıt: 18 Ara 2010 02:42

Re: HKS WebServis ArrayOfString2 Hatası

Mesaj gönderen zagerx »

merhabalar servisteki tanım şu şekilde yapılmış bu kadar hızlı cevapladığınız için teşekkür ederim

// ************************************************************************ //
// XML : KayitliKisiSorguIstek, global, <complexType>
// Namespace : http://schemas.datacontract.org/2004/07 ... ceContract
// ************************************************************************ //
KayitliKisiSorguIstek2 = class(TRemotable)
private
FTcKimlikVergiNolar: ArrayOfstring2;
FTcKimlikVergiNolar_Specified: boolean;
procedure SetTcKimlikVergiNolar(Index: Integer; const AArrayOfstring2: ArrayOfstring2);
function TcKimlikVergiNolar_Specified(Index: Integer): boolean;
public
destructor Destroy; override;
published
property TcKimlikVergiNolar: ArrayOfstring2 Index (IS_OPTN or IS_NLBL) read FTcKimlikVergiNolar write SetTcKimlikVergiNolar stored TcKimlikVergiNolar_Specified;
end;
zagerx
Üye
Mesajlar: 20
Kayıt: 18 Ara 2010 02:42

Re: HKS WebServis ArrayOfString2 Hatası

Mesaj gönderen zagerx »

Kullanıcı avatarı
vkamadan
Kıdemli Üye
Mesajlar: 1935
Kayıt: 17 Mar 2004 03:52
Konum: Adapazarı
İletişim:

Re: HKS WebServis ArrayOfString2 Hatası

Mesaj gönderen vkamadan »

merhabalar ,
Yukarıdaki son örneğinizde ki istek nesnesinin tipi KayitliKisiSorguIstek şuan gönderdiğiniz sınıf ise KayitliKisiSorguIstek2 tipinde, öncelikle tiplerde anlaşmak lazım diye düşünüyorum. en sağlıklısı yazdığınız kod bloğunu ve WSDL den import ettiğiniz Interface in yer aldığı Uniti komple paylaşın, gerekirse URL leri gizleyin sonuçta sınıflara bakacağız sadece.
Volkan KAMADAN
www.polisoft.com.tr
zagerx
Üye
Mesajlar: 20
Kayıt: 18 Ara 2010 02:42

Re: HKS WebServis ArrayOfString2 Hatası

Mesaj gönderen zagerx »

özür dilerim hızlı cevap yazayım derken karıştırmış olabilirim
projenin sıkıştırılmış halini şu linke ekledim
http://www.upload.gen.tr/d.php/www/uDp0 ... p.rar.html
En son zagerx tarafından 14 Mar 2014 03:56 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Kullanıcı avatarı
vkamadan
Kıdemli Üye
Mesajlar: 1935
Kayıt: 17 Mar 2004 03:52
Konum: Adapazarı
İletişim:

Re: HKS WebServis ArrayOfString2 Hatası

Mesaj gönderen vkamadan »

gönderdiğiniz projede sadece aşağıdaki blok var ne yapak istediğiniz anlaşılmıyor, yani yukarıda konuşulanlara benzemiyor.

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
var
proxy :IGenelService;
istek :BaseRequestMessageOf_IllerIstek;
iller: IllerIstek;
cevap :BaseResponseMessageOf_IllerCevap ;
begin
 proxy.GenelServisIller(BaseRequestMessageOf_IllerIstek('6290065716','narPAK34','!1QAZWSX',Istek := IllerIstek()));
 cevap = proxy.GenelServisIller(istek);
end;

end.
Volkan KAMADAN
www.polisoft.com.tr
zagerx
Üye
Mesajlar: 20
Kayıt: 18 Ara 2010 02:42

Re: HKS WebServis ArrayOfString2 Hatası

Mesaj gönderen zagerx »

bu deneme projem o bloklar genel servisin kullanımını anlamak için yaptığım çalışmaların blogu bu sorumla alakası yok o kısım çalışıyor

button 2 in altinda yazan kodu inceledinizmi


procedure TForm1.Button2Click(Sender: TObject);
var
servis :IBildirimService;
kisi :BaseRequestMessageOf_KayitliKisiSorguIstek;
kisicevap :BaseResponseMessageOf_KayitliKisiSorguCevap ;
I: Integer;
tcArray : tArrayOfstring2 ;
begin
try
memo1.Clear;
servis:= GetIBildirimService(false,'',nil);
kisi:= BaseRequestMessageOf_KayitliKisiSorguIstek.Create;
kisi.UserName:='00';
kisi.Password:='00';
kisi.ServicePassword:='!1QAZWSX';
kisi.Istek:=KayitliKisiSorguIstek.Create;

tcArray.stringArray[0]:='00';
tcArray[1] := '00';
kisi.Istek.TcKimlikVergiNolar:=tcArray;

kisicevap:=servis.BildirimServisKayitliKisiSorgu(kisi);

for I:= 0 to kisicevap.Sonuc.TcKimlikVergiNolar.Len-1 do
begin
memo1.Lines.Add(kisicevap.Sonuc.TcKimlikVergiNolar.TcKimlikVergiNo);
end;
finally
kisi.Free;
end;
end;
En son zagerx tarafından 14 Mar 2014 03:45 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Kullanıcı avatarı
vkamadan
Kıdemli Üye
Mesajlar: 1935
Kayıt: 17 Mar 2004 03:52
Konum: Adapazarı
İletişim:

Re: HKS WebServis ArrayOfString2 Hatası

Mesaj gönderen vkamadan »

Gönderdiğiniz projede çalıştırmak istediğiniz metodu aşağıdaki gibi çalıştırabilirsiniz.

Kod: Tümünü seç

procedure TForm1.Button1Click(Sender: TObject);
var
proxy :IGenelService;
istek :BaseRequestMessageOf_IllerIstek;
cevap :BaseResponseMessageOf_IllerCevap ;
begin
  proxy := GetIGenelService ;

  istek := BaseRequestMessageOf_IllerIstek.Create ;

  istek.Istek := IllerIstek.Create;

  istek.UserName := '6290065716';
  istek.Password := 'narPAK34';
  istek.ServicePassword := '!1QAZWSX';


  cevap := proxy.GenelServisIller( istek ) ;
  ShowMessage( 'Dönen İl Sayısı : ' +  IntToStr( cevap.Sonuc.Iller.Len ));
  ShowMessage( 'ilk kayıt : ' +  cevap.Sonuc.Iller.GetIlDTO2Array(0).IlAdi );




end;

Volkan KAMADAN
www.polisoft.com.tr
zagerx
Üye
Mesajlar: 20
Kayıt: 18 Ara 2010 02:42

Re: HKS WebServis ArrayOfString2 Hatası

Mesaj gönderen zagerx »

unitin komplesini buraya yapıştırayım en iyisi gibi görünüyor
unit Unit1;

interface

uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Soap.InvokeRegistry, Soap.Rio, Soap.SOAPHTTPClient, Vcl.StdCtrls, cxGraphics, cxControls, cxLookAndFeels, cxLookAndFeelPainters, cxContainer, cxEdit,
dxSkinsCore, dxSkinBlack, dxSkinBlue, dxSkinBlueprint, dxSkinCaramel, dxSkinCoffee, dxSkinDarkRoom, dxSkinDarkSide, dxSkinDevExpressDarkStyle, dxSkinDevExpressStyle, dxSkinFoggy, dxSkinGlassOceans,
dxSkinHighContrast, dxSkiniMaginary, dxSkinLilian, dxSkinLiquidSky, dxSkinLondonLiquidSky, dxSkinMcSkin, dxSkinMoneyTwins, dxSkinOffice2007Black, dxSkinOffice2007Blue, dxSkinOffice2007Green,
dxSkinOffice2007Pink, dxSkinOffice2007Silver, dxSkinOffice2010Black, dxSkinOffice2010Blue, dxSkinOffice2010Silver, dxSkinPumpkin, dxSkinSeven, dxSkinSevenClassic, dxSkinSharp, dxSkinSharpPlus,
dxSkinSilver, dxSkinSpringTime, dxSkinStardust, dxSkinSummer2008, dxSkinTheAsphaltWorld, dxSkinsDefaultPainters, dxSkinValentine, dxSkinVS2010, dxSkinWhiteprint, dxSkinXmas2008Blue, cxMemo,
cxTextEdit,bildirimservice;

type
tArrayOfstring2=ArrayOfstring2;
TForm1 = class(TForm)
Button1: TButton;
HTTPRIO1: THTTPRIO;
ListBox1: TListBox;
iller: TComboBox;
ilceler: TComboBox;
Button2: TButton;
Edit1: TEdit;
Memo1: TMemo;
procedure Button1Click(Sender: TObject);
procedure illerChange(Sender: TObject);
procedure Button2Click(Sender: TObject);
private

{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

uses GenelService;
{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
proxy :IGenelService;
iliste :BaseRequestMessageOf_IllerIstek;
ilcevap :BaseResponseMessageOf_IllerCevap ;
I: Integer;
begin
try
iller.Items.Clear;
listbox1.Items.Clear;
proxy:= GetIGenelService(false,'',HTTPRIO1);
iliste:= BaseRequestMessageOf_IllerIstek.Create;
iliste.UserName:='00';
iliste.Password:='00';
iliste.ServicePassword:='!1QAZWSX';
iliste.Istek:=IllerIstek.Create;
ilcevap:=proxy.GenelServisIller(iliste);
for I:= 0 to ilcevap.Sonuc.Iller.Len-1 do
begin
Listbox1.Items.Append(ilcevap.Sonuc.Iller.IlAdi);
iller.Items.Add(inttostr(ilcevap.Sonuc.Iller.Id)+'-'+ ilcevap.Sonuc.Iller.IlAdi)
end;
finally
iliste.Free;
end;
end;
function sayibul(x:string): integer ;
var i:integer;y:string;
begin
for I := 1 to length(x) do
begin
if copy(x,i,1)='-' then break
else y:=copy(x,1,i);
end;
result:=strtoint(y);
end;


procedure TForm1.Button2Click(Sender: TObject);
var
servis :IBildirimService;
kisi :BaseRequestMessageOf_KayitliKisiSorguIstek;
kisicevap :BaseResponseMessageOf_KayitliKisiSorguCevap ;
I: Integer;
tcArray : tArrayOfstring2 ;
begin
try
memo1.Clear;
servis:= GetIBildirimService(false,'',nil);
kisi:= BaseRequestMessageOf_KayitliKisiSorguIstek.Create;
kisi.UserName:='00';
kisi.Password:='00';
kisi.ServicePassword:='!1QAZWSX';
kisi.Istek:=KayitliKisiSorguIstek.Create;

tcArray[1] := '30799674892';
kisi.Istek.TcKimlikVergiNolar:=tcArray;

kisicevap:=servis.BildirimServisKayitliKisiSorgu(kisi);

for I:= 0 to kisicevap.Sonuc.TcKimlikVergiNolar.Len-1 do
begin
memo1.Lines.Add(kisicevap.Sonuc.TcKimlikVergiNolar.TcKimlikVergiNo);
end;
finally
kisi.Free;
end;
end;


procedure TForm1.illerChange(Sender: TObject);
var
proxy :IGenelService;
ilceiste :BaseRequestMessageOf_IlcelerIstek;
ilcecevap :BaseResponseMessageOf_IlcelerCevap ;
I: Integer;
begin
try
ilceler.Items.Clear;
proxy:= GetIGenelService(false,'',HTTPRIO1);
ilceiste:= BaseRequestMessageOf_IlcelerIstek.Create;
ilceiste.UserName:='00';
ilceiste.Password:='00';
ilceiste.ServicePassword:='!1QAZWSX';
ilceiste.Istek:=IlcelerIstek.Create;
ilceiste.Istek.IlId:=sayibul(iller.Text);
ilcecevap:=proxy.GenelServisIlceler(ilceiste);
for I:= 0 to ilcecevap.Sonuc.Ilceler.Len-1 do
begin
Listbox1.Items.Append(ilcecevap.Sonuc.Ilceler.IlceAdi);
ilceler.Items.Add(ilcecevap.Sonuc.Ilceler.IlceAdi)
end;
finally
ilceiste.Free;
end;
end;

end.
En son zagerx tarafından 14 Mar 2014 03:56 tarihinde düzenlendi, toplamda 1 kere düzenlendi.
Kullanıcı avatarı
vkamadan
Kıdemli Üye
Mesajlar: 1935
Kayıt: 17 Mar 2004 03:52
Konum: Adapazarı
İletişim:

Re: HKS WebServis ArrayOfString2 Hatası

Mesaj gönderen vkamadan »

Sizin projede sadece Button1 vardı neyse ,

Button2 de yazanı aşağıdaki gibi düzenleyin;

Kod: Tümünü seç

procedure TForm1.Button2Click(Sender: TObject);
var
servis :IBildirimService;
kisi :BaseRequestMessageOf_KayitliKisiSorguIstek;
kisicevap :BaseResponseMessageOf_KayitliKisiSorguCevap ;
I: Integer;
tcArray : ArrayOfstring2 ;
begin
try
memo1.Clear;
servis:= GetIBildirimService;

kisi:= BaseRequestMessageOf_KayitliKisiSorguIstek.Create;
kisi.UserName:='xxxxxxx';
kisi.Password:='xxxxxx';
kisi.ServicePassword:='!1QAZWSX';

kisi.Istek:=KayitliKisiSorguIstek.Create;

tcArray := ArrayOfstring2.Create ;
tcArray.SetstringArrayLength(1);  // Kaç TC gireceğimizi belirtiyoruz
tcArray.stringArray[0] := '12345678901'; // Sonra 0 dan başlayarak TC leri atıyoruz..
kisi.Istek.TcKimlikVergiNolar:=tcArray;

kisicevap:=servis.BildirimServisKayitliKisiSorgu(kisi);

for I:= 0 to kisicevap.Sonuc.TcKimlikVergiNolar.Len-1 do
begin
memo1.Lines.Add(kisicevap.Sonuc.TcKimlikVergiNolar[i].TcKimlikVergiNo);
end;
finally
kisi.Free;
end;
end;
Volkan KAMADAN
www.polisoft.com.tr
zagerx
Üye
Mesajlar: 20
Kayıt: 18 Ara 2010 02:42

Re: HKS WebServis ArrayOfString2 Hatası

Mesaj gönderen zagerx »

allah razı olsun sizden teşekkürler fark ettim evet iki butonun tanım ismide button1 :) deneme yapmaktan fark edememişim şimdiye kadar
epikbalad
Üye
Mesajlar: 51
Kayıt: 01 Nis 2014 04:32

Re: HKS WebServis ArrayOfString2 Hatası

Mesaj gönderen epikbalad »

tüm detaylar sorunsuz çalışıyor, fakat

SetstringArrayLength
stringArray

fonksiyonlar için bilgi verirmisiniz.


Şimdiden teşekkürler.
Cevapla