La verdad busque un buen rato por internet pero encontré muy poco que me sirviera de ayuda por lo que se me ocurrió otra alternativa no del todo optima pero funcional, llamémosle chapusa.
A la lista de discusión le agregue un campo llamado Anónimo del tipo “Si o No”.
Ahora viene crear el manejador de evento de la lista, para saber cómo crear un evento para una lista ver este post Los eventos en WSS3 allí explica lo que son los eventos y los diferentes tipos que existen.
Deberemos sobrescribir el método ItemAdded, dentro tomaremos los valores que el usuario esta guardando en ese momento y en caso de que el usuario haya seleccionado el check de “Anónimo”, utilizaremos un impersonalizador para crear un nuevo elemento por código con un usuario diferente al actual, para esto debemos tener ya un usuario creado llamado Anónimo (o como quieras que aparezca en los elementos), y una vez que creamos el nuevo elemento con el usuario impersonalizado solo nos queda borrar el elemento que el usuario actual agrego como nuevo.
Código:
public override void ItemAdded(SPItemEventProperties properties)
{
SPListItem item = properties.ListItem;
if (item["Anonimo"].ToString() == "True")
{
DisableEventFiring();
SPUser userYo = item.Web.AllUsers["dominio\\Anonimo"];
SPUserToken miSigno = userYo.UserToken;
SPSite impersSiteCollection = new SPSite(item.Web.Url, miSigno);
SPWeb impersWeb = impersSiteCollection.OpenWeb();
if (item["IsRootPost"].ToString() == "0")
{
SPListItemCollection miListaItemCol = impersWeb.Lists["Discusion"].Items;
SPListItem parentItem = miListaItemCol.GetItemById((int)item["ID"]);
SPListItem nuevoItem = SPUtility.CreateNewDiscussionReply(parentItem);
nuevoItem["Categoria"] = item["Asunto"];
nuevoItem["Detalle"] = item["Cuerpo"];
nuevoItem["Anonimo"] = item["Anonimo"];
item.Delete();
nuevoItem.Update();
}
else
{
SPListItemCollection miListaItemCol = impersWeb.Lists["Discusion"].Items;
SPListItem nuevoItem = miListaItemCol.Add();
nuevoItem["Categoria"] = item["Asunto"];
nuevoItem["Detalle"] = item["Cuerpo"];
nuevoItem["Anonimo"] = item["Anonimo"];
item.Delete();
nuevoItem.Update();
}
EnableEventFiring();
}
}
Una vez que compila se deberá agregar firmar y agregar la dll al GAC del servidor.
Para asociar el evento con la lista de discusión que nos interesa podemos usar esta herramienta EventHandlerExplorer. (ejemplo de uso aquí).
Y ahora tenemos una lista de discusión con opción a postear comentarios como anónimos dentro de un site de sharepoint.

No hay comentarios:
Publicar un comentario