En esta serie de utilidades para Microsoft Dynamics 365 Business Central, exploro herramientas prácticas para optimizar la interacción del usuario. En esta tercera entrega, me enfoco en cómo gestionar diálogos de progreso, mensajes y confirmaciones, facilitando que los usuarios reciban información en tiempo real, confirmen acciones importantes y sean notificados al finalizar los procesos. Es una funcionalidad ideal para mejorar la experiencia en procesos largos o complejos.
¡Vamos manos a la obra! 🤭
Segmento 1: Abriendo un Diálogo de Progreso
El primer procedimiento, ProcessDialogOpen
, inicia un diálogo de progreso, configurando el valor máximo y el mensaje de progreso que verá el usuario:
procedure ProcessDialogOpen(NewMaxCount: Integer)
var
Text001Lbl: Label 'Progress to %1: ', Comment = 'ESP="Progreso hasta %1: "';
Text002Lbl: Label '#1#####', Locked = true;
ValueText: Text;
begin
if not GuiAllowed then
exit;
MyNext := 0;
MaxCount := NewMaxCount;
ValueText := StrSubstNo(Text001Lbl, MaxCount) + Text002Lbl;
MyDialog.Open(ValueText, MyNext);
end;
En este procedimiento, se definen dos etiquetas de texto (Text001Lbl
y Text002Lbl
) para mostrar el mensaje principal del diálogo de progreso y el formato de los números. La condición GuiAllowed
verifica si el entorno de ejecución permite mostrar interfaces gráficas, y si no es posible, sale del procedimiento. Con MyNext
inicializado a 0 y MaxCount
tomando el valor de NewMaxCount
, se define el límite del proceso. Usando StrSubstNo
, se reemplaza %1
en Text001Lbl
con el valor de MaxCount
, generando un mensaje como “Progreso hasta 100: “, al que se le añade el formato de Text002Lbl
. Este mensaje ValueText
es el que finalmente se usa para abrir el diálogo con MyDialog.Open(ValueText, MyNext);
.
Segmento 2: Actualizando el Diálogo de Progreso
El procedimiento ProcessDialogUpdate
incrementa el valor de progreso y actualiza el diálogo:
procedure ProcessDialogUpdate()
begin
if not GuiAllowed then
exit;
MyNext := MyNext + 1;
MyDialog.Update();
end;
Este código verifica nuevamente GuiAllowed
para asegurarse de que el entorno permita mostrar gráficos y, si no es así, el procedimiento finaliza. MyNext
se incrementa en 1 cada vez que se llama a ProcessDialogUpdate
, simulando el avance del proceso y manteniendo al usuario informado del progreso en tiempo real mediante MyDialog.Update()
. Este procedimiento es particularmente útil en procesos largos o que requieren actualizaciones constantes, ya que permite al usuario observar visualmente que el sistema está avanzando.
Segmento 3: Cerrando el Diálogo
Una vez que el proceso finaliza, ProcessDialogClose
cierra el diálogo de progreso:
procedure ProcessDialogClose()
begin
if not GuiAllowed then
exit;
MyDialog.Close();
end;
Este procedimiento es sencillo y se limita a verificar si el entorno permite la interfaz gráfica antes de proceder. En caso afirmativo, el diálogo de progreso se cierra con MyDialog.Close()
, lo cual asegura una conclusión visual clara del proceso para el usuario, indicando que el procedimiento ha finalizado.
Segmento 4: Confirmación de Continuación
ConfirmContinue
permite al usuario confirmar si desea continuar con el proceso, mostrando un mensaje de confirmación:
procedure ConfirmContinue(NewTextConfirm: Text) ReturnValue: Boolean
var
ConfirmMgt: Codeunit "Confirm Management";
TextConfirm: Text;
Text001Qst: Label 'Do you want to continue?', Comment = 'ESP="¿Quieres continuar?"';
begin
TextConfirm := Text001Qst;
if NewTextConfirm <> '' then
TextConfirm := NewTextConfirm;
ReturnValue := ConfirmMgt.GetResponseOrDefault(TextConfirm, true);
end;
Este procedimiento emplea el codeunit “Confirm Management” (ConfirmMgt
) para manejar la confirmación del usuario. En él, TextConfirm
define el mensaje de confirmación que se mostrará; en caso de que NewTextConfirm
contenga texto, este reemplaza al valor predeterminado Text001Qst
con un mensaje personalizado. El método GetResponseOrDefault
muestra el mensaje de confirmación, devolviendo true
si el usuario acepta y false
si el usuario rechaza. Esto permite al sistema tomar decisiones basadas en la respuesta del usuario, lo cual es útil para situaciones donde se requiere la validación explícita antes de proceder.
Segmento 5: Notificación de Proceso Completado
Para finalizar el proceso y confirmar su finalización, se utiliza MessageCompleteProcess
para mostrar un mensaje al usuario:
procedure MessageCompleteProcess()
var
Text001Msg: Label 'The process has been completed', Comment = 'ESP="Se ha completado el proceso"';
begin
Message(Text001Msg);
end;
Este procedimiento simplemente utiliza Message
para mostrar "Se ha completado el proceso"
, indicando al usuario que el proceso ha concluido satisfactoriamente. Esta notificación de finalización asegura que el usuario esté al tanto de la conclusión del proceso y refuerza la comunicación visual dentro del sistema, aportando claridad en la interacción y mejorando la experiencia de usuario.
Variables Utilizadas
Además de los procedimientos, estas variables globales ayudan a controlar el estado del diálogo y el progreso:
var
MyDialog: Dialog;
MyNext: Integer;
MaxCount: Integer;
MyDialog
instancia el diálogo de progreso, MyNext
define el valor actual del progreso que se incrementa con cada actualización y MaxCount
define el valor máximo del progreso, establecido al inicio. Estas variables permiten que el diálogo refleje correctamente el estado del proceso y ofrezca un control visual del mismo en tiempo real.
Beneficios y Aplicaciones Prácticas
Implementar diálogos, confirmaciones y mensajes aporta varios beneficios, como mejorar la comunicación con el usuario al mostrar el progreso y confirmar acciones, evitando errores mediante el uso de confirmaciones y permitiendo una mayor flexibilidad al personalizar los mensajes en función del contexto del proceso. En entornos reales, estas herramientas son especialmente útiles para procesos largos en Business Central, como importaciones de datos o cálculos complejos, donde el usuario debe mantenerse informado y ver que el sistema está trabajando, lo cual mejora su confianza y experiencia.
Conclusión
En esta tercera entrega de la serie de utilidades para Business Central, exploro cómo gestionar diálogos, confirmaciones y mensajes, mejorando la experiencia del usuario mediante una comunicación visual efectiva y ofreciendo control sobre los procesos en tiempo real. Estas funcionalidades no solo facilitan la interacción, sino que también optimizan la comunicación dentro del sistema, aportando un toque profesional y visualmente claro para los usuarios.
Para seguir todos los posts de esta serie, puedes encontrarlos bajo la etiqueta #UtilsBc.
Si quieres ver el código completo, está en GitHub.
¡Espero que este post te haya sido útil!