如何在MyWebsite更新时同步更新Microsoft Dataverse表记录?
解决MyWebsite Webhook同步Dataverse记录的方案
核心可行方案1:Power Automate HTTP触发器(最快捷)
这是适配你场景的最优方案,大概率是之前配置细节遗漏导致失败,按以下步骤落地:
- 新建云端流,选择当收到HTTP请求时作为触发器
- 在触发器的「请求正文JSON架构」中,粘贴MyWebsite Webhook发送的示例Payload(比如
json{"recordId":"123","name":"更新后的名称","status":1}),点击「使用示例有效负载生成架构」自动解析规则,确保流能正确识别请求数据 - 添加
更新行(Dataverse)动作:选择目标数据表,在「行ID」处用Dataverse中存储的MyWebsite记录标识(比如同步时留存的mywebsite_recordid字段)匹配Webhook传来的recordId,再逐一映射需要更新的字段 - 保存流后,复制触发器生成的HTTP POST URL,配置到MyWebsite的Webhook设置中,确保Webhook请求方法为POST、内容类型为application/json
- 关键排查点:
- 流绑定的Dataverse账户必须拥有目标表的写入权限
- 若MyWebhook带签名验证,需在流开头添加「解析JSON」步骤后,补充签名校验逻辑(比如对比请求头签名与本地计算的哈希值)
- 检查Webhook发送的Payload格式是否与你生成的JSON架构匹配,格式错误会直接导致流触发失败
核心可行方案2:Dataverse自定义API(适合复杂逻辑/高并发)
如果需要处理数据校验、关联表更新等复杂业务逻辑,可通过自定义API接收Webhook:
- 在Power Platform解决方案中新建自定义API,定义对应输入参数(比如
RecordId、UpdatedFields) - 编写C#插件并绑定到自定义API的执行事件,核心逻辑为:根据传入的
RecordId查询Dataverse对应记录,执行字段更新操作 - 发布自定义API后,复制其Web API端点地址(格式示例:
https://yourenv.crm.dynamics.com/api/data/v9.2/your_customapi_name) - 在MyWebsite的Webhook配置中,发送携带Azure AD OAuth2令牌的POST请求到该端点(需先在Azure AD注册应用并授予Dataverse API权限)
之前尝试失败的原因分析
- JavaScript Web资源:这类脚本仅运行在Model Driven App客户端,没有公网可访问的端点,根本无法接收外部Webhook的HTTP请求,此方案从逻辑上不适用,无需再尝试
- Power Automate失败:常见原因包括:
- 触发器的JSON架构与Webhook的Payload格式不匹配,导致流无法解析请求
- 流绑定的Dataverse账户权限不足,无法执行更新操作
- Webhook的请求方法(比如GET)与触发器要求的POST不匹配
- 未处理Webhook的签名验证,导致请求被Power Automate拦截
内容的提问来源于stack exchange,提问作者Aiden Martin
相关产品推荐
相关产品推荐

