SharePoint 2010: Encuesta de uso de la plataforma – Tú opinión si importa ;-)!

Dentro de poco más de un mes nuestro servidor favorito cumplirá un año, y como en todo, siempre hay oportunidades de mejora. Por eso, Microsoft ha preparado una sencilla encuesta de acara a obtener feedback para las futuras versiones de la plataforma (tanto On-Premise como Online), asique si tienes un par de minutos, creo que es interesante que te detengas a responder la encuesta desde este enlace.

SharePoint2010_thumb

SharePoint 2010: Número máximo de elementos en una lista externa!

Como sabéis, en SharePoint 2010 aparece el concepto de lista externa como artefacto que permite integrar datos procedentes de un sistema externo (una base se datos, un CRM, un ERP, etc) en un sitio de SharePoint. A todos los efectos, una lista externa es como cualquier otra lista de SharePoint con ciertas limitaciones, a la que hay que añadirle el hecho de que el número máximo de elementos que por defecto contiene la lista externa está limitado a 2.000…por suerte, este número se puede configurar y elevar de acuerdo a nuestras necesidades sin superar el límite máximo de 1.000.000 de elementos definido para SharePoint 2010. En este enlace podéis ver como cambiar el valor por defecto de número máximo de elementos para una lista externa.

SharePoint2010_thumb

CompartiMOSS: El Nº 7 ya está recién salido del horno :-)!

Ya tenemos disponible para descarga el número 7 de la revista CompartiMOSS en la que gracias a Fabián Imaz y Gustavo Veléz he tenido la oportunidad de colaborar junto con otros “personajes” conocidos del mundillo de SharePoint. Los detalles de este nuevo número en cuento a contenido son los siguientes:

  • Editorial
  • El lado social de SharePoint (Alberto Díaz Martín)
  • Autenticación en SharePoint 2010 (I) (David Martos)
  • Entrevista con Fabian Imaz
  • Business Intelligence en SharePoint 2010: Integración de Reporting Services (II)
    (Juan Carlos González Martín)
  • Los elementos web de Project Server 2010 (Juan Pablo Pussacq Laborde)
  • Custom Actions en los menús de SharePoint 2010 (Victor Cea Espejo)
  • Office 365 y SharePoint Online (Mario Cortés Flores)
  • Personalización de UI con OPENXML y VS 2010 en Microsoft Office 2010 (Alejandro Garrido)
  • Microsoft Dynamics CRM 2011 y SharePoint 2010. Mejor juntos… (Pablo Peralta)

En cuanto a los enlaces de descarga de la revista:

Herramientas: Disponibles cursos y herramientas de accesibilidad gratuitas para desarrolladores!

Microsoft anunció la semana pasada una excelente noticia: la disponibilidad gratuita para desarrolladores de un conjunto de herramientas y cursos online que faciliten el desarrollo de aplicaciones que sean accesibles. Estos cursos y herramientas así como otros recursos en torno a la accesibilidad los tenéis disponibles en este enlace en el que tenemos acceso a recursos para lograr construir aplicaciones web, aplicaciones Windows Forms o aplicaciones WPF que sean accesibles.

image

SharePoint 2010: ¿Cuándo uso SPQuery y cuando LINQ To SharePoint?

Cómo ya se ha comentado en otros artículos, SharePoint 2010 define la posibilidad de realizar consultas contra listas y bibliotecas a través del nuevo proveedor LINQ To SharePoint que se encarga de generar la consulta CAML correspondiente. El uso de LINQ To SharePoint nos permite reemplazar el uso de la clase SPQuery a la hora de realizar estas consultas. Ahora bien, la pregunta es: ¿siempre podremos usar LINQ To SharePoint en lugar de SPQuery? La respuesta es que hay ciertas excepciones que nos llevarán a usar SPQuery:

  • Cuando tenemos usuarios anónimos, ya que LINQ To SharePoint no soporta este tipo de usuarios.
  • Cuando tenemos una columna de lookup que se refiere a una lista de otro sitio. LINQ To SharePoint soporta estos escenarios, pero a costa de que generemos nosotros el correspondiente modelo de entidades ya que SPMetal no está preparado para este escenario.
  • Cuando el rendimiento es vital en nuestra solución, ya que LINQ To SharePoint introduce cierta sobrecarga (mínima, pero la introduce) que penaliza ligeramente el rendimiento.
  • Necesitamos consultar los datos de una lista externa, lo cuál no está soportado en LINQ To SharePoint.

