Tengo un tipo de contenido de sitio que se utilizó para un puñado de listas en toda mi colección de sitios. En ese tipo de contenido, describo un receptor de eventos para manejar el evento ItemAdding. Esto funciona bien Ahora necesito actualizar el tipo de contenido para que también se maneje ItemUpdating. OTTOMH, intenté simplemente modificar el xml para mi tipo de contenido, ya que esto parecía permitir el seguimiento de la versión fácil. Esto funcionó en el sentido de que mis actualizaciones se aplicaron al tipo de contenido del sitio, pero no a mis listas que habían estado usando este tipo de contenido. Esto era esperado. Entonces me di cuenta de que el SDK de SharePoint tiene un grim view de que:Actualización de tipos de contenido de SharePoint ya implementados para manejar eventos de elementos adicionales
Bajo ninguna circunstancia debería actualizar el archivo de definición de tipo de contenido para un tipo de contenido después de que haya instalado y activado que el contenido tipo. Windows SharePoint Services does no realiza un seguimiento de los cambios realizados en el contenido tipo de archivo de definición. Por lo tanto, usted no tiene ningún método para empujar hacia abajo cambios hechos a tipos de contenido de sitio a los tipos de contenido secundarios.
El SDK luego apunta a un par de secciones que describen cómo usar la interfaz de usuario o el código para impulsar los cambios. Como la IU no ofrece ningún enlace a los receptores de eventos, creo que elegiré la ruta del código.
pensé que sería capaz de hacer algo como esto y simplemente añadir un nuevo receptor de eventos de la copia de la lista del tipo de contenido:
SPList list = web.Lists["My list"];
SPContentType ctype = list.ContentTypes["My content type"];
// Doesn't work -- EventReceivers is null below.
ctype.EventReceivers.Add(SPEventReceiverType.ItemUpdating,
"My assembly name", "My class name");
Pero el problema es que ctype.EventReceivers es nulo aquí , aunque tengo ItemAdding ya conectado a esta lista. Parece que se movió a la lista en sí. Entonces, la lista tiene una colección válida de EventReceivers.
SPList list = web.Lists["My list"];
list.EventReceivers.Add(SPEventReceiverType.ItemUpdating,
"My assembly name", "My class name");
lo tanto, tengo un par de preguntas:
- es la forma correcta de hacer esto sólo para añadir nuevos receptores de eventos directamente a la lista y olvidarse de mi tipo de contenido por completo?
- Para lograr este cambio, ¿cuál es la mejor manera de manejar esto en términos de administración de configuración? ¿Debo crear una aplicación de consola simple para encontrar todas las listas apropiadas y modificar cada una de ellas? ¿O de alguna manera está creando una característica una mejor opción? De cualquier manera, parece que este cambio va a ser por sí solo y difícil de descubrir por futuros desarrolladores que podrían necesitar trabajar con este tipo de contenido.
Buena pregunta: he querido preguntar algo similar. –