On écrit de plus en plus de formules dans nos applications low-code. Comme mentionné, le low-code omniprésent, les formules regroupent déjà plusieurs concepts et diminuent les manipulations possibles au niveau du coeur des formules à proprement dit. Je vous dirais qu’il s’agit d’un grand avantage et on évite ainsi une tonne de scénarios catastrophiques ou pénibles. Par contre, nous aurons toujours des cas particuliers qui demandent une attention particulière et une gestion étroite de ces cas, qu’il s’agisse d’une erreur ou pas.
Gestion simple mais efficace
Une gestion étroite des erreurs permet, particulièrement, d’éviter les exécutions en échec ou sans résultat tangible, sans avertir l’utilisateur qu’un mauvais comportement est survenu. Cette gestion offre également un chemin sûr et souhaité.
Prenons un exemple afin de représenter l’idée. On a une application canvas avec un bouton qui enregistre un nouvel élément de la table ‘Intervention’. Suite à l’enregistrement, on veut enregistrer la date et heure de la modification pour utilisation ultérieure, rafraîchir la liste déroulante ‘Dropdown1’ et se diriger vers un nouvel écran ‘Screen2’.

Si jamais une erreur côté application survient, il est possible qu’une notification apparaîsse dans le haut de l’écran afin d’informer d’un enjeu ‘mécanique’. Par contre, les actions qui suivent l’opération de la fonction Patch s’exécuteront tout de même, dans ce cas-ci la variable et les fonctions ‘Reset’ et ‘Navigate’. De plus, la variable qui enregistre la date de dernière modification sera erronée puisque l’opération ne sera pas complétée…
Afin de rendre le tout sécuritaire et fonctionnel, il ne suffit que d’utiliser la fonction ‘IfError’ qui amènera les éléments suffisants à une bonne gestion de votre processus.
Documentation Microsoft sur les fonctions Error, IfError, IsError, IsBlankOrError: https://learn.microsoft.com/fr-fr/power-platform/power-fx/reference/function-iferror

version code:
IfError(
Patch(
Interventions;
Defaults(Interventions);
{
Name: "Demo gestion des erreurs";
Type: 'Option | Type d''intervention'.Gouvernance;
'Jour / personne': 20
}
);
Notify("Une erreur est survenue lors de l'enregistrement de l'intervention. " & FirstError.Message; NotificationType.Error; 2000);
Notify("Enregistrement de l'intervention avec succès."; NotificationType.Success; 2000);;
Set(varLastModification; Now());;
Reset(Dropdown1);;
Navigate(Screen2)
)
La fonction valide le premier argument, qui est la fonction ‘Patch’. Si elle tombe en erreur, le 2e argument sera exécuté, soit la fonction ‘Notify’ relative à l’erreur.
Si le 1er argument est exécuté avec succès, le 3e argument s’exécutera plutôt, soit la combinaison de la notification de succès, l’enregistrement de la variable globale, la fonction ‘Reset’ et ‘Navigate’.
Ainsi, notre fonction ‘Patch’ agira exactement selon le comportement souhaité et l’utilisateur se verra informé des événements négatifs afin de réagir proprement à tout cela.
Conclusion
Il existe plusieurs possibilités à cette fonction et elle démontre une belle adaptation à plusieurs scénarios. Encore une fois, la plateforme nous offre des outils versatiles qui ne demandent que d’un peu d’imagination afin de rendre le low-code extrêmement puissant.
Sur ce, bon café et… bon développement!