1. 概述
1.1 問題描述
在制作填報模板時,經常遇到單元格控件勾選了多個指标,出現以下兩種情況:
1)當填報時存在主鍵時,即做修改操作,提交成功後卻只保留了一個值。
舉例:
我們在「下拉複選框控件」勾選了「佳佳樂、康富食品、秒生、爲全」 4 個指标後提交入庫,刷新頁面後,發現只保留了一個最後勾選的指标「爲全」。
2)當填報時不存在主鍵時,即做添加操作,提交成功後數據庫則會錄入多條數據。
舉例:
使用「産品」表添加一條測試數據進行填報,供應商選擇了 3 個指标後提交入庫後,發現「産品」表中新增了 3 條數據。
而我們希望「下拉複選框控件」多選值提交後,能在一條數據中正确顯示多個值,該如何處理呢?
1.2 解決思路
「下拉複選框控件」的返回值類型默認爲「數組」,上述兩種情況返回值類型需要爲「字符串」,所以導緻填報結果不正确。
處理方法:将「下拉複選框控件」的返回值類型由「數組」改爲「字符串」即可。
注:修改操作和添加操作的解決思路一緻。
2. 示例
2.1 準備模板
打開内置模板 %FR_HOME%\webapps\webroot\WEB-INF\reportlets\doc\Form\LineForm\LineForm1.cpt
2.2 設置下拉複選框控件
将 D3 單元格控件修改爲「下拉複選框控件」,返回值類型爲「字符串」,其它默認。步驟如下圖所示:
2.3 設置數據字典
給 D3 單元格設置「數據字典」,類型設置爲「數據庫表」,數據庫選擇「FRDemo」,數據庫表選擇「供應商」,實際值爲「供應商ID」,顯示值爲「公司名稱」。步驟如下圖所示:
2.4 設置公式形态
選中 D3 單元格,設置「單元格屬性>形态>公式形态」,定義公式形态:sql("FRDemo", "select DISTINCT 公司名稱 from 供應商 where 供應商ID in (" + $$$ + ")", 1,null)
步驟如下圖所示:
注:公式 sql("FRDemo", "select DISTINCT 顯示值字段 from 表名 where 實際值字段 in (" + $$$ + ")", 1,null) 使得鼠标離開單元格時,單元格内容能展示顯示值而不是實際值。
2.5 修改字段類型
設計器内置數據庫表「産品」中「供應商ID」字段類型爲 integer,需要先将其修改爲 text 類型,才可以存儲字符串類型的值。否則提交入庫時會提示報錯:數據列類型不匹配。
2.6 效果預覽
1)PC端
保存報表,點擊「填報預覽」,效果如下圖所示:
2)移動端
保存報表,點擊「移動端預覽」,點擊「填報」,App 端和 H5 端均支持,效果如下圖所示:
注:下拉複選框控件、單選按鈕組控件、複選框組控件 等多選控件都有類似的問題,請參考本文檔處理。
3. 模板下載
已完成模板可參見:%FR_HOME%\webapps\webroot\WEB-INF\reportlets\doc\Form\LineForm\下拉複選框多選值進行填報時出現的問題及解決方案.cpt
點擊下載模板:下拉複選框多選值進行填報時出現的問題及解決方案.cpt