Buscar en este blog

miércoles, 13 de noviembre de 2013

Leer Excel desde Ax 2012

Aqui les dejo unas líneas para copiar y pegar si necesitan leer un archivo de excel desde Ax 2012. Después de leer las líneas pueden darle el tratamiento que sea necesario, ya sea que guarden esos datos en alguna tabla o lo que sea que necesiten hacer.

El archivo de excel de muestra no lo dejo aquí, pero es un simple excel a 5 columnas donde los dos primeros campos los leo como strings y los otros 3 como double por ser cantidades.

Espero que les sea de ayuda.


static void grwReadExcel(Args _args)
{
    SysExcelApplication application;
    SysExcelWorkbooks workbooks;
    SysExcelWorkbook workbook;
    SysExcelWorksheets worksheets;
    SysExcelWorksheet worksheet;
    SysExcelCells cells;
    COMVariantType type;
    FilenameOpen filename;

    int row = 1; //si el excel tiene nombres de columnas
    str producto, descripcion;
    int cantidadRecibida, documentoBase, numeroArticulosTotales = 0, existenDiscrepancias = 0;
    real igi;
    ;

    filename  = "C:\\Users\\Desa\\Documents\\EJEMPLO.xlsx" ; // nombre de archivo
   
    application = SysExcelApplication::construct();
    workbooks = application.workbooks();

    try
    {
        workbooks.open(filename);
    }
    catch (Exception::Error)
    {
        throw error("No se encontro el archivo" );
    }
    workbook = workbooks.item( 1);
    worksheets = workbook.worksheets();
    //nombre de la hoja dentro del excel
    worksheet = worksheets.itemFromName( "EJEMPLO DE ARTICULOS");
    cells = worksheet.cells();

    //Iterando las celdas y sacando valores
    do
    {
        //Incrementando a la siguiente fila en el excel
        row++;

        producto = cells.item(row, 1).value().bStr();
        descripcion = cells.item(row, 2).value().bStr();
        cantidadRecibida = real2int(cells.item(row, 3).value().double());
        igi = cells.item(row, 4).value().double();
        documentoBase = real2int(cells.item(row, 5).value().double());
        
        info( strFmt("idproducto: %1, descr: %2, cant: %3, igi: %4, docBase: %5" , producto, descripcion, cantidadRecibida, igi, documentoBase));

         numeroArticulosTotales++;
      
        //Guardando el tipo de celda en una variable COMVariantType y validando si esta vacia o no
        type = cells.item(row+ 1, 1 ).value().variantType();

    }
    while (type != COMVariantType::VT_EMPTY);

        info( strFmt("numero de articulos: %1" , numeroArticulosTotales));

    //Cerrando la app de excel
    application.quit();
}

jueves, 21 de marzo de 2013

Modelos en Dynamics Ax 2012 (exportación e importación de modelos)



Lo nuevo en la versión 2012 de AX son los modelos, es "algo similar" a las capas que ya veniamos manejando en 2009, como dirian en mi pueblo "iguales pero no tan iguales". Finalmente es una agrupación lógica de objetos, con la diferencia a las capas que en este caso los modelos los gestionamos nosotros y podemos crear cuantos modelos queramos o necesitemos.

En esencia están pensados para cuando hay varios partners trabajando en una implementación o cuando existen desarrollos de distintos equipos que no tienen comunicación entre si (ya ven que nunca pasa eso porque los desarrolladores somos bien nice y le hablamos a todo el mundo y reutilizamos código y somos la pura buena onda).

Así que bueno, la gran ventaja de trabajar con modelos es que podemos meter todos los cambios en el modelo, exportarlos y luego importarlos a un nuevo ambiente, por ejemplo de pruebas a producción o como se dice a últimos tiempos, de pruebas a "go live".

Resumiendo, en AX 2012 podemos tener visualmente:
Algo importante antes de que sigas leyendo, cuando se importan los modelos se debe:
1. reiniciar el servicio
2. compilar y sincronizar
*** Este proceso va a tardar de 3 a 4 horas!!! si sigues leyendo toma en cuenta que esto en un ambiente productivo es poco práctico, a menos que quieras importar modelos a las 2 de la madrugada y compilar a esa hora para que los usuarios no sientan que AX esta lentísimo. Bajo advertencia no hay engaño.

