# Utiliser des scripts

Vous pouvez intégrer des fonctions complémentaires et insérer des processus automatisés à l'aide de scripts.

Information

Ce manuel n'est pas en mesure de vous donner des informations poussées concernant le scripting.

Différents types de scripts peuvent être insérés dans les processus:

  • Scripts utilisateur
  • Scripts de démarrage
  • Scripts de clôture
  • Scripts d'action

# Scripts utilisateur

Il est possible d'intégrer les scripts utilisateur dans les processus à base de formulaire. Vous pouvez déposer les scripts utilisateur dans les données d'en-tête du formulaire. Pour ceci, veuillez utiliser l'élément Modifier les scripts utilisateur.

  • Langue de script : JavaScript

Elément 'Modifier les scripts utilisateur'

Vous pouvez déposer un nombre illimité de fonctions de script. Afin que les scripts ne soient pas en conflit avec les fonctions standards, vous devriez placer un préfixe devant le nom de vos propres fonctions (par exemple fctReadValue au lieu de Read Value).

Remarque

Les fonctions qui doivent être déclenchées directement par le formulaire doivent commencer par le préfixe JS_.

# Fichiers JavaScript

Si vous souhaitez utiliser des bibliothèques JavaScript dans le formulaire, et ce, qu'il s'agisse de votre propre bibliothèque ou de librairies provenant de tiers, nous vous recommandons fortement de les déposer sur le chemin suivant :

Administration // ELOwf Base // Webapp

Classeur 'Webapp'

Ensuite, ELOwf doit être actualisé, et le script dans le bloc fonction Scripts utilisateurs du formulaire doit être importé :

<script type="text/javascript" src="hello.js"></script>

# Scripts de démarrage/script de clôture

Les scripts de démarrage et les scripts de clôture peuvent être intégrés par le biais des champs correspondants dans les noeuds de processus. Les scripts de démarrage et les scripts d'appel sont exécutés par le biais du serveur d'indexation.

  • Langue de script : JavaScript
  • Codage : UTF-8

Il existe dans ELO deux emplacements d'enregistrement pour les scripts :

Scripts pour tous les serveurs d'indexation : Administration // IndexServer Scripting Base // _ALL

Scripts pour un seul serveur d'indexation : Administration // IndexServer Scripting Base // <nom du serveur d'indexation>

Information

Les scripts venant d'être insérés sont seulement disponibles après un redémarrage du serveur d'indexation ELO correspondant.

# Scripts de démarrage

Les scripts de démarrage sont exécutés dès qu'un processus a atteint le noeud de processus correspondant.

La fonction suivante doit exister dans les scripts afin que le client Java ELO reconnaisse les scripts de démarrage :

# onEnterNode

onEnterNode(ci, userId, workflow, nodeId)

La fonction est exécutée lors l'entrée d'un noeud de processus par le serveur d'indexation. Les paramètres suivants sont transmis :

  • ci : information sur la langue, le pays et le ticket (=ClientInfo)
  • userId : ID du compte actuel
  • workflow : le processus actuel
  • nodeId : ID du noeud en question

# Scripts de clôture

Les scripts de clôture vous permet de déterminer une action qui sera exécutée lors du transfert du processus.

La fonction suivante est importante afin que le client Java ELO reconnaisse les scripts de clôture :

# onExitNode

onExitNode(ci, userId, workflow, nodeId)

Les paramètres correspondent aux paramètres des scripts de démarrage.

# Scripts d'action

Deux scripts d'action dans le champ 'Boutons d'action' d'un noeud utilisateur

