SharePoint Latin Rotating Header Image

March, 2011:

Cuantos ingenieros se necesitan para cambiar una bombilla o crear sitios SharePoint

No es curioso, es un hecho que en el ambiente laboral relacionado con tecnologías de información y seguramente en muchos otros, nos encontramos con diversas personalidades, temperamentos y arquetipos colaborando día con día para resolver algún problema técnico o de negocio. Las personas tenemos toda una historia distinta, además de cualidades que en parte de forma consiente o inconsciente constituye la forma muy particular de ver y reaccionar ante vida, en algunos casos estas cualidades son las adecuadas para ciertos escenarios pero que en definitiva en otros no lo son.

Entonces la pregunta es, ¿cómo aprovechar lo que cada quien aporta para generar valor empresarial?, esa es una pregunta que especialistas en Management, Leadership y Coaching podrían responder sin ningún problema. Sin embargo, desde mi óptica por lo menos compartir constantemente una visión compartida con lineamientos claros es esencial para organizar y aprovechar lo que cada persona con su historia histeria y experiencia aporta.

En esta historia, el requerimiento es crear un conjunto finito de sitios con las siguientes características:

  • Cada sitio se basa en la plantilla de sitio de Trabajo en Equipo
  • Cada sitio no deberá tener herencia de permisos
  • Cada sitio deberá contar con 4 grupos “Owners, Visitors, Members, Permissions” bajo la nomenclatura “Sitio + Nombre de grupo
  • Cada sitio cuenta con usuarios específicos para cada grupo.

Lo que piensan los miembros del equipo de TI:

  • Miembro 1 – Vamos a lucirnos con la solución, hagamos un WSP con feature receiver a nivel sitio web para que cuando le den activar en las características del sitio, programáticamente los construya y configure.
  • Miembro 2 – ¿Hay urgencia por parte del cliente como para dedicar tiempo a construir y probar un WSP?, ¿se va a reutilizar la jerarquía en algún otro sitio en el futuro?, ¿conviene dejar archivos en el 12 hive y un ensamblado en el GAC con full trust assembly?, ¿vamos a implementar en DEV, QA, UAT y PROD el WSP? Yo digo que construyamos los sitios manualmente usando el UI de SharePoint.
  • Miembro 3 – Usemos scripts en un archivos *.bat que ejecute el comando stsadm.exe para crear los sitios y grupos, pasamos parámetros e nivel comando y creamos un solo archivo que cuente con todas las instrucciones necesarias.

Después los miembros dan inicio a los argumentos técnico-personales para defender su postura a capa y espada, como si fueran program managers de microsoft, correos electrónicos empiezan a fluir con preguntas que toman minutos leer y escribir de regreso para ser enviados de nuevo. El tiempo pasa, el tema sube de nivel, siguen estancados, el usuario pregunta por sus sitios y en eso Miembro 2 lo toma personal, sube de nivel su contestación y claudica ante su postura. Miembro 1 ratifica la postura de Miembro 2 con el afán de no afectar al equipo y Miembro 3 procede a ejecutar la postura del Miembro 2. Tiempo total transcurrido 2.5 horas.

Si lo analizamos, todos pierden. El espíritu del equipo se deteriora, definitivamente se ve mal y el usuario de plano esperando. Realmente cualquier postura es aceptable y totalmente factible, cada una con sus peculiaridades, estimaciones, esfuerzos y consecuencias.

Dicho esto, tengo 2 preguntas:

  1. ¿Cómo podríamos contextualizar las cosas para asegurar que antes de dar inicio a una solución construida por ingenieros, todos estén viendo hacia el mismo lugar? Esa es una respuesta que probablemente podamos encontrar aquí http://www.crecenegocios.com/los-objetivos-de-una-empresa/
  2. ¿Qué estrategia técnica conviene utilizar para un escenario donde el resultado se requiere de inmediato? A veces me pregunto si mi trabajo es preguntar, sin embargo haciendo un intento de posible respuesta, dejo algunos cuestionamientos respecto al escenario planteado y claro, su implementación.

Construyendo sitios de forma manual

Pros

  • Rápida ejecución usando UI de SharePoint
  • Cero dependencia a código, ensamblado o XMLs, todo queda en la base de datos usando los site definitions y templates propietarios de SharePoint que si están considerados para ser migrados y respaldados

Cons

  • No es repetible
  • Requiere de intervención manual para replicar en cada ambiente y por lo tanto hay margen de error

Implementación

Ubicados en el sitio en cuestión accedemos a Acciones de sitio, Configuración del sitio, Toda la configuración del sitio y al de final las galerías elegimos crear sitios o área de trabajo. Especificamos el nombre, url y los siguientes puntos:

Crear sitio Configurar grupos
image image

 

Construyendo sitios programáticamente

