Epicor Kinetic REST v2 OData:基于价格表组配置获取零件折扣百分比及有效单价的技术问询
Epicor Kinetic REST v2 OData:基于价格表组配置获取零件折扣百分比及有效单价的技术问询
结合你的Kinetic环境配置(MTS公司、D>300价格表、25925零件绑定ACME产品组),我来给你梳理可行的解决方案,完全贴合你遇到的场景:
一、关于直接通过PartNum获取组折扣的OData端点问题
Epicor的设计逻辑里,组折扣是绑定在产品组(ProdCode)上的,而非直接关联零件,所以PriceLstParts实体里的DiscountPercent*字段确实是零件级专属折扣,和你配置的产品组折扣无关——这就是你看到0.00的核心原因。
目前Epicor没有提供能自动关联「零件→产品组→组折扣」的单一OData端点,预期的标准模式是分两步查询:
- 先从Part服务获取目标零件的产品组编码:
GET https://mst-s-eapp1.mstank.local/kinetictest/api/v2/odata/MTS/Erp.BO.PartSvc/Parts ?$select=PartNum,ProdCode &$filter=PartNum eq '25925' Headers: X-API-Key: <你的密钥> Accept: application/json
- 再用拿到的
ProdCode(这里是ACME)去查询价格表的产品组折扣实体(你的环境里是PriceLstProdGrupBrks):
GET https://mst-s-eapp1.mstank.local/kinetictest/api/v2/odata/MTS/Erp.BO.PriceLstSvc/PriceLstProdGrupBrks ?$select=ListCode,GroupCode,DiscountPercent,BreakQty &$filter=ListCode eq 'D%3E300' and GroupCode eq 'ACME' and UOMCode eq 'EA' and StartDate le '2025-03-01' and (EndDate eq null or EndDate ge '2025-03-01') &$orderby=BreakQty desc&$top=1 Headers: X-API-Key: <你的密钥> Accept: application/json
这个查询会准确返回你配置的4.23%折扣,也是Epicor设计中获取组折扣的常规路径。
二、推荐的RPC方法:用PriceSvc.GetPrice直接计算有效价格/折扣
如果你需要的是最终生效的单价和折扣(自动考虑所有价格规则:价格表、组折扣、数量、日期等),Epicor的标准核心方法是Erp.BO.PriceSvc/GetPrice——这是专门用于价格计算的服务,比SalesOrder相关的方法更直接,不需要创建订单上下文。
具体请求示例
请求类型:POST
POST https://mst-s-eapp1.mstank.local/kinetictest/api/v2/odata/MTS/Erp.BO.PriceSvc/GetPrice Headers: X-API-Key: <你的密钥> Accept: application/json Content-Type: application/json
请求Body(严格匹配Epicor的数据集格式):
{ "ds": { "PriceTables": [ { "Company": "MTS", "Plant": "MTS-Main", "ListCode": "D>300", "PartNum": "25925", "ProdCode": "ACME", // 可选:如果不传,服务会自动从Part表查询 "QtyOrdered": 1, "UOMCode": "EA", "DocDate": "2025-03-01", "CurrencyCode": "USD" } ] } }
返回结果说明
响应里的PriceTables数组会包含计算后的核心字段:
DiscountPercent:最终生效的折扣百分比(这里就是4.23%)UnitPrice:折扣后的有效单价- 还会返回其他价格相关字段(如ListPrice、MarkupPercent等),完全覆盖你的需求。
三、BAQ作为备选方案(适合批量/自定义查询场景)
如果需要一次性关联零件、产品组、价格表的所有数据(比如批量查询多个零件的折扣),创建BAQ并通过BaqSvc调用是Epicor的标准自定义方案:
- 在Epicor客户端创建一个BAQ,关联以下表:
Erp.Part:取PartNum、ProdCodeErp.PriceLst:过滤ListCode和生效日期Erp.PriceLstProdGrupBrk:关联ListCode和ProdCode,取DiscountPercent、BreakQty
- 发布该BAQ为OData服务
- 通过以下请求查询:
GET https://mst-s-eapp1.mstank.local/kinetictest/api/v2/odata/MTS/Erp.BO.BaqSvc/YourBAQName ?$filter=PartNum eq '25925' and ListCode eq 'D>300' Headers: X-API-Key: <你的密钥> Accept: application/json
这个方式的优势是把两次OData查询的逻辑合并成一次,适合批量处理场景。
关键注意事项
- 确保
CallSettings(或请求Body里的Company/Plant)配置正确,价格计算会受工厂上下文影响 DocDate必须在价格表的StartDate和EndDate范围内,否则服务会忽略该价格表- 如果组折扣有数量阶梯(比如Qty≥10时折扣5%),务必传对
QtyOrdered参数,服务会自动匹配对应阶梯的折扣




