c# - recibir - Cómo crear una alerta de resumen diaria para cualquier cambio en un sitio de SharePoint
recibir notificaciones de teams (3)
Hace poco recibí el requisito de que una persona reciba una alerta sumaria diaria para cualquier cambio dentro de un sitio de SharePoint; cada sitio tiene un propietario que está a cargo del contenido de su sitio.
La forma actual en que tenemos algo que funciona es configurar automáticamente alertas para cada lista / biblioteca dentro del sitio.
// Get the Lists on this Site
SPListCollection siteLists = currentSite.Lists;
foreach (SPList list in siteLists)
{
if (!list.ToString().Equals("Master Page Gallery"))
{
if (list.ReadSecurity == 1) // user has read access to all items
{
// Create an Alert for this List
Guid alertID = currentUser.Alerts.Add(list, SPEventType.All, SPAlertFrequency.Daily);
// Set any additional properties
SPAlert newAlert = currentUser.Alerts[alertID];
}
}
}
Esto crea dos problemas:
- El usuario tiene muchas alertas diferentes creadas. Ideal: solo UN correo electrónico con el resumen diario.
- Algún tipo de monitor tendría que configurarse para buscar nuevas listas o bibliotecas en el sitio y configurar automáticamente alertas para el usuario.
P: ¿Cómo puedo crear una alerta de resumen diaria para todos los cambios en un sitio?
Creo que la solución que está buscando está disponible a través del marco de auditoría. La auditoría es muy sólida en SP, desafortunadamente es fácil sentirse abrumado por la salida.
La auditoría es una propiedad disponible en las propiedades SPSite, SPWeb, SPList y SPItem.
Ajuste los indicadores de auditoría específicos (utilizando las propiedades .Audit.AuditFlags) usando esta propiedad para satisfacer sus necesidades (los detalles dependerán de cómo defina el "cambio", pero casi todo lo que pueda pensar está disponible).
Los detalles sobre el objeto SPAudit están disponibles en MSDN.
Una vez que haya definido qué / dónde desea auditar, tendrá que devolver esa información a sus usuarios.
De manera predeterminada, SP configura algunos buenos informes disponibles en el nivel de colección de sitios ([url de la colección de sitios] / _ layouts / Reporting.aspx? Category = Auditing). Estos pueden satisfacer sus necesidades.
Su solución inicial menciona alertas por correo electrónico para los usuarios. Dado que la mayoría de los usuarios desean centralizar su información en el correo electrónico (¡aunque su MySite es un gran lugar para poner un enlace a los informes!), Tendrá un poco más de trabajo por hacer.
Puede extraer la información de auditoría requerida a través del modelo de objetos utilizando los objetos SPAuditQuery y SPAuditEntryCollection. Nuevamente, MSDN tiene cierta información sobre cómo usar estos objetos.
Recomendaría configurar una SPJobDefinition personalizada que se ejecute al final del día para enviar por correo electrónico a los usuarios el informe de auditoría de su sitio. Andrew Connell tiene una gran explicación de cómo configurar un trabajo personalizado en su blog.
Para resumir:
- habilitar la auditoría para los SPWeb en cuestión
- cree un informe usando SPAuditQuery y SPAuditEntryCollection para cada SPWeb
- crea un SPJobDefinition que se ejecuta todas las noches para enviar el informe por correo electrónico a cada propietario de SPWeb
Una consideración a tener en cuenta antes de habilitar la política de auditoría en un sitio es la sobrecarga de rendimiento que agrega.
¡Recomendaría mantener la huella lo menos posible aquí!
Con esto me refiero a si solo es cierto tipo de contenido o una cierta lista de la que desea que aparezca esta información, ¡asegúrese de habilitar solo la política de información en estos CT o listas!
También mantenga el registro al mínimo. Por ejemplo, si solo le interesan las vistas, no eliminarlas o restaurarlas, ¡solo registre estos eventos!
¡En sitios grandes, he visto la auditoría como un gran rendimiento!
También tenga en cuenta algunas advertencias aquí: aunque puede habilitar la auditoría en las listas (como en las bibliotecas de documentos), muchos eventos (por ejemplo, ver eventos) no se registran específicamente para los elementos de la lista. Esto no se describe en ningún lugar (de hecho, incluso he visto a Ted Pattison mencionar auditorías a nivel de elemento en un artículo de MSDN) pero el equipo de CSS y el equipo de productos me dicen directamente que la auditoría a nivel de elemento no se implementa en SP2007 debido a problemas de rendimiento. En su lugar, acaba de obtener un evento de lista en el registro que especifica que la lista ha sido tocada.
Los documentos se rastrean bastante bien, pero he visto problemas al auditar ver eventos en la página de publicación (que en la API se considera un documento, no un elemento de la lista) dependiendo de cómo y dónde se estableció la auditoría (por ejemplo, si las políticas de auditoría se implementaron con CT''s) entonces eso es algo de lo que debemos estar conscientes.
[edit: hizo algunas pruebas al respecto ayer y es aún peor: de hecho, solo se realiza un seguimiento de las páginas de publicación si configuras la política de auditoría del nivel del sitio. Si establece una política en una lista o un tipo de contenido (o incluso un tipo de contenido que hereda de un tipo de contenido con una política), no obtendrá ningún evento SPAuditItemType.Document level. Configúralo en un sitio y obtendrás demasiadas auditorías. P.ej. una vista activará x2 view events, y lo mismo con las actualizaciones, por lo que terminará con demasiados registros. Definitivamente se parece a un error que no se audita nada cuando las políticas se ponen en listas y CT ...]
El mensaje principal aquí es: ¡cuidado con lo que registras, ya que afectará el rendimiento de tu sitio TEST que lo que esperas registrar realmente está registrado!
hth Anders Rask
Bueno, no es un caso que no haya una auditoría a nivel de ítem. La auditoría de nivel de elemento está implementada, pero debe activarla para un elemento específico. Si existe un elemento en la lista, puede obtener su instancia y activar la auditoría de la misma forma que lo hace en las listas. El problema es cómo encenderlo cuando se crea el ListItem. Tal vez el flujo de trabajo podría ayudar?