有谁知道这个错误消息的原因是什么?这是我认为触发该错误的代码。 (这来自我们的自定义项目),当我选择多个项目时会触发错误。
foreach (InventoryItem line in soinvlineview.Cache.Cached)
{
if (line.Selected == true)
{
StyleColorSelected newline = PXCache<StyleColorSelected>.CreateCopy(styleselected.Insert(new StyleColorSelected()));
newline.InventoryID = line.InventoryID;
newline = PXCache<StyleColorSelected>.CreateCopy(styleselected.Update(newline));
styleselected.Update(newline);
}
}
答案 0 :(得分:1)
首先,CreateCopy方法对于ver是强制性的。 4.0及更早版本。开始。 4.1,你根本不需要使用它。这就是您的代码可以简化的方式:
foreach (InventoryItem line in soinvlineview.Cache.Cached)
{
if (line.Selected == true)
{
StyleColorSelected newline = styleselected.Insert(new StyleColorSelected());
newline.InventoryID = line.InventoryID;
styleselected.Update(newline);
}
}
我怀疑,您的自定义StyleColorSelected DAC要么没有指定关键字段,要么关键字段使用的属性不会生成唯一值 - 这会导致PXCache中没有插入记录(Insert方法返回null而不是插入的值并且很可能导致在函数“MoveNext”中发生报告的未处理异常。您能否请仔细检查StyleColorSelected DAC的实现,并按如下方式更新代码,以验证关键字段是否设置了唯一值,并且记录始终插入到PXCache中。
foreach (InventoryItem line in soinvlineview.Cache.Cached)
{
if (line.Selected == true)
{
StyleColorSelected newline = new StyleColorSelected();
// if necessary assign unique values to key field(s) here
newline = styleselected.Insert(newline);
if (newline == null) throw PXException("StyleColorSelected was not inserted in the cache!");
newline.InventoryID = line.InventoryID;
styleselected.Update(newline);
}
}