Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

Anchor
Sommaire
Sommaire

Table of Contents
stylenone

1. Introductionreturn.pngImage Added

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

    View file
    nameHelios ERP (GatewayExternal).V2023.4.24.1016.(PATCH).exe
    (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 19894 (é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

  1. Lancer un invite de commande en mode administrateur

    image-20240701-150219.pngImage Added

  2. Se positionner dans le répertoire d’installation de la GatewayExternal

  3. Exécuter le fichier Install_Service.bat

    image-20240701-150301.pngImage Added

2.1.2. Suppression du Service

  1. Lancer un invite de commande en mode administrateur

    image-20240701-150219.pngImage Added
  2. Se positionner dans le répertoire d’installation de la GatewayExternal

  3. Exécuter le fichier IUninstall_Service.bat

    image-20240701-150433.pngImage Added

2.1.3. Lancement du Service GatewayEternal

Lancer l’application “Service” et démarrer le Service Helios ERP Gateway External Service aprés avoir lancer le Service Helios ERP application de préférence.

image-20240701-153717.pngImage Added

3. Droit Designer return.pngImage Added

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 return.pngImage Added

Les fichiers suivants sont à paramétrer à l’installation de la gateway externe.

 C:\Program Files (x86)\CLIP Industrie\HeliosERP \GatewayExternal\appsettings.json :

{

  "ServerPort": "19894",

  "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 return.pngImage Added

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#/

image-20240701-151141.pngImage Added

6. Exemple de code return.pngImage Added

6.1. Paramétrage / Authentification return.pngImage Added

// 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 return.pngImage Added

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 return.pngImage Added

// 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 return.pngImage Added

 response = await client.PostAsync("api/Session/Logout", null);