Page Templates con ayuda del Sharepoint Designer

El otro día me acordé del artículo que ya escribí acerca de como realizar personalizaciones rápidas en sharepoint. El ejemplo realizaba modificaciones en modo unghosted, lo que implicaba que cada que se consume las páginas se estaba accediendo a la bbdd para cargarla.

Como alternativa a las personalizaciones sobre la bbdd de contenidos debemos de realizar nuestras páginas como page templates  o applications pages, e incluso podemos pensar en webparts antes de hacer que una página sea unghosted.

Las page templates consisten en páginas que están físicamente en el servidor frontal se ejecuta en «safe mode», es decir no permite ejecutar código en servidor, y permite customizarla.

 

Un caso real

En el proyecto se planteaba una solución sobre lista de wss3 la cual debía de mostrar una vista y comportamiento especial en las páginas de DispForm, NewForm y EditForm. Si huebiéramos modificado la página directamente desde Sharepoint Designer habríamos terminado rápidamente, pero a cambio habríamos acarreando otros problemas futuros como pueda ser el backup/restore del portal y el rendimiento.

 

Comenzamos haciendo la lista con la estructura, lo recomendable es hacerlo definiendo un contenttype. Una vez creada la lista, abriremos el sharepoint Designer y entraremos en el formulario a modificar, en este ejemplo en DispForm.

 

Una vez abierto lo modificaremos con la estructura que deseemos, tal y como explicaba en mi anterior artículo.

 

image

 

Una vez modificada, lo que haremos será quedarnos con el código fuente, pero ojo no guardaremos el fichero, solo lo utilizaremos para renderizar el resultado y hacernos una idea en tiempo de diseño.

Ahora crearemos un proyecto en blanco con la estructura adecuada para construir una  feature de sharepoint. Añadiremos una nueva páginas aspx sin código y pegaremos el código generado por el designer.

image

Si nos fijamos en el código generado por el designer veremos que nos ha incrustado un DataFormWebPart y que tiene como datasource y parámetros referencias a la lista pero por ID. Esto significa que todo lo que hagamos no podremos moverlo a otro sitio ya que la instancia de la lista tendrá otro id distinto aunque tenga la misma estructura.

Para solucionarlo accederemos por nombre en lugar de id, por lo que cambiaremos todas las referencias de ListId por ListName y el guid de la lista por el nombre de la lista. También quitaremos el parámetro

<ParameterBinding Name=»ListID» Location=»None» DefaultValue=»{3C54AAE0-1C6F-4FFD-A3F9-F3BB6FEDA399}»/>  por  <ParameterBinding Name=»ListName» Location=»None» DefaultValue=»»/>

 

image

 

Para verificar que lo hemos hecho correctamente copiaremos el código y lo pegaremos desde el designer en la página que tomamos como ejemplo. PERO SIN GUARDAR DESDE EL DESIGNER!!!.

Ahora tendremos que indicar a sharepoint que la página que hemos hecho se utilizará como template. Crearemos un fichero xml en el que indicaremos lo siguiente:

 

<Elements xmlns=»http://schemas.microsoft.com/sharepoint/»>

  <Module Path=»PagesTemplates» Url=»Notas de Gastos/Forms» >
    <File Url=»NotasDeGastosDispForm.aspx» Path=»NotasDeGastosDispForm.aspx» Type=»Ghostable» />
    <File Url=»NotasDeGastosEditForm.aspx» Path=»NotasDeGastosEditForm.aspx» Type=»Ghostable» />
    <File Url=»EntregarNotasDeGastosForm.aspx» Path=»EntregarNotasDeGastosForm.aspx» Type=»Ghostable» />
  </Module>

</Elements>

El atributo path indica la ruta física del directorio y de la página, y el atributo Url indica el path relativo de la url desde donde se accederá.

Ahora solo tendremos que terminar de configuar nuestra feature, instalarla y activarla.

Al activarla, si actualizamos nuestro explorador del designer veremos como ha aparecido nuestra página. Fijaros que no tienen ningún indicador de que es unghosted.

 

image

Ahora solo nos quedará indicar a la lista que utilice nuestra página cuando se acceda a la Vista de propiedades desde DispForm. Para ello podemos hacerlo desde el designer en caso de las lista, y para las librerías de documentos por código desde un SPFeatureReceiver, en el evento FeatureActivated.

image

image

 

Algunos enlaces adicionales:

