may
14

Error al conectar con SP Designer 2010

Logo SharePoint Designer

Hoy vamos a comentar un error que se produce al conectarnos a un sitio desde SharePoint Designer. Arroja un error de conexión, descrito más abajo, y aunque existen más posibles soluciones a este error debemos comprobar, si es posible, el Event Logs  de la máquina del sitio para comprobar si es esta la solución.

Error:

The server could not complete your request. Description:” “
Exception: System.ServiceModel.ServiceActivationException: The service ‘/_vti_bin/client.svc’ cannot be activated due to an exception during compilation. The exception message is: Operation is not valid due to the current state of the object

Es probable que en el web.config del sitio no esté incluida esta sección:

Solución:


<System.ServiceModel>
     <serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
</System.ServiceModel>

Espero que sea de ayuda.

Enlace permanente a este artículo: http://www.raulgilabert.es/blog/?p=415

mar
22

Error al retirar o desplegar una solución en MOSS 2010

Logo PowerShell SharePoint 2010Es bastante común que MOSS 2010 devuelva un error al intentar retirar o desplegar una solución.

Habitualmente, por costumbre buena o mala, actualizo los cambios de un sitio desinstalando, retirando, añadiendo e instalando el paquete con cuatro comandos. La verdad es que podría usar sólo uno, el maravilloso Update, pero por discrepancias con él lo uso poco, aunque cada vez más.

Al ejecutar alguno de los comandos de retirada o despliegue que comentaba, devuelve el siguiente error:

Admin SVC must be running in order to create deployment timer job.

Esto es debido a que el servicio Sharepoint 2010 Administration, está parado. Se puede soluciona de dos formas:

1- Vas a la Administración de Servicios Windows, lo arrancas y vuelves a ejecutar el comando.

2- Ejecutas este comando que produce que se  ejecute el job de despliegue. Como podemos ver en el ejemplo.

stsadm.exe -o execadmsvcjobs

Espero que sea de ayuda.

Enlace permanente a este artículo: http://www.raulgilabert.es/blog/?p=393

mar
21

‘ULS Viewer’, el visor de logs para SharePoint

Logo SharePoint 2010Hoy vamos a explicar para que sirve esta herramienta que nos librará, de algúna forma, de la engorrosa tarea de leer los logs de SharePoint (ULS).

Cada pantalla de error que nos arroja SharePoint, tiene un código de correlación o número identificativo. Dicho código compuesto de caracterres hexadecimales; que tiene este formato: XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX; nos servirá para realizar la búsqueda en los logs de todos los errores con ese identificador código de correlación.

Lo primero es abrir el log:

Después, hay que aplicar el filtro con el código de correlación obtenido. Para abrir los filtros, usamos este icono: 

Y aplicamos el filtro como en el ejemplo, aunque se pueden hacer otro tipo de filtrados.

Después de aplicar el filtro veremos un listado sólo con las coincidencias. También podemos volver a filtrar este resultado quitando los Warnings, Información …

En cualquier caso, si se produce otro error y queremos volver a filtrar por otro número de correlación nuevo, deberemos volver a cargar el archivo de Log, puesto que se realiza una carga en memoria.

Se puede descargar desde aquí.

¡Que sea de ayuda!

Enlace permanente a este artículo: http://www.raulgilabert.es/blog/?p=378

mar
09

Compilar audiencia programáticamente

Logo SharePoint 2010
Con este post cerraremos el círculo de las audiencias. Hemos creado y borrado audiencias, y ahora vamos a compilar audiencias.

Para el proceso de compilación de audiencias tenemos que lanzar el Job que realiza la tarea, con esta línea:

Microsoft.Office.Server.Audience.AudienceJob.RunAudienceJob(args)

Como siempre, aquí tenéis un ejemplo de la función.

public void CompilarAudiencia()
{
	SPSecurity.RunWithElevatedPrivileges(delegate()
	{
		using (SPSite site = new SPSite("http://misitio"))
		{
			// Inicializamos el Contexto
			SPServiceContext context = SPServiceContext.GetContext(site);
			Assembly userProfilesAssembly = typeof(UserProfile).Assembly;
			// Get del tipo UserProfileApplicationProxy
			Type userProfileApplicationProxyType = userProfilesAssembly.GetType("Microsoft.Office.Server.Administration.UserProfileApplicationProxy");
			// Get del ojbeto Proxy
			object proxy = context.GetDefaultProxy(userProfileApplicationProxyType);
			// Get del UserProfileApplication
			object profile = proxy.GetType().GetProperty("UserProfileApplication", BindingFlags.NonPublic | BindingFlags.Instance).GetValue(proxy, null);
			// Get del ID de la Aplicacion
			Guid applicationId = ((Microsoft.SharePoint.Administration.SPPersistedObject)(profile)).Id;
			// Array con los argumentos para la ejecución del Job de Compilacion
			string[] args = new string[4];
			args[0] = applicationId.ToString();
			args[1] = "1";
			args[2] = "1";
			args[3] = null;// Si pasamos valor null, compila todas; en cambio solo compila una si le pasamos su nombre
			// Lanzamos el Job
			int result = Microsoft.Office.Server.Audience.AudienceJob.RunAudienceJob(args);
			// Recogemos el código de retorno
			AudienceJobReturnCode returnCode = (AudienceJobReturnCode)Enum.Parse(typeof(AudienceJobReturnCode), result.ToString());
		}
	});
}

