Acumatica 取消行插入事件将重置行中的字段

Acumatica 取消行插入事件将重置行中的字段,acumatica,Acumatica,在acumatica应用程序中,我创建了一个自定义页面,用户需要在该页面的网格部分插入数据。为了验证提供的数据,我实现了行插入和行更新事件 问题在于,在rowinserting事件中,我首先使用以下代码抛出一个错误: cache.RaiseExceptionHandling<DZField.size>(fieldLine, fieldLine.Size, new PXSetPropertyException(string.Format(ValidationMessages.F

在acumatica应用程序中,我创建了一个自定义页面,用户需要在该页面的网格部分插入数据。为了验证提供的数据,我实现了行插入和行更新事件

问题在于,在rowinserting事件中,我首先使用以下代码抛出一个错误:

cache.RaiseExceptionHandling<DZField.size>(fieldLine, fieldLine.Size,
    new PXSetPropertyException(string.Format(ValidationMessages.FIELD_NOT_VALID_FORMAT, 
        "Size"), PXErrorLevel.RowError));
cache.RaiseExceptionHandling(fieldLine,fieldLine.Size,
新的PXSetPropertyException(string.Format(ValidationMessages.FIELD)格式无效,
“大小”),PXErrorLevel.RowError);
然后我将e.Cancel属性设置为true。但是,当用户更改不正确的值并重新触发事件时,该行将丢失未在事件中处理的值


我还试图不设置e.Cancel属性,而是抛出一个PXException,但即使在这种情况下,行中的其他值也被重置

在插入行事件中,您不是在抛出错误,而是在引发错误

从文档中,RowInserting事件处理程序用于:

  • 评估要插入的数据记录
  • 通过引发异常来取消插入操作
  • 为要插入的数据记录的字段指定默认值
  • 如果在行插入事件中使用throw语法,将出现一个弹出窗口,显示错误消息,并且记录在网格中不可见。您不应该在行插入中使用e.Cancel进行验证

    取消插入的示例:

    protected virtual void DACName_RowInserting(PXCache sender, 
                                                PXRowInsertingEventArgs e)
    {
        throw new PXException(ErrorMessages.FieldIsEmpty, 
                              typeof(PaymentMethodAccount.paymentMethodID).Name);
    }
    
    资料来源:

    关于行更新,使用e.Cancel进行验证将取消对该行标记为脏的所有字段的更新。有时这是你想要的,但基于你的问题,我认为这是你想要避免的

    验证单个字段时,可以使用字段更新事件,该事件不会影响其他字段或引发字段异常。在行事件中抛出错误或在行事件中设置e.Cancel将影响整行