0

私がやろうとしているのは、OOTB シェアポイント ワークフロー [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);

何か提案はありますか?ご意見をいただきありがとうございます。

4

2 に答える 2

1

なぜ「SPUtility.ValidateFormDigest()」が必要なのですか?

コードは、フォームや aspx ページではなく、イベント レシーバーで実行されていました。検証するものはありません。

この行を削除して、もう一度お試しいただけますか?

于 2013-04-24T00:44:21.033 に答える