package SAPNW::RFC::FunctionCall; =pod Copyright (c) 2006 - 2007 Piers Harding. All rights reserved. =cut use strict; use SAPNW::Base; use base qw(SAPNW::Base); use vars qw($VERSION $AUTOLOAD); $VERSION = '0.02'; sub AUTOLOAD { my $self = shift; my $type = ref($self) or die "$self is not an Object in autoload of Iface"; my $name = $AUTOLOAD; $name =~ s/.*://; # Autoload parameters and tables if ( exists $self->{parameters}->{$name} ) { return $self->{parameters}->{$name}->value(@_); } else { die "Parameter $name does not exist in Interface - no autoload"; }; } sub DESTROY { my $self = shift; return SAPNW::Connection::destroy_function_call($self); } sub name { my $self = shift; return $self->{name}; } sub new { my $proto = shift; my $class = ref($proto) || $proto; my $funcdesc = shift; die "Must pass a FunctionDescriptor \n" unless ref($funcdesc) eq "SAPNW::RFC::FunctionDescriptor"; my $self = { name => $funcdesc->name, parameters => {}, }; foreach my $p (values %{$funcdesc->parameters}) { my $type = ref($p); no strict 'refs'; # my ($funcdesc, $name, $type, $len, $ulen, $decimals, $direction) = @_; my $np = &{$type."::new"}($type, 'name', $p->name, 'type', $p->type, 'len', $p->len, 'ulen', $p->ulen, 'decimals', $p->decimals, 'direction', $p->direction); $self->{parameters}->{$np->name} = $np; } bless($self, $class); return $self; } sub initialise { my $self = shift; my $funcdesc = shift; $self->{parameters} = {}; foreach my $p (values %{$funcdesc->parameters}) { my $type = ref($p); no strict 'refs'; # my ($funcdesc, $name, $type, $len, $ulen, $decimals, $direction) = @_; my $np = &{$type."::new"}($type, 'name', $p->name, 'type', $p->type, 'len', $p->len, 'ulen', $p->ulen, 'decimals', $p->decimals, 'direction', $p->direction); $self->{parameters}->{$np->name} = $np; } return $self; } sub parameters { my $self = shift; return $self->{parameters}; } sub parameter { my $self = shift; my $parameter = shift; return exists $self->{parameters}->{$parameter} ? $self->{parameters}->{$parameter} : undef; } sub invoke { my $self = shift; return SAPNW::Connection::invoke($self); } 1;