Gestion des intervenants du workflow par les champs : Eviter que le vérificateur soit la même personne que l'approbateur
Cette fiche décrit comment contrôler le contenu des champs, afin d'éviter d'affecter des valeurs identiques à 2 champs d'un même formulaire. Exemple pris sur les champs "Vérificateur" et "Approbateur" d'un formulaire, ou l'on veut interdire que le même intervenant soit sélectionné pour vérifier et approuver un document.
Exemple d'un formulaire avec un champ "Vérificateur" et un champ "Approbateur" :

Le champ Vérificateur est paramétré de la manière suivante :

Le champ interroge une liste de personnes qui possèdent le rôle "Vérification". Ce champ est multi évalué.
Le champ Approbateur est paramétré de la manière suivante :

Le champ interroge une liste de personnes qui possèdent le rôle "Approbation". Ce champ est mono évalué.
Placer le code JavaScript dans le champ "Approbateur" : Afficher le paramétrage du champ "Approbateur" en mode "Avancé", choisir l'option "JavaScript" et poser le code ci-dessous en respectant le nom des champs sur lesquels vous souhaitez faire le contrôle.

function MyApprbateurVerificateurCtl(oSrc, args)
{
//alert('Je passe' + APSGetFieldByName("Approbateur").value );
if ( APSGetFieldByName("Approbateur"))
if ( APSGetFieldByName("Approbateur").value != '' )
if ( APSGetFieldByName("Verificateur"))
if ( APSGetFieldByName("Verificateur").value != '' ) {
var Verif = APSGetFieldByName("Verificateur").value
var TVerif=Verif.split(';')
for (var i=0; i<TVerif.length; i++) {
if ( TVerif[i] == APSGetFieldByName("Approbateur").value ) {
//alert('Approbateur ne doit pas être dans la liste des vérificateurs');
args.IsValid=false;
return;
}
}
args.IsValid=true;
return;
}
args.IsValid=false;
return;
}
Fonction qui contrôle les informations de 2 champs multi évalués :
function checkApprobateur(oSrc, args)
{
var redacteur = APSGetFieldValueByName("Redacteur"); // Champ Mono
var verificateur = APSGetFieldAllValuesByName("Verificateur"); //Champ Multi
var approbateur = APSGetFieldAllValuesByName("Approbateur"); //Champ Multi
if (approbateur.includes(redacteur) || approbateur.some(value => verificateur.includes(value))) //*Si un des approbateurs est le rédacteur ou si l'un des approbateurs est déjà cité dans la liste des vérificateurs*/
args.IsValid = false;
else
args.IsValid = true;
}
Déclarer la fonction dans les paramètres du champ "Approbateur" :
Dans la partie Paramètres \ Validation personnalisée poser les éléments suivants : CustomValidationErrorText : Ici le texte à afficher lorsque le contrôle remonte l'erreur CustomValidationFunction : Le nom de la fonction appelée.
Résultat à la sélection de l'approbateur :
Demandes de révision
DR-2022-0053 Serait-il possible de préciser que la fonction JavaScript soit implémenté dans un fichier .js dédier ?
Car, insérer du code JavaScript dans l'option du champ est fonctionnel, mais rend la maintenabilité du code peu maintenable.