sergisoft.com
1may/120

Galerías de imágenes para NAV

Cuando tengáis que añadir nuevos botones a RTC, es útil que tengáis a mano estas chuletas para conocer todas las imágenes predefinidas que trae el cliente de roles. Ambas imágenes se han extraído de msdn de microsoft:

http://msdn.microsoft.com/en-us/library/dd568709.aspx

http://msdn.microsoft.com/en-us/library/dd568728.aspx

26abr/120

Pasar de XMLDocument a BigText y viceversa

Después de bastante tiempo utilizando mis propias funciones para hacer la conversión de BigText a XML y de XML a BigText, he descubierto que ya estaban hechas de forma estándar en NAV.  Para copiar y reutilizar estas funciones simplemente hay que editar la Codeunit 8701 - Mobile Document Management:

Como consuelo me queda el ver que lo que yo había pensado se parece bastante a lo que habían pensado los MS Redmond Guys.

13feb/120

Cómo crear y colocar charts en tus pages

Con la llegada de la versión de roles de NAV, tenemos a nuestra disposición la posibilidad de incluir gráficos a las pages que vayamos creando. La principal duda que se nos plantea a la hora de hacer nuestro primer chart es saber cómo se crean.

En Administración > Configuración de la aplicación > Cliente adaptado a roles > Gráficos hay un formulario preparado para crear nuevos charts:

Desde esta pantalla podemos crear nuevos charts, pero vemos que no hay una forma fácil de diseñarlos. Únicamente disponemos de una opción para importar su estructura definida en un fichero XML. Hay varias páginas y artículos que hablan sobre la estructura que tienen que tener estos ficheros, pero creo que lo mejor es utilizar la herramienta Chart Generation Tool, crear un chart sencillo y después ver el XML que se genera.

Esta herramienta está disponible para su descarga en:
http://blogs.msdn.com/b/nav/archive/2011/06/03/chart-generator-tool-for-rtc-cgtrtc.aspx

Su uso es muy sencillo. Una vez importados los objetos, buscaremos el formulario 72004 - Chart Generator Card. En este caso vamos a suponer que queremos mostrar un gráfico en el listado de clientes que muestre el número de clientes activos que hay en cada país:

Lo primero que vamos a hacer es rellenar una nueva ficha con los siguientes datos: 

En la pantalla de filtros indicaremos que únicamente queremos mostrar los clientes que no tienen ningún tipo de bloqueo:

Para terminar sólo nos queda indicar qué cálculo vamos a mostrar en el eje de las Y. NAV nos permite incluir más de una columna para contabilizar más de un tipo de dato. Una vez hecho esto, desde la ficha procederemos a crear el chart, que directamente será añadido a la pantalla de gráficos que hemos comentado al principio del post:

Ahora únicamente nos queda decidir en qué pagina vamos a mostrar el gráfico. Para ello buscamos la page 22 - Customer List, la editamos y anidamos dentro del contenedor principal una part de tipo chart. En sus propiedades indicaremos a que gráfico nos estamos refiriendo:

Al ejecutar nuestra página, el resultado no puede ser más vistoso:

12feb/120

Campos no editables dinámicamente

Cuando trabajamos con formularios, la forma de indicar si un campo es editable o no de forma dinámica se hace a través del cambio de propiedad editable. Más o menos sería algo así:

CurrForm.MiCampo.EDITABLE(TRUE);

En el caso de las pages es diferente, ya que la forma de acceder a las propiedades de un control ha cambiado. Ahora lo que hacemos es indicar que una propiedad va a seguir un valor estático o un valor dinámico (a través de una variable).

Como podemos ver en la imagen, pasa lo mismo con la propiedad visible o enabled.

NOTA: Recordad, que las variables que utilizamos en la página tienen que tener la propiedad IncludeInDataSet con el valor Yes.

30dic/110

Felices fiestas

Los hay que además de tiempo tienen imaginación. Os dejo con algo que me he encontrado en youtube:

