30/11/10

Error de Acceso Denegado accediendo a una audiencia

Es posible que incluso ejecutando código con privilegios elevados os falle el código cuando accedeis a una audiencia para consultar si un usuario pertenece a la misma. El código sería mas o menos el siguiente:

try
{
SPSecurity.RunWithElevatedPrivileges(delegate()
{
using (SPSite site = new SPSite(siteName))
{
AudienceManager audManager = new AudienceManager (ServerContext.GetContext( site));
Audience audience = audManager.GetAudience(audienceName);
ArrayList userInfoCollection = audience.GetMembership();

foreach (UserInfo userInfo in userInfoCollection)

{
if (userInfo.Email.ToUpper() == user.Email.ToUpper())
result = true;
}
}
}
});
}
catch (Exception ex)
{
}

Este error en un principio puede deberse a permisos por parte del usuario que está corriendo el pool de aplicaciones. Para validar eso teneis que ir a la seccion de administracion del proveedor de servicios compartidos y comprobar que el usuario tiene permisos para administrar audiencias.

Una vez validado esto, si os sigue fallando podeis probar este codigo que a mi me funcionó sin problemas:

SPSecurity.RunWithElevatedPrivileges(delegate()
{
using (SPSite site = new SPSite(siteName))
{
AudienceManager audManager = new AudienceManager (ServerContext.GetContext( site));
if (audManager.IsMemberOfAudience(user.LoginName, audienceName))
result = true;
}
});

16/11/10

modificar el 'Filenotfoundpage' de la aplicacion web

Es posible que en nuestro entorno nos haga falta establecer una página de fichero no encontrado cuando se inserte una URL a un documento que no se encuentre, evitando la fea pagina de error 404. Para poder hacer esto en Sharepoint no es algo tan trivial y habrá que realizar una serie de pasos:

1.- Crear en /_LAYOUTS el fichero Custom404.html (por ejemplo) con el siguiente código:

2.- Crear la pagina de error en el raíz /home/paginas/error404.aspx:

esta pagina de error podrá tener nuestra master page, nuestro logo corporativo, etc.

3.- Crear el fichero error404.aspx en /_LAYOUTS/3082 con el siguiente código:


Y aquí viene la parte más complicada del proceso. Resulta que las web applications de sharepoint, por defecto tienen el FileNotFoundPage a Null y hay que establecérselo. Para ello hay que crearse una aplicación de consola que cambie eso. Yo la he creado para desmoss pero el EXE habría que lanzarlo en producción. El código es muy simple:


Y con esto tendríamos la página de fichero no encontrado para toda nuestra intranet.


saludos,
Juan

23/5/10

Campos de SharePoint Alert Templates

Cuando trabajamos con alertas de SharePoint hemos de tener claro la información de que disponemos para poder visualizarla correctamente:

AlertFrequency The time interval for sending an alert. Possible values include 0 (immediate), 1 (daily), or 2 (weekly).
EventType The type of event. Possible values include 1 (item added), 2 (item modified), 4 (item deleted), 16 (discussion added), 32 (discussion modified), 64 (discussion deleted), 128 (discussion closed), and 256 (discussion activated).
ItemName The title of the item.
ItemUrl The absolute URL for the item.
ListName The name of the list.
ListUrl The absolute URL for the list.
ModifiedBy The display name of the user who modified the item.
MySubsUrl The absolute URL for the My Alerts on this Site page in Site Settings.
SiteLanguage The locale identifier (LCID) for the language used on the site. For example, 1033 is the LCID for U.S. English.
SiteName The title of the site.
SiteUrl The absolute URL for the site.
TimeLastModified The time at which the item was last modified.

Saludos,
Juan Alcalá

Cambio de usuario a la primera

Cuando se cambia de usuario en MOSS es posible que no podamos tener los datos del nuevo usuario hasta que hagamos un F5 y recarguemos la pagina. Para poder solucionar el problema tenemos que modificar una función que se encuentra en el fichero INIT.JS


function LoginAsAnother(url, bUseSource)
{

document.cookie="loginAsDifferentAttemptCount=0";
if (bUseSource=="1")
{
GoToPage(url);
}
else
{
document.execCommand("ClearAuthenticationCache", false);
var ch=url.indexOf("?") >=0 ? "&" : "?";
url+=ch+"Source="+escapeProperly(window.location.href);
STSNavigate(url);
}
}

saludos,
Juan Alcalá

Ocultar listas en MOSS

A veces puede resultar útil que los usuarios no puedan ver las listas o bibliotecas disponibles. Para ocultarlas podemos utilizar este sencillo código:

using (SPSite site = new SPSite(
{
using (SPWeb web = site.OpenWeb(Site))
{
web.AllowUnsafeUpdates = true;
foreach (SPList list in web.Lists)
{
list.Hidden = false;
list.Update();
}
}
}

En este ejemplo recorremos todas las listas del Site y las ocultamos. Si necesitaramos ocultar sólamente una tendriamos que especificar su nombre o GUID para identificarla.

Saludos,
Juan Alcalá

18/2/10

Modificar el template de una alerta

Para cambiar una alerta en MOSS lo primero que tenemos que hacer es localizar el fichero que las gestiona. Este fichero se encuentra en la ruta "C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\XML\alerttemplates.xml".

Antes de comenzar con la customización de mis alertas lo más recomendable es hacernos una copia del fichero para poder restaurar en caso de ser necesario.

Una vez hecha la copia ya podemos editar nuestra plantilla. El fichero se divide en varios nodos, dependiendo del tipo de contenido que se quiera controlar. Es por ello que tenemos un template para listas, para bibliotecas, para contactos, para eventos, etc, etc.

Cada nodo se divide a su vez en 2 subsecciones: Digest e Inmediate. Digest nos permitirá modificar la plantilla para las alertas que se lancen a diario o semanalmente. Inmediate servirá para modificar la plantilla de las alertas inmediatas.

Una vez hayamos modificado nuestra plantilla tendremos que actualizarla. Para ello lanzaremos el siguiente comando:

stsadm -o updatealerttemplates -url [URL DEL SITE] -f "C:\Program Files\Common Files\Microsoft Shared\web server extensions\12\TEMPLATE\XML\alerttemplates.xml" -LCID [IDIOMA: 3082(Español) - 1033(Ingles) - etc, etc]

Para probarlo tan sólo tendremos que realizar algun cambio en la biblioteca que nos hayamos suscrito y esperar a que nos llegue la alerta con el nuevo formato.

Hide 'Site Actions' for some users

If you need to hide the 'Site Actions' dropdown for some users but not all of them (administrators must see this dropdown), you've to edit the master page and add a SPSecurityTrimmedControl that contains your SiteActions control:


SharePoint:SPSecurityTrimmedControl ID="spSecurity" runat="server" PermissionsString="ManageWeb">
SharePoint:SiteActions CONTROL
/
SharePoint:SPSecurityTrimmedControl>

datepicker without original style

If you add a SharePoint:datetimecontrol and you have problems woth the render of this control you've to add a link to the datepicker.css class in the iframe.aspx.
This layout is located in the '/layouts' folder of the MOSS installation.


link rel="stylesheet" type="text/css"href="/_layouts/1033/styles/datepicker.css"/