SharePoint 2013 开发——开发并部署第一个APP
博客地址: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相关推荐
- SharePoint 2013 本地开发解决方案以及程调试
SharePoint 2013 本地开发解决方案以及程调试 在SharePoint开发中,我们需要在部署有SharePoint环境的服务器中开发,这是一件让人很苦恼的事情,毕竟不能一个项目多人开发配备 ...
- SharePoint 2013 图文开发系列之自定义字段
原文:SharePoint 2013 图文开发系列之自定义字段 SharePoint使用的优势,就在于开箱即用.快速搭建,SharePoint自身为我们提供了很多字段类型,已经很丰富了.但是,在实际应 ...
- SharePoint 2013 图文开发系列之代码定义列表
在SharePoint的开发中,用Visual Studio自定义列表是经常会用到的,因为很多时候,我们并不会手动创建列表,而手动创建列表在测试服务器和正式机之间同步字段,也很麻烦,所以我们经常用代码 ...
- SharePoint 2013 图文开发系列之WebPart
这是我们介绍SharePoint开发入门的第一篇,在这一篇里,我们会介绍SharePoint开发的几个关键物理路径,一些开发技巧和最基础的WebPart开发. 开发工具 在SharePoint 201 ...
- SharePoint 2013常用开发工具分享
众所周知,一款好的开发工具不仅能提高项目开发效率,而且能够协助开发人员简化开发流程.本文汇总几款SharePoint 2013开发常用开发工具,希望能够对大家有所帮助.如果您有更好的工具,没有包含在本 ...
- SharePoint 2013 配置开发环境,需安装VS2012插件
SharePoint 2013已经安装好了,接下来就是配置开发环境,安装VS2012,但是,装好了以后,发现没有SharePoint 2013开发的支持,如下图: 然后,去网上查找资料,VS2012对 ...
- SharePoint 2013 图文开发系列之创建内容类型
SharePoint内容类型,是很有特色的,就好比发布新闻,同在一张列表里,可以由内容类型区分图片新闻.文字新闻等,顾名思义,就是在一张列表里发布不同类型的项目. 1.添加新项目,选择SharePoi ...
- IOS开发入门之二——第一个App
如果你对怎么开始IOS开发都不懂的话,请看点下面的链接,先学习关于IOS开发环境的配置以及Swift语言入门: IOS开发入门之一--Swift语言基础 本章将教大家创建一个标准的苹果手机应用 ...
- 一个APP诞生的自述日记,APP开发流程
开发App的过程显得有点专业,不过本文不涉及编码,仅是简单描述一下App从无到有的一个过程.希望能让不懂开发的人也能够知道一个App是如何诞生的,这其中会经历哪些过程. 01 需求分析 软件开发最重要 ...
最新文章
- UITextField的详细使用
- 学 Python 必看书单汇总
- ps grep java_ps -ef | grep java 查看所有关于java的进程
- kubernetes不同的命名空间下的容器能通信吗_超长干货 | Kubernetes命名空间详解
- rdbms mysql_RDBMS-mysql初步
- php读取js验证码,js实现获取短信验证码实例
- PHP使用session_set_save_handler陷阱
- 研究相机和IMU坐标系变换
- fcc认证_介绍fCC 100:我们对2019年杰出贡献者的年度总结
- debian+apache+acme_tiny+lets-encrypt配置笔记
- RoaringBitmap 原理
- 信号检测与估计理论pdf
- Web组态—低代码物联网组态平台
- 前端开发实习面试题(Vue篇)
- iWebShop核心团队启动shukai新域名,进入全案SEO网络营销领域发力SEO众包外包服务
- C语言:将3*4矩阵中找出行最大,列最小的那个元素。-将低于平均值的人数作为函数返回值,将低于平均分的分数放入below数组中。...
- 国内手游渠道SDK快速接入之Unity篇
- 分析微信发送消息接口(基于网页版分析)
- 输入年份月份实现日历打印,C到C++过渡。
- win10退出安全模式后,没有网络
热门文章
- 移动客户端设计开发经验-流程篇
- BMS(电池管理系统)第11课—动力电池系统安全
- matlab求解rl电路,基于MATLAB的RL并联电路频率响应特性分析
- 证监会回应易会满召开记者招待会传闻:纯属谣言
- 【已解决】安装Gin出现:go get: module github.com/gin-gonic/gin: Get “https://proxy.golang.org/github.com/
- 【雅思备考】听说读写攻略 | 雅思核心词汇之科技类
- 计算机一级2019题百度云,2019全国计算机等级考试一级真题操作题.pdf
- Pytorch TTA(预测增强) 源码阅读
- 直播预告 | 投资上千万,下载才几千!移动应用开发的下一站在哪里?
- 斌伯的CSDN Blog开张大吉