3 Правила створення списків sharepoint
Як не дивно, але на просторах інтернету вкрай мало інформації як правильно робити списки і бібліотеки SharePoint. У книгах про це теж рідко пишуть. Гірка правда полягає в тому, що переважна більшість додатків містить помилки, пов'язані з розгортанням списків в SharePoint.
Щоб усунути левову частку цих помилок, треба дотримуватися наступних правил:
ContentType
Якщо ви хочете створити список, то не треба лізти в меню Add -> New Item -> List. Для початку створіть поля для списку і тип контенту. Навіть якщо ви думаєте, що тип контенту буде рівно в одному списку, то все одно створюйте тип контенту.
Тип контенту разом з полями деплойте в фиче рівня Site, бажано прихованої, щоб ніхто не зміг просто так відключити і поламати рішення.
У цій же фиче необхідно виконати всі прив'язки Workflow, різних Policy і форм.
Важливо щоб після активації фичи тип контенту був готовий до використання.
ContentTypeBinding
Елемент ContentTypeBinding дозволяє прив'язати тип контенту до примірника списку. При цьому немає необхідності створювати List Definition. Досить створити список з одного зі стандартних шаблонів, а потім зробити прив'язку.
ContentTypeBinding ще дуже хороший тим, що навіть при наявності типу контенту в списку, він додасть відсутні поля, Workflow, політики. Це дуже зручно при апгрейді.
Деплоіть разом з екземпляром списку в фиче рівня Web, іноді буває і Site, але нечасто. У коді активації фичи зазвичай потрібно видалити тип контенту за замовчуванням, додати уявлення, налаштувати параметри списку ітд.
Необхідність писати код - один з недоліків прив'язки. Інший недолік в тому, що для кількох списків код доведеться копіпаст. Це все ускладнює підтримку. Іноді простіше зробити List Definition.
ContentTypeRef
Якщо ж вас необхідний саме дефінішен, то зробіть його прихованим. Ви сильно знизите "область поразки".
Але найголовніша проблема в тому, що List Definition, що генерується Visual Studio, некоректне.
Поля певні в List Definition не викликають методів OnAdded і OnAddedToContentType. Типи контенту (ContentType), певні в дефінішене, не переносять все властивості, наприклад обробники подій.
Єдиний спосіб правильно зробити List Definition - використовувати тільки ContentTypeRef. Крім того, використовуючи ContentTypeRef. можна не вказувати Fields. залишити порожній елемент. SharePoint автоматично додасть поля всіх типів контенту і викличе їх методи.
UPD. Не забирайте тип контенту папки (0x0120), він необхідний для коректної роботи.
замість висновку
