Evaluar el problema y la solución
La aplicación Acumatica Mobile utiliza la pantalla FS400100 para generar el elemento de menú Lista de citas. Cuando los técnicos de campo visualizan esta pantalla, tienen dos opciones de filtro: intervalo de fechas y miembro del personal. En los filtros falta un estado para eliminar las citas en espera, completadas, cerradas o canceladas. El objetivo: eliminar el desorden para que los técnicos de campo puedan centrarse sólo en las citas que necesitan.
Una solución rápida y sencilla sería exponer una consulta genérica (GI) a la aplicación móvil con estos filtros. El problema es que la navegación GI en la aplicación móvil carece de la misma funcionalidad que tiene el núcleo de Acumatica, a saber, poder abrir la pantalla de citas transaccionales cuando se muestra.
Una opción mejor es modificar simplemente la pantalla Lista de citas y añadir un estado. ¿Qué enfoque debemos adoptar para ello?
Evaluación del Código vigente
Lo primero que queremos hacer es navegar a la pantalla de Resumen de Cuenta FS400100 en Acumatica. Usando el práctico Elemento de Inspección, CTRL+ALT+CLICK, podemos identificar que el Código de Lógica de Negocio (BLC) es AppointmentInq y los dos DACs AppointmentInqFilter y FSAppointmentFSServiceOrder.
Observe que el filtro de cabecera, DAC AppointmentInqFilter, no contiene el campo Estado en la sección de cabecera del filtro de la pantalla de consulta(FS400100). Por lo tanto, tendremos que añadirlo.
A continuación, tenemos que ver la consulta que filtrará los registros. Esta es la Vista de Citas declarada en el BLC utilizando el DAC FSAppointmentFSServiceOrder con algunas uniones a otras tablas.
Fíjate en lo siguiente:
- Está decorado con PXFilterable
- Utiliza el estándar tradicional BQL y aún no está actualizado a BQL Fluent
- No utiliza el nuevo IEnumberable
Soluciones de diseño
Opción 1
Añada el campo a una extensión DAC y anule la vista de selección Citas de la extensión de gráficos y añada el campo de filtro a la aplicación móvil.
Pros: Rápido y fácil de hacer... Contras: Difícil de mantener ya que los cambios de versiones tienen que seguir el ritmo de los cambios de vista y no es el enfoque recomendado por Acumatica.
En esta opción, tendremos que añadir lo siguiente a la vista de filtro existente:
.And<Current<AppointmentInqFilter.usrStatus>.IsNull
,Or<Current<AppointmentInqFilterExt.usrStatus>.IsEqual<FSAppointmentFSServiceOrder.status>>
Segunda opción
Añadir el campo a una extensión DAC y anular la vista con una vista delegada y añadir el campo de filtro a la aplicación móvil.
Pros - Acumatica proporciona un ejemplo en el curso de formación T300, donde lo encontrará en la sección 11.7.
Aquí está el código:
GIST: https://gist.github.com/anaxetogrind/dc53fe2e62bfde79b9a36e0d26192818
Pruebas y errores
Al principio, tenía mi declaración actual al revés en la declaración Where And. Es decir, la coloqué en mi parte FSAppointmentFSServiceOrder de la cláusula Where. Esto creó una situación extraña en la que el código se compiló sin errores, pero al ejecutar el proceso Acumatica arrojó un error de Sintaxis no válida cerca de );. Esto me pareció un error SQL, así que pude rastrear el problema mirando el SQL generado a través de Request Profiler. Desde allí, pude ver en el parámetro P25 que mi UsrStatus estaba siendo rellenado pero mi Status de la cita estaba en blanco. Así que el SQL decía: and (@P25 = ). El valor que faltaba causó el error y se pudo solucionar corrigiendo la cláusula Where del método.
Además, durante las pruebas, me di cuenta de que me había olvidado de establecer el Commit Changes a true en el campo UsrStatus. Esto provocó que los registros no se actualizaran a menos que también se actualizara otro campo de filtro.
Actualizar la aplicación móvil
Por último, necesitamos añadir el campo de filtro a la Aplicación Móvil. La Lista de Citas se encuentra en la pantalla Resumen de Citas FS400100. Mirando el WSDL/MSDL, vemos que nuestro campo UsrStatus se añade al contenedor de Selección.
Una línea de actualización rápida en la pantalla de Comandos para la Aplicación Móvil para Actualizar FS400100 y una actualización rápida en el Menú para forzar la actualización de la aplicación.
GIST: https://gist.github.com/anaxetogrind/9862b713ed15116d5cb5194a9e4ea988
Y así de fácil, la aplicación móvil ahora incluye nuestro filtro:
Espero que esta entrada te haya resultado útil. ¡Feliz codificación!