Programación de WebParts de SharePoint 2010 con Visual Studio 2010, pan comido para un desarrollador .NET

Tú como programador .NET seguramente has escuchado hablar de SharePoint y muy probablemente en las bolsas de trabajo encuentras que un plus en tu currículo como programador es saber SharePoint o programar en SharePoint. Bien, pues aquí tienes un video que publique en mi canal de YouTube donde como programador puedes conocer lo siguiente de SharePoint:

  • Que son los WebParts
  • Como están constituidos
  • Que elementos o clases usamos para construirlos
  • Como programarlos y con qué herramientas
  • Como empaquetarlos para su portabilidad

Date el tiempo ver este video, especialmente desde la demostración ya que se explica y se muestra lo básico de la construcción de un webpart, múltiples enfoques de empaquetamiento e incluso hasta el uso de AJAX.

Ya instalé SharePoint ¿Y ahora qué? en Video

Hace muchos años di una plática llamada Ya Instale SharePoint ¿y ahora qué? En donde pude mostrar algunas de las características del producto Microsoft Office SharePoint Server 2007 mediante ejemplos y demostraciones graficas ilustrando como podríamos hacer uso de las funcionalidades. Si por alguna razón del destino aun te encuentras dando soporte a plataformas WSS 3.0 o MOSS 2007, este webcast sin duda te será de utilidad ya que se muestra ejemplos de:

  • InfoPath Form Services
  • Content Types
  • Business Data Catalog
  • Workflows
  • Excel Services

Espero que si por alguna razón vez este video lo encuentres útil en estos tiempos.

Paquetes de Ejemplos de Codigo para App for SharePoint y Apps for Office

El buen Ricardo Loo publica en post llamado “Developer Must-Have: 125+ Apps for Office and SharePoint Code Samples’ en el blog de Office Apps donde nos comparte  que el equipo de publicación de contenido ha publicado más de 125 ejemplos de código para Apps for SharePoint y Apps for Office. Básicamente son dos paquetes de ejemplos disponibles para su descarga.

·         Apps for Office sample pack

·         Apps for SharePoint sample pack

Muy conveniente en estos días y sin duda en el futuro.

Mi Musica (My Music)

Dicen que la profesión no está peleada con la vocación. Bueno, pues aquí dejo algunas de las piezas musicales que a muy temprana edad pude componer y que a lo largo de los años la memoria del alma no me dejado olvidar...
Posted by haaron | with no comments

Programando con Listas en Windows SharePoint Services 3.0

Aquí un entrenamiento que di hace muchos años para una empresa en la que trabajé como líder de practica de colaboración. Básicamente preparé esta presentación para mostrar a programadores como manejar listas y elementos de forma programática a fin de introducirlos al mundo de la programación SharePoint.

Durante una revisión a un respaldo me encontré con los archivos fuente de este WebCast y decidí compilarlo como video para subirlo a mi canal de Youtube. Si por alguna razón sigues dando soporte a plataforma SharePoint 2007 (MOSS o WSS 3.0) en temas de programación este video sin duda es una referencia que te permitirá entender los fundamentos de programación de listas en SharePoint.

Además, creo que los temas aquí mencionados también aplican para SharePoint 2010 J

Construyendo Flujos de Trabajo en SharePoint 2010 utilizando SharePoint Designer 2010

Damas y caballeros, aquí un ejemplo de principio a fin de como construir una solución de flujo de trabajo en SharePoint 2010 usando tipos de contenido, diagramas de Visio Services, listas personalizadas, condiciones y acciones de SharePoint Designer 2010 y  también se ve como programar una actividad personalizada de SharePoint Designer 2010 con Visual Studio 2010. 

Análisis de Código para SharePoint Online

Aún recuerdo FxCop como una de las primeras herramientas que teníamos disponibles los programadores .NET para revisar nuestro código y evaluarlo contra las practicas recomendadas y de esta forma poder mitigar potenciales riesgos de desempeño, seguridad, acceso a datos, etc. Desde el punto de vista de un programador SharePoint podemos utilizar herramientas para revisar nuestro código de la misma forma por ejemplo las herramientas de análisis de código de Team Foundation sin duda nos dan una información muy valiosa, pero, en el mundo SharePoint debido al modelo de objetos y a las diversas tecnologías disponibles sabemos que se tienen otras reglas de codificación o prácticas de programación adicionales a las de .NET y en ese sentido ¿no sería útil contar con una herramienta que te revisa el código SharePoint?

MICROSOFT SHAREPOINT ONLINE CODE ANALYSIS FRAMEWORK (MSOCAF)

Es una herramienta de revisión y diagnóstico de código de programación de soluciones SharePoint que nos permite identificar inconsistencias clip_image001de programación en distintas áreas para asegurar la calidad de nuestros desarrollos en ambientes o entornos compartidos. MSOCAF ofrece todo un proceso de revisión de soluciones, se utiliza para validar las soluciones de programación que se publican en SharePoint Online de Office 365 y que ahora tenemos disponible para revisar nuestras aplicaciones tanto para soluciones SharePoint Online 2010 y 2013.

Las reglas que revisa son:

  • Rule Tests Against
  • Use of SPList.Items
  • SPListItemCollection\GetItemByID inside loop
  • SPQuery without Row Limit property
  • SPQuery Row Limit value range
  • Timer jobs
  • Out-of-the-box files modification
  • Verbose logging \ tracing
  • Deprecated APIs
  • Editing Web config files
  • Inline code ASPX pages
  • SPListItem.Update() inside loop
  • SPMonitoredScope Web Part check*
  • SPDiagnostics Service
  • ULS logging
  • BlobCache value editing in web.config
  • RunWithElevatedPrivileges restrictions
  • SharePointQueryWebPartsCheck
  • Windows Claims Check

