SharePoint 2010: Resumen de posts (XVI)!

Como siempre, después del recopilatorio de enlaces interesantes sobre SharePoint 2010 (aunque esta vez con un poco de retraso), os dejo el resumen de posts sobre la plataforma que se han publicado en el blog durante el pasado mes de enero.

Capacidades

Desarrollo

IT

Recursos

Otros

Y hasta aquí llega el resumen. Espero que los posts os hayan resultado interesantes.

SharePoint 2010: Configuración de los errores personalizados en el web.config!

A menudo, cuando estamos trabajando en nuestro entorno de desarrollo y se produce algún tipo de error debido a algún artefacto que acabamos de desplegar, recibimos como respuesta de nuestro amigo SharePoint una pantalla amarilla con información nula sobre el error y en la que nos indica que si queremos tener más información de lo que ha pasado, cambiemos la opción CustomErrors a Off en el web.config…¿mande? Realmente para SharePoint 2010 lo que tenemos que hacer es:

  • Localizar los archivos web.config a modificar (son dos en lugar de uno como pasaba en SharePoint 2007):
    • El primero de los archivos se encuentra en c:inetpubwwwrootwssvirtualdirectories<puerto>, dónde <puerto> identifica la aplicación web en la que queremos modificar ese archivo web.config.
    • En segundo (y aquí está la novedad) se encuentra en la carpeta layouts bajo el directorio 14: cProgram FilesCommon FilesMicrosoft SharedWeb Server Extensions14TEMPLATELAYOUTS.

¿Y qué tenemos que cambiar? Pues:

  • En el primero de los archivos web.config (bajo inetpub) configurar las siguientes propiedades con los siguientes valores:
    • Debug=”true”.
    • CallStack=”true” .
    • CustomErrors=”Off” .
  • En el segundo de los archivos, basta con especificar CustomErrors=”Off”.

Con estos cambios, tendremos más información del error. Por supuesto, estos cambios son para nuestros entornos de desarrollo y no para los de producción.

image   image

SharePoint 2010: Limitaciones en los tipos de contenido empresariales!

Una de las novedades que incorpora SharePoint 2010 en ECM (Enterprise Content Management) es la posibilidad de poder crear tipos de contenidos empresariales, es decir, tipos de contenido centralizados que luego puedan ser re-utilizados en cualquier colección de sitios de mi granja o incluso en otras granjas. Para poder utilizar los tipos de contenidos empresariales:

  • Tenemos que definir en la administración central y en la aplicación de servicio de metadatos centralizados la colección de sitios que vamos a usar como hub o base para los tipos de contenidos empresariales.
  • Tenemos que activar la característica de tipos de contenidos empresarial tanto en esa colección de sitios como en cualquier colección de sitios en la que queramos usar los tipos de contenido definidos.
  • Finalmente, o esperamos a que se ejecuten los correspondientes jobs o forzamos su ejecución.
image image image

Además de configurar y usar los tipos de contenido empresariales, es importante conocer sus limitaciones. Las podéis encontrar en el siguiente post: Content Type Hub FAQ and Limitations

SharePoint 2010: Soporte de Joins en LINQ To SharePoint!

