Modules SAP pour perl

 

Installation

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"',

 

Exemples

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();