前言

作为全球最大的开放源代码托管平台,Github在上周迎来了它的十岁生日。自从2008年正式上线以来,Github上面汇聚了数以千万计的开发人员和各种项目,它几乎成为了开源的代名词和风向标,各大软件巨头都纷纷支持,在广大程序员心目中,也更是精神图腾一般的存在,坊间戏言它是最大的同性交友平台。

我自己对开源了解不多,并且能力也有限,一直没有在这方面有所贡献,但我肯定和大家一样都是Github的受益者。今天这篇文章一方面是希望借此为Github庆生(本来是上周想写,但一直没有时间),另外也是因为最近有开源社区的朋友邀请我有机会谈一谈这些年Office 开发(尤其指Office 365开发)中对开源的支持,因为工作的关系,我多多少少知道一点,就斗胆写出来,也算是向“开源”精神致敬吧,请大家参考。

本文以及这个系列文章都是托管在Github上面,用markdown这种自由奔放的轻量级标记语言写成,使用的工具Visual Studio Code也是开源的,欢迎到https://github.com/chenxizhang/office365devlabs 上面来提issue,欢迎给我star给我鼓励,欢迎fork这个repo并且通过pull request提交你的见解。

微软的开源行动

微软这几年内部进行了深刻的转型,为外界所熟知的除了有业务方向的变化、组织的调整、股价的飞涨之外,时不时会有一些让业界“看不懂”的新动作,过去的不多说,今天最新的一个劲爆新闻是微软也要推出自己定制版本的Linux,不仅让人感慨这世界到底怎么了。

但要论起微软在开源方面的努力,其实在多年前就开始了。2006年前后,微软发布了Codeplex网站,当时也是规模不小的开源代码托管平台,微软自己有很多著名的项目,都是在这个平台上面开放源代码,包括ASP.NET等,后来的故事大家也差不多知道,随着Github的崛起并且成为事实上的标准,微软将几乎所有项目迁移到了Github,并且于2017年12月份正式封存了Codeplex(目前继续提供只读查询,和下载服务)

2014年4月,微软宣布成立.NET基金会,同时宣布释出.NET编译器平台Roslyn,作为开放源代码软件。11月释出在服务器上运行的.NET Core源代码,交由.NET基金会管理,鼓励自由软件社群参与将.NET软件平台移植到Linux与Mac OS上。基金会由开源社区的大神Miguel领衔,管理着55个正式的项目,不少业界的知名公司也是基金会的重要成员,包括Google,三星等。


值得一提的是,.NET基金会的源代码也是托管在Github上面的,地址是 https://github.com/dotnet

回到Github上面来,据不完全统计,目前微软员工参与Github的人数是全世界最多的,所有项目获得Star总数组织排名全世界第三。下面我有一个不完全的统计,开源看出近四年来,微软在Github上面的贡献稳步攀升的表现,目前的Repository数量至少有 2054 个。

目前在Github上面,微软最受欢迎的40个项目如下


Office 365开发拥抱开源

