1. 程式人生 > >行式填報表輕鬆搞定流水號

行式填報表輕鬆搞定流水號

在各式各樣的報表業務需求中,有這樣一類,不僅要對資料進行統計呈現,還要基於這些資料做增、刪、改的操作並與資料庫進行互動。這種情況下,無論從資料庫統一管理還是資料合法性角度考慮,都難免需要進行諸如自動計算、校驗、跨表取數之類的計算。今天,小編就帶領大家 get 其中的一個新姿勢:自動計算特殊用法之“流水號

場景舉慄如下:

實際專案應用中,當多使用者併發填報時我們常常會遇到主鍵重複的問題,造成的結果便是前一個使用者填報的內容,會被另一個使用者給覆蓋掉,從而造成資料丟失。如果由開發人員通過程式設計來解決這個問題,一般都是比較麻煩的事情。而如果交由資料庫去處理,就變得簡單多了,因為不管多少個使用者,對資料庫來說只是一個更新資料庫的命令佇列,資料庫本身會對主鍵的問題進行判斷。這也就是大多數資料庫能夠提供欄位自動增長功能的原因。

不過選對了報表工具,我們也可以不依賴資料庫就輕鬆生成流水號,避免因為主鍵重複造成資料丟失。下面我們就以潤乾報表為例,看一下具體的做法:

方法一:序號格

報表設計介面如下圖所示:

其中,

資料處理部分選擇【多源 SQL】然後【使用嚮導生成指令碼】,“資料來源”設定如下:

“資料去向”指定編號欄位作為主鍵,如下圖所示:

儲存物件的舊資料,提取前兩步設定的物件名供報表取數回填使用。

報表設計方面

第 2 行標題名均與資料庫欄位名稱一致;

A3 單元格,設定欄位名稱為 employee. 編號;

I3 單元格,表示式為 =H3*1.2, 實現自動計算;

A3-I4 單元格型別為數值格。

要求新增行時,編號自動增長,最終效果如下圖所示

重點來了,實現方法只需選中 A3 單元格,勾選右側屬性【型別】–【序號格】即可。

【注】此方法採用資料全查詢且按照間隔為 1 的遞增規則,也就是在當前值的基礎上進行遞增計算,然後把每一次計算出的新值作為當前值。

方法二:UUID 演算法

首先,在報表展現的 jsp(如:previewInput.jsp) 頁面中定義 js 方法如下:

 

    function newUUID()

    {

            var uuid = "";

            for (var i = 1; i <= 16; i++){

             var n = Math.floor(Math.random()*16.0).toString(16);

             uuid +=   n;

          }

        var len = uuid.length;

        return uuid;   

    }

 

然後,修改方法一中的報表,不要勾選【序號格】,然後將【預設值表示式】設定為 newUUID(),呼叫自定義的 UUID 演算法。如下圖

最終頁面上新增行展現效果如下,生成 16 位的字串。

【注】此方法將按照一定規則隨機產生主鍵,由數字、字串等組成的 16 位字串。

通過以上 2 種方法,我們在報表端就可以輕輕鬆鬆搞定主鍵自增長,永久避免因主鍵衝突導致資料丟失的事情。

最最後,我們來回顧一下其中的技術要點:

1. 生成間隔為 1 的連續遞增數值做主鍵:

【技能】報表設計區域右側屬性欄–型別–序號格 勾選即可。

2. 生成由數字,字母組成的 16 位隨機字串做主鍵:

【技能】巧妙運用 UUID 方法 +【預設值表示式】。

作者:IBelieve
連結:http://c.raqsoft.com.cn/article/1542937624221?r=IBelieve
來源:乾學院
著作權歸作者所有。商業轉載請聯絡作者獲得授權,非商業轉載請註明出處。