SharePoint bug – content type definition совсем не дружат с комментариями
Писать о том, как хорошо и правильно делать решения на SharePoint- довольно нудное, скучно и мега-неблагодарное дело и вообще это никому не нужно. Гораздо проще идти от обратного и писать о том, как не нужно что то делать при разработке на SharePoint – с десяток таких вещей всегда найдется на каждом проекте.
Я уже упоминал о том, как убить форму InfoPath двумя контролами, как убить wsp пакет в Visual Studio или подпортить разметку мастер страницы.
Теперь перейдем к контент типам и комментариям в них.
Итак, в одном их проектов потребовалось написать немного кастомных контент типов. Ничего сложного в этом нет, но вышло все “как обычно”.
Первый заход
<?xml version="1.0" encoding="utf-8"?>
<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
<!-- Parent ContentType: Item (0x01) -->
<ContentType ID="0x01007541b6bc0e06486fac2d1ea1956b8e0a"
Name="Commented Content Type"
Group="Custom Content Types"
Description=""
Inherits="TRUE"
Overwrite="TRUE"
Version="0">
<FieldRefs>
<FieldRef ID="{038d1503-4629-40f6-adaf-b47d1ab2d4fe}" Name="Company" DisplayName="Company"/>
<FieldRef ID="{e7be7f3c-c436-481d-8865-669e5146f53c}" Name="TeleNumber" DisplayName="TeleNumber"/>
</FieldRefs>
</ContentType>
</Elements>
Результат предсказуемый и ничего странного нет:

Второй заход
FieldRef не особо информативная штука, решили сделать всем хорошо и добавить комментарий:
<?xml version="1.0" encoding="utf-8"?>
<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
<!-- Parent ContentType: Item (0x01) -->
<ContentType ID="0x01007541b6bc0e06486fac2d1ea1956b8e0a"
Name="Commented Content Type"
Group="Custom Content Types"
Description=""
Inherits="TRUE"
Overwrite="TRUE"
Version="0">
<FieldRefs>
<FieldRef ID="{038d1503-4629-40f6-adaf-b47d1ab2d4fe}" Name="Company" DisplayName="Company"/>
<!-- this is my custom field -->
<FieldRef ID="{e7be7f3c-c436-481d-8865-669e5146f53c}" Name="TeleNumber" DisplayName="TeleNumber"/>
</FieldRefs>
</ContentType>
</Elements>
Результат превзошел ожидания – поле TeleNumber кануло в вечность ![]()

Третий заход
Неудивительно, что в таком случае (при переносе комментария на самый вверх), мы вообще перестаем видеть все поля (FieldRefs), которые были ниже!
<?xml version="1.0" encoding="utf-8"?>
<Elements xmlns="http://schemas.microsoft.com/sharepoint/">
<!-- Parent ContentType: Item (0x01) -->
<ContentType ID="0x01007541b6bc0e06486fac2d1ea1956b8e0a"
Name="Commented Content Type"
Group="Custom Content Types"
Description=""
Inherits="TRUE"
Overwrite="TRUE"
Version="0">
<FieldRefs>
<!-- this is my custom field -->
<FieldRef ID="{038d1503-4629-40f6-adaf-b47d1ab2d4fe}" Name="Company" DisplayName="Company"/>
<FieldRef ID="{e7be7f3c-c436-481d-8865-669e5146f53c}" Name="TeleNumber" DisplayName="TeleNumber"/>
</FieldRefs>
</ContentType>
</Elements>
Вывод: не смотря на обилие плюсов и достоинств, которые есть в SharePoint, в нем есть немало минусов и проблем. Сталкиваться и решать их не самое приятное дело и очень хочется верить, что в будущем их будет меньше. С другой стороны, нужно понимать, что системе уже +/- десять (10!) лет и многие проблемы тянутся за нами с далеких 2000-ных.


[...] ContentType definition [...]
Пасрер XML в SharePoint вообще удивительный. Какие чудеса таит SPQuery, он даже не-wellformed xml парсить умеет.
Стас, при этом в дефолтовых xml-ках в hive14 по полям и контент типам – комментариев куча и все работает
А когда сам пишешь – нифига.
А может в этом и дело… Что будет если overwrite убрать?
Так а чего не вставлять его последним, а менять order только во View?
Возьми ListFieldExplorer и посмотри разницу в полях созданными руками, и через фичу
Вообще декларативный xml в виде caml – это жестянка.
Альтернатив нет.
На codeplex есть проект, который позволяет кодом делать разветрывание различных артефактов, но что то не видно никого, кто бы его использовал
Ты не один
http://social.technet.microsoft.com/Forums/en-US/sharepoint2010programming/thread/614f5e58-eab8-4bf1-b47e-821c447fd01b/