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

使用OData4调用Dynamics Business Central代码单元时按引用传参问题

解决Dynamics Business Central OData4调用带引用参数代码单元的问题

核心问题原因

你之前用的codeunit_functionName格式仅适用于无输出/引用参数的代码单元函数。带by reference(Out/InOut)参数的函数必须使用BC OData专门的Invoke端点,否则会触发“Resource not found”错误。

正确调用步骤

  1. 调整请求URL
    使用固定的Invoke端点格式,替换为你的代码单元名称/ID和公司ID:

    https://<你的BC实例域名>/api/v2.0/companies({公司ID})/codeunit('<代码单元名称或ID>')/Microsoft.Dynamics.Nav.Invoke
    
  2. 构造正确的请求体JSON
    需要在请求体中明确指定函数名、参数,以及引用参数的类型和传递方向:

    {
      "functionName": "<你的函数名>",
      "parameters": {
        // 普通输入参数直接传值
        "普通输入参数名": "参数值",
        // 引用参数需要添加两个特殊标识
        "引用参数名@odata.type": "#Edm.<对应类型>",
        "引用参数名@Microsoft.Dynamics.Nav.InvokeAsType": "Out" // 或"InOut"
      }
    }
    
    • 类型映射:BC的Text对应#Edm.String,Integer对应#Edm.Int32,Decimal对应#Edm.Decimal,以此类推。
    • 方向标识:Out表示仅输出,InOut表示输入输出双向。
  3. 请求头配置
    保持POST方法,必须携带以下请求头:

    • Content-Type: application/json
    • 授权头(如Authorization: Bearer <你的访问令牌>)

示例场景

假设你有一个名为CustomerProcessor的代码单元,函数GetCustomerDetails包含:

  • 输入参数:CustomerNo(Text类型)
  • 输出参数:CustomerName(Text类型,by reference)

对应的请求:

  • URL:https://bc-demo.com/api/v2.0/companies(12345678-1234-1234-1234-1234567890ab)/codeunit('CustomerProcessor')/Microsoft.Dynamics.Nav.Invoke
  • 请求体:
    {
      "functionName": "GetCustomerDetails",
      "parameters": {
        "CustomerNo": "C0001",
        "CustomerName@odata.type": "#Edm.String",
        "CustomerName@Microsoft.Dynamics.Nav.InvokeAsType": "Out"
      }
    }
    

额外排查点

  • 确认代码单元已在BC的Web服务中发布,且OData服务状态为“已发布”。
  • 参数名称严格匹配BC函数中的定义(区分大小写)。
  • 检查BC实例的OData版本是否为v2.0或更高(v1.0不支持该Invoke端点)。

内容的提问来源于stack exchange,提问作者user11889334

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 04:40:08