Cumulative Updates para NAV2013, NAV2013R2, NAV2015 y NAV2016

Como era de esperar al ser principios de mes…. actualizaciones para Dynamics NAV!!!! Se han publicado nuevas CUs para las versiones de NAV 2013 , NAV 2013R2, NAV 2015 y la segunda de NAV 2016

Cumulative Update 33 for Microsoft Dynamics NAV 2013 (Build 43894).
Cumulative Update 26 for Microsoft Dynamics NAV 2013 R2 (Build 43896)
Cumulative Update 14 for Microsoft Dynamics NAV 2015 (Build 43887)
Cumulative Update 2 for Microsoft Dynamics NAV 2016 (Build 43897)

Saludos :)

Idiomas en ClickOnce de Dynamics NAV 2016 de Azure

El otro día haciendo una implantación del ClickOnce de NAV2016 en Azure hemos detectado que sólo se cargaban el idioma por defecto en el ClickOnce, dejando de lado todos los packs de idiomas que tengas instalados en el sistema. Recodando implantaciones anteriores de NAV2015 en Azure nunca se había detectado ese problema, con lo cual me ha dado la pista de que el error estaba en algun tipo de modificación realizada en los cmdlets que proporciona la plantilla de la máquina de NAV en Azure.

Revisando el script de los despliegues de NAV2015 nos dimos cuenta que en el fichero HelperFunctions.ps1 de la instalación de ClickOnce en la función Copy-ClientFilesToApplicationFilesDirectory copiaba toda la carpeta del cliente de NAV y después eliminaba los ficheros que no necesitaba. Sin embargo, en la misma función de los entornos de NAV2016 lo que hace es ir copiando archivo a archivo… con lo cual, si tenemos carpetas adicionales (como por ejemplo el idioma) no las copiará si no modificamos el escript.

Conclusión: Si tenemos que realizar un despliegue de ClickOnce en AZURE de NAV2016 que tenga más idiomas que el inglés, lo que deberemos de hacer es añadir en la función Copy-ClientFilesToApplicationFilesDirectory las carpetas del idioma, por ejemplo, para el idioma español deberemos de añadir la siguiente línea al final de la función

Copy-Item “$WinClientDirectory\es-ES” -Destination “$ClickOnceApplicationFilesDirectory\es-ES” -Recurse

 

Saludos :)

 

Cumulative Updates para NAV2013, NAV2013R2, NAV2015 y NAV2016

Administration Tool de NAV2016 y NAV2015 funcionando al mismo tiempo

Si eres como yo y no te has podido resistir a instalar la nueva versión de Dynamics NAV seguramente has podido comprobar que la instalación de NAV2016 convive perfectamente con su predecesora, NAV2015, en el mismo equipo. De echo, la nueva versión en el menú de inicio se llama Dynamics NAV 2016 mientras que la anterior era Microsoft Dynamics NAV 2015.

Sin embargo, hay un pequeño detalle que todavía no han solucionado: El Administration Tool de las instancias no funciona. Si intentas gestionar tus instancias de la versión 2015 no podrás, dado que el complemento de la MMC se sobrescribe y te dará un error de este tipo:

administration-tool-de-nav2016-y-nav2015-al-mismo-tiempo-1

Esto es algo bastante engorroso, sobretodo si trabajamos con varias bases de datos en diferentes versiones. Ahora no podremos crear nuevas instancias desde la consola para la versión 2015 y lo tendremos que hacer desde PowerShell. A priori no hay ningún problema, pero, ¿Podemos recuperar el Administration Tool de NAV2015? La respuesta es SI :)

Os voy explicar primero que es lo que pasa cuando instalas NAV2016 sobre NAV2015. Básicamente, la herramienta que Microsoft nos implanta para la administración de los servicios es un complemento de la MMC (snap-in). Estos complementos se guardan como una clave en el registro de windows en la ruta HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MMC\SnapIns.

