CARL Source - Facility
Scripting
Personnalisation > Mode personnalisation > Détail des contrôles > Scripting

Attention :

Les principes décrits au sein de ce document nécessitent une bonne connaissance technique de l'application, leur usage est exclusivement limité à des cas simples.
De plus, le service support CARL Berger-Levrault n’est pas à même de traiter la diversité des demandes concernant ces mécanismes dans le cadre de l’assistance proposée en standard : ce service ne pourra pas vous assister ni vous conseiller sur ce sujet.

Par ailleurs, l’utilisation de scripts est susceptible d’entraîner des problèmes lors de l’installation de futures mises à jour de CARL Source : avant d’installer une mise à jour, il sera indispensable de vérifier et éventuellement adapter certains scripts.
Le service Support ne sera pas à même de vous assister dans cette opération. Au final, l’usage de ces techniques de script s’opère sous la seule responsabilité de l’utilisateur.

Les scripts permettent d'effectuer des traitements spécifiques, dynamiquement, en fonction du contexte.

Ils permettent par exemple :

Les événements pouvant déclencher un script sont :

  1. Il n'est pas possible d'afficher une boite de dialogue sur un événement onInit.
  2. L'affichage d'un écran de l'application ou d'un document lié se fait sans script, en utilisant la propriété "action", voir Valeur des contrôles.

Visualisation des événements paramétrés sur un contrôle

Des pastilles de couleur apparaissent sur chaque contrôle comportant un ou plusieurs événements.

Les couleurs affichées permettent de déterminer précisément la nature des événements paramétrés sur ce contrôle :

 

Exemples de script

Contrôle de la taille minimale d'un champ

Script sur le champ "Titre" de l'intervention, événement OnValidate.
 → A l'enregistrement de l'intervention, l'application contrôle que le titre comporte entre 5 et 10 caractères.
Copier le code
// Test que la longueur du contenu du champ est correcte.
var longueurOK =(value.length > = 5 && value.length <= 10);
// Retourne le résultat du test (toujours un booléen)
longueurOK;

 

Coloration d'un champ

Script sur l'événement OnClick d'un bouton.
Dans la propriété "Zones rafraîchies" du bouton, indiquer sda_PR_Supplier.
→ Au clic sur le bouton, le champ d'identifiant "sda_PR_Supplier" est colorié en noir, et son texte en blanc.
Copier le code
// Import de la classe de traitement pour le paramétrage.
importClass(com.carl.frmk.util.CScript);
// Récupération du contrôle (ici, le fournisseur de la DA ayant l'identifiant : sda_PR_Supplier)
// Premier paramètre : identifiant du contrôle à retrouver.
// Deuxième paramètre : point de départ, ici, le composant qui porte le script (un bouton)
// Troisième paramètre : si true recherche dans l'onglet en cours, si false recherche dans tous les onglets.
var component= CScript.getComponent ("sda_PR_Supplier", comp, true);
// Changement de la couleur du fond du composant (noir)
CScript.setColorBack("black", component);
// Changement de la couleur du texte du composant (blanc)
CScript.setColorFont("white", component);
Vous pouvez remplacer "sda_PR_Supplier" par l'identifiant de tout autre champ du formulaire.

 

Affectation d'une valeur en fonction d'une autre    

Affectation du destinataire de la DT avec le responsable de l'émetteur
Script sur le champ "Destinataire" de la DT, événement OnInit
Copier le code
// DT du formulaire
var mr = formAnimator.bean;
// Si le créateur de la DT est connu,
if (mr.getCreatedBy() != null) {
    // Affecter son responsable au destinataire.
    mr.setAddressee(mr.getCreatedBy().getSupervisor());
}

 

Affectation du prestataire de l'intervention en fonction du fournisseur SAV du matériel
Script sur le champ "Matériel" de l'intervention, événement OnValueChange.
Dans la propriété "Zones rafraîchies" du champ, ajouter sda_WO_Vendor, précédé d'une virgule.
→ une fois le matériel saisi, le prestataire de l'intervention est initialisé avec le fournisseur SAV du matériel
Copier le code
// Contenu du contrôle.
var material = comp.getValue();
// Si le MatérielN° d'inventaire est renseigné et qu'il a un fournisseur SAV,
if ( material != null && material.getSupport() != null) {
    // Affectation de ce SAV à l'élément du formulaire.
    formAnimator.getBean().setVendor(material.getSupport());
}

 

