Le flux des processus d’entreprise est un composant offrant la possibilité de mettre en place un formulaire « assisté » contenant plusieurs étapes avec des validations et/ou processus pour chaque étape. Il offre une interface qui guide l’utilisateur à atteindre un objectif précis qui respecte les besoins et restrictions de l’entreprise.
Ce composant est puissant, mais peut devenir capricieux sur quelques aspects, ce qui rebute plusieurs utilisateurs de se lancer dans son utilisation. Une problématique au processus est que, par défaut, l’utilisateur peut reculer comme bon lui semble tout au long du processus. Ce problème peut compromettre l’utilisation du composant et mener à des maux de tête pour essayer de trouver une alternative. Voyons voir comment le code peut être ajouté sans provoquer de tempête dans votre système.
Un peu de code facile à maintenir
Une solution consiste à utiliser un bout de code très simple et qui ne compromet aucunement la solidité de votre application et de son architecture. Laissez-moi vous convaincre!
J’ai créé un flux des processus d’entreprise pour procéder à une demande d’absence pour un système X.

On a 4 étapes dans le processus, mais je souhaite que, une fois que l’utilisateur est passé à une étape différente, qu’il ne puisse pas revenir à l’étape précédente, ce qui causerait un problème de conformité pour ma demande.
Il ne suffit que d’ajouter un script sur l’événement de changement d’étape du flux, évidemment en prenant soin de cibler l’événement « PRE »-changement. Pour se faire, on ajoute un script au chargement du formulaire de la table concernée par le flux (dans mon cas, la table Demande d’absence). Dans ce script, on devra faire appel à formContext.data.process.addOnPreStageChange(<nomFonction>) pour se brancher à tout événement de changement de phase. Comme exemple, ça devrait ressembler à ceci:
DemandeAbsenceForm = {
OnLoad: function (context) {
var formContext = context.getFormContext();
var process = formContext.data.process;
var formType = formContext.ui.getFormType();
process.addOnPreStageChange(DemandeAbsenceForm.HandlePreStageChange);
},
HandlePreStageChange: function (context) {
var formContext = context.getFormContext();
var bpfArgs = context.getEventArgs();
var direction = bpfArgs.getDirection();
if (direction === "Previous") {
bpfArgs.preventDefault();
var alertStrings = {
text: "Vous ne pouvez pas revenir en arrière dans ce processus.",
title: "Avertissement!",
confirmButtonLabel: "OK"
};
var alertOptions = { height: 200, width: 450 };
Xrm.Navigation.openAlertDialog(alertStrings, alertOptions);
return;
}
}
}
Une fois le script créé en tant que ressource web et publié, on doit faire appel à la fonction dans le formulaire lors de son chargement:


Une fois le formulaire publié, vous devriez maintenant avoir un flux qui bloque l’utilisateur de revenir à l’étape précédente, avec un message d’avertissement:

En cliquant sur le bouton « précédent »:

Et on remarque que l’action de revenir à la phase précédente est bloquée.
Voilà! Un peu code sans complexifier grandement votre système. Maintenant, vous pouvez adapter facilement à toutes les sauces!
À la prochaine!