You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 03:10:23