martes, 30 de septiembre de 2008

Error al intentar abrir un proyecto desde Proyect Server

Síntoma:

Cuando acabas de guardar un nuevo proyecto, y te permite guardarlo, e incluso publicarlo. Pero luego cierras el proyecto y no te permite abrir no indicando donde este el origen del error. Si puedes publicar un proyecto y luego no abrirlo son señales que hay algo que esta impidiendo que puedas comunicarte con el Proyect Server, y tengas instalado algún firewall en tu computador, muy probablemente esta es la causa.

Solución:

La solución es avisar al departamento de IT, para que te ayude, o configurarlo tu o simplemente desintala dicho FireWall a nosotros nos sucedió con el firewall de Norton que muy restrictivo por default, por la premura de tiempo y como no era el estándar de la empresa, procedimos desintalarlo, y esto soluciono el problema con la comunicación de Proyect Server. Si es el Firewall standard que utiliza la compañía deberás indagar el puerto conque se comunica Project Server y habilitarlo en el firewall para poderte comunicar adecuadamente.

Espero te ayude esta rápida solución. Hasta la próxima!.

Manolo Herrera

Reuniones de la comunidad en Octubre 2008

Quiero hacerles formalmente la invitación a las próximas reuniones de Octubre del 2008.

Tendremos con nosotros a nuestro MVP Luis Alfaro con el tema F# (wikipedia: is a multi-paradigm programming language, targeting the .NET Framework, that encompasses functional programming as well as imperative object-oriented programming disciplines.) el miércoles 8 de octubre.

Y continuaremos la tercera parte de la mesa redonda con nuestro amigo Cristian Prieto el cual hablará sobre disciplinas y herramientas de prueba como lo son: TDD, BDD, Mocking, etc. El 22 de Octubre.

Así que no faltes a ninguna de ellas y sumate a los desarrolladores que estamos hambrientos de conocimientos.

Te esperamos,

Manolo Herrera

lunes, 29 de septiembre de 2008

patterns & practices: App Arch Guide project ahora disponible!

La nueva guía de los amigos de P&P sobre las aplicaciones construidas sobre el .NET Framework  ofrece una guía a nivel de diseño sobre la arquitectura de las aplicaciones.  Enfocada en los tipos de aplicaciones mas comunes: Aplicaciones en capas, componentes, servicios y  llevan al lector sobre las características claves del diseño de cada una de ellas.

Para los interesados esta es la dirección: http://www.codeplex.com/AppArch

Una imagen sobre el marco de trabajo conceptual de la guía.

image

 

Saludos,

 

Manolo Herrera

sábado, 20 de septiembre de 2008

Avanzando en el desarrollo de SharePoint a Mejores Practicas y Modelos de desarrollo

Desde que inicie mi carrera de aprendizaje en SharePoint pude notar la ausencia de buenas prácticas de desarrollo con el Modelo de Objectos de SharePoint que para nada es amigable y abierto, sino rígido y algo limitado para aplicar TDD y una forma desconectada y desacoplada para probar nuestro lógica dentro de dicho modelo.

Hay una necesidad imperante de mejorar este modelo actual del cual tenemos de coexistir y desarrollar por la gran demanda que hay hoy en día de esta plataforma muy productiva de Portales y Colaboración.

Motivado por esta imperiosa necesidad, por la iniciativa de los amigos de Patterns & Practices con su SharePoint Guidance para SharePoint, por el articulo de Francis Cheung sobre "Unit Testing para SharePoint Apps", y por ultimo por la influencia de El Diseño Basado en Dominio, me veo en la obligación de publicar este y una serie de artículos que desarrollare para contribuir a el esparcimiento de mejores prácticas de desarrollo para el modelo de objetos de SharePoint, junto con soluciones que ayuden y den como resultado la practica de TDD y patrones dentro de este ambiente deliberadamente hostil hasta esta versión.

Iniciemos con describir a lo que nos enfrentamos:

image

