取消RowInserting事件会重置行中的字段

时间:2017-07-04 09:42:14

标签: acumatica

在我的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,但即使在这种情况下,行中的其他值也被重置。

1 个答案:

答案 0 :(得分:2)

在你的RowInserting事件中,你没有抛出错误,你正在提高它。

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

  1. 评估正在插入的数据记录。
  2. 通过抛出异常来取消插入操作。
  3. 将默认值分配给正在插入的数据记录的字段。
  4. 如果在行插入事件中使用throw语法,则会出现一个弹出窗口,其中包含您的错误消息,并且该记录在网格中不可见。你不应该在RowInserting中使用e.Cancel进行验证。

    取消插入的示例:

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

    来源:RowInserting Event

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

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