历史版本22 :JS实现填报联动自动生成默认值 返回文档
编辑时间: 内容长度:图片数:目录数: 修改原因:

目录:

1. 概述编辑

1.1 问题描述

想实现在填报联动的基础上,选择第一个控件的值后,其他相关控件可以联动出可选范围内的第一个值。

222

1.2 实现思路

当单元格控件的值联动和数据字典联动都设置了的情况下,触发数据字典联动时,会清空单元格值,造成值联动失效。所以要同时实现值联动和数据字典联动的话,需通过 JS 方法对单元格进行赋值。接口说明可以参考:控件接口单元格接口

注:不支持移动端。


2. 示例编辑

2.1 设计表格

B1、D1、F1 单元格添加下拉框控件,如下图所示:

Snag_6bdc96a1.png

2.2 设置控件的数据字典联动

给三个控件分别设置下拉框数据字典,类型设置选择公式,输入实际值与显示值,如下图所示:

三个控件仅实际值不同,显示值都为 $$$,实际值分别为:

B1:sql("FRDemo", "SELECT 货主地区 FROM 订单", 1)

D1:sql("FRDemo", "SELECT 货主省份 FROM 订单 where 货主地区='" + B1 + "'", 1)

F1:sql("FRDemo", "SELECT 货主城市 FROM 订单 where 货主地区='" + B1 + "' and 货主省份='" + D1 + "'", 1)

2.4 设置控件的值联动

1)给 B1 单元格的下拉框控件添加编辑结束事件。

JavaScript 代码如下:

var row = FR.cellStr2ColumnRow(this.options.location).row + 1;
//获取当前行号
var area = this.getValue();
//获取当前控件值
var province = FR.remoteEvaluate('sql("FRDemo","select 货主省份 from 订单 where 货主地区=\'' + area + '\'",1,1)');
//根据当前选择的地区查询出对应的第一个省份
var city = FR.remoteEvaluate('sql("FRDemo","select 货主城市 from 订单 where 货主地区=\'' + area + '\' and 货主省份=\'' + province + '\'",1,1)');
//根据当前选择的地区和对应的第一个省份,查询出对应的第一个城市
setTimeout(function() {
_g().setCellValue('D' + row, null, province);
//给当前行的省份单元格赋值
_g().setCellValue('F' + row, null, city);
//给当前行的城市单元格赋值
}, 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("FRDemo","select 货主城市 from 订单 where 货主地区=\'' + area + '\' and 货主省份=\'' + province + '\'",1,1)');
//根据当前选择的地区和省份,查询出对应的第一个城市
setTimeout(function() {
_g().setCellValue('F' + row, null, city);
//给当前行的城市单元格赋值
}, 500)

2.5 关闭脚本调用公式限制

由于示例中使用脚本调用了一些公式,需要打开数据决策系统,点击管理系统>安全管理,将脚本调用公式限制右边的按钮关闭掉,如下图所示:

image.png

2.6 效果预览

保存报表,点击填报预览,最终的效果下图所示:

222


3. 模板下载编辑