En español, es difícil separarnos del ambiente conectado, y emularlo para nuestras pruebas unitarias o Unit Testing, porque las interfaces (fundamental para Implementar Mocking dentro de Unit Testing) son escasamente utilizadas dentro del modelo de objetos de SharePoint.

Para incrementar la dificultad están selladas, es decir no podemos sobrescribir, ni sus propiedades, ni sus métodos, ni tampoco heredaras (esto se hizo apropósito me imagino y con justificada razón para asegurar el buen comportamiento, pero dejaron a las pruebas unitarias entre otras cosas).

Ajuste de penas!, como por si fuera poco los constructores de las clases son internos por lo que no podemos crear en memoria para emular estos objetos fuera del contexto conectado las clases del modelo de SharePoint, esto si que fue adrede colocar esta complejidad (Algo desconfiados mis amigos del Equipo de SharePoint).

Y para las colecciones no tiene métodos Add y no implementan el IEnumerable para agregar picante el problema, Es decir no puedo utilizar LinQ en la colecciones de SharePoint porque no implementan la interfase mas básica de las colecciones. Esto si es el colmo!, pero no se asuste amigo, hay formas de usar LinQ dentro de SharePoint, aunque no sean las nativas (Vea este enlace LintQ to SharePoint).

image

Que opciones para realizar pruebas unitarias tenemos entonces!:

Bueno primero pues nos que damos con lo establecido (Status Quo), es decir contra una instancia en vivo de SharePoint, Ugh!. Aunque ya podemos instalar SharePoint en Windows Vista, para realizar un prueba sencilla necesitamos hacer un deployment o por lo menos una copia de dll nuevo, No way!, para esto esto todo este discurso para encontrar otra solución.

Una solución elegante, pero tediosa y difícil es crear clases Wrapper y Facade para separar el modelo conectado con las pruebas unitarias a esto le llamamos "Separation of Concers", hablaremos mas adelante de este tema. Pero que si podemos generarlo con la ayuda de una aplicación, ya no suena tan mal y esta solución pueda que se las presente en siguientes post en mi blog. Pero por le momento diremos que es una solución no tan viable si la desarrollamos a manita.

Hay por allí unos magos que inventario una herramienta para eliminar las barreras de constructores internos y clases selladas para podemos emular estos objetos y desarrollaron esta herramienta denominada Typemock Isolator la cual cubre el 80% de código dentro del modelo de objetos de SharePoint, el cual es un porcentaje aceptable para asegurar la tranquilidad de los desarrolladores en la plataforma SharePoint, especialmente los que hoy en día no validan nada y esta corrigiendo constantemente sus errores por no tener cobertura de pruebas de su código.

image

Así que la motivación para el cambio es esta frase: "La separación de las áreas de preocupación, de los aspectos", para concentrarnos por separado en cada una de ellas. Esto implica la independencia y separación de responsabilidad de cada objeto dentro de mi área de preocupación, aspecto o concern. Y esto es lo que pretendemos hacer en el modelo de objetos de SharePoint, es separarnos de el para probar nuestra lógica de este modelo y al mismo tiempo estemos integrados para que luego encajando los concerns (mi lógica y el modelo de objetos de SharePoint) obtengamos una aplicación que funcione, y que este asegurada en un buen margen para nuestra tranquilidad y la mantenibilidad de nuestra solución.

image

Así que unidos todos estos argumentos desarrollamos el siguiente modelo(gracias a nuestro amigo Cheung):

Utilizar el patrón MVP o Model View Presenter que lo que hará para el caso de los WebParts dentro de SharePoint es separar la Vista o Control de Usuario del Presentador y este a su vez del Modelo (mi lógica de negocio el dominio). Este patrón esta muy bien documentado en la red y básicamente podemos hacer lo siguiente de una manera muy práctica y ligera:

Definimos dos interfases, que nos servirán de base para aplicar el patrón y luego para utilizar de plantilla para la interfase particular de cada WebPart:

public interface IViewBase
{
string MensajeError { set;}
}

