我在屏幕上具有标题/行结构,在输入数据时需要提供很大的灵活性,但要等到所有行项目都具有库存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,因此在验证标题保留字段时似乎需要一种特殊的技术来验证网格线。
我如何查看网格上未保存的数据(标题的子行)以进行验证,而又不使用户首先保留记录?
答案 0 :(得分:1)
然后调用数据视图的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)
{
}