Así que no está nada mal poder incluir el uso de esta solución como parte del proceso de revisión de código de programación en nuestros equipos. Ahora, esta solución ha sido diseñada para Office 365 y SharePoint Online, sin embargo, desde mi muy particular opinión sí creo que nos da un soporte para revisar nuestras soluciones On Premise.

Sin más que decir por el momento aquí les dejo el enlace: https://caf.sharepoint.microsoftonline.com/

Entrevista Audiencias Técnicas Latam

  • ¿Quién eres en tus propias palabras?
    Personalmente soy esposo, padre, hijo, hermano, amigo y profesionalmente apasionado de las soluciones TI para resolver problemas de negocio, originario de la ciudad de Mexicali, Baja California México y egresado del Instituto Tecnológico de Mexicali.
  • ¿Qué ha sido lo que te ha motivado para trabajar con tecnologías Microsoft?
    Desde 1997 tomé la decisión de ser un profesional Microsoft. Lo que me motivó fue la familia de productos de la suite Visual Studio 97, al ver tantas opciones y herramientas decidí ser experto en todas y construir mi carrera entorno a ellas. Desde entonces he venido evolucionando con la plataforma de desarrollo de Microsoft.
  • ¿Qué hace que tú seas un excelente evangelist?
    La experiencia que voy adquiriendo proyecto tras proyecto usando los productos de desarrollo de Microsoft, adicionalmente la pasión por compartir el conocimiento de campo adquirido es lo que considero me hace un evangelist, porque al final del día realmente creo en lo que comparto con los demás.
  • ¿Cuál es la mejor cosa que te ha pasado desde que eres evangelist?
    El aprender nuevas formas de entender las problemáticas de mis clientes y manejar al riesgo, ser evangelist me ha abierto puertas que solo con distintos enfoques de pensamiento puedes aprovechar y evolucionar a lo que nunca imaginé que podría ser o generar en mí.
  • Microsoft ha renovado toda su gama de productos, ¿Qué puedes decirnos de Visual Studio?
    Tomar la decisión de evolucionar con Visual Studio es una forma también de evolucionar como profesional del software, cada vez más nos acercamos a la promesa de tener la información disponible a cualquier hora, en cualquier lugar y desde cualquier dispositivo donde Visual Studio y las tecnologías que lo conforman son los pilares para lograrlo. SI quieres mantenerte en la ola de innovación y ser capaz de tomar ventaja de ello, prende Visual Studio y construye soluciones modernas que aporten valor a la empresa conforme evolucionan los productos.
  • Cuéntanos cuáles crees que son las tres fortalezas del nuevo paquete de desarrollo de la nueva gama de productos Microsoft.
    La unificación de los paradigmas de desarrollo, el poder y capacidad de construcción de soluciones conectadas y modernas, el ecosistema del modelo de negocio de “Windows Store” que ahora existen para Windows 8, Office 2013, SharePoint 2013, etc. Ahora ya no nada más tienes herramientas para construir soluciones sino también el ecosistema para producir y vender aplicaciones en línea.
  • ¿Qué contiene tu “Computer Bag”?
    Al ser un desarrollador SharePoint que utiliza Visual Studio cargo conmigo dos laptops con más de 8 GB de memoria RAM, un router, más de tres discos duro externo, cables de red, módulos de memoria RAM para laptop, tres discos duros de laptops que puedo quitar y poner dependiendo el ambiente que tenga que usar, plumas, lápices, monedas, concentrador de USBs y dos mouse.
  • ¿Tienes alguna experiencia laboral interesante para contarle a la comunidad de Desarrolladores en Latinoamérica acerca de estos productos?
    Tuve la oportunidad de participar en un proyecto a favor del cáncer donde convocaron a programadores para postularse y participar como miembros del equipo y fui uno de los seleccionados dentro muchos. Considero interesante este proyecto porque el resultado es para ayudar a científicos a colaborar en la investigación del cáncer, uno normalmente construye aplicaciones para contabilidad, ventas, calidad o procesos de negocio, pero construir proyectos para combatir el cáncer ofrece un enfoque diferente de ver la tecnología a favor de la humanidad. Claro que fue Visual Studio, Team Foundation y SharePoint la plataforma para poder organizar y controlar a programadores distribuidos por el mundo en específico México, USA, Israel y Polonia. Más información aquí http://player.vimeo.com/video/31274397?color=c9ff23&autoplay=0
  • Nombra 3 recursos indispensables que quieras recomendarle a la comunidad de Desarrolladores sobre el producto.
    http://pluralsight.com/training
    http://devexpress.com
    http://dotnetrocks.com

7632_1220428597665_4293035_n7632_1222269643690_3150958_n165626_1814962980653_6320900_n7632_1220428677667_7363111_n468875_4353982694559_1592458217_o

Microsoft Most Valuable Professional en SharePoint Server

EN_01

Ya soy muchos los años en los que he tenido la fortuna de ser un profesional reconocido por Microsoft inicialmente en la tecnología ASP.NET desde 2005 y SharePoint Server desde 2009. El programa MVP ha dejado muchas satisfacciones que han influido positivamente de forma directa e indirecta en mi vida. Si lo veo asi, es una lista enorme de beneficios que el programa ha dejado a lo largo de este tiempo. Gracias a todas las personas que han sido parte de este viaje. 