http://www.sharepointonlinkedin.com/post/2008/07/20/How-to-free-your-Data-View-Web-Part-(DVWP)-from-those-nasty-GUIDs.aspx

http://sharepoint-insight.blogspot.com/2008/07/dataform-webpart-escape-from-hardcoded.html

Welcome to the Visual Studio 2010

Son muchos los blogs que ya han comentado las novedades de VST2010. En este artículo me centraré en enseñaros «otras» novedades menos comentadas.

image

Lo primero que nos encontramos al iniciar la máquina es que ya viene instalado:

  • VSTudio 2010 y 2008
  • Framework 4.0
  • TFS
  • Microsoft Camano
  • Dinner Now
  • SqlServer2008
  • W2k8 con IIS7 y WSS3, etc

Ha merecido la pena la descarga.

 

VisualStudio 2010

Después de leer las nuevas herramientas y novedades Principalmente me he centrado en los siguientes puntos que me han parecido importantes para el entorno en el que me muevo:

  • El nuevo Framework 4 con las Parallel Extension incorporadas en el core
  • Herramientas para el desarrollo integrado con WSS3 y MOSS
  • Mejoras en las herramientas de Testing
  • Nuevas herramientas para los arquitectos

 

Tenéis más referencias de Visual Studio en:

http://blogs.msdn.com/sharepoint/archive/2008/11/10/visual-studio-2010-tools-for-sharepoint-announced-at-teched-emea-developers-2008.aspx

http://geeks.ms/blogs/elbruno/archive/2008/11/13/vsts2010-training-kit-ya-disponible.aspx

http://dotnet.org.za/willy/archive/2008/11/21/visual-studio-2010-ctp-2-6-7-the-exciting-world-of-construction-part-2-2.aspx

 

El nuevo Framework 4

Entre las novedades podemos destacar el manejo de código que podemos compilar en tiempo de ejecución, la incorporación de Parallel Framework y LinQ en el core, Entity framework ( sin SP’s), MVC, Velocity, …

Tenemos también el Visual Studio 2010 and .NET Framework 4.0 Training Kit  con presentaciones acerca de las novedades http://www.microsoft.com/downloads/details.aspx?FamilyId=752CB725-969B-4732-A383-ED5740F02E93&displaylang=en

 image

 

Herramientas para el desarrollo integrado con WSS3 y MOSS

Ya he leído varios artículos sobre esta herramienta, pero no la he podido tocarla ya que todavía no está disponible en esta versión, de hecho, hay disponible un vídeo en Channel 9 http://channel9.msdn.com/posts/VisualStudio/Sharepoint-Development-with-Visual-Studio-2010/, que muestra ligeramente la herramienta. Si os fijais en el vídeo vereis como ocultan la parte izquierda de la ventana de proyectos.

Dispondremos de varios tipos de proyectos con sus correspondientes asistentes.

image

Tendremos además un explorador donde podremos navegar por la estructura de nuestro portal.

image 

Podremos definir mediante asistentes la estructura de nuestros contentypes y features, además parece que los proyectos vienen preparados para encapsular las features y soluciones y no tratarlos como ficheros adjuntos al proyecto, fijaros en la ventana del explorador de soluciones.

image

Al menos por lo que he visto tiene buena pinta.

 

Nuevas herramientas para los arquitectos

Architecture explorer

image

Model proyect

image image

image image

 

VST TFS

No puedo profundizar porque no lo he tratado, así que se lo dejo a los expertos.

 

Microsoft Camano

Consiste en una aplicación para la gestión, monitorización, seguimiento de los test. No es una herramienta basada en el código, sino en la gestión del ciclo de vida de las pruebas de los proyectos.

Está integrado con nuestro TFS y está dividido en varias secciones: Planificación, testing, defects y reports.

image image

image image

 

 

Dinner Now

Consiste en un conjunto de aplicaciones de ejemplo que nos muestra distintas tecnologías. La máquina virtual incorpora los fuentes por lo que podemos echar un vistazo a las nuevas herramientas que incorpora VST2010 sin tener que crear ningún proyecto.

Podéis descargaros el proyecto desde http://www.codeplex.com/DinnerNow

image

 

 

Si apodéis, echarle un vistazo, solo ocupa unos 7 GB y unos GB de RAM libres, parar un rato las pelis y ya verséis como tarda poco. Podeis descargarlo http://www.microsoft.com/downloads/details.aspx?FamilyId=922B4655-93D0-4476-BDA4-94CF5F8D4814 y las FAQS https://connect.microsoft.com/VisualStudio/content/content.aspx?ContentID=10046.

