Cómo actualizar la versión de montaje SPItemEventReceiver para una lista en SharePoint?

StackOverflow https://stackoverflow.com/questions/382535

  •  23-08-2019
  •  | 
  •  

Pregunta

Tenemos una SPItemEventReceiver compilado en su propia asamblea.

Estamos utilizando STSDev a empaquetar una solución de SharePoint con este EventReceiver como una característica. No estoy asignando el SPItemEventReceiver a un ListTemplateId específica dentro del elements.xml, pero estoy vinculación de un lugar en el ReceiverAssembly feature.xml y programmaticaly asignar el SPItemEventReceiver a varios 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 utilizando FeatureDeactivating a hacer a la inversa del código anterior, la eliminación de la EventReceiver de las listas.

Pregunta:

¿Cómo debo manejar el evento futuro en el que se actualiza LabReportEventHandlers y los cambios de versión?

Estas son las opciones que se me ocurren:

  1. Desactivar / Reactivar función - Me gustaría envolver el DLL actualizado de nuevo en el archivo de solución de SharePoint, cambie el código de arriba para reflejar la nueva versión, y el uso de stsadmin para actualizar la solución. Entonces yo desactivar / activar la función.

  2. Añadir redirección Asamblea para el web.config.

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

¿Hay algo en el cambio de la versión de la solución que me ayudará?

Creo que hay problemas con las 3 opciones:

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

  2. No me gustaría editar el web.config con la mano, por lo que me gustaría utilizar la API de SharePoint en su lugar. ¿Dónde podría ejecutar ese código?

  3. Esto es simplemente errónea, pero fácil.

¿Fue útil?

Solución

Tal vez se puede encapsular la lógica de que es propenso a cambiar en un ensamblado independiente, y que se hace referencia utilizados por el controlador de eventos. De esta manera, el controlador de eventos en sí no va a cambiar tiene que cambiar, sólo se desplegará la versión actualizada de la "lógica" de montaje en el directorio bin o GAC (s) de manera apropiada.

HTH, jt

Otros consejos

No estoy seguro de lo que quiere con la actualización, si desea que el nuevo controlador de eventos que se aplicará a las listas antiguas o simplemente para las nuevas listas.

Para actualizar simplemente nuevas listas que podría poner la información de ensamblado en un archivo separado, leer ese archivo en el método FeatureActivated, y aplicar los nuevos valores. Al actualizar todo lo que necesita hacer es actualizar el archivo de configuración independiente y cualquier nueva activación utilizarán los nuevos valores y números de versión.

Si es necesario actualizar los controladores de eventos de edad que podría hacer un procedimiento similar, pero añadir el nuevo receptor de función antes de eliminar el viejo. Si lo hace en el mismo método que el tiempo entre la adición del nuevo controlador y la eliminación de la antigua será mínimo y la posibilidad de que alguien la adición de un artículo en ese momento exacto es cercano a cero. Si quieres ir todo el camino a cero, puede ocultar la lista o tiene un controlador adicional ItemUpdated evento que comprueba para ver si hay una actualización en curso y si es así se detiene la actualización.

Así que, en resumen: Para las nuevas listas, leer configuración de montaje del archivo externo Para las listas antiguas, añadir información de montaje actualizado antes de retirar el controlador antiguo.

.B

Yo sólo uso de versiones de montaje si hay una necesidad para las versiones de ambos (antiguos y nuevos) de la Asamblea a ser ejecutado. Nunca necesité esto en un receptor de eventos. Por lo tanto, no cambio la versión de montaje para los receptores de eventos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top