博客地址:http://blog.csdn.net/FoxDave

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

Office 365知识库彩蛋

本篇基于本地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啦:)



SharePoint 2013 开发——开发并部署第一个APP相关推荐

  1. SharePoint 2013 本地开发解决方案以及程调试

    SharePoint 2013 本地开发解决方案以及程调试 在SharePoint开发中,我们需要在部署有SharePoint环境的服务器中开发,这是一件让人很苦恼的事情,毕竟不能一个项目多人开发配备 ...

  2. SharePoint 2013 图文开发系列之自定义字段

    原文:SharePoint 2013 图文开发系列之自定义字段 SharePoint使用的优势,就在于开箱即用.快速搭建,SharePoint自身为我们提供了很多字段类型,已经很丰富了.但是,在实际应 ...

  3. SharePoint 2013 图文开发系列之代码定义列表

    在SharePoint的开发中,用Visual Studio自定义列表是经常会用到的,因为很多时候,我们并不会手动创建列表,而手动创建列表在测试服务器和正式机之间同步字段,也很麻烦,所以我们经常用代码 ...

  4. SharePoint 2013 图文开发系列之WebPart

    这是我们介绍SharePoint开发入门的第一篇,在这一篇里,我们会介绍SharePoint开发的几个关键物理路径,一些开发技巧和最基础的WebPart开发. 开发工具 在SharePoint 201 ...

  5. SharePoint 2013常用开发工具分享

    众所周知,一款好的开发工具不仅能提高项目开发效率,而且能够协助开发人员简化开发流程.本文汇总几款SharePoint 2013开发常用开发工具,希望能够对大家有所帮助.如果您有更好的工具,没有包含在本 ...

  6. SharePoint 2013 配置开发环境,需安装VS2012插件

    SharePoint 2013已经安装好了,接下来就是配置开发环境,安装VS2012,但是,装好了以后,发现没有SharePoint 2013开发的支持,如下图: 然后,去网上查找资料,VS2012对 ...

  7. SharePoint 2013 图文开发系列之创建内容类型

    SharePoint内容类型,是很有特色的,就好比发布新闻,同在一张列表里,可以由内容类型区分图片新闻.文字新闻等,顾名思义,就是在一张列表里发布不同类型的项目. 1.添加新项目,选择SharePoi ...

  8. IOS开发入门之二——第一个App

    如果你对怎么开始IOS开发都不懂的话,请看点下面的链接,先学习关于IOS开发环境的配置以及Swift语言入门: IOS开发入门之一--Swift语言基础     本章将教大家创建一个标准的苹果手机应用 ...

  9. 一个APP诞生的自述日记,APP开发流程

    开发App的过程显得有点专业,不过本文不涉及编码,仅是简单描述一下App从无到有的一个过程.希望能让不懂开发的人也能够知道一个App是如何诞生的,这其中会经历哪些过程. 01 需求分析 软件开发最重要 ...

最新文章

  1. UITextField的详细使用
  2. 学 Python 必看书单汇总
  3. ps grep java_ps -ef | grep java 查看所有关于java的进程
  4. kubernetes不同的命名空间下的容器能通信吗_超长干货 | Kubernetes命名空间详解
  5. rdbms mysql_RDBMS-mysql初步
  6. php读取js验证码,js实现获取短信验证码实例
  7. PHP使用session_set_save_handler陷阱
  8. 研究相机和IMU坐标系变换
  9. fcc认证_介绍fCC 100:我们对2019年杰出贡献者的年度总结
  10. debian+apache+acme_tiny+lets-encrypt配置笔记
  11. RoaringBitmap 原理
  12. 信号检测与估计理论pdf
  13. Web组态—低代码物联网组态平台
  14. 前端开发实习面试题(Vue篇)
  15. iWebShop核心团队启动shukai新域名,进入全案SEO网络营销领域发力SEO众包外包服务
  16. C语言:将3*4矩阵中找出行最大,列最小的那个元素。-将低于平均值的人数作为函数返回值,将低于平均分的分数放入below数组中。...
  17. 国内手游渠道SDK快速接入之Unity篇
  18. 分析微信发送消息接口(基于网页版分析)
  19. 输入年份月份实现日历打印,C到C++过渡。
  20. win10退出安全模式后,没有网络

热门文章

  1. 移动客户端设计开发经验-流程篇
  2. BMS(电池管理系统)第11课—动力电池系统安全
  3. matlab求解rl电路,基于MATLAB的RL并联电路频率响应特性分析
  4. 证监会回应易会满召开记者招待会传闻:纯属谣言
  5. 【已解决】安装Gin出现:go get: module github.com/gin-gonic/gin: Get “https://proxy.golang.org/github.com/
  6. 【雅思备考】听说读写攻略 | 雅思核心词汇之科技类
  7. 计算机一级2019题百度云,2019全国计算机等级考试一级真题操作题.pdf
  8. Pytorch TTA(预测增强) 源码阅读
  9. 直播预告 | 投资上千万,下载才几千!移动应用开发的下一站在哪里?
  10. 斌伯的CSDN Blog开张大吉