¡Felices fiestas a todos!

Etiquetado con: No hay comentarios
21nov/116

Una idea feliz: Construir una cadena de ordenación de ficheros

En ocasiones, hacemos procesos que generan ficheros de forma masiva. Estos ficheros se acumulan en una ruta especificada y, cuando tenemos que consultarlos, no vemos la forma sencilla de ordenarlos por fecha. Es cierto que una de las propiedades de un fichero es la fecha de modificación pero en ocasiones esta no puede ser del todo fiable. Con esta función, podemos construir fácilmente una cadena que contiene AÑO MES DÍA HORA MINUTO SEGUNDO que resulta ideal para utilizar como nombre de un fichero:


FechaInversa

l_txtAnyo := FORMAT(DATE2DMY(TODAY,3));
l_txtMes := FORMAT(DATE2DMY(TODAY,2));
l_txtDia := FORMAT(DATE2DMY(TODAY,1));

l_txtHoraCompleta := FORMAT(TIME);
l_txtHora := COPYSTR(l_txtHoraCompleta,1,STRPOS(l_txtHoraCompleta,':')-1);

l_txtHoraCompleta := COPYSTR(l_txtHoraCompleta,STRPOS(l_txtHoraCompleta,':')+1);
l_txtMinuto := COPYSTR(l_txtHoraCompleta,1,STRPOS(l_txtHoraCompleta,':')-1);

l_txtHoraCompleta := COPYSTR(l_txtHoraCompleta,STRPOS(l_txtHoraCompleta,':')+1);
l_txtSegundo := l_txtHoraCompleta;

IF STRLEN(l_txtAnyo) = 2 THEN l_txtAnyo := '20'+l_txtAnyo;
IF STRLEN(l_txtMes) = 1 THEN l_txtMes := '0'+l_txtMes;
IF STRLEN(l_txtDia) = 1 THEN l_txtDia := '0'+l_txtDia;
IF STRLEN(l_txtHora) = 1 THEN l_txtHora := '0'+l_txtHora;
IF STRLEN(l_txtMinuto) = 1 THEN l_txtMinuto := '0'+l_txtMinuto;
IF STRLEN(l_txtSegundo) = 1 THEN l_txtSegundo := '0'+l_txtSegundo;

EXIT(l_txtAnyo+l_txtMes+l_txtDia+l_txtHora+l_txtMinuto+l_txtSegundo);

Espero que os sea muy útil.

15nov/115

Cuando NAS nos dice que las opciones posibles son Yes/No…

En este blog se ha hablado largo y tendido sobre NAS. Es posible que alguna vez os hayáis encontrado con algún tipo de problema al arrancar el servicio y que este os diga algo parecido a "Sí no es una opción. Las opciones posibles son Yes/No". El principal problema de esto es el idioma que está utilizando NAS para entrar en NAV. Buscando un poco de información he visto que se comenta lo siguiente:

  • Copiar las carpetas de idiomas de la carpeta client a la carpeta application server.
  • Utilizar código en la codeunit 1 (evento NasHandler) que modifique el idioma que se utiliza al entrar en la base de datos. Para esto se suele utilizar GLOBALLANGUAGE.

Pero últimamente lo que me ha funcionado ha sido lo siguiente:

  • Abrir la carpeta %AppData% (se puede escribir directamente en inicio > ejecutar).
  • Buscar y borrar el archivo NaviBP.xml. Este archivo sólo contiene una lista con los breakpoints que el usuario ha marcado en el debbuger de NAV.

Puede parecer absurdo, pero en algunas ocasiones, borrar este fichero ha sido la solución al problema.

26oct/112

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 NAV\60\Service no sólo tenemos el idioma ENU. Para instalar más idiomas, hay que buscar en el DVD de NAV la ruta Installers\ES\Server y ejecutar el instalador. Por último, como no, hay que volver a reiniciar el servicio.

17oct/110

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.