1. 概述
1.1 問題描述
想實現在填報聯動的基礎上,選擇第一個元件的值後,其他相關元件可以聯動出可選範圍內的第一個值。
1.2 實現思路
當儲存格元件的值聯動和資料字典聯動都設定了的情況下,觸發資料字典聯動時,會清空儲存格值,造成值聯動失效。所以要同時實現值聯動和資料字典聯動的話,需透過 JS 方法對儲存格進行指派。API說明可以參考:API匯總
注:不支援行動端。
2. 範例
2.1 設計表格
B1、D1、F1 儲存格新增下拉框元件,如下圖所示:
2.2 設定元件的資料字典聯動
給三個元件分別設定下拉框資料字典,類型設定選擇公式,輸入實際值與顯示值,如下圖所示:
三個元件僅實際值不同,顯示值都為 $$$,實際值分別為:
B1:sql("FRDemoTW", "SELECT 貨主地區 FROM 訂單", 1)
D1:sql("FRDemoTW", "SELECT 貨主省份 FROM 訂單 where 貨主地區='" + B1 + "'", 1)
F1:sql("FRDemoTW", "SELECT 貨主城市 FROM 訂單 where 貨主地區='" + B1 + "' and 貨主省份='" + D1 + "'", 1)
2.3 設定元件的值聯動
1)給 B1 儲存格的下拉框元件新增編輯後事件。
JavaScript 程式碼如下:
var row = FR.cellStr2ColumnRow(this.options.location).row + 1;
//獲取當前行號
var area = this.getValue();
//獲取當前元件值
var province = FR.remoteEvaluate('sql("FRDemoTW","select 貨主省份 from 訂單 where 貨主地區=\'' + area + '\'",1,1)');
//根據當前選擇的地區查詢出對應的第一個省份
var city = FR.remoteEvaluate('sql("FRDemoTW","select 貨主城市 from 訂單 where 貨主地區=\'' + area + '\' and 貨主省份=\'' + province + '\'",1,1)');
//根據當前選擇的地區和對應的第一個省份,查詢出對應的第一個城市
setTimeout(function() {
_g().setCellValue('D' + row, null, province);
//給當前行的省份儲存格指派
}, 200)
2)同樣給 D1 元件也新增編輯後事件。
JavaScript 程式碼如下:
var row = FR.cellStr2ColumnRow(this.options.location).row + 1;
//獲取當前行號
var area = _g().getCellValue('B' + row, null);
//獲取當前行的地區值
var province = this.getValue();
//獲取當前元件值
var city = FR.remoteEvaluate('sql("FRDemoTW","select 貨主城市 from 訂單 where 貨主地區=\'' + area + '\' and 貨主省份=\'' + province + '\'",1,1)');
//根據當前選擇的地區和省份,查詢出對應的第一個城市
setTimeout(function() {
_g().setCellValue('F' + row, null, city);
//給當前行的城市儲存格指派
}, 500)
2.4 關閉腳本呼叫公式限制
由於範例中使用腳本呼叫了一些公式,需要開啟數據決策系統,點選管理系統>安全管理,將腳本呼叫公式限制右邊的按鈕關閉掉,如下圖所示:
2.5 效果預覽
儲存報表,點選填報預覽,最終的效果下圖所示:
3. 範本下載
點選下載範本:JS实现填报联动自动生成默认值.cpt