永洪社区

标题: 参数1控制参数2全选或全不选的脚步如何编写? [打印本页]

作者: 咕咕吉    时间: 2024-3-28 10:39
标题: 参数1控制参数2全选或全不选的脚步如何编写?
本帖最后由 yhdata_kY2oZeOp 于 2024-3-28 10:41 编辑

当前有:下拉参数1,只能单选“是”“否”;
列表参数2,可以多选a/b/c/d/e/f/g/h;
希望实现:
参数1选“是”,参数2全选,参数1选否,参数2全不选
这个脚本怎么写?只会写一半,全选那个不会写
if (参数1.value= "否") {
    参数2.setSelectedObjects(null);
    }
  else {
    //这里全选怎么写?后面的写法?参数2.setSelectedObjects([a,b,c,d,e,f,g,h],STRING);
  }


作者: 美滋滋    时间: 2024-3-28 10:39
本帖最后由 美滋滋 于 2024-3-29 10:40 编辑

我大概知道问题了。你的列表参数组件可能不是绑定的数据集中的字段,是自定义的数据吧?
你换下面的脚本试试,应该可以了。

var a = 列表参数1.getObjects();
var arr = [];
for (i=0;i<a.length;i++) {
    arr.push(a【i】【0】)
}
列表参数1.setSelectedObjects(arr,STRING)

##特别说明1:论坛输入"[]" 时候有问题,故此我上面的脚本中用的全角输入的,你要把全角"【】"换成半角"[]"
##特别说明2:如果是自定义编辑的数据,那么执行  a = getData("列表参数1",DATA) 这条语句时,无法获取到自定义编辑的数据,故此会报空指针错误。

作者: yhdata_lyaa    时间: 2024-3-28 10:49
全选脚本参考看看https://club.yonghongtech.com/thread-32650-1-1.html
作者: 美滋滋    时间: 2024-3-28 11:07
下面的脚本是对列表参数全选的脚本,供参考
var a = getData("列表参数1",DATA);
var b = toArray(a,0)
列表参数1.setSelectedObjects(b,STRING)
作者: Efheih    时间: 2024-3-28 11:18
参数2.pageSelection = true;(全选:true,不选:false)
作者: 美滋滋    时间: 2024-3-28 11:23
yhdata_Efheih 发表于 2024-3-28 11:18
参数2.pageSelection = true;(全选:true,不选:false)

你确定这样可以?
去实际验证一下哈。
作者: 咕咕吉    时间: 2024-3-28 11:25
美滋滋 发表于 2024-3-28 11:07
下面的脚本是对列表参数全选的脚本,供参考
var a = getData("列表参数1",DATA);
var b = toArray(a,0)

/*if (参数1.value= "否") {    //请问这里参数1.value="否"用的对吗?参数1是下拉参数    参数2.setSelectedObjects(null);
    }
  else {
    var a = getData("参数2.data",DATA);    //请问这里参数2,直接用双引号就行了?还是需要加data这样的后缀?现在我不管加不加后缀,结果都是null
debug(a)
var b = a.size();
var arr1=new Array();
if(a!=null&&a.exists(1,-1,true)){
for(i=b-1;i>0;i--){
arr1=a.get(i,0);
}
参数2.setSelectedObjects(arr1,STRING);}
  }


*/

作者: 咕咕吉    时间: 2024-3-28 11:25
美滋滋 发表于 2024-3-28 11:07
下面的脚本是对列表参数全选的脚本,供参考
var a = getData("列表参数1",DATA);
var b = toArray(a,0)

/*if (参数1.value= "否") {    //请问这里参数1.value="否"用的对吗?参数1是下拉参数    参数2.setSelectedObjects(null);
    }
  else {
    var a = getData("参数2.data",DATA);    //请问这里参数2,直接用双引号就行了?还是需要加data这样的后缀?现在我不管加不加后缀,结果都是null
debug(a)
var b = a.size();
var arr1=new Array();
if(a!=null&&a.exists(1,-1,true)){
for(i=b-1;i>0;i--){
arr1=a.get(i,0);
}
参数2.setSelectedObjects(arr1,STRING);}
  }


*/

