如何有选择地禁止删除SharePoint 2010中的任务?

时间:2012-03-23 14:37:19

标签: sharepoint sharepoint-2010 properties

我是SharePoint新手,对不起,如果对我的问题的回答很明显。

我想禁止为用户删除一些任务。 我可以为我的目的使用事件接收器:

public override void ItemDeleting(SPItemEventProperties properties)
{  
    if (...) 
    {
        properties.ErrorMessage = "The task can not be deleted";
        properties.Cancel = true;
    }
} 

但我无法传递数据以检查是否可以删除任务。 我试过用

properties.ListItem.Properties["ForbidDeleting"].ToString().Equals("true")

在接收者的条件下,但有没有可能在CreateTask调用方法中传递这样的propterty?我尝试使用ExtendedProperties,但这种方法不起作用。

 ....
 task.ExtendedProperties["ForbidDeleting"] = "true"

我可以创建我的类以保持任务Guids和ForbidDeleting属性,但我认为它不是解决方案而是解决方法。

你能帮帮我吗?如何设置一些任务属性(在CreateTask调用方法中)并在事件接收器中获取它。有没有内置方法可以做到这一点?

提前谢谢。

PS:对不起我的写作。英语不是我的母语。

2 个答案:

答案 0 :(得分:0)

您可以在事件接收器中覆盖另一种方法:ItemAdding。您可以设置一个稍后可以在删除条件中使用的字段:

public override void ItemAdding(SPItemEventProperties properties)
{
    // Decide if this task should be deletable.
    properties.AfterProperties["ForbidDeleting"] = true;
}

您必须确保任务列表中存在布尔 ForbidDeleting 字段;要么通过使用模板来创建它,要么使用列表事件接收器来执行相同操作,或者在添加第一个任务之前手动执行此操作。

如果要在真正(成功)创建任务(列表项)后首先设置 ForbidDeleting 标志,则可以覆盖ItemAdded,但在更改后显式更新列表项

---费达

答案 1 :(得分:0)

我找到了解决方案。我必须在事件接收器中使用这样的代码来检索扩展属性:

Hashtable extendedProperties = SPWorkflowTask.GetExtendedPropertiesAsHashtable(taskItem);
var value = extendedProperties[key].ToString();

感谢亚历山大:https://sharepoint.stackexchange.com/questions/32341/how-to-selectively-forbid-deleting-of-tasks-in-sharepoint-2010