Felicitaciones a mis colegas MVPs que tambien fueron renovados!

A veces me pregunto qué hubiese pasado si el nombramiento no hubiese llegado, ¿Tú te lo has preguntado?

Posted by haaron | with no comments
Filed under:

Hay que darle permiso de Retrieve People Data for Search Crawlers a la cuenta que ejecuta el Crawl

Acto 1: Al ver los resultados de búsqueda notas que las imagines de las personas no se ven sin embargo en el My Site si

 

Acto 2: Encuentras en el Log del Crawl errores relacionados con Access denied y con el User Profile

 

¿Cómo se llamó la obra?

Hay que darle permiso "Retrieve People Data for Search Crawlers" a la cuenta que ejecuta el Crawl

 

Y después de un incremental crawl el resultado fue:

 

 

 

 

Una razón mas por la cual no inicializa la aplicación de servicio de perfiles de usuario de SharePoint 2010

Cada vez que la aplicación de servicio de perfiles de usuario de SharePoint 2010 se detiene borra algunos valores del registro de Windows relacionados con el servicio de sincronización del Forefront Identity Manager "FIM". El valor de registro se llama "SQLInstance" y se ubica aquí HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\FIMSynchronizationService\Parameters. Si esto no te ha sucedido es porque probablemente tu implementación de SharePoint utiliza la instancia Default del servidor SQL la cual es el nombre del servidor como tal, en mi caso yo utilizo una instancia específica distinta a la Default ejemplo "abc" entonces mi servidor e instancia serian "XYZ\abc".

Esto fue lo que me encontré en los ULS logs:

UserProfileApplication.SynchronizeMIIS: End setup for 'Intranet User Profile'.
SetupSynchronizationService :: Sync DB failover Check :: databaseServerMiis = sql_alias
SetupSynchronizationService :: Sync DB failover Check :: originalSyncConnectionString = Data Source=sql_alias;Initial Catalog=XYZ_XYZ_Intranet_UserProfile_Sync;Integrated Security=True;Enlist=False;Connect Timeout=15
SetupSynchronizationService :: Sync DB failover Check:: originalSyncConnectionDataSource = sql_alias
SetupSynchronizationService :: Sync DB failover Check :: new datasource string on connection object = sql_alias
UserProfileApplication.SynchronizeMIIS: Begin setup for 'Intranet User Profile'.
ILMPostSetupConfiguration: ILM Configuration: Validating installation of SQL Service.
ILM Configuration: Error 'ERR_SERVICE_NOT_INSTALLED'.
ERROR ILMPostSetupConfiguration: ILM Configuration: Validating installation of SQL Service FAILED ...
ILM Configuration: Validating account.
ILM Configuration: Validating the system groups...
ILM Configuration: Error 'ERR_INVALID_GROUPS'.
UserProfileApplication.SynchronizeMIIS: Failed to configure MIIS pre database, will attempt during next rerun. Exception: System.Configuration.ConfigurationErrorsException: ERR_INVALID_GROUPS at Microsoft.Office.Server.UserProfiles.Synchronization.ILMPostSetupConfiguration.ValidateConfigurationResult(UInt32 result) at Microsoft.Office.Server.UserProfiles.Synchronization.ILMPostSetupConfiguration.ConfigureMiisStage1() at Microsoft.Office.Server.Administration.UserProfileApplication.SetupSynchronizationService(ProfileSynchronizationServiceInstance profileSyncInstance). UserProfileApplication.SynchronizeMIIS: End setup for 'Intranet User Profile'.

Después de leer un poco en internet encontré esto y pude ver que el valor de registro SQLInstance estaba vacío por ende no se podía conectar como lo dice las entradas del log.

 

Así que con solo cambiar esa llave estaría solucionado el problema pero tendríamos que asegurarnos que cuando se detenga e inicialice de nuevo la aplicación de servicio de perfiles de usuario tengamos que ir al servidor a establecer este valor una vez más y manualmente, cosa que sinceramente no es lo mejor.

En mi caso muy particular y espero el de muchos también, tengo un SQL Alias que apunta a mi servidor de base de datos, lo que hice fue editar el SQL Alias para que contenga el nombre de la instancia.

 

De nuevo al inicializar el servicio de perfiles todo funciono a la perfección y mi registro de Windows no tuvo ni tendrá que ser tocado por nadie.

el contenido es el rey