Por cierto, algo curioso que he visto en la página de connect en el apartado «How can I improve the performance of the Virtual PC?» indica al final del todo el siguiente comentario «Also while using the Virtual PC, you should periodically close and reopen Visual Studio 2010.»,  joer, menuda técnica!!

Sharepoint Services 3 es gratuito?

Hace un tiempo escribí sobre como se licencia WSS3.

Os vuelvo a escribir la entrada para que lo tengais en cuenta en vuestras implantaciones:

Una instalación con WSS3 No tiene porqué salirnos gratis.
WSS3 forma parte del paquete de Windows server 2003, la instalación y uso de WSS3 no necesita de licencias adicionales. Al menos eso pensaba yo!!. Ayer Jorge Diéguez nos planteó la duda «¿necesitamos la licencia Windows External connector?«.

Al parecer había estado navegando y encontró el siguiente enlace: http://www.sharepointblogs.com/mattg/archive/2008/05/12/sharepoint-licensing-a-common-question-i-get-asked.aspx
Como consecuencia de esto hemos hecho una serie de consultas al soporte preventa de Microsoft sobre este tema y hemos concluido lo siguiente:
si queremos montar un portal con WSS3 puede que haya que adquirir licencias adicionales.
Cuando se monta wss3 para que pueda ser utilizado por usuarios públicos existen dos opciones en temas de licenciamiento:

  • Usuarios anónimos: En este caso no se necesita ningún tipo de licencia para WSS3.
  • Usuarios que realizan login
    • Usuarios externos a la compañía que se loguean en WSS3: En este caso se necesita un «External Connector License»
    • Usuarios de la compañía: Necesitan una licencia CAL.

La explicación que nos daba Microsoft era que siempre se debe licenciar los usuarios que necesitan hacer un login sobre los sistemas o aplicativos. Como WSS3 es un componente (aplicativo) de WS2K3 estamos utilizando recursos propios de WS2k3, por lo que necesitaremos una licencia CAL para cada usuario que haga logon sobre WSS3.

En este caso Microsoft separa los usuarios externos a la compañía de los internos. Para los usuarios internos necesitaremos de una licencia CAL, y para los externos podremos o bien adquirir una licecnia CAL por usuario o bien adquirir el parquete «External Connector License«.
La forma de realizar el login sobre WSS3 no afecta a la forma de realizar el registro, para Microsoft lo que importa es identificar la persona física independientemente que la validación se haga por un AD, ADAM o provider a medida con nuestro repositorio.
Es importante que tengais en cuenta que el paquete «External Connector License» es solo para usuarios externos a la compañía, es decir, que no están en nómina.
Las licencias de extenal connector se deben adquirir por cada servidor de nuestra granja que lo necesite.
Una vez visto el tema de wss3, tenemos que revisar las liencias de SqlServer. SqlServer es un producto aparte, al considerar a los usuarios de WSS3 como usuarios de WS2k3, si nuestro portal sobre WSS3 utiliza bbdd de contenidos de SqlServer (que será en el 100% de los casos) tendremos que tener una licencia CAL de SqlServer por cada usuario interno o externo que haga login en wss3. En este caso os recomendaría licenciar SqlServer por procesador en lugar de por usuario.

Como resumen os expongo nuestro caso y las licencias que necesita adquirir el cliente:

Los portales WSS3 son públicos en Internet, accederán usuarios anónimos y usuarios alojados en un repositorio propietario del cliente mediante un provider de seguridad a medida. A los portales no accederán usuarios del dominio.

Los servicios de WSS3 estarían alojados en servidores WServer 2003 Enterprise edition y utilizarían como bbdd SqlServer 2005 Standard Edition.
Solo estarán público los portales wss3.
Los servidores Win2k3 y el SqlServer solo serán accesible para los usuarios administradores y aplicaciones (WSS3) internas, no accederá directamente ningún tipo de usuario adicional.

Licencias:

  • 1 Licencia X servidor de Ws2k3.

  • 1 External connector X servidor Ws2k3 (no cpu) que tenga instalado el wss3.

  • 1 licencia SqlServer 2005 standar/Enterprise x procesador físico