Cómo crear o cambiar de modelos

En el ambiente de desarrollo, menu Herramientas -> Administración de modelos -> Crear modelo
Ponemos el nombre del modelo, el publicador, en este caso yo pongo el nombre de mi empresa, una descripción y un nombre corto, como se muestra en la siguiente imagen.
Ya que se creo, podemos cambiar al modelo de dos formas, como en la primera imagen y elegir la primera opción de cambiar modelo actual. Ó de otra forma al dar clic  en el nombre del modelo en la esquina inferior derecha
Para ver a cuál modelo pertenece cada objeto en Herramientas -> Opciones ->Desarrollo poner que se muestren todos los elementos como se muestra en seguida:
Y en el AOT, en todos los objetos veremos como en letras grises del lado derecho aparece el modelo al que pertenecen.

Ahora viene la verdadera utilidad, cómo exportar toooodo el modelo a otro ambiente



Exportar el modelo
Para exportar el modelo se debe abrir el cmd como administrador.

C:\Program Files\Microsoft Dynamics AX\60\ManagementUtilities> axutil export /model:"Logistica de transportes" /file:modeloSit.axmodel

El resultado:

El archivo con la exportación del modelo se guarda por default en: C:\Program Files\Microsoft Dynamics AX\60\ManagementUtilities\

Importar
Para la importación de igual forma se debe abrir el cmd como administrador. 
Para facilidad de importación copiamos el archivo .axmodel en la misma ruta del servidor que donde esta el axutil (C:\Program Files\Microsoft Dynamics AX\60\ManagementUtilities\).

El comando "/conflict:push" se usa para evitar los conflictos de que objetos se encuentren en distintos modelos.
Nota: El modelo no necesariamente debe existir en el nuevo ambiente al que vamos a importar.

C:\Program Files\Microsoft Dynamics AX\60\ManagementUtilities>axutil import /file:modeloSit.axmodel /conflict:push
*** Importante
Cuando se importan los modelos se debe:
1. reiniciar el servicio
2. compilar y sincronizar
*** Este proceso va a tardar de 3 a 4 horas!!!

Aquí una pequeña actualización, el usuario con el que vayan a importar el modelo, debe estar dado de alta como usuario de la base de datos Microsoft Dynamics Ax con los permisos de reader, writer y ddladmin y además en la base de datos MicrosoftDynamicsAx_model debe ser usuario owner. Ahí se los paso al costo porque me llevo como 3 horas darle al punto eh.


Y por cierto, acuerdate de darle click a algún anuncio si el post te sirvio de algo.

Por último, te invito a que te unas a la página de facebook recién creada para estar al día con las actualizaciones del blog y que podamos tener más comunicación. La meta? es hacer la comunidad de habla hispana mas grande sobre Dynamics Ax en cuestiones de desarrollo.



Usuario actual, nombre de usuario, moneda de la empresa Dynamics Ax 2012

Este post solo es de "datos varios", cómo conocer el usuario actual en Ax, el nombre del usuario, el dataAreaId, la moneda y ya.

El id de usuario: curUserId();

Para usar el nombre del usuario en un display:

display Name displayNameDownLab()
{
    UserInfo userInfo;
    ;
    select firstonly Name from userInfo where userInfo.id == curUserId();

    return(userInfo.name);
}

El dataAreaId: curext();

La moneda de la compañia: Ledger::findByLegalEntity(CompanyInfo::find().RecId).AccountingCurrency;

Espero que les sea de utilidad.

domingo, 25 de noviembre de 2012

Filtrar reportes en Dynamics Ax 2012 SSRS basado en query con un parámetro especifico


Muchas veces necesitamos filtrar los reportes por un parámetro especifico, algunas veces queremos que el usuario elija su propio filtro y otras veces queremos pasarle al reporte un parámetro por código. En este post, explico el primer escenario.

En este caso, voy a tomar como base el reporte que hicimos en el post pasado. Pero aplica igual a cualquier reporte realizado en base a un query.

