viernes, 19 de septiembre de 2008

Instalando Employee Portal de Dynamics NAV

Hace unos días tuve que ayudar a unos amigos a montar el Employee Portal sobre un WSS3 contra un Navision 4, así que comparto con vosotros mis experiencias para que las tengais en cuenta.

Creo que existen pocas implantaciones del Employee Portal que estén funcionando en España, así que me siento afortunado de haberlo visto Funcionar. Si estáis pensando en implantarlo, que no oss vendan un PPT, exigir una demo real del producto.

Empezamos:

  • Lo primero es instalar el NAS, las MSMQ, Framework 3.0 o superior, y WSS· en los servidores que correspondan.
  • A continuación tendremos que instalar los paquetes del Employee portal para sharepoint y Navision. En esto tenéis que tener en cuenta que son dos paquetes de instalación distintos. Un contiene los WebParts y dll's para el Sharepoint y el otro contiene las codeunit's y tablas para el EP.

En este punto os puede surgir el caso que tensáis una versión de sharepoint distinta a la que viene en el cd de instalación. Las versiones que vienen por defecto son:

  • NAV 4 -> WSS2
  • NAV 5 -> WSS3

¿Pero que pasa si tenemos un NAS 5 y queremos montar el EP sobre un WSS3 ?, en este caso instalaremos en el servidor de Navision el paquete de EP para navsion 4 y en el servidor de WSS instalaremos el paquete de EP de la 5.

Una vez instalados todos los componentes, "a configurar":

Lo primero el wss3

  • Creamos una aplicación web en el WSS3 y una colección con a plantilla del EP.
  • Configurar el usuario del WSS3 (Los siguientes pasos se deben de realizar en caso que las máquinas de WSS3 y NAS sean distintas):
    • Ahora vamos a cambiar el usuario con el que se está ejecutando el WSS3, por defecto es "Servicio de red". Buscamos el grupo de aplicaciones de la aplicación web en el IIS y cambiamos el usuario de la pestaña "identidad" por uno propio, como por ejemplo WSS_Admin o WSS_WorkerProcess. Este usuario no es recomendable que sea administrador del dominio.
    • Al cambiar el usuario tendremos que darle permiso de logon en el SqlServer.
    • Hacemos un IISReset y comprobamos que el portal se carga, si da algún error de "Servicio no disponible", es que nos falta algo en el usuario.
  • Configurando los WebParts:
    • Ahora tenemos que montar los WebParts del EP sobre el WSS3. Yo he tenido problemas al importarlos mediante STSADM, así que os indico los pasos manuales:
      • Buscamos el fichero Cab del EP "WebPartLibraryCab", lo descomprimimos e instalamos la dll en el GAC. Lo más rápido es arrastrar y soltar sobre la carpeta "C:\Windows\assembly"
      • A continuación subimos los WebParts al WSS3. Podemos entrar en el Sharepoint con un usuario administrador, y en la configuración del sitio-> elementosWeb, añadimos los ficheros con extensión "WP".
    • Abrimos el Web.config de nuestra aplicación web. Para encontrarlo podemos ir al IIS y en la pestala de "Directorio" de nuestra aplicación web encontraremos la ruta donde está alojado.
      • Añadimos en la sección de "safecontrols" la siguiente línea:

<SafeControl Assembly="Microsoft.Navision.EmployeePortal, Version=1.0.0.0, Culture=neutral, PublicKeyToken=7eb48bed34e26dda" Namespace="Microsoft.Navision.EmployeePortal.WebPartLibrary" TypeName="*" Safe="True" />

      • Cuidado con la versión del assembly, si instaláis el EP NAV5 SP1 creo que tienen la misma versión y publicKey, pero no estoy seguro.
  • Añadiendo las propiedades del EP:
    • Abrimos de nuevo el Web.config y añadimos las configuraciones del EP (habitualmente las añade al final del fichero) en la sección appsettings:

<appSettings>
<add key="PictureUnavailable" value="/_layouts/images/picture_unavailable.gif" />
<add key="LookUpImage" value="/_layouts/images/lookup.gif" />
<add key="PictureLinkImage" value="/_layouts/images/pictindicator.gif" />
<add key="UseEncryption" value="0" />
<add key="UseCompression" value="0" />
<add key="UseDebug" value="0" />
<add key="DebugPath" value="" />
<add key="JobQueues" value="FormatName:DIRECT=OS:.\private$\nep_request_queue" />
<add key="ReplyQueues" value="FormatName:DIRECT=OS:.\private$\nep_reply_queue" />
<add key="MessageTimeOut" value="120" />
<add key="WaitForReplyTimeOut" value="60" />
</appSettings>

    • Aquí tendremos que indicar el nombre de nuestras colas MSMQ y el servidor en el que se encuentra. Si las colas MSMQ se encuentran en otro servidor substituiremos en JobQueues y ReplyQueues el carácter "." por el nombre del equipo sin barras por delante. Por ejemplo: <add key="JobQueues" value="FormatName:DIRECT=OS:miequiporemoto\private$\nep_request_queue" />

  • Hacemos un IISreset y entramos en el portal, en este punto deberíamos poder entrar sin problemas. Editamos la página y añadimos un WebPart del EP. Al añadirlo debería mostrar el panel de configuración del WP. En caso de producirse un error puede que no esté bien construido el Web.config o no esté instalada la dll en el GAC.
  • Si al entrar nos indica que "No están instaladas el servicio de MSMQ" o algo similar tendremos que instalar las colas MSMQ el en el equipo del WSS3, aunque no las utilicemos.

if (has llegado hasta aquí )

"Ya queda poco!!!"

else

"buffffffffffff"

