反饋已提交
網絡繁忙
填報時沒有特定的欄位作為主鍵,希望能自動生成一串隨機字元來作為主鍵,且不能重複。效果如下圖 ID 欄位:
FineReport 設計器內建了 UUID 函式,設定填報屬性時,主鍵的值可以使用該函式,產生唯一標識碼,實現編號的唯一性。
建立資料集 ds1,SQL 語句為:SELECT * FROM book
1)將資料集中的欄位拖到 A2~E2 儲存格中,並將 B2 儲存格設定為最左父格,F2 和 G2 儲存格新增 自訂的插入刪除按鈕,如下圖所示:
2)表格設計好後,先填報預覽看下,發現表中原來就是有資料的,且 ID 欄位下也有隨機字串。
現在想要讓表中已有的 ID 保持不變,插入新資料時可以生成新的 ID,那麼使用 UUID()函式該怎麼去實現呢?
給報表新增內建 SQL 提交,具體設定如下,其中 id 這個主鍵欄位的值設定為公式:if(len(A2)=0,UUID(32),A2)
公式的含義是,如果是插入的新行,那麼使用 UUID() 函式自動生成隨機字串,提交時入庫。如果是已有的資料行,這些資料行的 id 保持不變即可。
1)儲存報表,點選填報預覽,新增三行資料,ID 欄位空着,其他欄位填寫下,填完後點選提交。
2)重新整理頁面,可以發現,空着的 ID 欄位透過填報屬性 UUID 公式自動生成了字串,原來已有的 ID 也沒變。
注:支援 App 端和 H5 端預覽。
已完成範本參見:%FR_HOME%\webroot\WEB-INF\reportlets\doc\Form\使用UUID自動生成主鍵.cpt
點選下載範本:使用UUID自動生成主鍵 .cpt
儲存格使用 UUID 公式時,填報預覽介面得出的 id 值與入庫的 id 值不一致。如下圖所示:
這是由於公式編輯介面預設勾選了「填報/分析時,保留公式用於計算」,則填報提交時公式會二次計算,進而導致入庫時又重新生成了 id 。
解決該問題,只需要取消勾選 UUID() 所在儲存格公式設定介面的「填報/分析時,保留公式用於計算」。
填報成功後,如果沒重新整理頁面直接修改了某條資訊,會發現提交後新增了一筆資料,而沒有正常更新原資料。
填報成功後未重新整理頁面時修改某條資訊,雖然頁面上 id 值並沒有改變,但因公式勾選了「填報/分析時,保留公式用於計算」,每提交成功一次 UUID() 就會變化,導致新增多筆資料。
解決該問題,需要取消勾選 UUID() 所在儲存格公式設定介面的「填報/分析時,保留公式用於計算」。
填報成功後,資料庫表中可以看到 id 列已有資料,但在設計器中點選資料集預覽時,id 列沒有顯示,如下圖所示:
這是由於 FRDemo 中 book 表中的 id 欄位類型為 blob 類型,不支援資料集預覽。
想要讓 UUID 生成的隨機字元可以正常顯示。需要先將資料表清空,再將 id 欄位類型修改為 text 或者字串類型,填報成功後預覽即可顯示。
但是需要在表清空的情況下修改才生效,因為設計器會在填報第一筆資料時判斷其欄位類型,第一次判斷之後,再修改表欄位類型不會影響資料集預覽顯示。
如果該填報表是多源填報類型,比如員工基礎資訊存在表 1 中,員工部門資訊存在表 2 中,表 1 與表 2 有相同的欄位「員工 ID」,填報時這兩張表都要儲存「員工 ID」。
此時必須在儲存格中使用 UUID() 生成員工編號,報表填報屬性設定兩個「內建 SQL 提交」,分別綁定表 1 和表 2 ,表 1 和表 2 的「員工 ID」欄位綁定同一個儲存格。
若使用在報表填報屬性中每張報表都使用 UUID() 函式,產生的序列號是不一樣的,此時會導致員工 ID 不一致的情況。
滑鼠選中內容,快速回饋問題
滑鼠選中存在疑惑的內容,即可快速回饋問題,我們將會跟進處理。
不再提示
10s後關閉
反馈已提交
网络繁忙