Lo único que debemos hacer es dentro del query, en el datasource al que queramos aplicar el filtro, en la sección de "ranges" agregar un campo de la tabla (datasource) y listo!

En este caso, mi query anterior era para consultar todos los clientes, pero quiero que mi usuario elija sólo un cliente especifico, entonces voy agregar el campo al "Range" de mi datasource CustTable como se ve en la imagen.
Salvamos y compilamos. Para saber cómo se ve el filtro, abrimos el output de nuestro reporte (sino lo hemos creado, checar el final del post anterior). Al abrir el reporte, lo primero que aparece es el filtro que acabamos de crear:
Hacemos clic en el boton "Select" para darle un valor a nuestro filtro, aparece la ventana donde debemos poner el criterio, en este caso el "Customer account"
Clic en "ok", y despues en la ventana de filtro ya nos muestra el "criterio" bajo el cual vamos a filtrar nuestro reporte, clic en "ok" y listo! veremos ahora nuestro reporte:
En otro post veremos cómo se hace esto de pasar el parametro por código x++ usando clases.


Aquí te puedes descargar el proyecto de Ax: http://adf.ly/tTIrL

Y aquí la explicación en video ya disponible en YouTube: http://adf.ly/tTLXc


Por último, te invito a que te unas a la página de facebook recién creada para estar al día con las actualizaciones del blog y que podamos tener más comunicación. La meta? es hacer la comunidad de habla hispana mas grande sobre Dynamics Ax en cuestiones de desarrollo.


Y por cierto, acuerdate de darle click a algún anuncio si el post te sirvio de algo.


Reportes SQL Reporting services (SSRS) en Microsoft Dynamics Ax 2012


En este post vamos a ver lo básico de los reportes:
1. Verificar instalación
2. Editar reportes
3. Crear reportes (AutoDesing)

Antes de crear reportes SQL Reporting Services (SSRS) con Dynamics, lo primero es tener instalados los componentes de BI y Visual Studio Tools. Esto se realiza cuando se instala Ax como se muestra en la siguiente pantalla.
Para verificar que se instalaron correctamente los BI Componentes y el Visual Studio tool, y que el servidor de reporte esta correctamente configurado debemos ir a Herramientas -> Herramientas BI -> Servidores de reportes. Nos debe mostrar la siguiente pantalla:
Aquí debemos verificar que los valores estén llenos y que el nombre del servidor sea el de nuestra maquina.


Una vez hecho esto, cuando abramos el visual studio 2010 y creemos un nuevo proyecto, nos debe aparecer el tipo de proyecto: Microsoft Dynamics AX. No se necesita un tools adicional o librería adicional, simplemente con que hayamos hecho lo de los párrafos de arriba ya Visual Studio se integra con AX.

Editar reportes SSRS 

Lo primero que vamos a ver es cómo editar un reporte existente.
Vamos al AOT de Ax -> Visual Studio Projects -> Dynamics AX Model Projects. En este nodo vamos a encontrar soluciones de visual studio y proyectosque han sido desarrollados usando claro visual studio.

Para editar una solución de las que tenemos en el nodo de Dynamics AX Model, hacemos clic derecho en el que queramos modificar y seleccionamos "Editar". Esto abre el Visual Studio con esa solución y los reportes que contenga.

Después de hacer las modificaciones en el proyecto, guardamos, compilamos y  seleccionamos el proyecto en el explorador de solución, clic derecho sobre el proyecto,  seleccionamos la opción "Implementar" y esto agregará los cambios en Dynamics.

Si no se vieran reflejados, solo hacemos clic en "actualizar" y después en compilar el elemento en el AOT y listo.


Importante: Cuando estamos modificando un reporte en Visual Studio, debemos tener cuidado con la opción "Delete" del menú emergente cuando hacemos clic derecho sobre el reporte. Si hacemos clic en esta opción el reporte sera borrado el AOT de la capa actual donde el usuario este loggeado, si este reporte existe en capas mas bajas lo que pasara es que este reporte sera reestablecido a la capa previa. Ojo con esta opción, esa opción "Delete" NO solo es borrarlo del proyecto de visual studio. Para esto, mejor ocupen "Excluir del proyecto".