Esta propiedad será la base para recordarnos que la forma para acceder la vista o user control será a través de una interfase que herede de esta y que por lo menos maneje los mensajes de error para la interfase de usuario (disculpe si le hablo en chino pero es de madrugada y no quiero hacer un libro, sino solo un articulo de este tema).

La segunda interfase será para el presentador el que va a contener la lógica del control no así del dominio que es una capa mas abajo. Este es el código:

public interface IPresenterBase
{
void SetView(IViewBase view);
}

Esta interfase me recordará que debo implementar en mi clase Presentador este método donde debo de pasarle la instancia de mi vista al presentador, de esta forma:

public class TareaPendientePresentador : IPresenterBase
{
private IViewBase _view;
public void SetView(IViewBase view)
{
_view = view;
}

}

Y en mi control de usuario o WebPart (depende como hagamos la implementación del WebPart) implementamos la interfase IViewBase o la que hereda de esta, de la siguiente forma:

public partial class Demo : System.Web.UI.UserControl, IViewBase
{
private readonly TareaPendientePresentador presentador = new TareaPendientePresentador();


protected void Page_Load(object sender, EventArgs e)
{
presentador.SetView(this);
}

public string MensajeError
{
set
{
ContenedorMensaje.InnerText = value;
}
}
protected override void CreateChildControls()
{
presentador.MostrarTareas();

}

}

image

De esta forma ya separamos la vista del presentador, luego a través de servicios o un controlador podemos acceder a nuestro modelo (en otro post profundizare en este tema y mostrare el código), que es donde esta la lógica que deseamos probar, lejos del aspecto de la capa de presentación, de la lógica de esta para concentrarnos en nuestro modelo. cada aspecto deberá ser probado gracias a que logramos separarlos.

image

Regresemos a donde íbamos, El Patrón que sigue es el Repositorio, este con el fin de encapsular las listad dentro de SharePoint, he aquí la separación del modelo de objetos de SharePoint y mi lógica si lo vemos en capas el Patrón MVP esta adelante iniciando del de la capa 7 de presentación y el patrón de Repositorio esta luego de la separación de mi modelo en la capa de Acceso a Datos que en este caso es a las listas de SharePoint donde se persiste la información de este modelo de programación. Quiero aclarar Mi modelo es mi lógica es lo que deseo enfocarme, el modelo de SharePoint son la definición de las clases que utiliza para representar la persistencia de la información almacenada en la bases de datos de SharePoint.

image

Y por último utilice TypeMock para emular el API de SharePoint, y este es el que le da el jaque mate a levantar una instancia de SharePoint para probar nuestro código este creará de una forma emulada la API de SharePoint para que yo pueda probar mi código sin necesidad de tener que estar haciendo el deployment por cada cambio y prueba que deseo realizar.

Así que amigos, esta es la primera parte de una serie de post donde implementaremos esta solución, e incluiré referencias a la Guidance de P&P, para que vayamos juntos por el camino para desarrollar soluciones dentro de SharePoint de una forma mas asegurada y profesional, minimizando los errores y disfrutando de lo que nos gusta hacer Code4Fun!.

Nos vemos luego!,

Manolo Herrera

martes, 16 de septiembre de 2008

La saga continua... segunda parte de la mesa redonda

Debido al interés mostrado por los asistentes de la primera mesa redonda de la comunidad que compartimos sobre los orígenes de El  Diseño basado en Dominio, nuestro amigo Cristian Prieto continuará el tema este miércoles 24 de Septiembre del 2008.

En palabras de nuestro amigo:

"Los esperamos para la continuación dentro de 15 días, partiremos un
poco de los conceptos de DDD que brindamos en la charla anterior y
ahondaremos en el "proceso" de la construcción, como alcanzar mejor
calidad mediante sencillas prácticas como CI, DBC, TDD, BDD y
desarrollo iterativo."

Así que los esperamos, para compartir y aprender de estas téncias, disciplinas y tendencias de la industria hoy en día.

