Accueil Blog Acumatica Testé, Approuvé par le Client - Mise en place d'un processus d'approbation sur des écrans personnalisés

Acumatica Testé, Approuvé par le Client - Mise en place d'un processus d'approbation sur des écrans personnalisés

Joshua van Hoesen | 24 novembre 2022

Acumatica Testé, Approuvé par le Client - Mise en place d'un processus d'approbation sur des écrans personnalisés

Introduction

Au fur et à mesure de leur croissance et de leur développement, les entreprises peuvent éprouver le besoin de protéger les processus commerciaux au sein de leur système. Heureusement, Acumatica est livré avec une suite d'approbation complète native qui peut être configurée en fonction des besoins spécifiques d'une entreprise.

Pour les développeurs, la question qui se pose ensuite est de savoir comment protéger les processus personnalisés qui sont développés à l'aide d Acumatica Framework et qui souhaitent bénéficier de la même fonctionnalité transparente que le système intégré d'Acumatica.

Cet article a pour but de vous fournir une marche à suivre pour accomplir cette tâche.

Dans ce cas, nous examinerons la page de demande de temps développée par ASI LLC qui permet aux employés de demander des périodes de temps libre et de les soumettre pour approbation. Les demandes de temps seront ensuite examinées par le processus d'approbation intégré d'Acumatica et reflétées sur la carte de temps des employés en fonction de la configuration.

Page de configuration

Comme c'est souvent le cas lors de l'extension ou de la création de nouvelles fonctionnalités au sein d'Acumatica Framework, nous allons créer notre propre page de préférences pour gérer les configurations de notre fonctionnalité de demande de temps

La page présentée dans l'image ci-dessous comporte une grille listant les entités à approuver et une case à cocher déterminant si les approbations sont activées pour les entités listées dans la grille. Un champ de séquence de numérotation est également défini, qui sera utilisé ultérieurement par la page de saisie des données de la demande de temps personnalisée. 

Acumatica Testé, Approuvé par le Client - Mise en place d'un processus d'approbation sur des écrans personnalisés

Classes d'accès aux données

AATimeRequestSetup

Cette classe est mise en œuvre en tant que classe d'accès aux données d'installation pour la fonction Demande de temps elle contient un seul champ utilisé par le processus d'approbation TimeRequestApproval

GIST : https://gist.github.com/jvanhoesen/db449c52ae593efd0fc22b9b2939fd88

AATimeRequestApproval

La structure de ce DAC imite celle d'Acumaticas. EPSetupApproval d'Acumatic dans la base de données et devrait utiliser à la fois les tables IBqlTable et l'élément IAssignedMap et l'interface IAssignedMap.

GIST: https://gist.github.com/jvanhoesen/72198b26eabe422335f1b31e2e617902

Graphique

Le graphique de la page d'installation est simple et direct, et fait référence à deux classes d'accès aux données (Data-Access-Classes). classes d'accès aux données et utilisant un seul événement AATimeRequestSetup_FieldUpdated qui, lorsqu'il est déclenché, met à jour tous les enregistrements correspondants dans le champ AATRequestApproval de la vue AATRequestApproval.

GIST: https://gist.github.com/jvanhoesen/19bb75eab4aca39c1228a86e16c5261a

Page de saisie des données

La création d'une page de saisie de données est rendue plus complexe par la mise en œuvre de processus d'approbation. L'image ci-dessous montre l'interface utilisateur complétée pour la fonctionnalité de demande de temps. Cette page permet la création d'une demande de temps par un employé avec une répartition détaillée des heures de la demande. Ce document peut maintenant être mis en attente et soumis pour approbation.

Procédures d'approbation-1

GIST : https://gist.github.com/jvanhoesen/793901fada92c37aca0ec16d80c73f

Il s'agira des actions standard d'approbation et de rejet d' Acumatica dans le menu déroulant Actions, que nous définirons plus loin dans l'article.

Classe d'accès aux données primaires

La principale classe d'accès aux données que nous définissons pour nos approbations qui permettent des pages de saisie de données personnalisées est AATimeRequest

GIST : https://gist.github.com/jvanhoesen/b4ef5c93dc67cb8ab1d90852d9715682

IAssign

La classe Data-Access doit implémenter l'interface IAssign. Pour ce faire, il faut inclure les champs OwnerID et WorkGroupID dans la déclaration de la classe.

GIST: https://gist.github.com/jvanhoesen/825585aea3c9217199f81c9d12476ddf

Statut

Vous devez définir les valeurs d'état suivantes pour le paramètre statut de votre DAC avec les affichages correspondants comme indiqué ci-dessous.

"H" - "En attente" 

"P" - "En attente d'approbation".

"A" - "Approuvé"

"R" - "Rejeté"

GIST: https://gist.github.com/jvanhoesen/58a2c6105789c632994d51a87fce3b24

Drapeaux

Nous devrons déclarer deux champs de bits supplémentaires dans notre classe d'accès aux données pour savoir si l'enregistrement a été approuvé ou rejeté par l'utilisateur. Ces champs s'appelleront Approuvé et Rejeté.

IsApprover

Il s'agit d'un champ non sauvegardé dans la base de données qui est alimenté par des événements graphiques lors du chargement d'un enregistrement et qui détermine si l'utilisateur actuel est un approbateur valide pour l'entité.