作者: 美滋滋    时间: 2024-3-28 11:50
yhdata_kY2oZeOp 发表于 2024-3-28 11:25
/*if (参数1.value= "否") {    //请问这里参数1.value="否"用的对吗?参数1是下拉参数    参数2.setSele ...

var a = getData("列表参数组件名称",DATA);


作者: 咕咕吉    时间: 2024-3-28 15:18
美滋滋 发表于 2024-3-28 11:50
var a = getData("列表参数组件名称",DATA);

谢谢。我函数写的没错,列表参数也确实有多个下拉值,但是debug(a)就是为null。怀疑公司系统有问题。。。。而且直接写下面两行就报错:空指针引用异常(null)  at line 2
var a = getData("列表参数1",DATA);
var b = toArray(a,0)

作者: 美滋滋    时间: 2024-3-28 15:21
本帖最后由 美滋滋 于 2024-3-28 15:23 编辑

1. 你的列表参数组件名称确定是 "列表参数1"
2. 你的列表参数组件预览时是否有数据?
我这里实测是没问题的


作者: 美滋滋    时间: 2024-3-28 15:31
下面是我这边做的实例
从图片可以看到组件名称以及列表参数组件被全部选择了


作者: 咕咕吉    时间: 2024-3-29 09:54
美滋滋 发表于 2024-3-28 15:31
下面是我这边做的实例
从图片可以看到组件名称以及列表参数组件被全部选择了

非常感谢,你还做了个测试,我检查了一下都没问题。但是他就是报错(我这截图也贴不了。。。系统说包含不良信息。。。)


作者: 美滋滋    时间: 2024-3-29 10:21
yhdata_kY2oZeOp 发表于 2024-3-29 09:54
非常感谢,你还做了个测试,我检查了一下都没问题。但是他就是报错(我这截图也贴不了。。。系统说包含不 ...

报什么错误信息?
作者: 美滋滋    时间: 2024-3-29 10:23
本帖最后由 美滋滋 于 2024-3-29 10:24 编辑
yhdata_kY2oZeOp 发表于 2024-3-28 15:18
谢谢。我函数写的没错,列表参数也确实有多个下拉值,但是debug(a)就是为null。怀疑公司系统有问题。。。 ...

你新建一个报表,就拉一个列表参数组件,写上这两行代码,报错吗?对了,我突然想到,你的列表参数组件绑定数据了吗?要是没绑定数据,会报空指针错误。

作者: 咕咕吉    时间: 2024-3-29 19:34
本帖最后由 yhdata_kY2oZeOp 于 2024-3-29 19:44 编辑
美滋滋 发表于 2024-3-28 10:39
我大概知道问题了。你的列表参数组件可能不是绑定的数据集中的字段,是自定义的数据吧?
你换下面的脚本试试 ...
不好意思,再请教一下,我写了下面的脚本在全局的变化时装载中。但是不论下拉参数1选择是还是否,结果都是列表参数1全选了。不知道是不是因为下拉参数更改后不触发提交,也就是不触发报告变化?
if(下拉参数1.value="否"){
列表参数1.setSelectedObjects(null);
}
if(下拉参数1.value="是"){
var a = 列表参数1.getObjects();
var arr = [];
for (i=0;i<a.length;i++) {
arr.push(a[i][0)
}
列表参数1.setSelectedObjects(arr,STRING);
}


作者: 美滋滋    时间: 2024-4-1 09:35
yhdata_kY2oZeOp 发表于 2024-3-29 19:34
不好意思,再请教一下,我写了下面的脚本在全局的变化时装载中。但是不论下拉参数1选择是还是否,结果都是 ...

你的脚本有以下几点问题:
1. 条件判等要用 "==" 而不是 "="
2. 列表参数1设定全都不选择不是用 列表参数1.setSelectedObjects(null),而是用列表参数1.setSelectedObjects([],STRING)
3. 想判断下拉参数组件当前选择的是什么,需要用脚本 下拉参数1.getSelectedObjects()[0],而不是下拉参数1.value。
4. 数组arr的辅助处理,不用写在变化运行时,直接写在加载时运行脚本中就可以了,这样就不用每次变化都重新赋值了,提高脚本效率。
综上,脚本修改如下:
1.  加载时运行添加如下脚本
var a = 列表参数1.getObjects();
var arr = [];

for (i=0;i<a.length;i++) {
    arr.push(a[0])
}
2. 变化时运行中增加如下脚本
if(下拉参数1.getSelectedObjects()[0]=="否"){
    列表参数1.setSelectedObjects([],STRING);
}
if(下拉参数1.getSelectedObjects()[0]=="是"){
    列表参数1.setSelectedObjects(arr,STRING);
}

作者: yhdata_C4EWRhEE    时间: 2024-4-1 10:12
我正好遇到这个问题,学到了学到了
作者: 咕咕吉    时间: 2024-4-1 16:15
美滋滋 发表于 2024-4-1 09:35
你的脚本有以下几点问题:
1. 条件判等要用 "==" 而不是 "="
2. 列表参数1设定全都不选择不是用 列表参数1 ...

膜拜,太感谢了。搞定了
作者: 咕咕吉    时间: 2024-4-16 15:44
本帖最后由 咕咕吉 于 2024-4-16 15:45 编辑
美滋滋 发表于 2024-4-1 09:35
你的脚本有以下几点问题:
1. 条件判等要用 "==" 而不是 "="
2. 列表参数1设定全都不选择不是用 列表参数1 ...

反馈个问题哈。按照你的建议将脚本分成两部分,一部分放在加载时运行,一部分放在变化时运行,正常选择、查询都ok,但是导出excel数据时,有如下错误提示(导出csv格式数据正常),将加载中那部分脚本挪到变化时运行,不再报错,问题解决。
作者: 美滋滋    时间: 2024-4-17 09:11
咕咕吉 发表于 2024-4-16 15:44
反馈个问题哈。按照你的建议将脚本分成两部分,一部分放在加载时运行,一部分放在变化时运行,正常选择、 ...

那得问永洪,导出CSV的底层代码是怎么写的了。
不过也好解决,你把普通变量arr 改成系统参数变量,比如用 param['arr'] 就可以了。




欢迎光临 永洪社区 (http://club.yonghongtech.com/) Powered by Discuz! X3.4