2009-08-07 8 views
6

Chúng tôi có thể viết một trình nhận sự kiện được kích hoạt khi danh sách bất kỳ được cập nhật hay không. Listtemplateid mà chúng ta phải chỉ định cho một eventreceiver làm cho mã của chúng ta specefic thành một giống các danh sách. Điều gì sẽ xảy ra nếu chúng tôi muốn mã thực thi cho các sự kiện trên tất cả danh sách trang web?Đính kèm EventReceiver vào tất cả các danh sách của một trang chia sẻ

Trả lời

8

Tôi có cùng yêu cầu chính xác.

Có lẽ chúng ta có thể đính kèm nhận sự kiện để hệ thống ContentType (tất cả các loại nội dung kế thừa mà một, với id 0x)

I`d kiểm tra xem đó là có thể bằng cách tạo ra một tính năng với một FeatureReceiver và lập trình thêm nó vào Loại nội dung hệ thống. Một số chi tiết here.

Đường dẫn của tôi để tìm giải pháp

Được rồi, tôi đã thực hiện một số thử nghiệm với ứng dụng giao diện điều khiển.

  1. Đã cố gắng thêm EventReceivervào hệ thống (0x). Phương thức được gọi là ContentType.Update (true, false) cập nhật tất cả các phần tử con - cũng như không cập nhật Hệ thống ContentType, cũng không phải là childs. Hóa ra rằng bạn không thể sửa đổi những nội dung này với ReadOnly || Sealed thuộc tính được đặt thành TRUE
  2. Đã cố gắng thêm EventReceiver vào mục (0x01) ContentType. Như đã thấy ở đây, tất cả ContentTypes vẫn được kế thừa từ cái đó (xem ContentType hierarchy). Có thể có các loại nội dung được triển khai tùy chỉnh kế thừa từ Hệ thống, nhưng không phải là các loại nội dung được tạo trong GUI. Cập nhật loại nội dung này thực sự được cập nhật tất cả các con ContentTypes (tất cả các loại nội dung ngoại trừ những ReadOnly hoặc Sealed)

Làm thế nào để đính kèm một EventReceiver toàn cầu cho tất cả các mặt hàng

Vì vậy, một giải pháp mà sẽ làm việc sẽ trông như thế này:

  1. Lặp lại tất cả các danh sách, đặt Readonly hoặc Sealed thành false nếu bạn muốn các loại nội dung đó theo mình EventReceivers.
  2. Thêm EventReceiver với các loại nội dung hiện có của bạn trong danh sách (SPList.ContentTypes)
  3. Thêm EventReceiver để ContentType (SPWeb.ContentTypes) với id 0x01 danh sách như vậy mới có được EventReceiver thêm tự động. Các loại nội dung mới được tạo cũng sẽ kế thừa EventReceivers. Ngoài ra, tất cả subweb ContentTypes đều được thừa kế EventReceivers.

Tất cả ba bước có thể là ứng dụng bảng điều khiển hoặc tập lệnh PowerShell. Hoặc một tính năng trang web bộ sưu tập rộng với FeatureReceiver

Kết quả

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 

Xin lỗi, WSS của tôi là cục bộ, nhưng {,,, ...} có nghĩa là tôi đã thêm nhiều eventreceivers với các loại nội dung. Như bạn có thể thấy những thuộc tính có thuộc tính Readonly hoặc Sealed False không bị ảnh hưởng.