本篇我们开始对开发APP应用程序进行了解。
本篇基于本地SharePoint环境(如果是Office 365的话会方便许多),需要配置一下APP的环境,具体参照霖雨大神的Blog。
开发APP的第一步,创建一个开发者网站集,操作方法跟我们创建其他的网站集几乎一样,选择好开发者网站的模版即可,我将在我的81端口下的Web应用程序下创建。
在管理中心选择应用程序管理->创建网站集,选择81端口下的Web应用程序,模版选择开发人员网站,点击创建。
接下来我们开始创建我们第一个APP,是的,Hello World,它没有什么实际的功能所以没有Bug,只是让我们对整个过程有个大致地了解和掌握。
打开Visual Studio 2015 RC(新装的系统,所以VS也安装了最新的版本,感受感受),新建项目,选择Office/SharePoint分类下的应用程序,选择SharePoint应用程序进行创建。
点击确定按钮之后,在弹出的调试网站位置填写我们刚创建的开发人员网站的URL,选择SharePoint托管,点击下一步会提示输入凭据进行身份验证,输入完后点击确定,接下来选择应用版本,是2013还是O365,我们这里选择SharePoint 2013,点击完成。
项目创建好之后结构如下图所示。
我们可以看到创建出来的APP的ASPX页面并没有后台页面文件,因为APP是不支持服务端代码的。
我们定位到主内容部分(PlaceHolderMain),它下面有一个DIV,上面注释了“运行该应用程序时会将以下内容替换为用户名 - 请参阅 App.js”,在Scripts文件夹中可以看到APP.js这个文件:
'use strict'; ExecuteOrDelayUntilScriptLoaded(initializePage, "sp.js"); function initializePage() { var context = SP.ClientContext.get_current(); var user = context.get_web().get_currentUser(); // 此代码在 DOM 准备就绪时运行,并且可以创建使用 SharePoint 对象模型所需的上下文对象 $(document).ready(function () { getUserName(); }); // 此函数准备、加载然后执行 SharePoint 查询以获取当前用户信息 function getUserName() { context.load(user); context.executeQueryAsync(onGetUserNameSuccess, onGetUserNameFail); } // 如果上述调用成功,则执行此函数 // 此函数将“message”元素的内容替换为用户名 function onGetUserNameSuccess() { $('#message').text('Hello ' + user.get_title()); } // 将在上述调用失败时执行此函数 function onGetUserNameFail(sender, args) { alert('Failed to get user name. Error:' + args.get_message()); } }
它做了一个简单的用户名的查询,并显示到页面的P标签上。
本篇中我们只想显示我们的Hello,不对对象模型做过多介绍。在div节点的下面添加一个P标签,文字内容填写“This is our first SharePoint app!”。完成之后Main中的代码如下所示:
<div> <p id="message"> <!-- 运行该应用程序时会将以下内容替换为用户名 - 请参阅 App.js --> initializing... </p> </div> <p>This is our first sharepoint APP!</p>
在运行我们第一个APP之前,我们先来了解一下SharePoint应用程序项目模版的结构:
Features文件夹
跟以往的版本一样,内有清单文件和Feature定义文件,用来定义SharePoint的Feature。
Package文件夹
全新的SharePoint 2013应用程序包设计器,跟Feature设计器很相似,包含一个manifest清单文件定义SharePoint应用程序的细节,实际上跟以往的版本也并无太大差异。
Content文件夹
包含默认的APP.css样式文件和一个清单定义文件。新的样式文件等内容可以添加到此处。
Images文件夹
顾名思义,用来存放图片。
Pages和Scripts文件夹
同样,看名即懂,用来存放页面和脚本文件。
最后两个是AppManifest.xml和packages.config文件。其中,双击AppManifest.xml文件会打开一个设计器,用来配置APP。
回到之前,我们完成的Hello World应用程序,按下F5进行部署,会收到如下的错误:
因为我们使用的是场用户(系统账户),SharePoint不允许使用系统账户进行APP的安装和卸载操作。在域控中新建一个用户,将该用户添加到开发机的本地管理员组,并添加到场管理员组。
这个问题困扰了我一整天,Google到的解决方案都是以域内服务器为基础的,但是我的SharePoint在VM中,而Visual Studio在本机域外,这里有一篇很详细的排错过程,如果域内服务器开发遇到了问题可以进行参照。
很遗憾域外部署如何处理我还没有找到办法,后来仔细回味一下也许是行不通的吧,按照上面的排错过程在SharePoint域内服务器开发是可以部署的,F5启动浏览器之后,页面无法显示,或者显示404 Not Found,这个或许由于SharePoint APP开发环境没有配置正确,我在第一次配置的时候不小心将CNAME指向了AD服务器而不是SP的服务器。仔细检查一下配置,修正后再次按F5就可以看到我们开发的APP的页面了,同样只在域内服务器可以访问,我在本机域外访问就提示该页无法显示。
注:本篇只是从技术角度阐述实现APP的一种方式,并不完全适用于实际应用,如应用程序目录等内容本篇并没有提及。
鉴于本地服务器的做起来略麻烦,下一篇可能会考虑基于O365啦:)