SharePoint 2013 开发——开发并部署第一个APP

本篇我们开始对开发APP应用程序进行了解。

本篇基于本地SharePoint环境(如果是Office 365的话会方便许多),需要配置一下APP的环境,具体参照霖雨大神的Blog

开发APP的第一步,创建一个开发者网站集,操作方法跟我们创建其他的网站集几乎一样,选择好开发者网站的模版即可,我将在我的81端口下的Web应用程序下创建。

在管理中心选择应用程序管理->创建网站集,选择81端口下的Web应用程序,模版选择开发人员网站,点击创建。

SharePoint 2013 开发——开发并部署第一个APP

SharePoint 2013 开发——开发并部署第一个APP

接下来我们开始创建我们第一个APP,是的,Hello World,它没有什么实际的功能所以没有Bug,只是让我们对整个过程有个大致地了解和掌握

打开Visual Studio 2015 RC(新装的系统,所以VS也安装了最新的版本,感受感受),新建项目,选择Office/SharePoint分类下的应用程序,选择SharePoint应用程序进行创建。

SharePoint 2013 开发——开发并部署第一个APP

点击确定按钮之后,在弹出的调试网站位置填写我们刚创建的开发人员网站的URL,选择SharePoint托管,点击下一步会提示输入凭据进行身份验证,输入完后点击确定,接下来选择应用版本,是2013还是O365,我们这里选择SharePoint 2013,点击完成。

SharePoint 2013 开发——开发并部署第一个APP

SharePoint 2013 开发——开发并部署第一个APP

项目创建好之后结构如下图所示。

SharePoint 2013 开发——开发并部署第一个APP

我们可以看到创建出来的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。

SharePoint 2013 开发——开发并部署第一个APP

回到之前,我们完成的Hello World应用程序,按下F5进行部署,会收到如下的错误:

SharePoint 2013 开发——开发并部署第一个APP

因为我们使用的是场用户(系统账户),SharePoint不允许使用系统账户进行APP的安装和卸载操作。在域控中新建一个用户,将该用户添加到开发机的本地管理员组,并添加到场管理员组。

这个问题困扰了我一整天,Google到的解决方案都是以域内服务器为基础的,但是我的SharePoint在VM中,而Visual Studio在本机域外,这里有一篇很详细的排错过程,如果域内服务器开发遇到了问题可以进行参照

很遗憾域外部署如何处理我还没有找到办法,后来仔细回味一下也许是行不通的吧,按照上面的排错过程在SharePoint域内服务器开发是可以部署的,F5启动浏览器之后,页面无法显示,或者显示404 Not Found,这个或许由于SharePoint APP开发环境没有配置正确,我在第一次配置的时候不小心将CNAME指向了AD服务器而不是SP的服务器。仔细检查一下配置,修正后再次按F5就可以看到我们开发的APP的页面了,同样只在域内服务器可以访问,我在本机域外访问就提示该页无法显示。

注:本篇只是从技术角度阐述实现APP的一种方式,并不完全适用于实际应用,如应用程序目录等内容本篇并没有提及。

SharePoint 2013 开发——开发并部署第一个APP

鉴于本地服务器的做起来略麻烦,下一篇可能会考虑基于O365啦:)


上一篇:PHP工程师面临的成长瓶颈


下一篇:SharePoint 2013 开发——开发并部署Provider-hosted APP