Finalmente, os dejo los posts de LINQ To SharePoint publicados hasta ahora en el blog:

SharePoint2010_thumb

SharePoint 2010: Error ‘Add Solution': Exception from HRESULT: 0x8107026E" al desplegar un Web Template!

Este error tan bonito fue el que tuve el otro día cuando estaba creando una Web Template para SharePoint 2010 como mecanismo para aprovisionar un sitio en SharePoint 2010 siguiendo este excelente post. Por suerte, y como para casi todo en SharePoint, siempre hay un pequeño truco o solución que te permite solventar el problema: el Web Template y el módulo que crees para provisionarla se tienen que llamar igual. Os dejo como quedan el archivo elements.xml y onet.xml que he usado para el Web Template:

  • Archivo elements.xml:
   1: <?xml version="1.0" encoding="utf-8"?>

   2: <Elements xmlns="http://schemas.microsoft.com/sharepoint/">

   3:     <WebTemplate BaseConfigurationID="0"

   4:                  BaseTemplateID="1"

   5:                  BaseTemplateName="STS"

   6:                  Description="CIIN Web Template"

   7:                  DisplayCategory="CIIN Sites"

   8:                  Name="CIINWebTemplate"

   9:                  Title="Espacio Reuniones">        

  10:     </WebTemplate>

  11: </Elements>

  • Archivo one.xml:
   1: <?xml version="1.0" encoding="utf-8"?>

   2: <Project Title="$Resources:onet_TeamWebSite;" Revision="2" ListDir="$Resources:core,lists_Folder;" xmlns:ows="Microsoft SharePoint" UIVersion="4">

   3:   <NavBars>

   4:     <NavBar Name="$Resources:core,category_Top;" Separator="&amp;nbsp;&amp;nbsp;&amp;nbsp;" Body="&lt;a ID='onettopnavbar#LABEL_ID#' href='#URL#' accesskey='J'&gt;#LABEL#&lt;/a&gt;" ID="1002" />

   5:     <NavBar Name="$Resources:core,category_Documents;" Prefix="&lt;table border='0' cellpadding='4' cellspacing='0'&gt;" Body="&lt;tr&gt;&lt;td&gt;&lt;table border='0' cellpadding='0' cellspacing='0'&gt;&lt;tr&gt;&lt;td&gt;&lt;img src='/_layouts/images/blank.gif' id='100' alt='' border='0'&gt;&amp;nbsp;&lt;/td&gt;&lt;td valign='top'&gt;&lt;a id='onetleftnavbar#LABEL_ID#' href='#URL#'&gt;#LABEL#&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/td&gt;&lt;/tr&gt;" Suffix="&lt;/table&gt;" ID="1004" />

   6:     <NavBar Name="$Resources:core,category_Lists;" Prefix="&lt;table border='0' cellpadding='4' cellspacing='0'&gt;" Body="&lt;tr&gt;&lt;td&gt;&lt;table border='0' cellpadding='0' cellspacing='0'&gt;&lt;tr&gt;&lt;td&gt;&lt;img src='/_layouts/images/blank.gif' id='100' alt='' border='0'&gt;&amp;nbsp;&lt;/td&gt;&lt;td valign='top'&gt;&lt;a id='onetleftnavbar#LABEL_ID#' href='#URL#'&gt;#LABEL#&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/td&gt;&lt;/tr&gt;" Suffix="&lt;/table&gt;" ID="1003" />

   7:     <NavBar Name="$Resources:core,category_Discussions;" Prefix="&lt;table border='0' cellpadding='4' cellspacing='0'&gt;" Body="&lt;tr&gt;&lt;td&gt;&lt;table border='0' cellpadding='0' cellspacing='0'&gt;&lt;tr&gt;&lt;td&gt;&lt;img src='/_layouts/images/blank.gif' id='100' alt='' border='0'&gt;&amp;nbsp;&lt;/td&gt;&lt;td valign='top'&gt;&lt;a id='onetleftnavbar#LABEL_ID#' href='#URL#'&gt;#LABEL#&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;&lt;/td&gt;&lt;/tr&gt;" Suffix="&lt;/table&gt;" ID="1006" />

   8:   </NavBars>

   9:   <ListTemplates>

  10:   </ListTemplates>

  11:   <DocumentTemplates>

  12:     <DocumentTemplate Path="STS" Name="" DisplayName="$Resources:core,doctemp_None;" Type="100" Default="FALSE" Description="$Resources:core,doctemp_None_Desc;" />

  13:     <DocumentTemplate Path="STS" DisplayName="$Resources:core,doctemp_Word97;" Type="101" Description="$Resources:core,doctemp_Word97_Desc;">

  14:       <DocumentTemplateFiles>

  15:         <DocumentTemplateFile Name="doctemp\word\wdtmpl.doc" TargetName="Forms/template.doc" Default="TRUE" />

  16:       </DocumentTemplateFiles>

  17:     </DocumentTemplate>

  18:     <DocumentTemplate Path="STS" DisplayName="$Resources:core,doctemp_Excel97;" Type="103" Description="$Resources:core,doctemp_Excel97_Desc;">

  19:       <DocumentTemplateFiles>

  20:         <DocumentTemplateFile Name="doctemp\xl\xltmpl.xls" TargetName="Forms/template.xls" Default="TRUE" />

  21:       </DocumentTemplateFiles>

  22:     </DocumentTemplate>

  23:     <DocumentTemplate Path="STS" DisplayName="$Resources:core,doctemp_Powerpoint97;" Type="104" Description="$Resources:core,doctemp_Powerpoint97_Desc;">

  24:       <DocumentTemplateFiles>

  25:         <DocumentTemplateFile Name="doctemp\ppt\pptmpl.pot" TargetName="Forms/template.pot" Default="TRUE" />

  26:       </DocumentTemplateFiles>

  27:     </DocumentTemplate>

  28:     <DocumentTemplate Path="STS" DisplayName="$Resources:core,doctemp_Word;" Type="121" Default="TRUE" Description="$Resources:core,doctemp_Word_Desc;">

  29:       <DocumentTemplateFiles>

  30:         <DocumentTemplateFile Name="doctemp\word\wdtmpl.dotx" TargetName="Forms/template.dotx" Default="TRUE" />

  31:       </DocumentTemplateFiles>

  32:     </DocumentTemplate>

  33:     <DocumentTemplate Path="STS" DisplayName="$Resources:core,doctemp_Excel;" Type="122" Description="$Resources:core,doctemp_Excel_Desc;">

  34:       <DocumentTemplateFiles>

  35:         <DocumentTemplateFile Name="doctemp\xl\xltmpl.xlsx" TargetName="Forms/template.xlsx" Default="TRUE" />

  36:       </DocumentTemplateFiles>

  37:     </DocumentTemplate>

  38:     <DocumentTemplate Path="STS" DisplayName="$Resources:core,doctemp_Powerpoint;" Type="123" Description="$Resources:core,doctemp_Powerpoint_Desc;">

  39:       <DocumentTemplateFiles>

  40:         <DocumentTemplateFile Name="doctemp\ppt\pptmpl.pptx" TargetName="Forms/template.pptx" Default="TRUE" />

  41:       </DocumentTemplateFiles>

  42:     </DocumentTemplate>

  43:     <DocumentTemplate Path="STS" DisplayName="$Resources:core,doctemp_OneNote;" Type="111" Description="$Resources:core,doctemp_OneNote_Desc;">

  44:       <DocumentTemplateFiles>

  45:         <DocumentTemplateFile Name="doctemp\onenote\template.onepkg" TargetName="Forms/template.onepkg" Default="TRUE" />

  46:       </DocumentTemplateFiles>

  47:     </DocumentTemplate>

  48:     <DocumentTemplate Path="STS" DisplayName="$Resources:core,doctemp_FP;" Type="102" Description="$Resources:core,doctemp_FP_Desc;">

  49:       <DocumentTemplateFiles>

  50:         <DocumentTemplateFile Name="doctemp\fp\fptmpl.htm" TargetName="Forms/template.htm" Default="TRUE" />

  51:       </DocumentTemplateFiles>

  52:     </DocumentTemplate>

  53:     <DocumentTemplate Path="STS" DisplayName="$Resources:core,doctemp_BasicPage;" Type="105" Description="$Resources:core,doctemp_BasicPage_Desc;">

  54:       <DocumentTemplateFiles>

  55:         <DocumentTemplateFile Name="doctemp\blankpgs\_basicpage.htm" TargetName="Forms/_basicpage.htm" Default="TRUE" />

  56:       </DocumentTemplateFiles>

  57:     </DocumentTemplate>

  58:     <DocumentTemplate Path="STS" DisplayName="$Resources:core,doctemp_WebPartPage;" Type="106" Description="$Resources:core,doctemp_WebPartPage_Desc;">

  59:       <DocumentTemplateFiles>

  60:         <DocumentTemplateFile Name="doctemp\smartpgs\_webpartpage.htm" TargetName="Forms/_webpartpage.htm" Default="TRUE" />

  61:       </DocumentTemplateFiles>

  62:     </DocumentTemplate>

  63:     <DocumentTemplate XMLForm="TRUE" Path="STS" DisplayName="$Resources:core,doctemp_BlankForm;" Type="1000" Default="TRUE" Description="$Resources:core,doctemp_BlankForm_Desc;">

  64:       <DocumentTemplateFiles>

  65:         <DocumentTemplateFile Name="doctemp\xmlforms\blank\template.xml" TargetName="Forms/template.xml" Default="TRUE" />

  66:       </DocumentTemplateFiles>

  67:     </DocumentTemplate>

  68:   </DocumentTemplates>

  69:   <Configurations>  

  70:     <Configuration ID="0" Name="Default" MasterUrl="_catalogs/masterpage/v4.master">

  71:       <Lists>

  72:         <List FeatureId="00BFEA71-E717-4E80-AA17-D0C71B360101" Type="101" Title="$Resources:core,shareddocuments_Title;" Url="$Resources:core,shareddocuments_Folder;" QuickLaunchUrl="$Resources:core,shareddocuments_Folder;/Forms/AllItems.aspx" />

  73:         <List FeatureId="00BFEA71-6A49-43FA-B535-D15C05500108" Type="108" Title="$Resources:core,discussions_Title;" Url="$Resources:core,lists_Folder;/$Resources:core,discussions_Folder;" QuickLaunchUrl="$Resources:core,lists_Folder;/$Resources:core,discussions_Folder;/AllItems.aspx" EmailAlias="$Resources:core,discussions_EmailAlias;" />

  74:         <List FeatureId="00BFEA71-D1CE-42de-9C63-A44004CE0104" Type="104" Title="$Resources:core,announceList;" Url="$Resources:core,lists_Folder;/$Resources:core,announce_Folder;">

  75:           <Data>

  76:             <Rows>

  77:               <Row>

  78:                 <Field Name="Title">$Resources:onetid11;</Field>

  79:                 <Field Name="Body">$Resources:onetid12;</Field>

  80:                 <Field Name="Expires">&lt;ows:TodayISO/&gt;</Field>

  81:               </Row>

  82:             </Rows>

  83:           </Data>

  84:         </List>

  85:         <List FeatureId="00BFEA71-2062-426C-90BF-714C59600103" Type="103" Title="$Resources:core,linksList;" Url="$Resources:core,lists_Folder;/$Resources:core,links_Folder;" />

  86:         <List FeatureId="00BFEA71-EC85-4903-972D-EBE475780106" Type="106" Title="$Resources:core,calendarList;" Url="$Resources:core,lists_Folder;/$Resources:core,calendar_Folder;" QuickLaunchUrl="$Resources:core,lists_Folder;/$Resources:core,calendar_Folder;/Calendar.aspx" EmailAlias="$Resources:core,calendar_EmailAlias;" />

  87:         <List FeatureId="00BFEA71-A83E-497E-9BA0-7A5C597D0107" Type="107" Title="$Resources:core,taskList;" Url="$Resources:core,lists_Folder;/$Resources:core,tasks_Folder;" QuickLaunchUrl="$Resources:core,lists_Folder;/$Resources:core,tasks_Folder;/AllItems.aspx" />

  88:       </Lists>

  89:       <SiteFeatures>

  90:         <!-- BasicWebParts Feature -->

  91:         <Feature ID="00BFEA71-1C5E-4A24-B310-BA51C3EB7A57" />

  92:         <!-- Three-state Workflow Feature -->

  93:         <Feature ID="FDE5D850-671E-4143-950A-87B473922DC7" />

  94:       </SiteFeatures>

  95:       <WebFeatures>

  96:         <!-- TeamCollab Feature -->

  97:         <Feature ID="00BFEA71-4EA5-48D4-A4AD-7EA5C011ABE5" />

  98:         <!-- MobilityRedirect -->

  99:         <Feature ID="F41CC668-37E5-4743-B4A8-74D1DB3FD8A4" />

 100:         <!-- WikiPageHomePage Feature -->

 101:         <Feature ID="00BFEA71-D8FE-4FEC-8DAD-01C19A6E4053" />

 102:       </WebFeatures>

 103:     </Configuration>

 104:   </Configurations>

 105: </Project>

