2009-08-07 16 views
6

Czy możemy napisać odbiornik zdarzenia, który zostanie uruchomiony, gdy jakakolwiek lista zostanie zaktualizowana. Lista elementów, które musimy określić dla odbiornika zdarzeń, sprawia, że ​​nasz kod jest specefyczny dla jednego rodzaju list. A co jeśli chcemy, aby kod był wykonywany dla zdarzeń na wszystkich listach witryny?Dołącz EventReceiver do wszystkich list witryny SharePoint

Odpowiedz

8

Mam dokładnie to samo wymaganie.

Może to jest możliwe, aby dołączyć odbiornik zdarzenia do systemu ContentType (wszystkie typy zawartości dziedziczyć, że jeden z identyfikatorem 0x)

`d sprawdzić, czy to możliwe poprzez stworzenie funkcji z FeatureReceiver i programowo dodając go do Typ zawartości systemu. Niektóre szczegóły here.

Moja droga na znalezienie rozwiązania

porządku, zrobiłem kilka testów z aplikacji konsoli.

  1. Próbowano dodać EventReceiverdo Systemu (0x). Wywoływana metoda ContentType.Update (true, false), która aktualizuje wszystkie elementy podrzędne - , ani nie zaktualizowała systemu ContentType, ani potomków. Okazuje się, że nie można modyfikować tych typów treści za pomocą ReadOnly || Sealed atrybut ustawiony na TRUE
  2. Próbowałem dodać EventReceiver do pozycji (0x01) ContentType. Jak widać stąd wszystkie ContentTypes nadal dziedziczą z tego (patrz ContentType hierarchy). Mogą istnieć niestandardowe rozmieszczone typy zawartości dziedziczące po Systemie, ale nie te utworzone w GUI. Aktualizacja tego typu treści prawdziwie zaktualizowane wszystkie dzieci ContentTypes (wszystkie typy zawartości wyjątkiem ReadOnly lub Sealed)

Jak dołączyć globalny EventReceiver do wszystkich elementów

więc rozwiązanie, które będzie działać będzie wyglądać następująco:

  1. iteracyjne wszystkie listy, ustaw Readonly lub Sealed false jeśli chcesz te typy zawartości z wami EventReceivers.
  2. Dodać EventReceiver do istniejących typów zawartości w listach (SPList.ContentTypes)
  3. Dodaj EventReceiver do contenttype (SPWeb.ContentTypes) id 0x01 więc nowe listy dostać EventReceiver dodawane automatycznie. Nowo utworzone typy treści również odziedziczą EventReceivers. Również wszystkie subweb ContentTypes dziedziczą EventReceivers.

Wszystkie trzy kroki mogą być aplikacją konsoli lub skryptem powłoki. Lub witryny szeroki zbiór funkcji z FeatureReceiver

Wynik

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 

Niestety, mój WSS jest zlokalizowana, ale {,,, ...} oznacza dodałem kilka eventreceivers do typów zawartości. Jak widać te z atrybutem False atrybutu Readonly lub Sealed są nietknięte.