Nos reunimos en Executrain, Centro Comercial los Proceres, a las 18:30 hrs. Entrada por el parqueo 4to nivel de comerciales. El costo del parqueo antes de las 9:00 son Q 5.00 y después de las 9:00 p.m. es Q 30.00.

Hasta el próximo miércoles amigos!,

 

Manolo Herrera

Lo que no debemos de olvidar cuando hacemos el primera instalación (o deployment) de un Web Part en SharePoint

  1. Construya el proyecto para que se cree el ensamblado (DLL).

El Procedimiento de instalación por primera vez es este:

  1. Copie el dll del proyecto en Visual Studio en el directorio bin del servidor donde esta instalado MOSS 2007 (normalmente es C:\Inetpub\wwwroot\wss\VirtualDirectories\80\bin; donde 80 es el puerto de la aplicación web de nuestro portal, encontrará varios números porque por lo menos encontrara otras aplicaciones web como Central Administration, y la aplicación del proveedor de servicios compartidos o SSP en el caso de MOSS 2007).
  2. Copie los archivos con extensión .ascx al directorio donde indico que estaban ubicados en el proyecto o simplemente en el directorio base de la aplicación web es decir en C:\Inetpub\wwwroot\wss\VirtualDirectories\80.
  3. Registre el Web Part como un Safe control en el web.config.

<SafeControl Assembly="Nombre del dll sin extensión" Namespace="Espacio de Nombre" TypeName="*" Safe="True" />

Un ejemplo:

<SafeControl Assembly="MiWebPart" Namespace="MiCompania.WebParts" TypeName="*" Safe="True" />

3. Eleve el nivel de confianza de la aplicación para que acepte los Web Parts personalizados. Vaya al Web.config y modifique la sección trust level:

< trust level ="Full" originUrl="" />

4. Publique el Web Part en la galería de Web Part de la colección de sitios.

5. Finalmente Agregue el Web Part en una página de Web Parts.

Code4Fun!,

Manolo Herrera

Desarrollo Basado en el Comportamiento o BDD

Creo que los principios orientados a Objetos o mas conocido como OOP han encontrado eco a lo largo de los años, y disciplinas recientes han enfatizado la importancia de los mismos, en otras palabras la madurez de esta teoría hoy en día se ve mas cercana a la práctica y el uso generalizado de estas herramientas permitirán que llegemos a dicha madurez.

El Desarrollo Basado en el Comportamiento o Behaivor Driven Design, desafía a los desarrolladores a cuestionar cuales son las responsabilidades que ellos asigna a sus clases son apropiadas o pueden delegarse o moverse a otra clase. Cuestionarse de esta forma y utilizar Mocks para llenar los roles requeridos de colaboración de las clases, promueve el uso de interfaces basadas en roles, y esto también ayuda a mantener las clases pequeñas y desacopladas.

Al igual que el Diseño Basado en Dominio este describe el propósito y beneficio de su código.

Permite a los desarrolladores concentrarse en por qué el código debería de ser creado, en vez de los detalles técnicos, y minimiza la traducción entre el lenguaje en el cual se escribe y el lenguaje hablado por los usuarios.

(Extracto de WikiPedia)

Al final el Desarrollo Basado en Comportamiento no es mas que la evolución del Desarrollo Orientado a Pruebas o TDD. Veamos esta evolución en pasos, de como el aprendizaje y la adopción de TDD a llevado a su evolución y a convertirse en BDD:

  1. El desarrollador inicia escribiendo Pruebas Unitarias de su código con frameworks de prueba como NUnit.
  2. Cuando el conjunto de pruebas se incremente el desarrolladores disfruta y aumenta su sentido de confianza en el trabajo que realiza.
  3. Como consecuencia el escribir pruebas antes de escribir el código ayuda al desarrollador a concentrarse en escribir solamente el código que necesita.
  4. Así mismo, el desarrollador utiliza las pruebas como una forma de documentación para el código que no ha visto por algún tiempo.
  5. Llega el momento que el desarrollador se da cuenta que escribir pruebas en esta forma ayuda a descubrir la interfase de la aplicación de su código y TDD llega a ser parte del proceso de Diseño.
  6. Los expertos en TDD señalan que los desarrolladores se dan cuenta que TDD es acerca de definir el comportamiento en vez de las pruebas.
  7. El Comportamiento es acerca de las iteraciones entre los componentes del sistema y el uso de Mocking es fundamental para el avance de TDD.