SharePoint 2010: ¿Cuántos elementos se pueden provisionar con un módulo?

Como ya he comentado en otros artículos, la forma natural de provisionar elementos en SharePoint 2010 es a través de un módulo. Y por elementos entiendo una página maestra, un archivo de código JavaScript, una imagen, etc. Una pregunta que me hicieron hace poco con respecto a los módulos es la de si sólo permiten provisionar un único elemento o varios. La respuesta es que varios y en principio que yo sepa no hay un límite definido del número de elementos que permite provisionar un módulo:

image   image

Por ejemplo, para provisionar dos imágenes y un archivo de texto el archivo elements.xml del módulo quedaría como sigue:

   1: <?xml version="1.0" encoding="utf-8"?>

   2: <Elements xmlns="http://schemas.microsoft.com/sharepoint/">

   3:   <Module Name="Module1">

   4:     <File Path="Module1\Sample.txt" Url="Sample.txt" />

   5:     <File Path="Module1\copy_32_32_1.png" Url="copy_32_32_1.png" />      

   6:     <File Path="Module1\Feature_Icon_2.jpg" Url="Feature_Icon_2.jpg" />

   7:   </Module>

   8: </Elements>

Finalmente os recuerdo un par de artículos ya publicados en torno a este tema:

SharePoint 2010: ¿Quién puede ver el Developer Dashboard??

