Cuando mediada la primavera del 2012 me instale la primera versión Preview del Visual Studio 2012 indicaban que una de las mejoras que introducía para los desarolladores de SharePoint es que introducían mejoras en la creación de listas, tipos de contenido, columnas de sitio. Por aquel entonces nosotros para los proyectos nos basábamos para la creación de listas, tipos de contenido, columnas de sitio de un complemento que se llama Software Factory y la verdad es que es un buen complemento que ya te permitía todas estas opciones por lo que para mi estas mejoras no eran tales.
Pero como todos los complementos hay cosas que se podían mejorar y esa no es otra es que hay tipos de columnas que no se podían hacer como son los campos de tipo Taxonomía. Y para este tipos de campos lo realizábamos mediante programación con un código semejante al siguiente:
private static void CreateMetaDataColumn(SPWeb web, string groupName, string termSetId, string fieldName, string defaultValue, string associatedContentTypeId) { TaxonomySession taxonomySession = new TaxonomySession(web.Site); TermStore termStore = taxonomySession.DefaultSiteCollectionTermStore; web.AllowUnsafeUpdates = true; TermSet termset = termStore.GetTermSet(new Guid(termSetId)); if (!web.Fields.ContainsField(fieldName)) { TaxonomyField taxField = web.Fields.CreateNewField("TaxonomyFieldType", fieldName) as TaxonomyField; taxField.SspId = termStore.Id; taxField.TermSetId = termset.Id; taxField.AllowMultipleValues = true; taxField.Open = true; taxField.Group = groupName; taxField.DefaultValue = defaultValue; web.Fields.Add(taxField); } SPContentTypeId contentTypeId = new SPContentTypeId(associatedContentTypeId); SPContentType spContentType = web.ContentTypes[contentTypeId]; if (!spContentType.Fields.ContainsField(fieldName)) { spContentType.FieldLinks.Add(new SPFieldLink(web.Fields[fieldName])); spContentType.Update(true, false); } web.Update(); web.AllowUnsafeUpdates = false; }
Esto ya me parecía un tanto engorroso porque por un lado tenia las listas pero por otro lado en el momento que Activo la característica le añadía campos a una lista mediante programación que tenia puesta la definición en un XML.
Dicho este preámbulo me puse a jugar con el nuevo Visual Studio (del que me parece que evoluciona mucho la versión anterior) y me decepciono muchísimo que no solo no mejoraba esta extensión de Codeplex sino que la empeoraba ya que por ejemplo hay aspectos que no son de recibo como por ejemplo cuando te defines una lista con un campo de tipo Lookup por lo menos que te permita seleccionar entre otras listas que tengas en la solución porque si seleccionas un campo de tipo Lookup pero no puedes vincularlo a nada NO VALE PARA NADA, además naturalmente no tenia el campo de tipo Taxonomía.
Por lo tanto para añadir los campos de tipo Lookup también hay que añadirlo de forma manual mediante programación. Por lo tanto ahora tenemos un batiburrillo, por un lado creamos las listas utilizando la herramienta y por otro lado mediante código añadimos toda las necesidades que no podemos hacer mediante esta herramienta.
Que ocasiona esto en nuestro proyecto? Pues que sea ilegible, que su calidad baje bastante, que sea mucho menos mantenible y que cualquier modificación nos cueste mucho mas realizar la que si lo hubiéramos realizado de otra forma.
¿Ahora bien de que forma? Pues la única forma en la que puedes hacer todo es utilizando la programación, nos basamos en el modelo de objetos Servidor que nos proporciona SharePoint para .NET y podemos realizar todas estas tareas de una forma mucho mejor. Mejor en el sentido que podemos cumplir todos nuestras necesidades tenemos todos el código centrado, estructurado y por lo tanto cumpliendo los estándares de calidad que nos debemos exigir. Para ver de la forma en la que yo lo realizo os dejare un poco más de intriga ya que lo veremos en el WebCast que impartiré el próximo día 13 podéis inscribiros aquí (es GRATIS) https://msevents.microsoft.com/CUI/EventDetail.aspx?EventID=1032541437&culture=es-ES
Pero el objetivo de este post es pensar si estas herramientas/asistentes son útiles.
Si yo tengo que contestar esta pregunta diría que NO son útiles, pero son necesarias. Me explico cuando no tienes conocimiento te vale para saber como se tiene que hacer, y saber si estos tienen unas limitaciones o no y en base a este conocimiento ya te puedes generar una idea y decidir cual es la mejor opción. Dicho esto un compañero mio me comentaba que una vez lo sabes hacer SIEMPRE tienes que hacerlo de forma propia porque de esta forma tienes tu el control sobre lo que estas realizando (idea que yo comparto). También tengo la opinión de Iwan que lo que es importante es hacerlo de una forma que cumplas con los objetivos pero siempre de la misma y no ir haciendo mezcladillos, es decir, o siempre utilizar el asistente o siempre utilizarlo de forma manual pero no las mezclas que lo único que hacen es hacer menos ilegible el proyecto.