在這個系列裏,Reinhard將和你們一塊兒探索在AX的窗體上執行操做時,都會觸發窗體、窗體數據源和表上的哪些方法,而且是以怎樣的順序觸發的。數據庫
此次,咱們來看看在窗體上修改或錄入數據的狀況。圖中所示的流程,是在理想狀況下的完整觸發過程。若是窗體控件、窗體數據源字段或表的驗證方法返回False,也可能會提早結束流程。orm

- 用戶在窗體上修改或錄入數據後,首先觸發了該字段的Form.Control.Validate()方法,若是該方法返回的是False,流程到此結束,用戶修改或錄入數據失敗 。
- 若是返回的是True,會觸發Form.Control.Modified()方法。若是這個字段是窗體數據源裏的字段,那麼當執行到Super()時,會調用該字段在窗體數據源中的Form.Datasource.Field.Validate()方法。
- 在Form.Datasource.Field.Validate()方法中,執行到Super()時,會調用表的Table.ValidateField()方法。Table.ValidateField()執行完畢後,會返回一個Boolean結果。
- 接着繼續執行Form.Datasource.Field.Validate()方法中Super()如下的代碼。Form.Datasource.Field.Validate()方法執行完畢後,會返回一個Boolean結果。若是返回的是False,則繼續執行Form.Control.Modified() 方法中Super()如下的代碼。
- 若是返回的是True,會調用該字段在窗體數據源中的 Form.Datasource.Field.Modified() 方法。
- 在Form.Datasource.Field.Modified() 方法中,執行到Super()時,會調用表的Table.ModifiedField()方法。Table.ModifiedField ()執行完畢後,繼續執行Form.Datasource.Field.Modified ()方法中Super()如下的代碼。
- Form.Datasource.Field.Modified ()方法執行完畢後,繼續執行Form.Control.Modified() 方法中Super()如下的代碼。
- Form.Control.Modified()方法執行完畢後,會返回一個Boolean結果。若是返回的是False,用戶修改或錄入數據失敗。
須要注意的一點是,直到Form.Control.Modified()方法執行結束,修改過的數據,依然在內存中,並未持久化到數據庫中。因此在作客製化開發的時候,不該在這個流程中所觸發的方法裏,直接執行更新數據庫的操做。blog