Cómo sabéis, SharePoint 2010 incorpora una interesante utilidad que permite visualizar desde la interfaz de usuario como se está comportando la página actual en cuanto a tiempo que tardan los distintos componentes de la misma en cargarse, llamadas a la API realizadas, operaciones IO, e incluso sentencias T-SQL…por decirlo de forma muy resumida, nos da una trazabilidad de la ejecución de la página. Para poder habilitar el Developer Dashboard tenemos las opciones comentadas en:

Una pregunta que pude surgir cuando se activa el Developer Dashboard es la siguiente: ¿Quién puede verlo: todos los usuarios o sólo algunos? La respuesta es que sólo algunos usuarios y más concretamente:

  • Administradores de la Colección de Sitios.
  • Usuarios con “Control total” sobre el sitio. Por ejemplo, usuarios que pertenezcan al grupo “Propietarios del sitio” en un sitio de tipo “Sitio de grupo”.

Finalmente, os recuerdo que es posible escribir nuestra propia información en el Developer Dashboard:

SharePoint2010_thumb

SUGES: Disponibles los materiales de los 2 WebCasts de marzo!

Ya tenéis disponible para descarga los materiales de los 2 WebCasts que hemos realizado en SUGES durante el mes de marzo:

image

SharePoint 2010: Listas convencionales vs Listas externas!