Las colas MSMQ

  • Tenemos que verificar que las colas sobre la que corre el NAS están creadas. Entramos en el servicio de MSMQ y verificamos que existan en la sección "Private" las colas que hemos indicado en los valores "JobQueues y ReplyQueues" del web.config. Si no existe las crearemos "No transaccionales".
  • Si las colas están en un servidor distinto al WSS3 tendremos que dar permiso a las dos colas al usuario que hemos especificado en el servicio de WSS3.
  • En este paso podemos probar la conexión entrando en el WSS3 con una página que tenga un WP, y veremos como la cola de MSMQ tiene un mensaje encolado. Si no es así, tenemos un problema.

El NAS

No hay mucho misterio, normalmente los problemas que te puedes encontrar son:

  • Al agregar una "aplicación" en la consola del NAS, debes indicar en el host el nombre del servidor y en el "servicio nombre del servidor-CLASSIC" o "servicio nombre del servidor-SQL" si atacamos a un NAV con SqlServer. Si hemos puesto un nombre distinto en la instalación, lo podemos revisar en la consola de servicios de windows.
  • Otro problemilla es el del nombre de la bbdd, debemos indicar el "nombre exacto", como te confundas en un carácter no conectará.
  • También nos puede pasar que el servicio arranque pero nos diga "host desconocido" o algo similar. Puede que el nombre del host sea incorrecto o que el usuario que esté utilizando el servicio del NAS no tenga permisos para conectar con la bbdd. Una solución es cambiar el usuario del servicio del NAS por un usuario de windows que pueda hacer logon sobre el SqlServer.

Para verificar que el NAS está bien configurado, debemos arrancarlo y ver que en el fichero de eventos de windows en la sección "Aplicaciones" no hay ninguna alerta o error.

Navision

Aunque instalemos el paquete del EP, tenemos que indicarle una serie de configuraciones para que funcione. Os aconsejo que pobléis con una bbdd de prueba que viene en el paquete del EP.

Cada vez que hagais una modificación en la configuración del EP en Navision tenéis que reiniciar el NAS para que se entere el EP.

Más adelante indicaré ejemplos de configuración, ya me he cansado por hoy.

Algún ejemplo:

http://www.mibuso.com/forum/viewtopic.php?p=95700

jueves, 18 de septiembre de 2008

'Sys' no está definido en AJAX

Al parecer es un error muy común (vamos que me ha pasado), al montar AJAX sobre un proyecto web ya creado.

La solución la podéis encontrar en el blog de Jorge Serrano y Loring Twaits.

 

En mi caso bastó con añadir en el web.config:

<compilation debug="true">
            <assemblies>
                <add assembly="System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/></assemblies>
      </compilation>

<httpHandlers>
      <add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" validate="false"/>
</httpHandlers>

 

<location path="ScriptResource.axd">
    <system.web>
      <authorization>
        <allow users="*"/>
      </authorization>
    </system.web>
  </location>

jueves, 11 de septiembre de 2008

How to: Compactar el disco duro en una máquina virtual

Alvaro Arias Conde nos explica en su blog como compactar esas dichosas máquinas virtuales que no hacen más que crecer y crecer.

De paso os podéis pasar por el blog de Enrique Blanco y Roberto González, que siempre tienen algún tema interesante que contarnos.

lunes, 8 de septiembre de 2008

Me estás eSTRESSando !!

Es lo que me ha estado diciendo el servidor de pruebas. Esa semana la hemos dedicado a probar toda la infraestructura que hemos creado para nuestro portal, no solo que no haya “petardazos”, además la hemos realizado una gran cantidad de pruebas de carga para conocer los límites del portal y descubrir posibles errores y mejoras en el código.

Antes de ponernos a realizar las pruebas, me preocupé por investigar primero ¿Cómo las debíamos hacer?, ¿Qué debemos probar? Y ¿Qué íbamos a esperar de ellas?.

Navegando un poco he encontrado una guía de Microsoft imprescindible y completísima: Improving .NET Application Performance and Scalability. Incluye recomendaciones de diseño, de programación, de configuración, nos explica cómo monitorizar el portal, cómo configurarlo, etc.. Además incluye varios checklist bastante útiles.

 

Además encontré a unos personajes muy interesantes que me proporcionaron información en sus blogs acerca de que herramientas podía utilizar, cómo utilizarlas, sus experiencias, etc.

Alik Levin’s tiene un blog muy completo sobre performance y scalability. Además de un post “Do You Really Need A Distributed Architecture?” acerca de si realmente estamos seguro de que SOA sea la mejor solución para nuestro proyecto.

Patrick Mac Kay, un experto en testear aplicaciones tiene un blog en el que nos cuenta sus experiencias, después de leerlos solo puedes decir “vaya nivel”.

 

Las herramientas que hemos utilizados han sido:

· El módulo de pruebas de Visual Studio 2008

· Web Application Stress

· Fiddler  (How to de José Manuel)

 

Como resultado, esta semana hemos conseguido los siguiente:

· Hemos encontrado pequeños errores de programación y hemos mejorado algunos módulos.

· Disponemos de la configuración necesaria para los requisitos del proyecto.

· Hemos creado nuestros check list de desarrollo para el proyecto.

· Conocemos los límites y condiciones idóneas del portal.

· Sabemos cómo monitorizarlo y cómo actuar en caso de tener problemas.

· Nos hemos divertido un rato.

 

Comentaros que este proyecto, todavía está en una de las fases iniciales, es decir no hemos esperado hasta el final para realizar las pruebas. Esto es importante en el sentido que podemos encontrar antes las “sorpresas”, vamos preparando las pruebas unitarias para futuras pruebas y podemos ir tuneando el sistema y el portal para que tenga un rendimiento aceptable en condiciones de alto consumo/uso.