Проверка безопасности для этой страницы является недопустимой ошибкой при попытке добавить рабочий процесс утверждения sharepoint в список в ListAdded eventreceiver
То, что я пытаюсь сделать, - это присоединить рабочий процесс OOTB sharepoint [Approval Sharepoint - 2010] к каждой библиотеке документов, которая когда-либо создавалась. Для этого я создал приемник событий List Added и поместил в него этот код -
public override void ListAdded(SPListEventProperties properties)
{
SPSecurity.RunWithElevatedPrivileges(delegate()
{
SPUtility.ValidateFormDigest();
using (SPSite site = new SPSite(properties.SiteId))
{
using (SPWeb web = site.OpenWeb())
{
try
{
base.ListAdded(properties);
if (currentList is SPDocumentLibrary)
{
SPDocumentLibrary docLib = (SPDocumentLibrary)properties.List;
//workflows need a tasks and history list. Here we assume they exist
SPList taskList = web.Lists["Tasks"];
SPList historyList = web.Lists["Workflow History"];
//loop through the workfows in the web and grab the one we want by name
SPWorkflowTemplate wfTemp = null;
foreach (SPWorkflowTemplate wt in web.WorkflowTemplates)
{
if (wt.Name == "Approval - SharePoint 2010")
{
wfTemp = wt;
Common.AddToLog(web, "Found " + wt.Name + " in current web " +
web.Url, false);
break;
}
}
//Now add the workflow to the doc library
SPWorkflowAssociation workFlow = SPWorkflowAssociation.CreateListAssociation(wfTemp, wfTemp.Name, taskList, historyList);
workFlow.AllowManual = true;
workFlow.AutoStartChange = false;
workFlow.AutoStartCreate = true;
workFlow.AssociationData = null;
web.AllowUnsafeUpdates = true;
web.ValidateFormDigest();
docLib.WorkflowAssociations.Add(workFlow);
docLib.EnableModeration = true;
docLib.Update();
web.Update();
web.AllowUnsafeUpdates = false;
}
}
catch (Exception ex)
{
throw ex;
}
finally
{
web.AllowUnsafeUpdates = false;
}
}
}
});
}
Я получаю эту ошибку
Проверка безопасности для этой страницы недействительна. Нажмите "Назад" в веб-браузере, обновите страницу и попробуйте снова.
на этой линии
docLib.WorkflowAssociations.Add(workFlow);
Есть ли какие-либо предложения, пожалуйста? Спасибо за ваш отзыв.
2 ответа
Зачем вам вообще нужен "SPUtility.ValidateFormDigest()"?
Ваш код выполнялся в получателе событий, а не на странице формы или aspx, проверять нечего.
Не могли бы вы удалить эту строку и попробовать еще раз?
Я считаю, что обновление этого блока кода:
web.AllowUnsafeUpdates = true;
web.ValidateFormDigest();
docLib.WorkflowAssociations.Add(workFlow);
docLib.EnableModeration = true;
docLib.Update();
web.Update();
web.AllowUnsafeUpdates = false;
и заменить его на:
web.Site.WebApplication.FormDigestSettings.Enabled = false;
docLib.WorkflowAssociations.Add(workFlow);
docLib.EnableModeration = true;
docLib.Update();
web.Update();
web.Site.WebApplication.FormDigestSettings.Enabled = true;
Дайте мне знать, если это работает для вас или вы все еще сталкиваетесь с той же ошибкой.