Por otra parte, el archivo que se encuentra en el directorio donde está instalado el cliente de NAV Microsoft Dynamics NAV Server.msc es básicamente un archivo XML que ejecuta la MMC y le indica que complemento (snap-ip) debe de cargar.

Usando esta información somos capaces de identificar que snap-ip está ejecutando y poder revisar que es lo que tiene esa clave en el registro. Si abrimos con cualquier editor de texto el archivo Microsoft Dynamics NAV Server.msc observaremos en su estructura de XML que hay ciertos nodos que hacen referencia a Snapin y le asigna un valor. Por ejemplo:

administration-tool-de-nav2016-y-nav2015-al-mismo-tiempo-2

Si ejecutamos el editor de registro de Windows (regedit) y nos vamos a la ruta HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MMC\SnapIns podremos ver que efectivamente existe una clave que se denomina “FX:{ba484c42-ed9a-4bc1-925f-23e64e686fce}”. Si accedemos a sus atributos podremos ver como asigna ciertos valores haciendo referencia a la instalación de NAV2016 dejando totalmente la versión previamente instalada.

Una vez explicado cual es el problema, os voy a explicar como hacer para volver tener los dos complementos funcionando al mismo tiempo.

1.- Abrimos el editor de registro de Windows (regedit) y en la ruta HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MMC\SnapIns exportamos la clave FX:{ba484c42-ed9a-4bc1-925f-23e64e686fce}

2.- Abrimos con un editor de texto el fichero exportado y realizamos las siguientes operaciones:
Reemplazamos la cadena C:\\Program Files (x86)\\Microsoft Dynamics NAV\\90 por C:\\Program Files (x86)\\Microsoft Dynamics NAV\\80 en todos los sitios donde aparezca en el fichero.
Buscamos la cadena Microsoft.Dynamics.Nav.ManagementUI, Version=9.0.0.0 y la reemplazamos por Microsoft.Dynamics.Nav.ManagementUI, Version=8.0.0.0
Por último cambiamos todos los valores de la cadena A484C42-ED9A-4bc1-925F-23E64E686FCE por A484C41-ED9A-4bc1-925F-23E64E686FCE (sólo cambia el 8 carácter)

3.- Guardamos los cambios anteriores e importamos el fichero modificado en el registro (haciendo doble click en el).

4.- Ejecutamos nuestro editor de texto como administrador y editamos el archivo C:\Program Files (x86)\Microsoft Dynamics NAV\80\RoleTailored Client\Microsoft Dynamics NAV Server.msc

5.- En todos los sitios donde ponga la cadena BA484C42-ED9A-4bc1-925F-23E64E686FCE la reemplazamos por BA484C41-ED9A-4bc1-925F-23E64E686FCE (es el mismo GUID que aplicamos en el paso 2).

6.- Guardamos el archivo y lo cerramos.

Y ya está! A partir de ahora ya tenemos la consola de administración de los servicios de las dos versiones conviviendo al mismo tiempo :)

NAV 2016: Autentificación de SQL Server

Continuamos con las novedades de la nueva versión de Dynamics NAV.

Revisando la consola de administración de los servicios de NAV 2016 podemos ver que en la parte de la derecha han añadido una nueva opción denominada “Database credentials”. Pero bien, ¿Para que sirve?

Como muchos sabréis, hasta la versión NAV 2015 el usuario que comunica el servicio con el motor de la base de datos en SQL debería de ser un usuario del dominio (Autentificación de Windows). Pues bien, en la nueva versión ya disponemos de la opción para poder “conectar” ambos servicios mediante autentificación de SQL.

La autentificación de Windows tiene el inconveniente de que se debe de crear un usuario específico para esto en el Active Directory. No se aconseja reutilizar el de ningún usuario dado que si este cambia la contraseña, se deshabilita o se elimina la cuenta el servicio de Dynamics NAV dejará de funcionar. Yo hasta la versión NAV2015 lo que hago es crear un usuario propio para esto, sin directivas de contraseña, para así garantizarme el funcionamiento del servicio sin que nadie modifique ningún criterio del usuario.

