Inicio Blog Acumatica probado, cliente aprobado - Implementación del proceso de aprobación en pantallas personalizadas

Acumatica probado, cliente aprobado: implementación del proceso de aprobación en pantallas personalizadas

Joshua van Hoesen | 24 de noviembre de 2022

Acumatica probado, cliente aprobado: implementación del proceso de aprobación en pantallas personalizadas

Introducción

A medida que las empresas crecen y se desarrollan, pueden encontrarse con la necesidad de salvaguardar los procesos empresariales dentro de su sistema. Afortunadamente, Acumatica incluye un conjunto completo de aprobaciones nativas que puede configurarse según las necesidades específicas de la empresa.

Para los desarrolladores, la pregunta que surge a continuación es cómo proteger los procesos personalizados que se desarrollan utilizando el Acumatica Framework y desean la misma funcionalidad sin fisuras del sistema integrado de Acumatica.

Este artículo pretende ofrecerle una vía para llevar a cabo esta tarea.

En este caso, revisaremos la página de solicitud de tiempo desarrollada por ASI LLC que permite a los empleados solicitar períodos de tiempo libre y enviar solicitudes para su aprobación. A continuación, las solicitudes de tiempo se revisarán mediante el procesamiento de aprobación integrado de Acumatica y se reflejarán en la tarjeta de tiempo de los empleados en función de la configuración.

Página de configuración

Como es práctica común al extender o crear nuevas funcionalidades dentro del Framework de Acumatica, vamos a crear nuestra propia página de preferencias para manejar las configuraciones para nuestra característica de Solicitud de Tiempo

La página que se muestra en la siguiente imagen tiene una cuadrícula que enumera las entidades para aprobación y una casilla de verificación que determina si las aprobaciones están habilitadas para las entidades enumeradas en la cuadrícula. También se define un campo de secuencia de numeración que luego será utilizado por la página de ingreso de datos de Solicitud de Tiempo personalizada. 

Acumatica probado, cliente aprobado: implementación del proceso de aprobación en pantallas personalizadas

Clases de acceso a datos

AATimeRequestSetup

Esta clase se implementa como clase de acceso a datos de configuración para la clase Solicitud de hora y contiene un único campo utilizado por el proceso de aprobación TimeRequestApproval

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

AATimeRequestApproval

La estructura de este CAD imita la de Acumaticas EPSetupApproval en la base de datos y debe utilizar tanto IBqlTable y el IAssignedMap de la base de datos.

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

Gráfico

El gráfico para la página de configuración es simple y directo, haciendo referencia a dos clases de acceso a datos y utilizando un único Evento AATimeRequestSetup_FieldUpdated que al activarse actualizará todos los registros correspondientes dentro de la clase AATimeRequestApproval view.

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

Página de entrada de datos

La creación de una página de entrada de datos se hace más compleja con la implementación de procesos de aprobación. La interfaz de usuario completa para la funcionalidad de solicitud de tiempo puede verse en la imagen siguiente. Esta página permite la creación de una solicitud de tiempo por parte de un empleado con un desglose de horas detallado de la solicitud. Este documento puede ahora ser retirado y enviado para su aprobación.

Procesos de aprobación-1

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

Estas serán las acciones estándar de aprobación y rechazo de Acumatica en el menú desplegable Acciones, que definiremos más adelante en el artículo.

Clase de acceso a datos primarios

La principal Clase de Acceso a Datos que estamos definiendo para nuestras aprobaciones que permiten páginas de entrada de datos personalizadas es AATimeRequest

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

Firma

La clase Data-Access debe implementar la interfaz IAssign. Para ello será necesario incluir los campos OwnerID y WorkGroupID en la declaración de la clase.

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

Estado

Deberá definir los siguientes valores de estado para el campo estado de su DAC con las pantallas correspondientes, como se muestra a continuación.

"H" - "En espera" 

"P" - "Pendiente de aprobación"

"A" - "Aprobado"

"R" - "Rechazado"

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

Banderas

Necesitaremos declarar dos campos de bits adicionales en nuestra Data-Access-Class para llevar la cuenta de si el registro ha sido aprobado o rechazado por el usuario. Se llamarán Aprobado y Rechazado.

IsApprover

Se trata de un campo no respaldado por la base de datos que se rellena mediante eventos gráficos durante la carga de un registro y determina si el usuario actual es un aprobador válido para la entidad.