Le champ Boutons d'action (dans le noeud utilisateur) permet d'intégrer jusqu'à cinq scripts d'action dans un noeud de processus. Le bouton Sélectionner (derrière le champ Boutons d'action) vous permet d'ouvrir le dialogue Scripts d'action. Vous pouvez sélectionner les scripts de votre choix dans ce dialogue.

Information

Si vous souhaitez utiliser des boutons d'action, vous devez entrer au moins deux scripts d'action pour des raisons techniques.

Deux boutons dans le dialogue 'Transférer le processus'

Les boutons d'actions apparaissent comme boutons supplémentaires pour le noeud correspondant dans le dialogue Transférer le processus.

Afin que le client Java ELO reconnaisse et effectue les scripts d'action, les conditions suivantes doivent être remplies :

  • Langue de script : JavaScript
  • Codage : UTF-8

Les scripts d'action doivent être enregistrés dans ELO sous Administration // Java Client Scripting Base.

Le script d'action doit contenir les fonctions suivantes : Remplacez les gardes-place (comme <NAME) :

# Action

function cfb<NAME>Start(){
}

# Libellé du bouton

function cfb<NAME>Name(){
    return "<DESIGNATION>";
}

# Infobulle

function cfb<NAME>Tooltip(){
    return "<TOOLTIP>";
}

Une fois le script enregistré dans ELO à l'endroit nommé ci-dessus, vous devez recharger les scripts. Pour ceci, utilisez le raccourci Ctrl + ALT + R

# Exemple

L'exemple suivant montre à quoi peut ressembler un script d'action pour un bouton d'action. L'action déposée ici permet d'ouvrir un document Microsoft Excel vide. Les classes Jacob nécessaires (Jacob = Java-COM Bridge) sont importées par le biais des premières lignes du script.

//Importer les classes
var importNames = JavaImporter();
importNames.importPackage(Packages.com.ms.com);
importNames.importPackage(Packages.com.ms.activeX);
importClass(Packages.com.jacob.activeX.ActiveXComponent);
importClass(Packages.com.jacob.com.Dispatch);
//Ouvrir Excel
function cfbOpenExcelStart(){
    var xl = new ActiveXComponent("Excel.Application");
    Dispatch.put(xl, "Visible", 1);
}
//LIbellé du bouton
function cfbOpenExcelName(){
    return "Nouvel document Excel";
}
//Infobulle pour le bouton
function cfbOpenExcelTooltip(){
    return "Ouvrir un nouveau document dans Microsoft Excel";
}

# Liste de mots-clés dynamique

Un champ de mot-clé dynamique est un champ qui peut représenter un contenu sur plusieurs colonnes. En règle générale, le champ est soumis à un filtrage dynamique d'une ou de plusieurs valeurs de champ. Le formulaire ressemble à ceci :

Exemple pour un champ de mot-clé dynamique; tableau avec pays et raccourcis pays

Les listes de mots-clés dynamiques sont un sujet relativement complexe dans ELO, demandant des connaissances de scripting. Elles sont disponibles dans le client Java ELO et dans le client Web ELO.

Les avantages de ces listes de mots-clés dynamiques sont :

  • Faire afficher plusieurs colonnes de données
  • Récupérer les contenus de façon dynamique (par exemple : base de données externes, données calculées de façon dynamique, scripts ELO...)
  • Les données peuvent être filtrées, non seulement dans un champ, mais aussi en dépendance de nombreux autres champs (par exemple : ce que l'utilisateur a entré et une catégorie ayant été sélectionnée auparavant par l'utilisateur).
  • Remplir d'autres champs avec sélection d'entrée (champs en lecture seule inclus)

L'utilisation d'une liste de mots-clés dynamique est définie directement dans le masque :

Modèle de champ pour un champ avec liste de mots-clés

  1. Créez un modèle de champ.

  2. Saisissez une valeur dans le champ Groupe de champs.

    Cette valeur sera requise par la suite dans le créateur de formulaires.

    Dans cet exemple, la valeur "DYN_LIST" est utilisée dans le champ Groupe de champs.

  3. Dans la section Liste de mots-clés, dans le champ Liste de mot-clé dynamique, vous pouvez entrer le nom d'un fichier de script.

    Le script correspondant doit être disponible et se trouver dans le classeur suivant :

    Administration // IndexServer Scripting Base.

    Chemin de document pour le script 'CountryCodes'

    Dans cet exemple est entré le script CountryCodes. Un extrait du script se trouve sous Exemple de script.

  4. Pour utiliser la liste dans un formulaire, vous devez entrer la valeur utilisée dans le modèle de champ Groupe de champs dans le créateur de formulaires dans le champ Nom de groupe.

    Dans cet exemple, il s'agit de la valeur "DYN_LIST".

    Nom de groupe 'DYN_LIST' dans le créateur de formulaire

# Exemple de script

Le script utilisé dans notre exemple, CountryCodes, est un script qui met à disposition une liste statique de raccourcis et de noms de pays :

importPackage(Packages.de.elo.ix.jscript);
importPackage(Packages.de.elo.ix.scripting);
function getDataIterator() {
    try {
        log.info("getDataIterator(SimpleDatabaseQuery");
        return new DynamicKeywordDataProvider(new CountryCodes());
    } finally {
        log.info(")getDataIterator");
    }
}
function CountryCodes() {
    var index = 0;
    var results = [];
    /* Fonction d'aide qui filtre une liste de pays */
    this.filterCountries = function (filter) {
        log.info("filter: " + filter)
        filter = filter.toLowerCase()
        results = []
        for (var i = 0; i < isoCountries.length; i++){
            if (isoCountries[i].cname.toLowerCase().indexOf(filter) >= 0) {
            results.push([isoCountries[i].ccode, isoCountries[i].cname]);
            }
        }
        log.info("Selon le filtre : " + results.length);
    }
/* est lancé lors de l'initialisation d'une liste dynamique
 (déclaration dans le masque) */
    this.open = function (ec, sord, focus) {
        log.info("ouvrir");
    this.target = focus
/*Dans ce cas, le premier champ du masque est sélectionné,
 mais dans l'idéal, un autre champ devrait être sélectionné */
    var filter = sord.objKeys[0].data[0] || "";
    this.filterCountries(filter);
}
/* Est lancé lorsqu'une liste dynamique est initialisée par le
 "Dyn. keywording map"; champ ELOwf */
    this.openMap = function (ec, map, focus) {
        log.info("openMap");
        log.info(JSON.stringify(map));
        this.target = focus;
        var filter = map[focus] || "";
        this.filterCountries(filter);
    }
    this.close = function () {
        log.info("schließen()");
    }
    this.getNextRow = function () {
        var row = results[index];
        index++;
        log.info("getNextRow(" + row + ")");
        return row;
    }
/* Renommer les colonnes */
    this.getHeader = function () {
        log.info("getHeader()");
        return ["Code", "Name"];
    }
/* La cible de l'entrée sélectionnée */
    this.getKeyNames = function () {
        log.info("getKeyNames()");
        return [this.focus, "UN_AUTRE_CHAMP"];
    }
    this.hasMoreRows = function () {
        log.info("hasMoreRows()");
        return index < results.length - 1;
    }
/* Soit un message d'erreur est rendu,
 soit il est laissé vide en cas de réussite */
    this.getMessage = function () {
        log.info("getMessage()");
        return "";
    }
    this.getTitle = function () {
        log.info("getTitle()");
        return "Country Codes";
    }
}
var isoCountries = [
    {'ccode' : 'AF', 'cname' : 'Afghanistan'},
    {'ccode' : 'AX', 'cname' : 'Aland Islands'},
    {'ccode' : 'AL', 'cname' : 'Albania'},
    /* ... */
    {'ccode' : 'ZW', 'cname' : 'Zimbabwe'},
];

Veuillez également consulter

# Map de mot-clé dynamique

Un mappage de mot-clé dynamique ressemble à l'exemple précédent, mais il se base sur les champs de mappage.

Map de mot-clé dynamique; champ 'Nom de script'

  1. Sélectionnez un champ d'entrée dans le créateur de formulaires.

  2. Via le menu déroulant Liste de mots-clés, sélectionnez l'entrée Dynamic Keyword Map.

  3. Entrez le nom du script cible dans le champ Nom de script.

# Remarques

Lorsqu'une entrée a été sélectionnée dans une liste de mots-clés dynamique, la fonction événement suivante est appelée dans le script de l'en-tête :

onDynListItemSelected(entrée)

Remarque

Dans les listes de mots-clés dynamiques, il n'est pas possible de combiner l'option Remplissage automatique avec l'option Seulement les entrées de liste. La raison principale est que les listes de mots-clés dynamiques peuvent dépendre de plusieurs champs d'entrée, et qu'elles peuvent modifier plusieurs champs d'entrée. Actuellement, il n'est pas possible de supporter une validation dans plusieurs champs en même temps.

Toutes les listes peuvent également être déclenchées à l'extérieur des scripts.

/**
* appelle une règle précise dans ELOas.
*/
function $listAs(skriptName, param2, param3, en cas de réussite, en cas d'erreur) {
/**
* $listKw("IX_GRP_DYN_FIELD", ...) récupère les données dans la
* liste de mots-clés, qui ont été définis dans la liste
*/
function $listKw(swlid, en cas de réussite, en cas d'erreurs) {
/**
* $listDyn("MonScript", "foo", ["bar"], ...) récupère les données du
* script correspondant dans 'IndexServer Scripting Base'.
* Le script est lancé avec "foo" en tant que nom focus et {"foo": ...,
* "bar": ...} comme données de mappage, remplacé avec les jokers "{i}" et "{*}"
*/
function $listDyn(nomdescript, champfocus, champsdefiltre, encasderéussite, encasd'erreur) {

# Calculs avec des scripts

Si vous travaillez avec des scripts pour obtenir des valeurs de champ, nous vous recommandons fortement d'utiliser la fonction $num(...) et non pas la fonction $val(...).

La première fonction transmet un float, alors que la seconde fonction transmet en string formaté ELO : cela signifie, pas de séparateur de milliers et une virgule en tant que séparateur décimal, peu importe la langue !

Si la saisie contient la valeur "12.345,67", $val("IX\_...") rend le string "12345,67".

Les valeurs numériques et les valeurs de montant sont toujours enregistrées sous forme de strings formatés ELO dans ELO_PARAMS.

# Arrondir

Le formulaire est exécuté dans JavaScript sans que le contexte ne soit pris en compte. De cette manière, le formulaire ne connaît pas le sens d'un champ numérique. Si un champ numérique contient plus de chiffres après la virgule que le veut la définition, il ne pourra pas se comporter correctement.

Si vous avez des processus critiques, nous vous recommandons de ne pas définir de formule et d'effectuer votre propre stratégie pour arrondir les chiffres dans l'événement inputChanged.

# Vérification lors de l'enregistrement et du transfert

Depuis la version 10.01, une vérification est effectuée lors de l'écriture des données. La vérification permet de contrôler si des modifications ont été apportées au serveur depuis le chargement du formulaire.

Par exemple, cela pourrait être le cas lorsqu'un utilisateur modifie les metadonnées alors qu'un autre modifie le formulaire. Tant que le deuxième utilisateur a chargé le formulaire avant les modifications, il ne les voit pas; ce problème avait jusqu'alors pour effet que les modifications étaient écrasées.

Si le logiciel remarque que les données ont été modifiées, un dialogue en informe l'utilisateur. Ensuite, l'utilisateur peut confirmer qu'il souhaite écraser les données ou annuler le processus d'enregistrement.

Via le réglage dans le script :

ELO.Configuration.ForceSave = true;

L'ancien comportement reste tel quel et toutes les modifications sont directement écrasées, sans interrogation.

# Imprimer

Remarque

Les fonctions suivantes ne sont exécutées que lorsque l'utilisateur imprime quelque chose via le bouton Imprimer. ll n'est pas possible d'utiliser le raccourci STRG + P ou encore de passer par le menu du navigateur.

# Elargir automatiquement les zones de texte

Vous pouvez définir le flag suivant lors de l'impression, pour visualiser l'intégralité des contenus des zones de texte :

ELO.Configuration.PrintExpandTextarea = true;

Elément 'Modifier les scripts utilisateur'; flag pour élargir l'espace texte

Vous pouvez ajouter ce flag dans la fonction événement inputChanged().

Exemple de formulaire; zone de texte élargie automatiquement

Une fois le script exécuté, toutes les zones de texte sont élargies.

# Imprimer tous les onglets

Si vous souhaitez imprimer tous les onglets par défaut, vous pouvez définir le flag suivant :

ELO.Configuration.PrintAllTabs = true;

Code JavaScript; fonction événement 'inputChanged', flag d'impression par défaut

Vous pouvez ajouter ce flag dans la fonction événement inputChanged().

Créateur de formulaires; imprimer tous les onglets

Dernière mise à jour: 26 février 2024 à 11:42