Affectation du budget de la commande avec le budget de la première ligne
Script sur le champ "Budget" de la commande, événement OnInit.
Copier le code
// Commande du formulaire.
var po = formAnimator.bean;
var budgacc;
// S'il y a des lignes de commande,
if (po.getOrderLines().size() > 0)
{
    // Consulter le budget de la première ligne,
    budgacc = po.getOrderLines().iterator().next().getBudgAcc();
    // Et l'affecter à la commande.
    po.setBudgAcc(budgacc);
}

 

Ajout d'une ligne dans une liste

Script sur un champ du compte-rendu (par exemple le code), événement OnInit.
→ A l'ouverture d'un compte-rendu en création, une ligne est directement ajoutée dans la liste des occupations.
Copier le code
// Elément du formulaire.
var bean = formAnimator.getBean();
// S'il est en mode création,
if (bean.isNew()) {
    // Dans l'animateur de la liste des occupations,
    var ta = formAnimator.getRealisedOccupationTableAnimator();
    ta.getItems();
    // Ajout d'une ligne.
    ta.newBean(bean);
}
Si la condition (bean.isNew()) est supprimée, une ligne sera ajoutée à l'ouverture d'un compte-rendu, que ce soit en création ou non.

 

Envoi d'un courriel

Sur l'événement OnClick d'un bouton, envoi d'un courriel au destinataire de la DT, selon le modèle de message TMPL_MRCREATE.
Il affiche ensuite une pop up de confirmation.
Copier le code
// Import de la classe de traitement pour le paramétrage.
importClass(com.carl.frmk.util.CScript);
// Import de l'enum des type de numéros de téléphone
importClass(com.carl.xnet.system.backend.bean.PhoneType);
// traitement uniquement hors création.
if ( !formAnimator.getBean().isNew()){
    // Identifiant de la DT du formulaire.
    var mrId = formAnimator.getBean().getId();
    // Recherche du modèle de message
    var msgTemplate = CScript.getEntityByCode( "com.carl.xnet.system.backend.bean.MsgTemplateBean", "TMPL_MRCREATE");
    // Adresse courriel du destinataire de la DT.
    var addressee = formAnimator.getBean().getAddressee();
    // Si le message et le destinataire sont trouvés, envoi du message.
    if ( msgTemplate != null && addressee != null){
        // si destinataire avec un email .
        var emailAddressee= addressee.getPhone(PhoneType.EMAIL);
        // Si mail renseigné
        if ( emailAddressee != null){
            // Exécution de l'envoi du mail.
            CScript.sendMail(msgTemplate,"com.carl.xnet.works.backend.bean.MRBean",mrId, emailAddressee.getPhoneNum());
            // Informe l'utilisateur de l'envoi via une popup
            CScript.openMessageBox("Confirmation", "Le message a été envoyé à " + addressee.getCode(), comp);
        }
    }
}

 

Recherche d'une valeur en base

Initialisation du prestataire de l'intervention avec le code utilisateur s'il est aussi un code fournisseur.
Peut être placé sur l'événement OnInit du champ "Prestataire".
Copier le code
// Import de la classe de traitement pour le paramétrage.
importClass(com.carl.frmk.util. CScript);
//Import de la classe de gestion des utilisateurs connectés.
importClass(com.carl.frmk.common.LoggedUserBean);
var bean = formAnimator.getBean();
// Recherche s'il existe un fournisseur ayant pour code le code de l'utilisateur connecté.
var vendor = CScript.getEntityByCode( "com.carl.xnet.purchase.backend.bean.VendorBean", LoggedUserBean.getInstance().getUserCode());
// Affecte le fournisseur (nul ou pas) comme prestataire
bean.setVendor(vendor);