尝试将sharepoint批准工作流添加到ListAdded事件接收器中的List时,此页面的安全验证无效

时间:2013-04-23 17:51:14

标签: sharepoint-2010 event-receiver 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;
                    }
                }
            }
       });
 }

我收到此错误 -

此页面的安全验证无效。在Web浏览器中单击“上一步”,刷新页面,然后再次尝试操作。

在这一行

docLib.WorkflowAssociations.Add(workFlow);

有任何有任何建议吗?感谢您的反馈。

2 个答案:

答案 0 :(得分:1)

为什么你需要“SPUtility.ValidateFormDigest()”?

您的代码在事件接收器中运行,而不是在表单或aspx页面上运行,没有任何内容可以验证。

您可以删除此行并重试吗?

答案 1 :(得分:0)

我相信更新此代码块:

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;

请告诉我这是否适用于您,或者您是否仍然遇到相同的错误。