Вам придется подождать, пока элемент не будет создан, а затем 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
выполняется в этот момент, пользователь может не иметь доступа для чтения к элементу. Следовательно, может появиться ошибка «Отказано в доступе».
РЕДАКТИРОВАТЬ: Когда вы хотите развернуть ваш обработчик событий, вы обычно создаете функцию, которую можно активировать / деактивировать в веб-области. Затем вы ловите «активированную функцию» и вызываете такую функцию:
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