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
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.
- Đã cố gắng thêm
EventReceiver
và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ốngContentType
, 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ớiReadOnly
||Sealed
thuộc tính được đặt thànhTRUE
- Đã 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 conContentTypes
(tất cả các loại nội dung ngoại trừ nhữngReadOnly
hoặcSealed
)
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:
- Lặp lại tất cả các danh sách, đặt
Readonly
hoặcSealed
thành false nếu bạn muốn các loại nội dung đó theo mìnhEventReceivers
. - 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
) - 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ừaEventReceivers
. Ngoài ra, tất cả subwebContentTypes
đề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.