在我的acumatica应用程序中,我创建了一个自定义页面,用户需要在网格部分插入数据。为了验证提供的数据,我实现了RowInserting和RowUpdating事件。
问题是在rowinserting事件中我首先使用以下代码抛出错误:
cache.RaiseExceptionHandling<DZField.size>(fieldLine, fieldLine.Size,
new PXSetPropertyException(string.Format(ValidationMessages.FIELD_NOT_VALID_FORMAT,
"Size"), PXErrorLevel.RowError));
然后我将e.Cancel属性设置为true。但是当用户更改错误的值并重新触发事件时,该行将具有缺少的值,这些值在事件中未被操纵。
我也尝试不设置e.Cancel属性而是抛出PXException,但即使在这种情况下,行中的其他值也被重置。
答案 0 :(得分:2)
在你的RowInserting事件中,你没有抛出错误,你正在提高它。
从文档中,RowInserting事件处理程序用于:
如果在行插入事件中使用throw语法,则会出现一个弹出窗口,其中包含您的错误消息,并且该记录在网格中不可见。你不应该在RowInserting中使用e.Cancel进行验证。
取消插入的示例:
protected virtual void DACName_RowInserting(PXCache sender,
PXRowInsertingEventArgs e)
{
throw new PXException(ErrorMessages.FieldIsEmpty,
typeof(PaymentMethodAccount.paymentMethodID).Name);
}
关于行更新,使用e.Cancel进行验证将取消对该行标记为脏的所有字段的更新。有时这就是你想要的,但根据你的问题,我认为这是你想要避免的事情。
验证单个字段时,您可以使用字段更新事件,该事件不会影响其他字段或引发字段例外。在行事件中抛出错误或在行事件中设置e.Cancel将影响整行。