Fechas en inglés en WebServices

Quizás habéis visto que las fechas que son devueltas por un WebService de NAV en formato texto y que han sido convertidas a través de FORMAT(fecha) vienen en el formato MM/DD/YYYY en vez de DD/MM/YYYY.

La solución es muy sencilla: Abrid el cliente de roles utilizando el mismo usuario que utiliza vuestro WebService. Una vez dentro poned el idioma a español y salid. Con esto, se modificará un registro en la tabla 2000000073 (User personalization) donde queda guardado el idioma que utiliza el usuario. Después de esto, hay que reiniciar el servicio NAV Business Web Services.

Si después de esto, todavía sigue sin aparecer correctamente, hay que verificar que en la carpeta C:Program Files (xxx)Microsoft Dynamics NAV60Service no sólo tenemos el idioma ENU. Para instalar más idiomas, hay que buscar en el DVD de NAV la ruta InstallersESServer y ejecutar el instalador. Por último, como no, hay que volver a reiniciar el servicio.

ACTUALIZACIÓN: No recomiendo reiniciar los servicios de NAV. Es mejor parar los dos servicios de tercera capa y volver a arrancarlos.

El log de cambios (Parte 2)

En la primera entrega de este “especial” log de cambios conocimos la funcionalidad del log de cambios, como podemos activarla y cómo podemos configurarla para monitorizar los cambios que se producen en cualquier registro.

En esta segunda entrega, nos vamos a centrar en cómo funciona el log de cambios de forma interna. Conociendo cómo funciona, podremos tener la base para desarrollar funcionalidades que afecten a toda la aplicación como gestiones de aprobaciones de cambios, alertas, sincronización con otros sistemas, etc.

Si vemos la codeunit 423 (Change Log Management) vemos que hay una función un tanto curiosa. La función GetTableTriggerMask devuelve un valor entero en función de la configuración de monitorización que tengamos en log de cambios. El entero se incrementa en 1 si se controlan las inserciones, 10 si se controlan las modificaciones y 4 si se controlan las eliminaciones. Si no se hace ningún tipo de control el valor del entero se queda en 0 (cero). Si pensamos en todas las combinaciones posibles, no hay ninguna combinación que repita una valor entero igual:

Inserción Modificación Eliminación Total
I+M+E 1 10 4 15
I+M 1 10   11 
I+E 1   4
I 1     1
M+E   10 4 14
M   10   10
E     4 4
(nada)       0

OK, todo esto está muy bien pero ¿para que sirve este número?
A nosotros no nos sirve para nada, pero NAV incorpora en su codeunit 1 una función que le dice a NAV si debe disparar 3 eventos especiales. En la codeunit 1 existe la función GetGlobalTriggerMask que precisamente llama a la función que acabamos de ver. Lo que hace esta función es devolverle al sistema que tiene que hacer (devolviendo el valor de la tabla que hemos visto antes).

De acuerdo, supongamos que tenemos una tabla en la que controlamos todo. Esta función devolverá a NAV el valor 15. ¿que hace ahora NAV?. Internamente llama a las funciones (también de la codeunit 1) OnGlobalInsert, OnGlobalModify, OnGlobalDelete y OnGlobalRename.

Estas funciones se ejecutan con el parámetro de la referencia del registro, que podemos recoger y usar a nuestro antojo. En el caso del log de cambios, estas funciones vuelven a llamar a la codeunit 423 que se encarga de guardar los posibles cambios que ha sufrido el registro.

Item… producto!

Si os pregunto que me traduzcáis “Item” al español, os vendrá rápido rápido “Producto”. Pues eso es lo que le debió passar al traductor de NAV en españa hace ya unos cuantos años. Seguramente, harto de ver como la palabra Item se repetía por todo el excel de traducciones que tenía que hacer pensó que reemplazar “Item” por “Producto” iba a ser la idea del año.

