You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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端点,预期的标准模式是分两步查询

  1. 先从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
  1. 再用拿到的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的标准自定义方案:

  1. 在Epicor客户端创建一个BAQ,关联以下表:
    • Erp.Part:取PartNumProdCode
    • Erp.PriceLst:过滤ListCode和生效日期
    • Erp.PriceLstProdGrupBrk:关联ListCodeProdCode,取DiscountPercentBreakQty
  2. 发布该BAQ为OData服务
  3. 通过以下请求查询:
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必须在价格表的StartDateEndDate范围内,否则服务会忽略该价格表
  • 如果组折扣有数量阶梯(比如Qty≥10时折扣5%),务必传对QtyOrdered参数,服务会自动匹配对应阶梯的折扣

火山引擎 最新活动