valores una relacionar objetos mostrar modificar listas lista eliminar elementos elemento desde campo agregar actualizar sharepoint event-receiver

relacionar - ¿Cómo actualizar la versión del ensamblado de SPItemEventReceiver para una lista en SharePoint?



mostrar elementos de una lista c# (3)

Tenemos un SPItemEventReceiver compilado en su propio ensamblado.

Estamos utilizando STSDev para empaquetar una solución de SharePoint con este EventReceiver como característica. No estoy asignando SPItemEventReceiver a un ListTemplateId específico dentro de elements.xml, sino que estoy vinculando un ReceiverAssembly en el feature.xml y programmaticaly asignando el SPItemEventReceiver a múltiples elementos SPList.

public override void FeatureActivated(SPFeatureReceiverProperties properties) { foreach (SPWeb web in site.AllWebs) { SPListCollection webListCollection = web.Lists; foreach (SPList myList in webListCollection) { if (myList.Title == "Lab Reports") { SPEventReceiverDefinitionCollection receivers = myList.EventReceivers; SPEventReceiverDefinition receiver = receivers.Add(); receiver.Name = "PostUpdateLabReport"; receiver.Assembly = "LabReportEventHandlers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=1111111111111"; receiver.Class = "LabReportEventHandlers.LabReportsHandler"; receiver.Type = SPEventReceiverType.ItemUpdated; receiver.Update(); break; } } web.Dispose(); } }

Estoy usando FeatureDeactivating para hacer el reverso del código anterior, eliminando el EventReceiver de las listas.

Pregunta:

¿Cómo debo manejar el evento futuro donde LabReportEventHandlers se actualiza y la versión cambia?

Estas son las opciones que puedo pensar:

  1. Función de desactivación / reactivación: volvería a colocar el dll actualizado en el archivo de la solución de SharePoint, cambiaría el código anterior para reflejar la nueva versión y usaría stsadmin para actualizar la solución. Luego, desactivaría / reactivaría la función.

  2. Agregue la redirección de ensamblaje a web.config.

  3. No golpee el número de versión de LabReportEventHandlers.

¿Hay algo en cambiar la versión de la solución que me ayude?

Creo que hay problemas con las 3 opciones:

  1. Después de la desactivación de la función, alguien podría actualizar un elemento antes de que pueda reaccionar.

  2. No me gustaría editar el web.config a mano, así que usaría la API de Sharepoint en su lugar. ¿Dónde podría ejecutar ese código?

  3. Esto es simplemente incorrecto, pero fácil.


No estoy seguro de qué es lo que desea con la actualización, si desea que el nuevo controlador de eventos se aplique a listas antiguas o solo para listas nuevas.

Para actualizar solo nuevas listas, puede colocar la información del ensamblado en un archivo separado, leer ese archivo en su método FeatureActivated y aplicar los nuevos valores. Al actualizar todo lo que necesita hacer es actualizar el archivo de configuración por separado y cualquier nueva activación usará los nuevos valores y números de versión.

Si necesita actualizar manejadores de eventos antiguos, puede hacer un procedimiento similar, pero agregue el nuevo receptor de funciones antes de eliminar el anterior. Si hace esto con el mismo método, el tiempo entre la adición del nuevo controlador y la eliminación del antiguo será mínimo y la posibilidad de que alguien agregue un elemento en ese momento exacto es cercana a cero. Si desea llegar a cero, puede ocultar la lista o tener un controlador de eventos adicional con fecha actualizada que verifique si hay una actualización en progreso y, de ser así, suspende la actualización.

Entonces, en resumen: para listas nuevas, lea configuración de ensamblaje desde archivo externo. Para listas antiguas, agregue información de ensamblaje actualizada justo antes de eliminar el controlador anterior.

.segundo


Tal vez pueda encapsular la lógica que es propensa a cambiar en un ensamblaje separado, que su manejador de eventos utiliza como referencia. De esta forma, el controlador de eventos en sí mismo no cambiará, tiene que cambiar, solo implementaría el ensamblaje "lógico" actualizado en el directorio o directorios de GAC o bin de forma adecuada.

HTH, jt


Solo uso versiones de ensamblaje si es necesario que se ejecuten las versiones (antiguas y nuevas) del ensamblaje. Nunca necesité esto en un receptor de eventos. Por lo tanto, no cambio la versión de ensamblaje para receptores de eventos.