0

如果它存在,我正在尝试获取 inventDim 记录,否则创建一个新记录。

InventDim inventDim;

inventDim.InventLocationId = "220";
inventDim = InventDim::findOrCreate(inventDim);
info(inventDim.inventDimId);

我确信值“220”的 InventLocationId 已经存在,但无论如何,添加了一个新的。

如果我再次运行上述行,我将获得最后创建的值,所以这一次,一切都很好。

通过检查 SQL:

SELECT *
FROM INVENTDIM
WHERE INVENTLOCATIONID = '220'

两行都返回。

我可以使用以下行删除添加的行:

 select forUpdate inventDim 
    where inventDim.inventDimId == 'the new id';
 inventDim.delete(true);

我不知道我在这里做错了什么..

4

3 回答 3

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);
于 2016-01-04T16:41:09.800 回答
1

听起来您并不完全了解其工作方式,或者您的All Blank维度InventDim可能存在缓存问题。

解决方案是在决定创建维度之前调试该方法\Data Dictionary\Tables\InventDim\Methods\findDim以查看它是如何尝试查找维度的。

inventDim.inventLocationId == '220'

与填充了两个字段的另一条记录不同:

inventDim.inventLocationId == '220'

inventDim.inventSiteId == '1'

我已经看到了AllBlank维度的缓存问题。在调试器中检查这两种方法,看看是否有任何奇怪之处。一种使用常量AllBlank,另一种使用全局对象缓存。

InventDim::inventDimIdBlank();

InventDim::findOrCreateBlank();

于 2016-01-04T18:46:47.477 回答
1

关于您正在使用的许可证代码、配置密钥、设置、模块和产品组,对于两个不同的产品,您可能没有相同的活动维度。

例如,您可以按照 T 恤的尺寸和颜色以及帽子的颜色和款式。您对库存维度有类似的问题。

根据产品的不同,您可能不会寻找相同的尺寸集。你会在 PriceDisc.findPrice() 中找到一个很好的例子来说明如何使用它

因此,在您的情况下,发明位置 220 可能已被使用,因此您可能有它的记录。但它似乎从未单独使用,而是与其他尺寸(尺寸、颜色、批次、序列等)一起使用。在运行 InventDim::findOrCreate() 方法之前,请确保设置所有相关尺寸。

于 2016-01-04T23:49:41.230 回答