需求描述:
使用者在頁面端修改資料時為保證資料的可追溯性,可以在資料表中增加修改人字段,用于儲存修改人的資訊,追溯資料的有效性。下面就介紹一下如何實作這個需求。
解決方案
一:填報表制作
按照使用者的需求制作填報表,如“訂單資訊表”:
1、 建立填報表,新增參數:userid,用于接收系統傳進來的使用者資訊。
2、 在“資料處理”對話框中中把“資料來源”設定為使用“腳本”方式,如圖:

3、 在“資料處理”對話框中把“資料去向”也設定為使用“腳本”,如圖:
注意:B2 中 EDITUSER 字段為資料庫中的修改人字段,将其指派為 userid,表示更新時将參數 userid 的值儲存到對應字段中。
4、 制作填報表,如下圖:
A3 設定單元格類型為次元格,表達式為 =dd.(DDID),dd 為資料來源中定義的資料對象名稱,此單元格取表中 DDID 的值,字段名稱中設定 dd.DDID。
B3~E3 單元格類型設定成數值格,用于填寫資訊,按照填報表取字段名稱規則,B3 單元格預設取其上方單元格為字段名稱,由于資料庫中存儲的是英文字段名“KHID”,和 B2 中的“客戶編号”不一緻,是以為取出正确資料,在 B3 單元格的字段名稱中設定“KHID”,指定單元格字段名稱,其餘類似。
按照客戶樣式要求調整報表樣式,并儲存報表即可。
5、 釋出報表并設定參數傳遞
在浏覽器中通路該報表,并且在 url 中将使用者編号傳遞給參數 userid,如:
http://localhost:6868/demo/reportJsp/showInput.jsp?sht=ddxx.sht&userid=zhangsan參數可以在 url 中傳遞,為保證其安全性,使用者資訊可能存在 session 中,那麼在 showInput.jsp 中擷取 session 中的使用者資訊,并傳遞給報表标簽的 params 标簽即可,傳遞格式:參數名稱 = 參數值。
報表展現後,格式如下:
頁面端修改資料儲存後,去資料庫端檢視資料發現,EDITUSER 字段資料為傳入的使用者資訊,如下圖:
發現問題
實際使用中發現,使用者可能隻修改了某幾條記錄,但是資料庫中的 EDITUSER 字段的所有資料都會發生變化,而使用者需求肯定是隻更改該使用者修改的資料。
問題原因及解決辦法:
前面更新資料采用的是集算腳本中的 update 函數,該函數處理時會根據新舊對象資料進行判斷,進而判定處理時是 update、insert 還是 delete 操作。是以解決辦法就是在新舊對象中删除沒有修改的資料即可,下面是更改後的資料去向腳本:
B1 中通過 join 函數将兩個對象關聯在一起,此時關聯字段是對象中的所有字段,這樣可以找到沒有修改的資料。
C1 中取出兩個對象中所有資料相同 (沒有修改的) 的主鍵字段
A2、B2 中分别從兩個對象中根據 C1 的值過濾出沒有修改的資料
A3、B3 删除沒有修改的資料,這樣兩個對象中的資料均為使用者頁面端修改後的資料,再執行 update 操作即可。資料庫中資料如下:
可見,隻有頁面端修改的資料 EDITUSER 字段的值會發生變化,其餘不變,這樣就可以定位到具體哪些資料被哪些人做了修改。
總結:
本例中通過在腳本中對填報對象的資料進行修改,做到了在相應資料表中更新最後修改人字段,并且能精确到他修改的資料。實際應用中也可以增加最後修改時間等,或者在腳本中做更複雜的業務處理。
作者:gxy
連結:
http://c.raqsoft.com.cn/article/1540825011256?r=IBelieve來源:乾學院
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。