martes, 26 de julio de 2011

Saber en qué instancia de Dynamics AX (Axapta) estás

Comienzo mi andadura en este blog con un pequeño "truco" para Microsoft Dynamics AX.
Normalmente se suele tener más de una instancia de AX:
- Una que llamamos "producción" donde los usuarios trabajan, donde están todos los datos reales de nuestro ERP
- Y luego una o más instancias para el equipo de desarrolladores. Yo recomiendo dos: una donde se hacen los desarrollos que podríamos llamar "desarrollo" y otra que sea una copia exacta de "producción" donde probar los desarrollos una vez están terminados, esta copia exacta la llamamos "test".

La idea es sencilla, desarrollamos en la instancia de "desarrollo", cuando está acabado probamos en "test" con una copia de los datos y configuración reales, y si todo va bien ya subimos los cambios a "producción".

Sin embargo, es posible que nuestro desarrollo contenga partes que, por lógica de negocio, NO deban ejecutarse en "test" con datos reales. Por ejemplo, imaginemos que estamos desarrollando un proceso relacionado con clientes que al terminar manda un email a cada cliente implicado en dicho proceso.

En "desarrollo" no hay problema porque podemos modificar los datos a nuestro antojo, por tanto, le cambiamos el email a nuestros clientes por uno que sea del equipo de desarrollo y andando.
Pero en "test" los datos son los reales, y debemos probarlo con datos reales, así que... ¿qué hacemos?

Pues muy sencillo, necesitamos algo que nos diga en qué instancia de AX estamos. Para ello podemos crearnos un método estático que llamaremos "enProduccion()" en una clase que llamaremos "Utiles", que nos devolverá si estamos en la instancia de producción o no. Con esa información actuaremos en consecuencia, en nuestro ejemplo de los clientes podemos mandar el correo electrónico a un email de nuestra propiedad y NO al email del cliente.

Veamos el código del método enProducción de la clase Utiles:



Como vemos hacemos una llamada a SqlSystem::databaseBackendDesc() para que nos devuelva el nombre del servidor de BBDD, la instancia de la base de datos y el nombre de la base de datos.

Si no sabemos todos estos datos para sustituir la cadena "SERVIDORBBDD\\INSTANCIABBDD - nombre_de_bbdd", podemos hacer un job en producción y luego copiamos y pegamos:




Lo que nos devuelva este job lo copiamos y pegamos en nuestro método "enProduccion" para sustituir a la cadena "SERVIDORBBDD\\INSTANCIABBDD - nombre_de_bbdd".


Y por tanto en nuestro código podríamos utilizar este método estático antes de hacer algo que NO deberíamos hacer en un entorno de pruebas, como por ejemplo mandar un email a un cliente REAL:




Y eso es todo, espero que os sea útil.
¡¡¡Hasta pronto!!!