[DUG] Extracting Web Service data from a TRemotable

Trevor trevorj at ihug.co.nz
Sun Apr 26 16:19:35 NZST 2009


Mark,

  I'm not sure that I understand what the code is supposed to do, but I
can't see anything (at first glance) that tells me the number of elements in
the returned array.

 

  unique_id := record_array.UniqueId[1]; would normally refer to the second
element in the array.  Are there 2?

 

  If not, that could be the cause of the AV.

 

Trevor

 

 

  _____  

From: delphi-bounces at delphi.org.nz [mailto:delphi-bounces at delphi.org.nz] On
Behalf Of Mark Williamson at Warkworth Computer Services Limited
Sent: Saturday, 25 April 2009 11:19 a.m.
To: delphi at delphi.org.nz
Subject: [DUG] Extracting Web Service data from a TRemotable

 

Hi,

 

This is my first question to the Digest, so I hope this is right way of
submitting it.

 

I am trying to consume a Web Service. Have got it working ok for simple
returns of XML strings, but am completely stuck on how to handle the return
of multiple records in a TRemotable Object.

 

Here's the code that I think relates to it:

 

  GetLatestTransactionsResult = class(TRemotable)
  private
  FUniqueId:String;
  FPeopleId:String;
  FSiteLoginId:string;
  FSiteLogoutId:string;
  FErrorCode:integer;
  published
      Property UniqueId: string read FUniqueId write FUniqueId;
      Property PeopleId: string read FPeopleId write FPeopleId;
      Property SiteLoginId: string read FSiteLoginId write FSiteLoginId;
      Property SiteLogoutId: string read FSiteLogoutId write FSiteLogoutId;
      Property ErrorCode: integer read FErrorCode write FErrorCode;
  end;
  TFieldInfoArray =   array of GetLatestTransactionsResult;

  DataPortalExSoap = interface(IInvokable)
  ['{94DBE733-A57C-9EBF-B5CD-167163F4ECAF}']
    function  GetLatestTransactionsEx(const ID: string; const Password:
string; const ExternalRef: string; const FindByBatchNo: string; const
FindByExternalRef: string): string; stdcall;
  end;

initialization
  RemClassRegistry.RegisterXSClass(GetLatestTransactionsResult,
'http://www.ezitracker.com/eziTrackerData/', 'GetLatestTransactionsResult');
  RemClassRegistry.RegisterXSClass(GetLatestTransactionsResult, '',
'TFieldInfo', '');    
  RemTypeRegistry.RegisterXSInfo(TypeInfo(TFieldInfoArray), '',
'TFieldInfoArray');       

 

finalization                                                          
  RemClassRegistry.UnRegisterXSClass(GetLatestTransactionsResult);    
  RemTypeRegistry.UnRegisterXSInfo(TypeInfo(TFieldInfoArray));      

 

 

and then on the Form with my test buttons:

 

procedure TFormMainForm.ButtonGetLatestTransactionsClick(Sender: TObject);
var id:string;
    password:string;
    nonnullresponse:boolean;
    record_array:GetLatestTransactionsResult;

    unique_id:string;
begin
  id       := 'aaa';
  password := 'bbb';
  nonnullresponse := True;

 

  record_array := GetDataPortalExSoap.GetLatestTransactions(id, password,
nonnullresponse);

 

 
end;

It appears to run ok, but I have no idea how to extract the data from
record_array. 

 

If I try something as simple as:

 

unique_id := record_array.UniqueId[1];

 

I get an EAccessViolation.

 

 

Can anyone help please.

 

 

 

I can't seem to find any ideas on the Web, probably because the answer it
too obvious.

 

 

Thanks

 

Mark 

 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://listserver.123.net.nz/pipermail/delphi/attachments/20090426/5a3cdd68/attachment.html 


More information about the Delphi mailing list