Проверка безопасности для этой страницы является недопустимой ошибкой при попытке добавить рабочий процесс утверждения 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;

Дайте мне знать, если это работает для вас или вы все еще сталкиваетесь с той же ошибкой.

Другие вопросы по тегам