martes, 28 de diciembre de 2010

Cómo saber los permisos que tienes sobre un objeto

Muchas veces no sabemos que objetos podemos modificar con una licencia. Os dejo un truco para saber que permisos tenemos para determinados rangos de objetos en una base de datos de Dynamics Nav.
Esta información se guarda en la tabla virtual "Permission Range", en versiones anteriores a la 2009 no podemos ver el contenido de esa tabla directamente, para ello lo que vamos a hacer es crear un formulario nuevo usando el asistente, en el campo "Table" escribimos "Permission Range"
Seleccionamos Tabular-Type Form y le damos a aceptar
Elegimos mostrar todos los campos. Podemos guardar el formulario dando a Finish o bien si solo queremos hacer una consulta de algún objeto específico damos a Preview

Vemos los permisos por objetos y rango de objetos que tiene nuestra licencia.

Esta truco sirve para mostrar el contenido de cualquier tabla virtual, por ejemplo las tablas "Object" o "Session"

lunes, 27 de diciembre de 2010

Desarrollo colaborativo en Dynamics Nav. Parte II, el repositorio


Cualquier proyecto en el que intervengan varias personas usando los mismos ficheros, no tienen porque ser código fuente, requiere de un sistema de control de versiones que gestione unos repositorios donde se almacenarán las copias comunes de esos ficheros.
Una versión, revisión o edición de un fichero, es el estado en el que se encuentra dicho fichero en un momento dado de su desarrollo o modificación. Se llama control de versiones a la gestión de los diversos cambios que se realizan sobre los elementos de algún producto o una configuración del mismo. Los sistemas de control de versiones facilitan la administración de las distintas versiones de cada producto desarrollado, así como las posibles especializaciones realizadas (por ejemplo, para algún cliente específico).

Existen varios sistemas de control de versiones:
  • Team foundation server de Microsoft
  • CVS
  • Source Safe de Microsoft
  • Subversion ó SVN
Para este proyecto hemos decidido usar Subversion e integrarlo con Dynamics Nav para controlarlo dentro del mismo entorno de desarrollo al que estamos tan acostumbrados.

Subversion es un sistema de control de versiones con la política copiar-modificar-mezclar con gran proyección en la actualidad. Por ejemplo, SourceForge utiliza Subversion como control de versiones, también Google Code se basa en Subversion. Gran parte del éxito de Subversion es su agilidad cuando intervienen varias personas, debido a su política, y a su flexibilidad que no lo limita a desarrollos software: es posible almacenar planos, imágenes, libros…

A la hora de instalar Subversion hay que tener en cuenta de van a estar los repositorios y como vamos a acceder a ellos. Se puede acceder  a los repositorios de Subversion a través de muchos métodos diferentes --en un disco local, o a través de varios protocolos de red. Una ubicación dentro del repositorio, sin embargo, es siempre una URL. La tabla describe cómo se corresponden diferentes esquemas de URL con los métodos de acceso disponibles. Métodos de acceso

EsquemaMétodo de acceso
file://acceso directo al repositorio (en disco local)
http://Acceso a través del protocolo WebDAV a un servidor web Apache2 con Subversion incluido
https://Igual que http://, pero con cifrado SSL
svn://Acceso al servidor svnserve mediante el protocolo predeterminado
svn+ssh://Igual que svn://, pero a través de un túnel SSH

En nuestro caso, hemos optado por acceso mediante el protocolo http. Para en lugar de instalar el paquete básico de Subversión hemos instalado Visual SVNServer que incluye el servidor web Apache.
Se puede obtener gratuitamente desde aquí http://www.visualsvn.com

No voy a meterme más en lo que es Subversion ya que se haría interminable el post, y además existe infinita documentación sobre este sistema de control de versiones.


Ya había cerrado el post, pero si quería comentar una cosa más. Subversion permite crear la estructura de repositorio que queramos, es cierto que se recomienda como mínimo tener las carpetas Trunk, Branches y Tags pero solo es una recomendación.
A la hora de decidir como queríamos gestionar el repositorio dudamos si esta recomendación, para la naturaleza de Dynamics Nav y como se afrontan los proyectos en un cliente Dynamics Nav sería adecuada, es más dudamos si no sería conveniente disponer de un repositorio para cada proyecto en lugar de una carpeta para cada proyecto dentro del mismo repositorio.
Al final, dado que nuestro interés radica en poder versionar los cambios en los objetos de Nav por proyectos, en que no necesitamos mantener una rama común, que podría nacer de los objetos estándar de Nav sin modificaciones, si no que nuestra rama común será tratada como un proyecto en sí y en que no necesitaremos mantener componentes externos (librerías de terceros por ejemplo) en los distintos proyectos hemos optado por la opción de tener un repositorio distinto para cada proyecto en lugar de todos los proyectos dentro del mismo repositorio.

