sap 订单流程中有一个流程任务,该任务从订单中删除现有订单条目,并从也包含行项目的销售订单响应中添加条目。在此过程中,我在下一些订单时遇到此错误:
项目 9294277673006 不再有效(已删除):对象不再有效
我怀疑执行
Modelservice.removeall
然后访问 oldOrderEntries
中的相同 copyPricesForMatchingProducts
会导致问题。但我不确定如何无法访问存储的条目,尽管模型服务也仅针对少数请求删除了它们。请帮我解决这个问题。
public OrderModel convert(List<List<CPQInboundOrderLineItemDTO>> cpqInboundOrderLineItemDTOS, OrderModel orderModel) throws ConversionException {
CatalogVersionModel catalogVersionOfProducts = null;
List<AbstractOrderEntryModel> newOrderEntries = new ArrayList<>();
List<AbstractOrderEntryModel> oldOrderEntries = orderModel.getEntries();
if (CollectionUtils.isNotEmpty(orderModel.getEntries())) {
catalogVersionOfProducts = orderModel.getEntries().get(0).getProduct().getCatalogVersion();
getModelService().removeAll(orderModel.getEntries());
}
for (List<CPQInboundOrderLineItemDTO> lineItemList : cpqInboundOrderLineItemDTOS) {
for (CPQInboundOrderLineItemDTO lineItem : lineItemList) {
OrderEntryModel orderEntryModel = getModelService().create(OrderEntryModel.class);
orderEntryModel.setEntryNumber(lineItem.getItemNumber());
copyPricesForMatchingProducts(orderEntryModel, oldOrderEntries);
}
private void copyPricesForMatchingProducts(OrderEntryModel orderEntryModel, List<AbstractOrderEntryModel> oldOrderEntries) {
if (CollectionUtils.isNotEmpty(oldOrderEntries)) {
for (AbstractOrderEntryModel oldOrderEntryModel : oldOrderEntries) {
if (oldOrderEntryModel.getProduct().getCode() == orderEntryModel.getProduct().getCode()) {
orderEntryModel.setBasePrice(oldOrderEntryModel.getBasePrice());
orderEntryModel.setSalesOrgCountryPrice(oldOrderEntryModel.getSalesOrgCountryPrice());
}
}
}
}
详细错误:
项目 8975006367790 不再有效(已删除):对象不再有效"," thrown":{"commonElementCount":0,"localizedMessage":"项目 8975006367790 不再有效(已删除):对象不再有效"," message":"项目 8975006367790 不再有效(已删除):对象不再有效","name":"de.hybris.platform.jalo.JaloObjectNoLongerValidException","extendedStackTrace":[{"class":"de.hybris .platform.jalo.Item$CachedGetter","方法":"获取","文件":"Item.java","行":740,"精确":false,"位置":"coreserver.jar", "version":"?"},{"class":"de.hybris.platform.jalo.ExtensibleItem","method":"getProperty","file":"ExtensibleItem.java","line":343, "exact":false,"location":"coreserver.jar","version":"?"},{"class":"de.hybris.platform.jalo.order.GeneeratedAbstractOrderEntry","method":"getBasePrice ","file":"GenerateAbstractOrderEntry.java","line":106,"exact":false,"location":"coreserver.jar","version":"?"},{"class":"jdk .internal.reflect.NativeMethodAccessorImpl","方法":"invoke0","文件":"NativeMethodAccessorImpl.java","行":-2,"精确":false,"位置":"?","版本" :"?"},{"class":"jdk.internal.reflect.NativeMethodAccessorImpl","method":"调用","file":"NativeMethodAccessorImpl.java","line":77,"exact":false ,"location":"?","version":"?"},{"class":"jdk.internal.reflect.DelegatingMethodAccessorImpl","method":"invoke","file":"DelegatingMethodAccessorImpl.java" ,"line":43,"exact":false,"location":"?","version":"?"},{"class":"java.lang.reflect.Method","method":"调用","文件":"Method.java","行":568,"精确":false,"位置":"?","版本":"?"},{"class":"de. hybris.platform.jalo.type.ReflectionAttributeAccess$AttributeMethod","方法":"invokeGetter","文件":"ReflectionAttributeAccess.java","line":753,"exact":false,"location":"coreserver. jar","version":"?"},{"class":"de.hybris.platform.jalo.type.ReflectionAttributeAccess","method":"getValue","file":"ReflectionAttributeAccess.java"," line":959,"exact":false,"location":"coreserver.jar","version":"?"},{"class":"de.hybris.platform.jalo.Item","method" :"getAttribute","file":"Item.java","line":1921,"exact":false,"location":"coreserver.jar","version":"?"},{"class" :“de.hybris.platform.servicelayer.internal.model.impl.JaloPersistenceObject”,“方法”:“readRawValue”,“文件”:“JaloPersistenceObject.java”,“行”:110,“精确”:假,”位置":"coreserver.jar","版本":"?"},{"class":"de.hybris.platform.servicelayer.internal.converter.impl.ItemModelConverter","方法":"readSingleAttribute","文件":"ItemModelConverter.java","行":1447,"精确":false,"位置":"coreserver.jar","版本":"?"},{"class":"de.hybris. platform.servicelayer.internal.converter.impl.ItemAttributeProvider","method":"getAttribute","file":"ItemAttributeProvider.java","line":110,"exact":false,"location":"coreserver. jar","version":"?"},{"class":"de.hybris.platform.servicelayer.model.ItemModelContextImpl","method":"loadUnlocalizedAttribute","file":"ItemModelContextImpl.java","行":285,"精确":false,"位置":"coreserver.jar","版本":"?"},{"class":"de.hybris.platform.servicelayer.model.ItemModelContextImpl","方法":"getValue","文件":"ItemModelContextImpl.java","行":245,"精确":false,"位置":"coreserver.jar","版本":"?"},{"类":"de.hybris.platform.servicelayer.model.ItemModelContextImpl","方法":"getPropertyValue","文件":"ItemModelContextImpl.java","行":261,"精确":false,"位置" :"coreserver.jar","version":"?"},{"class":"de.hybris.platform.core.model.order.AbstractOrderEntryModel","method":"getBasePrice","file":" AbstractOrderEntryModel.java","line":262,"exact":false,"location":"models.jar","version":"?"},{"class":"com.octanner.pricing.converter. impl.CPQInboundOrderLineItemConverter","方法":"copyPricesForMatchingProducts","文件":"CPQInboundOrderLineItemConverter.java","行":93,"精确":false,"位置":"octsegmentpricingserver.jar","版本":" ?”}
我假设订单创建逻辑尝试访问该项目。您可以尝试在删除订单对象后提交并刷新。
但是如果您在生产中有多个节点,这无法解决您的问题。因为缓存同步速度不快。所以你需要避免删除物品。也许您还需要它们以供将来的调查使用。
最佳实践: