取消保留标头时,如何验证未保存的网格记录?

时间:2019-06-25 15:12:55

标签: acumatica

我在屏幕上具有标题/行结构,在输入数据时需要提供很大的灵活性,但要等到所有行项目都具有库存ID时才可以取消记录。在创建记录时,可能不存在库存ID,因此我无法在初始输入时填写必填的库存ID字段。

我希望PXSelect可以从数据库中提取所有新记录,但从条目中保留当前缓存的数据。相反,我发现在保存记录之前,似乎无法通过PXSelect访问新的订单项。这意味着取消选中“暂停”将忽略我在屏幕上看到的库存ID,下面的代码将生成“ NoInventoryID”的异常。

#region MyHdr_Hold_FieldVerifying
protected virtual void _(Events.FieldVerifying<MyHdr.hold> e)
{
    if ((bool?)e.NewValue == true) return;

    MyHdr row = (MyHdr)e.Row;

    MyLine line =
    PXSelect<MyLine, Where<MyLine.hdrID, Equal<Current<MyHdr.hdrID>>>>
        .SelectSingleBound(this, new object[] { e.Row });
    if (line == null)
        throw new PXSetPropertyException(Messages.NoLines, PXErrorLevel.Warning);

    line =
    PXSelect<MyLine, Where<MyLine.hdrID, Equal<Current<MyHdr.hdrID>>, And<MyLine.inventoryID, NotEqual<Null>>>>
        .SelectSingleBound(this, new object[] { e.Row });
    if (line != null)
        throw new PXSetPropertyException(Messages.NoInventoryID, PXErrorLevel.Warning);
}
#endregion

我在“库存ID”字段上有CommitChanges = True,因此在验证标题保留字段时似乎需要一种特殊的技术来验证网格线。

我如何查看网格上未保存的数据(标题的子行)以进行验证,而又不使用户首先保留记录?

1 个答案:

答案 0 :(得分:1)

查找数据视图的名称: enter image description here

然后调用数据视图的Select方法以获取记录。

对于从PXGraph继承的新图形:

foreach (SOLine line in Transactions.Select())
{
}

对于从PXGraphExtension继承的图形扩展,您需要添加Base前缀:

foreach (SOLine line in Base.Transactions.Select())
{
}

对于包含多个DAC的数据视图,可以使用PXResult访问它们。

> PXSelect<DAC1, InnerJoin<DAC2>, LeftJoin<DAC3>>

foreach (PXResult<DAC1, DAC2, DAC3> results in DataView.Select())
{
    DAC1 dac1 = (DAC1)results;
    DAC2 dac2 = (DAC2)results;
    DAC3 dac3 = (DAC3)results;
}

最后,屏幕上显示的所有数据都应位于缓存集合之一中。 如果在图形扩展的上下文中使用,则还需要以Base为前缀:

foreach (SOLine line in Caches[typeof(SOLine)].Inserted)
{
}

foreach (SOLine line in Caches[typeof(SOLine)].Updated)
{
}