В дискуссионной доске SharePoint есть два отдельных типа контента: Обсуждение и Сообщение. Обсуждение - это папка, представляющая всю цепочку обсуждения, в то время как Сообщение предназначено для каждого элемента ответа в этой папке.
Чтобы сделать категорию доступной только для обсуждений, вместо простого добавления поля в список, добавьте его специально к типу содержимого обсуждения для этой доски и убедитесь, что оно не добавлено к типу содержимого сообщения (удалите его если это так).
Если вы хотите, чтобы поле «Категория» было во всех ответах и имело то же значение, что и родительское обсуждение, к сожалению, вам придется немного хитрить и использовать некоторые обработчики событий. Если вы еще не знакомы с ними, прочитайте эту статью для базового примера. Вам нужно будет создать событие «ItemAdding» или «ItemAdded» и прикрепить его к доске обсуждений. Этот получатель события должен сначала проверить, является ли добавляемый элемент сообщением или обсуждением (item.ContentType.Name.Equals("Message")
). Затем найдите родителя; идентификатор родителя сообщения хранится в поле с отображаемым именем «Идентификатор родительской папки». Получите значение категории для родителя, а затем установите значение категории сообщения, соответствующее этому. Последний шаг, чтобы поле «Категория» в типе содержимого сообщения не отображалось в форме редактирования, необходимо переключить свойство «ShowInEditForm» этого поля для этого типа содержимого на этой доске обсуждений на «false». Это можно сделать в объектной модели с помощью простого list.ContentTypes["Message"].Fields["Category"].ShowInEditForm = false;
, где list
- это экземпляр вашей доски обсуждений.