http://www.perlmonks.org?node_id=996257


in reply to Re: More Soap::Lite
in thread More Soap::Lite

Thanks for the code. I modeled my code after yours and came up with the following:

foreach $rHash (@userData) { my $tempString = (); $tempString=SOAP::Data->name('request' => \SOAP::Data->value( SOAP::Data->name('actionTime')->value($zTime), SOAP::Data->name('id')->value($id1)->type('long'), SOAP::Data->name('state')->value($state1)->type('string'), SOAP::Data->name('result')->value($result1)->type('string') )); push(@soapArray, $tempString); }# end foreach my $release_response = release($proxy, $xmlns, @soapArray);

Before the above code is executed, the user Data is retrieved from a WSDL and stored in an array - @userData - of hashes. That array of hashes is ran through a foreach loop to dynamically format each record to a string ($tempString) and then to add that string to an array (@soapArray). Then I call a subroutine and pass the necessary information to execute the WSDL call:
my $release_response = release($proxy, $xmlns, @soapArray);

In the subroutine, I make the WSDL call:

my ($proxy1, $xmlns1, @array1) = @_; # IIS web services expect / as a separator for uri and method. my $lite = SOAP::Lite->new()->on_action(sub { join '/', @_ } ) ->proxy($proxy1), SOAP::Header->name('Authentication' => SOAP::Header->value( SOAP::Header->name('user')->value($zID), SOAP::Header->name('password')->value($zPW))); my $response = $lite->call( SOAP::Data->name('release') ->attr({ 'xmlns', $xmlns1}), @array1 ); return $response;

The name of the array changes in the subroutine from @soapArray to @array1.

Again, thanks for the help. It is much appreciated.
Frank