資料來源:網路 |
前面提到 DevExtreme DataGrid Demo with DataSnap Server 1 + 2,已經知道 DevExtreme DataGrid 是如何向後端伺服器取得資料,其它的『新增』、『更新』、『刪除』要如何實作呢?
在實作之前,要先知道 DataGrid 是如何動作的。
新增
在單筆新增後,可以看到送出的 POST 參數,是 JSON Object。可以看到後端在新增後回傳完整的單筆記錄,連之前 Get 所沒有的欄位資料也全部出現。
修改
修改使用 PUT,而且只會送出主鍵資料及被修改的欄位資料。後端也是回傳完整的資料內容,應該是連同其它可能異動的畫面欄位一併刷新。
刪除
刪除使用 DELETE,僅送出主鍵資料。刪除資料就不會再回傳任何資訊。
單筆資料的處理到這裡可說是相當簡單易懂,但人生永遠不會是如此簡單。
DataGrid 批次處理是如何做的?
按照歷史經驗,可採用的批次處理作法有:
- 畫面批次編修後存檔,仍然逐筆和後端連結。
- 畫面批次編修後存檔,將編修的資料整包送到後端,由後端另行解析。
究竟 DataGrid 的背景是如何處理的,我們可以在 CodePen調整:
editing.mode =【batch】,設定後 CodePen 會主動重載程式內容。
可以看到右上角多了【存檔】和【取消存檔】按鈕。
批次新增、修改、刪除一氣呵成。
在經過一連串的新增、修改和刪除資料後,可以看到畫面上異動的資料會變色高亮。按下【存檔】後,可以看到 DataGrid 採用的是【1】逐筆向後端溝通的流程。
結論:
前端物件的行為會影響到後端程式的架構,所以事先了解前端物件如何作動是非常重要的。然而DataGrid的批次處理採用逐筆更新,這會影響到後端的交易(Transaction)行為,尤其是 Master-Details 架構下,並不適用 ACID,使用上必須特別留意。
如果有什麼設定可以讓 DataGrid 使用整包上傳,請讓我知道。:D
See also:
- Wiki - ACID
- DevExtreme - CRUD Operations
- T229551-dxdatagrid how to send all changes in a single request
沒有留言:
張貼留言