(Extracto del sitio BDD.org )

La motivación es que iniciemos el camino al desarrollo basado en pruebas y evolucionemos al basado a comportamiento y mejor aún podamos desarrollar el modelo basado en dominio.

Hasta una próxima amigos!,

Manolo Herrera

Diferencias entre WSS 3.0 y MOSS 2007

Si no te has preguntado esto, yo sí, así que luego de una investigación concienzuda hace algún tiempo detallo lo siguiente:

Es importante mencionar que MOSS 2007 (Microsoft Office Sharepoint Server) corre sobre WSS 3.0 (Windows Sharepoint Services) pero esto no quiere decir que se instala a parte ya que esta integrado dentro de MOSS 2007. De hecho si tienes instalado Windows SharePoint Services 3.0 debes desinstalarlo para instalar MOSS 2007. Básicamente, MOSS 2007 ofrece lo que denomina como Features out of the Box, donde Box se refiere a la plataforma WSS 3.0 y todo lo que se desarrolla sobre esta plataforma que no viene incluida es denominada Out of the Box.

Adicional a lo anterior, por regla general en Microsoft lo que nombra como "Services o Express" es gratuito y lo que denomina "Server" es cobrado, ya que incluye mas características orientadas al desarrollo empresarial, y las tecnologías SharePoint no son una excepción a la regla.

image

En esta imagen la línea roja delimita los servicios que incluye WSS 3.0. Lo demás que aparece en el primer cuadro son aplicaciones y servicios de MOSS 2007. Solo allí nos podemos dar cuenta que las aplicaciones y servicios de WSS 3.0 son limitados y que MOSS 2007 ofrece mas características fuera de la caja para una solución empresarial.

Quiero iniciar con los Servicios Compartidos (Shared Services) de MOSS 2007. Estos servicios que se hacen evidentes cuando instalamos MOSS 2007 de forma avanzada y completa extienden los servicios de WSS 3.0 de indexación y Búsqueda de una manera muy profesional. Ya que nos incluye el mismo motor de búsqueda que utiliza Microsoft en su sitio en línea Live Search (Abajo es mencionado con mayor detalle). Adicionalmente incluye el Business Data Catalog, para obtener información de aplicaciones de negocios, Perfil de usuarios personalizables que pueden importarse desde el Active Directory, entre otros, y el Servicio de Single Sign On para proveer una solución efectiva de una sola puerta de entrada (Portal) a nuestras aplicaciones.

NOTA: Para los curiosos SSP Instala Business Data Catalog, Office SharePoint Service Search, Excel Services, User Profile Application, Session State.

Excel Services o Servicios de Excel: Es un servicio del lado del servidor para calcular y renderizar para compartir hojas de calculo. Especialmente si se quiere esconder la lógica del negocio de dichas hojas y solo proveer de los datos procesados al usuario. Esto nos permite también utilizar en nuestros navegadores con ciertas limitaciones la aplicación de Excel para los usuario que carecen de la herramienta cliente.

Arriba de los servicios extendidos de MOSS 2007, encontramos las aplicaciones fuera de la caja como lo es el Content Managment, que se subdivide en Web y Enterprise Content Management, el primero se refiere a la administración del contenido en las páginas Web y el segundo se refiere a la administración del contenido de cualquier tipo de Registro. Este ultimo tiene la capacidad de controlar el vencimiento de los documentos y la capacidad de lectura, modificación, y eliminación.

La parte de Portal, se refiere al manejo de los perfiles e información de metadata importante de la organización para utilizarla para la búsqueda y clasificación. Incluye el manejo de la audiencia objetivo (Audience Targeting) y Single Sign-On.

