AX7 - 3/3 Datos compuestos

Arrays: Es un tipo de variable que puede almacenar distintos valores pero siempre del mismo tipo.


class Test
{      
    public static void main(Args _args)
    {  
        Array  array = new Array (Types::String);

        array.value(1, "Posición 1");
        array.value(2, "Posición 2");

        info (strfmt("%1", array.value(1)));
        info (strfmt("%1", array.value(2)));
    }
}





Para inicializar un array, lo haremos cómo con las clases, con un new; y le indicaremos que tipo de elementos tendrá la array; esto lo haremos con la ayuda del enumerado Types.

Array  array = new Array (Types::String);

Posteriormente, con el método array.value, le indicaremos la posición del elemento en la array y el valor para esa posición.

array.value(1, "Posición 1");

en caso de no indicarle un elemento, esta misma función nos devolverá el valor almacenado en la posición.


array.value(1)


Containers: Estos son un tipo de elementos parecido a una array; en éste iremos almacenando los elementos que deseamos indicándole la posición. A diferencia de una array, un container puede contener distintos tipos de elementos incluso un container puede contener otro container.



class Test
{      
    public static void main(Args _args)
    {  
        Container   con = [1, "Posición 2", 3];

        con = conIns(con, 4, 12.33);

        for (int x = 1; x <= 4; x++)
        {
            info(strFmt("%1", conPeek(con , x)));
        }
    }
}

Inicializaremos el container con tres valores distintos: 2 enteros y un texto, sólo lo he hecho para que veáis cómo se pueden insertar elementos a un container sin ningún tipo de función.

    Container   con = [1, "Posición 2", 3]; 


La función conIns nos permitirá añadir un elemento al container, como se ve en la imagen, esta función nos pide el container con el que vamos a trabajar, la posición donde irá el elemento y por supuesto el valor para este elemento.



La función conpeek nos devuelve el valor de un elemento; sólo deberemos indicarle el container con el que vamos a trabajar y la posición del elemento que queremos recuperar.

conPeek(con , x)


Aquí el resultado del ejemplo anterior:


Podéis encontrar más información sobre las funciones disponibles para manipular el container en la siguiente url.

Classes: Las clases también son un tipo de variables de tipo compuestos. En el siguiente ejemplo tenemos una demostración de cómo utilizamos la clase test inicializándola para luego llamar al método printMessage.

class Test
{        
    void printMessage()
    {
        info("Message");
    }
    public static void main(Args _args)
    {    
        Test    test = new Test();   

         test.printMessage();
    }
}

Delegates: En este mismo blog ya se ha hablado de los delegates, si queréis más información presionar aquí.


Tables: Las tabla también puede ser declaradas como variables.

class Test
{
    public static void main(Args _args)
    {
        CustTable   custTable;

        select firstonly crosscompany custTable;

        info(custTable.AccountNum); 
    }
}


¿Desconocéis que realiza el siguiente código?

select firstonly crosscompany custTable;

Simplemente realiza una búsqueda en la base de datos recuperando el primer cliente que encuentre en la primera empresa con datos.

Con la siguiente sentencia buscamos el cliente en la empresa en qué estamos trabajando actualmente:

select firstonly custTable;

Añadiendo la palabra reservada crosscompany conseguiremos que la consulta se realice en todas las empresas disponibles en la aplicación.

Problemas con el campo AccountNum o la tabla custTable..revisa este post.

Este post forma parte de los siguientes: menú  X++.

Comentarios