Aquí podéis ver más información acerca de los parámetros del Job. Más info aquí.

Enlace permanente a este artículo: http://www.raulgilabert.es/blog/?p=372

mar
01

Borrar audiencia desde código en SP2010

Logo SharePoint 2010

Volvemos con las audiencias, hoy veremos como borrar una audiencia desde código. En el ejemplo instanciamos el AudienceManager con el SPContext, pero no siempre es posible hacer esto, puesto que seguramente utilizaremos esta funcionalidad desde algún script de Consola. Entonces, la forma de proceder será otra e instanciaremos el “context” de esta otra forma:

using (SPSite sitio = new SPSite("http://misitio/"))
{
	Microsoft.SharePoint.SPServiceContext context = Microsoft.SharePoint.SPServiceContext.GetContext(sitio);
}

Ejemplo de función:

void BorrarAudiencia()
{
	try
	{
                AudienceManager manager = new AudienceManager(SPContext.Current.Site);

		if (manager.Audiences.AudienceExist(audienceName))
		{
			Audience audience = manager.Audiences[audienceName];
			manager.Audiences.Remove(audience.AudienceID);
		}
		else
			throw new SPException(" No existe esta Audiencia: " + audienceName);
	}
	catch (Exception ex)
	{
		//WriteToLog("***ERROR:" + ex.Message);
	}
}

Que sea de ayuda.

Enlace permanente a este artículo: http://www.raulgilabert.es/blog/?p=364

feb
29

Windows 8 y Visual Studio 11

Estamos de enhroabuena, Miscrosoft ha liberado la nueva versión de W8 Consumer Preview. Podemos descargarlo desde aquí (X64). Además, también ha liberado la beta de Visual Studio 11 con el Framework 4.5, que está disponible desde aquí.

Siempre que se producen este tipo de lanzamientos, nos alegramos, aunque nuestras parejas no… Ya tenemos tarea, pero se me acumula el trabajo.

Enlace permanente a este artículo: http://www.raulgilabert.es/blog/?p=360

feb
27

Crear audiencia desde código en SP2010

Logo SharePoint 2010Hoy vamos con audiencias. Voy a poner un ejemplo de una función para crear una Audiencia (Audience) desde código. Necesitamos conocer, el nombre de la audiencia, una descripción, el Usuario Owner y el Path del Grupo (Ej: CN=MiGrupo,OU=Intranet,DC=MiDominio). En este caso, hemos escogido una regla concreta, pero se pueden añadir otras.

Primero comprobamos si existe la audiencia, si no existe la creamos. En nuestro caso creamos una regla “Member Of”, es decir, ‘Usuarios que pertenezcan a’ y la agregamos al objeto Audience. Ejemplo:

Audience audience = null;
AudienceRuleComponent = audRule = new AudienceRuleComponent("DL", "Member Of", PATH_GRUPO);
audience.AudienceRules.Add(audRule);

Vamos a hacer una llamada a la función con datos ‘reales’. Voy a crear una audiencia a partir de un grupo de LDAP, y el nombre que le voy a dar a la audiencia será, au_NOMBREDELGRUPO; la descripción será el NOMBREDELGRUPO para una mejor localización; el Usuario Propietario de la audiencia será el que queramos(por regla general el Administrador del Sitio); y el path del grupo, como ya expliqué antes.

void CrearAudiencia("au_Intranet_Madrid", "Intranet_Madrid","DOMINIO\\usuario", "CN=Intranet_Madrid,OU=Intranet,DC=DOMINIO,DC=COM");

Función:

void CrearAudiencia(string NOMBRE_AUDIENCIA, string DESCRIPCION_AUDIENCIA, string USUARIO_OWNER, string PATH_GRUPO){
	SPSecurity.RunWithElevatedPrivileges(delegate()
	{
		SPServiceContext context = SPServiceContext.GetContext(SPContext.Current.Site);
		AudienceManager audManager = new AudienceManager(context);
		AudienceCollection audCollection = audManager.Audiences;
		Audience audience = null;
		AudienceRuleComponent audRule = null;

		if (!audCollection.AudienceExist(NOMBRE_AUDIENCIA))
		{
			audience = audCollection.Create(NOMBRE_AUDIENCIA, DESCRIPCION_AUDIENCIA, USUARIO_OWNER, AudienceGroupOperation.AUDIENCE_AND_OPERATION);
			audience.AudienceRules = new ArrayList();
			audRule = new AudienceRuleComponent("DL", "Member Of", PATH_GRUPO);
			audience.AudienceRules.Add(audRule);
			audience.Commit();
		}
	});
}

