Posts recientes

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

LLamada a un Web Service de creación de usuarios de SharePoint a través de un ensamblado de SQL Server

Como es sabido, SQL Server 2008/2005 permite integración de ensamblados de .NET para interactuar entre otras, con fuentes externas.
 
Pues bién, esta entrada va a tratar la problematica de la creación de usuarios de SharePoint con autentificación por FBA. El motivo es simplemente que cuando queremos importar las tablas de usuario de ASP.NET desde una fuente externa, no podemos insertar los datos completos del usuario, esto únicamente se puede hacer desde SharePoint.

Manos a la obra, en primer lugar hemos de crear Web Service para la creación del usuario en SharePoint del siguiente estilo:
 
[WebMethod]
public void CreateUser(string Site, string UserProvider,string UserId, string UserName) 
{
	SPSecurity.RunWithElevatedPrivileges(delegate()
	   {
		   using (SPSite site = new SPSite(Site))
		   {
			   SPWeb web = site.RootWeb;
			   web.AllUsers.Add(UserProvider + "|" + UserId, "", UserName, "");
			   web.EnsureUser(UserProvider + "|" + UserId);
		   }
	   });
			
}
Una vez creado, hemos de crear un proxy del WebService a través de la utilidad WSDL.EXE (lo podéis encontrar en C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bin\x64)
La llamada será del estilo:
 
WSDL.exe /o MyServiceProxy.cs /n Trentia.SPUsers http://<URLdelWebService>
 
Con la clase resultante ya podemos insertarla en nuestro proyecto de biblioteca de clases de SQL Server.

El siguiente paso, es crear nuestra clase que será invocada a través de SQL:
 
[SqlProcedure]
public static void GetMessage(SqlString WSUrl, SqlString SiteURL, SqlString UserProvider, SqlString UserID, SqlString UserName
   , out SqlString strMessge)
{

	try
	{
		Service1 svc = new Service1();
		svc.Url = WSUrl.ToString();
		//svc.Credentials = CredentialCache.DefaultCredentials;
		// call web service method; return as a DataTable
		svc.CreateUser(SiteURL.ToString(), UserProvider.ToString(), UserID.ToString(), UserName.ToString());

		strMessge = "OK";
	}
	catch (Exception ex)
	{
		strMessge = ex.ToString();
	}
}
En algunas ocasiones, sobre todo cuando intentamos acceder a WebServices e intercambiar datos, hemos de generar una clases serializable del ensamblado.
Para ello, hemos de ejecutar otra utilidad llamada SGEN.exe ubicada también en C:\Program Files\Microsoft SDKs\Windows\v6.0A\Bin\x64
La ejecución es la siguiente:

SGEN.exe /a: <RutaYEnsambladoDLL> /compiler:keyfile:<RutaYFicheroSNK>
 
Con el ensamblado generado por el Visual Studio y el ensamblado generado con la utilidad SGEN.exe, ya tenemos todo lo suficiente para realizar las llamadas a través del SQL Server.
 
Desde el SQL Server, en primer lugar hemos de habilitar una seria de parámetros en nuestra BBDD
 
sp_configure 'clr enabled', 1
GO
reconfigure
GO

ALTER DATABASE [DATABASENAME]
SET TRUSTWORTHY ON
GO

CREATE ASSEMBLY MSSQLTipsCLRLib 
FROM 'c:\Trentia.SQLAssemblySharePointUsers.dll'
WITH PERMISSION_SET = UNSAFE /* SI DA ERROR: EXEC dbo.sp_changedbowner @loginame = N'sa', @map = false **/

CREATE ASSEMBLY [MSSQLTipsCLRLib.XmlSerializers]
FROM 'c:\Trentia.SQLAssemblySharePointUsers.XmlSerializers.dll'
WITH PERMISSION_SET = SAFE
 
Una vez tenemos los ensamblados cargados únicamente nos queda crear un PROCEDURE que será quien invoque el ensamblado.
Para ello:
 
