1. Introduction
Dans la version Helios ERP 2023Q4 il est possible d’avoir une Gateway externe afin de pouvoir lancer des actions sans lancer Helios ERP via des API (Spécifique client Bloquer sur clé).
2. Installation
Installer sur le serveur le contenue du patch
(Disponible sur le site) dans le même dossier que pour le Serveur et la Gateway dans le dossier GatewayExternal.Ouvrir le port du serveur 19898 (équivalent au port du fichier appseting.json)
Ajouter le Fichier *DataBasesj.son” configurer pour votre BDD ici HeliosERP ( Chapitre 4 : Configuration Gateway Externe)
Ajouter le fichier “appsetting.json” avec le port du serveur utilisé ( Chapitre 4 : Configuration Gateway Externe)
2.1. Service GatewayExternal
2.1.1Installation du Service
Lancer un invite de commande en mode administrateur
Se positionner dans le répertoire d’installation de la GatewayExternal
Exécuter le fichier Install_Service.bat
2.1.2. Suppression du Service
Lancer un invite de commande en mode administrateur
Se positionner dans le répertoire d’installation de la GatewayExternal
Exécuter le fichier IUninstall_Service.bat
3. Droit Designer
Paramétrer dans Hélios un opérateur dédié à la consommation des api.
Dans le Designer, lui attribuer les fonctionnalités “Api” souhaitées:
4. Configuration Gateway Externe
Les fichiers suivants sont à paramétrer à l’installation de la gateway externe.
C:\Program Files (x86)\CLIP Industrie\HeliosERP \GatewayExternal\appsettings.json :
{ "ServerPort": "19898", "MaxItemsForSearch": 50 } |
---|
C:\Program Files (x86)\CLIP Industrie\HeliosERP \GatewayExternal\DataBases.json :
[ { "Alias": "HELIOSII", "Connection": "localhost:19877" }, { "Alias": "TEST", "Connection": "localhost:19877" } ] |
---|
Les informations ci-dessus peuvent différer selon la configuration Hélios déjà en place, elles seront à adapter.
Les informations :
Nom de la machine hébergeant la gateway externe
ServerPort du fichier appsettings.json
Alias du fichier Databases.json
seront à transmettre au développeur du consommateur de l’API afin qu’il puisse paramétrer le client HTTP.
5. Accès Swagger
Un swagger est disponible avec la gateway externe.
(Swagger : Swagger est un langage de description d'interface permettant de décrire des API exprimées à l'aide de JSON123. Il est utilisé avec toute une série d'outils logiciels open source pour concevoir, créer, documenter et utiliser des services Web1. Swagger est un outil spécial qui compose automatiquement le RESTful API document de votre application4. Il permet de consulter tous les points de terminaison de l'application et de les tester immédiatement en action en envoyant une requête et en recevant une réponse)
Il fournit une documentation des routes disponibles. http://[GATEWAY_HOST]:[PORT]/swagger/ui/index#/
6. Exemple de code
6.1. Paramétrage / Authentification
// Configuration client HTTP
var host = HOST; // Nom du serveur hébergeant la gateway externe
var port = PORT; // Port défini dans la configuration de la gateway externe (19892 par défaut)
client.BaseAddress = new Uri($"http://{host}:{port}");
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
// Hash du mot de passe
var login = LOGIN;
var pwd = PWD;
var alias = ALIAS;
var encoded = Encoding.UTF8.GetBytes(pwd.ToUpperInvariant());
byte[] hash;
using (var md5 = MD5.Create())
{
hash = md5.ComputeHash(encoded);
}
var hashString = BitConverter.ToString(hash);
hashString = hashString.Replace("-", "");
// Login
HttpResponseMessage response = await client.GetAsync($"api/Token/ExternGet?alias={alias}&login={login}&pwd={hashString}");
// Récupération du token
var s = await response.Content.ReadAsStringAsync();
s = s.Trim('\"');
// Affectation du token aux entêtes HTTP
client.DefaultRequestHeaders.Add("Authorization", "Bearer " + s);
6.2 Définition des models
Si besoin, définir des modèles en respectant le formalisme (noms, types, enum…) décrit par la documentation Swagger. Ils permettront de servir de type de référence pour la sérialisation / désérialisation du Json retourné par / envoyé à l’API.
public class ApiArticleModel { public int Ident { get; set; } public decimal PrixUnit { get; set; } ... } public class ApiCommandeClientModel { public string Monnaie { get; set; } public string IdentClient { get; set; } ... } |
---|
6.3. Appels
// Appel de type "liste d'objets"
HttpResponseMessage response = await client.GetAsync("api/ApiArticle/GetAll");
var s = await response.Content.ReadAsStringAsync();
var o = JsonConvert.DeserializeObject(s, typeof(List<ApiArticleModel>));
response = await client.GetAsync("api/ApiPhase/GetAllNature");
s = await response.Content.ReadAsStringAsync();
o = JsonConvert.DeserializeObject(s, typeof(List<ApiPhaseNatureModel>));
// Appel de type "un objet"
response = await client.GetAsync("api/ApiArticle/Get?ident=36551");
s = await response.Content.ReadAsStringAsync();
o = JsonConvert.DeserializeObject(s, typeof(ApiArticleModel));
var response = await client.GetAsync("api/ApiGamme/Get?key=6478");
var s = await response.Content.ReadAsStringAsync();
var o = JsonConvert.DeserializeObject(s, typeof(ApiGammeModel));
// Appel de type "création / modification" avec paramètre Body
var g = o as ApiGammeModel;
g.Nature = ApiGammeModel.NatureEnum.GAMMEMONTAGE;
g.TypeEvolution = ApiGammeModel.TypeEvolutionEnum.MAJEUR;
g.Type = 3;
g.Libelle = "Test API";
…
var content = new StringContent(JsonConvert.SerializeObject(g), Encoding.UTF8, "application/json");
response = await client.PostAsync("api/ApiGamme/Update", content);
var responseS = await response.Content.ReadAsStringAsync();
// Appel de procédure sans paramètre Body
response = await client.PostAsync("api/ApiGamme/WorflowActivation?key=6478", null);
var responseS = await response.Content.ReadAsStringAsync();
6.4. Logout
response = await client.PostAsync("api/Session/Logout", null);