Como siempre, espero que sea de ayuda.

Enlace permanente a este artículo: http://www.raulgilabert.es/blog/?p=355

feb
14

Como habilitar el Developer Dashboard en SharePoint 2010

Logo PowerShell SharePoint 2010
El otro día me surgió una duda sobre un tema en el que nunca antes me había visto involucrado, habilitar el “Developer Dashboard” o Panel para el Desarrollador. ¿Realmente como se hace y para que sirve?

Se utiliza para ver los tiempos de renderizado de la página y sus partes (WebParts), es de gran utilidad para conseguir un alto rendimiento en las peticiones al servidor, asegurar que cachea, etc…

Ejecutando estos comando podríamos habilitar o deshabilitar el Developer Dashboard.

Para Habilitarlo

stsadm -o setproperty -pn developer-dashboard -pv on

Para Deshabilitarlo

stsadm -o setproperty -pn developer-dashboard -pv off

Para activarlo bajo demanda

stsadm -o setproperty -pn developer-dashboard -pv OnDemand

Espero que sea de ayuda. (Fuente)

Enlace permanente a este artículo: http://www.raulgilabert.es/blog/?p=339

feb
13

Urls que te salvarán de un apuro

Logo SharePoint 2010Hoy quiero compartir algunas URLs que serán de gran ayuda en momentos de errores inesperados en despliegues, errores al cambiar MasterPage o al probar algún WebPart. No son de necesidad extrema, pero sí útiles.

Desde esta URL podrás acceder a la página de gestión del contenido de la página, y desactivar/eliminar algún contenido que esté fallando o no te permita visualizar la página, etc.

http://miSitio/Paginas/Default.aspx?Contents=1

Desde esta otra URL podrás acceder a la página de cambio de Master Page:

http://miSitio/_layouts/ChangeSiteMasterPage.aspx

Esta es la URL de la página de Configuración del sitio:

http://miSitio/_layouts/Settings.aspx

Esta es la URL de la página de Colección de MasterPage:

http://miSitio/_contents/masterpage

Esta es la URL de la página de Colección de WebParts:

http://miSitio/_contents/wp

Enlace permanente a este artículo: http://www.raulgilabert.es/blog/?p=165

ene
17

Personaliza tus CheckBox


Hoy, otra vez, volvemos a usar la librería JQuery para nuestros desarrollos/diseños. En unas pocas líneas vamos a personalizar todos los checkbox o radiobutton de una página web.

Tendremos una imagen en la que estarán los dos casos de como queremos mostrar los CheckBox.

Como en la gran mayoría de los diseños webs, dividimos el código en 3 partes: HTML, JS (JQuery) y CSS.

El HTML

Aquí ponemos un par de CheckBox como muestra, como podríamos usar en cualquier otra parte.

<div id="dvPrimero">
    <input id="chk1" type="checkbox" checked="checked" />
</div>
<div id="dvSegundo">
    <input id="chk2" type="checkbox" />
</div>

El código JQuery

Lo que hace este código, es comprobar si está marcado el CheckBox y cambia la posición de la imagen de fondo, en la que tendremos las dos posibilidades (Marcado y desmarcado).

Código corregido

	var chkAlto = 20;

	$(document).ready(function(){
		var colChk = $("[type*=checkbox]");
		colChk.each(function (index) {
			if ($(this).is(':checked'))
				$($(this).parent()).append("");
			else
				$($(this).parent()).append("");

			$($('.CheckBoxConEstilo', $(this).parent())).click( function () {
				if ($('[type=checkbox]', $(this).parent()).is(':checked')) {
					$(this).css("background-position", "0 0");
					$('[type=checkbox]', $(this).parent()).attr('checked', false);
				} else {
					$(this).css("background-position", "0 -" + chkAlto + "px");
					$('[type=checkbox]', $(this).parent()).attr('checked', true);
				}
			});
		});
	});

El CSS

Este código es muy sencillo, creamos una clase llamada ‘CheckBoxConEstilo’ con los parámetros con los que queremos que se muestren nuestros CheckBox y ocultamos todos nuestros CheckBox.

.CheckBoxConEstilo {
	display: inline-block;
	width: 20px;
	height: 20px;
	background: url('LA RUTA DE MI IMAGEN') no-repeat;
	clear: left;
	float: left;
	cursor: pointer;
}
input[type=checkbox]
{
    display: none;
}

Puedes descargar un demo desde aquí.

PD: No olvidéis llamar a la librería JQuery en el HEAD.

Imágenes de ejemplo para utilizar en vuestros CheckBox y RaddioButton

Enlace permanente a este artículo: http://www.raulgilabert.es/blog/?p=322

Entradas más antiguas «