0

SharePoint で非常に大きなリストをクリアしようとしています。SharePoint の削除メカニズムが遅いため、そのリストからテンプレートを (データなしで) 保存し、そのリストを削除してから、そのテンプレートから新しいリストを作成することにしました。そのコードは以下のとおりです。

public static void TruncateList(SPList list)
{
   SPSecurity.RunWithElevatedPrivileges(delegate()
   {
      using (SPSite site = new SPSite(list.ParentWeb.Site.ID))
      {
         using (SPWeb web = site.OpenWeb())
         {            
               web.AllowUnsafeUpdates = true;
               SPList listCopy = web.Lists[list.ID];
               string title = listCopy.Title;
               string description = listCopy.Description;
               string backupName = string.Format("BACKUP_{0}", title);

               // Delete old Template if exists:
               SPList gallery = web.Lists["List Template Gallery"];
               foreach (SPListItem item in gallery.Items)
               {
                  if (item.Title == backupName)
                  {
                     item.Delete();
                     break;
                  }
               }

               // Save Template:
               listCopy.SaveAsTemplate(backupName, backupName, string.Empty, false);

               // Load Template:
               SPListTemplate template = web.Site.GetCustomListTemplates(web)[backupName];
               template = web.ListTemplates[backupName];

               // Delete List:
               listCopy.Delete();   

               // Add empty List from Template:   [HANGS HERE!]                                                        
               web.Lists.Add(title, description, template);

               web.Update();
               web.AllowUnsafeUpdates = false;
         }
         );
        }
    }
}

テンプレートの保存は正常に機能し、しばらく時間がかかる元のリスト (listCopy.Delete()) を削除します

しかし、そのリストを再度作成しようとすると (web.Lists.Add)、数分後に Timeout-Exception が発生するまでサーバーが停止しました。

言及しておくと便利です: これは私の開発マシンです。私以外誰もそのウェブ/リストにアクセスしていません

4

1 に答える 1

0

自分で解決:

問題は、そのリスト (「リスト」) をパラメーターとして使用していたことです。そのリストのIDをそのメソッドに送信して使用するように変更しました

using (SPWeb web = SPContext.Current.Web)

中身。今では動作します。

于 2012-08-08T16:45:22.430 に答える