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.

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
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.
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.
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.

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.
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.
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"
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.
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.
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.
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.
EPApproval_RowInserting - Se utiliza para establecer información adicional en el registro de aprobación para el autorizador.
Esta información adicional también se puede rellenar añadiendo eventos CacheAttached en lugar de RowInserting como se ve a continuación.
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.
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.

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.

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:
- Crear una página de configuración que configure si las aprobaciones están activas para la entidad personalizada.
- Cree una página de entrada de datos que utilice y responda a los flujos de trabajo de aprobación.
- 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 (planificación de recursos empresariales) moderno.
¡Feliz codificación!
