Posts recientes

El contenido de este blog tiene una licencia Creative Commons.
Creative Commons

Error de “List not found” para un DataFormWebPart exportado a otro sitio

En el anterior post (http://www.codepoint.es/archive/2011/07/11/como-crear-p%C3%A1ginas-para-gestionar-listas-en-un-sitio-distinto-al-que-se-alojan-.aspx) se comentaba como exportar un DataFormWebPart de SharePoint a otro sitio dentro de la colección para que siguiera accediendo a los datos de la lista alojada en otro sitio. Aún siguiendo las instrucciones en ocasiones puede ocurrir que SharePoint Designer visualice bien la información pero no así el explorador web, que nos devuelve un error de “List not found”.

Para solucionar este problema simplemente deberemos cambiar el atributo ViewFlag de la DataFormWebPart y ponerlo a “0”.

<WebPartPages:DataFormWebPart runat="server" IsIncluded="True" AsyncRefresh="True" FrameType="None" NoDefaultStyle="TRUE" ViewFlag="0" …

Espero que os ayude.

Autor: Rubén Claramunt Vicente
Publicado: 12/07/2011  21:58 | 0  Comentarios | 0  Enlaces a este post

Reenvío SMTP a través de BPOS/Exchange

BPOS, la nueva suite de productividad online de Microsoft, incluye entre sus productos Microsoft Exchange Online, la vesión online del servidor de mensajería. Los productos en la nube suponen para los desarrolladores tener que disponer de otras vías de acceso a los servicios de éstos.

Recientemente hemos tenido que conectar el correo saliente de Microsoft SharePoint con BPOS/Exchange y nos hemos encontrado con la problemática de que BPOS/Exchange solamente acepta SMTP autenticado y vía canal encriptado, característica inexistente en la confirguración de correo saliente de SharePoint.

image

La solución que hemos encontrado ha sido la de utilizar un servicio SMTP configurado localmente y dispuesto para el reenvío, esta vez sí autenticado y por canal seguro, contra los servicios SMTP de BPOS/Exchange. Para ello fue suficiente activar los servicios de SMTP de IIS en el servidor local de SharePoint.

El procedimiento es sencillo y rápido de aplicar. Podéis leer un artículo completo sobre este tema en http://jimjacob.com/2010/05/09/configure-smtp-relay-for-bposexchange-online/

Autor: Rubén Claramunt Vicente
Publicado: 28/02/2011  8:16 | 0  Comentarios | 0  Enlaces a este post

Encontrar un SPListItem mediante su ID

El caso con el que me encontré es el siguiente:

Tenía una lista de SharePoint y el identificador de un elemento de dicha lista. Lo único que quería era encontrar un elemento en concreto mediante este identificador.

Mi código era el siguiente:

oList = oWeb.Lists ("ListaDeSharePoint")
oItem = oList.Items.GetItemById (idElemento)

Bien, descubrí que NUNCA se debe usar esa construcción para acceder al elemento concreto, sinó que se debe implementar de la siguiente forma:

oList = oWeb.Lists ("ListaDeSharePoint")
oItem = oList.GetItemById (idElemento)

Si se utiliza la primera opción, que es la incorrecta, se crea un objeto SPQuery para leer todos los elementos de la lista y luego el GetItemById() ejecuta un bucle, en busca del elemento con el identificador que buscamos.

En cambio, si se ejecuta la segunda opción, recordemos que es la correcta, se crea un objeto SPQuery para leer solamente un objeto cuyo identificador es el que le pasamos.

Autor: Anna Vilalta Gili
Publicado: 16/09/2010  14:05 | 0  Comentarios | 0  Enlaces a este post

Consulta CAML con “offset” de días

En ocasiones necesitamos realizar consultas CAML contra SharePoint filtrando los elementos en función de un comparación de fechas entre una fecha almacenada en columna y la fecha actual. No hay problema ya que podemos hacer algo como:

<Query><Where><Geq><FieldRef Name='PublishedDate' /><Value Type='DateTime'><Today/></Value></Geq></Where></Query>

Hasta aquí ningún problema. En el momento en que queremos filtrar según un margen (offset) de días respecto la fecha actual ya no esta la cosa tan fácil. Para ello CAML nos ofrece un mecanismo mediante el atributbo OffsetDays que nos permite aplicar un diferencial de días a la fecha. Con ello podemos construir consultas como la siguiente:

<Query><Where><Geq><FieldRef Name='PublishedDate' /><Value Type='DateTime'><Today OffsetDays='-4' /></Value></Geq></Where></Query>

Os recomendamos una herramienta que os puede ser de gran utilidad para construir todo tipo de consultas CAML. Se trata de la evolución de otra conocida utilidad en formato desktop que ahora se integra en SharePoint como funcionalidad activable. Entrad en U2U CAML Query Builder Feature, vale la pena.
Autor: Rubén Claramunt Vicente
Publicado: 11/06/2010  8:48 | 0  Comentarios | 0  Enlaces a este post

Microsoft Business Intelligence Indexing Connector para SharePoint 2010

Microsoft acaba de liberar Microsoft Business Intelligence Indexing Connector.

Es un conector que permite realizar búsquedas de información sobre documentos de BI como podrían ser informes de SQL Reporting, Excel, ...

A través de este conector podríamos por ejemplo, realizar búsquedas de información a través de dimensiones.


Descargar Microsoft Business Intelligence Indexing Connector
Autor: Javier Tirado Pampín
Publicado: 07/06/2010  18:13 | 0  Comentarios | 0  Enlaces a este post

Crear un SPUser desde código.

En caso de querer añadir un usuario(SPUser) a MOSS desde código fuente, en vez desde SharePoint de la manera habitual, el sistema nos ofrece la siguiente función:
SPWeb.Users.Add(Login, Mail, Name, Notes)
Esta función que aparentemente nos tendría que facilitar el trabajo y permitirnos pasar este escollo sin la menor dilación, producirá el siguiente error en el sistema:
Operation is not valid due to the current state of the object
Esto se debe a que susodicha función no nos sirve para la creación de usuarios, así pues el sistema de creación será un poco más complejo de lo deseado.
 
La forma de crear un usuario es la que sigue:
 
1.- Es necesario utilizar la libreria:
using Microsoft.SharePoint;
 
2.- Antes de crear el usuario es interesante asegurarse de que no exista ya en el entorno, esto lo podemos realizar mediante la siguiente función:
private SPUser GetSPUser(string strLoginName, string strSiteURL)
{
   SPUser spReturn = null;
   SPSite spSite = null;
   SPWeb spWeb = null;

   try
   {
      // Open the SharePoint site
      spSite = new SPSite(strSiteURL);
      spWeb = spSite.OpenWeb;

      // Another way without paramether: strSiteURL
      //spSite = new SPSite(SPContext.Current.Site.ID);
      //spWeb = spSite.OpenWeb(SPContext.Current.Web.ID);

      // Check to see if user exists
      spReturn = spWeb.AllUsers[txbUser.Text];
   }
   catch
   {
   }
   finally
   {
      spWeb.Close();
      spSite.Close();
   }

   return spReturn;
}
 
3.- En caso de que no exista el usuario (comprobado con la función anterior) podemos crear el usuario con la siguiente función:
private SPUser CreateUser(string strLoginName, string strEMail, string strName, string strNotes, string strSiteURL)
{
    SPUser spReturn = null;
    SPSite spSite = null;
    SPWeb spWeb = null;

    try
    {
        //Open the SharePoint site
        spSite = new SPSite(strSiteURL);
        spWeb  = spSite.OpenWeb();

        //Assign role and add user to site
        SPRoleAssignment spRoleAssignment = new SPRoleAssignment(strLoginName, strEMail, strName, strNotes);
        //Using Contribute, might need high access - The Contribute option depends on installation language from MOSS
        SPRoleDefinition spSPRoleDefinition = spWeb.RoleDefinitions["Contribute"]; 
    
        spRoleAssignment.RoleDefinitionBindings.Add(spSPRoleDefinition);
        spWeb.RoleAssignments.Add(spRoleAssignment);

        //Update site
        spWeb.Update();
        spReturn = spWeb.AllUsers[strLoginName];
    }
    catch(Exception)
    { 
    }
    finally
    {
        spWeb.Close();
        spSite.Close();
    }

    return spReturn;
}
Así pues de esta manera se podrá crear/localizar un usuario dentro de SharePoint desde código.
 
Autor: David Acosta Lesmes
Publicado: 02/06/2010  9:18 | 0  Comentarios | 0  Enlaces a este post

Error en la asignación de categorías en blogs de SharePoint basados en CKS:EBE

Al utilizar el CKS:EBE (Community Kit for SharePoint : Enhanced Blog Edition) como proveedor de blog para SharePoint nos podemos encontrar una desagradable sorpresa en la asignación de categorías.

Nativamente la plantilla de blog de SharePoint dispone de un campo Categoría que admite un único valor. El CKS:EBE implementa un nuevo campo que sustituye al anterior, denominado Categorías (en plural), que permite asignar más de una categoría al post. Pues según como nos conectemos desde clientes como Microsoft Word o Windows Live Writer podemos encontrarnos un error indicando de el blog no admite más de una categoría por post si intentamos asignar varias. También podemos encontrarnos que asignemos una categoría y en realidad el post no la muestre. Estos efectos son debidos a que el cliente interpreta que el campo que guarda las categorías es Categoría y no el nuevo, Categorías.

¿Cómo lo solucionamos? Pues al inscribirse al blog des del cliente de edición, tal como se comenta en la documentación de CKS:EBE, no se debe indicar que se trata de un blog de SharePoint sino de otro tipo de blog, y utilizar la MetaWebLog API para conectarse. Con esta API deberemos conectarnos a la URL http://midirecciondelog/metaweblog.ashx. El metaweblog.ashx es la implementación de la API de MetaWebLog que devolverá la información correcta al cliente sobre el campo de la categoría del post. Nativamente SharePoint utiliza otro acceso a la API, que se ubica en /_layouts/metaweblog.aspx. No nos confundamos.

Como nota final, os recomiendo desactivar la Validación de seguridad de página desde la administración central para evitar problemas que también he detectado con la subida automática de imágenes.

Ejemplo de configuración con Windows Live Writer

Autor: Rubén Claramunt Vicente
Publicado: 24/05/2010  12:08 | 0  Comentarios | 0  Enlaces a este post

Acceder al contenido de listas de SharePoint mediante SQL

Os paso un curioso artículo dónde nos muestran una forma genérica de acceder al contenido de listas de SharePoint desde SQL Server. Para ello hacen uso del XML que representa la estructura de la propia lista para destripar los campos de UserData que representan cada metadato o columna. Muy útil para reporting directo de listas de SharePoint así como consultas sin pasar por servicios web ni modelos de objeto.

Podéis encontrar toda la información en http://blog.ray1.net/2009/11/sharepoint-list-in-sql.html

Autor: Rubén Claramunt Vicente
Publicado: 02/03/2010  17:08 | 0  Comentarios | 0  Enlaces a este post

Abrir documentos Office 2010 desde un sitio SharePoint

Desde que estoy trabajando con la versión Beta de Microsoft Office 2010 he tenido problemas para abrir los documentos de Office de mi sitio SharePoint. Cada vez que quería  abrir un documento de Office, me aparecía un mensaje indicándome que era imposible abrir el documento, obligándome a descargarlos en local antes de poder trabajar con ellos.  Hoy en encontrado la solución y os hago un resumen para resolver el problema rápidamente.
    1. Abrir Internet Explorer
    2. Seleccionar [Herramientas] -> [Opciones de Internet]
    3. Seleccionar la pestaña [Conexiones]
    4. Hacer click en [Configuración de LAN]
    5. Marcar el check "Usar un servidor proxy para LAN"
    6. Informar la "Dirección" con el valor 127.0.0.1
    7. Hacer click en [Opciones avanzadas]
    8. En "Excepciones" teclear: *.*
    9. Pulsar [Aceptar], [Aceptar] y otra vez [Aceptar].

Y tema resuelto.

Vía: http://www.benstegink.com/2009/08/28/office-2010-and-sharepoint-2007/

Autor: Emilio Martín
Publicado: 18/02/2010  12:08 | 2  Comentarios | 0  Enlaces a este post

Regenerar los SIDs de usuarios tras una migración de SharePoint

No son pocas las ocasiones en que hemos tenido problemas con los usuarios tras una migración de un entorno desarrollado en SharePoint. Desplegamos el nuevo entorno, todo funciona genial, entramos con cuentas de administrador y todo bien, pero los usuarios de a pie no pueden acceder.
Esto es debido en muchas ocasiones a que el entorno de Active Directory es una réplica y aunque se conserven los nombres de usuario (loginname) no se conservan los SIDs internos. Una solución sencilla y rápida consiste simplemente sustituir los SIDs que almacena SharePoint en base de datos por los nuevos SIDs de Active Directory. Con ello se restablecerán los accesos a través de las nuevas cuentas. Una forma de conseguirlo es accediendo directamente a base de datos y a nuestro propio riesgo (realizar copias de seguridad y demás).
Aquí tenéis un script de base de datos que ataca la tabla UserInfo y que permite restablecer estos identificadores. Muchas suerte!
DECLARE @login varchar(40), @systemid varbinary(128)

DECLARE curUsers CURSOR LOCAL FOR
SELECT tp_login, tp_systemid FROM userinfo where tp_deleted = 0

OPEN curUsers

	FETCH NEXT FROM curUsers INTO @login, @systemid

WHILE @@FETCH_STATUS = 0
BEGIN
	PRINT 'Resetting user ' + @login + ' to new SID '
	PRINT suser_sid(@login)
	UPDATE UserInfo
		SET tp_systemid = suser_sid(tp_login) WHERE CURRENT OF curUsers
	FETCH NEXT FROM curUsers INTO @login, @systemid
END

CLOSE curUsers
DEALLOCATE curUsers

GO
Autor: Rubén Claramunt Vicente
Publicado: 17/02/2010  10:56 | 0  Comentarios | 0  Enlaces a este post

 Siguiente >>