#!/apps/remdev/ars/ars/perl -w
#
# Test Remedy WebService
#
use Env;
use SOAP::Lite;
#trace=>'all';
#+trace => [ transport => \&SOAP_log ];
 
sub SOAP_log {
    # Assume Transport Logging Only
    my ($in) = @_;
    my $doubleLF = chr(10).chr(10);
    my $singleLF = chr(10);
    my($sName,$sVal) = split(/=/,$in,2);    
 
    while( my ($k, $v) = each %$in ) {
      if ( $k eq "_content" ) {
         $sVal = "$sName\n".$v;
         $sVal =~ s/$doubleLF/$singleLF/g;
         write_log ( $sVal );
      }
    }
 }
 
sub write_log {
#  my $arLogFile=$ENV{'ARCONFIGDIR'}."/tmp/fred_Remedy_SOAP.log";
   my $arLogFile="Remedy_SOAP.log";
   my($message) = @_;
 
   $message="$message";
 
   chop(my $date = `date +'%a %b %e %Y %T'`);
   my $messagehead = "<PERL> <TID: 0> <RPC ID: 0> <Queue: 0> <Client-RPC: 0> <USER: perl> /* $date */ ";
 
   warn "Could not open logfile: $arLogFile\n" unless (open (LOGFILE, ">>$arLogFile"));
   print LOGFILE "$messagehead $message\n";
   warn "Could not close logfile: $arLogFile\n" unless (close (LOGFILE));
}
 

my $USERNAME  = "username-goes-here";
my $PASSWORD  = "password-goes-here";
 
my $arServer = "ars-server-goes-here";
my $arwebServer = "midtier-server-goes-here";
my $ServiceName  = "webservice-name-goes-here";
my $RemedyURL    = "http://".$arwebServer."/arsys/services/ARService?server=".$arServer."&webService=".$ServiceName;
my $RemedyNS     = "urn:".$ServiceName;
 
my $RecordID = "INC000001294141";
my $StatusTxt = "Success";
my $UpdateDate = "2006-11-17T20:35:11";
 
my $soap = SOAP::Lite
    -> proxy($RemedyURL)
    -> ns($RemedyNS,'ns1')
    -> autotype(0)
    -> readable(1);
 
my $som = $soap->OpGet(
       SOAP::Header->name('AuthenticationInfo' => \SOAP::Header->value(
       SOAP::Header->name('userName' => $USERNAME),
       SOAP::Header->name('password' => $PASSWORD) )),
                 SOAP::Data->name('Incident_Number'   => $RecordID ));

# check to see if we got a fault back. If we did then print it. If we
#did not then get the fields that we want.
use Encode;

if ($som->fault){
print "Fault :", $som->faultstring, "\n";
print "Faultcode :",$som->faultcode, "\n";
print "Faultdetail :", %{$som->faultdetail}, "\n";
}else{
# print all fields returned from the OpGet method
foreach my $field ($som->valueof('//OpGetResponse')) {

print "-----------------------------------------\n";
# print description for every field then the returned value
foreach my $fieldname (sort keys %{$field}) {
# use the if statment to supress fields with empty values
#if ($field->{$fieldname}){

print decode_utf8($fieldname), ": '",
$field->{decode_utf8($fieldname)}, "'\n";

#}
}
}
}

print "\n";
print "\n";
print "Vendor Group ID: (",$som->valueof('//OpGetResponse/Vendor_Group_ID'), ")\n";
 
#print $som; 

