Tout au long des missions que j'ai pu faire, j'ai remarqué que les modules fonctions SAP (Tx SE37) étaient peu connus/exploités par les équipes BC. Pourtant, elles permettent de réaliser à distance la plupart des actions qu'on peut faire en se connectant depuis le SAP Logon, que ce soient des contrôles ou des changements dans le système.
Pour notre exemple ici, nous prendrons le plus simple de tous : le module fonction RFC_PING.
Celui-ci ping simplement le système SAP donné dans le champ "RFC système target" (ou en local si le champ est laissé vide), si le ping répond, nous avons un code retour 0, sinon un message d'erreur. Il est très pratique pour s'assurer que le système en face est bien UP avant de lancer un traitement.
Nous nous en servirons ici pour monitorer plus efficacement le système. En effet, monitorer le résultat du ping permet de s'assurer que le système est réellement disponible. Si on ne monitor que la présence et le bon fonctionnement des process SAP sur la machine, nous ne pourrons pas voir de cas particuliers comme un système avec tous les process dialog occupés.
Mais à quoi bon utiliser un module fonction si celui-ci doit être exécuté depuis un système SAP ?
Le connecteur SAP Perl
Il existe des langages de programmation qui disposent de connecteur SAP comme le Perl ou le PHP. Le problème du connecteur PHP, c'est qu'il n'est plus maintenu depuis plusieurs années et fonctionne mal avec les dernières versions de PHP. J'ai donc ma préférence pour le Perl.
Le module Perl s'appelle sapnwrfc. Il permet de se connecter, via RFC, à un système SAP et d'exécuter n'importe quel module fonction (tant que l'utilisateur SAP à les autorisations pour le faire).
Pour utiliser le connecteur SAP, il faut installer deux packages CPAN Perl : sapnwrfc-0.37 & YAML. Vous aurez également besoin du package "nwrfcsdk" présent sur la marketplace SAP. Plus d'information quant à l'installation en cliquant ici.
Voici le code du script perl sap_ping.pl qui nous permet d'utiliser le module fonction RFC_PING :
#!/usr/bin/perl -w
#################################
# Ping Appli SAP #
# Auteur : AMA #
# Créé le 07/02/2019 #
# Nom : sap_ping.pl #
#################################
use strict;
use warnings;
use sapnwrfc;
use utf8;
# On récupère les paramètres
my $SAP_HOSTNAME=$ARGV[0];
my $SID=$ARGV[1];
my $SAP_USER=$ARGV[2];
my $SAP_PASSWD=$ARGV[3];
my $SAP_SYSNR=$ARGV[4];
my $SAP_CLIENT=$ARGV[5];
my $debug=0;
my $conn;
my $rd;
my $rc;
# Connexion à l'instance SAP
$conn = SAPNW::Rfc->rfc_connect(
ashost => $SAP_HOSTNAME,
sysnr => $SAP_SYSNR,
client => $SAP_CLIENT,
user => $SAP_USER,
passwd => $SAP_PASSWD,
lcheck => 1,
lang => 'EN',
trace => 0,
debug => $debug );
# Lancement du MF RFC_PING et récupération du résultat
$rd = $conn->function_lookup("RFC_PING");
$rc = $rd->create_function_call;
$rc->invoke;
# Si la connexion est OK, on affiche 1, sinon 0
if ($rc) {
print "1";
} else {
print "0";
}
$conn->disconnect;
Il se divise en 4 étapes :
- On récupère les paramètres de lancement du script et on créer des variables nécessaires au bon fonctionnement du script
- On se connecte à l'instance SAP
- On exécute le module fonction RFC_PING et on récupère le résultat
- On interprète le résultat. Si la connexion s'est bien passée on affiche 1, sinon on affiche 0.
Utiliser cette méthode
Où utiliser ce script ? Et bien il peut servir pour un outil de monitoring (c'est celui que j'utilise dans Zabbix) ou dans un rapport automatisé qui contrôlerait la bonne disponibilité des systèmes.
Ici, c'est surtout la méthode qui nous intéresse : utiliser du Perl pour se connecter à un système SAP. C'est avec cette même méthode que j'ai créé de nombreux outils/contrôles automatisés :
- Météo automatisée
- Outil de réinitialisation autonome de mot de passe SAP par l'utilisateur
- Interface Web de contrôle et relance des réplication SLT
- ...
A vous de trouver les modules fonctions qui peuvent vous servir à automatiser vos tâches !
Retour à l'accueil