Crea reportes SSRS con Query

Para crear un reporte, abrimos Visual Studio 2010 y seleccionamos "nuevo proyecto", en el tipo seleccionamos "Microsoft Dynamics Ax" y en la plantilla seleccionamos "Report Model".
Los reportes necesitan una fuente de datos (datasource), esta puede ser de tres tipos:
- Query
- RDP (report data provider)
- Business logic

Cuando se usa un query como datasource para el reporte SSRS entonces el reporte es llamado "query based report".

Ahora, veamos cómo se hace un reporte basado en Query.

Antes que otra cosa, necesitamos un query creado. Para este ejemplo, vamos a mostrar todos los registros de la tabla CustTable, que es la tabla de clientes de Ax. 

Para crear el query, en el AOT, en la división de "query" hacemos clic derecho y seleccionamos "nuevo query", le ponemos nombre, en este caso "QueryEjemplo".

Arrastramos al DataSources del query la tabla CustTable. Con esto incluimos todos los campos de la CustTable al query. Y en la propiedad "Dynamic" de los campos lo cambiamos a "yes", esto es para que se agreguen al query todos los campos de la tabla CustTable.

Abrimos Visual Studio -> nuevo proyecto -> microsoft dynamics Ax -> Report Model. Con el nombre: PruebaReporteSSR

La solución del proyecto se verá así:
Esto solo nos da el tipo de solución, ahora necesitamos agregar un nuevo reporte, clic derecho sobre la solución y seleccionamos "agregar" y luego "nuevo reporte", le damos nombre y nuestra solución debe verse así:
Nota: Se pueden agregar cuantos reportes necesitemos, ya que cada reporte agregado en VS es un reporte en el AOT, así que pongamos nombres mas específicos que yo uso para el ejemplo.

Hacemos doble clic sobre el reporte creado y veremos los elementos del reporte del lado izquierdo.
Los elementos que se muestran son:
Datasets: Todos los campos disponibles en el query que podemos referenciar en el reporte.
Designs: El diseño mismo del reporte.
Images: Cualquier imagen que queramos mostrar en el reporte.
Data Methods: logica de negocio escrita en C#. Esto no es muy recomendado.
Parameters: Parametros que serán vistos en el reporte o para filtros de usuario para el reporte.

Ahora, necesitamos referenciar el query que creamos dentro del AOT de dynamics. Para esto, hacemos clic derecho en "DataSets" y "Add Dataset". Le podemos cambiar el nombre como queramos.

Y en las propiedades del DataSet creado, esta la propiedad "Query", hacemos clic ahi y nos aparece una ventana con todos los querys.
Hacemos clic en "Next" y seleccionamos lo que queramos mostrar en el reporte "All fields", "All Field Group", "All Display Methods". Podemos seleccionar todos los campos, un grupo de campos especifico y algunos metodos display.
Ahora viene lo bueno... el diseño!!!!!! En el nodo de Designs clic derecho "Add", existen dos opciones, "Auto Design" y "Precision Design", el primero es si solo quieres un reporte rápido, sin diseño personalizado.

Por el contrario, si quieres darle forma tu mism@ elegimos "Precision". Vamos a irnos PRIMERO por Auto Design y después por el tipo de Precision.

Como en todo lo anterior, podemos renombrarlo. Se recomienda que sea llamado "Report" o "Desing", yo le voy a poner ReporteAutoDesing.

Ahora arrastramos el query hacia nuestro diseño de reporte, en mi caso, hacia ReporteAutoDesing.
Con esta acción, indicamos que todos los campos del query se mostraran en nuestro reporte en el mismo orden que como aparecen en la tabla que se agrego a nuestro diseño al arrastrar el query.

Ahora veamos la vista previa, con click derecho sobre el diseño y "preview"
El reporte va a aparecer comos sigue:
Es recomendable por supuesto filtrar los datos para que la generación del reporte no sea muy tardada. Esta forma es muy sencilla pero como se puede ver es muuuuuy fea porque no tiene ningun diseño, en el reporte solo se escupen los datos sin ningun orden especifico.

