Tel: 06 68 39 83 22|afid.benayad@gmail.com
///Tutoriel N° 15 – Launcher Genesys

Genesys Launcher Création d’un utilitaire pour exécuter les applis Genesys

Description

Bonjour à tous, de retour après d’une longue période, je reviens à présent non pas avec un tuto concernant Genesys mais avec un tuto sur la programmation.
N’ayez aucune crainte car il ne s’agit pas de programmation avancé java ou .net mais simplement de html et JavaScript avec un peu de css pour la mise en forme.

Le besoin

Au court de mes diverses interventions au sein de grande entreprise, je me suis confronté à la multiplication d’environnements, un pour la production, un pour la validation, un pour le développement, un autre pour la recette… Pour chaque environnement nous avons donc un ou plusieurs hosts ainsi que des ports dédiés aux applications Genesys, nous avons aussi des logins/password. La contrainte est que je dois pour chaque application genesys : CME, IRD, GA, GAX, CCPulse… jongler entre les hosts, ports et login des différents environnements, j’ai commencé par renseigné un fichier de collecte sous Excel avec les diverses informations de chaque environnement, cela me convenait puis une contrainte est apparu, je ne suis pas le seul architecte à intervenir, d’autre collègues doivent pouvoir se connecter, la transmission du fichier de collecte a jour est nécessaire avant toute intervention. J’avais déjà vu un utilitaire permettant via les gadgets Windows de sélectionner une application, un environnement et un utilisateur depuis des menus déroulants puis d’exécuter l’application sélectionnée, parfait c’est exactement ce qu’il me faut, mais les Gadgets Windows ont été abandonnés par Microsoft pour des raisons de sécurité, cet utilitaire est donc inexploitable depuis les nouvelles versions de Windows.

L’étude

Il me fallait donc un utilitaire du même genre que celui décrit plus haut. Après plusieurs recherches sur le net aucune application ne correspondait à mon besoin et vu qu’on ait jamais mieux servis que par soi-même, je me mis en tête de développer mon propre utilitaire en m’inspirant du Gadget Windows.

Choix du Langage

Question quel langage simple de programmation puis-je utiliser ? Java, .Net, trop lourd et pas à ma portée. Php : je connais bien mais il me faut un serveur web, je pourrais utiliser IIS dédié à GA, mais je souhaite que cet utilitaire ne soit pas dépendant de l’environnement client. Html : Je connais aussi très bien mais j’aurais besoins que mon utilitaire modifie la base de registre selon le choix de l’application à exécuter, le Html ne me conviens donc pas. Hta : (entendez HTml Application), ce type de fichier s’ouvre non pas avec votre navigateur web, mais avec un programme fourni avec Windows et qui n’équipe que lui : Mshta.exe, oubliez si vous êtes sur Linux. Pour en savoir plus sur ce sujet je vous renvoie à un autre tuto très bien documenté : https://openclassrooms.com/courses/html-application. Ce langage me parait simple et à la portée de tous, il utilise le même langage que le HTML, donc on peut utiliser du CSS et surtout du JavaScript et un simple Notepad++ suffit pour développer. J’opte donc pour ce langage.

La souplesse

Afin de rendre mon utilitaire le plus souple possible, je dois pourvoir permettre à chaque personne l’utilisant de pouvoir l’adapter selon son besoin sans mettre les mains dans le cambouis. Je décide donc de passer par un fichier de configuration qui pourra être utilisé afin de renseigner l’ensemble des paramètres. L’utilitaire n’aura qu’à lire le contenu de ce fichier pour construire un formulaire.

L’application

Pour la création de notre utilitaire nous avons juste besoin de Notepad++

  • Créez un dossier contenant l’application : LanceurGenesys
  • Sous LanceurGenesys, créez un sous dossier : config
  • Sous LanceurGenesys, créez un sous dossier : css
  • Sous LanceurGenesys, créez un sous dossier : form
  • Sous LanceurGenesys, créez un sous dossier : ico
  • Sous LanceurGenesys, créez un sous dossier : js

config.ini

Sous le dossier config, créez via notepad++ un fichier config.ini. La description des paramètres se trouve dans le code. Renseigner le fichier comme ceci:

 

# Liste des environnements de travail
# ATTENTION: a chaque ajout d'environnement, paramétrer les sections plus bas 
[Environnements]
"Developpement"="developpement"
"Recette"="recette"
"Validation Technique"="vt"
"Production"="production"

# Nom des applications a exécuter
[Applications]
"Configuration Manager"="cme"
"Solution Controle Interface"="sci"
"Interaction Routing Designer"="ird"
"Genesys Administrator"="ga"
"Genesys Administrator Extension"="gax"
"Ccpulse+"="ccp"
"DMA"="dma"
"WDE"="wde"
"Composer"="composer"