Pros

  • Total portabilidad a múltiples ambientes y sitios con mínimo esfuerzo de implementación
  • Aprovisionamiento y des aprovisionamiento flexible de la funcionalidad y dependencias

Cons

  • Crea una dependencia a un WSP, ensamblado en GAC y archivos en 12 hive
  • Requiere de construcción, pruebas, empaquetamiento y puesta en marcha en cada ambiente
  • Pasa a control de versiones y gestión

Implementación

En este caso vemos que utilizamos una colección especial de tipo diccionario para almacenar la URL y Nombre del sitio que deseamos crear. Existen varias formas de hacer lo mismo, en este caso recorremos la colección de plantillas SharePoint para poder elegir la que usaremos “Team Sites”. Recorremos la colección de nuestro diccionario y utilizamos la colección Webs para agregar un nuevo site pasando los argumento recolectados, lo mas importante destacar en este punto es que el ultimo argumento false indica que no se mantiene la herencia y a continuación ya dentro del sitio rompemos la herencia, posteriormente recorremos el arreglo que tiene el nombre de los grupos que estaremos construyendo programáticamente, ese código se los debo y si alguien quiere compartirlo adelante.

           uint        lcid_english = 1033;
            string      siteUrl = "http://portal.litwareinc.com";
            string[]    groupTypeNames = {"Owners","Members","Permissions","Visitors"};

            Dictionary<string, string> targetSites = new Dictionary<string, string>();
            targetSites.Add("demo1", "Sitio de demostracion 1");
            targetSites.Add("demo2", "Sitio de demostracion 2");
            targetSites.Add("demo3", "Sitio de demostracion 3");
                    
                using (SPSite site = new SPSite(siteUrl))
                {
                    SPWebTemplate siteTemplate = null;
                    SPWebTemplateCollection templateCollection = site.GetWebTemplates(lcid_english);
                    
                    foreach (SPWebTemplate template in templateCollection)
                    {
                        if (template.Title.Equals("Team Site"))
                        {
                            siteTemplate = template; 
                            break;
                        }
                    }

                    using (SPWeb web = site.OpenWeb())
                    {
                        foreach (KeyValuePair<string, string> siteInfo in targetSites)
                        {
                            using (SPWeb newWeb = web.Webs.Add(
siteInfo.Key, 
siteInfo.Value, 
string.Empty, 
lcid_english, siteTemplate, false, false))
                            {
                                newWeb.BreakRoleInheritance(false);
                                newWeb.Update();

                                foreach(string groupTypeName in groupTypeNames)
                                {
                                    string groupType = string.Format("{0} {1}",siteInfo.Value,groupTypeName);
                                    
                                    // aqui deberas crear el grupo y asignar los permisos         
                                }                                                                  
                            }                            
                        }
                    }                
                } 



Construyendo sitios con comandos stsadm.exe


Pros


  • Reutilización moderada e intervención manual para especificar sites, groups que se aprovisionaran por los comandos
  • Fácil de corregir y reaccionar ante cualquier error
  • La forma recomendada por Microsoft

Cons


  • Crea una dependencia al script que ejecuta los comandos de staadm.exe para la estructura solicitada
  • Pasa a control de versiones y gestión

Implementación


En esta alternativa utilizamos las sentencias del comando stsadm.exe ubicado en c:\program files\common files\microsoft shared\web server extensions\12\bin especificando mediante –o la opción que deseamos y mediante los parámetros especificamos lo que requerimos. Específicamente –unique describe que no queremos heredar los permisos. Subrayo en rojo la parte donde especificamos el URL del sitio que estaremos creando. En este caso estamos creando un sitio llamado Sitio 1 y posteriormente creando cuatro grupos en donde los grupos Visitors y Members tienen como dueño al grupo Permissions.


stsadm.exe -o createweb –url “el url del sitio donde crearemos/url del nuevo sitio -lcid 1033 -sitetemplate STS#0  -title “Sitio 1″ -description “” –unique


stsadm.exe -o creategroup -url “el url del sitio donde aplicaremos” -name “Sitio 1 Permissions” -description “Permissions of the site” -ownerlogin “administrator@litwareinc.com” -type “Owner”


stsadm.exe -o creategroup -url “el url del sitio donde aplicaremos” -name “Sitio 1 Owners” -description “Owners of the site” -ownerlogin “administrator@litwareinc.com” -type “Owner”


stsadm.exe -o creategroup -url “el url del sitio donde aplicaremos” -name “Sitio 1 Visitors” -description “Visitors of the site” -ownerlogin “Sitio 1 Permissions” -type “Visitor”


stsadm.exe -o creategroup -url “el url del sitio donde aplicaremos” -name “Sitio 1 Members” -description “Members of the site” -ownerlogin “Sitio 1 Permissions” -type “Member”


 


