Trabajar con identificadores, sintaxis y variables

Completado

Para poder trabajar con variables y funciones, primero tiene que aprender algunos conceptos importantes. Los identificadores, la sintaxis y las variables son conceptos fundamentales de AL y otros lenguajes de programación.

Un identificador es el nombre de un elemento de programación, mientras que una variable es la ubicación de la memoria donde se almacenan los datos. Puede usar un identificador para dar un nombre a su variable para poder usarla.

Sintaxis describe las reglas gramaticales para usar estos identificadores. La sintaxis de los identificadores se determina en función del lenguaje de la aplicación y algunas prácticas recomendadas.

Existen algunas reglas gramaticales para usar identificadores. Dentro de un objeto, todos los identificadores tienen que ser únicos. Por lo tanto, dentro de un objeto, no puede declarar dos variables con el mismo identificador (o nombre).

Cuando defina una variable mediante un identificador, es preferible que el primer carácter sea un guion bajo o una letra. Cuando utilice un carácter especial o un espacio en el identificador, debe poner el identificador entre comillas dobles.

Aunque el lenguaje de la aplicación no distinga entre mayúsculas y minúsculas, no diferencia entre letras mayúsculas y minúsculas en los identificadores. Recomendamos que cree identificadores con PascalCase. PascalCase significa que comienza el nombre de la variable con una letra mayúscula. Si su nombre es una combinación de dos palabras, la segunda palabra también comienza con una letra mayúscula. Por ejemplo, si tiene una variable para almacenar el nombre de un cliente, puede usar CustomerName, que es un ejemplo de notación en PascalCase.

Para poder trabajar con variables, primero tiene que declararlas, lo que significa que las variables deben:

  • Tener un identificador.

  • Tener un ámbito.

  • Tener un tipo de datos.

  • Haberse inicializado.

La variable también debe tener un ámbito que defina dónde puede obtener acceso a la variable y usarla.

Una variable se puede definir con un ámbito global o local. Si define el ámbito de la variable como global, la variable estará disponible en cualquier punto del objeto. Por lo tanto, en cada desencadenador, en cualquier lugar donde desee escribir declaraciones de código, tendrá esa variable disponible. Cuando el ámbito sea local, solo podrá obtener acceso a esa variable en el desencadenador específico del procedimiento donde se declaró.

Ejemplo de variables de ámbito global y local.

En el ejemplo anterior, se declara la variable Counter con un ámbito global y se puede usar en todos los desencadenadores y funciones de la tabla MyTable. La variable CustomerName se define en el desencadenador OnInsert; por lo tanto, tiene un ámbito local. La variable solo se puede usar en este desencadenador y no se puede llamar desde otro desencadenador. Es posible que sea más fácil definir todas las variables con un ámbito global, pero, en ese caso, dicha variable se podrá usar en todos los desencadenadores. Esto hace que se pueda cambiar la variable en todos los desencadenadores, lo que a su vez puede llevar a resultados no deseados o insospechados. En consecuencia, cuando declare variables, piense en la definición del ámbito y luego elija correctamente.

También existen variables definidas por el sistema que el mismo sistema define y mantiene automáticamente, y cuyo ámbito también lo define el sistema. Las variables Rec y xRec son ejemplos de variables definidas por el sistema. Rec da acceso al registro actual y xRec da acceso al registro anterior (por ejemplo, antes de que se produjese una actualización).

Una variable siempre tiene un determinado tipo de datos. Puede tratarse de un número entero, texto, un código, una fecha, una opción, etc. Cuando se crea una variable en la memoria, se inicializa, lo que significa que la variable obtiene un valor inicial predeterminado antes de que se le asigne un valor. Este valor predeterminado depende del tipo de datos de la variable.

En las variables con un tipo de datos numérico, se usará un valor de cero para inicializarla. Las variables de String se inicializarán con una cadena vacía. Una variable booleana tiene un valor predeterminado de false.

Hasta hace poco, cada variable tenía que declararse en su propia línea. En objetos más grandes, esto llevó a páginas de declaraciones de variables, incluso si la mayoría de ellas eran del mismo tipo.

Para reducir el desplazamiento, mejorar la legibilidad y facilitar la visualización y declaración de tipos relacionados, ahora es posible agregar múltiples declaraciones de variables del mismo tipo en una línea singular.

Declare múltiples variables del mismo tipo en la misma línea, usando una coma para separar los nombres de las variables.

Por ejemplo:


var
        myInt, nextInt, thirdInt : Integer;
        isValid, doCheck : Boolean;

Variables protegidas

La palabra clave protegida se puede usar para hacer que las variables sean accesibles entre tablas y extensiones de tabla y entre páginas y extensiones de página.

Si quiere exponer solo algunas variables como protegidas, debe crear dos secciones de declaraciones var. Vea la sintaxis siguiente.


protected var
        myInt: Integer; // protected var

var
        myLocalInt: Integer; // local var

En el siguiente ejemplo se ilustra cómo declarar y usar una variable protegida.


page 50100 MyPage
{
    SourceTable = Customer;
    PageType = Card;

    layout
    {
        area(Content)
        {
            group(General)
            {
                field(Name; Name)
                {
                    ApplicationArea = All;
                }
            }
            group(Advanced)
            {
                Visible = ShowBalance;

                field(Balance; Balance)
                {
                    ApplicationArea = All;
                }
            }
        }
    }

    protected var
        [InDataSet]
        ShowBalance: Boolean;
}

pageextension 50101 MyPageExt extends MyPage
{
    layout
    {
        addlast(Content)
        {
            group(MoreBalance)
            {
                Visible = ShowBalance; // ShowBalance from MyPage

                field("Balance (LCY)"; "Balance (LCY)")
                {
                    ApplicationArea = All;
                }
            }
        }

    }

    actions
    {
        addlast(Navigation)
        {
            action(ToggleBalance)
            {
                ApplicationArea = All;
                trigger OnAction()
                begin
                    ShowBalance := not ShowBalance; // Toggle ShowBalance from MyPage.
                end;
            }
        }
    }
}

Directrices para colocar el código AL

Recomendamos las siguientes directrices para el código AL:

  • En general, escriba el código en codeunits en lugar de hacerlo en el objeto en el que opera. Esto fomenta un diseño limpio y proporciona la capacidad de volver a usar el código. También ayuda a reforzar la seguridad. Por ejemplo, los usuarios no suelen tener acceso directo a las tablas que contienen datos confidenciales, como, por ejemplo, la tabla Movimiento de contabilidad, ni tienen permiso para modificar objetos.

  • Si coloca el código que opera en la contabilidad en una codeunit, le permite a la codeunit acceder a la tabla y permite al usuario ejecutar la codeunit, la seguridad de la tabla no se verá afectada y el usuario podrá tener acceso a la tabla.

  • Si debe colocar código en un objeto en lugar de hacerlo en una codeunit, coloque el código lo más cerca posible del objeto en el que opera. Por ejemplo, coloque código que modifique los registros en los desencadenadores de los campos de la tabla.

Reutilización de código

Volver a usar el código acelera y facilita el desarrollo de aplicaciones. Más importante aún, si organiza su código AL según lo sugerido, las aplicaciones serán menos propensas a errores. Al centralizar el código, no creará incoherencias de forma involuntaria al realizar el mismo cálculo en muchos lugares, por ejemplo, en varios desencadenadores que tienen el mismo campo de tabla como expresión de origen. Si tiene que cambiar el código, puede olvidarse de algunos de estos desencadenadores o cometer un error al modificar uno de ellos.