AX7 - 2/3 Datos primitivos

Para poder probar los ejemplos que presentaremos a continuación nos crearemos un proyecto nuevo y agregaremos una runnable class.

A continuación veremos los tipos primitivos con unos ejemplos.

- Anytype: Nos permite asignarle cualquier valor a la variable .


class Test
{
     static void main(Args   args)
    {
        AnyType     value;
   
        value = 1;  //Asignamos un entero
   
        info(strFmt("%1" , value));

        value = "Test"//Asignamos un texto

        info(strFmt("%1" , value));

        value = 3.25//Asignamos un valor numérico con decimales

        info(strFmt("%1" , value));

        value = [10, "Test"]; //Asignamos un container

        info(strFmt("%1 - %2" , conPeek(value, 1), conPeek(value, 2)));
    }

}


Si ejecutamos la clase nos mostrará algo similar a lo que se ve en la imagen.




Si os da un error al ejecutar el job, revisar este post.


- Boolean: A este tipo de variable se le podrá asignar un valor del tipo verdadero o falso.


class Test
{
    static void main(Args   args)
    {
        Boolean isValid = true;
   
        if (isValid)
        {
            info("Es válido.");
        }
        else
        {
            warning("No es válido.");
        }
    }

}




Probad a cambiar el true por un false para ver que sucede.

También aceptará como válido lo siguiente:

Boolean isValid = 1;

y no es válido:

Boolean isValid = 0;

Cualquier cosa que pueda ser interpretada como un booleano, AX lo convertirá en un booleano..

Boolean isValid = 1 + 1 == 2 ;

o lo siguiente:




- Date: Se utilizará para almacenar fechas.

class Test
{
    static void main(Args   args)
    {
        date    d   = mkDate(1,1,2016);
        date    d1 = systemDateGet();

        info(strFmt("d: %1", d));
        info(strFmt("d1: %1", d1));
        info(strFmt("Diff: %1", d1 - d));
    }

}


Como os imagináis mkdate es una función que nos construirá una fecha con 3 valores: día, mes y año.
La función systemDateGet nos devolverá la fecha actual del sistema.





- Enums: Los enums son un tipo de dato que podemos encontrar en la aplicación.

Para este ejemplo seleccionaremos el enumerado NoYesCombo, el cuál, tiene definidos dos valores:


Al utilizarlo se nos desplegarán los posibles valores de éste.


Si queréis más información podéis revisar estos post sobre los enumerados en AX2012 y AX7.


class Test
{    
    public static void main(Args _args)
    {      
        NoYesCombo      ret = NoYesCombo::Yes;

        if (ret == NoYesCombo::Yes)
        {
            info ("Has seleccionado sí.");
        }
    }

}


- GUIDs: Un GUID es un identificador único global.

class Test
{    
    public static void main(Args _args)
    {  
        str    guidstr = Winapi::createGUID(); //Versiones anteriores
        guid guidLocal;

        info(guidstr);

        guidLocal = str2Guid(guidstr);

        info (strFmt("%1", guidLocal));

        guidLocal =  newGuid();  //.net
     
        info(guid2Str(guidLocal));
    }
}


Como podemos ver, en el código mediante la función createGUID de la clase winapi, nos crea un GUID que será un cadena de texto, posteriormente, convertimos ese string a un GUID.
También tenemos la posibilidad de utilizar la función newGuid().





- Int: Almacenan valores numéricos enteros.


class Test
{
    static void main(Args   args)
    {
        int     value = 10;
   
        info(strFmt("%1" , value));

        int     value2 = 5;

        info(strFmt("%1" , value + value2));

        int     total = value + value2;

        info(strFmt("Resultado %1 + %2: %3" , value, value2, total));
        info(strFmt("Resultado %1 - %2: %3" , value, value2, value - value2));
        info(strFmt("Resultado %1 * %2: %3" , value, value2, value * value2));
        info(strFmt("Resultado %1 / %2: %3" , value, value2, value / value2));
    }

}




- Int64: la diferencia con int es que tienen la capacidad de almacenar 64 bytes.

32 bits = 232 = 4294967296 valores diferentes. 
64 bis  = 264 = 18446744073709551616 valores diferentes.

Los valores anteriores son sólo positivos, en caso de utilizar negativos, la cantidad se divide entre positivos y negativos.







Si vemos el resultado en la imagen le hemos asignado a un entero un valor muy alto del cual sólo podrá almacenar 2147483647 (ya que Ax utiliza valores positivos y negativos), al sumarle 1 unidad en un int64 (variable total), vemos como ha superado esa capacidad.


- Real: Tiene la capacidad de almacenar números con decimales.

class Test
{    
    public static void main(Args _args)
    {  
        real    num = 12.3456;

        info (strFmt("%1", num));
    }

}


Aunque el valor de la variable num será de 12.3456, en la imagen sólo se imprimen dos decimales. Esto es por la manera en la que he realizado la impresión por pantalla con la función strFmt, ya que esta lo convierte a dos decimales.




- Strings: Se utilizan para almacenar carácteres o cadenas de texto.

class Test
{    
    public static void main(Args _args)
    {  
        Str    literal = "Texto que se mostrará por pantalla";

        info (literal);
    }
}


- TimeOfDay: Se utiliza para almacenar tiempo(horas).


class Test
{    
    public static void main(Args _args)
    {  
        TimeOfDay   time = 60; //Representa 60 segundos

        info (time2StrHMS(time));

        time = 90;

        info (time2StrHMS(time));
    }


}


La función info siempre requiere que se le pase un string, así que utilizamos la función time2StrHMS (Existen otras funciones para representar el tiempo); lo que nos devolverá el número que le hemos pasado a time.






- utcdatetime: Este tipo de variable es capaz de almacenar un fecha y hora.


class Test
{      
    public static void main(Args _args)
    {  
        utcdatetime   transdate = DateTimeUtil::newDateTime(systemDateGet(), timeNow());

        info (strfmt("%1", transdate));
    }
}


Si recordáis que nos devolvía la función systemDateGet, os podréis imaginar que devuelve la función timeNow.




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

Comentarios