函数' MoveNext'

时间:2017-03-10 06:29:40

标签: acumatica

有谁知道这个错误消息的原因是什么?这是我认为触发该错误的代码。 (这来自我们的自定义项目),当我选择多个项目时会触发错误。

        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);
            }
        }

enter image description here

enter image description here

1 个答案:

答案 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);
    }
}