Adjuntar EventReceiver a todas las listas de un sitio de SharePoint
-
12-09-2019 - |
Pregunta
Podemos escribir un EventReceiver que se activa cuando cualquier lista se actualiza. El listtemplateid que tenemos que especificar para un EventReceiver hace que nuestra specefic código para una raza de listas. ¿Qué pasa si queremos tener el código de ejecución de eventos en todas las listas de sitio?
Solución
Tengo el mismo requisito exacto.
Tal vez es posible adjuntar receptor de eventos a ContentType
sistema (todos los tipos de contenido que se heredan, con id 0x)
`d comprobar si eso es posible mediante la creación de una función con un FeatureReceiver y programación de añadirlo al sistema de tipo de contenido. Algunos detalles aquí .
Mi camino en la búsqueda de una solución
De acuerdo, me hizo algunas pruebas con aplicación de consola.
- intentado añadir
EventReceiver
al sistema (0x) . Llamado ContentType.Update método (verdadero, falso) que actualiza todos los elementos secundarios - ni tampocoContentType
sistema actualizado, ni del niño . Resulta que no es posible modificar esas ContentTypes conReadOnly
||Sealed
atributo establecido enTRUE
- intentado añadir a EventReceiver Artículo (0x01)
ContentType
. Como se ve desde aquí, todoContentTypes
todavía hereda de que uno (ver ContentType jerarquía ). Puede ser desplegado tipos de contenido que heredan de sistema, pero no las realizadas en GUI. La actualización de este contenido de este tipo verdaderamente actualizada todaContentTypes
niño (todos los tipos de contenido, excepto losReadOnly
oSealed
)
Cómo conectar un EventReceiver global para todos los artículos
Así que una solución que funcionaría sería el siguiente:
- Iterar todas las listas, establecer
Readonly
oSealed
en false si quieres esos tipos de contenido con el queEventReceivers
. - Añada su
EventReceiver
a tipos de contenido existentes en las listas (SPList.ContentTypes
) - Añadir a EventReceiver ContentType (
SPWeb.ContentTypes
) con id 0x01 así obtener nuevas listas EventReceiver añade automáticamente. tipos de contenido de nueva creación también heredaránEventReceivers
. También todoContentTypes
subweb heredaEventReceivers
.
Los tres pasos podrían ser una aplicación de consola o un script de PowerShell. O una característica amplia colección de sitios con FeatureReceiver
El resultado
PS C:\Documents and Settings\Administrator> $web.contentTypes |ft id, name, EventReceivers, readonly, sealed
Id Name EventReceivers ReadOnly Sealed
-- ---- -------------- -------- ------
0x Sistēma {} False True
0x007F1DD730DB144C84... Darba kārtības vēsture {} True True
0x01 Ieraksts {, , , ...} False False
0x01003420C661289843... Darba kārtības ieraksts {, , , ...} False False
0x0101 Dokuments {, , , ...} False False
0x010100629D00608F81... Office datu savienoj... {} True False
0x010100B4CBD48E029A... Universālais datu sa... {} True False
0x010101 Veidlapa {, , , ...} False False
0x010102 Attēls {, , , ...} False False
0x010104 Nezināms dokumenta tips {} True False
0x010105 Lapu šablons {, , , ...} False False
0x010107 Lietotāja darbplūsma... {, , , ...} False False
0x010108 Wiki lapa {, , , ...} False False
0x010109 Pamatlapa {, , , ...} False False
0x01010901 Web daļu lapa {, , , ...} False False
0x01010A Saistīt ar dokumentu {, , , ...} False False
0x01010B Dublinas pamata kolo... {, , , ...} False False
0x0102 Notikums {, , , ...} False False
0x0103 Diskutējamais jautājums {, , , ...} False False
0x0104 Paziņojums {, , , ...} False False
0x0105 Saite {, , , ...} False False
0x0106 Kontaktpersona {, , , ...} False False
0x0107 Ziņojums {, , , ...} False False
0x0108 Uzdevums {, , , ...} False False
0x0108007122AD6D76CD... Darba kārtības uzdevums {, , , ...} False False
0x010801 Darbplūsmas uzdevums {, , , ...} False False
0x010802 Administratīvs uzdevums {, , , ...} False False
0x0109 Darbplūsmas vēsture {, , , ...} False False
0x010A Person {, , , ...} False False
0x010B SharePointGroup {, , , ...} False False
0x010C DomainGroup {, , , ...} False False
0x0110 Ziņa {, , , ...} False False
0x0111 Komentārs {, , , ...} False False
0x0116 Tālo Austrumu līgums {, , , ...} False False
0x0120 Mape {} False True
0x012001 RootOfList {} False True
0x012002 Diskusija {, , , ...} False False
Lo siento, mi WSS se localiza, pero {,,, ...} significa añadí varios EventReceivers a tipos de contenido. Como se puede ver con los Readonly
o Falso Sealed
atribuyen son intactos.