Simplifions la modifications de champs par lôt

BatchTemplateNAV2015

Comme tous les développeurs, vous pouvez avoir la demande d’un de vos collègues pour l’aider à modifier dans une table la valeur d’un champ pour un groupe d’enregistrement.

La solution souvent utilisée est de former le dit collègue, ou de créer par soi-même, un Report effectuant l’affectation de la nouvelle valeur, en utilisant les filtres naturels des Reports.

On répond au besoin ponctuel avec deux inconvénients majeurs :

  • Il ne s’agit pas d’un solution répétable, elle répond à un besoin unique
  • Il est nécessaire d’avoir accès à l’environnement de développement. Donc besoin d’un minimum de connaissance technique et inutilisable par le client final.

La solution que je vous propose est de modifier une fonction standard de Dynamics NAV : les modèles. Nous allons étendre cette fonction qui ne s’applique qu’à un seul enregistrement en permettant sont application sur une sélection d’enregistrement. Cela nous permettra au passage de voir un type de champ peut usité les « TableFilter ».

Le principe des « TableFilter » est de pouvoir enregistrer dans un champ de multiples filtres d’une table. Leur utilisation en standard se limite quasiment à la sécurité en permettant de filtrer les enregistrement auquel à droit d’accès les utilisateurs. Par exemple, le commercial ne peut consulter que la liste de ses propres clients.

La première étape consiste à ajouter un champ « TableFilter » dans la table des modèles (T8618:Config. Template Header)

Table 8618

N’oubliez pas la propriété « TableIDExpr » elle permet de faire le lien sur la table que l’on souhaite filtrer.

Ensuite, il faut modifier la page associée (P8618:Config. Template Header). On y ajoute notre nouveau champ à la suite du champ standard « Table Name ».

Page 8618

On modifie les propriétés suivantes :

  • Editable = False
  • SourceExpr = « Table Filter »
  • AssistEdit = Yes

Puis sur le trigger AssistEdit on ajoute les variables locales :

LocalVarAssistEdit

Et ensuite le code qui permet de faire la sélection des filtres de la table. Pour ce code, rien ne sert de se casser la tête. Reprenons celui existant en standard pour gérer la sécurité : P9803:Permissions

CodeAssistEdit

et voila la première partie d’effectuer : nous savons stocker les filtres qui serviront à appliquer le modèle. Voyons maintenant cette seconde partie.

Pour se faire, ajoutons une nouvelle action qui déclenchera le traitement. Toujours dans la page des modèle (P8618:Config. Template Header) nous ajoutons :

P8618Action

Avant d’ajouter le code de l’action que nous venons de définir, nous créons une fonction locale dans la page qui traitera les filtres stockés dans notre champ TableFilter pour les transformer en Vue :

LocalFunctionVar

LocaleFunction

Puis le code de l’action avec ses variables :

LocalVarAction1

LocalVarAction2

 

CodeAction

Nous obtenons alors le résultat présent en haut de cet article. Vos collègues consultant n’auront plus besoin de vous…

vous trouverez les sources de ces 2 objets standards modifiés en téléchargement ci-dessous.