


use warnings;
use strict;
use Data::Dumper;



# preparation
use XML::Compile;
use XML::Compile::WSDL11;      # use WSDL version 1.1
use XML::Compile::SOAP11;      # use SOAP version 1.1
use XML::Compile::Transport::SOAPHTTP;



## Take login and password from command-line
our ($U, $P) = @ARGV;

printf STDERR "Using XML-Compile version\t%s\n", $XML::Compile::VERSION;
printf STDERR "Using XML-Compile-SOAP version\t%s\n", $XML::Compile::SOAP::VERSION;

my $ws   = XML::Compile::WSDL11->new();


## Get WSDL from file...
#$ws->addWSDL('C:\Users\cde\Desktop\Bugs\RSD\projects\Salesforce\enterprise-2013-12-16.xml');
$ws->addWSDL('C:\Users\cde\Desktop\Bugs\RSD\projects\Salesforce\sandbox-2013-12-18.xml');

## Precompile methods for all Web-Services
## This happens only once, so slow for 1-shot scripts
##	 (use $rm_ws->compileClient() for individual functions
## http://supporter05:9080/RSDGlass/ws/public/v3/recordManagement/soap?wsdl
my $ini =  $ws->compileClient('login');

my ($ret, $trace);

($ret, $trace) = $ini->( username => $U, password=> $P);

#$trace->printErrors(*STDERR); exit;
#print Dumper($ret); exit;

# You may get an error back from the server
if(my $f = $ret->{Fault})
{   
	my $errname = $f->{_NAME};
  my $error   = $ret->{$errname};
  printf "Error %s (%s)\n", $errname, $f->{faultstring};
#  print Dumper($ret);
  exit;
}


my $login = $ret->{parameters}{result};
my $sh = { sessionId => $login->{sessionId}};

## Information/debugging utilities
#$ws->printIndex; exit;
#print $ws->explain('login', PERL => 'INPUT', recurse => 1); #exit;
#print $ws->explain('logout', PERL => 'INPUT', recurse => 1); exit;
#print $ws->explain('describeSObject', PERL => 'INPUT', recurse => 1); exit;

$ws->compileCalls(endpoint => $login->{serverUrl});

($ret, $trace) = $ws->call('getServerTimestamp', SessionHeader => $sh);
#($ret, $trace) = $ws->call('describeGlobal', SessionHeader => $sh);
#($ret, $trace) = $ws->call('describeSObject', SessionHeader => $sh, parameters => {sObjectType => 'Account' });
#($ret, $trace) = $ws->call('describeSObject', SessionHeader => $sh, parameters => {sObjectType => 'Machine__c' });

print Dumper($ret); 

($ret, $trace) = $ws->call('logout', SessionHeader => $sh);

#print Dumper($ret); 
exit;


