【问题标题】:Efficient way to create a large number of SharePoint folders创建大量 SharePoint 文件夹的有效方法
【发布时间】:2010-06-04 07:03:19
【问题描述】:

我目前正在一个列表中创建大量 SharePoint 文件夹(例如,大约 800 个文件夹),每个文件夹包含不同数量的项目。目前的做法是,它以编程方式从另一个 Web 的同一文件夹中读取内容类型、项目、事件侦听器等,然后在当前 Web 中创建相同的文件夹。

这在开发环境中运行得相当好和快。但是,当它进入具有 WFE 和农场的环境时,速度会慢很多。我检查了代码中没有泄漏,并且代码遵循 SharePoint 编码最佳实践。

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

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

谢谢。

【问题讨论】:

  • 我在非工作时间通过 PowerShell 完成了一次或两次。你能发布一些我可以看的代码吗?有很多方法可以实际做到这一点,并且可以改进您的流程。如果你不能发布你的代码,我会尝试快速写一些东西。
  • 澄清一下,您是在使用 Web 服务、webdav 连接,还是在使用 SharePoint 的 API?
  • 如果您找到了解决方案,那是什么?
  • 嗨@BeraCim,你有没有找到使用批处理或任何其他方式创建大量文件夹的解决方案?

标签: sharepoint sharepoint-2007


【解决方案1】:

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

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

【讨论】:

  • 嗨@Stefan,如何使用批处理创建文件夹。我试过没有任何成功。你能帮帮我吗?
【解决方案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();

【讨论】:

  • 有什么方法可以加快创建过程吗?目前我正在手动复制每个文件夹的所有内容类型、权限等,仅此一项就已经是一个非常缓慢和乏味的过程。
  • 你到底在复制什么?你在复制已经存在的东西吗? IE。你在为每个网站创建一些东西吗?
  • SharePoint 上的某些事情需要很长时间才能完成。我有一个将 Active Directory 中的每个用户导入 SharePoint 的过程。处理 600 个组和 1400 个用户大约需要 3 个小时。当涉及到某些事情时,SharePoint 会产生一些开销。现在我有高端硬件,这发生了。我能够将这个过程从 6 小时缩短到目前的 3 小时......所以优化是可能的。请回答我之前的问题,我或许可以帮助您。
  • 我正在尝试将我创建的文件夹从一个网站复制到另一个网站。每个文件夹都有自己的安全设置、内容类型、项目等,因此每个微小的细节都需要仔细复制。你可以说这就像手动克隆一些东西。可能有 800 多个文件夹要复制,并且使用标准方法和 SharePoint API 完成该过程需要相当长的时间。我还有要在站点级别复制的列表和文件夹,这也需要一段时间。我一直在寻找减少处理时间的方法,而编码是首先要看的东西。谢谢。
【解决方案3】:

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

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

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

【讨论】:

    猜你喜欢
    • 2017-11-04
    • 2019-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多