那么,我们来看看Office 365的开发,到底跟开源有什么关系呢?在Github上面,微软除了有一个最大的组织(https://github.com/microsoft)外, 还有两个跟Office 365开发直接相关的组织,他们分别是

  1. SharePoint 开发 :https://github.com/sharepoint
  2. Office 365 开发 :https://github.com/officedev

SharePoint开发十大最受欢迎项目如下所示

Office 365开发中star数量超过100个16个项目如下

以上是微软产品组不断贡献出来的一些项目。接下来,我还要谈一下在Office 365开发的不同层面,我们是如何支持开源平台的。目前来说,我们一般将Office 365的开发分为如下几个领域

  1. 使用Microsoft Graph将你的业务应用与Office 365无缝整合。
  2. 通过Office Add-in的技术扩展你熟悉的Office应用程序。
  3. 通过SharePoint Add-in的技术打造基于SharePoint的业务应用。
  4. 基于Microsoft Teams开发智能机器人或者业务选项卡、连接器应用。

Microsoft Graph对于开源平台的支持

使用 Microsoft Graph API 轻松连接到可加快工作效率的数据 – 邮件、日历、联系人、文档、目录、设备以及在这些数据中发现有价值的信息 —— 不夸张地说,如果说员工和知识是企业的两大无形资产的话,那么Microsoft Graph就是一个宝藏,它不仅代表着现在,也意味着未来极大的可能。

为了让Microsoft Graph能够极大地方便开发者调用,从一开始的设计理念,就是要支持所有的开发平台,不管是开源的,还是不开源的。这一点是由Microsoft Graph的工作机制来保证的 —— 它就是一套标准的REST API。

这些API都是返回Json数据格式,而且完全基于OData的规范设计,支持标准的查询参数。

除了REST API ,微软也有针对主流的平台提供了SDK,可以加快开发的速度。


使用Visual Studio Code快速开发Office Add-in

我此前有过一篇文章专门介绍这个主题,这里简单地整理几个要点。

要开发Office Add-in,你现在有多个选择

  1. 如果你是Visual Studio的资深用户,你的经验可以很好地复用,Visual Studio 2017提供了开箱即用的Office Add-in模板,几次点击就可以创建一个项目,并且可以一键进行调试。
  2. 与此同时,你可以使用Visual Studio Code这个开源的编辑器,结合 NodeJS、 Typescript、React、JQuery 等开源平台和框架来构建你的Office Add-in,在设计你的UI时,你还开源直接使用微软开源的Office Fabric UI呢。

下面我演示一个基本的步骤

  1. 安装环境(NodeJS,Visual Studio Code)

  2. 安装Office Add-in项目生成器 npm install -g yo generator-office

  3. 创建项目 yo office

  4. 在Visual Studio Code中编辑和调试项目

Visual Studio Code的话题也许三天都讲不完,通过上述的介绍,大家可以看到现在开发Office Add-in是一种全新的体验,你可以使用你最熟悉的编辑器,搭配你最喜欢的框架来工作。

全新的SharePoint Framework,全新的组件式开发体验

与Office Add-in一样,我此前也已经有专门的文章介绍和演示了SharePoint Framework的开发体验,这里也仅仅是将与开源相关的内容重点整理给大家参考。

  1. 安装环境(NodeJS,Visual Studio Code)

  2. 安装模块 npm install -g yo gulp

  3. 安装SharePoint Framework 项目模板 npm install -g @microsoft/generator-sharepoint

  4. 创建项目 yo @microsoft/sharepoint 推荐使用React

  5. 运行和调试项目 gulp serve

  6. 在Visual Studio Code中编辑项目(图略)

  7. 部署项目 gulp bundlegulp package-solution

Microsoft Teams的扩展开发体验

Microsoft Teams是Office 365中一个重要的创新,它可以将团队协作提升到一个新的层次。从另一方面,开发人员也可以在这个平台上面拥有全所未有的能力,例如

  1. 为Teams定制智能会话机器人 (Bot),以全新的交互方式为用户提供服务
  2. 将业务应用,以选项卡(Tab)的方式集成到Teams的频道中来
  3. 定制消息扩展(Message Extension)及连接器(Connector,Webhook),与外部系统进行松耦合式的对接

听起来有点复杂,但其实做起来真的不难,请参考下面的步骤

  1. 安装环境(NodeJS,Visual Studio Code)

  2. 安装Teams项目模板 npm install yo generator-teams -g

  3. 创建Teams项目 yo teams

  4. 在Visual Studio Code中编辑项目

你可以通过上面的步骤快速创建一个Microsoft Teams应用,但是要做出来一个真正可用的App,你毫无疑问还需要更多的时间,请参考官方的文档 https://docs.microsoft.com/zh-cn/microsoftteams/platform/

结语

本文带领大家回顾了一下开源及社区的发展、微软在开源方面的努力,以及具体在Office 365开发的四个领域如何张开双手拥抱开源。一千个人的心目中有一千个哈姆雷特,但开源的精神应该只有一个,它不仅仅是开放源代码,它是一种开放的心态;同时开源需要更多的人参与、去贡献,只有这样,我们的“源”头活水才会生机勃发,越来越"开"阔。笔者今年的小目标是除了维护之前的一个小的开源项目外,争取参与到微软官方的几个大的Office 365开源项目中去做一点贡献,也希望看到更多的开发人员参与进来。

拥抱开源,Office 365开发迎来新时代的更多相关文章

  1. Office 365开发概述及生态环境介绍(一)

    原文于2017年3月13日首发于LinkedIn,请参考这个链接 离上一篇文章,很快又过去了两星期的时间.今天抓紧晚上的时间,开始了Office 365开发系列文章的第一篇,我会帮助大家回顾一下过去O ...

  2. Office 365开发概述及生态环境介绍(二)

    本文于2017年3月19日首发于LinkedIn,原文链接在这里 在上一篇 文章,我给大家回顾了Office发展过来的一些主要的版本(XP,2003,2007,2013等),以及在Office客户端中 ...

  3. Python在Office 365 开发中的应用

    我在昨天发布的文章 -- 简明 Python 教程:人生苦短,快用Python -- 中提到了Python已经在Office 365开发中全面受支持,有不同朋友留言或私信说想了解更加详细的说明,所以特 ...

  4. [ Office 365 开发系列 ] 开发模式分析

    前言 本文完全原创,转载请说明出处,希望对大家有用. 在正式开发Office 365应用前,我们先了解一下Office 365的开发模式,根据不同的应用场景,我们选择最适合的开发模式. 阅读目录 Of ...

  5. Office 365 开发概览系列文章和教程

    Office 365 开发概览系列文章和教程 原文于2017年2月26日首发于LinkedIn,请参考链接 引子 之前我在Office 365技术社群(O萌)中跟大家提到,3月初适逢Visual St ...

  6. Office 365开发环境概览

    本文于2017年3月26日首发于LinkedIn,原文链接请参考这里 本系列文章已经按照既定计划在每周更新,此前的几篇文章如下 Office 365 开发概览系列文章和教程 Office 365开发概 ...

  7. 《Office 365 开发入门指南》公开邀请试读,欢迎反馈

    终于等来了这一天,可以为我的这本新书画上一个句号.我记得是在今年的2月份从西雅图回来之后,就萌发了要为中国的Office 365开发人员写一些东西并最终能帮到更多中国用户的想法,而从2月26日正式写下 ...

  8. 《Office 365开发入门指南教程》正式上线,限时优惠和邀请分享推广

    我很高兴地通知大家,<Office 365 开发入门指南教程>已经正式在网易云课堂上线,你可以通过直接访问  https://aka.ms/office365devlesson 这个短地址 ...

  9. 所有人都可以是开发人员——《Office 365开发入门指南》视频教程即将上市

      今天是春节假期的最后一天,在这里给全国的朋友们拜个晚年,祝大家身体健康,晚年幸福啊.这个春节大家过的怎么样啊,我自己是在老家过的年,家乡的年味还是比较浓的,也再次感谢朋友圈的大家给我看了各地的风光 ...

随机推荐

  1. 【Python】 Selenium 模拟浏览器 寻路

    selenium 最开始我碰到SE,是上学期期末,我们那个商务小组做田野调查时发的问卷的事情.当时在问卷星上发了个问卷,但是当时我对另外几个组员的做法颇有微词,又恰好开始学一些软件知识了,就想恶作剧( ...

  2. Algorithm --> 棋盘中求出A到B的最小步数

    求出A到B的最小步数 给定象棋盘,以及位置A和B, 求出从A到B的最小步数 代码: #include <cstdio> #include <iostream> #include ...

  3. WEB烟花效果——Canvas实现

    摘要        本文主要介绍一种WEB形式的烟花(fireworks)效果(图1所示),该效果基于Canvas实现,巧妙地运用了canvas绘图的特性,并加入了物理力作用的模拟,使整体效果非常绚丽 ...

  4. C#中的String类

    一.String类的方法 1. Trim():清除字符串两端的空格 2. ToLower():将字符串转换为小写 3. Equals():比较两个字符串的值,bool 4. IndexOf(value ...

  5. JavaWeb学习笔记二 Http协议和Tomcat服务器

    Http协议 HTTP,超文本传输协议(HyperText Transfer Protocol),是互联网上应用最为广泛的一种网络协议.所有的WWW文件都必须遵守这个标准.设计HTTP最初的目的是为 ...

  6. C语言的第一次作业总结

    PTA实验作业 题目一:温度转换 本题要求编写程序,计算华氏温度150°F对应的摄氏温度.计算公式:C=5×(F−32)/9,式中:C表示摄氏温度,F表示华氏温度,输出数据要求为整型. 1.实验代码: ...

  7. C语言第二次博客作业

    一.PTA实验作业 题目1:计算分段函数[2] 本题目要求计算下列分段函数f(x)的值: 1.实验代码 int main (void) { double x,y; scanf("%lf&qu ...

  8. 《结对-HTML贪吃蛇游戏项目-测试过程》

    项目托管平台地址:https://gitee.com/zhaojianhuiAA/TanChiShe/blob/master/snake.html 项目成员:赵建辉.马壮. 测试: 1.界面:用jav ...

  9. 学号:201621123032 《Java程序设计》第2周学习总结

    1: 本周学习总结 本周学习java的数据类型,两种数据类型:基本数据类型和引用数据类型. 学习关于String和StringBuilder之间不同. 本周还学习数组.一维数组,多维数组,和动态数组. ...

  10. Dijkstra算法课后补分博客

    题目名称:Dijkstra算法 题目要求:课上给出相关附图,求解附图顶点A的单源最短路径. 附图: 做题过程 1.了解Dijkstra算法的相关知识,包括定义以及使用方法. 定义:Dijkstra算法 ...