Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How do I make a list item read-only

I have a list (assume an issues list) and there is a workflow associated with it. The workflow can adjust the status column of the item to "Closed". Once an item's status is closed, I want to make it read-only so that noone can edit the item or create another workflow instance for that item.

What's the best way to achieve this?

like image 306
Ashish Patel Avatar asked Sep 18 '25 05:09

Ashish Patel


2 Answers

There are item-level permissions that can be set, so you can override list-level permissions on an item-by-item basis. Adding this functionality into your existing workflow probably makes the most sense, but of course there is nothing out-of-the-box that SharePoint provides you.

Luckily, you can extend SharePoint's workflow by creating your own custom actions. The process for doing this in SP2010 is fundamentally the same as 2007; check out this MSDN tutorial for an overview of the process.

There is also a convenient package of custom activities provided in an open-source product called SPDActivities at CodePlex. Specifically of interest to you is the Grant Permission on Item activity. Even if you opt not to use the whole package, you can examine the source code and see about implementing your own version of it (I did something similar for a past project).

Once you have a workflow action for setting an item's permission level, simply add a step to your existing workflow to set Read permission for the affected audience or group.

like image 177
CBono Avatar answered Sep 19 '25 18:09

CBono


Have you looked at SPUtility.js? You could get the value of your status field, and then if it is Closed, make the other fields read only (or hide them). This is done using JavaScript that is added in a content editor web part on your 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..
}

Full disclosure.. this is an open source library I maintain. I've tested it with SharePoint 2007 only, but it may also work with SharePoint 2010 (unfortunately I don't have access to a SharePoint 2010 environment to test).

like image 20
Kit Menke Avatar answered Sep 19 '25 19:09

Kit Menke