Académique Documents
Professionnel Documents
Culture Documents
ABAP Connectivity
SAP Connector - RFC Destination - JCo
Cet exercice permet de découvrir les connecteur Java en mode "RFC
Destination" (du connecteur vers SAP).
Produit 00 - Overview...............................................................................................3
SAP NetWeaver 750
01 - Java Project...........................................................................................4
ABAP
SAP Java Connector...........................................................................5
Package..............................................................................................6
Niveau 02 - Java Classes...........................................................................................7
Débutant Class ProviderRFCDestination............................................................7
Class SAPDestination.......................................................................11
Class Launch....................................................................................13
Focus 03 - Java Methods......................................................................................16
ABAP Development
Method testRFCConnection.............................................................16
ABAP Connectivity
Method divide.................................................................................23
Method displayEmployee................................................................25
Auteurs Method displayEmployees...............................................................27
SAP ACC Switzerland 04 - Conclusion..........................................................................................28
Version 10
IMPORTANT
Note
A chaque fois que vous rencontrerez les champs [PERS], … il faudra les remplacer par les données
correspondantes ci-dessus.
Attention
Les informations contenues dans les images ne sont qu'à titre d'exemple. Merci de bien LIRE les
informations contenues dans le texte d'explication. NE PAS COPIER les textes de l'image !
00 - Overview
Suite à la création des trois "Remote Function Module" dans SAP, vous allez pouvoir les appeler depuis
un programme Java
01 - Java Project
Lancer Eclipse
Package
Structurer le projet Java avec des packages pour bien séparer le JCo et les autres classes
Dans le projet, créer un package "sapconnector" qui englobera toutes les classes pour la connexion via le
SAP JCo et un deuxième package "util" pour les autres classes du programme
02 - Java Classes
Préparer les classes Java pour pouvoir implémenter les méthodes via le SAP JCo
Class ProviderRFCDestination
Package sapconnector
Name ProviderRFCDestination
Code
package sapconnector;
Code
package sapconnector;
import java.util.Properties;
import com.sap.conn.jco.ext.DestinationDataEventListener;
import com.sap.conn.jco.ext.DestinationDataProvider;
@Override
public Properties getDestinationProperties(String destinationName) {
// TODO Auto-generated method stub
return null;
}
@Override
public void setDestinationDataEventListener(
DestinationDataEventListener eventListener) {
// TODO Auto-generated method stub
@Override
public boolean supportsEvents() {
// TODO Auto-generated method stub
return false;
}
Code
//Variable
public static String SAP_SERVER ;
private final Properties _destination;
Créer le constructeur de la classe pour les données de connexion aux systèmes SAP
Code
//Constructor
public ProviderRFCDestination(String destinationSID)
{
SAP_SERVER = destinationSID ;
this._destination = new Properties();
this._destination.setProperty(DestinationDataProvider.JCO_ASHOST, "<hostname>");
this._destination.setProperty(DestinationDataProvider.JCO_SYSNR, "<sysnum>");
this._destination.setProperty(DestinationDataProvider.JCO_CLIENT, "<client>");
this._destination.setProperty(DestinationDataProvider.JCO_USER, "<user>");
this._destination.setProperty(DestinationDataProvider.JCO_PASSWD, "<pwd>");
this._destination.setProperty(DestinationDataProvider.JCO_LANG, "<language>");
this._destination.setProperty(DestinationDataProvider.JCO_SAPROUTER, "<router>");
}
NOTE
Possibilité de créer un deuxième avec les données de connexion transmises par variables, …
Remplacer les valeurs "< … >" selon le tableau ci-dessous en lien avec le SAP FrontEnd
NOTE
Toutes les informations techniques de connexion apparaissent dans le SAP Logon
Code
@Override
public Properties getDestinationProperties(String destinationName) {
// TODO Auto-generated method stub
return this._destination; //CHANGE
}
@Override
public void setDestinationDataEventListener(
DestinationDataEventListener eventListener) {
// TODO Auto-generated method stub
@Override
public boolean supportsEvents() {
// TODO Auto-generated method stub
return false;
}
NOTE
Pour plus d'information voir la classe Java "CustomDestinationDataProvider.java" dans le dossier
"C:/SAP/JCo/examples"
Class SAPDestination
Créer une classe pour la connexion au serveur SAP et l'appel aux "Remote Function Modules"
Package sapconnector
Name SAPDestination
Code
import com.sap.conn.jco.ext.Environment;
Créer la variable de classe qui contiendra les données de connexions au système SAP
Code
//Variable
private String _destination ;
Code
//Constructor
public SAPDestination(String sapsid)
{
this._destination = sapsid ;
//Destination Provider
ProviderRFCDestination _rfcdestination = new ProviderRFCDestination(sapsid) ;
Environment.registerDestinationDataProvider(_rfcdestination);
}
Créer les interfaces des méthodes qui appelleront les "Remote Function Modules" du système SAP
Code
Class Launch
Package util
Name Launch
Public static void main
Code
import sapconnector.SAPDestination;
Code
Remplacer la valeur "<sapsid>" selon le tableau ci-dessous en lien avec le SAP FrontEnd
NOTE
Toutes les informations techniques de connexion apparaissent dans le SAP Logon
Code
//Call Methods
server.testRFCConnection("SAP") ;
System.out.println();
server.divide(10, 2) ;
server.divide(10, 0) ; //Division by zero
System.out.println();
server.displayEmployee("AA", 1) ;
server.displayEmployee("AA", 10) ; //Empty selection
System.out.println();
server.displayEmployees("SR") ;
server.displayEmployees("AF") ; //Empty selection
}
NOTE
Actuellement les méthodes de la classe "SAPDestination" sont vides
Le programme n'effectue aucune opération
Lors du test "Run Launch", rien ne s'affiche
C'est normal
03 - Java Methods
Modifier les méthodes de la classe "SAPDestination" pour accéder aux "Remote Function Modules" de
SAP et afficher leur résultat dans la console Java
Method testRFCConnection
La méthode Java appelle le "Remote Function Module (RFM)" "STFC_CONNECTION" du système SAP
Type SAP :
Type Java : (Conversion SAP en Java)
NOTE
Double-cliquer dans le champ "Associated Type" (ici "SY-LISEL") pour voir le type de données "Data
Type"
Exceptions :
Code
import com.sap.conn.jco.AbapException;
import com.sap.conn.jco.JCoDestination;
import com.sap.conn.jco.JCoDestinationManager;
import com.sap.conn.jco.JCoException;
import com.sap.conn.jco.JCoFunction;
Code - Etape 1
Créer la connexion vers le système SAP
Récupérer les métadonnées du "Remote Function Module" (Attention nom en majuscule)
Capturer les erreurs ABAP, JCo et standard
//Execute function
}
catch (AbapException e)
{
System.out.println(e.toString());
}
catch (JCoException e)
{
System.out.println(e.toString());
}
catch (Exception e)
{
System.out.println(e.toString());
}
}
Code - Etape 2
Assigner les paramètres d'entrée
ATTENTION le nom des paramètres est toujours en majuscule dans SAP
//Execute function
}
catch (AbapException e)
{
System.out.println(e.toString());
}
catch (JCoException e)
{
System.out.println(e.toString());
}
catch (Exception e)
{
System.out.println(e.toString());
}
}
Code - Etape 3
Exécuter l'appel au "Remote Function Module"
//Execute function
function.execute(destination);
}
catch (AbapException e)
{
System.out.println(e.toString());
}
catch (JCoException e)
{
System.out.println(e.toString());
}
catch (Exception e)
{
System.out.println(e.toString());
}
}
Code - Etape 4
Récupérer les paramètres de sortie (attention aux types de données)
ATTENTION le nom des paramètres est toujours en majuscule dans SAP
Afficher le résultat
//Execute function
...
//Display result
System.out.println("STFC_CONNECTION finished");
System.out.println(echo);
System.out.println(resp);
}
catch (AbapException e)
{
System.out.println(e.toString());
}
catch (JCoException e)
{
System.out.println(e.toString());
}
catch (Exception e)
{
System.out.println(e.toString());
}
}
NOTE
En cas d'erreur ou de problème, cliquer-droit sur projet et choisir rafraichir
Ouvrir le fichier "dev_jco_rfc.trc" pour visualiser la trace
Method divide
SAP
Code
NOTE
Pour plus d'information voir la méthode "step3SimpleCall" de la classe Java "StepByStepClient.java"
dans le dossier "C:/SAP/JCo/examples"
NOTE
En cas d'erreur ou de problème, cliquer-droit sur projet et choisir rafraichir
Ouvrir le fichier "dev_jco_rfc.trc" pour visualiser la trace
Method displayEmployee
SAP
Code
import com.sap.conn.jco.JCoStructure;
Code
NOTE
Pour plus d'information voir la méthode "step3WorkWithStructure" de la classe Java
"StepByStepClient.java" dans le dossier "C:/SAP/JCo/examples"
NOTE
En cas d'erreur ou de problème, cliquer-droit sur projet et choisir rafraichir
Ouvrir le fichier "dev_jco_rfc.trc" pour visualiser la trace
Method displayEmployees
SAP
Code
import com.sap.conn.jco.JCoTable;
Code
NOTE
Pour plus d'information voir la méthode "step4WorkWithTable" de la classe Java
"StepByStepClient.java" dans le dossier "C:/SAP/JCo/examples"
NOTE
En cas d'erreur ou de problème, cliquer-droit sur projet et choisir rafraichir
Ouvrir le fichier "dev_jco_rfc.trc" pour visualiser la trace
04 - Conclusion
Félicitations, vous avez créé des petits programmes Java autonomes qui accèdent à distance aux
fonctionnalités d'un système SAP.
function.getImportParameterList().setValue("IV_NUMBER01", number1);
function.getImportParameterList().setValue("IV_NUMBER02", number2);
function.execute(destination);
System.out.println("Z_FM_RFCDEST_VARIABLE_### finished");
System.out.println(result);
}
catch (AbapException e)
{
System.out.println(e.toString());
}
catch (JCoException e)
{
System.out.println(e.toString());
}
catch (Exception e)
{
System.out.println(e.toString());
}
}
function.getImportParameterList().setValue("IV_CARRIER", carrier);
function.getImportParameterList().setValue("IV_IDEMPLOYEE", idemployee);
function.execute(destination);
JCoStructure structure =
function.getExportParameterList().getStructure("ES_EMPLOYEE");
System.out.println("Z_FM_RFCDEST_STRUCTURE_### finished");
System.out.println(structure.toString()); // Display all
System.out.println(structure.getString("CARRIER")) ; //Display field
System.out.println(structure.getString(1)) ; //Display field
}
catch (AbapException e)
{
System.out.println(e.toString());
}
catch (JCoException e)
{
System.out.println(e.toString());
}
catch (Exception e)
{
System.out.println(e.toString());
}
}
function.getImportParameterList().setValue("IV_CARRIER", carrier);
function.execute(destination);
JCoTable itab =
function.getExportParameterList().getTable("ET_EMPLOYEES");
System.out.println("Z_FM_RFCDEST_TABLE_### finished");
for (int i = 0; i < itab.getNumRows(); i++)
{
itab.setRow(i);
System.out.println( itab.getString("CARRIER")
+ '\t' + itab.getString("ID_EMPLOYEE")
+ '\t' + itab.getString("FIRSTNAME")
+ '\t' + itab.getString("LASTNAME")
+ '\t' + itab.getString(4)
+ '\t' + itab.getString(5));
}
System.out.println();
}
catch (AbapException e)
{
System.out.println(e.toString());
}
catch (JCoException e)
{
System.out.println(e.toString());
}
catch (Exception e)
{
System.out.println(e.toString());
}
}