有效的方法来创建大量的SharePoint文件夹

时间:2010-05-28 02:40:28

标签: sharepoint sharepoint-2007

我目前正在列表中创建大量SharePoint文件夹(例如~800个文件夹),每个文件夹包含不同数量的项目。目前的工作方式是以编程方式从其他网络中读取同一文件夹中的内容类型,项目,事件监听器等,然后在当前网站中创建相同的文件夹。

在开发环境中运行得相当好和快。然而,当它进入一个有WFE和农场的环境时,它会放慢很多。我已经检查过代码中没有泄漏,并且代码遵循SharePoint编码最佳实践。

目前我正在代码级别查看它。根据您的经验,是否有任何有效的方法来创建大量的SharePoint文件夹,列表和项目?

编辑:我目前正在使用SharePoint API,但将来会考虑转向使用Web Service。我有兴趣看看这两个选项。代码方面,它只是对文件夹及其内容类型以及项目及其详细信息的一般读取,然后在具有相同内容类型的相同列表中创建相同的文件夹,然后使用补丁更新复制项目。我想知道是否有更有效的方法来做到这一点。

感谢。

3 个答案:

答案 0 :(得分:4)

您可以使用Batch Updating创建文件夹和项目。这比逐项创建要快得多。

要阅读源文件夹结构,可以使用CAML查询提高性能。

答案 1 :(得分:2)

这是我在PowerShell中通过SharePoint的API实现的。这种方法可以很容易地转换为C#。

[Void][System.Reflection.Assembly]::LoadWithPartialName("Microsoft.SharePoint") | Out-Null;
[array]$folders = "A","B","C","D","E","F","G";
$SPSite = New-Object Microsoft.SharePoint.SPSite("http://intranet");
$OpenWeb = $SpSite.OpenWeb("/departments/Branding");
$OpenList = $OpenWeb.Lists["Test"];

foreach ($folder in $folders)
{
    $exists = $OpenList.Folders | Select-Object -Property Name | Where {$_.Name -eq $folder.ToString()}
    if ($exists.Name -eq $folder) { $folder + " already exists!"; }
    else
    {
        $item = $OpenList.Folders.Add("",[Microsoft.SharePoint.SPFileSystemObjectType]::Folder,$folder);
        $item.Update();
        $folder + " Created!";
    }
}
$SPSite.Dispose();

答案 2 :(得分:0)

试试这个: 在您的文档库中,转到设置 - >站点设置,然后单击“将文档库另存为模板”并选择包含内容。现在这不会保留您的安全设置,但应该让您在那里一半。从那里尝试以编程方式设置权限。

您可以尝试的另一件事是使用http://www.sharepointproducts.com/products/default.aspx的复制移动。它将批量移动/复制任何内容并保留用户的权限。我会从服务帐户运行它,这样您就可以从服务器以编程方式调用它。它只允许一个人在免费版本中执行此操作。为免费程序付出的小代价:) 的 ----- ----- EDIT

我在CodePlex上发现了其他可能对您有帮助的内容:http://sprsync.codeplex.com/。查看源代码,因为它可能会让您入门