Una de las novedades más destacables de SharePoint 2010 a nivel de desarrollo es por una parte la posibilidad de hacer consultas LINQ a listas y bibliotecas de documentos de un sitio de SharePoint gracias al correspondiente proveedor, y por otra que esas consultas LINQ gracias a la actualización del esquema CAML soportan el uso de Joins y campos proyectados en aquellos escenarios en los que tengamos listas o bibliotecas relacionadas por campos de Lookup (tipo de campo por otra parte también extendido para aprovechar los nuevos campos proyectados del esquema CAML de consultas). La idea de este artículo es precisamente ver como podemos tener varias listas de SharePoint relacionadas y poder realizar consultas que devuelvan información de todas ellas gracias a ese soporte de Joins y de campos proyectados:

  • En el ejemplo propuesto, se disponen de tres listas relacionadas a través de los respectivos campos de Lookup: Empresas, Productos y Versiones de Producto. La lista Productos recoge información de la lista Empresas mediante el campo de Lookup Fabricante y la lista Versiones de Producto recoge información de la lista Productos mediante el campo de Lookup Producto.
  • Si queremos visualizar información de la lista Versiones de Producto en la que mostremos información de la propia lista, pero también de las listas en la jerarquía superior, gracias a LINQ To SharePoint, el soporte de Joins y campos proyectados, basta con definir una consulta como sigue:
   1: var VersionsList = from v in ctx.VersionesProducto

   2:                    select new {

   3:                        Version=v.Title,

   4:                        Producto=v.Producto.Title,

   5:                        Fabricante=v.Producto.Fabricante.Title

   6:                    };

   7:  

   8:                                        

   9: ctx.Log = swWriterCAML;

  10: grdVersiones.DataSource = VersionsList;

  11: grdVersiones.DataBind();

  12: txtConsultaCAML2.Text = "Consulta: " +

  13:     swWriterCAML.ToString();

  • Como vemos, por una parte accedemos a la información de la lista Productos mediante v.Producto.Title y por otra accedemos a la información de la lista Empresas mediante v.Producto.Fabricante.Title…luego los campos de Lookup definidos a cada nivel nos van facilitando el acceso a la información como cabía esperar.
  • La consulta CAML generada en este caso es la siguiente:
   1: <View>

   2:     <Query>

   3:         <Where>

   4:             <BeginsWith>

   5:                 <FieldRef Name="ContentTypeId" />

   6:                 <Value Type="ContentTypeId">0x0100</Value>

   7:             </BeginsWith>

   8:         </Where>

   9:     </Query>

  10:     <ViewFields>

  11:         <FieldRef Name="Title" />

  12:         <FieldRef Name="ProductoTitle" />

  13:         <FieldRef Name="ProductoFabricanteTitle" />

  14:     </ViewFields>

  15:     <ProjectedFields>

  16:         <Field Name="ProductoTitle" Type="Lookup" List="Producto" ShowField="Title" />

  17:         <Field Name="ProductoFabricanteTitle" Type="Lookup" List="ProductoFabricante" ShowField="Title" />

  18:     </ProjectedFields>

  19:     <Joins>

  20:         <Join Type="LEFT" ListAlias="Producto">

  21:             <!--List Name: Productos-->

  22:             <Eq>

  23:                 <FieldRef Name="Producto" RefType="ID" />

  24:                 <FieldRef List="Producto" Name="ID" />

  25:             </Eq>

  26:         </Join>

  27:         <Join Type="LEFT" ListAlias="ProductoFabricante">

  28:             <!--List Name: Empresas-->

  29:             <Eq>

  30:                 <FieldRef List="Producto" Name="Fabricante" RefType="ID" />

  31:                 <FieldRef List="ProductoFabricante" Name="ID" />

  32:             </Eq>

  33:         </Join>

  34:     </Joins>

  35:     <RowLimit Paged="TRUE">2147483647</RowLimit>

  36: </View>

Precisamente viendo el CAML generado, queda claro una vez más la potencia de usar LINQ To SharePoint en lugar de CAML para consultas con un cierto grado de complejidad ya que el proveedor nos genera una consulta bien formada y además definir la consulta en el entorno de desarrollo con LINQ es altamente productivo. Finalmente, el resultado:

image

SharePoint 2010: Arquitectura al detalle (I)!

En muchas de las ocasiones en las que doy una charla o un curso sobre SharePoint, o simplemente cuando hablo con alguien sobre nuestro servidor favorito me gusta comentar la importancia de conocer los bloques fundamentales de la plataforma. En otras palabras, con SharePoint como cualquier otro producto o plataforma que se precie es vital conocer y dominar su arquitectura. Por suerte, y como primer nivel de aproximación a la arquitectura de SharePoint, en MSDN tenemos disponible este excelente artículo: SharePoint 2010 Architecture Overview. El artículo presenta un resumen de los bloques fundamentales de la plataforma comenzando por las capas a nivel de desarrollo que la integran, y pasando por las APIS en cliente y servidor, así como el modelo de ejecución…aunque os recomiendo la lectura del artículo, me gustaría destacar los siguientes puntos del mismo:

  • El concepto de arquitectura de SharePoint desde la perspectiva del desarrollo y también a partir de una serie de definiciones que identifican SharePoint como portal con administración delegada, un host de flujos de trabajo, una aplicación para gestión de contenidos, etc.
  • El stack de SharePoint como plataforma de desarrollo:

Platform stack for SharePoint 2010

  • SharePoint como aplicación ASP.NET en IIS, dónde se detalla el concepto fundamental de Aplicación Web en SharePoint y como funciona el proceso de peticiones de sitios SharePoint.
  • Modelos de despliegue de soluciones SharePoint: Granja vs SandBox.
  • Modelo de ejecución, dónde destacaría el modelo de ejecución de las soluciones Sandbox en el proceso del mismo nombre y la política CAS restrictiva que se aplica.

Request processing model in sandboxed solutions

  • Diferencias entre páginas de aplicación y páginas de sitio en cuanto a características, propósito, parseado, etc.
  • Modelo de datos, administración de datos y sistema de consultas dónde se repasa el concepto de lista como unidad fundamental de almacenamiento de información en SharePoint, el concepto de tipo de contenido y de tipo de campo, etc.
  • Las aplicaciones de servicio y el framework de aplicaciones de servicio.

10 server SharePoint Foundation service objects

La verdad, a pesar de ser un “overview” el artículo está bastante completo y refleja los conceptos fundamentales de la arquitectura de SharePoint. Sin duda, un “must read” para todo aquel que trabaje o quiera trabajar con SharePoint.

SharePoint 2010: Recopilatorio de enlaces interesantes (XVII)!

Como no podía ser de otra forma, el mes de marzo comienza con un nuevo recopilatorio de enlaces y recursos interesantes en torno a SharePoint 2010. Espero que os resulten de interés como en otras ocasiones.

Capacidades

Desarrollo

IT

Otros