Cómo solicitar datos al usuario en Navision (sin la instrucción INPUT)

En este artículo, se presenta una solución alternativa para solicitar datos al usuario durante la ejecución de un programa en Navision, especialmente en versiones anteriores a 2009 donde la instrucción INPUT quedó obsoleta. Se explica detalladamente cómo crear una página personalizada con un campo de texto editable, y se proporciona el código completo en AL para implementar esta funcionalidad. Además, se incluyen ejemplos de uso y se resalta la utilidad de esta técnica en escenarios donde se requiere personalizar el comportamiento del programa según los requisitos del usuario o solicitar información adicional durante la ejecución. El artículo está dirigido a programadores de Navision que buscan alternativas prácticas y eficientes para interactuar con el usuario de manera dinámica.

¡Hola a todos los amigos programadores de Navision! Hoy os traigo un truco que seguro os será de gran utilidad, especialmente si trabajáis con versiones superiores a 2009.

Como bien sabemos, una de las limitaciones de las últimas versiones de Navision es la falta de la instrucción INPUT, que nos permitía solicitar datos al usuario durante la ejecución del programa. Esta funcionalidad era muy útil en ciertos escenarios, pero lamentablemente quedó obsoleta.

Sin embargo, no todo está perdido. Existe una solución elegante y eficiente para reemplazar esa funcionalidad, y hoy os la voy a mostrar en detalle.

Así que ¡Vamos manos a la obra! 😎

La idea principal es crear una página (Page) que simule el comportamiento de un cuadro de diálogo. En esta página, incluiremos un campo de texto (Field) donde el usuario podrá ingresar la información requerida. Luego, recuperaremos ese valor y lo utilizaremos en nuestro código según sea necesario.

Veamos cómo se implementa paso a paso:

  1. Creamos una nueva Page y le agregamos una variable global de tipo texto (TextValue).
  2. Añadimos esa variable como un Field editable en la Page.
  3. Creamos tres funciones:
  • SetTitle: para establecer un título opcional en la Page.
  • SetText: para establecer el texto de instrucciones y un valor predeterminado en el Field.
  • GetText: para recuperar el valor ingresado por el usuario.

Aquí os dejo el código completo para que lo podáis analizar con calma:

OBJECT Page 62000 Dialog INPUT Sencillo
{
  OBJECT-PROPERTIES
  {
    Date=19/01/22;
    Time=[ 8:58:07];
    Modified=Yes;
    Version List=UTILS;
  }
  PROPERTIES
  {
    CaptionML=[ENU=Insert the required data;
               ESP=Insertar el dato requerido];
    PageType=StandardDialog;
  }
  CONTROLS
  {
    { 1000000154;0;Container;
                ContainerType=ContentArea }

    { 1000000153;1;Field  ;
                SourceExpr=Title;
                Visible=booTitle;
                Editable=False;
                Style=StrongAccent;
                StyleExpr=TRUE }

    { 1000000151;1;Group  ;
                GroupType=Group }

    { 1000000150;2;Group  ;
                GroupType=GridLayout;
                Layout=Rows }

    { 1000000149;3;Group  ;
                GroupType=Group }

    { 1000000148;4;Field  ;
                ExtendedDatatype=None;
                SourceExpr=Caption;
                Editable=FALSE;
                MultiLine=Yes;
                Style=Strong;
                StyleExpr=true }

    { 1000000147;4;Group  ;
                GroupType=Group }

    { 1000000157;5;Field  ;
                SourceExpr=TextValue }

  }
  CODE
  {
    VAR
      Title@1000000162 : Text;
      Caption@1000000159 : Text;
      TextValue@1000000000 : Text;
      booTitle@1000000001 : Boolean;

    PROCEDURE SetTitle@1000000008(Titulo@1100225000 : Text);
    BEGIN
      booTitle := TRUE;
      Title := Titulo;
    END;

    PROCEDURE SetText@1000000001(Titulo@1100225000 : Text;DefaultValue@1000000001 : Text);
    BEGIN
      TextValue := DefaultValue;
      Caption := Titulo;
    END;

    PROCEDURE GetText@1000000005() : Text;
    BEGIN
      EXIT(TextValue);
    END;

    BEGIN
    {
      #Creado por Esteve Sanpons Carballares.
      #https://github.com/Esanpons
      #Se da acceso libre a modificar y utilizar este objeto libremente. Siempre y cuando se haga referencia al autor.
    }
    END.
  }
}

Como podéis ver, el código es bastante sencillo y fácil de entender. La clave está en la creación de esta Page personalizada que nos permite simular el cuadro de diálogo.

Ahora, para utilizar esta funcionalidad en nuestro código, simplemente tenemos que crear una instancia de la Page, establecer el texto de instrucciones y el valor predeterminado (si lo deseamos), ejecutar la Page y recuperar el valor ingresado por el usuario.

Por ejemplo:

var
    DialogPage: Page "Dialog INPUT Sencillo";
    UserInput: Text;
begin
    DialogPage.SetText('Ingrese un valor:', ''); // Establecemos el texto de instrucciones y un valor predeterminado vacío
    if DialogPage.RunModal() = Action::OK then // Ejecutamos la Page y esperamos la respuesta del usuario
        UserInput := DialogPage.GetText(); // Recuperamos el valor ingresado por el usuario

De esta manera, podremos solicitar cualquier tipo de dato al usuario de forma dinámica y utilizarlo en nuestro programa según sea necesario.

Esta solución puede ser especialmente útil en situaciones donde necesitamos personalizar el comportamiento de nuestro programa en función de los requisitos específicos del usuario o cuando debemos solicitar información adicional durante la ejecución.

Recuerda que este es solo un ejemplo básico, pero puedes expandirlo y personalizarlo según tus necesidades. Por ejemplo, podrías agregar validaciones adicionales, diferentes tipos de campos, múltiples líneas de texto, etc.

Os adjunto el código por si lo queréis probar esta en el GitHub

Espero que esta explicación te haya resultado clara y útil. Si tienes alguna duda o sugerencia, no dudes en comentarla. ¡Estaré encantado de ayudarte y seguir aprendiendo juntos!

Un abrazo a todas y ¡Hasta la próxima!

Share your love

Leave a Reply

Your email address will not be published. Required fields are marked *