创建 LightSwitch SharePoint 2013 多租户提供程序托管应用程序






4.80/5 (4投票s)
下载代码: CloudBusinessTasks.zip
当您部署了SharePoint 提供程序托管的云业务应用程序后,您可以使用Microsoft Seller Dashboard中的身份验证密钥,允许多个SharePoint网站使用同一个网站应用程序。您可以使用行级筛选来分隔数据,以便每个SharePoint网站只能看到自己的数据。
注意: 要完成本教程,您必须安装带有Visual Studio 2013 Update 2(或更高版本)的Visual Studio 2013。
云业务应用程序的生命周期
SharePoint 云业务应用程序(CBA)是分多个部分部署的。首先,有用于CBA运行的传统 Web 托管提供商(例如 Azure 网站)。接下来,SharePoint 特定部分和元数据(例如,应用程序使用的列表或定义的任何特殊SharePoint类型)会安装在CBA安装的SharePoint站点上(应用程序使用 .app 文件安装)。
当用户在SharePoint中运行CBA应用程序时,会执行以下步骤:
- 用户打开其 Web 浏览器并导航到SharePoint站点。
- 用户通过单击SharePoint站点上的链接来启动CBA应用程序。
- SharePoint会将浏览器重定向到托管 LightSwitch SharePoint 启用的云业务应用程序(CBA)的第三方 Web 服务器。此重定向会发送特殊的 SharePoint OAuth 身份验证。
- CBA应用程序检测到SharePoint身份,并与SharePoint通信以确保用户是其声称的那个人。
- CBA现在可以在与SharePoint通信时模拟用户。
创建示例应用程序
打开Visual Studio,选择文件,然后选择新建项目,并创建一个云业务应用程序。
将其指向您的SharePoint开发人员站点(或单击链接以转到显示我们可以在何处注册 SharePoint 开发人员站点的网站)。
创建解决方案后,在服务器项目中的数据源文件夹上右键单击,然后选择添加表。
创建一个具有以下结构的表:
接下来,将该表设置为更新SharePoint Newsfeed...
单击表头,以便将范围设置为整个表。在表的属性中,在社交下启用已创建和已更新的发布设置。
将摘要属性设置为TaskName。
启用多租户功能
我们将通过以编程方式记录用户来自的网站(在Task表的HostURL属性中)并在设置一个只显示用户来自的网站的数据的筛选器来启用应用程序的多租户功能。
在表仍然选中的情况下,选择编写代码,然后选择Tasks_Inserting。
为该方法使用以下代码
partial void Tasks_Inserting(Task entity) { // Set the HostURL entity.HostURL = this.Application.SharePoint.HostUrl.Host; }
返回到表设计器,选择表,然后选择编写代码,然后选择Tasks_Updating。
为该方法使用以下代码
partial void Tasks_Updating(Task entity) { // Set the HostURL entity.HostURL = this.Application.SharePoint.HostUrl.Host; }
返回到表设计器,选择表,然后选择编写代码,然后选择Tasks_Filter。
为该方法使用以下代码
partial void Tasks_Filter(ref Expression<Func<Task, bool>> filter) { // Only allow users to see records from their own site filter = e => e.HostURL == this.Application.SharePoint.HostUrl.Host; }
注意: 有关筛选工作原理的更多信息,请参阅关于行级筛选的LightSwitch文章。
HostURL字段被设置为必需字段。我们需要为其提供一个默认值(即使该值将在服务器端代码中被覆盖)。
选择HTMLClient选项卡,然后选择编写代码,接着选择created,以创建Task实体的客户端JavaScript代码。
为此created方法使用以下代码:
myapp.Task.created = function (entity) { // Set a default value. // This will be overwritten // in the Inserting/Updating // methods. entity.HostURL = " "; };
创建屏幕
在客户端项目中的Screen文件夹上右键单击,然后选择添加屏幕。
选择通用屏幕集模板。
屏幕将被创建。
格式化屏幕
我们在编辑屏幕上不需要显示HostURL。
通过在解决方案资源管理器中双击AddEditTask屏幕,打开它。
右键单击Host URL控件以选择它,然后删除它。
添加删除按钮
我们可以自定义应用程序以添加Delete按钮。
打开View Task屏幕,然后单击Command Bar以展开它。
单击Add按钮并添加一个Delete按钮。
一个Delete方法将显示在屏幕左侧的视图模型中。
右键单击Delete方法并选择Edit Execute Code。
为该方法使用以下代码
myapp.ViewTask.Delete_execute = function (screen) { // Delete the Task screen.Task.deleteEntity(); // Save changes myapp.commitChanges().then(null, function fail(e) { // There was an error - show it in a box msls.showMessageBox(e.message, { title: "Error", buttons: msls.MessageBoxButtons.ok }).then(function (result) { if (result === msls.MessageBoxResult.ok) { // Discard Changes screen.details.dataWorkspace.ApplicationData .details.discardChanges(); } }); }); };
测试项目
我们现在将调试应用程序。
注意: 虽然我们将被定向到并登录到SharePoint网站,但它会将我们传回本地开发机器,并且我们将直接从开发机器运行应用程序。
选择Debug,然后选择Start Debugging来Debug项目。
系统将提示您登录到您的SharePoint开发人员站点。
您可能还需要登录到您的SharePoint开发人员网站的网页。
您将需要Trust该应用程序。
应用程序将加载。
我们可以通过单击Add按钮来添加Tasks。
我们可以输入任务详细信息,并通过单击Save按钮来保存它们。
单击Task将显示详细信息并允许我们Edit或Delete该Task。
我们可以看到Host URL是按编程方式设置的。
我们还可以导航到Newsfeed...
Task将显示在Newsfeed中,并提供一个选项来关注任何更改或直接导航到它。
发布应用程序
您需要确定计划将网站应用程序发布到的位置。
在 Azure 上创建网站是一个不错的选择。
无论您决定将网站部署到何处,您必须发布到一个具有域名(而非 IP 地址)且具有(SSL)安全证书(https://)的站点。
URL 将用于创建客户端 ID,并且也是Visual Studio发布向导(用于将应用程序实际部署到生产环境)所必需的。
应用程序需要一个数据库,因此请确保创建一个链接资源...
...并指定一个SQL 数据库。
获取客户端 ID
要获取一个允许您的应用程序在多个SharePoint站点中发布的客户端 ID,您需要访问: http://sellerdashboard.microsoft.com 并创建一个帐户。
以下步骤仅创建客户端 ID,它不会将您的应用程序发布到Microsoft Office 365或SharePoint Online商店。客户端 ID是该流程所必需的,但要将应用程序实际发布到商店,还有一个次要流程。
在您的帐户获得批准后(这可能需要几天时间),登录并选择APPS,然后选择client ids,接着选择add a new oauth client id。
填写表格。
- Friendly Client ID Name - 任何您想要的名称
- App Domain - 不包含“https://”部分的域名
- App Redirect URL - 使用以下格式:https://DomainName.com/SharePointLaunch.aspx?{StandardTokens}
您将收到您的Client ID和Client Secret,这些将在发布向导(下一步)中使用。
使用发布向导
在Visual Studio中,打开Configuration Manager。
切换到Release模式。
在Visual Studio中,打开发布向导。
选择Provider-hosted作为SharePoint Options。
选择您的托管选项,然后单击Next。
如果您使用的是Azure Web Site,您将在此时选择它。
Azure Web Site选项将允许您登录并选择已配置的网站。
对于Security Setting,您必须将https设置为required。
因此,您必须将该站点托管在一个具有安全证书的位置,以便https能够正常工作。您不能使用 IP 地址,必须使用域名。
输入应用程序的域名,包括“https://”部分。
对于SharePoint Client ID和Client secret,输入之前保存的值。
在Summary页面上,单击Publish以部署应用程序。
请注意,您将无法登录该网站,除非您通过SharePoint网站使用将在下一步创建的链接来访问它。
还将创建 .app 文件(Visual Studio将在窗口中打开它),我们现在可以将其上传到我们的SharePoint站点。
部署应用程序
为了正确测试您的应用程序,您需要获取另一个SharePoint站点进行测试。
请参阅:创建 SharePoint Online 测试站点,了解有关创建测试站点和使用 .app 文件部署应用程序的说明。
当我们运行应用程序时,每个站点只能看到自己的数据。
当我们直接登录到数据库时,可以看到它存储了每个部署它的SharePoint站点的数据。
在运行时更改数据库连接字符串
您可以运行时更改数据库连接字符串,以允许每个租户拥有自己的数据库。
此方法在设计器上的Write Code下拉列表中不可用。相反,要找到它,请进入ApplicationDataService.lsml.cs文件...
...并开始键入“partial”,intellisense将显示一个自动完成下拉列表。然后您可以选择 _InitializingConnection方法。
传递到此方法中的DatabaseConnectionState对象有一个属性,即ConnectionString,您可以根据需要获取/设置该属性。这允许您根据任何所需的规则在运行时切换数据连接。
此方法仅适用于“数据库”连接(ApplicationData 或另一个附加的数据库数据源)。
对于OData服务和SharePoint数据源,部分方法是:
partial void DeveloperData_SendingRequest(ODataSendingState state) partial void DeveloperData_ReceivedResponse(ODataReceivedState state)
这些方法允许您拦截/检查发送到后端OData服务的传出请求,并检查来自后端服务的传入响应。
特别感谢
特别感谢 Matt Evans,Eric Erhardt,Josh Booker,以及 Dave Kidder 在创建本文中的帮助。
链接 - Microsoft (LightSwitch)
LightSwitch 的 SharePoint 托管和身份验证选项(Brian Moore)
将 LightSwitch 应用发布到 SharePoint 目录(Brian Moore)
关于云业务应用程序的 Newsfeeds(Nicole Haugen)
链接 - Microsoft (Seller Dashboard)
在 Microsoft Seller Dashboard 中创建您的帐户和添加付款信息
如何:在 Microsoft Seller Dashboard 中创建客户端 ID 和密钥
在 Microsoft Seller Dashboard 中创建客户端 ID 和密钥
Microsoft Seller Dashboard FAQ
链接 - LightSwitch 帮助网站
将 LightSwitch 应用程序部署到 Office 365 / SharePoint Online