目录
目的
创建事件中心
注册服务端点
验证服务端点注册
消费事件
下一步
这是3部分系列的第2部分,介绍了融合开发的概念,并使用一个实际的用例从专业开发人员的角度展示了它是如何工作的。本文探讨专业开发人员如何在Azure中创建无服务器应用程序,以响应Dataverse中的数据更改。此应用程序可帮助普通开发人员修改他们的应用程序,而不会影响存储在后端的实际数据。
这个由三部分组成的系列的第一篇文章演示了普通开发人员如何使用Microsoft Power Apps等低代码解决方案来创建自我维持的应用程序。该应用程序管理客人登记,收集有关客人所需服务的其他信息。
本系列的第二篇文章探讨了专业开发人员如何在Azure中创建无服务器应用程序,以响应Dataverse中的数据更改。此应用程序可帮助普通开发人员修改他们的应用程序,而不会影响存储在后端的实际数据。尽管本教程使用Python代码作为示例,但其他支持的语言也可以使用。
目的上一个教程在Dataverse中设置了一个Reservations表并创建了一个Power App来签入来宾。到目前为止,该应用程序仅适用于 Dataverse 表。酒店员工可以使用它来确定是否有人通过该应用程序登记入住。然而,整个链范围内的企业数据库并没有注意到这一活动。
作为可能还维护公司后端的专业开发人员,我们现在可以构建一个连接器,将Dataverse中的数据链接到他们的后端系统。订阅Azure事件中心事件可以对UI应用程序的更改做出反应,而无需触摸它。
该方法的工作原理如下:
- 在Microsoft系统中创建映射以发送自定义事件消息。
- 一名员工为客人办理入住手续。
- 该操作会触发Dataverse中的更新事件。
- 通过映射,Power Platform将事件发送到事件中心。
- 一个函数应用程序接收事件、处理它并通知后端。
这些步骤在不修改Power App的情况下发生,将UI与后端功能隔离开来。
这个过程有四个步骤:
- 在Azure中创建事件中心。
- 使用Dataverse中的更新操作注册事件中心。
- 验证事件已发送。
- 创建响应事件中心事件的函数应用。
首先,在Azure门户中搜索“事件中心”以创建事件中心命名空间。完成此步骤后,转到资源。
接下来,转到共享策略并创建具有侦听和发送权限的策略。复制连接字符串并将其保存以供后续步骤使用。
然后,单击创建事件以创建函数应用程序将监视的事件。
注册服务端点要让事件中心监控Dataverse中的变化,需要注册连接。有关下载插件注册工具的说明,请参阅Microsoft文档。
首先,打开插件注册工具并使用Office 365选项登录组织。登录过程完成后,该工具会显示所有现有注册的列表。单击注册 > 注册新服务端点。
使用来自事件中心的连接字符串,选择EventHub作为指定类型,选择JSON作为消息格式,以便函数应用可以接收JSON格式而不是XML格式的数据。服务端点应类似于此屏幕截图:
现在,通过注册一个监视Dataverse更改的新步骤来告诉Microsoft服务端点将做什么。当端点观察到Reservation表中的更新时,事件中心会触发一个事件。
消息是事件中心应监控的操作类型。在这种情况下,选择更新以观察Reservations表中的更新更改。
主要实体是要观察的实体。在这种情况下,监视对Reservation 表的更改。
注册工具按名称调用实体。上一教程创建Dataverse表时,它创建了一个显示名为“Reservation”的表,但Power Platform也创建了一个内部表名。使用Power Platform的名称作为Primary Entity。
选择注册为事件处理程序的服务端点。
验证服务端点注册当预订表中的记录发生更改时,一切都已准备好供事件中心触发。现在,我们需要验证事件注册是否成功。
通过编辑客人的预订,使用Power App对其进行测试。
然后,要确认触发的事件,请转到Power Apps Maker Portal。单击设置齿轮并选择高级设置以转到Dynamics 365设置页面
从下拉列表中,选择System > System Jobs。
如果更改成功,日志中特定预订代码(主键)旁边应显示“正在登记客人”。
这就是我们需要做的所有事情,以将普通开发人员所做的事情处理到酒店的后端。请注意,它不需要一行代码!
消费事件开发人员可以创建响应事件中心触发器的函数应用来使用事件。我们可以使用Visual Studio(VS)代码创建一个Function应用并将其部署到Azure,并使用Azure Functions Tools扩展。
此操作会在侧面板上创建一个Azure图标。然后我们可以使用窗格上的按钮直接创建一个项目和一个函数。
本教程将创建一个Python应用程序作为示例,但任何支持的语言都可以使用。此处的重要设置是使用事件中心触发器。
首先,按照提示使用Event Hub Triggers创建Python应用程序,指向之前的Event Hub命名空间。此操作会创建一个具有默认属性的JSON文件。
然后,将连接字符串更新到事件中心命名空间。连接字符串来自命名空间创建的共享访问策略选项卡。
最后,更新代码以处理事件。在此示例中,它将数据发布到临时Webhook。
在部署之前,请确保requirements.txt包含此项目所需的库:azure-functions和requests。当VS代码创建项目时,它包含azure-functions。该requests库将向模拟端点发出POST请求。
azure-functions
requests
此代码示例将更改的字段传递给模拟端点:
from typing import List
import logging
import azure.functions as func
import json
import requests
def main(events: List[func.EventHubEvent]):
logging.info('Started Function app')
for event in events:
body=event.get_body()
# Convert the raw data into a dict struct by parsing JSON
jsonContent = body.decode('utf-8')
jsn = json.loads(jsonContent)
# Take the input parameters from the incoming message
inputParams = jsn['InputParameters'][0]['value']['Attributes']
# Take the identifiers that identifies the reservation in the SQL database
identifiers = jsn['PostEntityImages'][0]['value']['Attributes']
# Create a payload that includes both the changed values and identifiers
payload = {}
payload['values'] = inputParams
payload['ids'] = identifiers
r = requests.post('https://webhook.site/4d2e2587-8d82-4605-ad06-47ad29827184', \
data=json.dumps(payload))
message = body['MessageName']
logging.info('Python EventHub trigger processed message: \
%s with input parameters %s', message, inputParams)
反序列化event.get_body()有助于分析整个事件消息。然后,代码从InputParameters属性值中的第一个元素中提取Dataverse Update事件的更改属性。
接下来,部署函数应用。然后,通过使用UI应用程序签入另一位客人来对其进行测试。一个发布请求将出现在模拟端点上。
此处的示例JSON显示它包含InputParameters属性中的所有必需信息:
{
"values":[
{
"key":"cr7ec_checkintime",
"value":"/Date(1631599320000)/"
},
{
"key":"cr7ec_reservationid",
"value":"1e7ac787-c077-ec11-8942-000d3a0c84c3"
},
{
"key":"timezoneruleversionnumber",
"value":0
},
{
"key":"modifiedon",
"value":"/Date(1643556032000)/"
},
...
],
"ids":[
{
"key":"cr7ec_reservationcode",
"value":"CRX58345"
},
{
"key":"cr7ec_reservationid",
"value":"1e7ac787-c077-ec11-8942-000d3a0c84c3"
}
]
}
端点可以使用标识符指向预订(通过预订代码)和修改后的字段,然后更新公司SQL数据库中的预订状态。
部署的Function应用程序对预订表条目更改做出反应。
下一步我们已经成功创建了一个Function应用程序来响应UI应用程序中的更改,而无需更改UI应用程序中的任何内容。因此,普通开发人员可以在不涉及专业开发人员的情况下继续修改Power Apps平台中的UI应用程序。
这种方法是一个很大的优势,因为普通开发人员可以调整应用程序以满足快速变化的业务需求,而无需精通代码或接触后端系统。
继续阅读最后一篇文章,了解我们如何向系统添加数据。本教程将探索将数据插入到Reservation Dataverse表中,然后扩展UI应用程序以包含有关客人以前访问的信息。
要了解如何加速基础应用程序开发,请查看开发人员的低代码应用程序开发 7 步指南。
https://www.codeproject.com/Articles/5327553/Fusion-Development-for-Hospitality-Apps-Part-2-Ena