HomeBPFFlux des processus d'entreprise: Restreindre l'utilisateur de faire marche...

Flux des processus d’entreprise: Restreindre l’utilisateur de faire marche arrière

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:

S’assurer de passer le contexte d’exécution en paramètre à la fonction

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!

Gabriel Gadoury
Gabriel Gadoury
Avec plus de 11 ans d'expérience en développement d'application d'envergure, d'automatisations et de formation. Je me spécialise maintenant en Power Platform depuis plus de 6 ans, offrant du soutien et des idées à la communauté pour la faire grandir, faire connaître Power Platform et repousser les limites de cette techno encore plus loin.