为PowerApps和Flow,Power BI开发自定义连接器
作者:陈希章 发表于 2017年12月20日
前言
我在之前用了几篇文章来介绍新一代微软商业应用平台三剑客(PowerApps,Microsoft Flow,Power BI),相信对于大家会有一种跃跃欲试的冲动,他们看起来真的不难,因为他们的定位是要给业务部门的用户直接使用的。那么现在问题就来了
- 他们为什么能这么灵活和强大?
- 如果这些活儿都是业务部门用户自己去做了,那么IT部门人员,开发人员该干嘛呢?
好问题啊!但是这两个问题其实是相关的,而且第二个问题的答案就是第一个问题所描述的结果。因为可以将IT专业人员(IT Pro)和开发人员(Developer)从日常的轻量级业务应用的工作中解放出来,所以,他们可以去做一些更加擅长的技术、通用性的业务支撑组件的开发。
我们再来看一张已经多次展示过的图片
在应用的基础架构这部分,Common Data Service我此前已经介绍过了,Gateways也已经在 PowerApps进阶篇中讲解过。Pro dev extensibility 在目前这个系列中我不准备展开。那么就余下了Connectors(连接器了)。当然,实际上我们早就使用过了连接器,例如在Microsoft Flow中内置了将近200个连接器,如下
但是,如果我们需要的某个功能,上面的连接器并没有提供,而你有正好有一定的开发能力,那么本文将很适合你。我们将以一个实例介绍如何自定义连接器。从某种意义上说,PowerApps和Flow是共用连接器的,而Power BI的连接器则更特殊一点。本文的内容将包括
- 编写一个Web API服务(适合于PowerApps和Flow)
- 在Flow中创建自定义连接器
- 在Flow中使用自定义连接器
- 在PowerApps中使用自定义连接器
- Power BI自定义连接器的开发思路
编写一个Web API服务
可以这么说,绝大部分的连接器,都是一个Web API服务。我们将一些业务逻辑封装在服务器端(或者准确地说是云端),然后有选择性地暴露出来一些接口,供PowerApps和Flow在需要的时候调用。所以,在开始自定义连接器之前,你需要做的就是编写一个Web API服务。你可以用任何熟悉的语言和平台完成这个工作,但我已经完成了一个使用C#编写的,基于dotnet core框架的Web API服务的例子,因为本文的重点不是将具体如何创建Web API服务以及部署,所以我用另外一篇文章专门讲解了这个过程,请参考
使用 dotnet core 和 Azure PaaS服务进行devOps开发 (Web API 实例)
该项目的代码,可以通过 https://github.com/chenxizhang/dotnetcoreapisample 下载到。
但是,在PowerApps或Flow中定义自定义连接器的时候,如果有一个服务描述文档,则会大大简化操作。所以,我们需要在上面这个成果的基础上添加一个功能,让它能自动生成一个服务描述文档。微软官方的建议是用swagger的规范。关于swagger,如果有兴趣,可以参考他们的官网:https://swagger.io/specification/
在上述项目中添加swagger的支持,请参考下面的步骤
- 使用该命令导入一个包
dotnet add package Swashbuckle.AspNetCore
,然后进行还原dotnet restore
- 在Startup.cs文件中,添加两个命名空间的引用
using Swashbuckle.AspNetCore
和using Swashbuckle.AspNetCore.Swagger
- 在ConfigureServices方法的底部增加如下代码
services.AddSwaggerGen(_=>{
_.SwaggerDoc("v1",new Info(){
Version ="1.0",
Title ="dotnet core api sample",
Contact = new Contact(){Name="Ares Chen",Email ="ares@xizhang.com"},
Description ="dotnet core api sample using swagger"
});
});
- 在Configure方法的底部增加如下代码
app.UseSwagger();
app.UseSwaggerUI(_=>_.SwaggerEndpoint("/swagger/v1/swagger.json","v1"));
完成上面的工作后,请按照使用 dotnet core 和 Azure PaaS服务进行devOps开发 (Web API 实例) 提到的步骤那样,将代码提交到Azure的Git存储库,然后在浏览器中访问 https://dotnetcoreapisample.azurewebsites.net/swagger/v1/swagger.json ,正常情况下你会看到如下的结果输出。
你的实际部署地址可能跟我不一样,因为Azure不允许同名地址。如果你不想自己去部署,你可以直接用我的这个地址查看输出结果,并且将其用在后续的自定义连接器中。
这是一个JSON的文档。如果你用格式化工具来查看,它可能是这样的:
查看它并不是重点,你现在需要做的是将点击右键,然后另存到本地(swagger.json),一会儿我们就会用到这个文件来自定义连接器。
在Flow中创建自定义连接器
准备好了上面这个Web API服务的话,接下来就可以在Flow中来自定义连接器了。
在接下来的界面中选择导入现有OpenAPI文件来定义连接器
接下来定义标题,并且找到此前保存在本地的swagger.json文件
点击“继续”,设置一些基本信息
点击“继续”,在安全设置这里暂时先选择 “无身份验证”
请注意,真正使用的连接器,是需要做身份验证的。建议在这个基础上,大家做一些针对性的实践。
点击“继续”,此时Flow会读取swagger文件中的定义信息,列出所有的操作
你会发现我们有五个操作,对应了创建订单,修改订单,查询订单(列表以及单个订单的详情),删除订单。目前来说在这些操作上面有一个感叹号的提示,因为有部分信息还需要你做定义:摘要和说明。请补充完整即可。
如果你确认没有问题了,请点击“创建连接器”来完成操作。
然后点击加号,可以基于这个连接器(connector)创建一个用于当前环境的连接(connection)。
在Flow中使用自定义连接器
接下来我们“从空白创建”来体验上面这个自定义连接器的使用。为了便于测试,我选择用“手工触发流”。如果你对这个方面不熟悉,请参考 这篇文章。
在添加操作的时候,搜索Orderservice,你能看到有五个操作,下面我们添加CreateOrder,输入一些基本信息
当然为了让测试更加直观,我继续添加了一个获取订单列表的操作,然后将获取到的结果发送到一个服务器地址。
点击“创建流”,然后点击“立即运行”按钮
点击“继续”
点击“运行流”,很快你就能看到下面的结果
而且在我的服务器也很快收到了数据
在PowerApps中使用自定义连接器
同样的事情,在PowerApps上面也是类似的。所以,你在PowerApps中也立即可以看到之前定义好的这个OrderService的连接。
在创建应用的时候,可以很自然地选择到这个数据连接
建立连接后,在数据控件上面可以通过下面的方式调用方法。例如下面这个操作,是读取订单列表。
如果要创建一个订单,可以参考下面的做法。
Power BI自定义连接器的开发思路
看完上面的介绍,大家对于创建Web API服务,并且将其用于PowerApps和Flow的过程有了感性的认识。我们可能还会很自然地联想到,这个服务和连接器能否也用于三剑客中的另外一个组件——PowerBI,用于数据获取呢?
答案是:目前还不行。Power BI目前支持的自定义连接器的方式,目前是在Preview的阶段,其实现方式是比较特殊的,有兴趣的朋友可以参考下面这篇文章:
Data Connector SDK Developer Preview
结语
新一代的商业应用平台,它的强大依赖于强大的底层设计和灵活的应用架构。作为PowerApps和Flow的基础,连接器是一个核心的基础组件。微软提供的组件化架构,让开发人员可以使用自己习惯的方式开发Web API,并将其无缝地整合到业务应用的开发中去。
为PowerApps和Flow,Power BI开发自定义连接器的更多相关文章
- PowerApps和Flow,Power BI开发
为PowerApps和Flow,Power BI开发自定义连接器 作者:陈希章 发表于 2017年12月20日 前言 我在之前用了几篇文章来介绍新一代微软商业应用平台三剑客(PowerApps,Mic ...
- 2019微软Power BI 每月功能更新系列——2月Power BI 新功能学习
哈喽,小伙伴们,我是小悦悦,好久不见~ 春节假期结束,新一轮的工作开始,祝大家猪年如意,开工大吉! 今天小悦悦带你走入猪年学习的正确打开方式——Power BI新一年的持续更新学习! Power ...
- 微软Power BI 每月功能更新系列——10月Power BI 新功能学习
Power BI Desktop10月产品功能摘要 本月Power Plus Desktop的更新充满了整个产品的小型和大型改进.一个巨大的更新是Power BI服务支持我们的复合模型和聚合预览.这实 ...
- 一起学微软Power BI系列-使用技巧(5)自定义PowerBI时间日期表
1.日期函数表作用 经常使用Excel或者PowerBI,Power Pivot做报表,时间日期是一个重要的纬度,加上做一些钻取,时间日期函数表不可避免.所以今天就给大家分享一个自定义的做日期表的方法 ...
- PowerBI开发 第十五篇:Power BI的行级安全
Power BI支持行级安全(Row-Level Security,RLS)的权限控制,用于限制用户对Dashboard.报表和DataSet的访问.用户浏览的报表是相同的,但是看到的数据却是不同的. ...
- 微软新神器-Power BI横空出世,一个简单易用,还用得起的BI产品,你还在等什么???
在当前互联网,由于大数据研究热潮,以及数据挖掘,机器学习等技术的改进,各种数据可视化图表层出不穷,如何让大数据生动呈现,也成了一个具有挑战性的可能,随之也出现了大量的商业化软件.今天就给大家介绍一款逆 ...
- 如何把Power BI嵌入到Web应用中
(此文章同时发表在本人微信公众号"dotNET开发经验谈",欢迎右边二维码来关注.) 题记:这篇其实不是一个操作向导了,主要对Power BI的嵌入特性进行探讨. Power BI ...
- .NET平台开源项目速览(19)Power BI神器DAX Studio
PowerBI更新频繁,已经有点更不上的节奏,一直在关注和学习中,基本的一些操作大概是没问题,更重要的是注重Power Query,M函数,以及DAX的使用,这才是核心. 上个月研究了DAX的一些 ...
- 2019微软Power BI 每月功能更新系列——Power BI 4月版本功能完整解读
Power BI4月份的更新对整个产品进行了重大更新.此版本增加了基于DAX表达式定义视觉效果标题和按钮URL的功能.本月Power BI也新增了许多新的连接器,现在可以使用几种预览连接器,包括Pow ...
随机推荐
- javascript中原型链与instanceof 原理
instanceof:用来判断实例是否是属于某个对象,这个判断依据是什么呢? 首先,了解一下javascript中的原型继承的基础知识: javascript中的对象都有一个__proto__属性,这 ...
- 块级元素行内元素以及display属性
1.什么叫做标签语义化? ->合理的标签做合适的事情 ->HTML中常用的标签都有哪些? (块状标签和行内标签) ->块状标签和行内标签的区别? (常用的有8条区别) 1)内联元素: ...
- 阿里云ecs遭到频繁的ddos攻击始末
苦逼熬夜近俩月的时间搞出来个小东东,还指望它能给自己捞点~ 结果刚上线没多久就遭到竞争对手疯狂的ddos攻击. 可怜的阿里云默认只能抗住5G的攻击,超出的直接黑洞,也是很无奈,然而能免费抗5G这在国 ...
- ldap数据库--ODSEE--安装
在安装之前最好查看一下服务器硬件是否满足要求,是否需要更改一些系统配置来达到使用ldap数据库的最有性能.实际使用的ldap数据库是oracle的产品,DS70即ODSEE. 安装环境:solaris ...
- PyCharm汉化、破解教程
汉化 1.将 C:\Program Files (x86)\JetBrains\PyCharm 2017\lib(路径是你的安装路径)目录下的resources_en.jar文件复制出来之后删除,以备 ...
- rem布局配合less的快速开发
最近在进行静态页面的制作,为了方便和快速的布局,自己整理了一套工具可以快速的进行工作,剩余的时间大家都懂的,话不多说,来看具体的东西吧! 1.ps 下载这个软件→cutterman 十分强大的切图功能 ...
- c# word文档与二进制数据的相互转换
最近项目出使用到了将word文档以二进制的方法存到数据库中,并再次读取出二进制数据转换为word文档.最后总结了一下,不多说看示例方法: 代码 , content.Length); ...
- 《天书夜读:从汇编语言到windows内核编程》六 驱动、设备、与请求
1)跳入到基础篇的内核编程第7章,驱动入口函数DriverEnter的返回值决定驱动程序是否加载成功,当打算反汇编阅读驱动内核程序时,可寻找该位置. 2)DRIVER_OBJECT下的派遣函数(分发函 ...
- eclipse项目中丢失的R包找回方法
当我们项目中的R文件丢失的时候会令我们痛苦不已,怎样找回呢?总不能删了吧,那样心血会毁于一旦的,我们肯定不会那样做,那要怎么办呢?我这里提供三种方法: 一,一般情况下这样: 方法一:选中 ...
- 你好 JSONP !!!!
跨域与JSONP ==JSONP是解决跨域问题的一种常见方式== ==跨域问题==:因为浏览器有同源策略,所以当不同域间进行数据交互的时候就会出现跨域问题 ···· 同源策略:只有在同协议,同域名,同 ...