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

Salesforce REST API基于Wrapper创建Order类报方法签名错误

报错根因

报错本质是语法使用错误:你代码中的productMAp、PricebookEntryMAp是提前存储查询结果的Map类型变量,不是自定义方法。Apex中Map集合取值需要调用.get(键名)方法,你直接写productMAp(xxx)的写法会被编译器识别为调用名为productMAp、入参为String的方法,类中找不到对应方法就会抛出该签名错误。

代码现存其他问题
  • 拼写不规范:存在大量变量名拼写错误,比如oderWrap应为orderWrap、productMAp/PricebookEntryMAp大小写混乱、createOrderLineItimes应为createOrderLineItems,极易引发变量识别错误
  • 订单项赋值逻辑错误:插入Order后给订单项写poLine.orderid =poLine.order.Id的逻辑无效,未持久化的订单项实例上的order关联对象为空,会触发空指针
  • 空指针风险:未判断PricebookList查询结果、contractMap取值是否为空,直接取属性会在数据缺失时直接抛错
  • 容错缺失:遍历订单项时未判断Map中是否存在匹配的Product2、PricebookEntry,传入空值会导致后续DML失败
修正后代码

首先确保你提前完成了Map数据初始化(原逻辑中缺失的初始化参考如下):

// 初始化标准价格簿
List<Pricebook2> pricebookList = [SELECT Id FROM Pricebook2 WHERE IsStandard = true LIMIT 1];
if(pricebookList.isEmpty()){
    // 补充价格簿不存在的异常处理逻辑
    return;
}

// 提取所有订单项的产品编码,批量查询Product2
Set<String> lineItemCodes = new Set<String>();
for(OrderWrapper.OrderLineItems item : orderWrap.OrderLineItems){
    lineItemCodes.add(item.LineItemCode);
}
Map<String, Product2> productMap = new Map<String, Product2>();
for(Product2 pro : [SELECT Id, ProductCode FROM Product2 WHERE ProductCode IN :lineItemCodes]){
    productMap.put(pro.ProductCode, pro);
}

// 批量查询对应价格簿的PricebookEntry
Map<Id, PricebookEntry> pricebookEntryMap = new Map<Id, PricebookEntry>();
for(PricebookEntry pbe : [SELECT Id, Product2Id FROM PricebookEntry WHERE Pricebook2Id = :pricebookList[0].Id AND Product2Id IN :productMap.values()]){
    pricebookEntryMap.put(pbe.Product2Id, pbe);
}

订单创建核心逻辑修正如下:

// 先判断关联合同是否存在
Contract relatedContract = contractMap.get(orderWrap.AccountId);
if(relatedContract == null){
    // 补充合同不存在的异常处理逻辑
    return;
}

Order ord = new Order(
    AccountId = orderWrap.AccountId,
    EffectiveDate = Date.today(), // 替换为实际传入的生效日期参数
    Status = orderWrap.Status,
    PriceBook2Id = pricebookList[0].Id,
    ContractId = relatedContract.Id,
    ShippingStreet = relatedContract.Account.ShippingStreet,
    ShippingCity  = relatedContract.Account.ShippingCity,
    ShippingPostalCode = relatedContract.Account.ShippingPostalCode,
    ShippingCountry = relatedContract.Account.ShippingCountry,
    ShippingState = relatedContract.Account.ShippingState
);

List<OrderItem> orderItemList = new List<OrderItem>();
for(OrderWrapper.OrderLineItems orderLineItem : orderWrap.OrderLineItems){
    // 修正Map调用方式,加非空判断
    if(!productMap.containsKey(orderLineItem.LineItemCode)) continue;
    Product2 pro = productMap.get(orderLineItem.LineItemCode);
    if(!pricebookEntryMap.containsKey(pro.Id)) continue;
    PricebookEntry pbe = pricebookEntryMap.get(pro.Id);
    orderItemList.add(createOrderLineItems(ord, Integer.valueOf(orderLineItem.Quantity), pro, pbe));
}

if(ord != null && !orderItemList.isEmpty()){
    insert ord;
    // 修正订单项订单Id赋值逻辑,直接取刚插入的订单Id
    for(OrderItem poLine : orderItemList) {
        poLine.OrderId = ord.Id;
    }
    insert orderItemList;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 10:24:14