反饋已提交

網絡繁忙

使用UUID自動生成主鍵

1. 概述

1.1 問題描述

填報時沒有特定的欄位作為主鍵,希望能自動生成一串隨機字元來作為主鍵,且不能重複。效果如下圖 ID 欄位:

1.2 解決思路

FineReport 設計器內建了 UUID 函式,設定填報屬性時,主鍵的值可以使用該函式,產生唯一標識碼,實現編號的唯一性。

2. 範例

2.1 準備資料

建立資料集 ds1,SQL 語句為:SELECT * FROM book

2.2 設計填報表格

1)將資料集中的欄位拖到 A2~E2 儲存格中,並將 B2 儲存格設定為最左父格,F2 和 G2 儲存格新增 自訂的插入刪除按鈕,如下圖所示:

2)表格設計好後,先填報預覽看下,發現表中原來就是有資料的,且 ID 欄位下也有隨機字串。

現在想要讓表中已有的 ID 保持不變,插入新資料時可以生成新的 ID,那麼使用 UUID()函式該怎麼去實現呢?

2.3 設定填報屬性

給報表新增內建 SQL 提交,具體設定如下,其中 id 這個主鍵欄位的值設定為公式:if(len(A2)=0,UUID(32),A2)

公式的含義是,如果是插入的新行,那麼使用 UUID() 函式自動生成隨機字串,提交時入庫。如果是已有的資料行,這些資料行的 id 保持不變即可。

2.4 效果預覽

1)儲存報表,點選填報預覽,新增三行資料,ID 欄位空着,其他欄位填寫下,填完後點選提交。

2)重新整理頁面,可以發現,空着的 ID 欄位透過填報屬性 UUID 公式自動生成了字串,原來已有的 ID 也沒變。

注:支援 App 端和 H5 端預覽。

3. 範本下載

已完成範本參見:%FR_HOME%\webroot\WEB-INF\reportlets\doc\Form\使用UUID自動生成主鍵.cpt

點選下載範本:使用UUID自動生成主鍵 .cpt


4. 注意事項

4.1 頁面與入庫id不一致

儲存格使用 UUID 公式時,填報預覽介面得出的 id 值與入庫的 id 值不一致。如下圖所示:

這是由於公式編輯介面預設勾選了「填報/分析時,保留公式用於計算」,則填報提交時公式會二次計算,進而導致入庫時又重新生成了 id 。

解決該問題,只需要取消勾選 UUID() 所在儲存格公式設定介面的「填報/分析時,保留公式用於計算」。

4.2 提交成功後修改資料

填報成功後,如果沒重新整理頁面直接修改了某條資訊,會發現提交後新增了一筆資料,而沒有正常更新原資料。

填報成功後未重新整理頁面時修改某條資訊,雖然頁面上 id 值並沒有改變,但因公式勾選了「填報/分析時,保留公式用於計算」,每提交成功一次 UUID() 就會變化,導致新增多筆資料。

解決該問題,需要取消勾選 UUID() 所在儲存格公式設定介面的「填報/分析時,保留公式用於計算」。

4.3 資料集預覽時id列不顯示

填報成功後,資料庫表中可以看到 id 列已有資料,但在設計器中點選資料集預覽時,id 列沒有顯示,如下圖所示:

這是由於 FRDemo 中 book 表中的 id 欄位類型為 blob 類型,不支援資料集預覽。

想要讓 UUID 生成的隨機字元可以正常顯示。需要先將資料表清空,再將 id 欄位類型修改為 text 或者字串類型,填報成功後預覽即可顯示。

但是需要在表清空的情況下修改才生效,因為設計器會在填報第一筆資料時判斷其欄位類型,第一次判斷之後,再修改表欄位類型不會影響資料集預覽顯示。

4.4 多個內建 SQL 中使用 UUID

如果該填報表是多源填報類型,比如員工基礎資訊存在表 1 中,員工部門資訊存在表 2 中,表 1 與表 2 有相同的欄位「員工 ID」,填報時這兩張表都要儲存「員工 ID」。

此時必須在儲存格中使用 UUID() 生成員工編號,報表填報屬性設定兩個「內建 SQL 提交」,分別綁定表 1 和表 2 ,表 1 和表 2 的「員工 ID」欄位綁定同一個儲存格。

若使用在報表填報屬性中每張報表都使用 UUID() 函式,產生的序列號是不一樣的,此時會導致員工 ID 不一致的情況。

附件列表


主題: 填報應用
  • 有幫助
  • 沒幫助
  • 只是瀏覽
  • 圖片不清晰
  • 用語看不懂
  • 功能說明看不懂
  • 操作說明太簡單
  • 內容有錯誤
中文(繁體)

滑鼠選中內容,快速回饋問題

滑鼠選中存在疑惑的內容,即可快速回饋問題,我們將會跟進處理。

不再提示

10s後關閉

獲取幫助
線上支援
獲取專業技術支援,快速幫助您解決問題
工作日9:00-12:00,13:30-17:30在线
頁面反饋
針對當前網頁的建議、問題反饋
售前咨詢
業務咨詢
電話:0933-790886或 0989-092892
郵箱:taiwan@fanruan.com
頁面反饋
*問題分類
不能為空
問題描述
0/1000
不能為空

反馈已提交

网络繁忙