Il s’agit d’une continuation de la programmation serveur dans JCo Partie 2. Dans cet article, je traiterai de la réception et de l’analyse de l’appel réel de SAP.
Dans le post précédent, la configuration de la classe JCO.Server a été expliquée. Pour réellement faire quoi que ce soit avec cette classe, nous devons remplacer la méthode handleRequest(). Cette méthode est appelée chaque fois que le système SAP avec les informations d’identification appropriées contacte votre serveur.
Dans la fonction handleRequest(), il y a 2 tâches importantes qui sont presque toujours incluses :
- Obtenez les paramètres des structures d’entrée, de sortie et de table à l’aide de la classe JCO.Function
- Vérifier le nom de la fonction pour s’assurer que le bon code est exécuté
Voici un exemple de configuration de base :
protected void handleRequest(JCO.Function function) { JCO.ParameterList input = function.getImportParameterList(); JCO.ParameterList output = function.getExportParameterList(); JCO.ParameterList tables = function.getTableParameterList(); if (function.getName().equals("BAPI_CUSTOMER_GETDETAIL")) { //code to retrieve and manipulate data } }
La première tâche implique la classe JCO.Function pour extraire les objets dans l’une des trois structures différentes qui correspondent aux structures d’importation, d’exportation et de table dans SAP. La première étape consiste à les convertir en objet theJCO.ParameterList. Cet objet encapsule tous les différents paramètres pour les structures d’entrée, de sortie et de table.
Pour les paramètres d’entrée et de sortie, les champs scalaires sont très faciles à définir et à obtenir, et aucune conversion en JCO.Field n’est nécessaire.
input.getString("scalar_name"); //getting string input.setValue("value","scalar_name") //setting string
Pour les structures, les choses deviennent un peu plus difficiles. Tout d’abord, nous devons appeler notre liste de paramètres et obtenir notre structure avec un objet JCO.Structure, puis utiliser l’ensemble de base et obtenir les méthodes disponibles pour lire et stocker les données :
JCO.Structure js = input.getStructure("structure_name"); js.getString("name_of_field_in_structure"); js.setValue("value","name_of_field_in_structure");
Pour les tableaux, cela devient beaucoup plus compliqué. First, we need to get our table data from the JCO.ParameterList by calling the “getTable(String tablename)” method.
JCO.Table jtab = tables.getTable("tablename");
Une fois que l’objet JCO.Table possède la référence de table souhaitée, plusieurs méthodes peuvent être utilisées pour manipuler les données. Le plus gros obstacle à l’utilisation de l’objet JCO.Table est le système de pointeur de ligne interne utilisé. Par exemple, si vous avez une table vide, la première étape pour ajouter des données consiste à utiliser la méthode “appendRow()” pour créer la ligne et définir le pointeur de ligne interne sur cette ligne. Ensuite, vous pouvez définir directement la valeur du champ dans cette ligne :
jtab.appendRow(); jtab.setValue("fieldvalue","fieldname"); jtab.setValue("fieldvalue","fieldname2");
Il est possible de créer plusieurs lignes à la fois en utilisant la méthode “appendRows(int rows)”. Dans ce cas, la table interne est définie sur la première ligne ajoutée et vous pouvez passer à la ligne suivante avec la méthode “nextRow()”. La méthode “nextRow()” renvoie également une valeur booléenne qui vérifie la fin de l’ensemble de données, vous pouvez donc l’utiliser pour parcourir une table. Il est également possible d’accéder directement à la ligne. Le pointeur de ligne interne commence à 0 pour la première ligne. J’ai répertorié ci-dessous les fonctions de table les plus couramment utilisées :
- isEmpty() – Returns true if the table is empty
- nextRow() – déplace le pointeur vers la ligne suivante, renvoie false si à la fin de l’ensemble de données
- previousRow() -déplace le pointeur vers la ligne précédente, renvoie false au début de l’ensemble de données
- isFirstRow() – Renvoie vrai si le pointeur est sur la première ligne
- firstRow() – Déplace le pointeur vers la première ligne de l’ensemble de données
- isLastRow() -Renvoie vrai si le est sur la ligne lpointerast
- lastRow() – Déplace le pointeur vers la dernière ligne de l’ensemble de données
- getNumRows() – Renvoie le nombre de lignes dans l’ensemble de données
- getRow() – Renvoie la position du pointeur de ligne
- insertRow(int row) – Insère une ligne à l’emplacement spécifié
- deleteRow(int row) – Supprime une ligne à l’emplacement spécifié
- deleteAllRows() – Supprime toutes les lignes de l’ensemble de données
- setRow(int row) – Définit le pointeur de ligne vers l’emplacement spécifié
Le prochain blog rassemblera toutes ces informations et couvrira la gestion des erreurs.