Y que me mandan un diseño gráfico de una Intranet en donde al parecer todo se ve bien sin embargo destaque los siguientes puntos:

  • No veo ningún lugar que sugiera la búsqueda de contenido, creo que hay un pequeño enlace en el pie de la página. Hoy en día la búsquedas en los sitios son tan importantes de soportar ya que las personas cada vez más están acostumbrados a realizar búsquedas para cualquier cosa que requieran, es por ello que nuestros sitios de publicación de contenido SharePoint lo deberían soportar adicional tenemos el motor disponible en la plataforma. Cuando cargas tu navegador ¿cuál es tu página de inicio? Seguramente un buscador. Las personas especialmente las nuevas generaciones esperan un buscador en la empresa que les permita escrudiñar la información para encontrar el contenido que requieren con solo proporcionar una palabra clave y dar clic en buscar.
  • Hay que asegurarnos que entendemos el alcance de la funcionalidad expresada en el diseño, normalmente un diseñador gráfico nos podrá proporcionar un ejemplo del aspecto visual que está trabajando pero hay que tener mucho cuidado en aquellos sutiles iconos o formas que representan funcionalidad y que indudablemente tendremos que soportar. Por ejemplo puede que el diseño sugiera el ordenar alfabéticamente algo mediante iconos en los títulos de las columnas de una grilla, bien, pues alguien debe de validar que en efecto eso este soportado por la plataforma donde se montara el diseño gráfico. Un ejemplo también es que hoy en día nos entregan sitios con el icono de RSS asumiendo que será implementado y creando huecos de funcionalidad que visualmente se ven bien pero que quizás no estaban considerados como parte del desarrollo. Cada pixel y cada región cuentan deben de estar justificados funcionalmente.
  • También otro aspecto que me ha tocado revisar es que cuando se entrega una propuesta de diseño gráfico se te da normalmente la página principal con los colores, imagines representativos de la marca, pero eso no es todo el sitio, es importante que se entregue lo que llamamos marcos de página (page layouts) que describen los distintos tipos de contenido e información que el sitio estará entregando en sus distintas secciones o categorías. No es lo mismo una página de noticias que una página de información corporativa, cada acomodamiento distinto representa un tipo de marco en SharePoint y potencialmente una estructura de datos distinta. Es muy importante el tipo de información que será presentada en cada sección de contenido de todo el sitio. Hay que buscar que se vea la estructura y uniformidad en la navegación y en el contenido.
  • Hoy en día la presencia el redes sociales también representa un tema importante de no ignorar desde lo que es cuenta de twitter, youtube, Facebook y linked in son parte de los elementos que se integran en un sitio de publicación web. El diseño debería de contar con un área o sección específica quizás en el pie de página que sugiera la presencia de la marca en las redes sociales.

No te confundas con lo bien que un diseño gráfico se pueda ver, sin duda eso es una fortaleza y representa la forma en la que podrás conectarte inmediatamente con algún visitante, sin embargo el contenido es el rey y en conjunto se da el binomio perfecto de funcionalidad que enganche al usuario con una apariencia sugerente, atractiva y motivante de usar.

Posted by haaron | with no comments
Filed under: , , ,

Y si funciona ¿qué?

Durante una reunión se me pidió mi opinión sobre la factibilidad de automatizar un proceso que actualmente se lleva en papel y su ejecución es literalmente a mano por un proceso electrónico y digital utilizando a SharePoint como la plataforma para lograrlo y ciertamente podríamos decir que en SharePoint se tienen las características necesarias para hacer frente con éxito a un escenarios de captura electrónica de datos y gestión de aprobaciones mediante flujos de trabajo. Sin embargo antes de emitir mi recomendación hice las siguientes preguntas:

  • Cuál sería la meta de este esfuerzo y podríamos enlistar algunos objetivos
  • Aproximadamente ¿cuantas personas estaríamos tocando con la automatización de este proceso?
  • En cuanto a tiempo se refiere, la duración de una instancia del proceso es de ¿cuánto tiempo?
  • El volumen de solicitudes y aprobaciones que se dan por cada instancia del proceso en promedio al mes ¿es de?

Después de escuchar las respuestas y de entender un poco más el contexto de este cliente "el cual busca posicionar a SharePoint para buscan financiamiento" procedí a comentar mi punto de vista el cual describo a continuación:

Estoy seguro que SharePoint puede soportar a gran escala una solución como la que están buscando con la infraestructura y procedimientos adecuados sin embargo, ¿podría el negocio soportarlo también? Mejorar un proceso que actualmente se lleva a mano por uno electrónico o digital requiere mucho más que una infraestructura de servidores, requiere del soporte y compromiso del negocio por las siguientes razones:

  • Necesitaras definir si las autorizaciones que actualmente se llevan en papel y son la causa de la lentitud del proceso se transformaran a autorizaciones digitales las cuales reducirán el tiempo de la gestión. ¿Podrá el negocio darle validez a la autorización digital o electrónica?
  • Una vez reconociendo la autorización digital entonces el resguardo de los registros electrónicos también deberá ser gestionado por la política actual de retención de la información la cual hoy se lleva en papel y cuenta con todo un departamento de archivo. ¿Podría el negocio darle validez legal por así decirlo a los registros electrónicos producidos por el proceso? ¿Cómo entonces podríamos describir una auditoria?
  • De pronto en menos de seis meses podrás identificar la reducción del uso de impresoras y papel, ¿se tienen contratos celebrados con proveedores tanto de soporte técnico y/o fabricantes que se tengan que revisar?
  • Qué pasaría si al ver el impacto y valor de la automatización de un proceso manual a un proceso digital resulta en una demanda mayor por parte del usuario final en la automatización de otros procesos. ¿Estamos listos para soportar una demanda mayor de trabajo? ¿tenemos en claro cómo podríamos evolucionar de forma gradual de un negocio basado en papel a un negocio basado en formas electrónicas?
  • ¿Cuáles serían otros procesos candidatos que por orden natural pudiera seguir a este esfuerzo?

En resumen hay que preguntarnos qué pasara si sale mal pero también que pasara si sale bien la iniciativa. No es que sea un aguafiestas pero para poder hacer un enfoque de solución integral al problema y las expectativas de negocio hay que preguntar ¿Y qué pasaría si es exitoso el proyecto?

Posted by haaron | with no comments

8 años reflexionando y compartiendo experiencias en texto

