Acumatica新建/扩展端点Get请求$filter筛选BOMID报错问题
你当前的报错是因为URL格式不符合Acumatica REST API的规范,你将$filter作为URL路径的一部分传入,系统会把$filter=xxx这段内容识别为实体主键的值,匹配不到对应结构所以抛出无效操作异常。
正确的请求方案
方案1:使用$filter查询参数筛选
$filter属于OData标准查询参数,必须以?开头拼接在URL路径之后,空格需要转义为%20或者用+代替,正确的URL格式如下:
{AcumaticaBaseURL}/entity/{EndPointName}/{EndPointVersion}/{EntityName}?$filter=BOMID%20eq%20'{valueofBomID}'
你的示例调整后为:
http://localhost/AcumaticaMfg21R2/entity/BOMEP/17.200.001/BOMEntity?$filter=BOMID%20eq%20'BOM0001'
注意:如果BOMID是数值类型不需要加单引号,字符串类型必须包裹单引号。
方案2:直接通过主键查询单条记录(性能更优)
如果BOMID是你自定义端点BOMEntity的唯一主键,你可以直接把BOMID的值作为URL路径段传入,不需要用$filter,格式如下:
{AcumaticaBaseURL}/entity/{EndPointName}/{EndPointVersion}/{EntityName}/{valueofBomID}
示例:
http://localhost/AcumaticaMfg21R2/entity/BOMEP/17.200.001/BOMEntity/BOM0001
这种方式直接返回单条BOM的详情,不需要额外筛选,效率远高于$filter查询。
方案3:POST请求体传筛选条件
GET请求的请求体内容会被Acumatica的REST接口忽略,所以你之前用GET请求带请求体传BOMID的方式不会生效,需要用POST请求传入筛选条件,格式如下:
- 请求URL:
{AcumaticaBaseURL}/entity/{EndPointName}/{EndPointVersion}/{EntityName}/$filter
- 请求头设置
Content-Type: application/json - 请求体内容:
{ "BOMID": { "eq": "BOM0001" } }
这种方式适用于筛选条件比较复杂的场景,也可以正确返回筛选后的BOM列表。
额外检查项
- 确认你自定义端点中
BOMEntity的主键字段确实是BOMID,没有拼写错误 - 确认你的接口请求凭证(Cookie或者Bearer Token)有BOM模块的访问权限
- Acumatica 21R2版本自定义端点发布后需要重启站点或者清除缓存才能生效
内容的提问来源于stack exchange,提问作者Manish Chhetia
相关产品推荐
相关产品推荐

