2017-07-04 36 views
1

在我的acumatica應用程序中,我創建了一個自定義頁面,用戶需要在網格部分插入數據。爲了驗證提供的數據,我實現了RowInserting和RowUpdating事件。正在取消RowInserting事件重置行中的字段

的問題是,在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,但即使在這種情況下,行中的其他值也被重置。

回答

2

在你的RowInserting事件中,你沒有拋出錯誤,你正在提高它。

從文檔中,RowInserting事件處理程序用於:

  1. 評估正被插入的數據記錄。
  2. 通過拋出異常取消插入操作。
  3. 將默認值分配給正在插入的數據記錄的字段。

如果在行插入事件中使用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將影響整行。