Fue un día como hoy pero del año 2005 que escribí mi primer post en este blog y desde entonces he venido registrando experiencias y la evolución de la tecnología con la que he venido trabajando. Hoy se cumplen 8 años de reflexionar y compartir experiencias en texto. Gracias por prestarme sus ojos y hacer clic con su intelecto estimado lector y gracias a msmvps.com por prestarme el espacio.

Haaron Gonzalez
Microsoft MVP SharePoint Server

Cuestionario inicial de oportunidad SharePoint

Uno de los principales problemas del mundo del desarrollo de soluciones en SharePoint con los que me he encontrado desde el año 2003 es justamente como dimensionar un proyecto, como entender la realidad en la que nuestros clientes se encuentran y buscar visualizar las expectativas para solucionar su problema, en ese sentido he escrito algunos post que dan un norte de cómo manejar esta situación:

Sin embargo, el día de hoy quiero compartir un formulario que normalmente utilizo al inicio de cualquier oportunidad. Este formulario me permite identificar de forma inicial la problemática que el cliente cree tener, la solución que el cliente visualiza, un diagnóstico inicial del estado de la tecnología y sobre todo un poco de contexto para determinar si mis servicios serán de valor aquí mediante el entendimiento de la necesidad. Quería compartirlo con la comunidad como una herramienta general que puedes usar tanto como para SharePoint o cualquier otro producto que dé una solución de negocio.


Aqui lo puedes decargar:

Enhance the way your Team Members work with Tasks in a SharePoint site

¿Se quiere reír un ratito mi estimado lector? Mire decidí subir un video a mi canal de YouTube grabado en Ingles. Esto es una simple prueba de concepto y le quiero pedir su retroalimentación al respecto. Cualquier sugerencia y crítica constructiva para mejorar mis ingles será bienvenida. Sin más, los dejo!

Inspirado por el artículo Peter Bright sobre WinRT

microsoft-_net-framework-4

 

En mi caso todo empezó con MS-DOS 3.0 pero esa es otra historia. Yo tomé el barco de Microsoft desde 1997, como programador inicié con Visual Basic 5, tuve la oportunidad de utilizar la suite de Office 97 y experimentar lo que fue OLE 2.0, ya como programador Visual Basic 6 construí aplicaciones profesionales que hacían uso de componentes COM construidos por mí y también tuve la oportunidad de compartir con PowerBuilder funcionalidad gracias a COM. El primer libro de programación que compré fue Developing COM/ActiveX Components With Visual Basic 6 de Dan Appleman. Ya durante los cursos oficiales de Visual Basic 6 pude conocer lo que fue Distributed COM (DCOM) y Microsoft Transaction Server (MTS).  A la par HTML y lo que Microsoft llamó DHTML también eran parte de las técnicas de programación que tuve que aprender y dominar, en particular ASP y VBScript fueron para mí una gran oportunidad profesional, en la universidad pude construir aplicaciones web para procesos escolares, así que mí experiencia en ASP mejoró mucho. Después de durar un tiempo construyendo aplicaciones Windows y Web tanto para empresas como para los últimos semestres de pronto escuchamos del Beta de .NET en MSDN, un buen amigo mío lo descargó no sé de dónde y pudimos ver en primer instancia lo que significó el nuevo modelo e acceso a datos, la evolución de DAO por ADO y de ADO a ADO.NET. Recuerdo que el simple el hecho de tener DataSets y DataTables con respecto a Recordsets fue increíble. La posibilidad de trabajar Offline y usar DataSet.WriteXml() para llevarnos los datos en XML y poder trabajar fuera de línea nos dio una y refrescante alternativa. El poder serializar objetos para persistirlos también fue algo emocionante. Tratar de asimilar los tipos de datos por valor y por referencia también fue retador. El 13 de Febrero de 2002 se liberó Visual Studio .NET 2002 en San Francisco, CA donde Bill Gates presidio el lanzamiento y dejó ver la visión que ha venido empujando a Microsoft desde ya hace mucho tiempo "La información disponible a cualquier hora, en cualquier lugar y desde cualquier dispositivo". En ese lanzamiento Grady Booch tuvo una participación durante una demostración justamente hablando de modelado y de ahí conocí el mundo de UML, Design Patterns, etc. También a Tim Huckaby fue parte del Iron Developer contest con quien después tuve la oportunidad de trabajar aquí y algunos otros Speakers en especial a Ari Bixhorn y Chris de DPE de Microsoft. Increíble el lanzamiento y dejó ver todo una nueva visión. En aquel entonces los recursos de capacitación disponibles eran pocos, el .NET Show con Robert Hess y Erica Wiechers, LearVisualStudio.NET con Bob Tabor que después lo hicieron MVP, también me fascinó el concepto del programa VBTV Cheap Show de Chris and Ari donde de una manera muy cómica y relajada dieron a conocer Visual Basic .NET. Tuve la oportunidad de hacer un proyecto en ASP.NET usando Visual Studio .NET 2003 para un evento nacional de la universidad, ahí fue mi primer presentación técnica ante ejecutivos y director nacional de la institución, toda una experiencia nueva pero tan familiar a la vez. Estuve trabajando por un tiempo como programador ASP y de pronto llegó la oportunidad para ser programador .NET de una empresa de software para gobierno importante en mi ciudad. Inicie con Visual Studio .NET 2003 creando aplicaciones ASP.NET 1.1. En ese entonces surge Pattern & Practices y pude conocer el podcast de .NET Rocks de Carl Franklin. Los blogs empezaron a ser más populares. Trabaje bastante con Visual Studio .NET 2003, recibí el nombramiento MVP en el 2004, tome el riesgo y me fui a la ciudad de México a trabajar como instructor y conferencista, surgió Visual Studio 2005 y tuve la oportunidad de participar en el lanzamiento del producto dando platica de ASP.NET 2.0 y conociendo a personas con las sigo frecuentando y que también son MVPs. Lo que más me llamó la atención en aquel entonces fue el modelo proveedor de ASP.NET para soportar la extensibilidad y la implementación de mecanismos muy interesantes para fortalecer la integración. Una vez más Visual Studio 2005 y .NET Framework 2.0 introdujeron muchas mejoras para los programadores en especial el modelo proveedor y sin duda el uso de Generics como parte del modelo de programación y en el caso de Windows Forms el Clickonce Deployment, de hecho .NET Framework 2.0 fue la base de otras versiones de .NET Framework, básicamente se han ido apilando nueva funcionalidad. A mediados entre 2005 y 2008 Microsoft busca unificar los paradigmas de desarrollo y crea WCF, WF, WPF y CardSpace como parte del .NET Framework 3.0. Cabe mencionar que SharePoint 2007 fue construido sobre .NET Framework 2.0 y 3.0. Un cambio radical de nuevo en el modelo de programación y en la forma de construir soluciones conectadas, visualmente atractivas y procesos de negocio. En el 2008 se liberó Visual Studio 2008 con el .NET Framework 3.5 donde por fin LINQ pudo florecer y posicionarse como la respuesta para abstraer el lenguaje que normalmente usamos para manipular una base de datos. LINQ nos dio la posibilidad de seguir usando el lenguaje de programación que conocemos para expresar de forma unificada consultas a bases de datos, colecciones de objetos, archivos XML y cualquier otra fuente de datos para la cual existiera un proveedor, adicional fue la base de Entity Framework como el ORM de Microsoft. Sin duda .NET Data Services (la implementación RESTFull) fue otro nuevo y refrescante enfoque para facilitarnos la construcción de aplicaciones conectadas. También .NET Framework 3.5 y Visual Studio 2008 han sido críticos para la evolución de la plataforma .NET ya que se introdujo de forma muy básica la posibilidad del paralelismo y la noción de facilitarnos la escritura de programas capaces tomar ventaja de los diferentes procesadores y núcleos que el hardware tiene. Se introdujo extensiones para trabajar con patrones como MVC y MVVM para web como para cliente. Ya en la versión .NET Framework 4.0 y Visual Studio 2010 florecieron los patrones con nuevas plantillas de proyecto, pudimos tener integrado en el lenguaje una serie de clases para facilitarnos la escritora y uso de aplicaciones paralelas y asíncronas. Y sin duda Visual Studio fue re construido ofreciendo una UI basada en WPF con un bonche de mejoras para depuración, visualización de código, documentación, análisis, diagramas etc. Visual Studio 2012 también ya fue liberado y sus características a la par del sistema operativo han venido a revolucionar la forma en que construimos aplicaciones así como también el ecosistema para distribuirlas.