Gráfico

El gráfico para nuestra página de entrada de datos se define como AATimeRequestEntry.Aunque es un poco más complejo que nuestra página de configuración, su lógica se utiliza para actualizar los estados en la clase de acceso a datos principal. Esto proporciona una lógica de aprobación adicional, encapsulada en las clases de ayuda de Acumatica.

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

Aprobación EPAAutomatización

La creación del gráfico para una página de entrada de datos personalizada con aprobaciones es menos compleja gracias a las clases de ayuda desarrolladas por Acumatica que consolidan la lógica en estructuras fáciles de usar.

Implementaremos el helper EPApprovalAutomation con un nombre de declaración de vista de Aprobación y los siguientes argumentos :

SourceAssign - DAC primario

Aprobado - Campo aprobado por el CAD primario

Rechazado - Campo DAC primario rechazado

Hold - Campo de retención del DAC primario

SetupApproval - SetupApproval DAC 

Acciones

Deberá crear dos acciones adicionales como se define a continuación:

Aprobar: actualiza el estado de la entidad a "Aprobado" y marca como verdadero el indicador "Aprobado" en el CAD principal.

Rechazar - Actualiza el estado de la entidad a "Rechazada" y marca como verdadero el indicador "Rechazada" en el DAC primario.

Eventos

Primary_DAC_RowSelecting - Determina si las aprobaciones están habilitadas, si están habilitadas comprueba que el usuario actual es el aprobador establecido y rellena IsApprover en consecuencia.

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

Primary_DAC_RowSelected - Habilita los botones Aprobar / Rechazar cuando una entidad pasa a Pendiente de Aprobación, así como deshabilita los campos de cabecera excepto la casilla de verificación Retener para cuando la entidad está fuera de espera.

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

Primary_DAC_FieldUpdated - Establece la entidad como pendiente de aprobación cuando se retira de la espera, o restablece los otros campos de estado cuando un documento se vuelve a poner en espera.

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

EPApproval_RowInserting - Se utiliza para establecer información adicional en el registro de aprobación para el autorizador.

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

Esta información adicional también se puede rellenar añadiendo eventos CacheAttached en lugar de RowInserting como se ve a continuación.

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

Modificación de Acumatica

Extensión del gráfico

Será necesario crear una extensión del gráfico a partir del gráfico de mantenimiento del mapa de aprobaciones de Acumatica EPApprovalMapMaint para permitir que la página de entrada de datos personalizada se muestre en la lista de tipos de entidad, implementada con la página de ejemplo AA306000 que se muestra a continuación.

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

Una vez escrita la extensión y registrada la página en el mapa del sitio de instancias, la entidad personalizada estará disponible en la lista desplegable Tipo de entidad, como se muestra a continuación.

Procesos de aprobación-1

Configuración

Una vez completados todos los pasos anteriores, podrá definir un mapa de aprobaciones para su entidad personalizada y utilizar el proceso de aprobaciones nativo del marco de Acumatica.

Procesos de aprobación-1

Conclusión

Aunque el uso de funciones avanzadas de Acumatica en páginas personalizadas puede ser a veces desalentador, he intentado mostrar lo sencillo que puede ser siguiendo estos sencillos pasos:

  1. Crear una página de configuración que configure si las aprobaciones están activas para la entidad personalizada.
  2. Cree una página de entrada de datos que utilice y responda a los flujos de trabajo de aprobación.
  3. Cree una extensión de la página de asignación de aprobaciones de Acumatica para permitir entidades personalizadas definidas.

Con la metodología que describí para que la implementes, tú también podrás utilizar fácilmente el proceso de aprobación incorporado de Acumatica para las páginas de ingreso de datos personalizados. Esto mejorará en gran medida la protección y la capacidad de auditoría de datos importantes del sistema específicos del cliente, algo imprescindible en cualquier sistema ERP moderno.

¡Feliz codificación!

Autor del blog

Ingeniero jefe de software en Accounting System Integrators. Dirige el equipo de desarrollo que ha creado NonProfitPlus, un software de gestión empresarial diseñado pensando en las organizaciones sin ánimo de lucro e impulsado por Acumatica ERP para ofrecer un conjunto de aplicaciones totalmente integradas.

Reciba las actualizaciones del blog en su bandeja de entrada.