我喜欢在创建或编辑项目后自定义编辑用户的权限。
function PreSaveItem(){...}
我只想编辑NewForm.aspx并添加将在添加/编辑项目之前或之后立即执行的C#代码。
由于
答案 0 :(得分:0)
为什么不创建一个SPItemEventReceiver并将其绑定到列表/内容类型?
答案 1 :(得分:0)
您必须等到创建项目,然后BreakRoleInheritance()
就可以了。
public class MyListHandler : Microsoft.SharePoint.SPItemEventReceiver
{
public override void ItemAdded(SPItemEventProperties properties)
{
base.ItemAdded(properties);
properties.ListItem.BreakRoleInheritance(false);
//you will have to add the required permissions here
}
}
但是,请注意,如果用户添加该项目然后立即尝试打开“DispForm.aspx”,您将遇到一些问题。这是因为事件接收器在并行线程上工作,并且如果在那时执行BreakRoleInheritance
,则用户可能没有对该项的读访问权。因此,可能会出现“拒绝访问”错误。
编辑:当您要部署事件处理程序时,通常会创建一个可在Web范围内激活/停用的功能。然后你捕捉“激活的功能”并调用这样的函数:
Public Sub AddEventHandlerToList( _
ByVal opList As SPList, _
ByVal spAssemblyName As String, _
ByVal spClassName As String, _
ByVal ipType As SPEventReceiverType)
opList.EventReceivers.Add(ipType, spAssemblyName, spClassName)
opList.Update()
End Sub
该功能可以定义为:
<?xml version="1.0" encoding="utf-8"?>
<Feature Id="{ABABABE1-1234-5678-9012-345678912345}"
Title="MySuperFeature
Description="Something more descriptive here"
Scope="Web"
DefaultResourceFile="core"
ReceiverAssembly="your.assembly.name, Version=1.0.0.0, Culture=neutral, PublicKeyToken=546479a7bab11231"
ReceiverClass="your.namespace.MyListHandler"
xmlns="http://schemas.microsoft.com/sharepoint/">
</Feature>
EDIT2:如果你真的必须在newform.aspx
中进行,你必须添加一些在页面中呈现的控件。在该控件内,您设置了一个'OnSaveHandler“
SPContext.Current.FormContext.OnSaveHandler = AddressOf onSave
然后,实现自己的保存功能:
Public Sub onSave(ByVal sender As Object, ByVal e As EventArgs)
Dim sRedirectUrl As String
Dim operation As SPLongOperation = Nothing
operation = New SPLongOperation(Me.Page)
operation.Begin()
If SaveButton.SaveItem(SPContext.Current, False, "") Then
sRedirectUrl = SPUrlUtility.CombineUrl(SPContext.Current.Site.Url, SPContext.Current.List.Forms.Item(PAGETYPE.PAGE_DISPLAYFORM).Url)
sRedirectUrl &= "?ID=" & SPContext.Current.Item.ID
End If
SPContext.Current.Item.BreakRoleInheritance(false);
operation.End(sRedirectUrl)
End Sub