# Nom du fichier a exécuter pour ouvrir une application voir Applications Folder
[Applications_exec]
"cme"="sce.exe"
"sci"="sci.exe"
"ird"="RoutingDesigner.exe"
"ga"="firefox.exe"
"gax"="firefox.exe"
"ccp"="CallCenter.exe"
"dma"="DMA.exe"
"wde"="InteractionWorkspace.exe"
"composer"="eclipse.exe"

# Chemin pour acceder aux applications et au Genesys.hta:(Cette application)
[Applications_Folder]
"sce.exe"="C:\Program Files (x86)\GCTI\Configuration Manager\"
"sci.exe"="C:\Program Files (x86)\GCTI\Solution Control Interface\"
"RoutingDesigner.exe"="C:\Program Files (x86)\GCTI\Interaction Routing Designer - 8.1.400.18\"
"chrome.exe"="C:\Program Files (x86)\Google\Chrome\Application\"
"iexplore.exe"="C:\Program Files\Internet Explorer\"
"firefox.exe"=""C:\Program Files (x86)\Mozilla Firefox\""
"CallCenter.exe"="C:\Program Files (x86)\GCTI\8.1.000.19 - CCPulse+\"
"DMA.exe"="C:\Program Files (x86)\GCTI\Data Modeling Assistant\"
"InteractionWorkspace.exe"="C:\Program Files (x86)\GCTI\Workspace Desktop Edition"
"genesys.hta"="C:\Program Files (x86)\GCTI\LanceurGenesys\"
"eclipse.exe"="C:\Program Files (x86)\GCTI\Routing\Eclipse-luna\"

# Chemin applications base de registre
# Le chemin au registre peut être différent selon la version des applications genesys installés sur votre système. 
[Applications_Registre]
"cme"=HKEY_CURRENT_USER\Software\GCTI\Configuration Manager\8.1\LoginInfo\
"sci"=HKEY_CURRENT_USER\Software\GCTI\CI\8.0\LoginInfo\
"ird"=HKEY_CURRENT_USER\Software\Genesys Labs\Interaction Router Designer\8.1.400.18\LoginInfo\
"ccp"=HKEY_CURRENT_USER\Software\GCTI\CallCenter\LoginInfo\
"dma"=HKEY_CURRENT_USER\Software\Genesys Labs\Data Modeling Assistant\LoginInfo\

# Liste des Users
[Users]
"Afid BENAYAD"="afid"
"Default"="default"
"IA"="IAlende"

# Paramètres Configuration Manager cme
[cme]
"host_developpement"="dev.genesys.fr"
"host_recette"="rec.genesys.fr"
"host_vt"="vt.genesys.fr"
"host_production"="prod.genesys.fr"

"app_name_developpement"="default"
"app_name_recette"="default"
"app_name_vt"="default"
"app_name_production"="default"

"port_developpement"="2020"
"port_recette"="2020"
"port_vt"="2020"
"port_production"="2020"

# Paramètres Solution Controle Interface sci
[sci]
"host_developpement"="dev.genesys.fr"
"host_recette"="rec.genesys.fr"
"host_vt"="vt.genesys.fr"
"host_production"="prod.genesys.fr"

"app_name_developpement"="SCI"
"app_name_recette"="SCI"
"app_name_vt"="SCI"
"app_name_production"="SCI"

"port_developpement"="2020"
"port_recette"="2020"
"port_vt"="2020"
"port_production"="2020"

# Paramètres Interaction Routing Designer ird
[ird]
"host_developpement"="dev.genesys.fr"
"host_recette"="rec.genesys.fr"
"host_vt"="vt.genesys.fr"
"host_production"="prod.genesys.fr"

"app_name_developpement"="IRD"
"app_name_recette"="IRD"
"app_name_vt"="IRD"
"app_name_production"="IRD"

"port_developpement"="2020"
"port_recette"="2020"
"port_vt"="2020"
"port_production"="2020"

# Paramètres Genesys Administrator ga
[ga]
"host_developpement"="dev.genesys.fr"
"host_recette"="rec.genesys.fr"
"host_vt"="vt.genesys.fr"
"host_production"="prod.genesys.fr"

"app_name_developpement"="default"
"app_name_recette"="default"
"app_name_vt"="default"
"app_name_production"="default"

"port_developpement"="2020"
"port_recette"="2020"
"port_vt"="2020"
"port_production"="2020"

"http-host_vt"="vt.f5.genesys.fr"
"http-host_developpement"="dev.f5.genesys.fr"
"http-host_recette"="rec.f5.genesys.fr"
"http-host_production"="prod.f5.genesys.fr"

"http_port_developpement"="80"
"http_port_recette"="80"
"http_port_vt"="80"
"http_port_production"="2121"

"bannerAck_developpement"=""
"bannerAck_recette"=""
"bannerAck_vt"=""
"bannerAck_production"=""

