lunes, 29 de diciembre de 2008

Operaciones con Stsadm

Siguiendo con el hilo del post anterior para ayudar en la introducción con Sharepoint, os dejo un enlace con las operaciones que se pueden realizar con Stsadm por categorías, creo que os será más útil que enumeradas alfabéticamente.

http://technet.microsoft.com/en-us/library/cc262643.aspx

Definir Lookup Site Columns desde una Feature

Otra de las sorpresas que nos guarda Sharepoint son los campos lookup. Los campos lookup nos permiten tener desde las listas referencia a valores de otra listas. El problema viene cuando queremos crear una feature que contenga un tipo de campo Lookup para poder exportarlo a otro entorno. Esto se debe a que la definición de este tipo de campos lleva asociada el GUID de la lista y el GUID del web site donde se aloja, por lo que al exportarlo a una colección distinta no podremos hacerlo ya que la instancia de la lista de referencia tendrá un GUID distinto.

Googleando un poco he encontrado varias soluciones a esta carencia de sharepoint:

  • Definición del campo a nivel de lista en lugar de un site column
  • Creando un Feature Receiver que recalcule el id de la lista de referencia

Definición del campo a nivel de lista en lugar de un site column

Según algunas referencias de internet (http://blogs.msdn.com/joshuag/archive/2008/03/14/add-sharepoint-lookup-column-declaratively-through-caml-xml.aspx) en lugar de indicar el GUID de la lista en el campo "List", podemos indicar la URL de la lista. Lo malo es que lo que no dicen es que esto no funciona con los site column's, ya que solo es válido para columnas que definamos asociados a la propia lista.

Creando un Feature Receiver que recalcule el id de la lista de referencia

Consiste en recalcular el GUID de la lista de referencia al activar la característica.

Crearemos nuestro site column de forma normal y en la propiedad "List" indicaremos el nombre de la lista (no url). Esto hará que se cree el site column pero con una referencia errónea, por lo que al intentar utilizarlo nos dará un error al no encontrar la lista. Por lo que asociaremos a nuestra feature un FeatureReceiver que busque el guid de la lista en el sitio donde se está creando y lo reasigne al campo.

<?xml version="1.0" encoding="utf-8"?>
<Elements xmlns="http://schemas.microsoft.com/sharepoint/>
<Field Type="Lookup"
DisplayName="Locations"
Required="FALSE"
List="LocationsList"
ShowField="LinkTitleNoMenu"
UnlimitedLengthInDocumentLibrary="FALSE"
Group="COBDemo"
ID="{6F26090A-C2AE-44d7-8F70-EE1663FE29F1}"
SourceID="{8c066b26-5a3e-4e1b-85ec-7e584cf178d7}"
StaticName="Locations"
Name="Locations"
/>
</Elements>

<Feature xmlns="http://schemas.microsoft.com/sharepoint/ Id="B188E645-F989-4baa-A109-D2313648432E"
Title="COB.Demo.ListBasedSiteColumns"
Description="Creates one of more site columns which get their data from lists (lookup fields).
The main definition of the columns is in CAML schema, but a feature receiver is used to fix up
the reference to the list. Both the feature and assembly deployment (to the GAC) are handled by COB.Demo.ListBasedSiteColumns.wsp."
Scope="Site" Hidden="FALSE"
Version="1.0.0.0"
ReceiverAssembly="COB.Demo.ListBasedSiteColumns, Version=1.0.0.0, Culture=neutral, PublicKeyToken=417a990752680f01"
ReceiverClass="COB.Demo.ListBasedSiteColumns.FeatureReceiver"
>
<ElementManifests>

................
</ElementManifests>
<Properties>
</Properties>
</Feature>

Existe un proyecto en codeplex SP2007LookupFields que implementa el FeatureReceiver que lo hace por nosotros. Solo tenéis que descargarlo, instalar el assembly y asociarlo en nuestra Feature.

Aunque existe otra solución que mejora SP2007LookupFields que hace que no tengas que indicar la ruta del fichero xml con la definición: http://mexicanratdog.wordpress.com/2007/10/01/create-lookup-site-columns-target-lists-through-a-feature/ ,en este ejemplo utilizan la propia definición de la Feature y buscan todos los campos del Tipo Lookup y les intenta cambiar el valor de la propiedad "List". Muy recomendable !!!

Solo una pequeña cuestión en este proyecto, y es que tiene un pequeño error que hace que se pueda realizar un Dispose sobre el RootWeb, el trozo de código que debéis corregir es el siguiente:

En lugar del código siguiente:

using (currentWeb)

{

........

}

lo sustituiremos por :

try{

.........

}finally{

if (!currentWeb.IsRootWeb)

currentWeb.Dispose();

}

A la hora de modificar el campo lookup desde el FeatureReceiver en ocasiones puede que tengamos problemas al borrar y volver a crear el site column ya que puede que tengamos una instancia y no podamos eliminarla. Para solucionarlo podemos reemplazar el código de la función createLookupColumn por el siguiente basado en el artículo: Field Definition Schema

private void createLookupColumn(SPWeb web, string sColumnDefinitionXml, string sColumnName)

{

SPFieldLookup lookupColumn = (SPFieldLookup)web.Fields[sColumnName];

lookupColumn.SchemaXml = sColumnDefinitionXml;

lookupColumn = (SPFieldLookup)web.Fields[sColumnName];

lookupColumn.LookupWebId = web.ID;

lookupColumn.Update();

}

jueves, 25 de diciembre de 2008

Quick reference Sharepoint

¿Por dónde empiezo?, esta es la respuesta que queremos dar a los consultores que acaban de llegar por primera vez a un proyecto en Sharepoint. Esta guía os servirá para encontrar los recursos básicos y facilitaros el aprendizaje de este producto.

Podéis bajaros el documento original en: http://blogs.renacimiento.com/mcortes/Documentos/Quick%20reference%20Sharepoint.docx

Conceptos

¿Qué es Microsoft Office SharePoint Server?

Primera introducción de Microsoft Office Sharepoint Server 2007

Libro Microsoft SharePoint 2007 UNLEASHED

Libro básico para iniciarnos en Sharepoint Server 2007

TechNet Tech Center for Microsoft Office SharePoint Server 2007

Centro de recursos para Microsoft Office Sharepoint Server 2007

TechNet Tech Center for Windows SharePoint Services 3.0

Centro de recursos para Windows Sharepoint Services 3

Recopilatorio Posts Plataforma SharePoint Blog CIIN

Recopilatorio de enlaces a post acerca de Sharepoint. Aunque en su página los podéis encontrar actualizados

Implementing Microsoft® Office SharePoint® Server 2007 and Windows® SharePoint® Services 3.0 Solutions

Guía de conceptos muy completa

Infraestructuras y Arquitectura

SharePoint Server TechCenter

Portal en TechNet acerca de MOSS2007

Planning and architecture for Office SharePoint Server 2007

Referencia básica acerca de cómo diseñar nuestra implantación

Deployment for Office SharePoint Server 2007

Referencia acerca del despliegue de portales en Sahrepoint.

Biblioteca técnica de Windows SharePoint Services 3.0

Portal en TechNet acerca de Wss3

Backup, Recovery, and Availability Resource Center for SharePoint Server 2007

Portal con recursos y herramientas para el mantenimiento de sistemas Sharepoint

Plan for data protection and recovery

Contiene varias guías para el mantenimiento y restauración de la bbdd de Sharepoint

SharePoint Capacity Planning Tool

Herramienta para ayudarnos a estimar los recursos que necesitaremos para nuestra implantación

Desarrollo

Introduction to SharePoint Products and Technologies for the Professional .NET Developer

Artículo de introducción a la programación sobre MOSS2007. Contiene una gran cantidad de enlaces a otros tutoriales y recursos.

Libro Inside Microsoft Windows SharePoint Services 3.0

Libro imprescindible para desarrollar y entender cómo funciona Sharepoint. Aunque desarrolles con MOSS, debes leer antes este libro.

Contiene ejemplos muy útiles para aplicar en proyectos.

Preparing the development environment

Posta cerca de cómo preparar nuestros entorno de desarrollo con VStudio 2005

Sharepoint Developer Introduction

Portal de inicio con enlaces a ejemplos y recursos

Development Tools and Techniques for Working with Code in Windows SharePoint Services 3.0

Introducción al desarrollo en WSS3

Sharepoint Services Developer Center

Portal con recursos para desarrolladores de Wss3

SharePoint Server 2007 Developer Portal

Portal con recursos para desarrolladores de MOSS2007

Windows SharePoint Services 3.0: Software Development Kit (SDK)

SDK para Windows Sharepoint Services 3

SharePoint Server 2007 SDK: Software Development Kit

SDK para Microsoft Office Sharepoint Server 2007

Screencast de MOSS2007 y WSS3

Página con los enlaces para descargar vídeos acerca de MOSS2007 y WSS3

Technical Articles WSS3

Enlaces a artículos técnicos de WSS3 en MSDN

SharePoint Products and Technologies Customization Best Practices

Enlaces a Best Practices en MSDN

patterns & practices SharePoint Guidance

Guía de pattenrs&Practice para el desarrollo en Sharepoint, con ejemplos y enlaces

Patterns&practices en MSDN

Guía de pattenrs&Practice para el desarrollo en Sharepoint

Best Practices: Using Disposable Windows SharePoint Services Objects

Recomendaciones para liberar correctamente los recursos

Best Practices: Common Coding Issues When Using the SharePoint Object Model

Recomendaciones al manejar el modelo de objetos de Sharepoint

Herramientas

Stsadm

Herramienta básica para la gestión de la granja

SharePoint Administration Toolkit

VSeWSS

Extensiones de Sharepoint Para Visual Studio 2008. Imprescindible!!

SharePoint Manager 2007

Herramienta de gestión muy completa. Imprescindible!!!

CAML Query Builder

Herramienta para construir la consultas CAML. Imprescindible!!

EventHandler Explorer

Herramienta para gestionar los EventHandlers de forma visual

Imtech Fields Explorer

Herramienta muy útil para construir features

Comunidades

Sharepoint community Portal

Portal con una gran cantidad de referencias y recursos

SharepointBlogs

Blogs temáticos de Sharepoint, encontrareis las últimas noticias, actualizaciones, recursos, ejemplos, etc.

Blogs renacimiento

Blogs de renacimiento, podéis encontrar a grandes profesionales con gran experiencia en el mundo de Sharepoint

Blogs de Geeks

Blogs de profesionales de todo tipo, hay una gran cantidad de artículos acerca de sharepoint.

Sharepoint User Groups Spain

Portal de usuarios de España

Blog del CIIN

Blog del Centro de Innovación en integración de Navarra. Contiene una gran cantidad de enlaces sobre Sharepoint.

Sharepoint Pedia

Portal con ejemplos y referencias para la gestión y desarrollo en Sharepoint

Certificaciones

MCTS: Microsoft Windows SharePoint Services 3.0 – Application Development

Imprescindible para desarrolladores. Nos permite adquirir los conocimientos básicos.

MCTS: Windows SharePoint Services 3.0 – Configuration

MCTS: Microsoft Office SharePoint Server 2007 – Application Development

MCTS: Microsoft Office SharePoint Server 2007 – Configuration

Microsoft Certified Master: Microsoft Office SharePoint Server 2007

martes, 2 de diciembre de 2008

Ghosted o unghosted, ¿Quién corre más?

Siguiendo con el anterior artículo "Page Templates con ayuda del Sharepoint Designer", he caído en la cuenta de la cantidad de personsalizaciones que se hacen sobre sharepoint sobre entornos de producción sin que seamos conscientes de cómo afecta esto a nuestros sistema.

Esta claro que una personalización para un sitio con una relativa carga de usuarios es incluso hasta aconsejable ya que el coste en desarrollo podría penalizarnos demasiado. Pero si lo que nos estamos planteando es el desarrollo de una página corporativa o extranet, deberíamos tener en cuenta que una gran volumen de usuarios podría provocar una denegación del servicio.

Para ver como afecta al rendimiento la forma de diseñar la solución he estado realizando una serie de pruebas sobre un wss3. Para ello he creado un aplicación web con una colección y dos listas con unos mil elementos y varios campos con valores aleatorios. Una vez creadas las listas, realicé varias pruebas:

  • Una página ghosted, sin editar ni customizar
  • Una página ghosted con edición de contenido
  • Y una página unghosted

La prueba de carga consistía en realizar una consulta a todos los elementos de la lista llamando a AllItems, y después consultar un elemento de la lista distinto en cada test, con un incremento de carga progresivo de 50 usuario cada 30 segundos por un tiempo máximo de 10 minutos. Estas pruebas se han repetido varias veces cada una y reiniciando el servidor en cada paso.

No os fijéis en los resultados numéricos absolutos, sino en las diferencias entre cada escenario. Esto se debe a que las pruebas están realizadas sobre un wss3 contra una bbdd alojada en la misma máquina, por lo que he tenido que bajarle los hilos del workerprocess para que deje tiempo de proceso al SqlServer.


Una página ghosted, sin editar ni customizar


Podemos observar como el proceso se ha comportado relativamente bien hasta el minuto 6'45, donde ha empezado a aumentar el tiempo de respuesta producirse errores de denegación de servicio.También se aprecia como ha conseguido mantener los tiempos de respuesta aun con una carga elevada. Aunque los errores han ido creciendo poco a poco no han adquirido un número elevado teniendo en cuenta que tenía una carga de unos 800 usuarios, por lo que la respuesta a los usuarios sería relativamente aceptable.




Una página ghosted con edición de contenido


Vemos como en este caso los errores de solicitud se empiezan a producir mucho antes, justo a partir del minuto 5'50'' con una carga total de unos 560 usuarios. Además el tiempo de respuesta y los errores han seguido creciendo.



Ya podemos observar como este tipo páginas tiene un rendimiento 30% inferior y una media de solicitudes por segundoinferior al anterior.

Y una página unghosted

En este caso se ha customizado con Sharepoint Designer la página AllItems de la lista y su masterpage.





Este escenario, ha resultado ser muy parecido al anterior pero fijaros que con tiempos de respuesta más elevados y con una carga de cpu muy superior. Si observáis la línea azul (tiempo de respuesta) existe un salto que coincide con la falta de respsuesta del servidor al VisualStudio debido a un consumo elevado..

En este caso ha conseguido un rendimiento aceptable con una carga de unos 600 usuarios, un 25% inferior al primer caso.


Conclusiones

Anque los ejemplos han sido casos muy sencillos, en un entorno real con muchas personalizaciones habríamos visto como la diferencia habría sido mucho mayor. Tener en cuenta además que esto se ha realizado en una granja con un solo servidor, si hubiéramos tenido varios frontales el rendimiento de las páginas ghosted se incrementaría de forma proporcional al incremento de servidores, pero en el caso de las unghosted crecería en una menor medida debido a que la mayor parte del procesamiento se invertiría en consultar la bbdd de contenidos.

miércoles, 26 de noviembre de 2008

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 recome

ndable 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.

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.

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=""/>

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.

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.

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

martes, 25 de noviembre de 2008

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.

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


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.

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

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.


Al menos por lo que he visto tiene buena pinta.

Nuevas herramientas para los arquitectos
Architecture explorer

Model proyect





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.




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


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!!

martes, 18 de noviembre de 2008

Microsoft Certified Master en MOSS2007

Acaba de salir la nueva certificación para MOSS Microsoft Certified Master: Microsoft Office SharePoint Server 2007, consiste en un paso previo al MCA (Microsoft Certified Architect) pero especializado en MOSS2007.

Consiste en un curso presencial de tres semanas con expertos en el producto, con charlas, laboratorio y esas cosas.

Esta certificación te exige tener los 4 MCTS de Sharepoint , hablar un buen inglés (seguro que Enrique ya está en ello), además de unos 20.000$.

 

Ya están disponibles varios Certified Master:

  • Exchange 2007
  • Sqlserver2008
  • MOSS2007
  • Office Communication 2007

 

buffff, espero que no me pongan una de estas como objetivos,

martes, 21 de octubre de 2008

ReportViewer un gran desconocido

¿Cómo construirías un Report sobre .NET sin coste adicional de licencias?, si has contestado "con ReportViewer" la muñeca chochona para tí.

Como algunos compis no tienen claro como funciona os he preparado un ejemplo para que podáis seguir la siguiente explicación.

En mi blog de Renacimiento encontraréis el resto del artículo.

martes, 7 de octubre de 2008

ADAMProfileProvider 1.1.0

Ya está disponible en Codeplex la versión 1.1.0 del ADAMProfileProvider.

Hemos corregido algunos errores y mejorado el control de inicialización.

Podéis encontrar ejemplos en mi anterior entrada acerca de la versión 1.0.0

También podéis visitar la profile en  MSDN donde explica como extender vuestro Profile.

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.

viernes, 29 de agosto de 2008

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.

jueves, 28 de agosto de 2008

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.





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.




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





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”.

jueves, 3 de julio de 2008

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_esp\xp_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.

miércoles, 2 de julio de 2008

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 wss2 antes que el módulo de Employee portal.

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

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_esp\xp_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.

martes, 17 de junio de 2008

Mejora de la productividad con Máquinas virtuales

Los mayores costes de los proyectos son los destinados a recursos. Conseguir que una persona empiece a producir en el menor tiempo posible en un proyecto implica que estamos consiguiendo que es persona  sea más productiva.

Las máquinas virtuales nos dan mucho juego en este sentido, ya no tenemos que tirarnos horas instalando y desinstalando para cada proyecto o tener todo instalado porque no sabes que plataforma o tecnologías te vas a encontrar.

Recientemente he tenido que apoyar a unos compañeros en un proyecto. Nada más llegar me proporcionaron la documentación del proyecto y una máquina virtual con todas las herramientas del proyecto instaladas y configuradas. Esa misma tarde estaba "tirando líneas".

Si no hubieran utilizado máquinas virtuales para trabajar me habría tenido que instalar varias herramientas, más su correspondientes configuraciones y problemas. Posiblemente habría estado un par de días configurando todo o me habría tocado pringar el fin de semana.

Solo hay un inconveniente. Y es que por cada cliente/proyecto tienes que guardar una máquina, con lo que el disco duro que utilizábamos para copiar pelis y fotos, ahora le damos mejor uso, incluso se me queda pequeño.

Se me ha ocurrido una pequeña fórmula de como podríamos calcular cuanto tiempo invierte una persona en preparar su equipo para empezar a producir en un proyecto:

numComponentes (Instalación)H + numComponentes(configuración )H + numComponentes (Errores)H + numComponentes (Apoyo compañeros)H

Ejemplo:

Llegamos a un proyecto en ASP.NET con Ajax, contra un Oracle y un VSS. Suponiendo que tenemos instalado el VStudio y el VSS:

Horas instalación= (0,5 Ajax) + (1 Oracle)

Horas configuración= (0,5 Ajax) + (1 Oracle) + (1 del proyecto VStudio) + (0,1 de VSS)

Horas errores= (0,1 Ajax) + (1 Oracle) + (0,5 VStudio)

Horas de apoyo= (0,1 Ajax) + (1 Oracle) + (0,5 VStudio)

((0,5) + (1)) + ((0,5) + (1) + (1) + (0,1)) + ((0,1) + (1)+(0,5) )+ ((0,1) + (1) + (0,5)) = 6,3 horas para preparar el equipo.

Es decir, que habríamos perdido una jornada solo en preparar la máquina. Además tendríamos que sumar el tiempo en enterarnos del proyecto.

Estaría bien encontrar una tabla con experiencias de tiempos de instalación y configuración.

Buscando un poco he encontrado algunos enlaces curiosos sobre como mejorar la productividad con máquinas virtuales:

http://jdieguez.wordpress.com/2008/03/08/desarrollar-para-sharepoint-siempre-en-virtual/

http://download.microsoft.com/download/9/e/3/9e38b91b-8d40-4b19-aa39-fe3673b83748/Conexiones%201.2%20.pdf

http://www.vmware.com/lasp/pdf/vi_brochure_lasp.pdf

http://www.avansis.es/vmware/productos-workstation.htm

miércoles, 11 de junio de 2008

ActiveDirectoryMembershipProvider contra un ADAM en WSS3

La mayoría de los ejemplos de un provider de seguridad contra un ADAM en sharepoint son en MOSS, por lo que cuando tenemos que implementarlo con WSS3 tenemos el problema que no podemos utilizar los providers de los ejemplos porque son solo para MOSS.

En este post he publicado un ejemplo de como configurar un provider de seguridad contra un ADAM en un WSS3.

martes, 3 de junio de 2008

Asignación CAS de Sharepoint por contexto de usuario

En este blog de geeks podéis encontrar un artículo sobre como configurar los roles de usuario de un elemento de una lista personalizada, y como elevar los privilegios para realizarlo.

lunes, 2 de junio de 2008

Trace flag 4616 is not set on Dynamics Nav 4

Cuando intentamos crear una nueva base de datos desde el cliente Dynamics Nav 4 sobre SqlServer 2005 nos da el error: Tace flag 4616 is not set on DatabaseServer.

Para solucionarlo tenemos que arrancar el servicio de SqlServer con un parámetro que habilite esta propiedad.

Para ello iremos a las propiedades del servicio de SqlServer en la consola de servicios. Paramos el servicio, y en la caja de "Parámetros de inicio" indicaremos el valor "-T4616", y a continuación iniciaremos el servicio.


domingo, 1 de junio de 2008

Opciones personalizadas del QuickLaunch de Wss3 mediante SPNavitaionProvider

Para configurar las opciones del QuickLaunch de Wss3 mediante elementos de listas personalizadas, puedes verlo en un artículo de Geeks.

viernes, 30 de mayo de 2008

Edición rápida desde Sharepoint Designer

El otro día un compañero a través de nuestra herramienta de consulta de conocimiento técnico en Renacimiento nos preguntaba como realizar cambios en las páginas de sharepoint de manera que no saliera la típica distribución.

Os pongo lo que le propuse en un post rápido:

Vista de datos personalizada

Wss3 nos permite visualizar elementos de nuestro sitio con un estilo y una distribución personalizada mediante xsl.

Para ello podemos utilizar el DataFormWebPart.

Seleccionamos Inserta->Controles de Sharepoint->Vista de datos, a continuación nos aparecerá la librería de orígenes de datos configuradas en el sitio actual.

Seleccionamos la lista que queremos mostrar, botón derecho y seleccionamos "Mostrar datos".

A continuación nos aparecen los campos de la lista. Seleccionamos los que deseemos y en la parte superior pulsamos "Insertar campos seleccionados como.."

Ahí podremos insertar una vista de un elemento o varios.

Una vez configurado el origen de datos del webpart, podremos editar el xsl, añadiendo, moviendo lo que queramos.

Con Xsl podremos aplicar sobre el contenido condiciones if, bucles y fórmulas.

El DataFormWebPart además nos permite aplicar filtros, parámetros, conexiones, orden, nº de elementos visibles, paginación.

Formulario de edición personalizado

Si queremos que en nuestra lista al editar/visualizar un elemento aparezca un formulario con la distribución propia podemos utilizar los formularios de lista personalizada de Shrapoint.

Para ello iremos a la opción Insertar-> Controles de sharepoint ->Formulario de Lista personalizada.

A continuación nos preguntará la lista para la que queremos el formulario, y el tipo de formulario.

Una vez seleccionado, nos construirá un formulario con los campos de la lista, donde podremos cambiarlos, modificarlos, añadir, borrar, etc.

Incluso podemos hacer que un campo solo sea lectura.

Una vez terminado el formulario tendremos que configurar la lista para que cuando entre a editar/visualizar un elemento nos redirija a nuestro formulario de forma automática.

En el árbol de elementos del sitio, seleccionaremos la lista, botón derecho, propiedades.

Seleccionamos "Archivos auxiliares" y "elemento" (en caso de haber seleccionado anteriormente "elemento" en el formulario), y buscaremos el fichero para la acción que hayamos creado (edición, nuevo, visualización).

De esta manera por ejemplo, cada vez que se edite un elemento o se acceda a la dirección "Lists/MiLista/EditForm.aspx" nos redireccionará a nuestra página automáticamente.



Si vais a modificar el DispForm de una lista directamente con este mecanismo OJO!!!!, hay un bug o error o algún tipo de problema que hace que si modificas la página estándar DispForm se estropea la referencia de la lista y ya no puedes visualizar los elementos desde el formulario AllItems.aspx.

Para solucionarlo, teneis que hacer una copia de DispForm, modificar la copia y después asignar el nuevo fichero a la acción DispForm de la lista.

También tener en cuenta que cuando cambias un fichero con Designer lo estáis poniendo unghosted, por lo que esto solo vale para pequeños portales o demos. No os aconsejo hacer un proyecto serio solo utilizando Designer.

jueves, 22 de mayo de 2008

¿De qué me sirve una certificación Microsoft?

El otro día Jorge Diéguez me preguntaba el sentido de las certificaciones de Microsoft, “¿qué le aporta a mi empres que haga una certificación?”.

Yo tengo dos certificaciones de Microsoft: MCTS 70-528 Desarrollo de aplicaciones web y MCTS 70-541 Desarrollo de aplicaciones sobre WSS3. Mi experiencia ha sido muy positiva.

Las certificaciones dependen de quien las avale, no es lo mismo una certificación Microsoft que una de Oracle.

En el caso de Microsoft creo que lo que intentan es que la gente tenga una visión global sobre un tema determinado. En realidad con una certificación no eres experto en nada, pero si te proporciona una visión global que te permite aplicarla en los proyectos.

Al tocar muchos temas en las certificaciones, cuando estás delante de un cliente eres capaz de aplicar y entender esa visión global al proyecto. En mi caso, utilizo los libros de las certificaciones como guía de referencia.

¿Qué le aporta a la empresa?

Productividad. Esta es una palabra que todo el mundo comenta, pero pocas empresas emplean esfuerzos en conseguirla.

La productividad depende de varios factores: El carácter del empleado, el ambiente, las metodologías de trabajo, la motivación, los conocimientos, el uso de herramientas, etc..

La formación es un factor muy importante en la productividad. Cuanta más formación tengamos en nuestra materia mejor sabremos abordar los proyectos y conseguiremos soluciones estables, rápidas y reutilizables.

Por ejemplo: Si a un junior en ASP.NET le mandaras hacer un portal que hiciera que validara el acceso a las páginas en función del usuario, lo más probable es que haga un desarrollo a medida y lo vaya replicando por todas las páginas. Esto supondría un coste de cómo mínimo un par de jornadas. Sin embargo si hubiera estudiado la certificación en desarrollo de aplicaciones ASP.NET (70-528), sabría que podría hacerlo configurando el web.config.

Alguna vez tuve que ayudar a elaborar un plan formativo que formara parte de los objetivos anuales y llegamos a un diagrama similar al siguiente:

El concepto se basa en que cuando un empleado esté acabando un proyecto, antes de asignarle otro al menos reciba algún tipo de formación interna/externa/autoformación.

Con esa formación, el empleado habrá adquirido una serie de conocimientos que podrá aplicar en mejorar ciertos módulos o herramientas para ser utilizados en el siguiente proyecto.

Es una idea muy sencilla que en Renacimiento intentamos aplicar. Como en Renacimiento vendemos “Conocimiento y Calidad” gran parte de nuestros objetivos se basan en formación. Es decir que la empresa nos reserva ciertas horas al año para nuestra formación. Además disponemos de “listas de conocimientos” y expertos en determinadas áreas (tenemos a Roberto González MVP). Yo por ejemplo tengo que conseguir 3 certificaciones este año.

¿Qué me aporta a mí Microsoft?

Por un lado conocimiento para poder crecer profesionalmente, también satisfacción personal, nos aporta confianza ante los clientes y una visión global sobre las tecnologías Microsoft.

No creo que una empresa se fije exclusivamente en el nº de certificaciones para contratar a una persona. Aunque en determinados casos, si que es un valor adicional, por ejemplo, en Renacimiento buscamos personas con Certificaciones en MOSS o WSS. En este caso, si estaría aportando valor a la persona.

Nuevo plan MCP

Hace poco Microsoft cambió su plan de certificaciones. Actualmente están conviviendo el plan antiguo con el nuevo. Se está dando el caso que un MCAD tiene muchísimo más valor para Microsoft que un MCTS (Microsoft Certified Tecnology Specialist) que haya hecho el mismo nº de exámenes en el plan nuevo.

Lo que han hecho es especializar mucho más las certificaciones.

En el siguiente cuadro os muestro las certificaciones más relevantes en cuanto a desarrollo.

Os recomiendo que hagáis al menos una certificación. Si necesitáis documentación para prepararos la certificación 70-541 contactar conmigo en mi mail mariocortesflores@hotmail.com

miércoles, 21 de mayo de 2008

Múltiples providers de validación en wss3

Actualmente estamos en un cliente en el que hemos tenido que configurar un provider de seguridad en wss3. El problema que nos encontramos era que cuando se monta un provider que no lleva validación “Windows”, es decir Kerberos o NTLM, no funciona la integración con las aplicaciones clientes que lo consumen.
Lo que nos pasó fue que cuando intentamos conectar con Sharepoint Designer, con el provider a medida activado nos daba error al abrir el sitio.

Primero nos decía:

Y cuando marcas en la página de login “iniciar mi sesión automáticamente”, y vuelves a intentar abrir el site nos da el error de conexión, en nuestro caso con detalle en blanco.

De modo que como no podíamos quitar el provider a medida, pero necesitábamos trabajar y configurar sobre el portal, decidimos crear dos zonas de modo que en una (Default) validara por el provider a medida y por la otra zona (Custom) validara mediante NTLM.


How to

Os pongo un ejemplo sobre MOSS, pero con WSS también funciona:

1º Tenemos que configurar el provider de seguridad en nuestra aplicación web de wss3.

2º Una vez realizado haremos una extensión de nuestra aplicación web con otro puerto y seleccionaremos la nueva zona. Esto significa que cada zona tendrá una url distinta!!!!.

Al extender la aplicación, nos creará otra aplicación consumiendo de la misma bbdd de contenidos. Lo bueno es que al extender la aplicación nos habrá creado la nueva con el mismo pool de aplicación que la WebApp original. Tendreis que verificar que la identidad del pool es válida para las dos zonas, ya que podrías tener varios security providers que necesiten identidades de usuarios distintas.

3º Ahora solo tenemos que entrar a revisar el provider de nuestra aplicación web original y veremos que tenemos dos configuraciones de seguridad con las dos zonas.

También podremos configurar una zona con acceso anónimo y otra no.

En nuestro caso la url original era http://testpcserver/ . Al crear la zona tuvimos:

http://testpcserver/

http://testpcserver:18799/

Cuando vayamos a enumerar las aplicaciones web veremos que solo tenemos una, la original que extendimos.

Una vez creada y configurada la zona, ya podremos conectar con Sharepoint designer a la url de la nueva zona.


Inconvenientes

El problema es que al crear dos aplicaciones web, tendremos dos directorios virtuales y dos ficheros de configuración, por lo que si agregamos o modificamos un elemento directamente de modo que tendremos que mantener las dos instancias.

Por ejemplo: si queremos tener un web part en el directorio bin en lugar del gac, tendremos que mantener el fichero en los dos directorios bin de las aplicaciones web y asegurarnos que los webconfig tienen el webpart registrado.

martes, 13 de mayo de 2008

Microsoft Dynamics Mobile 1.1 released

Leticia Pérez Franganillo me acaba de pasar unas presentaciones sobre Microsoft Dynamics Mobile 1.1. MDB es una aplicación de movilidad integrada con dynamics que nos permite crear pedidos de venta, ver nuestros itinerarios y algunas cositas más.

Con MDB Nav 1.1 Microsoft quiere dar una solución temporal al problema que tiene con Dynamics Nav en temas de integración con sistemas externos.

Actualmente Microsoft está perfilando su nueva versión de Dynamics sobre .NET con WPF (mirar a partir del minuto 17) , está versión se centrará en la mejora tecnológica del producto. Esta mejora permitirá resolver muchísimos problemas técnicos que existen actualmente con DNav y hace que se pierdan muchísimas oportunidades de negocio.

Como casi no existen soluciones de movilidad integradas directamente (no ficheros) con Dynamics Nav Microsoft le da un pequeño empujón para que los partners se vayan concienciando en que a los clientes no solo hay que ofrecerles Navision. Este es uno de los principales problemas del sector especializado en Navision, solo se dedican a eso, cuando realmente podrían ayudar al cliente ofreciéndoles servicios que le aporten valores a sus negocios.




MDB está basado en los siguiente s componentes:
  • Mobile Framework:
    • Compact Framework 2
    • SqlServerCe
    • Windows Mobile 5 y 6
  • Mobile Server:
    • SqlServer 2005
    • Framework 3
    • Nav SP1 Connector
Para la sincronización de los datos utiliza réplicas de sqlServer y para la integración con Nav utiliza NAS (es decir, que es "monoproceso").
Ya hace un año estube haciendo un conector con Dynamics Nav multiproceso y la verdad es que hay mucho mercado, lo malo es que necesitas la licencia de partner para poder tocar Navision.


Os adjunto unos enlaces por si quereis echarle un vistazo.

Presentaciones: http://www.mobilenug.com/dynamics/Documentos%20compartidos/Forms/AllItems.aspx
Referencias MSDN para desarrolladores: http://msdn.microsoft.com/en-us/library/bb986981(MSDN.9).aspx
Blog del equipo del producto: http://blogs.msdn.com/dynamicsmobile/
Pre-release: http://dynamicsuser.net/files/folders/nav_official/entry98111.aspx
Si estais registrados en la partnersource:
https://mbs.microsoft.com/downloads/partner/mobile/factsheets/MobileDevelopmentTools_FactSheet.pdf
https://mbs.microsoft.com/fileexchange/?fileID=10508464-da1d-4ab4-9066-fa5a956f0252
https://mbs.microsoft.com/fileexchange/?fileID=4e8c7997-5185-415a-9ae6-5103a83b8fc1