Mostrando entradas con la etiqueta SharePoint. Mostrar todas las entradas
Mostrando entradas con la etiqueta SharePoint. Mostrar todas las entradas

jueves, 3 de octubre de 2013

Añadir columnas de datos externos a definicion de lista Sharepoint 2010

Para los que hayan tenido contacto con SharePoint 2007, había un tipo de columna de lista de datos profesionales.

Ahora, en SharePoint 2010, esta columna está disponible para todas las listas de SharePoint (excepto las listas externas), se llama columna de datos externos y permite a los usuarios mostrar datos de cualquer tipo de contenido externo existente en el modelo del BCS, en una lista de SharePoint estándar.

En este artículo vamos a ver como incluir este tipo de columna de datos externos, en el esquema de una lista que tengamos en Visual Studio 2010.

¿Que conseguimos con esto?. Provisionar la columna de manera fácil y cómoda, sin tener que recurrir a un EventReciver para incluir la columna en la lista programándolo.

Escenario

Tenemos una lista SharePoint, llamada 'Sitios' donde queremos incluir una columna, llamada Country (Pais) cuyos valores vienen de una tabla externa donde tenemos definidos los paises. Asumimos que ya hemos definido el modelo BCS y lo hemos cargado en la administración central de SharePoint junto con todos los permisos necesarios.

Vamos a hacer el proceso para modificar el esquema de la lista desde VisualStudio 2010 e incluir el campo. El proceso es muy sencillo, pero la documentación para realizar esto es bastante escasa.

Solución

Abrimos el esquema de definición de la lista (Schema.xml) y nos vamos al apartado Fields para definir un nuevo campo de lists. Bueno en realidad vamos a definir dos campos: BCS requiere que haya un campo oculto con el identificador BCS del elemento seleccionado.

Por tanto definiremos:

<field baserenderingtype="Text" bdcfield="COUNTRY_DESC" colname="nvarchar1" 
description="Country" displayname="Country" entityname="COUNTRIES" entitynamespace="SAMPLES.BCS" hasactions="False" 
id="{9bc89f68-123d-3786-9283-c629a5a4383a}" name="Country" profile="" relatedfield="COUNTRIES_ID" relatedfieldbdcfield="" relatedfieldwssstaticname="COUNTRIES_ID" required="FALSE" rowordinal="1" secondaryfieldbdcnames="0" secondaryfieldswssstaticnames="0" secondaryfieldwssnames="0" sourceid="{549eb03c-9767-42e5-8360-8dddf6c34bd6}" staticname="Country" systeminstance="SAMPLES_DB" type="BusinessData">
</field>

Y también el campo que guardará el identificador:

<field bdcfield="COUNTRIES_ID" colname="ntext2" description="Country id for BCS Country field" displayname="COUNTRIES_ID" hidden="TRUE" id="{3ed8b785-737c-462a-9c17-7bdff65b9767}" name="COUNTRIES_ID" readonly="TRUE" rowordinal="0" sourceid="{549eb03c-9767-42e5-8360-8dddf6c34bd6}" staticname="COUNTRIES_ID" type="Note">
</field>

Notad que el campo que guarda el identificador, debe ser de tipo Note, es un campo oculto (Hidden=true) y de solo lectura (ReadOlny = true). De esta manera el usuario no lo ve en los formularios y no se puede modificar.

Como se puede ver en la definición del campo Country los atributos RelatedField y RelatedFieldWssStaticName son los que apuntan al campo que guarda el identificador. Esto es necesario para decirle a BCS donde debe ir a buscar el identificador del elemento que se ha seleccionado y donde va a guardar el identificador, cuando se seleccione.

Las propiedades más importantes son las siguientes:

  •  SystemInstance="SAMPLES_DB": Establece el LOB System del BCS donde está la entidad que queremos enlazar. 
  • EntityNamespace="SAMPLES.BCS": Es el espacio de nombres del modelo donde esta la entidad. 
  • EntityName="COUNTRIES": Es la entidad del modelo BCS que queremos cargar. En nuestro caso los paises (Countries). 
  • BdcField="COUNTRY_DESC": Es la columna de la tabla que vamos a mostrar. En nuestro caso la descripción.

Espero que esto os ayude un poco más en vuestras andaduras con el BCS de SharePoitn 2010.

martes, 14 de junio de 2011

STSADM: ErrorFatal Guid deberia contener 32 digitos con 4 guiones

Estos dias ando dandole vueltas a un error que me ha ocurrido con el STSADM de SharePoint 2007, intentando exportar un sitio para posteriormmente importarlos en SharePoint 2010.

La segunda operación no se si saldrá correctamente, pero la operación de esportación del sitio da el error: FatalError: Guid should contain 32 digits with 4 dashes (xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)

Curiosamente este error lo da cuando está intentando exportar los campos del sitio.

Aun así la soución es bastante sencilla, aunque a mi parecer no la más adecuada, pero nos puede salvar para salir del paso.

Consiste en modificar el archivo fields.xml que se encuentra en el directorio que yo llamo "del infierno" en SharePoint "C:\Archivos de programa\Archivos Comunes\web server extensions\12\TEMPLATE\FEATURE\TSATypes\" (conviene tener un acceso directo en el escritorio a este directorio).

Antes de modificar nada de estos archivos de sistema, conviene recordar hacer una copia de seguridad del mismo.

Abrimos Fields.xml con nuestro editor favorito, y reemplazamos todas las apariciones de }" por " . Lo guardamos y volvemos a ejecutar el comando de exportación:

stsadm -o export -url <URL name> -filename <export file name>

Documentación completa: http://technet.microsoft.com/en-us/library/cc262759(office.12).aspx

