Porque es un rollo 😫 instalar una extensión para un cliente y tener que recordar todas las configuraciones que necesitaba ese modulo para que despegar 🚀 de manera controlada y sin reventar. Y si desarrollas producto y quieres subirlo a 🔼 Microsoft APP Source pues esta parte no sobra para nada.
Recuerda que tienes todo el código que voy mencionando en el siguiente repositorio:
1- Contexto funcional:
Seguimos extendiendo la extensión de cuentas estadísticas, esta vez los requisitos de nuestra funcionalidad son los siguientes:
- La página de configuración asistida (wizard 🧙♂️ para los amigos) deberá de poder ser lanzada 🪟 tanto desde el administrador de extensiones como desde configuración asistida (Assisted Setup).
- El Wizard deberá de contener ,como poco, una sección de bienvenida👋, otra con los campos de las configuraciones ⚙️ a definir y una ultima que permita la revisión 🧐 completa de la configuración sin permitir editar.
- El Wizard permitirá la navegación entre secciones con botones back👈 y next 👉 y finish 🤝.
- Si la configuración se abandona a mitad sin verificar con finish no debemos de guardar los cambios ❌💾.
- Si la configuración se completa, al pulsar Finish guardaremos los cambios y marcaremos el check de completado del registro de la página de configuración asistida✅💾.
2- Contexto técnico:
Estamos extendiendo la extensión de Microsoft “Statistical Accounts”, para ello hemos declarado en el archivo app.json nuestra dependencia.
Si quieres saber como puedes verlo en el articulo anterior:
3- Desarrollo:
Vamos a hacer lo siguiente:
- Crear una página de tipo "NavigatePage" cuyo record de origen será nuestra tabla de configuración, que definiremos como temporal ()
- En esta nueva página gestionaremos la navegación a traves de la propiedad visible en cada grupo, usando las acciones que colocaremos en la sección inferior actualizaremos la visibilidad de cada grupo (que el usuario percibira como una nueva pagina de la configuración).
- En esta nueva página gestionaremos la creación del registro temporal cuando se abre la página, avisaremos al usuario si intenta cerrar sin completarla que sus cambios no se guardaran y, si el usuario finaliza la configuración haremos commit de la tabla temporal y almacenaremos esa configuración ademas de que marcaremos el check de completado del registro de la configuración asistida.
- Crearemos una Codeunit para que la página estandar de configuración asistida contenga un registro con nuestro wizard así como un aceso a documentación adicional para leer o ver en video con links externos.
Antes de todo, se lo que estas pensando "Fer, esto se me va a hacer mas largo que un día programando en el blog de notas 🤧"...no os preocupéis que viene nuestro amigo Waldo al rescate! 🦸
- Nos instalamos la extensión de Waldo waldo's CRS AL Language Extension - Visual Studio Marketplace y ya que estamos le invitamos a un cafe, que con el tiempo que nos va a ahorrar se lo merece 😍.
- Creamos un objeto de AL y usamos el snippet tpagewizard3stepswaldo ...y 🪄vas a flipar de ver como de la nada ya tenemos una estructura que cuesta mucho picarsela (todos los errores en rojo toca cambiar y poner nuestra tabla de configración y acordaros de renombrar cosas, no seamos cutres que ya hemos ahorrado mucho tiempo 😉).
Ahora vamos a darle algo de cariño y explicar el código para que sepamos como funciona nuestro wizard:
El Layout contiene los grupos y subgrupos que mostramos, el grupo SetupWIPBanner Muestra la imagen de configuración que mostramos en todo el proceso salvo en el ultimo paso.
Puedes ser simpatico y poner emoticonos pero lo que aconsejo es que en cada paso pueda ver el usuario cuanto le queda para acabar, queremos evitar que se desespere 😱. No necesitas una superbarra de progreso molona, con ajustar los captions de grupos nos vale 😉 Caption = 'Attachments Settings 📎(Step 1/3)';.
Cada grupo controla su navegación con la propiedad Visible = StepXXVisible;y las variables las actualizamos con las acciones de navegación.
Las acciones de navegación nos aparecen en la parte inferior por haber declarado InFooterBar = true; las acciones gestionan navegación con los siguientes procedimientos
local procedure NextStep(Backwards: Boolean)
local procedure EnableControls() //Si necesitas mas grupos incluyelos aqui para navegar
local procedure SetControlsStepXX()//Tantos como pasos
local procedure FinishAction()
Los triggers trigger OnOpenPage() y trigger OnQueryClosePage(CloseAction: Action): Boolean
nos permiten controlar que pasa al abrir la página y al intentar cerrarla.
En el OnOpenPage inicializamos el record temporal, activamos los controles y cargamos el banner.
trigger OnOpenPage()
begin
InitStatisticalAccountSetup();
EnableControls();
LoadSetupBanner();
end;
En el OnQueryClosePage, si el proceso de configuración ha acabado (FinishedProcess = true) entonces lo guardamos y actualizamos el check de completado de la configuración asistida. En caso de que intentemos cerrar la página sin acabarlo (FinishedProcess = false) nos pedirá confirmación de si realmente queremos salir avisandonos que no se guardaran los cambios.
trigger OnQueryClosePage(CloseAction: Action): Boolean
var
ExitDeleteTxt: Label 'The changes will be lost☠️. Do you want to exit?🙁💔';
begin
if FinishedProcess then begin
CommitStatisticalAccountSetup();
GuidedExperience.CompleteAssistedSetup(ObjectType::Page, Page::"BCS StaT. Acc.Setup Wizard");
end else
if GuiAllowed and not (Confirm(ExitDeleteTxt)) then
Error('')
end;
Crearemos además una Codeunit en la que nos suscribiremos al evento OnRegisterAssistedSetup de la Codeunit estandard "Guided Experience" puedes buscarlo usando AL Explorer y copiarlo usando el boton de subscribe 😉
Usando AssistedSetup.InsertAssistedSetup estamos incorporando nuestra configuración assistida a la lista en la categoria que nos interese incorporando además link a webs y videos externos.
4- Funcionalidad:
Ahora podemos definir la configuración de cuentas estadísticas a traves de la configuración asistida y del administrador de extensiones.
Nuestro Wizard debería de ser util y amigable para una configuración rápida del modulo.
Y la ultima parte nos permitirá ver toda la configuración sin editar, en caso de querer reajustar algo podrán usar back.
Una vez completada la configuración, se actualizará el check de completada en la página de configuración asistida.
5- Conclusión:
Esta funcionalidad puede es una tontada en cuanto a la complejidad ⚙️ de lo que debemos programar y ayuda mucho en los despliegues de producción, por esto mismo debería de ser parte de nuestras buenas practicas😇 incluirlo en nuestras extensiones.
Espero que este articulo te haya servido para pilotar un poco mejor este tema ,saber como crearlo rápidamente gracias a Waldo, y hacer la vida del que instala tu extensión en producción un poco menos traumática 🫶
Remember: Talk is cheap, show me the code!