Lástima que “Item” puede significar varias cosas… no hay más que ver el “Navigation Pane Designer”:

English:

Spanish:

PD: Ya que para no herir la sensibilidad de nadie han cambiado Country code por Country/region code en tooooodo NAV, podrían haber hecho lo propio con esto.

Actualización 06/11/2012: Tampoco tiene desperdicio la traducción que se hace del formulario 670. En inglés tenemos Job Queue Setup que se utiliza para programar trabajos. Pues por lo visto, a alguien se le ha ido la mano con el Reemplazar todo y en ESP vemos que se llama Configuración cola proyecto. Si tuvieras que adivinar para que sirve, con la traducción no lo acertarías nunca…

Debbugging

A veces, leer sobre temas que damos por sentados nos puede dar algunas sorpresas. En este artículo Mark Brummel se hace un repaso de las opciones que tiene el debbugger de NAV. A priori parece que no vayamos a aprender nada nuevo pero en mi me ha aportado:

  • Conocer para la diferencia entre el punto rojo y el círculo rojo:
    Uno es un breakpoint “normal” y el otro es un breakpoint anulado (pero no borrado). Lo podremos volver a activar después pero no olvidaremos dónde lo habíamos colocado.
  • Hacer un roll-back:
    No sé porqué no me había dado cuenta de que existía esa opción. Quizás ya me había acostumbrado a poner un error al final de un proceso que quería que terminara por no tener que volver a replicar todo el escenario que reproduce el error.

Echarle un vistazo son sólo 5 minutos y creo que vale la pena.

El log de cambios (Parte 1)

En NAV existe ya desde hace unas cuantas versiones un sistema para el control de cambios que hacen los usuarios. El administrador puede, de una forma más o menos sencilla configurar las acciones (insertar, editar y eliminar) y los campos de las tablas que quiere monitorizar.

En este post voy a tratar el log de cambios desde el punto de vista funcional mostrando como se configura y como se guarda el log de los datos que se han modificado.

Lo primero que tenemos que hacer al utilizar el log de cambios es saber si lo tenemos configurado en licencia y lo siguiente es activarlo. En la pantalla de configuración del log de cambios existe una única opción que sirve para activar el log:

Ahora ya podemos pasar a configurar las tablas que queremos monitorizar. En la parte inferior de la anterior pantalla tenemos el acceso a esta pantalla:

En esta pantalla podremos ver todas las tablas que existan en la base de datos. Tan sólo hay que indicar si queremos monitorizar todos los campos o algunos de ellos dentro de las columnas de inserción, modificación y eliminación. Si nos decantamos por decidir monitorizar sólamente algunos de ellos tendremos que indicar cuáles. Para ello pulsaremos sobre el assist button dentro de la celda correspondiente y accederemos a una pantalla que muestra todos los campos de la tabla. Fijaos que los campos de tipo flowfield no aparecen pues propiamente no cambian por órden del usuario sino que son cambiados a través de otras tablas:

En este ejemplo he decidido que quiero establecer un control sobre algunos campos de la tabla términos de pago ya que últimamente alguien se está dedicando a cambiar algunos valores y quiero averiguar quien es.

Lo siguiente que voy a hacer es comprobar que mi configuración es correcta, así que cierro NAV, vuelvo a entrar y modifico algunos valores de unos de los registros de la tabla. El resultado es el siguiente:

Como podemos ver, en el último registro ha quedado guardado el cambio que he hecho, pero, no solo eso, también puedo ver como los cambios que he hecho en la propia configuración del log de cambios también queda guardada de forma que la misma persona que está modificando los términos de pago intenta modificar la configuración del log de cambios, también quedará registrado independientemente de que yo haya configurado la propia tabla de log de cambio para que esté dentro del grupo de tablas monitorizadas.

En el siguiente post veremos cómo está estructurada la funcionalidad y que puntos del programa intervienen dentro de su funcionamiento.