Dynamics 365 FO无自然键表数据实体OData Action键字段缺失问题
解决方案:D365 F&O OData Action在Power Automate中不显示实体键字段
问题原因分析
核心问题是OData元数据未正确识别实体的完整键组合,导致Power Automate无法加载除dataAreaId外的其他键参数。结合WMSOrderTrans无自然键、依赖RecId作为索引的场景,排查方向集中在实体键配置、元数据发布和Action绑定逻辑上。
具体解决步骤
1. 验证实体键配置与发布状态
- 打开
SalesOrderPickingListLines数据实体设计器,确认EntityKey包含dataAreaId、orderId、RecId1三个字段,且每个字段的EntityKeyMember属性已勾选。 - 右键实体选择Generate staging table and map重新生成实体,同步到数据库后,在OData Public Service节点下右键对应服务选择Refresh重新发布OData服务。
- 访问OData元数据地址(如
https://<your-environment>/data/$metadata),搜索SalesOrderPickingListLines的EntityType,确认Key节点包含完整键字段:<Key> <PropertyRef Name="dataAreaId"/> <PropertyRef Name="orderId"/> <PropertyRef Name="RecId1"/> </Key>
2. 优化Action的绑定与逻辑
原代码存在冗余查询,未利用实体绑定特性,修正代码如下:
[SysODataActionAttribute('SetPickQuantity', true)] public real setPickQuantity(InventQty _qty) { WMSOrderTrans _wmsOrderTrans = this; // 直接使用绑定的实体实例,无需重复查询 ttsBegin; _wmsOrderTrans.selectForUpdate(true); // 执行拣货数量更新逻辑,示例: _wmsOrderTrans.Qty = _qty; _wmsOrderTrans.update(); ttsCommit; return _wmsOrderTrans.Qty; }
重新编译实体类后再次发布OData服务。
3. 刷新Power Automate的OData连接
Power Automate会缓存旧元数据,需手动刷新:
- 在Power Automate的Data→Connections中找到当前D365环境的连接并删除。
- 重新创建D365 F&O环境的连接。
- 重新添加OData Action,此时应能看到完整的键字段(
dataAreaId、orderId、RecId1)。
4. 检查RecId字段的实体配置
确认SalesOrderPickingListLines中的RecId1字段:
- 正确映射到WMSOrderTrans表的
RecId字段。 IsReadOnly属性设置为No(尽管RecId是系统字段,但作为键需在OData请求中可见)。AllowFiltering属性设置为Yes。
关键注意点
- WMSOrderTrans的
OrderIdx索引包含orderId和RecId,实体键必须与该索引完全匹配,否则OData无法正确定位实例。 - 每次修改实体键或Action后,必须重新发布OData服务并刷新Power Automate连接,否则元数据不会更新。
内容的提问来源于stack exchange,提问作者tomekc
相关产品推荐
相关产品推荐

