Explorer les Livres électroniques
Catégories
Explorer les Livres audio
Catégories
Explorer les Magazines
Catégories
Explorer les Documents
Catégories
Web Services
Niveau 1
Sage X3 Support to Business
10/08/2018
Bienvenue!
• Qui suis-je?
• Qui êtes-vous?
25/02/2019 3
Ce que vous allez
apprendre
• Une compréhension à 360° des
Web Services
• Comment paramétrer et tester les
Web Services
• Comment utiliser un web service
extérieur à Sage X3
• Être complètement autonome
dans l’implémentation d’un web
service.
25/02/2019 4
1 – Qu’est-ce qu’un Web
Service?
• Définition
• RESTful en Web Service
• SOAP
25/02/2019 5
Définition
Un web service est une collection de protocoles ouverts et de standards utilisés pour échanger des
données entre des applications ou des systèmes.
Des applications logicielles écrites dans divers langages de programmation et tournant sur diverses
plateformes peuvent utiliser des web services pour échanger des données à travers des réseaux
d’ordinateurs, comme internet, d’une manière similaire à la communication entre processus d’un
même ordinateur.
Les web services se fondent sur des protocoles autorisant la standardisation de l’échange.
Les web services X3 englobent différentes méthodes:
• Objet: exécution d’une tâche commerciale
• Sous-programmes: Exécuter du code
• Liste: Requérir des données
Les web services sont une tendance majeure pour la disponibilité web et mobile.
25/02/2019 6
Qu’est-ce qu’un web service RESTful?
Les principes suivants encouragent la technologie RESTful (simplicité, légèreté et rapidité des
applications):
• L’identification de ressources à travers un URI (Uniform Resource Identifier): un web service
RESTful expose un ensemble de ressources qui identifient les cibles de son interaction avec ses
clients. Ces ressources sont identifiées par des URIs, qui fournissent un espace d’adressage
global pour la recherche de ressources et de services.
• REST(REpresentational State Transfert) est un style architectural et un design pour les
architectures logicielles réseau.
• Les concepts REST sont désignés comme « ressources ». Une représentation de ressource doit
être stateless. Elle est représentée par un type de média, tel que XML, JSON, et RDF.
Les ressources sont manipulées par des composants. Les composants effectuent des requêtes et
manipulent les ressources via une interface standard uniforme. Dans le cas du HTTP, cette
interface consiste en des opérations standard: GET, PUT, POST, DELETE.
25/02/2019 7
Qu’est-ce qu’un web service RESTful?
Communication Client-Serveur
Les architectures client-serveur ont une séparation très distincte de préoccupations. Toutes les
applications conçues en style RESTful doivent également être client-serveur.
Stateless
Chaque requête client vers le serveur nécessite que son état soit totalement représenté. Le serveur
doit être capable de comprendre totalement la requête client sans utiliser le contexte serveur ni l’état
de la session serveur. Tout état doit donc être conservé côté client.
25/02/2019 8
Qu’est-ce qu’un web service RESTful?
Interface Uniforme
Tous les composants doivent interagir à travers une interface unique et uniforme. Comme toutes les
interactions entre composants interviennent via cette interface, l’interaction avec différents services
est très simple. L’interface est la même! Cela signifie également que les changements
d’implémentation peuvent être faits isolément. Ces changements n’affecteront pas les interactions
fondamentales entre composants car l’interface uniforme est toujours inchangée.
Un désavantage est que l’on est obligé d’utiliser l’interface. Si une optimisation pourrait être fournie à
un service spécifique en changeant l’interface, pas de chance: REST l’interdit. Malgré cela, REST est
optimisé pour le web, et bénéficie donc d’une grande popularité par rapport à HTTP.
Le concept présenté ci-dessus représente les caractéristiques essentielles de REST et différencie
l’architecture REST des autres architectures de web services. Il est nécessaire de noter qu’un service
REST est un web service, mais qu’un web services n’est pas forcément un service REST.
25/02/2019 9
Qu'est-ce que SOAP?
SOAP (Simple Object Access Protocol) est un protocole de communication qui permet à des
programmes tournant sur des systèmes d’exploitation différents (comme Windows et Linux) de
communiquer, en utilisant HTTP (Hypertext Transfer Protocol) et XML (eXtensible Markup Language).
25/02/2019 10
Qu'est-ce que SOAP?
Depuis que les protocoles Web sont installés et disponibles à l’utilisation par toutes les plateformes
majeures de systèmes d’exploitation, HTTP and XML fournissent une solution permettant à des
programmes qui tournent sur des systèmes d’exploitation différents dans un même réseau de
communiquer les uns avec les autres. SOAP spécifie exactement comment encoder une entête
HTTP et un fichier XML pour qu’un programme sur une machine donnée puisse appeler un autre
programme sur une autre machine et lui communiquer de l’information. SOAP spécifie également
comment le programme appelé peut retourner une réponse. Malgré son appariement fréquent avec
HTTP, SOAP accepte également d’autres protocoles de transport.
SOAP définit le format de message (fondé sur XML) utilisé par les applications de web services pour
communiquer et opérer les unes avec les autres à travers le Web. L’environnement hétérogène du
web exige que les applications acceptent un protocole commun d’encodage des données et de
format de messages. SOAP fournit un standard d’encodage XML pour les messages permettant
d’appeler des fonctions dans d’autres applications.
25/02/2019 11
Qu'est-ce que SOAP?
Le Web Services Description Language (WSDL) est un langage de définition d’interface fondé sur
XML et utilisé pour décrire la fonctionnalité offerte par un web service.
25/02/2019 12
REST vs SOAP
Différences entre SOAP et REST
• SOAP est un protocole. REST est un style architectural.
• SOAP est l’acronyme de Simple Object Access Protocol. REST est l’acronyme de REpresentational State Transfer.
• SOAP ne peut pas utiliser REST car SOAP est un protocole. REST peut utiliser les web services avec SOAP car
c’est un concept et qu’il peut donc utiliser tout protocole comme HTTP ou SOAP.
• SOAP utilise des interfaces de services pour exposer la logique commerciale. REST utilise des URIs.
• En Java, JAX-WS est l’API Java pour les web services SOAP, et JAX-RS est l’API Java pour les web services
RESTful.
• SOAP définit des standards devant être scrupuleusement suivis. REST ne définit pas de standards comme SOAP.
• SOAP nécessite plus de bande passante et de ressources que REST.
• SOAP définit sa propre sécurité. Les web services RESTful héritent des mesures de sécurité du moyen de
transport sous-jacent.
• SOAP permet uniquement le format XML. REST permet différents formats de données commme Plain text, HTML,
XML, JSON etc.
• REST est actuellement préféré à SOAP.
Les web services SOAP X3
Avec SAFE X3, vous pouvez publier des Objets, des Listes d’objets et des Sous-programmes à travers des
web services qui les rendront accessibles à des applications externes depuis internet :
• Un site web public commercial créant des commandes en X3
• Une application d’entreprise autre que X3
• Une application commerciale de vente sur un PDA (Personal Digital Assistant)
• …
Les liens habituels entre ces applications sont soumis aux contraintes suivantes:
• Le besoin d’accéder à X3 de manière totalement synchrone
• Sécurité maximale (pas de fichiers de données/texte en transit sur les serveurs)
X3 publie un unique web service qui donne accès à tous les objets et sous-programmes par trois différentes
méthodes.
février 19
Méthodes de web service X3
Trois Méthodes
X3 publie un unique Web Service contenant trois types de méthodes: Objets, Listes d’Objets et Sous-
programmes.
• Objets: pour créer, modifier ou supprimer un enregistrement d’objet X3; pour exécuter les boutons ou menus
liés à ces objets sous conditions:
- Commandes de vente
- Clients
- Produits
• Listes d’objets: Une méthode effectuant une requête sur la liste gauche de l’objet principal, i.e. fournissant
une liste des enregistrements au même format que le navigateur de gauche X3.
• Sous-programmes: Une méthode pour appeler un sous-programme X3 (code X3) déclarée dans le
dictionnaire des sous-programmes, par exemple:
- Obtenir une liste de prix pour une combinaison produit/client
- Obtenir une image de produit
- Obtenir le stock disponible pour un produit
- Allouer les réservations des clients
- (Tout sous-programme X3 ne nécessitant pas d’interaction utilisateur ou de fenêtre X3)
février 19
2 – Comment invoquer
les web services SOAP
X3 depuis un portail web
en PHP
• PHP et Syntaxe
• Appel d’un Web Service X3
• Eclipse PHP
25/02/2019 16
Contexte
Le portail PHP vous donne accès en temps réel à vos données Sage X3 (par exemple à vos
commandes). Vous n’avez pas besoin de partager des fichiers lourds par email ou sur un réseau.
Comme les données restent dans X3, et ne sont pas sauvegardées sur un serveur externe, cette
manière de procéder est plus sécurisée. Les employés mobiles (métiers vente par exemple) peuvent
non seulement visionner les données, mais également les modifier et créer de nouveaux
enregistrements (comme de nouvelles commandes) depuis n’importe quel ordinateur, pourvu qu’il soit
doté d’un accès internet via un navigateur.
Vous pouvez créer le portail en utilisant la fonctionnalité Sage X3 SOAP web services et
WampServer®, qui est un environnement Windows de développement web vous permettant de créer
des applications web avec Apache2, PHP, et une base de données MySQL. De plus, PhpMyAdmin
vous permet de gérer facilement vos bases de données [Source: wampserver.com].
février 19
Qu'est-ce que PHP?
PHP (PHP Hypertext Preprocessor) est un langage de script côté serveur conçu pour le
développement web, mais également utilisé comme un langage de programmation dans des
contextes plus variés.
Le code PHP peut être intégré à du code HTML, ou utilisé en combinaison avec divers systèmes de
modèles web, des systèmes de gestion de contenu web et des frameworks web. Le code PHP est
habituellement traité par un interpréteur PHP implémenté comme un module dans le serveur web, ou
comme un exécutable (CGI - Common Gateway Interface). Le serveur web combine les résultats du
code PHP interprété et exécuté, pouvant consister en tout type de données, même des images, avec
la page web générée. Le code PHP peut également être exécuté avec une interface en invite de
commande (CLI) et peut être utilisé pour implémenter des applications graphiques autonomes.
Qu'est-ce que PHP?
L’objectif de la délimitation de tags est de séparer le code PHP des données non PHP
(principalement HTML). Bien que cette fonctionnalité soit rarement utilisée en pratique, PHP peut
exécuter du code incorporé dans tout fichier passé à son interpréteur, y compris des fichiers binaires
comme PDF ou JPEG, ou des fichiers log du serveur. Tout ce qui est hors délimiteurs est ignoré par
le parseur PHP, et retransmis tel quel dans le résultat retourné.
Ces délimiteurs recommandés créent des documents XHTML correctement formés et autres
documents XML. Cela peut être intéressant si les documents de code source doivent être traités
d’une autre manière durant la vie du logiciel.
Si la validation XML correcte n’est pas un problème, et si le fichier contient uniquement du code PHP,
il est préférable d’omettre la balise fermant (?>) à la fin du fichier.
Syntaxe et exemples
Corps
<!DOCTYPE html>
<html>
<head>
<title>PHP Test</title>
</head>
<body>
<?php echo '<p>Hello SAGE X3 World</p>'; ?>
</body>
</html>
Le processeur PHP parse uniquement le code au sein de ses délimiteurs. Tout ce qui est hors
délimiteurs est directement retransmis en output, et n’est pas parsé par PHP. Les seuls délimiteurs
d’ouverture/fermeture autorisés par PSR-1[3] sont <?php et ?> ou <?= et ?>. Dans les fichiers
contenant seulement du PHP, la balise de fin devrait être omis.
Syntaxe et exemples
Variables
Les variables, en PHP, sont représentées par un signe dollar suivi par le nom de la variable. Le nom
de la variable est sensible à la casse.
Les noms de variables suivent les mêmes règles que les autres appellations PHP. Un nom de
variable valide commence par une lettre ou un underscore, suivi par des lettres, nombres, ou
underscores en nombre quelconque. L’expression régulière correspondante est la suivante:
'[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*'
<?php
$var_tic = ‘Tic';
$var_tac = ‘ et Tac';
echo "$var_tic, $Var_tac"; // outputs « Tic et Tac »
<?php
if (condition) {
// instructions;
} elseif (condition2) {
// instructions;
} else {
// instructions;
}
?>
Code PHP pour appeler un Web Service X3
Lecture de la Liste de Clients et d’une Commande Unique
Recommandation:
Suivez le guide pas
à pas
Présentation du portail web PHP
Entrez l’url de votre portail dans votre navigateur par défaut. Dans cet exemple, l’URL est
http://x3pu9trainvm:8125/sagex3/
C’est le nom du serveur X3 Syracuse; le numéro est configuré dans httpd.conf.
Ceci est un exemple de rendu de votre portail.
Avertissement
• Ce portail PHP peut être attractif, mais dans ce cas, le serveur web doit être un vrai serveur de
production.
• Le code PHP n’est qu’un exemple pour les développeurs. Ne le réutilisez pas pour un portail de
production. Le code PHP de ce portail n’a pas été écrit par un spécialiste PHP.
Comment (re)démarrer le serveur Wamp
Démarrez Wampserver
Redémarrez Wampserver
Eclipse PHP pour développement
Installation
Téléchargez
Eclipse pour
PHP 64 bit
Eclipse PHP pour développement
Installation
• Ouvrez Eclipse
40
© 2016 Sage Software, Inc. All rights reserved
La solution Sage X3
Ce que vous devez savoir
Les Web Services sont liés à une solution X3.
Une solution est une installation Sage X3 unique et identifiée contenant:
• Une plateforme de technologies (Runtime, Database Server, Serveur Web etc.)
• Une hiérarchie de dossiers (Dossier de référence → Dossiers enfants)
• Eléments de la base appartenant à chaque dossier
• Des répertoires sur le serveur d’application
Une installation X3 (Solution) est identifiée par un nom et un code, défini dans la console et stocké
dans le fichier solution.xml, dans le répertoire parent du répertoire de référence (typiquement le
répertoire …/Folders ).
Différentes solutions X3, sur différentes machines ou sur la même, peuvent avoir des dossiers avec le
même nom publiés sur les mêmes serveurs Web. Le nom de la solution permet alors de les
différencier.
41
La solution Sage X3
Database Web
Server Server
Process Apps
server
Application
Server
42
Web Serveur Sage X3
43
Traitement de requêtes par le Web Service
Internet / Intranet
7
Web Site
44
Le pool de connexion
X3 Serveur Web
N Connexions Permanentes
45
Pool de Connexion
Fonctionnement
• Des requêtes peuvent arriver simultanément sur le site web.
• Les requêtes sont mises dans une file d’attente jusqu’à ce qu’une connexion soit disponible.
• Lorsqu’une connexion est disponible, le serveur web utilisera cette connexion pour traiter la
requête la plus avancée dans la file d’attente (ordre FIFO)
• L’algorithme de distribution du pool optimise l’utilisation des connexions disponibles en
fonction de l’utilisateur, du langage, du dossier etc… spécifiés.
• Le nombre total de connexions est spécifié dans le Serveur Web.
SERVEUR DE WS POOL
Requête 1
TRAITEMENT Connexions (Canauxs)
Requête 2
Requête 3
File Requête 4
d'attente Requête 5
46
Pool de Connexion
Fonctionnement
E.G: requêtes avec le même utilisateur et 3 langages.
• Les chaînes s’adapteront aux requêtes de manière à rester ouvertes sans changer de contexte
SERVEUR DE WS POOL
TRAITEMENT Connexion #0 (Canaux)
ADMIN Requête 1- ENG
ENG
Connexion #1 (Canaux)
ADMIN Requête 2- ENG
ENG
Connexion #2 (Canaux)
ADMIN Requête 3- ENG
ENG
47
Pool de Connexion
Fonctionnement
E.G: requêtes avec le même utilisateur et 3 langages.
• Les chaînes s’adapteront aux requêtes de manière à rester ouvertes sans changer de contexte
SERVEUR DE WS POOL
TRAITEMENT Connexion #0 (Canaux)
ADMIN Requête 1- FRA
ENG
Connexion #1 (Canaux)
ADMIN Requête 2- FRA
FRA
Connexion #2 (Canaux)
ADMIN Requête 3- FRA
ENG
48
Pool de Connexion
Fonctionnement
E.G: requêtes avec le même utilisateur et 3 langages.
• Les chaînes s’adapteront aux requêtes de manière à rester ouvertes sans changer de contexte
SERVEUR DE WS POOL
TRAITEMENT Connexion #0 (Canaux)
ADMIN Requête 1- FRA
ENG
Connexion #1 (Canaux)
ADMIN Requête 2- FRA
FRA
Connexion #2 (Canaux)
ADMIN Requête 3- FRA
FRA
49
Pool de Connexion
Fonctionnement
E.G: requêtes avec le même utilisateur et 3 langages.
• Les chaînes s’adapteront aux requêtes de manière à rester ouvertes sans changer de contexte
SERVEUR DE WS POOL
TRAITEMENT Connexion #0 (Canaux)
ADMIN Requête 1- ENG
ENG
Connexion #1 (Canaux)
ADMIN Requête 2- FRA
FRA
Connexion #2 (Canaux)
ADMIN Requête 3- ENG
ENG
50
Pool de Connexion
Que sont les traitements enfants?
Que sont les traitements enfants?
Un traitement niveau nœud qui gère les canaux
• Au moins un enfant sur l’hôte Syracuse: W0
51
Pool de Connexion
Que sont les traitements enfants?
Configuration par défaut pour un pool donné.
Canaux
WS Pool Processus #1
WSLIVE1 Enfant W0 Canaux
#2
52
Pool de Connexion
Que sont les traitements enfants?
Autoriser la balance de charge (basée sur la disponibilité des processus Wn)
Canaux #1
Child
Process W0
Canaux #2
WS Pool
WSLIVE1
Canaux #1
Child
Process W1
Canaux #2
53
Pool de Connexion
Que sont les traitements enfants?
54
Publication de Web Services X3
Serveur
Serveur d’application X3 Web Client Application
Sous-programmes
Arguments
X3 Objet
(Clients, Ventes
Commandes,
Produits, Objets
spécifiques…)
Programme
Méthodes: enveloppant
read() +
save()
Programme
delete()
… Test
55
Publication de Web Services X3
56
Publication de Web Services X3
Programme encapsulant
L’utilitaire de publication génère également un programme encapsulant en code X3, qui fait
l’interface entre X3 et le serveur web. Le programme encapsulant est appelé:
• WJ[WS_NAME] pour les objets, où [WS_NAME] est le nom public de l’objet (Web Services).
• WJ[WS_NAME] pour les sous-programmes, où [WS_NAME] est le nom public du sous-
programme (Web Service name).
Le programme encapsulant gère:
• Les arguments d’entête (données techniques, timestamps etc.)
• Messages
• Flux de données, entrants et sortants.
Le programme encapsulant contient un sous-programme de test automatique qui permet au
développeur de faire tourner le web service en X3 avant de l’utiliser depuis une application externe.
57
4 – Paramétrage des
Web Services
• Configuration du serveur X3
• Configuration du pool de web services
• Licences du serveur web
58
© 2016 Sage Software, Inc. All rights reserved
Configuration du serveur X3
59
Configuration du Pool de Web Services X3
Ouvrez Classic SOAP pools configuration dans Administration > Administration > Web Services.
Cliquez sur Create soapClassicPool.
Complétez les champs suivants:
- Alias: Entrez le nom du pool à utiliser dans l’appel au web service.
- Taille d’initialisation: Entrez 1 ( minimum).
Représente le nombre de clients (par process de nœud.js) qui sont initialisés durant le
démarrage du pool.
- Taille maximale: Entrez 1 ( minimum).
Représente the nombre maximal de clients (par process de nœud.js) pouvant être lancés
dans ce pool.
60
Configuration du Pool de Web Services X3
Auto start: Cocher. → si coché, le pool commence dès le démarrage du serveur Syracuse.
X3 server TAGS: Ne pas renseigner. → Pour choisir le même TAG que le TAG du runtime.
Endpoint: Saisir le endpoint (dossier) à utiliser pour les requêtes de web service.
Locale: Saisir votre langage et localisation (Dans cet exemple, Anglais.)
User: Saisir le nom de l’utilisateur, Admin par exemple. Il est préférable de saisir un utilisateur dédié
aux web services exclusivement.
61
Configuration du Pool de Web Services X3
TAGS Serveur X3
• Administration / Endpoints / solutions X3 • Administration / Configuration des pools
• TAG serveur X3 classiques SOAP
• X3 server TAG
62
Configuration du Pool de Web Services X3
63
Licences Serveur Web
Installation
65
Licences Serveur Web
Notification pour licence
• Administration / Paramétrage / Paramétrage global
license_web_warn Cet événement est lancé lorsque la limite en volume des données allouée
aux web services par la licence est significativement proche de la limite
réelle. L’objectif est de rappeler à l’utilisateur qu’il/elle devrait faire
attention à la limite et peut-être améliorer les termes de la licence.
66
Licences Serveur Web
Installation
WEB SERVICES
UTILISATION GRATUITE
JUSQU’À NOUVEL ORDRE
67
5 – Publication et Test
25/02/2019 68
Publication de sous-programmes
Sous-programme
Dictionnaire
Introduction
• Un sous-programme doit être déclaré dans le Dictionnaire des sous-programmes
(Développement / Dictionnaire de Scripts / Scripts / Sous-programmes) de manière à être utilisé
comme un web service.
• Un sous-programme appelé comme un Web Service peut retourner des valeurs à l’entité
appelante via certains de ses arguments, passés par adresse plutôt que par valeur.
70
Sous-programme
Dictionnaire
Génération de messages dans un sous-programmes
Il est possible de générer des messages et de les envoyer au serveur web durant l’exécution d’un
sous-programme. Pour s’assurer que les messages sont correctement générés, vous devez toujours
utiliser les appels suivants:
Les messages sont transmis dans les données de la réponse XML et peuvent être utilisés par
l’application côté client.
71
Publier dans un sous-programme
Utilitaire de publication
• Pour publier un sous-programme, vous devez simplement définir le nom public du Web Service.
• L’utilitaire de publication générera le fichier de description XML sur le serveur d’application, dans le
répertoire suivant: X3_PUB/<FolderName>/GEN/ALL/WEBS
• Le programme encapsulant est également créé avec le nom suivant : WJ[WS] où [WS] est le nom
public du web service.
72
Cas pratique 1
“Liste de clients”
Notre sous-programme d’exemple ira chercher une liste de clients (codes, noms et limite de crédit)
depuis la table clients X3 (BPCUSTOMER).
Un intervalle de codes clients et un nombre maximal de clients peut être envoyé comme arguments
d’input.
73
Cas pratique 1
• Trouvez le script XLISTBPC.src
• Compilez-le et sauvez-le sous le nom XLISTBPC
• Créez la description de ce sous-programme dans le dictionnaire:
• Développement > Dictionnaire de Scripts > Scripts > Sous-programmes (GESASU)
- Processus: XLISTBPC
- Sous-programme: LISTBPC
• La liste de paramètres est chargée automatiquement.
• Description: Liste de clients
• Web Services
• Le nombre renseigné dans la colonne dimension pour BPCNUM, BPCNAM et OSTAUZ doit être le nombre de
clients que l’on désire afficher (NBBPC).
74
•
Cas pratique 1
• Onglet définition, Nom de publication: WSLISTBPC
• Vérifiez l’onglet de mapping; que voyez-vous dans les colonnes de groupe et de niveau?
• Dans l’onglet Définition, notez le nom du programme encapsulant dans le bloc d’information.
• Ouvrez le programme encapsulant et exécutez-le
75
©
Cas pratique 1
Script XLISTBPC
#**
#* BPCLIST: Liste de clients pour Web Services
#* @param BPCSTR Borne inférieure
#* @param BPCEND Borne supérieure
#* @param NBBPC Nombre de clients dans la liste (dimension)
#* @param BPCNUM Code client
#* @param BPCNAM Nom du client
#* @param OSTAUZ Crédit du client
#*!
Subprog LISTBPC(BPCSTR,BPCEND,NBBPC, BPCNUM, BPCNAM, OSTAUZ)
…
End
76
Cas pratique 1
Êtes-vous prêt à pratiquer?
Cas pratique 1
► Compilez-le et sauvez-le sous le nom XLISTBPC
► Créez la description de ce sous-programme dans le dictionnaire
► Créez le web service WSLISTBPC
► Publiez le web service
► Ouvrez le programme encapsulant et exécutez-le
78
Cas pratique 1
► Compilez-le et sauvez-le sous « XLISTBPC » dans Eclipse
Compiler
79
Cas pratique 1
► Créez la description de ce sous-programme dans le dictionnaire 1/2
Code activité
préalablement créé
N’oubliez pas
cette case
80
Cas pratique 1
► Créez la description de ce sous-programme dans le dictionnaire 2/2
► N’oubliez pas de mettre une dimension >1 pour les tables de valeurs de retour
81
Cas pratique 1
► Créez le web service WSLISTBPC
82
Cas pratique 1
► Publiez le web service
Publiez
83
©
Cas pratique 1
► Ouvrez le programme encapsulant et exécutez-le dans X3
84
©
Cas pratique 1
► Ouvrez le programme encapsulant et exécutez-le dans le fichier de logs X3.
85
©
Sous-programmes de test - Outil X3
Sous-programmes de test - Outil X3
Test du Web Service « Liste de clients »
Outil X3– Administration / Web Services / Web services SOAP classique
87
Test du Web Service « Liste de clients »
Outil X3
Outil X3 – Administration / Web Services / Web services SOAP classique
88
Test du Web Service « Liste de clients »
Outil X3 - Exécution
Outil X3– Administration / Web Services / Web services SOAP
classique
Cliquez sur Exécuter
• Code du langage: langage (FRA, ENG, BRI...)
• Alias de Pool: Code de Pool (ex : SEED)
• Pool ID: vous permet de forcer un client spécifique à
travers une définition de pool
• Configuration de requête :
adxwss.beautify=true&adxwss.optreturn=JSON
• Nom Public: Nom du web service
89
Test du Web Service « Liste de clients »
Outil X3 - Exécution
• Input XML/JSON:
{ "GRP1" : {
"BPCSTR": "",
"BPCEND": "",
"NBBPC": "0"
}
90
Test du Web Service « Liste de clients »
Outil X3 - Exécution
Retour du Web Service
• Status : 0 = NOK, =1=OK à l’exécution du Web Service
91
Test du Web Service: Liste de clients
Outil X3 - Exécution Result XML/JSON:
Retour du Web Service {
"GRP1": {
"BPCSTR": "",
"BPCEND": "",
"NBBPC": "0"
},
"GRP2": [
{
"BPCNUM": "",
"BPCNAM": "",
"OSTAUZ": "0"
}
]
} 92
Test du Web Service « Liste de clients »
Outil X3 - Exécution
Configuration de la requête:
Un ensemble de configurations séparées par le caractère '&' :
adxwss.trace.on: valeur 'on' activée
adonix.trace.level : Entier définissant le niveau des traces de l’exécution.
adonix.trace.size: Entier définissant la taille des CLOB durant l’exécution.
adxwss.optreturn : Peut être 'XML' ou 'JSON'. La valeur par défaut est 'XML'.
adxwss.beautify: Peut être 'true' ou 'false'. Mis à ‘true’, le flux de retour est formaté pour être plus
lisible.
93
Le programme encapsulant
94
Sous-programmes de test – Outil Soapui
Test du Web Service « Liste de clients »- Outil Soapui
97
Test du Web Service « Liste de clients »- Outil Soapui
98
Test du Web Service « Liste de clients »- Outil Soapui
Copiez l’url
99
Test du Web Service « Liste de clients »- Outil Soapui
100
Test du Web Service « Liste de clients »- Outil Soapui
Fichier wsdl
101
Test du Web Service « Liste de clients »- Outil Soapui -
Exécution
Renommez la requête web service Requête_Liste_de_Clients.
102
Test du Web Service « Liste de clients »- Outil Soapui –
Exécution
Modification du flux xml en input
<soapenv:Envelope
…
<codeLang xsi:type="xsd:string"> ENG </codeLang>
<poolAlias xsi:type="xsd:string"> SEED </poolAlias>
<poolId xsi:type="xsd:string"></poolId>
<requestConfig xsi:type="xsd:string"></requestConfig>
</callContext>
<publicName xsi:type="xsd:string"> WSLISTBPC </publicName>
<inputXml xsi:type="xsd:string"> … </inputXml>
…
103
Test du Web Service « Liste de clients »- Outil Soapui -
Exécution
"BPCSTR": "AO01",
"BPCEND": "ES001",
Vous devez entourer json
"NBBPC": "5" avec
} <![CDATA[ … ]]>
}
]]>
</inputXml>
104
Test du Web Service « Liste de clients »- Soapui - Exécution
Username : utilisateur X3
Password : mdp X3
Pré-emptive auth: Authentification
prioritaire
Test du Web Service « Liste de clients »- Outil Soapui -
Exécution
106
Test du Web Service « Liste de clients »- Outil Soapui -
Exécution
• Statut: 0
107
Test du Web Service: Liste de clients - Outil Soapui -
Exécution
Résultat NOK du Web Service
• Message d’erreur
108
Test du Web Service « Liste de clients »- Outil Soapui -
GetDescription
XLM input
XML Output
109
Test du Web Service « Liste de clients »- Outil Soapui -
GetDescription
Description de l’output XML. Pas de description JSON dans la balise <resultXml>:
<ADXDOC …>
<ADXDATA>
<GRP PNA="GRP1" NAM="GRP1" DIM="1">
<FLD NAM=“BPCSTR“ IDX=“1“ TYP=“Char“ PAR=“Value“ MOD=“Input“ LEN=“250“ C_ENG=“Start range“ >
<FLD NAM=“BPCEND“ IDX=“2“ TYP=“Char“ PAR=“Value“ MOD=“Input“ LEN=“250“ C_ENG=“End range“ >
<FLD NAM=“NBBPC“ IDX=“3“ TYP=“Integer“ PAR=“Value“ MOD=“Input“C_ENG=“Number of customer“ >
</GRP>
<GRP PNA="GRP2" NAM="GRP2" DIM="100">
<FLD NAM=“BPCNUM“ IDX=“4“ TYP=“Char“ PAR=“Adr“ MOD=“Input“ LEN=“250“ C_ENG=“Customer code“ >
<FLD NAM=“BPCNAM“ IDX=“5“ TYP=“Char“ PAR=“Adr“ MOD=“Input“ LEN=“250“ C_ENG=“Customer name“ >
<FLD NAM=“OSTAUZ“ IDX=“6“ TYP=“Decimal“ PAR=“Adr“ MOD=“Input“C_ENG=“Customer credit“ >
</GRP>
</ADXDATA>
<ADXMEN> ... </ADXMEN>
</ADXDOC>
110
Test du Web Service « Liste de clients »- Outil Soapui -
GetDescription
{
"GRP1": {
Input-Output JSON "BPCSTR": "AO01",
"BPCEND": "ES001",
"NBBPC": "5"
},
"GRP2": [
{
"BPCNUM": "AO021",
"BPCNAM": "Agro Alimentar do Namibe",
"OSTAUZ": "0"
},
{
"BPCNUM": "AO151",
"BPCNAM": "Luanda Bikes",
"OSTAUZ": "0"
},
{
"BPCNUM": "AO152",
"BPCNAM": "SoftCenter - Informatica ",
"OSTAUZ": "0"
}
]
}
111
Test du Web Service « Liste de clients »- Outil Soapui -
GetDescription
Input-Output XML
<ADXDATA>
<GRP NAM="GRP1"> For Input XML For Output XML
<FLD NAM=“BPCSTR“ TYPE=“Char“/>
<ADXDATA> → <PARAM> <ADXDATA> → <RESULT>
<FLD NAM=“BPCEND“ TYPE=“Char“/> </ADXDATA> → </PARAM> </ADXDATA> → </RESULT>
<FLD NAM=“NBBPC“ TYPE=“Integer“/>
</GRP>
<GRP DIM="100“ NAM="GRP2" SIZE=“5">
<LIN NUM="1”>
<FLD NAM=“BPCNUM“ TYPE=“Char“ />
<FLD NAM=“BPCNAM“ TYPE=“Char“ />
<FLD NAM=“OSTAUZ“ TYPE=“Decimal“ />
</LIN>
<LIN NUM=“2”>
<FLD NAM=“BPCNUM“ TYPE=“Char“ />
<FLD NAM=“BPCNAM“ TYPE=“Char“ />
<FLD NAM=“OSTAUZ“ TYPE=“Decimal“ />
</LIN>
</GRP>
</ADXDATA>
112
Test du Web Service « Liste de clients »- Outil X3
Qu'est-ce que le format JSON?
Qu'est-ce que le format JSON?
JSON: JavaScript Object Notation.
JSON est une syntaxe pour stocker et échanger des données.
JSON est plus facile d’usage que XML.
JSON: Exemple:
{"employees":[
{"firstName":"John", "lastName":"Doe"},
{"firstName":"Anna", "lastName":"Smith"},
{"firstName":"Peter", "lastName":"Jones"}
]}
113
Test du Web Service « Liste de clients »- Outil X3
Qu'est-ce que le format JSON?
Règles de syntaxe JSON
114
Test du Web Service « Liste de clients »- Outil X3
Qu'est-ce que le format JSON?
“GRPn” : { "GRPm": [
“Field1” : “value string”, {
“Field2” : number “Field1” : “value string 1”,
} “Field2” : number 1
},
{
“Field1” : “value string 2”,
“Field2” : number 2
}
]
116
Description XML
Input / Output pour sous-programmes X3
Le groupe GRPn est de dimension 1
<GRP ID="GRPn">
<FLD NAME="STOCK“>
Valeur du champ Format d’input simplifié
</FLD>
</GRP>
117
Description XML
Input / Output pour sous-programmes X3
<TAB ID=“GRP2“>
<LIN NUM=“1“>
<FLD NAME="STOCK“>Value of field 1</FLD>
</LIN>
<LIN NUM=“2“>
Format d’input simplifié
<FLD NAME="STOCK“>Value of field 2</FLD>
</LIN>
</TAB>
118
XML/Description JSON
Input / Output pour sous-programmes X3
119
Publication d'objets
Publication d'objets
Le Dictionnaire des Objets
Les objets X3 (Produits, Commandes de vente, Fournisseurs, etc.) sont stockés dans un dictionnaire décrivant:
• Le navigateur de gauche (Paramètres de Sélection)
• Les écrans d’objet (Champs, blocs etc.)
• Options spéciales / boutons / menus
• La table principale de l’objet
• Les traitements X3 liés à l’objet
Pour publier un objet, il n’est habituellement pas nécessaire de modifier le dictionnaire. Si l’objet est disponible
en mode TP, il devrait également l’être à travers les Web Services.
Cependant, des modifications minimes peuvent s’avérer nécessaires pour accéder aux écrans de saisie
supplémentaires, comme l’écran des adresses dans les Commandes de Vente. Ces modifications se font via
l’option Ecrans Supplémentaires du dictionnaire des objets.
Le modèle objet est le type de fonction le plus utilisé dans X3. D’autres fonctions n’appartenant pas à ce
modèle (par exemple des fonctions standard comme la Validation Automatique de Factures) peuvent
habituellement être encapsulées dans des sous-programmes pouvant être appelés via des Web Services.
121
Publication d'objets
Types de champs
Les champs d’objet peuvent être:
• Saisissables: Le champ est utilisé et transmis dans les Web Services ainsi que dans les clients
traditionnels.
• Affichés: Le champ est transmis dans les Web Services ainsi que dans les clients traditionnels.
• Invisibles: Les champs invisibles ne sont jamais transmis aux clients traditionnels. Pour les Web
Services, vous avez le choix de publier ou non ces champs.
• Techniques: Ces champs ne sont jamais transmis ni aux clients, ni aux applications de Web
Services.
Les champs invisibles et techniques sont disponibles dans les classes [M] :
→ Ne pas les transmettre aux clients réduit le trafic réseau.
122
Publication d'objets
Actions de champ
Un type d’exécution est attaché à chaque action de champ dans le dictionnaire des écrans (champ
Exécution):
• Interactive: L’action est exécutée seulement chez les clients traditionnels.
• Toujours: L’action est exécutée chez les clients traditionnels et en mode web service.
• Import / Web Service: Exécuté uniquement en import et mode web-service (non interactif).
L’utilitaire de publication génère le fichier de description XML sur le serveur d’application, dans le
dossier:
X3_PUB/<FolderName>/GEN/ALL/WEBS.
124
Cas pratique 2
“Publication d'objets SOH”
Cet exemple va publier l’objet SOH avec la transaction WEB.
125
Cas pratique 2
Fonction Développement > Dictionnaire de Scripts > Scripts > Web Services
Nom de publication: WSORDER
Description: Commandes de Vente
Objet: SOH
Transaction: WEB
• Dans l’onglet Définition, notez le programme encapsulant dans le bloc information.
• Ouvrez le programme encapsulant WJWSORDER et exécutez-le.
Note: Si vous recevez un message d’erreur "Trop de champs publiés”, réduisez le nombre de
lignes de la grille SOH4
126
Cas pratique 2
Êtes-vous prêt à pratiquer?
Cas pratique 2
128
Cas pratique 2
► Créez le web service WSORDER
129
Cas pratique 2
► Création
► Sauvegarde
► Publication
130
Cas pratique 2
► Publiez le web service
► Si vous avez cette erreur,
131
Cas pratique 2
132
Cas pratique 2
► Ouvrez le programme encapsulant
et exécutez-le dans le fichiers de logs X3
► C’est la liste de gauche
133
Objets de test – Outil X3
Test du Web Service: Objet SOH – Outil X3 - Requêtes
Outil X3:
Administration / Web Services / Web services SOAP classique.
Cliquez sur Requête
C’est la liste de gauche de l’objet SOH (Commandes)
Taille de liste: Nombre maximal d’enregistrements dans
la liste de gauche.
135
Test du Web Service Objet SOH - Outil X3 - Requête
136
Test du Web Service Objet SOH - Outil X3 - Requête
Retour du Web Service
• Résultat XML/JSON
[
{
"SOHNUM": "SOWFR0120001",
"BPCORD": "FR001",
"ORDDAT": "07/09/2016",
…
},
{
"SOHNUM": "SOWFR0110005",
"BPCORD": "FR001",
"ORDDAT": "07/09/2016",
…
}
]
137
Test du Web Service Objet SOH - Outil X3 - Lecture
138
Test du Web Service Objet SOH - Outil X3 - Lecture
Résultat retourné par le Web Service
139
Test du Web Service Objet SOH - Outil X3 - Lecture
Résultat retourné par le Web Service
Résultat XML/JSON
{
"SOH0_1": {
"SALFCY": "FR011",
"ZSALFCY": "Comptech SA",
"SOHTYP": "WEB",
…
"WSOHCAT": ""
},
"SOH1_1": {
"BPCINV": "FR001",
"BPINAM": "Urban Cycle",
…
140
Test du Web Service Objet SOH - Outil X3 - Sauvegarde
Click Save.
It is for creation of
an SOH record.
141
Test du Web Service Objet SOH - Outil X3 - Sauvegarde
Résultat retourné par le Web Service
142
Test du Web Service Objet SOH - Outil X3 -
Sauvegarde
Résultat retourné par le Web Service
The SOHNUM field has the new value of the order.
Result XML/JSON
{
"SOH0_1": {
"SALFCY": "FR011",
"ZSALFCY": "Comptech SA",
"SOHTYP": "WEB",
…
"WSOHCAT": ""
},
"SOH1_1": {
"BPCINV": "FR001",
"BPINAM": "Urban Cycle",
…
143
Tests - Outil Soapui
Test du Web Service: Objet SOH – Outil Soapui
145
Test du Web Service: Objet SOH – Outil Soapui - Requête
146
Test du Web Service: Objet SOH – Outil Soapui - Requête
Modifiez le flux xml d’input
<soapenv:Envelope …
ENG </codeLang>
<codeLang xsi:type="xsd:string">ENG
SE
<poolAlias xsi:type="xsd:string">SEED
SEED </poolAlias>
ED
<poolId xsi:type="xsd:string"></poolId>
<requestConfigxsi:type="xsd:string">
<![CDATA[adxwss.beautify=true&adxwss.optreturn=JSON]]>
ON]]>
</requestConfig>
</callContext>
<publicName xsi:type="xsd:string">WSORDER
WSORDER </publicName>
…
147
Test du Web Service: Objet SOH – Outil Soapui - Requête
</listSize>
148
Test du Web Service: Objet SOH – Outil Soapui – Requête
Résultat retourné par le Web Service
"SOHNUM": "SOWFR0120001",
"BPCORD": "FR001",</resultXml>
149
Test du Web Service : Objet SOH – Outil Soapui - Lecture
©
Test du Web Service : Objet SOH – Outil Soapui - Lecture
<keys>
</keys>
</objectKeys>
<objectKeys xsi:type="wss:ArrayOfCAdxParamKeyValue"
soapenc:arrayType="wss:CAdxParamKeyValue[]">
</objectKeys>
152
©2016
Test du Web Service : Objet SOH – Outil Soapui – Lecture
Résultat Web Service
Résultat XML/JSON
{<resultXml xsi:type="xsd:string>
"SOH0_1": {
"SALFCY": "FR011",
"SOHTYP": "WEB",
…
Statut du web service :
<status xsi:type="xsd:int">1</status> 1 = OK
0 = NOK
153
Test du Web Service : Objet SOH – Outil Soapui -
Sauvegarde
Renommez la requête pour l’objet SOH
154
Test du Web Service : Objet SOH – Outil Soapui - Sauvegarde
Pour cette partie de JSON, vous pouvez: a) obtenir le résultat de l’opération Lecture, b) initialiser le
champ SOHNUM
]]>
</objectXml>
156
Test du Web Service : Objet SOH - Outil Soapui - Sauvegarde
"SOHNUM": "",
…
]]>
</objectXml>
157
Test du Web Service : Objet SOH - Outil Soapui - Sauvegarde
Résultat retourné par le Web Service
Le champ SOHNUM contient la clé de la nouvelle commande.
Résultat XML/JSON
{<resultXml xsi:type="xsd:string>
"SOH0_1": {
"ZSOHTYP": "WEB",
Statut du Web Service :
"SOHNUM": "SOWFR0110007", 1 = OK
"REVNUM": "0",… 0 = NOK
<status xsi:type="xsd:int">1</status>
158
Description JSON : Input / Output pour les objets X3
Le groupe fait correspondre l’écran d’abréviations et le numéro de bloc pour un bloc liste
"SOH0_1“ : {
"SOHNUM": “SOW001“,
“REVNUM": “0“,
“SOHTYP": “WEB“,
“SALFCY": “FR011“,
“ORDDAT": “20160907“,
“BPCORD": “FR001“,
“BPCNAM": “Urban Cycle“
}
159
Description JSON : Input / Output pour les objets
"SOH4_1“: [
{
"NUMLIG“: “0”,
"ITMREF“: “DIS010”,
"QTY“: “2”
},
{
"NUMLIG“: “0”,
"ITMREF“: “DIS010”,
"QTY“: “2”
}
160
Description XML : Input / Output pour les objets
Le groupe fait correspondre l’écran d’abréviations et le numéro de bloc pour un bloc liste
<GRP ID="SOH0_1">
<FLD NAME="SOHNUM" TYPE="Char">SOWFR01100006</FLD>
<FLD NAME=“REVNUM" TYPE="Char">0</FLD>
<FLD NAME=“SOHTYP" TYPE="Char">WEB</FLD>
<FLD NAME=“SALFCY" TYPE="Char">FR011</FLD>
<FLD NAME=“ORDDAT" TYPE="Char">20160907</FLD>
<FLD NAME=“BPCORD" TYPE="Char">FR001</FLD>
<FLD NAME=“BPCNAM" TYPE="Char">Urban Cycle</FLD>
</GRP>
Description XML : Input / Output pour les objets
162
Description XML : Input / Output pour les objets
XML : JSON :
163
XML/Description JSON : Input / Output pour les objets
164
Flux de données SOAP XML
Flux de données XML retournés
Statut et messages
• Le flux XML de retour contient une section qui indique le statut de la requête et potentiellement
des messages d’information, d’avertissement ou d’erreur.
Informations techniques
• Il contient également une section technique qui contient le détail des logs du traitement (si le
logging a été autorisé) et des informations de timing.
Données
• Pour toutes les méthodes de web service (objet, liste, sous-programme), le système retourne un
flux XML qui correspond, dans la description XML du web service, à l’élément <ADXDATA>
peuplé de valeurs.
• Les données sont contenues dans l’élément <RESULT> dans le flux XML retourné.
165
Flux de données XML
Vérification de l'intégrité des données
En X3, la gestion de l’intégrité des données et des conflits s’effectue au moyen de verrous symboliques. Seul un
unique utilisateur est autorisé à modifier un objet à un instant donné, et l’enregistrement est verrouillé dès que
l’utilisateur y accède.
Dans les Web Services, les méthodes Lecture et Écriture sont séparées. La méthode de lecture ne verrouille pas
l’objet (il n’y a aucun intérêt à verrouiller l’objet lorsqu’il est lu en mode web service).
Pour vérifier que l’objet n’a pas été modifié entre le moment où les données ont été lues et le moment où elles ont été
modifiées, il faut suivre la procédure suivante:
• La méthode Lecture retourne deux champs techniques inclus dans l’élément <ADXTEC> dans le flux XML de
retour:
- WW_MODSTAMP Time stamp de la mise-à-jour objet la plus récente
- WW_MODUSER Modification de l’utilisateur
• Si le champ WW_MODSTAMP est inclus dans l’input XML pour la méthode Modification, le système vérifie que
l’objet n’a pas été modifié depuis ce moment.
• Si l’objet a été modifié, un message d’erreur est retourné → (« Enregistrement modifié depuis la dernière lecture")
166
Flux de données XML
Écrans de détail/grilles
Les écrans de détail/grilles nécessitent une attention spéciale lorsqu’on y accède en mode web
service. L’exemple le plus fréquent est l’écran d’adresses dans BPs, Clients, Fournisseurs etc.
Pour y accéder via les Web Services, ces écrans doivent respecter les standards suivants:
• Code des champs de saisie (partie droite) = Caractère constant + Code du champ invisible
(Par ex XBPACRY = X + BPACRY).
• Le dernier champ numérique invisible (C) dans le bloc est la variable permettant de contrôler le
nombre de lignes. Il est initialisé par le programme encapsulant, pour chaque ligne, lorsque l’écran
est utilisé.
Seuls les champs du bloc grille (partie gauche) sont transmis via Web Service et nécessitent d’être
peuplés lors d’une création ou d’une modification. Tous les champs invisibles sont automatiquement
inclus dans la description du service web.
Lors de la modification d’enregistrements dans ces écrans, la variable de fin de grille (NBLIG,
NBADR etc.) doit être correctement alimentée. Dans le cas contraire, la dernière ligne du flux d’input
XML est considérée comme la dernière ligne d’écran.
167
Flux de données XML
Écrans supplémentaires (dictionnaire des objets)
Il est possible d’ajouter à un objet jusqu’à 8 écrans supplémentaires avec leurs abréviations
respectives.
L’application (code X3) doit veiller à l’utilisation correcte de ces écrans en mode web service
(GWEBSERV=1).
L’objet standard SOH doit être modifié pour illustrer l’utilisation d’écrans supplémentaires.
168
Le programme encapsulant
Arguments d’entête
Le programme encapsulant agit comme une interface entre le serveur web et l’objet X3. Il gère:
Le programme encapsulant contient du code de test pouvant être utilisé pour s’assurer du bon
comportement de l’objet, tout simplement en exécutant le programme encapsulant avec les
paramètres corrects pour chaque action/méthode de l’objet.
Le code de test génère un fichier de trace générique avec les résultats.
Un certain nombre de sections peut être inséré dans un autre programme appelé ZZWS[OBJ]
où [OBJ] est le code objet. Si elles existent, elles seront appelées:
• $INITMAJ: Initialisation de paramètres pour les actions/méthodes de l’objet (Lecture /
Création / Modification / Suppression / Actions spéciales).
• $RESMAJ: Analyse des résultats et des lignes additionnelles du fichier de trace pour les
actions/méthodes de l’objet.
• $INITLG: Initialisation de paramètres pour la méthode de la liste de gauche.
• $RESLG: Analyse des résultats et des lignes additionnelles du fichier de trace pour la
méthode de la liste de gauche.
170
Web Service pour le portail PHP
Exemple de Site Web PHP
Web Service pour le portail PHP
172
Cas pratique 3
“Exécutez le web service YOSOH
dans Soapui”
173
Cas pratique 3
• Dupliquez les requêtes Query_WSORDER en Query_YOSOH pour Requête, Lecture et
Sauvegarde
• Exécutez les requêtes ci-dessous:
174
Utilisation des logs X3 pour les web
services
Trace du serveur- Configuration
Administration / Settings / Global settings
Bloc Logs
176
Trace du serveur- Configuration
• Edition
• Selection
• http
• Set Silly
177
Trace du serveur- Configuration
• Selection
• Soap-generic
• Mettre la valeur Silly
- Ackcall
- Request
178
Trace du serveur- Configuration
Plusieurs types d’événements sont listés dans la trace et identifiés dans la grille de
Configuration.
Pour chaque type d’événement de la trace, il est possible d’avoir plusieurs niveaux de trace:
* Erreur répertorie les erreurs trouvées.
* Warning répertorie les avertissements.
* Info Ajoute aux événements suivants les logs d’information.
* Debug C’est la trace la plus verbeuse. Retourne beaucoup d’informations
supplémentaires.
* Silly qui est la trace la plus détaillée et renvoie encore plus d'informations.
179
Trace du serveur- Visualiser les sessions de Web services
Processus Node– W0
180
Trace du serveur– Executer le web service
181
Trace du serveur – Ouvrir la trace
Le detail :
182
Traces de l'hôte – Revenir au paramétrage initial
183
6 – Mise à jour du portail
web PHP & Comment
ajouter des produits
2/25/2019 184
PHP - Liste de produits
Les corrections sont dans C:\Sage\wamp\www\sagex3\EXERCISES\1
PHP – Liste de produits
186
PHP – Liste de produits
187
PHP – Liste de produits
Nouveau code
<li class="dropdown"><a href="#" class="dropdown-toggle"
data-toggle="dropdown" role="button" aria-expanded="false">Products X3
<span class="caret"></span>
</a>
<ul class="dropdown-menu" role="menu">
<li><a href="page_itm_list.php">Liste de produits</a></li>
</ul>
</li>
188
PHP – Liste de produits
189
PHP – Liste de produits - Démo
190
PHP - Détail des produits
Les corrections sont dans C:\Sage\wamp\www\sagex3\EXERCISES\2
PHP – Détail des produits
• Modification de C:\Sage\wamp\www\sagex3\WebService\models\Product.php
• Modification de la fonction showList()
• Modification de la fonction showOne()
• Copie de C:\Sage\wamp\www\sagex3\page_soh_read.php to
C:\Sage\wamp\www\sagex3\page_itm_read.php
• Modification du fichier page_itm_read.php
192
PHP – Détail des produits - Démo
Cliquer
pour
visualiser
les détails
du
produits
193
7 – Bonnes pratiques &
Performance
194
© 2016 Sage Software, Inc. All rights reserved
Publication
Transaction de Saisie
serveur d’application)
195
Mesure du temps d'exécution: Web Service 'Commande'
• Avec Soapui, il est facile de mesurer le temps d’exécution d’un web service
196
Pools de Web Services
Configuration d'un pool
• Taille et configuration de pool adaptée aux données
• Plusieurs pools (Contextes séparés: requêtes lentes/rapides, etc.)
• Plusieurs canaux par pool.
• L’application web aura besoin de connaître la configuration des pools pour répartir correctement
les requêtes.
• Changer de langage n’est pas le plus coûteux. Changer d’utilisateur est plus coûteux.
• Assurez-vous qu’il y a assez de canaux par pool:
. Recommandé: utilisateurs*langages
. 1 canal par utilisateur au moins
OU
. 3 canaux minimum pour un dossier LIVE
197
Débug et logs
198
8 – Limitations des Web
Services
2/25/2019 199
Le dictionnaire de sous-programmes
Possibilités et limitations
• Les sous-programmes ne doivent pas ouvrir de fenêtre X3 pour interagir avec l’utilisateur. Ils
doivent tourner de manière indépendante et n’utiliser que leurs arguments.
• Toutes les instructions d’affichage (Affzo, Diszo etc.) sont interdites. Toutes les instructions de base
de données sont bien sûr autorisées.
• L’instruction infbox n’arrête pas le web service, mais n’envoie pas de message à l’application
cliente.
• Les emails peuvent être envoyés via l’instruction Send, ou en utilisant l’utilitaire meladx (serveur
smtp nécessaire).
• Les rapports peuvent être générés en utilisant l’instruction Report. Toujours utiliser un Serveur
d’Impression X3.
200
Publication d'un objet
Paramétrage et limitations
• Une fois qu’un objet a été publié, il doit être ajusté pour s’assurer de sa compatibilité avec les Web
Services.
• En standard, les seuls objets devant être vérifiés sont les suivants:
Commandes de Vente (SOH), Clients (BPC) Produits (ITM).
• Les autres objets doivent être vérifiés: Selon les paramètres et les actions utilisateur, des fenêtres
supplémentaires peuvent être affichées, ce qui est incompatible avec les web services.
• Les limitations principales sont liées à des problèmes d’affichage (instruction Infbox, ouverture
de fenêtres additionnelles (détail de stock, Picking dans la Liste gauche,…) )
• 65000 champs sont publiables au maximum pour les objets et les sous-programmes (Nb de
champs x Dimension)
➔ Important: utiliser une transaction de saisie dédiée et ajustée (si disponible).
201
9 – Nouveaux web
services X3 (REST)
2/25/2019 202
Introduction – Nouveaux Web Services X3
La technologie Sage X3 Version 7 introduit un nouveau type de Web Services: les Web Services
REST.
Trois types de fonctionnalités (‘facets’ en anglais) peuvent être utilisées:
• Requête
• Détail
• Edition
Dans les exemples suivants, on considère que le nom du serveur V7 est X3PU9TRAINVM.
25/02/2019 203
Outils pour tester les web services REST
Utilisez Chrome
25/02/2019 204
Format JSON
25/02/2019 205
Méthodes HTTP pour web services RESTFul
Le protocole HTTP contient diverses méthodes utilisables pour les Web Services RESTful. Ces
méthodes autoriseront les opérations CRUD.
GET: est utilisé pour lire la représentation d’une ressource, par exemple la liste de commandes de
vente, ou une commande de vente
POST: est utilisé pour créer une nouvelle ressource
PUT: est utilisé pour mettre à jour une ressource existante. Il est possible de créer une nouvelle
ressource en passant la clé en paramètre d’input, mais ce n’est pas recommandé.
DELETE: est utilisé pour supprimer une ressource.
Data operation RESTful methods
Create POST
Read GET
Update PUT
Delete DELETE
25/02/2019 206
Sdata expliqué simplement
SData est un protocole Web créé par Sage qui:
• Est basé sur les normes standards, en fonction des spécifications HTTP, ATOM et JSON.
• Conforme aux principes REST.
• Est applicable à divers scénarios tels que les API, les applications mobiles ou l'intégration de tiers.
• Est libre d'utiliser.
2/25/2019 207
Sdata expliqué simplement
Les versions 7 et supérieures utilisent ce protocole entre le serveur Web Sage X3 et les différents
clients tels que les services Web, les logiciels Microsoft Office, le client mobile et le client Web avec
quelques extensions:
• Il existe deux branches de protocole:
• La première est RESTful et sans-état(« stateless ») et est utilisée lorsque les données sont
parcourues.
• La seconde est avec état (« stateful ») et n'est utilisée que lorsqu'une mise à jour est en cours. Un
identifiant unique de copie de travail (« Working copy ») identifie la ressource dans laquelle la
modification est en cours et les deltas sont échangés.
2/25/2019 208
Sdata expliqué simplement
Lorsqu'une ressource est nécessaire pour une page, il existe deux flux de données:
• Le premier renvoie le prototype. C'est la description du flux de données géré par la ressource et
correspond à la description du contrat.
• Le second est la donnée elle-même. Un flux de données peut inclure des mises à jour de
prototypes supplémentaires.
Pour plus d'informations sur SData, rendez-vous sur le site Web suivant: http://sdata.sage.com/
2/25/2019 209
Les différences entre les deux API de web services
Cet article décrit les différences entre l'API du service Web SAFE X3 et la spécification du protocole
SData 2.0.
Syntaxe URL
L'API Web SAFE X3 diffère de la syntaxe d'URL SData 2.0 comme suit:
• Les URL SAFE X3 commencent par /api1/ au lieu de /sdata/.
• Les URL SAFE X3 ont un paramètre de représentation obligatoire, qui n'est pas obligatoire dans
SData.
2/25/2019 210
Les différences entre les deux API de web services
L'utilisation des urls / api1 / gère le mode sans état utilisé dans les services Web:
• Chaque appel doit contenir l'en-tête d'autorisation
• Le cookie de session n'est pas utilisé
• Les sessions de gestion du service sont créées sur un pool de connexion dédié avec un court
délai pour pouvoir être rapidement libérées si elles ne sont plus utilisées
2/25/2019 211
Les différences entre les deux API de web services
Attention Si dans le reste du document,
Nous utilisons le mot "sdata",
Il doit être remplacé par le mot "api1" dans le cas des services Web REST
2/25/2019 212
URL: structures et paramètres
• Pour utiliser les Web Services REST, il est nécessaire de comprendre la structure de l’URL utilisée
en version 7. La version 7 implémente le protocole SDATA ou Safe X3 Web Service API.
• L’URL est définie par trois parties principales:
URL=ENDPOINT WS + Ressource + Paramètres
• Exemple SDATA:
http://X3PU9TRAINVM:8124/sdata/x3/erp/X3PU9TRAIN_SEED_LOCALDOC/SORDER?represen
tation=SORDER.$query&count=20
• Exemple Safe X3 Web Service API :
http://X3PU9TRAINVM:8124/api1/x3/erp/X3PU9TRAIN_SEED_LOCALDOC/SORDER?represent
ation=SORDER.$query&count=20
25/02/2019 213
URL: structures and paramètres
25/02/2019 214
URL: structures et paramètres
2/25/2019 215
Comment accéder aux propriétés d’une facette?
• En version 7, vous avez accès aux protocoles des ressources. Cette fonctionnalité définit les
informations requises par les facettes comme la clé à lire, l’URL à utiliser, les propriétés, etc.
• La structure de l’URL est la suivante:
http://.../$prototypes(‘MY_REPRESENTATION.$MY_FACET')
• Par exemple, pour accéder au prototype de la facette de requête de la représentation de SORDER:
http://X3PU9TRAINVM:8124/api1/x3/erp/X3PU9TRAIN_SEED_LOCALDOC/$prototypes(‘SORDE
R.$query')
25/02/2019 216
Construire l’URL pour la facette de requête
Concrètement:
• $url et $baseUrl fournissent l’URL à
utiliser pour exécuter la facette de
requête
• L’URL finale est alors: $baseUrl+$url
25/02/2019 217
Construction de l’URL pour plusieurs facettes
218
URL de la facette Requête – Liste de commandes
Requête – SORDER.$query
http://x3pu9trainvm:8124/api1/x3/erp/X3PU9TRAIN_SEED_LOCALDOC/SORDER?representation=SORDER.$query
25/02/2019 219
URL de la facette Détail(s)– Détail de commande
Détail(s) – SORDER(‘key’).$details
http://x3pu9trainvm:8124/api1/x3/erp/X3PU9TRAIN_SEED_LOCALDOC/SORDER('QTEFR0110040')?representation=
SORDER.$details
25/02/2019 220
Tests pour les différentes facettes
Facette Requête
222
Facette Requête
25/02/2019 223
Facette Requête
25/02/2019 224
Facette Détails
Résultat:
25/02/2019 225
Facette Détails
http://x3pu9trainvm/api1/x3/erp/X3PU9TRAIN_SEED_LOCALDOC/ITMMASTER(‘APPLEWATCHSP’')?re
presentation=ITMMASTER.$details
25/02/2019 226
10 – Comment appeler un
Web Service externe
depuis X3
2/25/2019 227
Web services de test
Installation d'un Web Service dans un serveur PHP
Connectez-vous à http://x3pu9trainvm:8125/sagex3-
ws/web/hello/?name=Olivier
Résultat: “Hello Olivier”
25/02/2019 231
Configuration et test de ces web services en X3
• Connexion à X3
• Administration > Web Services REST
• Nom du Web Service: “hello”
• L’url de Base comporte le vrai nom de la machine et le
dernier caractère doit être /.
• Vous pouvez tester avec le bouton ‘Test GET’
• OK.
25/02/2019 232
Appel de ces web services avec un script X3
http://.../hello
• Exécutez ce script
Infbox "STATUS_HTTP-->"-num$([L]O_HTTP_COD)
Infbox "BODY-->"-num$([L]O_RESBODY)
25/02/2019 233
Appel de ces web services avec un script X3: suite
http://.../hello?name=Olivier
Résultats:
• Paramètres X3:
25/02/2019 234
Appel de ces web services avec un script X3: suite
http://.../hello?name=Olivier&formatreturn=JSON
Résultats:
• Paramètres X3:
RETURNS="message.name"
25/02/2019 235
Test du Web Service clicrdv dans X3
Test du Web Service clicrdv – Authentification http basique
• Connect to
http://x3pu9trainvm:8125/sagex3ws/web/clicrdv/api/v1/grou
ps/127723/
• Utilisateur : sage1
• Mot de passe : sage2
/
Résultat:
2/25/2019 237
Configuration et test de ces web services en X3
• Connexion à X3
• Administration > Web Services REST
• Nom du Web Service: « clicrdv »
• L’url de Base comporte le vrai nom de la
machine et le dernier caractère doit être /.
• Vous pouvez tester avec le bouton ‘Test GET’
• OK.
25/02/2019 238
Appelez le web service avec un script X3 - GET
http://.../clicrdv/api/v1/groups/127723/
• Exécutez ce script
25/02/2019 239
Appelez le web service avec un script X3 - POST
http://.../clicrdv/api/v1/groups/127723/
• Exécutez ce script
2/25/2019 240
Q&R
Posez toutes vos questions!
Conclusion
25/02/2019 242
Thank you
© 2015, The Sage Group plc or its licensors. Sage, Sage logos, Sage product and service names mentioned herein are the trademarks of The Sage Group plc or its
licensors. All other trademarks are the property of their respective owners.
Annexes
2/25/2019 245
Ressources publiques GitHub
• https://github.com/orgs/Sage-ERP-X3
• sample-x3-ws-php-webportal : Exemple de cette documentation
• soap-tester-client : Ce répertoire contient du code .Net pour tester les Web Services Sage
ERP X3 Soap
2/25/2019 246
Comment appeler les web services X3
Voir dossier CALL_WS_X3\
• PHP : CALL_WS_X3\PHP\howto_PHP.txt
• C# : CALL_WS_X3\CSHARP\howto_CSHARP.txt
• JAVA : Appeler X3 web services REST & Soap
2/25/2019 247