Все поля имеют набор свойств, которые определяют их видимость в формах, таких как «ShowInNewForm», «ShowInEditForm» и «ShowInDisplayForm». Есть также некоторые для диалогового окна файла, страницы настроек списка и нескольких других местах, но это уже позади. Короткий ответ: да, вы можете сделать так, чтобы поле не отображалось в форме редактирования с WSS без необходимости использования сторонних компонентов.
Если вам нужно поле, которое никто не может видеть в форме редактирования (то есть никто не должен иметь его в своей форме), то вам нужно изменить «ShowInEditForm», чтобы оно было истинным. Это не может быть изменено напрямую через интерфейс SharePoint, но это очень просто, используя объектную модель.
Если вам нужно, чтобы определенные люди редактировали его в определенный момент через пользовательский интерфейс SharePoint, вам вместо этого придется создать пользовательскую форму редактирования. Это немного сложнее, поэтому я воздержусь от предоставления этой инструкции, если вы не укажете, что вам нужно идти по этому маршруту (или кто-то другой проходит мимо этого ответа и запрашивает его). Тем не менее, это вполне возможно с WSS 3.0.
EDIT
Если вы уже знаете, как вставить встроенный код C # на страницу ASPX, это можно сделать очень просто с помощью SharePoint Designer. Во-первых, следуйте инструкциям этой статьи , особенно убедитесь, что вы не удаляете веб-часть формы списка по умолчанию. Теперь в добавленной вами настраиваемой форме списка включите в нее все поля, которые каждый сможет редактировать. Последний шаг - заставить форму скрывать эти поля для определенных людей. Давайте установим для них значение по умолчанию Visible = false и переключим этот переключатель, если пользователь разрешил их. Это можно сделать, проверив, является ли текущий пользователь частью указанных групп, или проверив, имеет ли пользователь определенный уровень разрешений, принадлежащий только пользователям этих групп. Вы в основном напишите некоторый код, подобный следующему, я буду использовать проверку для указанной группы в качестве примера.
using (SPWeb web = this.Web)
{
SPUser currUser = web.CurrentUser;
string[] listOfGroups = { "Group1Name", "Group2Name", "Group3Name" };
foreach (string groupName in listOfGroups)
{
if (currUser.Groups.Contains(groupName))
{
//Repeat this for each Control, refer to them by their ID. For example, this is for a control with the ID txtTitle.
txtTitle.Visible = true;
}
}
}
Если вы не знаете встроенный код, вам придется написать собственную страницу ASPX с выделенным кодом. Скопируйте EditForm.aspx в новый файл - вы должны сделать это после настройки пользовательской формы списка в соответствии со статьей. Вы также можете создать новую ASPX-страницу с нуля, но убедитесь, что вы включили все необходимые заполнители контента для страниц SharePoint. Теперь страница в настоящее время наследуется от Microsoft.SharePoint.WebPartPages.WebPartPage
. Нам нужно создать пользовательский код, который наследуется от этого класса, и изменить страницу, чтобы наследовать этот новый пользовательский код. В пользовательском коде переопределите один из методов OnLoad или OnInit и включите в него проверку прав пользователя, как описано ранее. Скомпилируйте код, разверните его на своем сервере SharePoint, и он должен быть функциональным.