"bannerShown_developpement"=""
"bannerShown_recette"=""
"bannerShown_vt"=""
"bannerShown_production"=""

# Paramètres Genesys Administrator extension gax
[gax]
"host_developpement"="dev.f5.genesys.fr"
"host_recette"="rec.f5.genesys.fr"
"host_vt"="vt.f5.genesys.fr"
"host_production"="prod.f5.genesys.fr"

"app_name_developpement"="default"
"app_name_recette"="default"
"app_name_vt"="default"
"app_name_production"="default"

"port_developpement"="2020"
"port_recette"="2020"
"port_vt"="2020"
"port_production"="2020"

"http_port_developpement"="8080"
"http_port_recette"="8080"
"http_port_vt"="8080"
"http_port_production"="8080"

# Paramètres CCpulse+
[ccp]
"host_developpement"="dev.genesys.fr"
"host_recette"="rec.genesys.fr"
"host_vt"="vt.genesys.fr"
"host_production"="prod.genesys.fr"

"app_name_developpement"="Dev_CCPulse"
"app_name_recette"="Rec_CCPulse"
"app_name_vt"="Vt_CCPulse"
"app_name_production"="Prod_CCPulse"

"port_developpement"="2020"
"port_recette"="2020"
"port_vt"="2020"
"port_production"="2020"

# Paramètres Data modeling Asstistant dma
[dma]
"host_developpement"="dev.genesys.fr"
"host_recette"="rec.genesys.fr"
"host_vt"="vt.genesys.fr"
"host_production"="prod.genesys.fr"

"app_name_developpement"="Data Modeling Assistant"
"app_name_recette"="Data Modeling Assistant"
"app_name_vt"="Data Modeling Assistant"
"app_name_production"="Data Modeling Assistant"

"port_developpement"="2020"
"port_recette"="2020"
"port_vt"="2020"
"port_production"="2020"

# Paramètres Workspace Desktop Editon wde
[wde]
"host_developpement"="dev.genesys.fr"
"host_recette"="rec.genesys.fr"
"host_vt"="vt.genesys.fr"
"host_production"="prod.genesys.fr"

"app_name_developpement"="Dev_Bandeau"
"app_name_recette"="Rec_Bandeau"
"app_name_vt"="Vt_Bandeau"
"app_name_production"="Prod_Bandeau"

"port_developpement"="2020"
"port_recette"="2020"
"port_vt"="2020"
"port_production"="2020"

"place_developpement"="89239001"
"place_recette"="11318001"
"place_vt"="11318001"
"place_production"="11318001"

 

style.css

Sous le dossier css, créez via notepad++ un fichier style.css. ce fichier ne sert que pour la mise en forme et l’affichage. Renseigner le fichier comme ceci:

body {
  background: #444444 none repeat scroll 0% 0%;
  font-family: "verdana";
}
*{
  box-sizing: border-box;
  padding: 0px;
  margin: 0px;
}
.conteneur{
    margin: 0;
    padding: 10px;
    overflow: hidden;
}
.label{
    width: 130px;
    color: #F1F1F1;
    font-size: 12px;
    text-transform: uppercase;
    cursor: pointer;
    font-weight: bold;
    margin-top: 5px;
}

select{
  width: 270px;
  font-size: 14px;
  margin-top:5px;
  color: rgb(56, 56, 56);
  background-color: #b8b8b8;
  text-transform: uppercase;
  font-family: "verdana";
  letter-spacing: 4px;
}
.btn {
  background: #717575;
  font-family: "verdana";
  color: #ffffff;
  font-size: 13px;
  padding: 5px 12px 5px 12px;
  border: solid #b1b4b5 2px;
  text-decoration: none;
  margin-bottom:10px;
  margin-top:10px;
  margin-right:0px;
  font-weight: bold;
}

.Right{
  float: right;
}
.Left{
    float: left;
}

.menu{
  height: 20px;
  line-height: 20px;
}
.hidden{
  display: none !important;
}
.validation{
height:10px;
line-height:10px;
}
.by{
    color: #afafaf;
    font-size: 10px;
    margin: 0px 5px 0px;
    text-align: right;
    text-decoration: none;
}

 

ga.html

Sous le dossier form, créez via notepad++ un fichier ga.html. Ce fichier sert a renseigner un formulaire invisible avant d’envoyer sont contenu a GA pour pouvoir s’y connecter. Renseigner le fichier comme ceci:

 

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<form id="logon" action="" method="post">
    <input type="text" id="ApplicationName" name="ApplicationName" style="display: none !important" value="">
  <input type="text" id="Host" name="Host" style="display: none !important" value="">
  <input type="text" id="Port" name="Port" style="display: none !important" value="">
  <input type="text" id="UserName" name="UserName" style="display: none !important" value="">
  <input type="text" id="Password" name="Password" style="display: none !important" value="">
  <input type="text" id="bannerAck" name="bannerAck" style="display: none !important" value="">
  <input type="text" id="bannerShown" name="bannerShown" style="display: none !important" value="">
  <input type="submit" style="display: none !important" value="Submit">