El Search o Búsqueda es una característica mejorada y extendida de la versión limitada de WSS 3.0, que esta a nivel del motor de búsqueda de Live, donde se puede personalizar muchas características de búsqueda y rastreo, permite la inclusión de fuentes de información externas al motor de búsqueda, de personas dentro de la herramienta de SharePoint, y dentro de la base de datos.

Bussiness Process Management o la Administración de los procesos de Negocio, se refiere a la nueva generación de documentos de formato abierto InfoPath. Y a los flujos de trabajo o Workflows que incluye fuera de la caja MOSS 2007. Estos formularios están basados en el navegador y a los servicios de InfoPath incluidos en MOSS 2007. Estos extienden el alcance de las organizaciones que no utilizan Microsoft Office InfoPath 2007 permitiéndole llenar formularios en un navegador común o en un dispositivo móvil con HTML habilitado.

Bussiness Inteligence, o Inteligencia de Negocios es la característica que permitirá administrar los cubos de información que esta referenciada dentro de MOSS 2007 para su análisis.

Luego de escribir brevemente de los componentes incluidos en MOSS 2007, les ofrezco una visión de los ambientes posibles que se requiere MOSS 2007 en vez de la versión gratuita WSS 3.0.

Cuando el número de usuarios, servicios y documentos es un tema crítico dentro de la compañía:

La versión de WSS 3.0 y la habilidad para configurar una granja de servidores en esta plataforma es muy limitada. Apenas podemos separar del servidor de Base de datos del front-end del portal y tener varios front-end del mismo portal. No así la versión MOSS 2007 que nos permite separar temas como el web crawler (es una feature que ni siquiera se menciona en WSS 3.0) , los servicios compartidos de SharePoint que utiliza para proveer los servicios de Excel dentro de SharePoint y el sitio de MySites para fomentar la red social dentro de los portales. Esto si lo vemos en una instalación pequeña en uno o dos servidores no hace la diferencia, pero si hablamos de una corporación donde cada sitio de usuario representan miles de sitios y que la indexación de búsqueda de los documentos es entre miles de ellos y acceso a los mismos, es un tema que impacta y que limita el crecimiento y adaptabilidad de la herramienta es mejor se vaya pensando en serio en la versión Server, es decir en la versión Enterprise de MOSS 2007.

Cuando el tema de colaboración efectiva es un tema de suma importancia

Pensemos en cientos o miles de usuarios con cientos y miles de documentos, el error humano de archivar algo dentro de una herramienta tecnológica es una probabilidad muy alta y no tener la capacidad de realizar una búsqueda inquisitiva con la ayuda de un web crawler nativo (el cual incluye SSP) que busque dentro de los documentos, la metada de los mismos es un tema que puede inclinar la balanza hacia la versión de Servidor, en vez de la versión Services que no dispone de esta característica. La version WSS 3.0 de Search esta limitada a la búsqueda a través del contenido y documentos dentro de la colección de sitios Actual. No así para MOSS 2007 Search, que através de Business Data Catalog, podemo acceder la información de aplicaciones en base de datos e incluir contenidos externos en la web que se indexan dentro de MOSS 2007. También MOSS 2007 Search puede ser configurado para ejecutar el servicio de indexado y el servicio de búsqueda en diferentes servidores dentro de una granja de servidores para incrementar la escalabilidad y el rendimiento. WSS 3.0 esta limitado para ejecutarse el servicio de indexado y de búsqueda en el mismo servidor físico.

Dentro del proveedor de servicios compartidos o SSP se encuentra el módulo de Search y dentro de este el Content Sources, donde no solo se puede configurar sitios SharePoint, sino que también permite la configuración de otros sitios Web, Carpetas compartidas, carpetas públicas de Exchange y enlaces a Aplicaciones de Negocios ubicadas en algún repositorio de datos como lo es SQL-Server.