Os aconsejo que reviseis vuestras instalaciones realizadas en clientes.
En el siguiente enlace podreis encontrar información más detallada sobre el external connector: http://www.microsoft.com/windowsserver2003/howtobuy/licensing/extconnector.mspx

Estos mismos conceptos se aplican a cualquier tipo de aplicativo que se haga sobre plataforma W2K3 y SqlServer2005. Es decir, si tienes un portal ASP.NET desarrollado a medida, también habría que cumplir las condiciones anteriores.

 

Esto solo es válido para aplicativos, no es válido para hacer hosting de WSS3. En ese caso habría que adquirir otro tipo de licencias.

 

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:Windowsassembly»
      • 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:miequiporemotoprivate$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

    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.

    ADAMProfileProvider

    Ya está disponible en codeplex una primera versión del ADAMProfileProvider. Consiste en un proveedor de ASP.NET para manejar el perfil de los usuarios alojados en un ADAM.

    Hasta ahora Microsoft solo nos proporciona el SqlProfileProvider basado en SqlServer, para manejar el perfil del usuario.

    Con esta primera versión podremos utilizar ADAM como repositorio de la información de los usuarios, especialmente cuando utilizamos usuarios de ADAM mediante el ActiveDirectoryMembershipProvider.

     

    El proveedor todavía no extiende todos los métodos, de momento tenemos:

    Initialize
    GetPropertyValues
    SetPropertyValues
    GetAllProfiles

     

    Los parámetros que admite son:

    connectionStringName    : Nombre de la cadena de conexión con ADAM almacenada en la sección de Connectionstrings del Web.config.
                                              Debe tener un formato similar al siguiente: LDAP://host:389/DC=Portal,DC=COM
    userName                        : (opcional)Nombre del usuario para conectar con ADAM. En caso de indicarse debe indicarse el parámetro «password».
    password                         : (Opcional si no se especifica userName). Password del usuario para conectar con ADAM.
    attributeMapUsername   : (Opcional). Atributo del ADAM que identifica el nombre del usuario. Por defecto busca en el atributo «userPrincipalName».

     

    Un ejemplo de configuración en el web.config:

    <?xml version=»1.0″?>
    <configuration>

      <appSettings>
        <!– … –>
      </appSettings>

      <connectionStrings>
        <add name=»ADAMConnectionString» connectionString=»LDAP://localhost:389/DC=Portal,DC=COM» />
        <!– … –>

      </connectionStrings>

      <system.web>

        <!– … –>

        <profile defaultProvider=»ADAMProfile» enabled=»true» automaticSaveEnabled=»false»>
          <providers>
            <add connectionStringName=»ADAMConnectionString»
                 applicationName=»Portal»
                 name=»ADAMProfile»
                 type=»ADAMComponents.ADAMProfileProvider, ADAMProfileProvider, Version=1.0.0.0, Culture=neutral, PublicKeyToken=6d42579a0907e649″ />
          </providers>
          <properties>
            <add name=»mail» type=»System.String» />
            <add name=»displayName» type=»System.String»/>
            <add name=»middleName» type=»System.String»/>
            <add name=»telephoneNumber» type=»System.String»/>
          </properties>
        </profile>

         <!– … –>
      </system.web>

    </configuration>

     

    Fijaros que la cadena de conexión debe contener el prefijo «LDAP», el host, el puerto y la ruta inicial.

    Para poder utilizarlo hay que instalarlo antes en el GAC.

    En caso de producirse algún error dejará una marca en el registro de windows y lanzará una excepción.

     

    En breve lanzaremos:

    • AzManADAMStoreRoleProvider : un rolemanager basado en AzMan sobre ADAM y con usuarios ADAM.
    • ADAMMembershipProvider : una extensión del ActiveDirectoryMembershipProvider pero permite resetear el password.

     

    Gracias Jorge por validar el código y tus sugerencias.

    Documentando con Sandcastle

    ¿Sirve de algo esos comentarios que ponemos en el código o sirve para entretenernos con el Intellisense?

    En ocasiones nos puede ser útil documentar nuestro código y distribuirlo al equipo para que todos sean conscientes de los elementos disponibles sin tener que abrir veinte proyectos.

    Sandcastle nos permite crear una ayuda tipo msdn con los elementos definidos en nuestros componentes.

    Para generalo nos proporcionan varias herramientas por línea de comandos, pero lo mejor es utilizar un ejemplo «SandcastleGui.exe», que nos automatiza la creación.

    Dibujo

    Seleccionamos nuestro assembly y el fichero de comentarios, el tipo de documentación y el formato.

    Para generar el fichero de comentarios de nuestro componente, simplemente entramos en las propiedades del proyecto, en «Build», marcamos «Xml documentation file». Esto hará que visual studio genere un fichero xml con todos los comentarios que hayamos puesto.

    Dibujo2

    Como resultado tendremos una documentación con el siguiente formato:

    Dibujo3 

     

    Dibujo4

     

    Si queremos crear la ayuda en ficheros tipo chm necesitaremos tener instalado “htmlhelp workshop”, que es el módulo de Microsoft para crear ficheros “chm”.

    Errores al instalar Employee Portal de Dynamics NAV

    Recientemente he ayudado a montar el Employee Portal sobre un wss2 contra un Microsoft Dynamics Nav 4 y me he encontrado algunos “problemillas” que parecen ser bastante comunes en este mundo.

    Por lo que he podido comprobar la documentación de Microsoft sobre este producto es muy escasa, y los manuales de instalación son demasiado ligeros.

     

    El primer error que me encontré al entrar al portal fue el siguiente: “No se pueden obtener los permisos necesarios”. Por supuesto este no era un error de wss2, sino del portal.

    Motivo: Al parecer este error se produce cuando hemos instalado el módulo de Employee portal antes que el wss2.

    Solución: Desinstalar el paquete del employee portal, después desinstalar el wss2, y después volver a instalar el wss2 y por último el paquete del employee portal.

     

    Una vez conseguí que funcionara el wss2 sin problemas e instalar el NAS conseguí construir un sitio con la plantilla NEP y me encontré con el siguiente problema: “Communication error (10114): No reply received from Back End System (Time Out)

    Motivo: Este error puede producirse por varias causas. El problema es se produce un Timeout en la página porque los WebParts de NEP no conseguían comunicar con el NAS.

    Solución: Como puede producirse por muchos motivos, os aconsejo los siguientes pasos:

    · Comprobar el log de aplicaciones del servidor y buscar errores o advertencias producidas por el Employee Portal

    · Revisar los usuarios utilizados en la ejecución del wss y del NAS.

    · Revisar que el NAS esté iniciado correctamente. Cuando el NAS arranca correctamente deja una marca en el log de aplicaciones de Windows.

    · Revisar la configuración de seguridad de las colas MSMQ y los nombres de las colas en la configuración del NEP en Navision.

    · Revisar la configuración del NEP en el Web.Config del sitio. Revisar los nombres de las colas MSMQ y la configuración del timeout.

    · Revisar que hayais generado el par de claves de intercambio necesarias, y que esté arrancado el servicio de intercambio.

    · En mi caso el problema estaba en era que no encontraba la dll xp_ndo.dll.

    Algunos enlaces sobre el error:

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

    http://www.msdynamics.de/viewtopic.php?t=4690

     

    Error «The extended stored procedure xp_ndo_enumusergroups in the library file xp_ndo.dll, is not available on the <Servername> server”.

    Motivo: Navision no encuentra la dll xp_ndo.dll que necesita el cuando conecta en modo integración de Windws contra una bbdd SqlServer.

    Solución: Copiar la dll al directorio bin del SqlServer. La dll la podeis encontrar en el cd de instlación en el directorio $Sql_espxp_ndo.exe

    Algunos enlaces sobre el error:

    http://blog.configmaker.net/?p=27

     

    Pero al instalarla me daba otro error más: “Error al carga xp_ndo.dll no se ha podido encontrar alguna de sus dependencias

    Motivo; los procedimientos almacenados estaban registrados referenciando a la dll en un path erróneo.

    Solución: Borrar los procedimientos y volver a crearlos con el path adecuado.

    Algunos enlaces sobre el error y el anterior:

    http://dynamicsuser.net/forums/p/11027/33937.aspx

    http://www.binaryrefinery.com/main/CommentView,guid,8fbfd400-c032-4107-8ad6-4335f1714b06.aspx

    http://www.binaryrefinery.com/main/CommentView,guid,8fbfd400-c032-4107-8ad6-4335f1714b06.aspx

     

    En unos días os contaré mis experiencias con este producto. En breve también montaremos el Employee portal sobre un wss3 contra un Dynamics Nav 4 y después sobre un wss3 contra un Dynamics Nav 5. Ya os contaré que tal.