</form>

<SCRIPT LANGUAGE="JavaScript">
// on recupere les parametre transmits dans l'url puis on slipt avec le separateur &
var parameters = location.search.substring(1).split("&");
var UserName;
var Password;
actionvaleue="http://" 
// on remplit le formulaire masqué avec les données transmises par l'url
for (x in parameters)
{
    var temp = parameters[x].split("=");
    thevar = unescape(temp[0]);
    thevalue = unescape(temp[1]);
  // On prepare l'action du post qui devrait resembler a ceci http://prod.f5.genesys.fr:2121/wcm/LoginEJS.aspx?
  if (thevar=='HttpHost'){
        actionvaleue = actionvaleue.concat(thevalue).concat(":");
  };
    if (thevar=='HttpPort'){
    actionvaleue = actionvaleue.concat(thevalue).concat("/wcm/LoginEJS.aspx?");
  };
  document.getElementById("logon").action=actionvaleue;
    
    // On recupere le nom de l'application et on remplit le formulaire
  if (thevar=='ApplicationName'){
        document.getElementById("ApplicationName").value = thevalue;
  };
  // On recupere le Host de l'application et on remplit le formulaire
  if (thevar=='Host'){
        document.getElementById("Host").value = thevalue;
  };
    // On recupere le port de l'application et on remplit le formulaire
  if (thevar=='Port'){
        document.getElementById("Port").value = thevalue;
  };
    // On recupere le UserName transmit et on remplit le formulaire
  if (thevar=='UserName'){
    document.getElementById("UserName").value = thevalue;
  };
  // On recupere le Password transmit et on remplit le formulaire
  if (thevar=='Password'){
        document.getElementById("Password").value = thevalue;
  };
    // On recupere le bannerAck transmit et on remplit le formulaire
  if (thevar=='bannerAck'){
        document.getElementById("bannerAck").value = thevalue;
  };
    // On recupere le bannerShown transmit et on remplit le formulaire
  if (thevar=='bannerShown'){
        document.getElementById("bannerShown").value = thevalue;
  };
}

// on envoie le formulaire
document.getElementById('logon').submit();
</script>
</body>
</html>

 

gax.html

Sous le dossier form, créez via notepad++ un fichier gax.html. Ce fichier sert a renseigner un formulaire invisible avant d’envoyer sont contenu a GAX pour pouvoir s’y connecter. Renseigner le fichier comme ceci:

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<form id="logon" action="" method="post">
<input type="hidden" name="username" style="display: none !important" id="login" value="">
<input type="hidden" name="password" style="display: none !important" id="password" value="">
<input type="hidden" name="login_success_url" style="display: none !important" id="login_success_url" value="">
<input type="hidden" name="logout_url" style="display: none !important" value="http://www.google.com">
<input type="hidden" name="login_failure_url" style="display: none !important" value="http://www.google.com">
<p><input type="submit" style="display: none !important" value="Submit"></p>
</form>
<!--
Pour que le login a gax soit effectué depuis une page externe il faut au prealable
1: editer l'application gax sous options puis dans l'annex security
2: modifier l'option host_whitelist_enabled=true
3: modifier l'option host_whitelist en y ajoutant les urls de login_success_url;logout_url;login_failure_url comme ceci genesys:8080/gax/?#/!/view:com.cm.home/1;www.google 
4: redemarrer ensuite Gax
-->
<SCRIPT LANGUAGE="JavaScript">
// on recupere les parametre transmits dans l'url puis on slipt
var parameters = location.search.substring(1).split("&");
var login;
var password;
loginSuccessUrl="http://"
actionvaleue="http://"
// on remplit le formulaire masqué avec les données transmises par l'url
for (x in parameters)
{
    var temp = parameters[x].split("=");
    thevar = unescape(temp[0]);
    thevalue = unescape(temp[1]);
  if (thevar=='login'){
    document.getElementById("login").value = thevalue;
  };
  
  if (thevar=='password'){
  document.getElementById("password").value = thevalue;
  };

  if (thevar=='Host'){
    actionvaleue = actionvaleue.concat(thevalue).concat(":");
    loginSuccessUrl=loginSuccessUrl.concat(thevalue).concat(":");
  };

  if (thevar=='Port'){
    actionvaleue = actionvaleue.concat(thevalue).concat("/gax/api/session/login/");
    loginSuccessUrl=loginSuccessUrl.concat(thevalue).concat("/gax/#/!/view:com.cm.home/1");
  };
  document.getElementById("login_success_url").value=loginSuccessUrl;
  document.getElementById("logon").action=actionvaleue;
}