Ahora si cierro el post ;)


lunes, 20 de diciembre de 2010

Desarrollo colaborativo en Dynamics Nav. Parte I, los problemas

Todos los que trabajamos habitualmente en el desarrollo de Dynamics Nav sabemos lo pobre que es y las pocas posibilidades que proporciona su EDI para desarrollar en C/AL, sobre todo cuando también trabajamos con otros como Visual estudio, Eclipse o NetBeans.
No solo nos quejamos de un aspecto visual pobre o de la poquísima ayuda al desarrollo que pueda proporcionar. Lo peor de todo es la nula aportación que hace al desarrollo colaborativo, sin pensar mucho se me ocurren una serie de problemas que tarde o temprano a todos nos han acarreado perder trabajo o tiempo:

  • Olvidaros de programar dos personas sobre los mismos objetos en la misma base de datos, si no os ponéis de acuerdo os acabareis pisando el trabajo
  • Olvidaros de programar el mismo objeto en dos bases de datos distintas sin tener que emplear un buen rato después para integración de las modificaciones
  • Olvidaros de tener una mínima historia de las modificaciones sufridas por un objeto: quién lo ha modificado, cuándo, para que proyectos ha sido modificado..
  • Olvidaros de deshacer modificaciones en caso de un error como puede ser importar un objeto erróneo y no tuvierais copia de ese objeto
  • ...
Estos días hemos estado desarrollando un módulo que nos ayudará a trabajar varias personas en varios proyectos dentro de un mismo cliente. Los puntos que hemos querido cubrir:
  • Un programador podrá bloquear un objeto impidiendo a otros programadores modificarlo hasta que no lo libere. Los objetos se pueden bloquear de forma automática con solo abrirlo en el diseñador.
  • Cada objeto tendrá asociada una historia: cuándo fue modificado, para que proyecto, por qué programador, cuando se envió al cliente.
  • Manejaremos una base de datos de desarrollo principal y varias secundarias para cada proyecto.
  • Desde la base de datos principal tendremos visibilidad sobre todos los objetos que se modifican en las secundarias a través de su historia.
  • Antes de importar un objeto de un proyecto (base de datos secundaria) en la base de datos principal para poder mandárselo al cliente, podremos comparar sin salir de Dynamics Nav las diferencias de código que hay entre la versión de la base de datos principal y la versión del objeto que hay en la base de datos del proyecto.
  • Se podrán recuperar distintas versiones de un objeto desde su historia. Si perdemos modificaciones de un objeto siempre podremos comparar como está el objeto en la base de datos en este instante con una versión del objeto en un momento anterior.
  • Informe de riesgo. Antes de importar los objetos modificados de un proyecto podremos sacar un informe donde veamos para que otros proyectos se han modificado esos objetos-
Todas estas nuevas funciones estarán integradas en Dynamics Nav como un nuevo menú para no tener que salir del entorno que ya conocemos.

Con todo esto lo que buscamos es, desde una sola base de datos por cliente, controlar varias bases de datos en las que distintos desarrolladores lleven a cabo distintos proyectos e integrar todas las modificaciones de una forma sencilla y controlada para no perder modificaciones y mantener un historial de todas estas modificaciones para para poder recuperarlas en cualquier momento.

miércoles, 15 de diciembre de 2010

Ya está disponible Dynamics Nav 2009 R2

Llevo mucho tiempo sin escribir nada, demasiado trabajo, sobre todo un proyecto muy interesante que estoy realizando para poder hacer un entorno de desarrollo en Nav colaborativo con bloqueos entre usuarios, control de versiones por proyectos, repositorio de código... bueno bueno cuando lo tenga listo (qué ya queda poco) mostraré aquí el resultado (a mi entender bastante bueno :))

Después de la disculpa, esta pequeña entrada es solo para comentar que ya se ha lanzado la versión 2009R2. Ya había comentado anteriormente sobre ella. Se puede descargar de la partner source desde el siguiente link:
https://mbs.microsoft.com/partnersource/support/selfsupport/productreleases/microsoftdynamicsnav2009r2.htm

Disfrutarla!