¿Como conectamos la instancia de NAV mediante Autentifiación de SQL Server?

Pues bien, para realizar esto deberemos de seguir tres pasos básicos:

  1. Crear e importar la Key de encriptación.
  2. Configurar el SQL Server
  3. Configurar el Servicio de NAV (Microsoft Dynamics NAV Server)

Crear e importar la key de encriptación

Lo primero que tenemos que tener claro es que los entornos multitenant no se configuran igual que los entornos que no lo son. Pero si bien es cierto, la forma de crear la key es la misma.

Cuando usamos la autentificación de SQL Server, Microsoft Dynamics NAV necesita una clave para encriptar las credenciales (nombre de usuario y contraseña) con la que el servicio de NAV se conecta con la base de datos en SQL Server. Esta clave se deberá de importar en el sistema en el que se encuentra instalado el servicio de NAV. En los entornos multitenant, la clave se importará en el equipo de la base de datos.

Para crear la clave de encriptación usaremos la Administration Shell de Dynamics NAV 2016. En ella encotnraremos el comando New-NAVEncryptionkey. Con esto crearemos nuestro fichero .key

New-NAVEncryptionKey [-KeyPath] <String> [-Force] [-Password <SecureString> ] [-Confirm] [-WhatIf] [ <CommonParameters>]

Ejemplo:

novedades_nav2016_autentificacion_sql_server_1

Esto nos ha generado en la ruta c:\Temp el fichero ClaveTest.key

El siguiente paso es instalar la clave en el equipo donde se encuentra el servicio. Para ello usaremos el comando Import-NAVEncryptionkey

novedades_nav2016_autentificacion_sql_server_2

Con esto ya tendremos nuestra clave instalada. En el caso de que ya exista una en el sistema podremos forzar la instalación con el parámetro -force.

Para más info: Gestión de claves para autentificación de SQL Server

Configurar el SQL Server

La configuración de SQL Server es bastante sencilla si estas familiarizado con el Magnament Studio. En caso de no estarlo, te aquí podrás consultar el proceso mucho más detallado: Configure SQL Authentification on the Database

Básicamente lo que tenemos que hacer es crear un nuevo inicio de sesión (o usar, si queréis, uno existente) dentro del SQL. Los pasos a seguir son:

  1. Configurar la instancia del SQL para que permita un modo de autentificación mixta (Windows y SQL Server). Esto lo podemos hacer desde las propiedades de la instancia en el SQL Management Studio en la pestaña de Seguridad. Ahí marcaremos la opción de “Modo de autentificación de Windows y SQL Server”. Más info: Change Server Authentication Mode
  2. Ahora desde Seguridad, crearemos un nuevo Inicio de sesión. En este punto deberemos de indicarle que la autentifación del usuario es SQL Server. Le daremos un nombre de inicio y una contraseña. Más info: Create a login
  3. Asignaremos nuestro nuevo inicio de sesión a la base de datos de Dynamics NaV con el rol de db_owner.

Configurar el Servicio de NAV (Microsoft Dynamics NAV Server)

Ahora ya sólo nos falta configurar el servicio para que se conecte con la nueva autentificación. Aquí deberemos tener en cuenta, que no es lo mismo los entornos que son multitenant que los que no. Yo lo he hecho en un entorno que no lo es, si necestáis hacerlo para una configuración multitenant encontraréis toda la info aquí: Configure SQL Server Authentication on Microsoft NAV Server Instance

Abrimos la consola de administración de Microsoft Dynamics NAV Server y nos iremos a la acción de “Database credentials” (a la derecha del panel). En esta acción pusaremos el botón “Edit” para que se habilite la edición y cambiaremos el campo Database Authentication Type a SQL Authentication.
En el campo Database User Name configuraremos el nombre del usuario de nuestro inicio de sesión que hemos creado y en el campo Password su contraseña.
Ahora haremos click en el bóton “Save” y aceptaremos el diálogo que nos avisa de que hasta que reiniciemos el servicio los cambios no tendrán efecto.

