Creando usuarios con Power Shell

Se abre el telón, salgo yo en jueves santo con media empresa de vacaciones. En eso que entra un ticket mas o menos urgente que hay que resolver de un cliente con el que más o menos no trabajo habitualmente. Me conecto al entorno de desarrollo, hago el cambio y cuando voy a probarlo… ZAS! En toda la boca. Mi usuario no está creado en la base de datos. Soy administrador del servidor, del SQL, puedo tocar objetos, etc. Pero como mi usuario no esta creado en la base de datos y no tiene roles activos… en definitiva, no puedo ni llegar a listar las empresas que hay en la base de datos.

Entonces viene CMD se mete en una cabina de teléfonos, se quita las gafas de pasta y sale Power Shell! Guapooo! Salaooo! (Creo que me estoy creando un problema de la ostia si algún día decido traducir este blog).

Aquí vienen los pasos que he seguido para crear un usuario en NAV sin entrar en NAV:

  • Ponte el antifaz de malo: Un gorro de lana negro combina a la perfección. Vas a darte acceso a algo a lo que no tienes acceso. Es lo más cerca que has estado o vas a estar nunca de ser un hacker así que disfrútalo.
  • Abre Power Shell en modo Administrador: Que te voy a contar. Te vas al servidor donde tengas instalado el servicio de NAV, Botón derecho en el icono de Power Shell y ejecutar como administrador.
  • Cargar la librería de funciones de NAV: Esto es algo que se les olvida explicar a muchos blogs o manuales de ayuda de Microsoft. El primer comando que tenemos que picar sirve para agregar funciones en la sesión de Power Shell que nos permitan interactuar con NAV:

    Import-Module 'C:Program FilesMicrosoft Dynamics NAV71ServiceNavAdminTool.ps1'

    Actualización: Si este paso ta da problemas, es posible que primero tengas que permitirte usar scripts de PowerShell. He encontrado por ahí que se hace metiendo este comando:

    Set-ExecutionPolicy RemoteSigned

    Hijos míos, no hace falta que os diga que esa ruta es dónde yo he encontrado el fichero y que necesitaréis adaptarla a vuestro servidor.

  • Crea tu usuario en NAV: Con este comando estarás creando un usuario sin permisos en NAV:

    New-NAVServerUser NOMBRE_DE_LA_INSTANCIA_DE_NAV -WindowsAccount DOMINIOUSUARIO_NUEVO

    Felicidades. Ya estás en Matrix.

  • Dáte permisos: Tienes barra libre y te pides un agua del grifo? Nos vamos a dar permisos de SUPER usando este comando:

    New-NAVServerUserPermissionSet

    Verás que Power Shell te empieza a pedir los parámetros básicos como usuario, rol e Instancia.

Ya está. Seguramente ya puedes entrar. Si no, siempre puedes usar esta herramienta. No os olvidéis de sacaros el antifaz y el gorro. A la empresas no les suele gustar tener gente con antifaz junto a la máquina del café.

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…

¿Errores internos en Dataports? Pues vayamos a ciegas!

Últimamente parece que me caen expedientes X a diario. Hoy he descubierto que es posible hacer el dataport más tonto del mundo para exportar el contenido de una tabla y (sí) puedes morir en el intento:

El tema es que he creado un dataport con un dataitem de una tabla no demasiado grande (sin demasiados campos ni demasiados registros). En la pantalla de dataport fields he añadido todos los campos de la tabla. Ejecuto la exportación de los datos y me encuentro con esto:

La longitud del origen excede del tamaño del búfer de destino. Error raro y ceño fruncido. Lo había visto otras veces al trabajar con XML cuando todavía no existían los XMLPorts, pero nunca en un dataport. Lo primero que he pensado es que quizás había información en algún campo que interfería de alguna forma extraña con el dataport. Así que he quitado todos los campos de la sección dataport fields y he vuelto a ejecutar. El resultado: El mismo! 🙁

Como me estaba empezando a impacientar, he cambiado la tabla y la he cambiado por un entero. Internamente recorría los registros guardando los campos en las variables. A partir de ahí ningún problema. He conseguido exportar los datos sin problemas sin saber cual era el origen del problema.

Al crear otro dataport para importar estos datos en otra base de datos he vuelto a intentar utilizar la tabla destino asignando los campos en la sección dataport fields. Mi gran sorpresa ha sido ver una especie de error de sobrepasamiento que decía que no podía insertar la cadena en un text de 80. Lo más asombroso de todo es que en esta tabla no existe ningún campo de esa longitud y en el dataport tampoco existe ningúna variable. ¿De que se estaba quejando NAV?

La solución: He desactivado la propiedad ShowStatus y todo ha ido como la seda. ¿Que significa esto? Pues significa que en la ventana de proceso hay una barra de proceso que se basa en las líneas que tiene el fichero y luego tiene un campo de nombre registro que muestra los valores que conforman la clave. Es una pena que los boys de NAV no hayan tenido en cuenta que los valores que componen una clave pueden ocupar concatenados más de 80 caracteres!

Así que ya sabéis, si vais a hacer dataports que ataquen a tablas con muchos campos en la clave, desactivad ShowStatus o id tirando el peine a la basura.