Estos días ando leyendo la SharePoint Guidance 2010 que recomiendo sin dudarlo como documento de referencia a tener en cuenta a la hora de diseñar la arquitectura de nuestras soluciones SharePoint no sólo porque contiene una implementación de referencia, sino también por el uso de patrones y buenas prácticas y por la información tan valiosa que contiene. Precisamente, de este último punto, me ha llamado la atención el apartado que compara las listas convencionales de SharePoint con respecto a las listas externas en cuanto a que funcionalidad se soporta y cuál no en cada tipo de lista:

Funcionalidades / Capacidades

Listas convencionales

Lisas Externas

Soporte relaciones 1 a 1

Soporte de relaciones 1 a N

Soporte de relaciones N a N

Soporte limitado, hay que personalizar manualmente el modelo de BDC.

Relaciones con claves primarias no enteras

No

Soporte limitado, hay que personalizar manualmente el modelo de BDC.

Manejadores de eventos

Soporte limitado. En el caso de que el sistema externo sea una BD, se pueden definir procedimientos almacenados para eventos a nivel de la BD.

Alertas

No

Feeds RSS

No

Flujos de trabajo

No

Transacciones

No

Soporte limitado. Es necesario implementar la transaccionalidad requerida.

Cálculos agregados

Soporte limitado. Es necesario implementar las agregaciones.

Right Joins y Cross Joins

No

Soporte limitado. Es necesario implementar las agregaciones.

Consultas DISTINCT

No

Seguridad a nivel de elemento

No

Datos en BLOBs

Consultas anidadas

No

Validación de datos

No

Compatibilidad con el SandBox

No