反饋已提交

網絡繁忙

使用UUID自動生成主鍵

一、概述

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

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

二、範例

1
準備資料。
  1. 建立資料集 ds1,SQL 語句為:【SELECT * FROM book】。

2
設計填報表格。
  1. 將資料集中的欄位拖到 A2~E2 儲存格中,F2 和 G2 儲存格新增 自訂的插入刪除按鈕,如下圖所示。

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

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

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

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

4
效果預覽。
  1. 儲存報表,點選【填報預覽】,新增三列資料,ID 欄位空着,其他欄位填寫下,填完後點選提交。

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

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

三、範本下載

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

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

四、注意事項

1
頁面與入庫id不一緻。
  1. 儲存格使用 UUID 公式時,填報預覽介面得出的 id 值與入庫的 id 值不一緻。

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

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

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

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

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

3
資料集預覽時id列不顯示。
  1. 填報成功後,資料庫表中可以看到 id 列已有資料,但在設計器中點選資料集預覽時,id 列沒有顯示。

  2. 這是由於 FRDemoTW 中 stock 表中的 id 欄位型別為 blob 型別,不支援資料集預覽。

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

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

4
多個內建 SQL 中使用 UUID。
  1. 如果該填報表是多源填報型別,比如員工基礎資訊存在表 1 中,員工部門資訊存在表 2 中,表 1 與表 2 有相同的欄位【員工 ID】,填報時這兩張表都要儲存【員工 ID】。

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

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

附件列表


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

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

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

不再提示

10s後關閉

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

反馈已提交

网络繁忙