Adicionalmente se puede configurar los tipos de documentos que serán indexados y excluir aquellos que no nos interesa sean incluidos en la búsqueda del portal. Por ejemplo, las extensiones de las paginas Aspx del sitio, muy probablemente la información contenida en ellas es puramente de mantenimiento del sitio.

Espero les ayude esta información para decidir que es lo que mejor se adapta a sus necesidades empresariales.

Hasta la próxima,

Manolo Herrera

miércoles, 3 de septiembre de 2008

Mesa redonda este miercoles 10 de septiembre, en la reunión de la Comunidad de Desarrolladores

Amigos los esperamos el miercoles 10 de septiembre, como parte de la iniciativa que nos hicieron llegar, en reuniones anteriores. Hoy tendremos una mesa redonda para discutir temas de arquitectura, diseño y modelado. La agenda es la siguiente:

    1. Modelos orientados a los datos y al dominio, ventajas y desventajas.
    2. Domain Driven Design.
    3. Patrones de diseño utilizados en DDD.
    4. TDD.

Te esperamos para que participes no faltes, nos reunimos en Executrain, Centro Comercial los Proceres, a las 18:30 hrs. Entrada por el parqueo 4to nivel de comerciales. El costo del parqueo antes de las 9:00 son Q 5.00 y después de las 9:00 p.m. es Q 30.00. Estará con nosotros nuestro amigo Cristian y tu servidor moderando la mesa redonda.

Nos vemos ese día,

Manolo Herrera

lunes, 1 de septiembre de 2008

Como dejar los comentarios registrados de los usuarios en una tarea en SharePoint

Es un requerimiento de los usuarios de SharePoint, poder visualizar y distinguir los comentarios que dejo cada usuario, en la tarea.

Como todo tiene sus requerimientos, pros y contras. Los requerimientos son:

Se debe de habilitar en la lista la propiedad de versionamiento, de la siguiente forma:

Sobre la lista en este caso es Tareas o Tasks, Settings, Versioning Settings. En la página hay una serie de opción que deben de tomarse en cuenta, como se muestra abajo en la imagen:

image

Para habilitar el versionamiento solo debe de seleccionar el botón de Radio en Yes de la pregunta: Create a version each time you edit an item in this list?.

Que para este ejemplo coloque también un limite de 3, lo que hace esto es que a la cuarto comentario, borra el primero que se ingreso, esto puede no funcionar para algunos usuarios, así que mejor valide bien si afecta o no a esta opción, sino se le coloca limite, esto puede crecer tantos comentarios se le ingresen. A decir verdad no es tan critico si no son tantos usuarios o la naturaleza de los comentarios no son tan frecuentes o diversos, será el análisis que se le de que dictamine el número óptimo.

Pero eso no es todo ahora debemos de seleccionar la columna de la lista de Tareas e indicarle la forma en que deseamos se comporte, para ello vaya a: En Tasks, Settings, seleccione la columna para nuestro ejemplo es Description, haga clic sobre dicha columna, debe de ser de tipo "Multiple line of text".

image

En la opción de hasta abajo en la imagen de arriba dice: Append Changes to Existing Test, seleccione Yes, presione el botón de OK.

Ahora puede editar una tarea y agregar un nuevo comentario en la columna Description de nuestro ejemplo y luego de varios cambios le mostrará la información de la siguiente manera:

image

Note las flechas, la primera de arriba hacia abajo muestra los distintos comentarios, con su respectivo usuario y fecha de registro. La segunda flecha le muestra la versión de la tarea, ya que el manejo del versionamiento no es solo a nivel de esta columna sino de toda la tarea en sí. Esto quiere decir que podemos restaurar una versión anterior de la tarea y reemplazarla por la actual. Adicionalmente a esto, ser recuerda que colocamos un limite de tres versiones, si puede notar el primer registro indica que es el número 2, ya que el número uno fue eliminado por el límite de versión que le indicamos a la tarea.

Espero les sirva, SharePoint4Fun!,

Manolo Herrera