Eso de ponerlo bonito lo veremos en el siguiente post. Finalmente, cómo enviarlo hacia Ax para poder usarlo? Sencillo:

1. Guarda todo
2. Compila la solución completa
3. Sobre la solución, clic derecho y "Add tuSolucion to AOT"
4. Igual sobre la solucón, clic derecho y "Deploy" o "Implementar"
5. Listo!!!! ya esta en el AOT para que lo uses
Y en Ax veriamos en al AOT:
Cómo ver el reporte en Ax?, una forma es desde el servidor de reportes, o sea http://localhost/Reports, otra forma es crear un Output con el reporte y visualizarlo y la última es llamarlo desde código con x++.

Después veremos cómo usar parametros y un diseño personalizado (PrecisionDesing) y no el automático que propone Ax.


Aquí te puedes descargar el proyecto de Ax: http://adf.ly/tTIrL

Y aquí la explicación en video ya disponible en YouTube: http://adf.ly/tTLXc



Por último, te invito a que te unas a la página de facebook recién creada para estar al día con las actualizaciones del blog y que podamos tener más comunicación. La meta? es hacer la comunidad de habla hispana mas grande sobre Dynamics Ax en cuestiones de desarrollo.

Y por cierto, acuerdate de darle click a algún anuncio si el post te sirvio de algo.





<<<<<     Indice de tutorial de Reportes SSRS....



Diferencia entre fechas Dynamics Ax 2012 con X++

Cómo sacar la diferencia entre dos fechas con X++?, sencillo, aquí les dejo un job para saber la diferencia en segundos, minutos, horas y días usando DateTimeUtil.


static void grwJobTest(Args _args)
{
    utcDateTime fecha1;
    utcDateTime fecha2;
    int64 diferencia;
    ;
    fecha1 = 2012-01-01T16:00:00;
    fecha2 = 2012-01-01T15:00:00;
   
    info( datetime2str(fecha1));
    info( datetime2str(fecha2));
   
    diferencia = DateTimeUtil::getDifference(fecha1, fecha2);
   
    info( strFmt("segundos: %1" ,diferencia));
    info( strFmt("minutos: %1" ,diferencia/60));
    info( strFmt("horas: %1" ,diferencia/(60* 60)));
    info( strFmt("dias: %1" ,diferencia/(60* 60*24 )));
}



Por último, te invito a que te unas a la página de facebook recién creada para estar al día con las actualizaciones del blog y que podamos tener más comunicación. La meta? es hacer la comunidad de habla hispana mas grande sobre Dynamics Ax en cuestiones de desarrollo.



sábado, 10 de noviembre de 2012

Elementos básicos para desarrollo en Dynamics Ax 2012

En este post, les voy a comentar los elementos básicos que usa Ax para el desarrollo. Lo primero es saber cómo entro al entorno de desarrollo, dentro de Ax en la parte superior derecha esta la opción de "Nuevo ambiente de desarrollo" como lo muestro en la siguiente imagen ó Ctrl + D ó Ctrl + Shift + W ó mediante ax32.exe desde la línea de comandos.
Y se abre el ambiente de desarrollo con el AOT integrado:
El AOT es una vista de árbol de todos los elementos de aplicación con los que cuenta Ax. Cada nodo contiene distintos tipos. Dentro del AOT podemos modificar elementos existentes, crear o desarrollar nuevos. Solo como un tip, este AOT soporta la funcionalidad drag and drop.

Además, en cada elemento del AOT es posible dar click derecho para conocer las distintas opciones que nos ofrece Ax. Algo importante cuando se desarrolla, es la opción "abrir en nueva ventana", por ejemplo en la creación de formularios es necesario arrastrar grupos de campos o campos únicos de alguna tabla, la funcionalidad "abrir en nueva ventana" nos ayuda a visualizar en una ventana solo la tabla con sus campos y en otra ventana un formulario donde quisiéramos arrastrar campos de la tabla.
Todos estos elementos pueden ser exportados como archivos .xpo, este el único tipo que Ax reconoce para importaciones dentro del AOT.