CREATE PROCEDURE [dbo].[AddSPUser]

   @WSUrl NVARCHAR(200),
   @SiteURL NVARCHAR(200),
   @UserProvider NVARCHAR(200),
   @UserID NVARCHAR(200),
   @UserName NVARCHAR(200),
   @strMessge NVARCHAR(400) OUT
  

WITH EXECUTE AS CALLER
AS
EXTERNAL NAME MSSQLTipsCLRLib.SPCreateUserProfileSharePoint.GetMessage
GO

EXEC DBO.AddSPUser 'http:///_vti_bin/SPUser.asmx','HTTP:///','i:0#.f|proveedoraspnet','1019','juanito',''
Autor: Javier Tirado Pampín
Publicado: 31/03/2011  9:58 | 0  Comentarios | 0  Enlaces a este post

System.ServiceModel.ExceptionDetail al realizar un FullTextQuery en SharePoint

Si alguna vez os habéis encontrado que de repente al realizar consultas al motor de indexación de SharePoint, os devuelve un error System.ServiceModel.ExceptionDetail no desesperéis.
Es poco intuitivo SharePoint a la hora de informarnos de como corregir el error. Pues bien, lo único que hemos de hacer para solucionar el error es incluir en nuestra Query una cláusula Order by, ¿la mar de sencillo,no?
 
 
Autor: Javier Tirado Pampín
Publicado: 16/03/2011  13:10 | 0  Comentarios | 0  Enlaces a este post

La publicación de un Workflow en Designer no se actualiza

Recientemente me encontré diseñando en SharePoint Designer 2010 un workflow para una biblioteca de formularios Infopath. Todo parecía funcionar bien hasta que hice un cambio en el workflow, lo publiqué y éste parecía no actualizarse, ya que no actuaba según lo previsto.

Se ve que Designer hace uso de una caché ubicada en la siguiente ruta:

C:\Documents and Settings\[username]\AppData\Local\Microsoft\WebsiteCache

Es debido a la utilización de dicha caché que el workflow no se actualiza correctamente. Para que todo vuelva a funcionar según lo previsto, basta con borrar lo que haya dentro de la carpeta WebsiteCache.

Autor: Anna Vilalta Gili
Publicado: 10/03/2011  15:30 | 0  Comentarios | 0  Enlaces a este post

Cambiar la URL del sitio en un proyecto de SharePoint en Visual Studio 2010

Al realizar un cambio de servidor de desarrollo de una solución de SharePoint 2010 en Visual Studio 2010 nos encontramos con la sorpresa de no poder realizar desarrollo visual ni desplegar debido a que la URL del sitio de SharePoint ya no coincide con la del nuevo servidor.

Para realizar un cambio de esta URL tan solo necesitamos acceder a la ventana de propiedades del proyecto, debajo del explorador de la solución, y modificar la propiedad Site URL con la del nuevo sitio o servidor. Es el método más sencillo.

image

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

Diferencias de versiones entre SharePoint 2010 y SharePoint Designer 2010

Si habéis decidido instalar la actualización del CU (Cumulative Update) de SharePoint 2010 de Octubre de 2010 (leer el artículo de Stefan Goßner al respecto), habréis actualizado la versión de vuestra instalación a la 14.0.5128.5000. Si intentais entonces abrir vuestro sitio de SharePoint con SharePoint Designer 2010 os aparecerá un mensaje como éste:

“Server error: La versión de Microsoft SharePoint Foundation que se está ejecutando en el servidor es más reciente que la versión de SharePoint Designer que está usando. Necesita una versión posterior de SharePoint Designer.”

clip_image002

Para solucionar esta situación es necesario actualizar de la misma manera vuestra instalación de SharePoint Designer 2010 con otro CU de Microsoft, que podéis encontrar en http://support.microsoft.com/kb/2276347. Esto os igualará las versiones y os permitirá abrir el sitio de SharePoint con Designer.

Nuestra experiencia es que a Designer (o a SharePoint) le cuesta un poco darse cuenta del cambio de versión una vez actualizado Designer. No desistáis, finalmente, de alguna forma, acaba por funcionar.

Autor: Rubén Claramunt Vicente
Publicado: 03/03/2011  12:55 | 0  Comentarios | 0  Enlaces a este post