Как сделать элемент списка доступным только для чтения - PullRequest
3 голосов
/ 15 октября 2010

У меня есть список (предположим, список проблем), и с ним связан рабочий процесс. Рабочий процесс может настроить столбец состояния элемента на «Закрыто». После закрытия статуса элемента я хочу сделать его доступным только для чтения, чтобы никто не мог редактировать элемент или создать другой экземпляр рабочего процесса для этого элемента.

Какой лучший способ добиться этого?

Ответы [ 5 ]

4 голосов
/ 15 октября 2010

Существуют разрешения на уровне элемента, которые можно установить, поэтому вы можете переопределить разрешения на уровне списка для каждого элемента.Добавление этой функциональности в существующий рабочий процесс, вероятно, имеет смысл, но, конечно, нет ничего из того, что SharePoint предоставляет вам.

К счастью, вы можете расширить рабочий процесс SharePoint, создав свои собственные настраиваемые действия.,Процесс для этого в SP2010 в основном такой же, как в 2007 году;посмотрите это руководство по MSDN для обзора процесса .

В продукте с открытым исходным кодом также имеется удобный пакет пользовательских действий под названием SPDActivities на CodePlex .Особый интерес для вас представляет Разрешение на получение гранта по предмету .Даже если вы решите не использовать весь пакет, вы можете изучить исходный код и посмотреть, как реализовать его собственную версию (я сделал нечто подобное для прошлого проекта).

Как только у вас появится действие рабочего процесса дляустановив уровень разрешений элемента, просто добавьте шаг в существующий рабочий процесс, чтобы установить разрешение Read для затронутой аудитории или группы.

2 голосов
/ 15 октября 2010

Вы смотрели на SPUtility.js ? Вы можете получить значение вашего поля состояния, а затем, если оно равно Closed, сделать другие поля доступными только для чтения (или скрыть их). Это делается с помощью JavaScript, который добавляется в веб-часть редактора контента на вашем EditForm.aspx.

var myChoiceField = SPUtility.GetSPField('Single Choice Field');
if (myChoiceField.GetValue() == 'Closed') {
    SPUtility.GetSPField('Field A').MakeReadOnly();
    SPUtility.GetSPField('Field B').MakeReadOnly();
    SPUtility.GetSPField('Field C').MakeReadOnly();
    // etc..
}

Полное раскрытие .. это библиотека с открытым исходным кодом, которую я поддерживаю. Я протестировал его только с SharePoint 2007, но он также может работать с SharePoint 2010 (к сожалению, у меня нет доступа к среде SharePoint 2010 для тестирования).

1 голос
/ 16 октября 2010

Я бы атаковал его одним из двух способов:

  1. Как только рабочий процесс завершит работу и установит для элемента значение Закрыто, вы можете отключить наследование разрешений из родительского списка и установить разрешения для элемента списка для чтения.только.Вы можете сделать это в пользовательском рабочем процессе или в качестве получателя события Workflow или List Item.
  2. Иметь получатель события ItemUpdating List Item, который устанавливает properties.Status = SPEventReceiverStatus.CancelWithError, если статус закрыт.

Лично мне больше нравится первый вариант, так как он согласуется с философией безопасности SharePoint, не позволяющей пользователю пытаться делать то, что у него нет разрешений.Следующий код является примером настройки прав доступа только для чтения для элемента списка:

item.BreakRoleInheritance(false);
SPRoleDefinition role = web.RoleDefinitions.GetByType(SPRoleType.Reader);
SPRoleAssignment assignment = new SPRoleAssignment(web.AssociatedVisitorGroup);
assignment.RoleDefinitionBindings.Add(role);
item.RoleAssignments.Add(assignment);
0 голосов
/ 26 августа 2016

Идея (не проверено): добавьте пользовательский тип контента в список (это позволит вам позже редактировать права администратора).Сделайте так, чтобы рабочий процесс переключился на пользовательский CT, когда элемент «закрыт».Добавьте доступное только для чтения представление данных элемента в ваш EditForm.aspx, а в Designer добавьте класс «скрытый» в ваше доступное только для чтения представление.Затем добавьте пользовательский CSS в CDWP на странице для класса .hidden: нет.Затем используйте JavaScript, чтобы добавить / удалить этот класс на основе CT, чтобы представление только для чтения было видно только для пользовательского CT, а wp для редактирования - для всех остальных.

форма для переключения в режим только для чтения в зависимости от состояния ...

0 голосов
/ 18 октября 2010

Попробуйте создать приемник событий и обработать событие удаления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...