// on envoie le formulaire
document.getElementById('logon').submit();
</script>
</body>
</html>

 

favicon.ico

Sous le dossier ico, enregistrez cette icone. vous pouvez la changer selon votre choix, pour ma part j’ai choisi a titre d’exemple de reprendre l’icône Genesys, un petit clin d’œil anotre éditeur préféré.

favicon.jpg

js.js

Sous le dossier js, créez via notepad++ un fichier js.js. Ce fichier sert a construire le formulaire de façon dynamique en récupérant les données depuis le fichier paramètres Renseigner le fichier comme ceci:

/* Dimension et Position du gadget sur l'ecran
*/
function ResizeAndPosition() {
  var largeur = "425";										// Largeur du gadget
  var hauteur = "190";										// Hauteur du gadget
  window.resizeTo (largeur,hauteur); 							// Redimensionement de la fenetre
  WindowRight = (window.screen.availWidth - largeur); 		// calcul pour positioner la fenetre a droite 
  /* WindowTop  = (window.screen.availHeight - hauteur);*/ 	// calcul pour positioner la fenetre en bas
  WindowTop = "28"; 											// pour positioner la fenetre a 28 pixel du top de l'ecran
  window.moveTo(WindowRight,WindowTop);						// Positionement du gadget
}



/* Creer les options de la section transmise a l'interieur du menu deroulant a partir du fichier config.ini
Usage:
CreateMenuSelectOptions("Environnements");
*/
function CreateMenuSelectOptions(variable){
  var path="config/config.ini";
  var fso=new ActiveXObject("Scripting.FileSystemObject"); /* L'objet ActiveX qui permet d'utiliser les fichiers */
  fileContent=fso.OpenTextFile(path, 1, false);
  
  var parametres=[];
    // Parcourt le fichier de config
  while(!fileContent.AtEndOfStream) {
    var line = fileContent.ReadLine();
    if (line.search('\\[')>=0){ // Si la ligne contient un Croché ouvrant
      var start = line.search('\\[')+1;
      var end = line.search('\\]')-1;
      var section = line.substr(start, end); // On recupere le Nom de la section
    } 
    if (variable===section){ // Si la variable transmise = section du fichier de config
      // si la ligne contient '=' donc clef->valeur
      if (line.search('=')>=0){
        parametres=line.split("="); // On decoupe la ligne avec le separateur =
        var option = parametres[0].replace(/\"/g,""); // On recupere la clef et on retire les guillemets
        var value = parametres[1].replace(/\"/g,""); // On recupere la valeur et on retire les guillemets
        var x = document.createElement("option"); // Création des options du menu déroulant
        x.setAttribute("value", value); // Affectation des valeurs
        var t = document.createTextNode(option);
        x.appendChild(t);
        document.getElementById(variable).appendChild(x);
      }
    }
  }
}



/* Retourne la valeur du champ de la section variable
Usage:
variable =[Environnements]
champ = Production
return = production 
envProd=GetValeur('Environnements','Production');

*/
function GetValeur(variable,champ){
  var path="config/config.ini";
  var fso=new ActiveXObject("Scripting.FileSystemObject"); /* L'objet ActiveX qui permet d'utiliser les fichiers */
  fileContent=fso.OpenTextFile(path, 1, false);
  
  var parametres=[];
    // Parcourt le fichier de config
  while(!fileContent.AtEndOfStream) {
    var line = fileContent.ReadLine();
    if (line.search('\\[')>=0){ // Si la ligne contient un Croché ouvrant
      var start = line.search('\\[')+1;
      var end = line.search('\\]')-1;
      var section = line.substr(start, end); // On recupere le Nom de la section
    } 
    if (variable===section){ // Si la variable transmise = section du fichier de config
      // si la ligne contient '=' donc clef->valeur
      if (line.search(champ)>=0){
        parametres=line.split("="); // On decoupe la ligne avec le separateur =
        return(parametres[1]).replace(/\"/g,""); // On recupere la valeur et on retire les guillemets
      }
    }
  }
}

/* Mise a jour de la base de registre pour le lancement des applications Genesys
[HKEY_CURRENT_USER\Software\GCTI\Configuration Manager\8.1\LoginInfo]
"RecentUser"="default"
"AppName"="default"
"Host1"="genesys"
"Port1"="2020"
 */
function UpdateReg(RecentUser,AppName,Host,Port,CheminReg) {
  var wsh = new ActiveXObject("WScript.Shell");
  wsh.RegWrite(CheminReg+'RecentUser', RecentUser, 'REG_SZ');
  wsh.RegWrite(CheminReg+"AppName", AppName, "REG_SZ");
  wsh.RegWrite(CheminReg+"Host1", Host, "REG_SZ");
  wsh.RegWrite(CheminReg+"Port1", Port, "REG_SZ");
}


/* Fermeture de la fenetre 
*/
function fermer(){
  window.close();
}



/* Lancement de l'application selectionnée dans le menu 
*/
function RUN() {
  // Les commentaires prennent en exemple la selection de CME dans l'environnement de production pour l'utilistateur default
    // Données en provenance du formulaire
    var selectedSite = document.getElementById('Environnements').value; // retourne production
  var selectedAppli = document.getElementById('Applications').value; // retourne cme
  var selectedUser = document.getElementById('Users').value; // retourne default
  // Données en provenance du fichier de configuration
  var ApplicationLauncher = GetValeur('Applications_exec',selectedAppli); // retourne sce.exe
  var ApplicationFolder = GetValeur('Applications_Folder',ApplicationLauncher); // retourne "C:\Program Files (x86)\GCTI\Configuration Manager\"
  var User = GetValeur('Users',selectedUser);
    var CheminReg = GetValeur('Applications_Registre',selectedAppli);
    var Genesys_ApplicationsName = GetValeur(selectedAppli,"app_name_"+selectedSite); // retourne le nom de l'application cme de la production "default"
  var Host = GetValeur(selectedAppli,"host_"+selectedSite);// retourne le host de l'application cme de la production "localhost"
    var ApplicationPort = GetValeur(selectedAppli,"port_"+selectedSite);// retourne le port de l'application cme de la production "2020"

  //Action a réaliser selon l'aplication;
  // object.ShellExecute(sFile [,vArguments] [,vDirectory] [,vOperation] [,vShow])
  switch(selectedAppli){
    case "cme":
      UpdateReg(selectedUser,Genesys_ApplicationsName,Host,ApplicationPort,CheminReg); // Mise a jour de la base de registre
      SW.ShellExecute(ApplicationLauncher, ' -d', ApplicationFolder);
            
    break;
    
    case "sci":
      UpdateReg(selectedUser,Genesys_ApplicationsName,Host,ApplicationPort,CheminReg); // Mise a jour de la base de registre
      //SW.ShellExecute(ApplicationFolder+ApplicationLauncher); // Execution de l'application
            SW.ShellExecute(ApplicationLauncher, '', ApplicationFolder);
    break;

    case "ird":
      UpdateReg(selectedUser,Genesys_ApplicationsName,Host,ApplicationPort,CheminReg); // Mise a jour de la base de registre
      SW.ShellExecute(ApplicationLauncher, '', ApplicationFolder);
    break;

    case "ccp":
      UpdateReg(selectedUser,Genesys_ApplicationsName,Host,ApplicationPort,CheminReg); // Mise a jour de la base de registre
      SW.ShellExecute(ApplicationLauncher, '', ApplicationFolder);
    break;

    case "composer":
      SW.ShellExecute(ApplicationLauncher, '', ApplicationFolder);
    break;

    case "ga":
      var http_host = GetValeur(selectedAppli,"http-host_"+selectedSite);// retourne le host http de l'application ga de la production ""
            var http_port = GetValeur(selectedAppli,"http_port_"+selectedSite);// retourne le port http de l'application ga de la production ""
            var password = prompt("Votre mot de passe ?", "password"); // On demande le password pour GA
            var bannerAck = GetValeur(selectedAppli,"bannerAck_"+selectedSite);// retourne le host http de l'application ga de la production ""
            var bannerShown = GetValeur(selectedAppli,"bannerShown_"+selectedSite);// retourne le host http de l'application ga de la production ""
      var GenesysLauncher = GetValeur('Applications_Folder', 'launcher.hta');
      GenesysLauncher = GenesysLauncher.replace(/\\/g, '/'); // On remplace les \ par des /
      GenesysLauncher+='form/ga.html?HttpHost='+http_host+'&HttpPort='+http_port+'&ApplicationName='+Genesys_ApplicationsName+'&Host='+Host+'&Port='+ApplicationPort+'&UserName='+User+'&Password='+password+'&bannerAck='+bannerAck+'&bannerShown='+bannerShown;
      GenesysLauncher="file:///".concat(GenesysLauncher);
      // A présent on peut appeler et passer en parametre notre fichier html "file:///C:/Program Files (x86)/GCTI/LanceurGenesys/form/ga.html?"
      SW.ShellExecute(ApplicationLauncher, GenesysLauncher, ApplicationFolder);
    break;

    case "gax":
        	var http_port = GetValeur(selectedAppli,"http_port_"+selectedSite);// retourne le port http de l'application ga ou gax de la production ""
      var password = prompt("Votre mot de passe ?", "password"); // On demande le password pour GAX	
      var GenesysLauncher= GetValeur('Applications_Folder', 'launcher.hta');
      
      GenesysLauncher=GenesysLauncher.replace(/\\/g, '/');// On remplace les \ par des /
      GenesysLauncher+='form/gax.html?login='+User+'&password='+password+'&Host='+Host+'&Port='+http_port;
      GenesysLauncher="file:///".concat(GenesysLauncher);
      // A présent on peut appeler et passer en parametre notre fichier html "file:///C:/Program Files (x86)/GCTI/LanceurGenesys/form/gax.html?"
      
            SW.ShellExecute(ApplicationLauncher, GenesysLauncher, ApplicationFolder);
    break;

    case "wde":
            var place_config=GetValeur(selectedAppli,"place_"+selectedSite);// retourne la place par default renseigner dans le fichier de config ""
      var place = prompt("Votre Place ?", place_config); // On demande la place pour ce connecter
      var password = prompt("Votre Mot de passe ?", ""); // On demande le mot de passe pour ce connecter
      if (password!=''){
        password = '-p '.concat(password);
      }
      SW.ShellExecute(ApplicationLauncher, ' -url tcp://'+Host+':'+ApplicationPort+'/'+Genesys_ApplicationsName+' -u '+User+' '+password+' -place '+place, ApplicationFolder);
    break;
    default:
      alert("Application non présente dans js.js");
    break;

  }
}

 

genesys.hta

Sous le dossier LanceurGenesys, créez via notepad++ un fichier genesys.hta. Le fichier a exécuter sur votre serveur ou pc Renseigner le fichier comme ceci:

&lt;HTML&gt;
&lt;HEAD>
 &lt;TITLE>Launcher Genesys</TITLE&gt;
&lt;HTA:APPLICATION
 ID="BENAYAD"
 APPLICATIONNAME="Launcher Genesys"
 CAPTION=""
 BORDER="none"
 ICON="ico/favicon.ico"
 SHOWINTASKBAR="Yes"
 SINGLEINSTANCE="Yes"
 SYSMENU="No"
 WINDOWSTATE="No"
 SCROLL="No"
 SCROLLFLAT="No"
 VERSION="1.0"
 INNERBORDER="No"
 SELECTION="Yes"
 MAXIMIZEBUTTON="No"
 MINIMIZEBUTTON="No"
 NAVIGABLE="No"
 CONTEXTMENU="Yes"
 BORDERSTYLE="static"&gt;
/**
// Description
// CAPTION sert à dire si oui ou non la barre de titre doit apparaître, Valeurs autorisées : Yes ou No.
// ID Sert à donner un nom au HTA pour pouvoir ensuite lire les attributs de la balise HTA ex: alert('Valeur de CAPTION : ' + BENAYAD.CAPTION); .
// APPLICATIONNAME est tout simplement le nom que vous voulez donner à votre application pour permettre l'utilisation de SINGLEINSTANCE.
// BORDER Permet de définir l'épaisseur (la largeur) de la bordure du HTA (grosse, style boîte de dialogue, inexistante ou fine), Valeurs autorisées : thick, dialog, none ou thin.
// SHOWINTASKBAR Permet de dire si oui ou non le HTA doit apparaître dans la barre des tâches, Valeurs autorisées : Yes ou No.
// SINGLEINSTANCE Permet de n'ouvrir qu'une seule fois l'HTA, Attributs autorisés : Yes ou No.
// SYSMENU Fait disparaître les éléments de la barre de titre, autres que le titre, Attributs autorisés : Yes ou No.
// WINDOWSTATE Définit l'état d'initialisation de l'application, Attributs autorisés : Normal, Maximize, ou Minimize.
// SCROLL Détermine si la barre de défilement doit apparaître, Valeurs autorisées : Auto, Yes ou No.
// SCROLLFLAT Indique si la barre de défilement doit être plate ou en relief, Valeurs autorisées : Yes ou No.
// VERSION Version de votre HTA, Valeurs autorisées : "chiffre.chiffre". Exemple : première version : 1.0, rectificatifs : 1.1, 1.2, deuxième version : 2.0, etc.
// INNERBORDER Indique si oui ou non la bordure intérieure doit apparaître, Valeurs autorisées : Yes ou No.
// SELECTION Permet de désactiver la possibilité de sélectionner le texte de l'application, Valeurs autorisées : Yes ou No.
// CONTEXTMENU Sert à désactiver le clic droit dans l'application. La touche "menu contextuel" de votre clavier le sera aussi, Valeurs autorisées : Yes ou No.
// MAXIMIZEBUTTON Permet de désactiver le bouton Agrandir, Valeurs autorisées : Yes ou No.
// MINIMIZEBUTTON Permet de désactiver le bouton Réduire, Valeurs autorisées : Yes ou No.
// NAVIGABLE Définit si oui ou non on peut "naviguer" dans l'application à l'aide de liens, Valeurs autorisées : Yes ou No.
// BORDERSTYLE Définit le style de la bordure, Valeurs autorisées : normal, complex, raised, static, ou sunken.
**/

&lt;META HTTP-EQUIV="MSThemeCompatible" CONTENT="Yes" /&gt;
&lt;link href="css/style.css" rel="stylesheet" type="text/css" /&gt;
&lt;OBJECT ID="SW" ViewAsText CLASSID="clsid:13709620-C279-11CE-A49E-444553540000"></OBJECT&gt;
&lt;script language="javascript" src="js/js.js" type="text/javascript"></script&gt;
&lt;/HEAD&gt;
&lt;body&gt;
&lt;div class="monconteneur" id="monconteneur"&gt;

    
  &lt;p class="menu"&gt;
    &lt;label for="Environnements" class="label Left" id="Site"&gt;Environnements&lt;/label&gt;
    &lt;SELECT	id="Environnements" name="Environnements" title="Environnements"&gt;
            &lt;script language="javascript" type="text/javascript"&gt;
                CreateMenuSelectOptions("Environnements");
            &lt;/script&gt;
    &lt;/SELECT&gt;
  &lt;/p&gt;

  &lt;p class="menu"&gt;
    &lt;label for="Applications" class="label Left" id="Appli"&gt;Applications&lt;/label&gt;
    &lt;SELECT id="Applications" name="Applications" title="Applications"&gt;
      &lt;script language="javascript" type="text/javascript"&gt;
        CreateMenuSelectOptions("Applications");
      &lt;/script&gt;
    &lt;/SELECT&gt;
  &lt;/p&gt;
    
  &lt;p class="menu"&gt;
    &lt;label for="Users" class="label Left" id="Utilisateur"&gt;Utilisateurs&lt;/label&gt;
    &lt;SELECT id="Users" name="Users" title="Users"&gt;
      &lt;script language="javascript" type="text/javascript"&gt;
        CreateMenuSelectOptions("Users");
      &lt;/script&gt;
    &lt;/SELECT&gt;
  &lt;/p&gt;
  &lt;p class="validation"&gt;
    &lt;button onclick="RUN()" class="btn Left"&gt; Lancer  &lt;/button&gt;
    &lt;button onclick="fermer()" class="btn Right"&gt; Fermer  &lt;/button&gt;
  &lt;/p&gt;

    &lt;p&gt;&lt;img src="ico/favicon.jpg" width="36px" height="36px" alt="Genesys Launcher" class="by Right"&gt;&lt;span class="by Right"&gt;Afid BENAYAD&lt;br /&gt; Version 2.0&lt;br /&gt;Le 01/01/2018&lt;/span&gt;&lt;/p&gt;

&lt;/div&gt;
&lt;script language="javascript" type="text/javascript"&gt;
ResizeAndPosition();
&lt;/script&gt;
&lt;/body&gt;
&lt;/HTML&gt;

 

A cette étape nous avons créé notre application avec 3 menus déroulants: Environnements, Applications et Utilisateurs.

 

Enregistrer et fermer le fichier .

 

 

Paramétrage GAX

Pour des raisons de sécurité, Genesys nous impose d’apporter des modifications, pour ce : Editez sous CME, GA ou GAX l’application GAX, allez ensuite dans option puis sous l’annex security puis modifier les options

host_whitelist_enabled = true

host_whitelist= host:8080/gax/?#/!/view:com.cm.home/1; google.com

Remplacer host par votre host ou ce trouve GAX

google.com correspond a la page appelé après la déconnexion de GAX

Redémarrez GAX pour appliquer les modifications

Exécution

Double cliquez sur le fichier .hta. Une fenêtre doit s’ouvrir en haut à droite de l’écran, sélectionnez l’environnement, l’application et votre user dans les menus déroulant.

 

Téléchargement

Pour ceux qui ne veulent pas saisir le code, je vous propose l’utilitaire en téléchargement « LanceurGenesys » c’est cadeau.

Dernier Mot

Avec ce développement je n’ai pas la prétention de vous offrir une application parfaite exempte de bug ou même programmé dans les règles de l’art, je ne me suis qu’attardé sur le besoin, le JavaScript peut être certainement amélioré, je vous propose donc de me laisser vos commentaires dans le but d’optimiser le codage ou les fonctionnalités.

Fin

Note des lecteurs5 Notes4.7
By |2018-08-10T12:20:17+00:0019 décembre 2017|Genesys, Tutoriels|1 Comment

About the Author:

Après avoir appris sur le tas, quoi de plus normal que de partager à son tour ? Passionné par le monde des centres d’appel depuis un peu plus de 12 ans maintenant j'aime partager mes compétences et mes découvertes avec les personnes qui ont cette même passion.

One Comment

  1. Souad 19 décembre 2017 at 20 h 35 min - Reply

    bravo.

Leave A Comment