自动化 SharePoint 中的模板上传和站点创建






3.50/5 (3投票s)
本文介绍了如何使用 SharePoint 对象模型上传站点模板并创建新站点。
引言
我们通常手动上传站点模板。即使在站点创建中,我们也遵循手动流程。但是 SharePoint 对象模型提供了自动化这些流程的接口。几个月前,我们的客户要求我们自动化站点创建过程。然后,我开始了这项工作,最终发现这个过程更容易实现。
基础
在 SharePoint 中,站点模板存储在名为“站点模板库”的列表中。要将模板上传到站点,您只需在列表“站点模板库”中上传文件即可。画廊仅存在于 RootWeb 中。在 SharePoint 中,您可以通过访问 site.AllWebs[string.empty]
或 site.RootWeb
来获取根 Web。因此,您需要将模板添加到根 Web 的“站点模板库”中。为此,您必须拥有站点集管理员的凭据。在示例应用程序中,您需要提供站点集管理员的用户名。我使用了一个函数 GetUserToken
来获取站点集管理员的令牌。
要创建站点,您还需要将 Web 添加到 AllWebs
集合。但在那之前,您可能需要将 AllUnsafeUpdates
设置为 true
,这可以确保更新在 HTTP GET 请求下工作,而无需安全验证。在站点创建期间,您需要指定模板名称。如果您不提供模板名称,站点仍然会被创建,但如果您尝试访问该站点,系统将提示您选择一个站点模板。
代码分析
每个 Windows 应用程序在执行时都使用凭据。例如,对于桌面应用程序,使用当前登录的 Windows 用户的凭据。对于 Web 应用程序,使用应用程序池用户的凭据。当您使用如下代码打开 SharePoint 站点时,将使用当前用户的凭据
SPSite site = new SPSite(siteUrl);
但是,您可以将 SharePoint 用户的 SPUserToken
作为第二个参数传递。要获取用户的 SPToken
,我编写了一个函数 GetUserToken
。如果 SharePoint 站点使用 Windows 身份验证,并且您使用站点集管理员的凭据运行应用程序,那么代码将顺利运行,无需传递 SPUserToken
。但是,如果您尝试使用非站点集管理员的用户执行代码,则需要指定站点集管理员名称,并且 GetUserToken
函数将返回站点集管理员的 SPUserToken
。
当您使用 SharePoint 对象模型上传模板时,您需要知道站点模板存储在根 Web 上。要从 SPSite
对象获取根 Web,您将使用
SPSite.RootWeb
或
SPSIte.AllWebs[strirng.empty]
在根 Web 中,站点模板存储在列表“站点模板库”中。因此,站点模板上传实际上是在“站点模板库”列表中添加模板文件的过程。
要创建站点,最好将 AllowUnsafeUpdates
设置为 true
。这可确保对站点的任何更新无需安全验证。在 SPSite.AllWebs.Add
方法中,我传递了 1033 作为区域设置 ID,它指定了英语区域设置。您可以在 Add
方法中指定是否使用唯一权限。如果您将唯一权限设置为 true
,则新站点将不会从父站点继承任何安全设置。在这种情况下,您需要将不同的组和用户添加到新站点。如果您继承安全设置而不是唯一权限,则父站点的用户将在当前新站点中获得相同的权限。
结论
SharePoint 对象模型是一个丰富的接口,用于与 SharePoint 功能进行通信。我们还可以使用 SharePoint 提供的 Web 服务来实现这些功能中的大部分。要运行此控制台应用程序,您需要在安装 SharePoint 的地方运行该应用程序,但使用 SharePoint Web 服务,您可以从任何地方执行这些功能。