Con esto tendremos solucionado el problema.

viernes, 27 de mayo de 2011

Errores al eliminar objetos programando en SharePoint 2010

La eliminación es la tarea de liberar los recursos que consumen los objetos. Esta tarea es esencial en el código no administrado, como C + +. Sin embargo, la mayoría de las veces cuando estás construyendo soluciones NET, no tienes que preocuparte de la recolección de basura. Un excelente recolector de basura integrado se hará cargo de eso por ti.

Eso no es así en todos los casos con SharePoint. Algunos objetos en SharePoint están fuera de la comodidad del código administrado de .NET. Es necesario eliminar estos objetos manualmente... bueno, al menos la mayoría de las veces... y bajo ciertas condiciones.

Los dos objetos de este tipo más comunes son SPWeb y SPSite. Desafortunadamente, estos son también objetos de uso común. De hecho detrás de muchos escenarios, puede haber más objetos SPWeb de lo que uno  cree.

La noticia todavía peor es que en algunos casos, cuando eliminar los objetos puede causar fallos en otras partes de SharePoint que son completamente ajenos a todo lo que está haciendo.

No obstante, no hay que preocuparse demasiado por ello. Por suerte, Microsoft ha publicado una buena guía de orientación acerca de este tema y una herramienta que hace más llevadera la pesadilla de eliminar objetos manualmente.

SPDisposeCheck es una herramienta que ayuda a los desarrolladores y administradores a comprobar que las soluciones SharePoint personalizadas, que usan el modelo de objetos de SharePoint, cumplen con las buenas prácticas en la tarea de recolección manual de basura.

Os dejo también un enlace a la guía, en inglés.
Guía: Best Practices: Using Disposable Windows SharePoint Services Objects

jueves, 26 de mayo de 2011

Error al cargar la plantilla TaxonomyPicker en SharePoint 2010.

Síntomas:En el visor de eventos aparece el siguiente error:

Error al cargar el archivo de plantilla de control /_controltemplates/TaxonomyPicker.ascx: No se puede cargar el tipo 'Microsoft.SharePoint.Portal.WebControls.TaxonomyPicker' del ensamblado'Microsoft.SharePoint.Portal, Version=14.0.0.0, Culture=neutral, PublicKeyToken=71e9bce111e9429c'.

Solución:
Ir a  C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\TEMPLATE\CONTROLTEMPLATES,


Abrir TaxonomyPicker.ascx con el notepad.

Localizar la ocurrencia $#44; y cambiarla por una coma. Guardar y salir.

lunes, 13 de diciembre de 2010

Usando Bing Maps en SharePoint

Al igual que Google tiene su propio framework para mostrar información geográfica a través de mapas (Google Maps), Microsoft también tiene el suyo propio. Primero Microsoft lanzó Bing, buscador diseñado para competir con Google.

Y como no también se lanzo una plataforma para competir con Google Maps, llamada Virtual Earth que ahora se llama Bing Maps. Practicamente con las mismas caracterisitcas al de Googole, nos ofrece también vista 3D, vista de carreteras, posibilidad de hacer rutas, vistas aereas y mucho más. Con una ventaja importante: el rendimiento de la plataforma de microsoft es mucho mejor que la de google.

Una vez introducido, vamos a integrar in visor para Bing Maps en la plataforma Sharepoint 2007. Para ello vamos a hacer uso del webpart editor de contenido que nos permite insertar contenido web en cualquier parte de nuestro sitio SharePoint.



Una vez añadido el elemento web editor de contenido lo editamos en el panel de control ( mediante editar -> modificar elemento web compartido) y abrimos el editor del codigo fuente. Una vez abierto introducimos el siguiente código:

<script src="http://dev.virtualearth.net/mapcontrol/mapcontrol.ashx?v=5"></script> <script type="text/javascript">
  var map = null;   function GetMap()
  {
    map = new VEMap('myMap');
    map.LoadMap(new VELatLong(41.633333, -4.716667), 10,'r' ,false);
    AddPin(41.633333, -4.716667, 'ValladolidMap', '<strong>Nombre:</strong> Valladolid (España).');

  }   function AddPin(lat, lon, iconurl, title, desc)
  {
    var shape = new VEShape(VEShapeType.Pushpin,new VELatLong(lat,lon));
    shape.SetTitle(title);
    shape.SetDescription(desc);
    map.AddShape(shape);
  }   function addLoadEvent(func)
  {
    if(typeof window.onload != 'function')
    {
      window.onload = func;
    }
    else
    {
      window.onload = function()
        {
          func();
        }
    }
  }   addLoadEvent(GetMap);
</script>
<div id='myMap' style="position:relative; width:640px; height:480px;"></div>

Esto lo que hará es mostrarnos un mapa, centrado en Valladolid y con un apuntador rojo, también centrado en la ciudad. Si queremos cambiar la ubicación lo único que tendremos que hacer en este script es lo siguiente:
  • Función VElatLong(latitud,longitud): cordenadas del sitio en donde queramos apuntar el mapa inicialmente. Deben estar en decimal. por ejemplo, para sacar la de valladodolid yo he usado la siguiente página, donde se puede consultar la geolocalización de muchos puntos del mundo.  
  • Función AddPin(latitud,longitud,nombre,descripcion): Permite añadir el pin rojo apuntador en el punto del mapa donde queramos.
Y con estas nociones básicas podremos integrar fácil y rápidamene nuestro mapa de siguaci´n en cualquer sitio SharePoint, con la ayuda del elemento web editor de contenido. Pero este código perfectamente nos puede valer para integrar Bing Maps en cualquer sitio web.