天天看點

資料采集錄入填報時如何隻更新目前修改行

在實際的項目開發中,填報表的應用十分廣泛。

多數情況下,填報表會作為整個項目的一部配置設定合需求靈活使用,下面就舉例介紹一下。

要求:

目前使用者在頁面上修改了某行資料,報表自動将使用者名更新到這些行的【操作人】字段,但在報表展現内容中不要顯示。

目前報表設計如下,首先實作基本的填報操作:

資料來源:

資料去向:

至此,填報表的基本功能已經實作, 下面我們繼續以這個報表為例看一下怎麼實作隻對修改過的行進行更新。

  1. 報表底端增加輔助格,用于擷取使用者名。
  1. 在資料回填執行 update 前對要更新的資料做處理。方式如下:

通過對比新舊對象的記錄來實作,如果新舊對象不同,則在新對象中保留不同的記錄供後面更新使用,如果新舊對象一緻則不參與執行更新,以此達到隻更新修改行的效果。

注:舊對象儲存的是修改前的資料,新對象儲存的是修改後的資料。

  1. 具體的資料處理過程如下:

資料來源腳本不做任何修改,資料去向腳本修改如下:

其中:

B1 單元格表達式:=employee.([編号, 部門, 姓名, 性别, 出生日期, 入職日期, 籍貫, 工資]),列出對象 employee 中需要對比的字段;

C1 單元格表達式: =employee_old.([編号, 部門, 姓名, 性别, 出生日期, 入職日期, 籍貫, 工資]),列出對象 employee_old 中需要對比的字段;

2-3 行 使用 for 循環對比 employee 與 employee_old 對象記錄并從 employee 中删除兩者相同的記錄,進而整理出被使用者修改的行;

A5 單元格 使用 db.update() 函數實作更新,這裡用變量 Operator 模拟背景擷取的使用者名。

其中,背景擷取目前使用者名可以參考以下執行個體:

在報表展現界面 showInput.jsp 中擷取使用者名,并将其拼接到系統變量 param 中,供更新使用

通過上面的腳本,我們就可以實作隻對修改過的行标記【操作人】了。

效果如下:

修改前,操作人為空。

在 Web 端通路報表,修改其中任意幾行

然後,在資料庫端查詢資料,檢查一下,我們會發現隻有剛才修改過的幾行才标記了【操作人】,Bingo!沒想到吧,就這麼輕松搞定了。

最最後,一定不要忘記把輔助格隐藏起來噢!!!

輔助行,行高設定為 0,這樣就完美了。

課外知識擴充

什麼是填報表:

通常我們看到的報表基本都是對已有資料的讀取展現,但還有一類報表不僅能讀取展現資料還可以做增删改的操作并與資料庫互動,這類報表我們稱為填報表。

填報表的用處有哪些:

作為一種“媒體”,如:收集各地區的某項名額資料,供中央彙總統計使用;

作為稽核流程的“材料”,如:項目經理填寫預算報表,送出後由對應部門審批處理。

填報更新原理:

目前,行式填報表在送出的時會自動對比修改前和修改後的資料:首先對比主鍵,根據主鍵是否有新增或缺失确定資料的增删操作;然後再針對前後都有的記錄對比每條記錄值是否有不同,如有不同則執行 update 操作。

是以,建議資料處理(資料來源、資料去向)中的字段名稱與報表中的字段名稱個數要保持一緻,不然填報更新時就會因新舊對象字段不比對導緻更新失敗。

另外細心的你會發現,更新前後的資料是分開編輯的,這樣設計有什麼好處?容我賣個關子,想了解更多的就關注關注我吧!!!