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:
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:
saludos,
Juan
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:
location.href="http://intranet/
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:
Saludos,
Juan Alcalá
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á
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(
{
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á
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();
}
}
}
{
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.
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\
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>
SharePoint:
SharePoint:SiteActions CONTROL
/SharePoint:
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"/
script>
layouts/1033/styles/datepicker.css"/>
Date Picker
DatePickerDiv');" onkeydown="OnKeyDown(this);" style="margin:0;">
SPDatePickerControl id="DatePickerWebCustomControl" runat="server" >
SPDatePickerControl>
This layout is located in the '/layouts' folder of the MOSS installation.