Ahora reiniciaremos el servicio y ya tendremos nuestra instancia autentificada por el método SQL Server :)

Try-Catch en Dynamics NAV 2016

Por fin! La nueva versión de Dynamics NAV no deja de sorprendernos! De esta vez os traigo una nueva funcionalidad que seguramente muchos lleváis esperando tiempo: La posibilidad de un Try-Catch en las funciones!

¿Como funciona?

Pues bien, a la hora de definir cualquier función en C/AL de NAV2016 si accedemos a las propiedades de la función tenemos disponible el nuevo atributo denominado TryFunction. Su valor por defecto es NO, asique para que nuestra función tenga un Try-Catch bastará con cambiarlo a YES.

try-catch_en_dynamics_nav_2016_1

Ahora podremos anidar nuestra función dentro de la comprobación de un IF y tener controlados nuestras funciones. Todo hay que decir, que hasta las versiones actuales lo que se hacia era declarar este tipo de funciones en una codeunit aparte. Con esta nueva propiedad, no hará falta :)

Un ejemplo:

Forzamos que nuestra función Try-Catch de un error intencionado. Dentro del Run() de la codeunit ejecutamos la función dentro de un IF. Como está el error intencionado, entrará por el ELSE. Si no tuviéramos eso, la aplicación devolvería el ERROR sin poder controlarlo.

try-catch_en_dynamics_nav_2016_2

Y en su ejecución queda así:

try-catch_en_dynamics_nav_2016_3

 

Saludos :)

Novedades NAV2016: Campo Timestamp en las tablas

Continuamos con las novedades en NAV2016… y las que quedan! :)

Si lleváis tiempo trabajando con NAV por un motivo o por otro seguramente tuvierais que hacer algo desde SQL en su base de datos. Uno de los campos que tienen todas las tablas es el “Timestamp”, no es clave de la tabla y tampoco es accesible desde DynamicsNAV. Pero ¿Que es el campo Timestamp?

Pues este campo no deja de ser un estándar en el mundo de las BBDD:

Una marca temporal, conocida también como registro de tiempo, sello de tiempo o timestamp, es una secuencia de caracteres que denotan la hora y fecha (o alguna de ellas) en la/s que ocurrió determinado evento. Esta información suele presentarse en un formato consistente, lo que permite la fácil comparación entre dos diferentes registros y el seguimiento de avances en el tiempo; la práctica de grabar marcas temporales de forma consistente a lo largo de la información actual se llama timestamping. Las marcas generalmente se utilizan en el seguimiento de eventos; a cada evento se le asigna una marca temporal. En los sistemas de archivos, la marca temporal puede hacer referencia a la hora y fecha de creación, acceso o modificación de un archivo determinado.

Básicamente, guarda la cantidad de milisegundos que han pasado desde el 1 de Enero de 1970 hasta el momento de la inserción.

Pues bien, ¿Para que lo usa NAV el campo Timestamp?

Según la documentación de Microsoft, el campo Timestamp es usado para controlar la sincronización de los cambios en las tablas con la base de datos de SQL y el cliente de roles.

Hasta NAV 2016 nosotros no podíamos sacar este campo en los formularios, ni tener acceso a el mediante código. Ahora en la nueva versión podremos incluso filtrar por este valor.

¿Cómo añadimos el campo Timestamp?

Lo primero que hay que indicar es que este valor lo deberemos de sacar en un campo nuevo personalizado. Ya que no es posible mostrarlo en un campo del estándar. Deberemos de crear un nuevo campo de tipo biginteger y en las propiedades del campo establecer la nueva propiedad SQL Timestamp a Yes.

novedades_nav2016_campo_timestamp_1

