Регистриране на Event Receiver за Content Type в Feature с XmlDocument… всичко звучи като по учебник, до момента в който не се усетите, че сте забравили NamespaceURI.
В документацията на XmlDocument пише следното:
NamespaceURI |
Optional Text. Specifies the URI to the schema namespace for the contents of this XmlDocument element. |
Ами не е точно optional… Ако този Feature е дефиниран за активиране от Site Definition, и се пробвате да създадете сайт на база на Site Definition-a, получават се много интересни забележителности: CPU на 100%, SQL поглъща всичката памет (не че имам много…)и всички услуги са неизползваеми. User interface-а не показва нищо друго, освен екрана за чакане, а през това време зад сцената става армагедон.
Ето и малко CAML:
<ContentType ID=”0x0101006BD6DAD38F7947799A6F2EE72F5C3C11″
Name=”Test Content Type”
Group=”Custom Content Types” Version=”0″>
<FieldRefs>
<FieldRef ID=”{fa564e0f-0c70-4ab9-b863-0177e6ddd247}” Name=”Title” />
</FieldRefs>
<XmlDocuments>
<XmlDocument>
<spe:Receivers xmlns:spe=”http://schemas.microsoft.com/sharepoint/events”>
<Receiver>
<Name>UniqueNamingEventReceiver</Name>
<Type>ItemUpdated</Type>
<SequenceNumber>10000</SequenceNumber>
<Assembly>SUGBG.Website.Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=205b31e1c60edcc4</Assembly>
<Class>SUGBG.Website.UniqueNameReceiver</Class>
<Data></Data>
<Filter></Filter>
</Receiver>
</spe:Receivers>
</XmlDocument>
</XmlDocuments>
</ContentType>
И ето дефинирането в Site Definition Site Features елемента (това е в ONET.XML):
<SiteFeatures>
<!– Test Content Type –>
<Feature ID=”11BFEA71-1C5E-4A24-B310-BA51C3EB7A1″ />
Интересно е, че същият CAML е ок ако feature-a е активиран от менюто в SharePoint.
Eто и дефиницията, която работи:
<ContentType ID=”0x0101006BD6DAD38F7947799A6F2EE72F5C3C11″
Name=”Test Content Type”
Group=”Custom Content Types” Version=”0″>
<FieldRefs>
<FieldRef ID=”{fa564e0f-0c70-4ab9-b863-0177e6ddd247}” Name=”Title” />
</FieldRefs>
<XmlDocuments>
<XmlDocument NamespaceURI=”http://schemas.microsoft.com/sharepoint/events”>
<spe:Receivers xmlns:spe=”http://schemas.microsoft.com/sharepoint/events”>
<Receiver>
<Name>UniqueNamingEventReceiver</Name>
<Type>ItemUpdated</Type>
<SequenceNumber>10000</SequenceNumber>
<Assembly>SUGBG.Website.Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=205b31e1c60edcc4</Assembly>
<Class>SUGBG.Website.UniqueNameReceiver</Class>
<Data></Data>
<Filter></Filter>
</Receiver>
</spe:Receivers>
</XmlDocument>
</XmlDocuments>
</ContentType>
Това не го пиша, за да създавате пакети, които могат да убият сърверите ви, а за да не си губите времето, което аз загубих в откриването на проблема.
Пуснах официален бъг към Майкрософт, ще ви разкажа ако се стигне до интересен резултат.
(за тези, които спорят, че CAML си е чист код… прави са. Заглавието лъже.)