Graphique

Le graphique de notre page de saisie des données est défini comme AATimeRequestEntry.Bien qu'il soit un peu plus complexe que notre page de configuration, sa logique est utilisée pour mettre à jour les statuts de la classe principale Data-Access. Cela fournit une logique d'approbation supplémentaire, encapsulée dans les classes d'aide Acumatica.

GIST : https://gist.github.com/jvanhoesen/7c438ef851ef1aac4bfa9af7c9cebf08

Automatisation de l'approbation de l'EPA

La création du graphique pour une page de saisie de données personnalisée avec approbations est rendue moins complexe grâce aux classes d'aide développées par Acumatica qui consolident la logique dans des structures faciles à utiliser.

Nous allons mettre en œuvre l'aide EPApprovalAutomation avec une déclaration de vue nommée Approbation et les arguments suivants :

SourceAssign - DAC primaire

Approuvé - Champ d'approbation du CED primaire

Rejeté - Champ de rejet du CED primaire

Hold - Champ de maintien du CNA primaire

SetupApproval - SetupApproval DAC 

Actions

Vous devrez créer deux actions supplémentaires telles que définies ci-dessous :

Approuver - Met à jour le statut de l'entité à "Approuvé" et marque le drapeau "Approuvé" sur le CED principal comme vrai.

Rejeter - Met à jour le statut de l'entité sur "Rejeté" et marque l'indicateur "Rejeté" sur le CED principal comme vrai.

Evénements

Primary_DAC_RowSelecting - Détermine si les approbations sont activées, si c'est le cas, vérifie que l'utilisateur actuel est l'approbateur défini et remplit les champs suivants IsApprover en conséquence.

GIST : https://gist.github.com/jvanhoesen/8461bf6dd782b07f1f7f9713deddc49f

Primary_DAC_RowSelected - Active les boutons Approuver / Rejeter lorsqu'une entité passe en Approbation en attente ainsi que la désactivation des champs d'en-tête, à l'exception de la case à cocher Mise en attente lorsque l'entité n'est plus en attente.

GIST : https://gist.github.com/jvanhoesen/a385ca54d3f87a4694728f6c509c9a27

Primary_DAC_FieldUpdated - Définit l'entité comme étant en attente d'approbation lorsqu'elle est mise en attente, ou réinitialise les autres champs de statut lorsqu'un document est remis en attente.

GIST : https://gist.github.com/jvanhoesen/dcf6fe87eb6ae25a214a2657066301a6

EPApproval_RowInserting - Utilisé pour définir des informations supplémentaires sur l'enregistrement d'approbation pour l'approbateur.

GIST : https://gist.github.com/jvanhoesen/030ee7529c1bd8aa45da04166cfc059a

Ces informations supplémentaires peuvent également être fournies en ajoutant des événements CacheAttached au lieu de RowInserting, comme indiqué ci-dessous.

GIST : https://gist.github.com/jvanhoesen/14e9fdb4738f956f2b414d54ef27cc6b

Modification d'Acumatica

Extension du graphique

Une extension de graphique devra être créée à partir du graphique de maintenance de la carte d'approbation Acumatica EPApprovalMapMaint pour permettre à la page de saisie de données personnalisée d'apparaître dans la liste des types d'entités, mise en œuvre avec la page d'exemple AA306000 présentée ci-dessous.

GIST : https://gist.github.com/jvanhoesen/b3f688911bfd0375ed1dd8bd8b147884

Une fois que l'extension a été écrite et que la page est enregistrée dans le plan du site de l'instance, l'entité personnalisée devient disponible dans la liste déroulante Type d'entité, comme indiqué ci-dessous.

Procédures d'approbation-1

Configuration

Une fois que toutes les étapes ci-dessus ont été complétées, vous serez en mesure de définir une carte d'approbation pour votre entité personnalisée et d'utiliser le processus d'approbation propre au cadre Acumatica.

Procédures d'approbation-1

Conclusion

Bien que l'utilisation des fonctionnalités avancées d'Acumatica dans les pages personnalisées puisse parfois être décourageante, j'ai essayé de montrer à quel point cela peut être simple en suivant ces étapes simples :

  1. Créez une page de configuration qui détermine si les approbations sont actives pour l'entité personnalisée.
  2. Créer une page de saisie de données qui utilise et répond aux flux de travail d'approbation.
  3. Créer une extension de la page de correspondance d'approbation Acumatica pour permettre la définition d'entités personnalisées.

Grâce à la méthodologie que je vous ai présentée, vous pourrez vous aussi utiliser facilement le processus d'approbation intégré d'Acumatica pour les pages de saisie de données personnalisées. Cela améliorera grandement la protection et la capacité d'audit des données importantes spécifiques au client, ce qui est indispensable dans tout système ERP moderne.

Bon codage !

Auteur du blog

Ingénieur logiciel en chef chez Accounting System Integrators. Il dirige l'équipe de développement qui a créé NonProfitPlus, un logiciel de gestion d'entreprise conçu pour les organisations à but non lucratif et alimenté par Acumatica ERP pour offrir une suite d'applications entièrement intégrées.

Recevez les mises à jour du blog dans votre boîte de réception.