Importante! Aunque si vamos a poder leer y filtrar por este campo no lo vamos a poder modificar. 

Saludos :)

Novedades NAV2016: Code Coverage

Seguimos con la novedades que incluye la nueva versión de NAV. Si habéis trabajado en versiones viejas de Microsoft Dynamics NAV seguramente te acuerdes de una herramienta llamada “Code Coverage”. Esta herramienta nos ha facilitado la vida a muchos en diversas ocasiones, sobretodo para optimizaciones de procesos o para localizar inserciones o modificaciones en procesos muy largos.

Sin embargo, Microsoft decidió eliminar esta herramienta alegando que muchos de los programadores no le daban uso. Para sustituirlo implementó la herramienta Profile Application Code pero creo que nunca ha llegado al nivel que tenía Code Coverage ni por asomo.

En Dynamics NAV 2016, Microsoft decide volver a incluir Code Coverage y además con nuevas opciones. Para ejecutarlo lo encontramos en Departamentos/Administración/Herramientas de aplicación o en el buscador como “Cobertura de código”

nav_2016_code_coverage_1

En el momento que necesitemos tener una traza de las acciones que realiza una funcionalidad en NAV basta con apretar el botón Iniciar.

nav_2016_code_coverage_2

Esto nos mostrará la lista de todos los objetos que se han usado durante el proceso. Si expandimos cada uno de ellos llegaremos a ver el código que se ha ejecutado.

Espero que os sirva de utilidad :)

 

Saludos,

Novedades NAV2016: Entorno de desarrollo y editor de código

Parece ser que de esta vez Microsoft se ha acordado de los que trabajamos a diario tirando líneas de código en NAV. Esta nueva versión trae cambios realmente eficaces y notables que nos van hacer la vida mucho más fácil!. Sigo sin asimilar porque no se han incluido hasta el momento.

01.- Cambios visuales en el editor de código
Visualmente es el cambio que salta a primera vista. Para empezar nos han añadido la numeración de las líneas en el margen izquierdo. También nos han cambiado los colores de las funciones variables, palabras clave, etc. aunque esto realmente ya me gustaba el de la versión de NAV2015. Un nuevo look mucho más moderno :)

entorno_desarrollo_nav2016_1

02.- Autocompletado para los atributos de las variables (Intellisense)
Por fin!! No se como han tardado tanto en añadir esto que en Visual Studio lleva desde hace años!! Ahora a la hora de acceder a un campo de una variable de tipo “Record” (por ejemplo) al escribir el punto nos propondrá en autocompletado el nombre del campo que queremos añadir.

entorno_desarrollo_nav2016_2

03.- Opción deshacer!!!!!
Si!! Ya podemos deshacer varios cambios en el editor de código con la opción deshacer (Ctrl+Z). A ver como le explicamos al resto de la humanidad que esto es nuevo!

04.- Diseño de la tabla desde el editor de código
Esto no para! Parece que por fin nos han puesto las cosas fáciles! En el editor de código si dejamos el cursor del ratón encima de una variable “Record” nos mostrará la estructura de la tabla, con el nombre de sus campos, tipo y longitudes.

entorno_desarrollo_nav2016_3

05.- Ver las modificaciones que se han guardado
Otra de las novedades es que en el editor de código al modificar una linea nos la marcará en color amarillo. Si guardamos los cambios cambiará su color a verde. Con estro podremos localizar rápidamente las líneas que hemos modificado y los cambios que hemos hecho.

entorno_desarrollo_nav2016_4
A la izquierda son las líneas en amarillo que hemos cambiado y una vez guardado los cambios nos aparecerán en verde.

06.- Shortcut Keys
Ahora podemos acceder a la declaración de las variables con unas teclas de acceso mucho más cómodas.
C/AL Code: F9 (como hasta ahora)
C/AL Global Variables: Ctrl + G
C/AL Local Variables: Ctrl + L

Seguiré publicando más novedades sobre Dynamics NAV 2016

Saludos,