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