Avatar of DPlayer
DPlayer
 asked on

Reading complex type element repeats first one found several times

Hi Experts.

I'm using Delphi XE6, using WSDL Importer with default options.

This is response I get from server:

    <group id="709">
      <fact term="Amount" value="141578823.7700" typ="Decimal"/>
      <fact term="Currency" value="RSD" typ="String"/>
    </group>
    <group id="709">
      <fact term="Amount" value="2854.2100" typ="Decimal"/>
      <fact term="Currency" value="USD" typ="String"/>
    </group>
    <group id="709">
      <fact term="Amount" value="42182.5000" typ="Decimal"/>
      <fact term="Currency" value="EUR" typ="String"/>
    </group>

Open in new window


(*Shortened for brewity*)


Everything gets read fine, except that for each of groups 709 I get only first group data. So I end up with:

    Data[1]=709/141578823.7700/RSD
    Data[2]=709/141578823.7700/RSD
    Data[3]=709/141578823.7700/RSD

Open in new window


instead of

    Data[1]=709/141578823.7700/RSD
    Data[2]=709/2854.2100/USD
    Data[3]=709/42182.5000/EUR

Open in new window


This is what WSDLImp gave me as a result:
      Fact = class(TRemotable)
      private
        Fterm: string;
        Fterm_Specified: boolean;
        Fvalue: string;
        Fvalue_Specified: boolean;
        Ftyp: string;
        Ftyp_Specified: boolean;
        procedure Setterm(Index: Integer; const Astring: string);
        function  term_Specified(Index: Integer): boolean;
        procedure Setvalue(Index: Integer; const Astring: string);
        function  value_Specified(Index: Integer): boolean;
        procedure Settyp(Index: Integer; const Astring: string);
        function  typ_Specified(Index: Integer): boolean;
      published
        property term:    string  Index (IS_ATTR or IS_OPTN) read Fterm write Setterm stored term_Specified;
        property value:   string  Index (IS_ATTR or IS_OPTN) read Fvalue write Setvalue stored value_Specified;
        property typ:     string  Index (IS_ATTR or IS_OPTN) read Ftyp write Settyp stored typ_Specified;
      end;
    
      Record = array of Fact;
    
      Group = class(TRemotable)
      private
        Fid: string;
        Fid_Specified: boolean;
        Ffact: Record;
        Ffact_Specified: boolean;
        procedure Setid(Index: Integer; const Astring: string);
        function  id_Specified(Index: Integer): boolean;
        procedure Setfact(Index: Integer; const ARecord: Record);
        function  fact_Specified(Index: Integer): boolean;
      public
        destructor Destroy; override;
      published
        property id:      string  Index (IS_ATTR or IS_OPTN) read Fid write Setid stored id_Specified;
        property fact:    Record  Index (IS_OPTN or IS_UNBD) read Ffact write Setfact stored fact_Specified;
      end;
    
      Array_Of_Group = array of Group;
    
      Main = class(TRemotable)
      private
        Fgroup: Array_Of_Group;
        Fgroup_Specified: boolean;
        procedure Setgroup(Index: Integer; const AArray_Of_Group: Array_Of_Group);
        function  group_Specified(Index: Integer): boolean;
      public
        destructor Destroy; override;
      published
        property group:  Array_Of_Group  Index (IS_OPTN or IS_UNBD) read Fgroup write Setgroup stored group_Specified;
      end;

Open in new window


Iterating through all Groups of Main, and reading all Facts, I get as I've mentioned only first set of facts that I come across repeated as many times as there is group with id=709.
So, my question is. What do I need to do in order to get all distinct groups and their values? What am I missing?
DelphiSOAP ProtocolWeb Services

Avatar of undefined
Last Comment
DPlayer

8/22/2022 - Mon
SOLUTION
Sinisa Vuk

THIS SOLUTION ONLY AVAILABLE TO MEMBERS.
View this solution by signing up for a free trial.
Members can start a 7-Day free trial and enjoy unlimited access to the platform.
See Pricing Options
Start Free Trial
GET A PERSONALIZED SOLUTION
Ask your own question & get feedback from real experts
Find out why thousands trust the EE community with their toughest problems.
ASKER CERTIFIED SOLUTION
DPlayer

THIS SOLUTION ONLY AVAILABLE TO MEMBERS.
View this solution by signing up for a free trial.
Members can start a 7-Day free trial and enjoy unlimited access to the platform.
See Pricing Options
Start Free Trial
GET A PERSONALIZED SOLUTION
Ask your own question & get feedback from real experts
Find out why thousands trust the EE community with their toughest problems.
DPlayer

ASKER
As I have said, I found a workaround.
Experts Exchange is like having an extremely knowledgeable team sitting and waiting for your call. Couldn't do my job half as well as I do without it!
James Murphy