Personalmente en ocasiones he llegado a pensar, ¿qué es mas complejo?, la tecnología o la psicología, en fin.


¿Cuál es la mejor alternativa? Depende Sonrisa

El acceso denegado en el rastreo de SharePoint y la absolución de las culpas de omisión

Padre confieso que he cometido faltas graves cuando he configurado SharePoint. Arrepentido vengo ante usted buscando consuelo y consejo. Sucede que el  log del crawl esta marcando constantemente errores y advertencias especificando que no se tiene el acceso para poder realizar el rastreo del contenido del sitio en cuestión. Para ser exacto el error dice: ”Access is denied. Check that the Default Content Access Account has access to this content, or add a crawl rule to crawl this content”. ¿Que podría ser? Según yo he seguido las mejores prácticas que google arroja desde la primer búsqueda.

Hijo, solo espero que esta situación no esté pasando en las instalaciones de un corporativo importante en el país. De cualquier forma, deja que te pregunte lo siguiente: ¿Puedes acceder a tu portal desde el mismo servidor de aplicaciones?, ¿De casualidad estas usando Host Headers en tu Web Applications?, ¿Que cuenta de acceso a contenido utilizaste?, ¿En que otras implementaciones has tenido el mismo problema?, ¿Te has presentado a instalar sin haberlo hecho antes?

No respondas, reflexiona.

Cuando el FQDN o el Host Header no coinciden con el nombre del equipo local donde residen los servicios, se produce un error en la autentificación y por lo tanto el servicio de Crawl no puede acceder al portal para realizar el rastreo correspondiente, es por ello que el error nos da acceso denegado. Según el articulo 896861 de nuestro libro de KB, esta característica se introdujo con el Service Pack 1 de Windows Server 2003 para prevenir ataques.

La solución es

  1. Acceder al registro de Windows ejecutando el comando REGEDIT en cualquier ventana de consola o desde el Run del Windows
  2. Localizar en el árbol la jerarquía HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa
  3. Dentro de Lsa dar clic derecho para agregar una nueva entrada de tipo DWORD llamada DisableLoopbackCheck
  4. Una vez registrada, dar doble clic sobre la nueva entrada y modificar el valor a 1
  5. No olvides cerrar la aplicación del registro de Windows

También es importante que sepas

  1. La cuenta acceso a contenido utilizada para realizar el proceso de crawl, no debe de ser una cuenta de tipo granja con permisos elevados, porque esto causara que el crawl incluya paginas de configuración y contenido restringido incluyéndolas en los resultados de las búsquedas, esto se debe a que la cuenta utilizada tiene permisos de acceso. 
  2. Asegúrate de revisar dentro del Central Administration en Application Management la sección de SharePoint Server Shared Services el enlace Check services enabled in this farm  para poder constatar que realmente sigues correctamente los mandamientos de configuración recomendados por la santa herramienta.

Hijo, de penitencia

  • Escribirás y publicarás un post con el escenario y la solución con tu propia experiencia
  • Dejaras de utilizar los primeros resultados que arroja Google como alternativa de solución para tus retos profesionales y para tu vida personal
  • Participaras como asistente en al menos 2 sesiones de comunidad SharePoint en México
  • Invertirás 10% de tu sueldo en suscripciones, libros y revistas profesionales relacionadas con SharePoint

Puedes ir en paz, ve con Bill y Rizzo.

WSS 3.0 del primo de un amigo

El primo de un amigo comenta que su implementación de WSS 3.0 con SP2 después de 2 o 3 semanas de implementarse en producción muestra comportamiento muy extraño. Sucede que el disco duro del servidor de aplicaciones se ha llenado de forma repentina y sin explicación alguna.

La realidad es que si existen dos explicaciones.

  • La primera es que la implementación WSS 3.0 con SP2 del primo de un amigo careció de planeación y gobernabilidad.
  • La segunda es que la bitácora de rastreo a.k.a trace log ha saturado con archivos e información de trace  el disco duro.

Sucede que WSS 3.0 recién instalado fuera de la caja viene con la configuración de trace log automática de generar 100 archivos de log durante 100 minutos. Si hacemos la matemática de esto podríamos fácilmente identificar porqué se llenó el disco duro estrepitosamente.

La solución es hacerle caso a la herramienta central de administración y en la sección de OperationsDiagnostic logging dar clic al enlace “Learn about using trace log” para entender realmente las implicaciones de especificar el número de archivos de logs que SharePoint va a generar durante un periodo de minutos por archivo, con la finalidad de consolidar en una bitácora informacion de cambios que le permita al administrador de la granja entender comportamientos de procesos y configuracion.

image

Un saludo al primo de mi amigo que se llama Juan para que me entiendas Pedro. Smile