2010-05-28 179 views
3

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

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

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

编辑:我目前正在使用SharePoint API,但将在未来转向使用Web服务。不过,我有兴趣查看这两个选项。代码明智的,它只是一个文件夹和它的内容类型加上项目和他们的细节的一般阅读,然后在相同的列表中创建相同的文件夹与相同的内容类型,然后使用补丁更新复制项目。我想知道是否有更有效的方法来做到上述。

谢谢。

+0

我已经做了一次或两次在非营业时间通过PowerShell。你能发布一些我可以看的代码吗?实际上有很多方法可以做到这一点,你的过程可以改进。如果你不能发布你的代码,我会尝试写出一些非常快的东西。 – 2010-05-28 02:45:28

+0

要声明,您是使用Web服务,Webdav连接还是使用SharePoint的API? – 2010-05-28 02:56:45

+0

如果您找到解决方案,它是什么? – 2010-06-09 22:35:19

回答

4

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

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

+0

Hi @Stefan,如何使用批处理创建文件夹。我尝试没有任何成功。你可以帮我吗? – 2015-09-10 10:34:06

2

这就是我将如何通过SharePoint的API在PowerShell中完成的。这种方法可以很容易地转换为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(); 
+0

有什么方法可以加快创建过程?目前,我正在手动复制每个文件夹的所有内容类型及其权限等,而这仅仅是一个非常缓慢且乏味的过程。 – BeraCim 2010-05-28 04:39:52

+0

你到底在拷贝什么?你是否复制了一些已经存在的东西? I.E.你在为每个网站创建一些东西吗? – 2010-05-28 06:04:27

+0

SharePoint上的一些事情需要很长时间才能完成。我有一个将Active Directory中的每个用户导入到SharePoint的进程。要处理600个组和1400个用户,大约需要3个小时。当涉及到某些事情时,SharePoint会有一些开销。现在我有高端硬件,这种情况发生。我能够将这个过程从6小时的过程减少到目前的3 ...所以优化是可能的。请回答我以前的问题,我可能会帮助你。 – 2010-05-28 06:14:42

0

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

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

我发现在CodePlex上别的东西可能会帮助您:http://sprsync.codeplex.com/。看看源代码,因为它可能让你开始