行式填报表轻松搞定流水号
在各式各樣的報(bào)表業(yè)務(wù)需求中,有這樣一類,不僅要對(duì)數(shù)據(jù)進(jìn)行統(tǒng)計(jì)呈現(xiàn),還要基于這些數(shù)據(jù)做增、刪、改的操作并與數(shù)據(jù)庫進(jìn)行交互。這種情況下,無論從數(shù)據(jù)庫統(tǒng)一管理還是數(shù)據(jù)合法性角度考慮,都難免需要進(jìn)行諸如自動(dòng)計(jì)算、校驗(yàn)、跨表取數(shù)之類的計(jì)算。今天,小編就帶領(lǐng)大家 get 其中的一個(gè)新姿勢(shì):自動(dòng)計(jì)算特殊用法之“流水號(hào)”。
場(chǎng)景舉栗如下:
實(shí)際項(xiàng)目應(yīng)用中,當(dāng)多用戶并發(fā)填報(bào)時(shí)我們常常會(huì)遇到主鍵重復(fù)的問題,造成的結(jié)果便是前一個(gè)用戶填報(bào)的內(nèi)容,會(huì)被另一個(gè)用戶給覆蓋掉,從而造成數(shù)據(jù)丟失。如果由開發(fā)人員通過編程來解決這個(gè)問題,一般都是比較麻煩的事情。而如果交由數(shù)據(jù)庫去處理,就變得簡(jiǎn)單多了,因?yàn)椴还芏嗌賯€(gè)用戶,對(duì)數(shù)據(jù)庫來說只是一個(gè)更新數(shù)據(jù)庫的命令隊(duì)列,數(shù)據(jù)庫本身會(huì)對(duì)主鍵的問題進(jìn)行判斷。這也就是大多數(shù)數(shù)據(jù)庫能夠提供字段自動(dòng)增長(zhǎng)功能的原因。
不過選對(duì)了報(bào)表工具,我們也可以不依賴數(shù)據(jù)庫就輕松生成流水號(hào),避免因?yàn)橹麈I重復(fù)造成數(shù)據(jù)丟失。下面我們就以潤(rùn)乾報(bào)表為例,看一下具體的做法:
方法一:序號(hào)格
報(bào)表設(shè)計(jì)界面如下圖所示:
其中,
數(shù)據(jù)處理部分選擇【多源 SQL】然后【使用向?qū)赡_本】,“數(shù)據(jù)來源”設(shè)置如下:
“數(shù)據(jù)去向”指定編號(hào)字段作為主鍵,如下圖所示:
保存對(duì)象的舊數(shù)據(jù),提取前兩步設(shè)置的對(duì)象名供報(bào)表取數(shù)回填使用。
報(bào)表設(shè)計(jì)方面
第 2 行標(biāo)題名均與數(shù)據(jù)庫字段名稱一致;
A3 單元格,設(shè)置字段名稱為 employee. 編號(hào);
I3 單元格,表達(dá)式為 =H3*1.2, 實(shí)現(xiàn)自動(dòng)計(jì)算;
A3-I4 單元格類型為數(shù)值格。
要求新增行時(shí),編號(hào)自動(dòng)增長(zhǎng),最終效果如下圖所示
重點(diǎn)來了,實(shí)現(xiàn)方法只需選中 A3 單元格,勾選右側(cè)屬性【類型】–【序號(hào)格】即可。
【注】此方法采用數(shù)據(jù)全查詢且按照間隔為 1 的遞增規(guī)則,也就是在當(dāng)前值的基礎(chǔ)上進(jìn)行遞增計(jì)算,然后把每一次計(jì)算出的新值作為當(dāng)前值。
方法二:UUID 算法
首先,在報(bào)表展現(xiàn)的 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;???
? ? }
?
然后,修改方法一中的報(bào)表,不要勾選【序號(hào)格】,然后將【缺省值表達(dá)式】設(shè)置為 newUUID(),調(diào)用自定義的 UUID 算法。如下圖
最終頁面上新增行展現(xiàn)效果如下,生成 16 位的字符串。
【注】此方法將按照一定規(guī)則隨機(jī)產(chǎn)生主鍵,由數(shù)字、字符串等組成的 16 位字符串。
通過以上 2 種方法,我們?cè)趫?bào)表端就可以輕輕松松搞定主鍵自增長(zhǎng),永久避免因主鍵沖突導(dǎo)致數(shù)據(jù)丟失的事情。
最最后,我們來回顧一下其中的技術(shù)要點(diǎn):
1. 生成間隔為 1 的連續(xù)遞增數(shù)值做主鍵:
【技能】報(bào)表設(shè)計(jì)區(qū)域右側(cè)屬性欄–類型–序號(hào)格 勾選即可。
2. 生成由數(shù)字,字母組成的 16 位隨機(jī)字符串做主鍵:
【技能】巧妙運(yùn)用 UUID 方法 +【缺省值表達(dá)式】。
作者:IBelieve
鏈接:http://c.raqsoft.com.cn/article/1542937624221?r=IBelieve
來源:乾學(xué)院
著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。
轉(zhuǎn)載于:https://www.cnblogs.com/IBelieve002/p/10036722.html
總結(jié)
以上是生活随笔為你收集整理的行式填报表轻松搞定流水号的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: BZOJ1299[LLH邀请赛]巧克力棒
- 下一篇: Nginx设置静态页面压缩和缓存过期时间