Elementos en el Data Dictionary
El primero nodo del AOT es el Data Dictionary, dentro tenemos varios elementos "base" que se usan para el desarrollo: Tablas, Mapas, Vistas, Datos extendidos, Enumeradores, Códigos de licencia, Llaves de configuración, Llaves de seguridad (que desapareceran en la próxima versión de Ax), Colecciones de tablas y Perspectivas.

Todos estos elementos los iré describiendo poco a poco. De momento empezamos con las tablas.

Todas las tablas guardarán datos de acuerdo con la compañía configurada de transacciones, inventario, libro mayor, diarios, etc.

Existen tablas de sistema y tablas de aplicación. Un ejemplo de las tablas de aplicación serían:
CustTable: Información básica de clientes
VendTable: Información básica de proveedores
InventTable: Catálogo general de inventario
PurchTable: Información de creación de ordenes de compra

Las tablas de sistema se diferencian de las de aplicación por el prefijo "Sys"
Estructura de tablas
Una tabla en Ax se diferencia de una tabla en SQL porque tiene múltiples elementos que la definen. Son siete categorías  Campos, Grupos de campos, Indices, Indices full text, Relaciones, Acciones de borrado y métodos. Todas las tablas de Ax sin excepción cuentan con la capacidad de tener elementos como los mencionados y se ven de la siguiente forma:
Campos
Lo primero son los campos. Esto es fácil, son las columnas que pertenecen a la tabla. Solo debemos tener cuidado en manipular estos campos, ya que cualquier creación, borrado o modificación de algún en el AOT se refleja directamente en la base de datos física. Y claro que cada campo es de cierto tipo ya sea entero, string, fecha, enumerador, etc.

Grupo de campos
El nombre lo dice todo, son grupos que vamos organizando de forma lógica para ser usados después es formularios y reportes con solo arrastrar el grupo y no campo por campo. Ojo: Cualquier modificación a un grupo de campos se verá reflejada en todos los lugares donde es usada. Buena práctica: Todos los campos mostrados en un formulario debe pertenecer a un grupo.

Indices
Básicamente sirven para acelerar las búsquedas. Cuando se crean también existen físicamente en la base de datos.

Indices full text
Sirven para tener indices pero no sobre campos específicos de una tabla, sino para tener cadenas de texto sobre campos. Esto eficienta búsquedas y las hace más rápidas.

Relaciones
Ax usa base de datos relacional, lo que significa que entre las tablas se crean relaciones entre sus datos.

Acciones de borrado
Son acciones que se crean en la tabla "padre" y que definen eventos que se llevaran a cabo al momento de enviar una instrucción de borrado. Existen cuatro tipos:
- None: Solo se borra la fila de la tabla padre sin ningun efecto secundario
- Cascade: La fila en la tabla es borrada y todos sus datos relacionados también son borrados. Esto nos asegura no dejar registros hijos sin padre.
- Restricted: Solo nos permite borrar la línea siempre y cuando no existan registros relacionados en la tabla especificada.
- Cascade + restricted: Se comporta igualito que el Restricted.

Métodos
Son funciones que se crean para datos de la tabla en especifico. Por ejemplo: datos para lookups (combos) de otras tablas basados en la información de nuestra tabla principal o manipulación de datos durante eventos específicos.

Herencia (Inheritance)
Una tabla puede extender de otra especificandolo en la propiedad "Extend". Esto significa que nuestra tabla hereda todos los campos, métodos y propiedades de la tabla que extiende. Pueden agregarse nuevos campos, métodos  etc, obvio lo nuevo no es visto por la tabla de la que se extendio.



Por último, te invito a que te unas a la página de facebook recién creada para estar al día con las actualizaciones del blog y que podamos tener más comunicación. La meta? es hacer la comunidad de habla hispana mas grande sobre Dynamics Ax en cuestiones de desarrollo.



<<-- Anterior - Introducción al desarrollo                                                            Siguiente - Modelos -->>





sábado, 20 de octubre de 2012

Introducción al ambiente de Desarrollo Dynamics Ax 2012


Poco a poco vamos entrando en materia. En este post, veamos el ambiente de desarrollo de Ax 2012.

