Site officiel du module : http://www.piersharding.com/saprfc.dkb
La version que j'utilise se trouve ici http://www.cpan.org/authors/id/P/PI/PIERS/SAP-Rfc-1.04.tar.gz
Pour réussir à le compiler j'ai eu besoin des modules suivants
http://www.cpan.org/authors/id/I/IN/INGY/Inline-0.43.tar.gz
http://www.cpan.org/authors/id/DCONWAY/Parse-RecDescent-1.80.tar.gz
Et du SDK RFc de SAP ( normalement fournis sur le cd du sapgui ou sur http://service.sap.com/swcenter-main 'SAP Web AS' ->'SAP Web AS 6.20' ->'Binary patches' -> 'SAP KERNEL 6.20' -> '<your platform' -> 'Database-independent'. "si vous avez un compte OSS )
Une fois que vous avez tout dans le repertoire créé par le decompactage de SAP-rfc-x.xx.tar.gz
lancer
Sous linux ou windows
perl Makefile.pl
make
make test
make install
N.B. Sous windows j'ai modifié les lignes suivantes du Makefile.pl ( j'ai utilisé visual C++ mais c'est surement faisable avec un compilateur libre )
'LIBS' => ['-lm -ldl -lpthread "c:\program files\Microsoft Visual
Studio\VC98\lib" -Lc:\usr\sap\rfcsdk\lib -Lc:\perl\lib\auto\Thread -Lc:\cygwin\lib
-llibrfc32'],
'INC' => '-Ic:\usr\sap\rfcsdk\include -I"c:\program files\Microsoft
Visual Studio\VC98\include"',
La liste de touts les fonctions et bapi appellable en RFC s'obtient en lisant le
contenu de la table TFDIR avec comme selection FMODE = R
Pour tester les fonctions voila un petit script perl qui renvoie la liste des mandants
#!/usr/bin/perl
use strict;
#use lib '../lib';
use SAP::Rfc;
use Data::Dumper;
my $rfc = new SAP::Rfc(
ASHOST => 'HOST',
USER => 'USER',
PASSWD => 'PASSWORD',
LANG => 'EN',
CLIENT => '000',
SYSNR => '00',
TRACE => '1' );
my $table = 'T000';
my $it = $rfc->discover("RFC_READ_TABLE");
my $s = $rfc->structure($table);
$it->QUERY_TABLE($table);
$it->ROWCOUNT( 10 );
$rfc->callrfc( $it );
print "Nbre de mandants : ".$it->tab('DATA')->rowCount()." \n";
for my $row ( $it->DATA ){
$s->value( $row );
my $hashrow = { map { $_ => $s->$_() } ( $s->fields ) };
print Dumper( $hashrow );
}
$rfc->close();
Un autre pour renvoyer les articles et leur désignations
#!/usr/bin/perl
use strict;
use SAP::Rfc;
# RENVOIE LES ARTICLES ET LEUR DESIGNATIONS
my $rfc = new SAP::Rfc(
ASHOST => 'HOST',
USER => 'USER',
PASSWD => 'PASSWORD',
LANG => 'EN',
CLIENT => '000',
SYSNR => '00',
TRACE => '1' );
my $table = 'MAKT';
my $it = $rfc->discover("RFC_READ_TABLE");
my $s = $rfc->structure($table);
$it->QUERY_TABLE($table);
$it->FIELDS(["MATNR","MAKTX"]);
$it->DELIMITER(",");
$rfc->callrfc( $it );
print "Nbre d'article : ".$it->tab('DATA')->rowCount()." \n";
for my $row ( $it->DATA ){
my @champs = split(/,/,$row);
print $champs[0]." ".$champs[1]."\n";
}
$rfc->close();
Vous pouvez egalement utiliser Perl pour appeller des BAPI
par exemple la bapi BAPI_MATERIAL_GETLIST
#!/usr/bin/perl
use strict;
use SAP::Rfc;
my $rfc = new SAP::Rfc(
ASHOST => 'HOST',
USER => 'USER',
PASSWD => 'PASSWORD',
LANG => 'EN',
CLIENT => '000',
SYSNR => '00',
TRACE => '1' );
my $it = $rfc->discover("BAPI_MATERIAL_GETLIST");
$it->MATNRSELECTION([{SIGN=>"I",OPTION=>"CP",MATNR_LOW=>"*"}]);
$rfc->callrfc( $it );
@matnrlist= $it->MATNRLIST;
for $article (@matnrlist)
{
print substr($article,0,18)." : ".substr($article,18)."\n";
}
$rfc->close();