Todo este texto ha sido inspirado por un artículo que leí hace un par de días y que quiero recomendar ampliamente para aquel programador avanzado y principiante. Este artículo se llama "Turning to the past to power Windows' future: An in-depth look at WinRT" y da una explicación del pasado para entender mejor el presente y sin duda el futuro. Si realmente estas interesado en el mundo Microsoft tienes que leerlo.

Copiando objetos de SharePoint entre ambientes y versiones, incluido Flujos de Trabajo del bien conocido SharePoint Designer 2010

Una de las contradictorias situaciones que los profesionales SharePoint hemos tenido que enfrentar en algún momento de nuestra carrera es justamente el cómo tolerar la frustración inversamente proporcional al nivel de emoción que nos da ver la simplicidad de creación de un flujo de trabajo de SharePoint Designer 2010. En cualquier sitio web, demostración, articulo, ejemplo y blog post en línea te encontrarás las maravillas de usar SharePoint Designer 2010 como una primer opción de personalización del comportamiento de listas y bibliotecas de usuario, lo que rara vez encuentras publicado en la web es como tomar ese flujo de trabajo personalizado, empaquetarlo e implementarlo en un sitio SharePoint distinto de donde fue creado e incluso en un ambiente alterno.

Desde la liberación de SharePoint 2010 se nos dio la opción de exportar como paquete WSP un flujo de trabajo usando justamente SharePoint Designer 2010 bajo el concepto de Reusable workflows, esta opción si nos da posibilidades de portabilidad, sin embargo, sigue enfrentando escenarios no cubiertos como cuando tenemos un flujo de trabajo que tiene que utilizar columnas de sitio que tienen dependencia a otro servicio como el gestor de metadatos, entre otros escenarios, aunque he de decir que Resusable workflows es la onda como una primer opción de portabilidad.

Bueno, para escenarios de portabilidad más complicados tenemos aplicaciones de terceros como la empresa Sharegate tiene un conjunto de productos de software que facilitan enormemente el copiado de objetos entre sitios "incluido flujos de trabajo". Si alguna vez te has enfrentado a como replicar permisos, documentos, contenido, funcionalidad y configuración en la empresa este producto es una alternativa confiable para lograrlo. Adicional a copiar contenido entre ambientes también ofrece la misma experiencia para copiar contenido entre versiones de SharePoint, desde 2003, 2007, 2010, 2013 y Office 365 SharePoint Online.

 