Antes que nada, para poder desarrollar, programar, modificar o como sea que le llamen a esa tarea de tirar tecla, debo decirles que es necesario tener la licencia de desarrollo para Ax, de otra forma no se puede.

Ahora, la versión 2012 a diferencia de la 2009, presume de tener dos ambientes de desarrollo. El primero que es el de toda la vida MorphX IDE, que es propio de Ax y la forma rápida de entrar es presionando Ctrl + D. Y el otro ambiente es Visual Studio, así como lo leen.

Empezando, MorphX IDE nos ofrece la posibilidad de ver todos los objetos dentro de un Application Object Tree (AOT), esto va a ser su pan de cada día, el AOT. Dentro podemos ver Tablas, Datos extendidos, enumeradores, clases, formularios, menus y proyectos de visual studio, además de muchos elementos mas.



Nuestro ambiente de desarrollo cuenta con:
- X++ Editor de código, donde podemos programar
- Debugger, para trazabilidad de código
- Herramienta de ingeniería inversa, para visualizar clases en Ax creadas por UML
- Explorador de tablas, donde visualizamos campos, datos , relaciones, indices, etc de tablas.

Finalmente, para desarrollar, tenemos algunas opciones para "poner" nuestro código, estas opciones son las CAPAS o LAYERS de Ax. Este es punto importante, y aunque parece mucha paja es indispensable que conozcamos estas capas.

Cuántas capas son? 16 capas!!! si, son muchas, pero todas tienen su razón de ser, ya voy explicando.

Para qué sirven las capas? de modo rápido te diré que sirven para que no arruines con tu programación funcionalidad estándar de Ax. Esto es, que no puedes modificar las líneas que están en las capas mas bajas, puedes "cambiar" la forma en que se maneja la información en las capas superiores y Ax siempre hará caso a lo que se encuentre programado en la capa mas alta, pero siempre habrá un modo de regresar a lo que venia de fabrica.

Por qué no podemos programar en todas las capas? Por la simple razón de que cada capa esta destinada para algo (o algunos) y aunque tengas licencia para desarrollar solo podrás meterle mano a las últimas capas.

Es decir, existe un equipo de desarrollo de Ax directo de Microsoft, que tienen una primera versión de Ax (esta es la que se vende), esta versión estándar se encuentra en las 6 primeras capas. A estas capas no les puedes meter mano.

CapaDescripción
SYS, SYPCapa de sistema: La aplicación estándar es desarrollada en esta capa. Esto incluye el core y la configuración de la mayoría de los países.
GLS, GLPCapa de globalización: Incluye características desarrolladas para algunos países.
FPK, FPPCapa Feature Pack: Incluye paquetes de características de sectores industriales y son controlados por Microsoft.

Las siguientes 6 capas, solo están disponibles para poder desarrollar sobre ellas para partners e ISVs. Obvio, tampoco modificas estas capas (a menos que seas parte de algún partner)

CapaDescripción
SLN, SLPCapa de solución: Incluye soluciones de Microsoft avaladas por algún sector.
ISV, ISPCapa de proveedores de software independientes: Incluye verticales desarrolladas por ISVs.
VAR, VAPCapa de valor agregado de revendedores: Incluye personalizaciones desarrolladas por VAR's.

Las últimas 4 capas ahora si son las que puedes modificar, en las que puedes desarrollar funcionalidad nueva, etc. Estas últimas 4 capas están destinadas a partners y clientes obvio que tengan licencia de desarrollo.

CapaDescripción
CUS, CUPCapa de clientes: Incluye funcionalidad especifica del cliente.
USR, USPCapa de usuario: Incluye funcionalidad especifica y personalizaciones.

En el siguiente post, ahora si viene algo de acción para empezar a programar.

Lo olvidaba, todas las imágenes pertenecen a Microsoft.


Por último, te invito a que te unas a la página de facebook recién creada para estar al día con las actualizaciones del blog y que podamos tener más comunicación. La meta? es hacer la comunidad de habla hispana mas grande sobre Dynamics Ax en cuestiones de desarrollo.




<<-- Anterior - Niveles Ax                                                               Siguiente - Elementos básicos -->>