我试图获取inventDim记录(如果存在)或者创建一个新记录。
InventDim inventDim;
inventDim.InventLocationId = "220";
inventDim = InventDim::findOrCreate(inventDim);
info(inventDim.inventDimId);
我确信InventLocationId的值为" 220"已经存在,但无论如何,增加了一个新的。
如果我再次运行上述行,我将获得最后创建的值,所以这一次,它都很好。
通过SQL检查:
SELECT *
FROM INVENTDIM
WHERE INVENTLOCATIONID = '220'
返回两行。
我可以使用以下行删除添加的行:
select forUpdate inventDim
where inventDim.inventDimId == 'the new id';
inventDim.delete(true);
我无法弄清楚我在这里做错了什么..
答案 0 :(得分:1)
InventDim表包含库存维度的值。每条记录都是唯一的,因为没有记录具有完全相同的维度组合。
这意味着如果您正在寻找使用InventLocationId ==" 220"的记录,则可以有许多记录,其中一个记录包含InventColorId ==" Red"和一个使用InventColorId ==" Blue"。当您组合其他尺寸时,您将获得更多组合,例如,您可以有两个记录,其中颜色为蓝色,位置为220,InventSizeId为5厘米或3厘米。
因此,通过上面的示例,您只考虑了一个维度而忽略了其余维度。将InventLocationId设置为220可以拥有多条记录,因为一个或多个其他库存维度将不同。
如果您想要一个所有其他维度为空且InventLocationId为220的记录,则必须在尝试查找记录之前指定其他维度应为空白。
InventDim inventDim; InventDim inventDimNew;
select inventDim
where inventDim.InventLocationId == "220"
&& inventDim.ConfigId == ""
&& inventDim.InventSizeId == "";
//Add more blank dimensions depending on the dimensions active in your system.
buf2Buf(inventDim, inventDimNew);
inventDimNew.inventDimId = '';
info(InventDim::findOrCreate(inventDimNew).inventDimId);
答案 1 :(得分:1)
听起来您并不完全理解InventDim
的工作方式,或者 All Blank 维度可能存在缓存问题。
解决方法是调试方法\Data Dictionary\Tables\InventDim\Methods\findDim
以查看它在决定创建之前如何查找维度。
inventDim.inventLocationId == '220'
与填充了两个字段的另一条记录不同:
inventDim.inventLocationId == '220'
inventDim.inventSiteId == '1'
我已经看到了AllBlank
维度的缓存问题。在调试器中检查这两个方法,看看是否有任何异常。一个使用常量AllBlank
,而另一个使用全局对象缓存。
InventDim::inventDimIdBlank();
InventDim::findOrCreateBlank();
答案 2 :(得分:1)
关于您正在使用的许可证代码,配置密钥,设置,模块和产品组,对于两种不同的产品,您可能没有相同的维度。
例如,您可以跟随尺寸和颜色的T恤以及颜色和款式的帽子。您对库存维度有类似的疑问。
根据产品的不同,您可能不会查找相同的尺寸。您将在PriceDisc.findPrice()
中找到一个如何使用它的好例子因此,在您的情况下,发明地点220可能已经被使用过,因此您可能会有一个记录。但它似乎从未单独使用,但具有其他尺寸(尺寸,颜色,批次,序列等)。在运行InventDim :: findOrCreate()方法之前,请确保设置所有相关尺寸。