Posted by haaron | with no comments

Programador sorprendete con STSDev viendo como crear un paquete WSP para aprovisionar logotipos en SharePoint

Durante una implementación donde se estima la creación inicial de unas 220 colecciones de sitio nuestro flamante administrador de la granja creó unas plantillas de sitio para las diferentes necesidades de colaboración y comunicación que la plataforma SharePoint estará soportando. Lo hizo mediante SharePoint Designer 2010 exportando como WSP la plantilla. Todo bien, pero al revisar las plantillas encontré buenas y no tan buenas ideas. Me concentraré en las no tan buenas, sucede que el logotipo de esta empresa lo estaba almacenando dentro de la biblioteca de activos "Assest Library" y después referenciando en las opciones de Title, Description and Icon donde podemos poner el nombre del sitio, la descripción y la imagen, nuestro amigo incluso ya había probado que al usar la plantillas para crear un nuevo sitio la URL automáticamente se estaba actualizando y siempre apuntaba a la URL del sitio recién creado haciendo referencia al logotipo almacenado en la librería de activos.

Todo bien, pero no!. Le ayudé a crear 5 sitios más y le pedí que corriera un crawl incremental. Posteriormente al terminar de ejecutase hicimos una búsqueda como la siguiente pollolocologo.jpg ¿qué cree usted mi estimado lector que nuestra página de resultados mostró? Pues sí, un bonche de resultados haciendo referencia a la imagen almacenada en cada uno de los sitios creados y si multiplicas eso por las 220 colecciones de sitios planeadas pues nada más imagine usted los resultados de las búsquedas cuando el término de búsqueda incluya la palabra "polloloco".

Rápidamente di la sugerencia que deberíamos de encontrar un lugar donde almacenar esta imágenes o recursos institucionales de propósito general y la respuesta de nuestro amigo fue la correcta, sugirió el 14 hive o más bien dicho la ruta SharePoint "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\TEMPLATE\IMAGES" , así que para pronto sugirió copiar manualmente los archivos en la ruta previamente mencionada lo cual en mi cabeza sonó una campana de alerta como si estuviera en un concurso de la televisión tipo "100 mexicanos dijeron" respondiendo erróneamente.

Procedí a comentar que manualmente no deberíamos de moverle a esta importante ruta de archivos, que existían mecanismos para hacer llegar los archivos a la ruta correspondiente de forma segura, en todos los servidores de la granja y además sin intervención manual. La respuesta fue construir una característica "feature" empaquetado en un WSP para el aprovisionamiento de estos archivos.

Solución? Descargué el instalador de la utilería STSDev versión 1.4 creada por colegas MVPs en SharePoint. Esta utilería te permite elegir el tipo de proyecto SharePoint que quieres crear con la finalidad de generarte un proyecto de Visual Studio con las utilerías, carpetas y archivos necesarios para generar un paquete WSP de SharePoint, lindo no? Claro que ocuparemos Visual Studio para generar el WSP y en ese sentido cualquier versión express arriba de 2008 puede servir ya que STSDev genera un proyecto de tipo Class Library capaz de funcionar incluso fuera de un servidor Windows Sever 2008 R2 con SharePoint instalado, o yeah!

Como vemos en STSDev seleccionamos las distintas plantillas de solución existentes, la versión de Visual Studio, te auto genera el archivo .snk y al dar clic en el botón Create Solution te crea una carpeta donde deposita la solución y los archivos. Después usando Visual Studio abres la solución y a partir de ahí sigues trabajando. En mi caso, use Visual Studio 2012 Express for Windows Desktop el cual tuvo que hacer un proceso de migración de mi solución recién creada.

Ya dentro de Visual Studio simplemente agregamos las imágenes o recursos que consideramos de propósito general que queremos poner en SharePoint , hay que ser cuidadosos con los archivos manifest.xml y solutionpackage.ddf asegurándonos que los nombres de nuestros archivos depositados en la carpeta RootFile\TEMPLATE\IMAGES\POLLOLOCOBranding sean los mismos a los que hacen referencia .

Al terminar complemente seleccionamos BUILD y RE BUILD SOLUTION del menú principal, si analizamos el Output Windows encontramos lo que realmente sucedió.

1>------ Rebuild All started: Project: POLLOLOCOBranding, Configuration: DebugBuild Any CPU ------

1>C:\windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets(1578,5): warning MSB3245: Could not resolve this reference. Could not locate the assembly "Microsoft.SharePoint, Version=12.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c, processorArchitecture=MSIL". Check to make sure the assembly exists on disk. If this reference is required by your code, you may get compilation errors.

1> POLLOLOCOBranding -> C:\Users\C04125\Downloads\POLLOLOCOBranding\POLLOLOCOBranding\bin\Debug\POLLOLOCOBranding.dll

1> Refreshing Deployment Files...

1>

1> STSDEV - Simple Tools for SharePoint Developers

1> Version: 1.4.0.0

1> Refreshing Solution Package Files

1> Current Solution Name:

1> Current Solution Directory:

1> Refreshing deployment files...

1> Rebuilding DeploymentFiles\manifest.xml

1> Rebuilding DeploymentFiles\SolutionPackage.ddf

1> Deleting Solution Package File...

1> Building Solution Package (Debug Version)

1> Cabinet Maker - Lossless Data Compression Tool

1>

1> Parsing directives

1> Parsing directives (DeploymentFiles\SolutionPackage.ddf: 1 lines)

1> 3,355 bytes in 3 files

1> Executing directives

1> 0.00% - manifest.xml (1 of 3)

1> 0.00% - IMAGES\POLLOLOCOBranding\Binoculars32.gif (2 of 3)

1> 0.00% - IMAGES\POLLOLOCOBranding\Cantine32.gif (3 of 3)

1> 100.00% - IMAGES\POLLOLOCOBranding\Cantine32.gif (3 of 3)

1> 0.00% [flushing current folder]

1> 94.33% [flushing current folder]

1> 4.20% [flushing current folder]

1> 100.00% [flushing current folder]

1> Total files: 3

1> Bytes before: 3,355

1> Bytes after: 3,227

1> After/Before: 96.18% compression

1> Time: 0.03 seconds ( 0 hr 0 min 0.03 sec)

1> Throughput: 112.98 Kb/second

1> Copying WSP file to CAB

========== Rebuild All: 1 succeeded, 0 failed, 0 skipped ==========

 

Y pues el resultado es nuestro flamante WSP el cual podemos implementar en SharePoint.

Copiamos nuestro WSP y dentro de algún servidor de la granja corremos el SharePoint 2010 Management Shell y ejecutamos el siguiente comando de powershell:

Add-SPSolution –LiteralPath d:\scripts\solutions\POLLOLOCOBranding.wsp

Ya dentro del Central Administration dentro de System Settings y despues Manage Farm Solution encontramos nuestro WSP listo para deployarse. Damos clic y seleccionamos Deploy, esto aprovisiona en todos los servidores de la grana los archivos de nuestro WSP en la ruta "C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\TEMPLATE\IMAGES\POLLOLOCOBranding".

Ahora si en nuestros sitios en vez agregamos la URL /layouts/images/pollo/pollologo.jpg

 

 

 

 

 

 

 

Validando la contraseña de las cuentas de una implementación SharePoint

Me pidieron que validara las cuentas que utilizamos para instalar SharePoint en un ambiente de producción y pues la gente de la mesa de soporte al ver que mi petición no tiene tanta urgencia "según ellos" y  conforme a sus acuerdos de niveles de servicio me informaron que en una semana me tendrían la respuesta a mi solicitud. El problema a solucionar es que no se sabía si la contraseña X era la misma que se usó en todas las cuentas de SharePoint, en total fueron 9 cuentas y dado que en una semana ni siquiera estaré aquí físicamente me vi en la necesidad de encontrar una solución alterna rápidamente.

Las cuentas a validar fueron:

POLLOLOCO\SP_farm
POLLOLOCO\SP_services
POLLOLOCO\SP_web
POLLOLOCO\SP_search
POLLOLOCO\SP_sync
POLLOLOCO\SP_superuser
POLLOLOCO\SP_superreader
POLLOLOCO\SP_crawl
POLLOLOCO\SP_unattended

Estimado lector, para solucionar tu problema, ¿qué harías si en algún momento de tu vida fuiste un apasionado programador .NET y sabes que puedes hacer al respecto?, ¿Te esperarías a que la gente de mesa de soporte de acuerdo a sus prioridades te responda?, ¿serias un radical y con el poder que el conocimiento te da resolverías tú mismo tus problemas, claro sin que muera nadie?

En mi caso decidí bajar Visual Studio 2012 Express for Windows Desktop y escribir una aplicación de consola que utilizando el namespace de System.DirectoryServices pudiese consultar el active directory en cuestión y validar las credenciales que necesito validar. En tan solo 12 minutos ya tenía mi instancia de Visual Studio 2012 Express for Windows Desktop instalada, durante la descarga busqué en internet y encontré que desde la versión 3.5 del .NET Framework se incluyó una nueva funcionalidad para gestión de active directory la cual se encuentra en System.DirectoryServices.AccountManagement y pues utilizando la clase PrincipalContext pude invocar el método ValidateCredentials con el cual sabría si la cuenta X o Y era válida.

El código lo comparto aquí:

using System;
using System.Text;
using System.DirectoryServices.AccountManagement;

namespace TestAccount
{

    class Program
    {

        static void Main(string[] args)
        {

            bool isValidAccount = false;

            Console.WriteLine("Domain Name (NetBios):");
            string domainName = Console.ReadLine();

            Console.WriteLine("User account:");
            string accountName = Console.ReadLine();

            Console.WriteLine("Password:");
            string accountPassword = Console.ReadLine();

            try
            {

                if (string.IsNullOrEmpty(domainName) || string.IsNullOrEmpty(accountName) || string.IsNullOrEmpty(accountPassword))
                    throw new ArgumentNullException();

                using (PrincipalContext context = new PrincipalContext(ContextType.Domain, domainName))
                {                    
                    isValidAccount = context.ValidateCredentials(accountName, accountPassword);
                }

                Console.WriteLine("{0}\\{1} - {2}",domainName, accountName, isValidAccount.ValidNotValidString());              
            }
            catch (Exception ex)
            {
                Console.WriteLine("Error: {0}",ex.Message);
            }
            finally
            { 
                Console.ReadKey(); 
            }       
            
        }
    }

    public static class BooleanExtensions
    {
        public static string ValidNotValidString(this bool value)
        {
            return value ? "Valid account" : "Not Valid account, check username or password!";
        }
    }
}

 

Y la solución aquí también la puedes encontrar en el attachment, dentro esta el ejecutable compilado.

PD. Cuando el equipo de la mesa de ayuda me contacte de 5 días, que le debería de decir en respuesta?

Saludos

More Posts Next page »