使用 SharePoint 应用创建计时器作业的分步方法





5.00/5 (4投票s)
使用 SharePoint 应用模型、CSOM 和 Azure WebJobs 创建计时器作业
引言
在 SharePoint 中,您可以使用计时器作业来执行计划任务。这些计时器作业是场解决方案或完全信任解决方案,需要部署在 SharePoint 服务器上并以场帐户运行。如果我们希望在 SharePoint Online 或任何托管环境中实现与计时器作业相同的功能,这是不可能的,因为我们无法在 SharePoint Online 和托管环境中部署场解决方案。
无需编写场解决方案,您仍然可以通过使用 SharePoint 应用并编写 CSOM 支持的操作来使用 SharePoint 应用实现计时器作业的功能,并且可以使用本地 Windows 任务或云 Azure WebJobs 来安排任务。
SharePoint 应用:SharePoint 应用是易于安装和卸载的解决方案,应用托管在客户端或云端,但不在 SharePoint 服务器上。
Azure WebJobs:Azure WebJobs 是 Azure 网站的一项新功能,允许您定期运行程序或任务。您可以安排作业持续运行、按特定计划运行或按需运行。
计划 - 对于本地计划,可以使用 Windows 任务来完成;对于云计划,可以使用 Azure 网站的新 WebJobs 功能。
本示例的先决条件
- 开发者网站 - 可以是本地 SharePoint 网站或 Office 365 开发者网站。
- Microsoft Azure 订阅
要实现此功能,我们需要一个SharePoint 应用和一个控制台应用程序。
SharePoint 应用将处理身份验证并分配连接和访问 SharePoint 站点所需的权限。
控制台应用程序将包含需要根据计划执行的逻辑。
步骤 - 1:创建控制台应用程序。
要创建控制台应用程序,请以管理员身份启动 Visual Studio,然后单击
文件 -> 新建 -> 项目 -> Visual C# -> 并选择控制台应用程序。
步骤 - 2:添加 Nuget 包
在 Visual Studio 中,导航到工具 -> Nuget 包管理器 ->,然后选择“为解决方案管理 Nuget 包”,如下图所示。
选择“Nuget.org”并搜索“App for SharePoint Web Toolkit”,然后单击“安装”。这将向解决方案添加“TokenHelper.cs”和“SharePointContext.cs”类。TokenHelper 和 SharePointContext 类通过客户端 ID 和客户端密钥帮助控制台应用程序获取对 SharePoint 站点的访问权限。
步骤 - 3:在控制台应用程序中编写代码
在“Program.cs”中使用 CSOM 编写作业需要执行的代码。您可以执行 CSOM 支持的操作。以下示例将在列表不存在时创建列表并创建项目。您可以编写作业需要执行的任何逻辑。
将以下代码添加到 Program.cs
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Microsoft.SharePoint.Client; using System.Configuration; using System.Collections.Specialized; using System.IO; using System.Security; namespace ConsoleApp { class Program { static void Main(string[] args) { var config = (NameValueCollection)ConfigurationManager.GetSection("Sites"); foreach (var key in config.Keys) { Uri siteUri = new Uri(config.GetValues(key as string)[0]); string listname = "My List"; string realm = TokenHelper.GetRealmFromTargetUrl(siteUri); string accessToken = TokenHelper.GetAppOnlyAccessToken( TokenHelper.SharePointPrincipal, siteUri.Authority, realm).AccessToken; using (var clientContext = TokenHelper.GetClientContextWithAccessToken( siteUri.ToString(), accessToken)) { CheckListExists(clientContext, listname); AddListItem(clientContext, listname); } } } private static void CheckListExists(ClientContext clientContext, string listName) { ListCollection listCollection = clientContext.Web.Lists; clientContext.Load(listCollection, lists => lists.Include(list => list.Title).Where(list => list.Title == listName)); clientContext.ExecuteQuery(); if (listCollection.Count <= 0) { CreateList(clientContext, listName); } } private static void CreateList(ClientContext clientContext, string listName) { Web currentWeb = clientContext.Web; ListCreationInformation creationInfo = new ListCreationInformation(); creationInfo.Title = listName; creationInfo.TemplateType = (int)ListTemplateType.GenericList; List list = currentWeb.Lists.Add(creationInfo); list.Description = "My custom list"; list.Update(); clientContext.ExecuteQuery(); } private static void AddListItem(ClientContext clientContext, string listName) { Web currentWeb = clientContext.Web; var myList = clientContext.Web.Lists.GetByTitle(listName); ListItemCreationInformation listItemCreate = new ListItemCreationInformation(); Microsoft.SharePoint.Client.ListItem newItem = myList.AddItem(listItemCreate); newItem["Title"] = "Item added by Job at " + DateTime.Now; newItem.Update(); clientContext.ExecuteQuery(); } } }
步骤 - 4:在 Windows Azure 中创建网站
使用 Azure 网站的 Azure WebJobs 功能来安排作业。所以,让我们先创建一个 Azure 网站。
要创建新网站,请登录 Azure 管理门户 http://manage.windowsazure.com/。
单击“新建”-> 选择“网站”-> 选择“快速创建”,然后输入 URL-> 单击“创建网站”。
现在我们已经完成了控制台应用程序的创建,并且拥有了一个 Azure 网站。现在我们需要一个应用。您可以使用 Visual Studio 创建一个提供程序托管的应用。当您使用 Visual Studio 开发应用并按 F5 时,Visual Studio 将负责应用注册。这意味着它将生成客户端 ID 和密钥,并更新提供程序托管的应用 Web 的 web.config。这适用于开发环境。如果您想将我们的应用部署到不同的站点,则需要使用 /_layouts/15/appregnew.aspx 注册应用。由于我们不需要任何 UI,并且只需要应用来获取控制台应用程序将用于访问 SharePoint 站点的客户端 ID 和密钥,所以我们不创建提供程序托管的应用,而是仅注册应用并使用密钥。
步骤 - 5:应用注册
要注册应用,我们需要遵循以下步骤
- 转到 /_layouts/15/appregnew.aspx 并创建客户端 ID 和客户端密钥。
- 使用 /_layouts/15/appinv.aspx 提供权限。
- 使用客户端 ID 和密钥更新控制台应用程序的 app.config
遵循以下步骤使用 SharePoint 站点的 /_layouts/15/appregnew.aspx 页面注册应用。
- 导航到以下 URL https://
/sites/DevSite1/_layouts/15/appregnew.aspx - 单击“生成”按钮生成客户端 ID。
- 单击“生成”以获取客户端密钥。
- 在“标题”中输入应用的名称
- 在应用域中 - 对于本地 SharePoint 网站,请输入应用域名称。对于 SharePoint Online,请输入我们刚刚使用 Azure 门户创建的网站的名称。
- 单击“创建”
g. 复制创建的客户端 ID 和客户端密钥。我们需要在 app.config 文件中更新这些详细信息
h. 使用 /_layouts/15/AppInv.aspx 提供应用权限。遵循以下步骤为应用提供访问 SharePoint 站点的权限。
- 导航到 URL。https://
/sites/DevSite1/_layouts/15/appregnew.aspx - 将应用注册页面中生成的“客户端 ID”粘贴进去,然后单击“查找”。这将填充其他文本框中的应用详细信息。
- 在“应用的权限请求 XML”文本框中输入以下 XML。这将为应用添加权限。
<AppPermissionRequests AllowAppOnlyPolicy="true"> <AppPermissionRequest Scope="http://sharepoint/content/tenant" Right="Manage" /> </AppPermissionRequests>
i. 信任应用以获得必要的权限
j. 更新控制台应用程序的App.Config,并复制应用注册步骤中生成的“客户端 ID”和“客户端密钥”。控制台应用程序将使用客户端 ID 和密钥进行身份验证并获取 SharePoint 的访问/连接。
<configuration> <configSections> <section name="Sites" type="System.Configuration.NameValueSectionHandler"/> </configSections> <Sites> <add key="site2" value="https://XXX.sharepoint.com/sites/DevSite1/"/> </Sites> <appSettings> <add key="ClientId" value="64d869cf-05b1-44a2-9557-ab8f0a756218"/> <add key="ClientSecret" value="zZUV7HuLS07Hb9z1T2NV+QWFxMwHLxcx5ov4A525p5A="/> </appSettings> <startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /> </startup> </configuration>
步骤 - 6:安排计时器作业。
您可以使用 Windows 任务为本地安排计时器作业,或者为云使用 Azure WebJobs 来安排作业。您可以直接从 Visual Studio 发布,也可以创建 webjob 并将 zip 文件上传到 Azure 门户。
创建 WebJob 并将 Zip 文件上传到 Azure 门户 - 要发布到 Windows Azure WebJobs,请构建项目。转到bin -> Debug。
a. 创建控制台应用程序的生成输出的 Zip 文件
b. 转到 Azure 管理门户 à 网站 à 单击要用于安排作业的网站c. 单击WebJobs-> 然后单击“添加”以创建新的 web job
d. 输入 WebJob 的名称并上传 zip 文件
e. 您可以将其安排为
- “连续运行” - 完成后将重新开始运行。
- 或者使用“按计划运行”创建计划 - 按计划运行。
- 或者使用“按需运行” - 随时运行
f. 这将创建一个新作业,您可以检查通知,如下图所示。要运行作业,请单击“立即运行”
g. 成功执行后将显示消息
步骤 - 7:您可以直接从 Visual Studio 发布作业
要从 Visual Studio 发布,请右键单击项目并选择“发布为 Azure 网站”
a. 这将启动“添加 Azure Webjob”对话框。输入作业名称和计划详细信息
b. 单击“确定”后,它将添加 Nuget 包,然后启动“发布 Web”对话框。您可以选择“发布目标”。单击“Microsoft Azure 网站”以发布到 Windows Azure。
c. 这将启动“选择现有网站”对话框。您可以选择 Azure 中的现有网站或创建一个新网站。要选择现有网站,请从下拉列表中选择网站名称。
d. 要创建新网站,请单击“新建”按钮。
e. 输入网站名称并选择区域
f. 单击“创建”按钮,这将在 Azure 中创建一个新网站。
g. 单击“发布”按钮发布网站。
Visual Studio 将显示“网站发布成功”消息。
检查 Azure 门户中发布的作业。
h. 作业运行成功,并在 SharePoint 站点中创建列表(如果它不存在)并在每次作业运行时添加一项。以下是作业创建的列表以及作业在 SharePoint 站点中添加的项目。