MorphX y X++

MorphX es un entorno de desarrollo integrado de Microsoft Dynamics AX que permite a desarrolladores y usuarios diseñas gráficamente tipos de datos, enumerados, tablas, queries, formularios, menues, e informes. MorphX soporta la tecnología "drag and drop" y es muy intuitivo lo que facilita a usuarios finales el crear sus propios informes y consultas.

Ya que MorphX utiliza referenciación a los objetos, un cambio en un tipo de datos se ve reflejado automáticamente en toda la aplicación.

Microsoft Dynamics AX ofrece un control de versiones (VCS) integrado con el IDE permitiendo la colaboración en el desarrollo.

X++ es en sí mismo el lenguaje que está por detrás de MorphX y su sintaxis es muy parecia a lenguagjes como C++ o JAVA.

Mientras de MorphX no nos permite llevar a cabo cualquier tarea (aunque casi) X++ nos permite plasmar en la aplicación cualquier requerimiento.

Ejemplos de código

X++ integra su propia sintaxis SQL para hacer consultas a BBDD. A continuación podremos ver tres ejemplos equivalentes. El primero tiene un mejor rendimiento y está realizado en X++ puro, los ejemplos segundo y tercer son menos eficientes y utilizan objetos de la aplicación aunque son igual de válidos.

Ejemplo #1

/// Este procedimiento es un ejemplo X++ /// 
public static void Ejemplo2Xpp(Args _args)
{
	UserInfo userInfo;
	;
	forupdate_recordset userInfo
	setting enable = NoYes::No
	where userInfo.id != 'Admin'&& userInfo.enable;
} 

Ejemplo #2

/// Este procedimiento es un ejemplo X++ ///
public static void Ejemplo2Xpp(Args _args)
{
	UserInfo userInfo;
	;
        ttsbegin;
        while select forupdate userInfo
        where userInfo.id != 'Admin' &&
              userInfo.enable
	{
		userInfo.enable = NoYes::No;
                userInfo.update();
        }
	ttscommit;
} 

Ejemplo #3

/// Este procedimiento es un ejemplo X++ ///
public static void Ejemplo3Xpp(Args _args)
{
	UserInfo userInfo;
	;
        select forupdate userInfo
        where userInfo.id != 'Admin' &&
        userInfo.enable;
	
	ttsbegin;
	while (userInfo)
        {
	userInfo.enable = NoYes::No;
        userInfo.update();
        next userInfo;
        }
	ttscommit;
}