反饋已提交
網絡繁忙
注1:决策报表控件是指决策报表 body 里的控件,不包含决策报表参数面板里的控件
注2:移动端只支持参数界面控件的初始化,但是不支持参数面板的初始化
注3:组件不支持点击事件。
1)CPT 中才有,FRM 中没有
2)Web 事件、单元格超链 JS 、填报中单元格控件事件、CPT 的参数界面控件事件,直接通过「contentPane」就可以获取到对象
获取 CPT 填报单元格控件:
contentPane.getWidgetByCell("cell")
1)CPT 中,_g() 就是整个报表对象contentPane,支持contentPane下的所有支持的方法
2)FRM 中,_g() 就是整个表单对象globalForm,支持globalForm下的所有支持的方法
1)CPT/FRM 中参数界面控件事件中可以通过_g().parameterCommit()实现自动查询
2)CPT 中填报单元格控件事件中可以通过_g().verifyAndWriteReport()及其它填报方法实现提交入库
3)FRM 中报表块、图标块事件中可以通过_g().options.form获取表单主体中的对象
4)获取 FRM 主体控件:
_g().options.form.getWidgetByName("name")
获取参数面板控件:
parameterEl.getWidgetByName("name")
CPT 和 FRM 中的参数界面都是parameterEl:
1)CPT 中通过contentPane.parameterEl来获取参数界面,主要应用在 CPT 中 Web 事件的加载起始和结束事件、CPT 单元格 JS 中
2)FRM 中通过_g().parameterEl来获取参数界面,主要应用在 FRM 的 body 初始化事件、FRM 主体中的控件、FRM 主体报表块单元格/图表 JS、图表块 JS
CPT 加载结束事件中获取参数界面控件的值:
var a = contentPane.parameterEl.getWidgetByName("aa").getValue();FR.Msg.alert("提示",a)
CPT 参数界面文件控件的编辑结束事件中获取控件的值:
var a = this.getValue();FR.Msg.alert("提示",a)
2)CPT 和 FRM 中的参数界面都是表单,FRM 主体也是表单
2)每个控件的options里都有当前的表单对象 FORM
因此可以在参数界面或者表单主体的控件的事件中,通过this.options.form来获取当前的表单对象
获取CPT/FRM参数面板控件、获取FRM主体控件:
this.options.form.getWidgetByName("name")
1)contentPane报表对象下面的属性,当前报表的总页数
2)只有分页的时候该属性才会有值,通过contentPane.reportTotalPage来进行调用
注:该函数不能在表单、参数界面、Web 事件中使用
在 CPT 单元格超链 JS 中获取当前报表的总页数:
FR.Msg.alert("提示",contentPane.reportTotalPage());
1)查询操作,不管是 CPT 还是 FRM ,参数界面上会有内置查询按钮,用户可以不用内置查询,通过 JS 来触发查询操作
2)通过 contentPane.parameterCommit() 或者_g().parameterCommit()两种方式触发,在表单中只能通过 _g().parameterCommit() 方式触发
1)CPT 参数界面中自定义按钮先校验控件,然后根据条件再触发查询:
var a = this.options.form.getWidgetByName("a").getValue();var b = this.options.form.getWidgetByName("b").getValue();if (a > b) { FR.Msg.alert("警告","开始月不能大于结束月!")} else { contentPane.parameterCommit(); // or _g().parameterCommit();
2)FRM 参数界面中自定义按钮的点击事件中触发查询:
_g().parameterCommit();
2)只有分页的时候该方法才会有用,通过contentPane.gotoFirstPage()来进行调用
在 CPT 单元格超链 JS 中跳转到第一页:
contentPane.gotoFirstPage();
2)只有分页的时候该方法才会有用,通过contentPane.gotoLastPage()来进行调用
在 CPT 单元格超链 JS中 跳转到报表的最后一页:
contentPane.gotoLastPage();
2)只有分页的时候该方法才会有用,通过contentPane.gotoPreviousPage()来进行调用
3)如果当前是第一页,触发事件应该没有响应,不能出现页码小于等于 0 的情况
在 CPT 单元格超链 JS 中跳转到当前页的上一页:
contentPane.gotoPreviousPage();
只有分页的时候该方法才会有用,通过contentPane.gotoNextPage()来进行调用
2)如果当前是最后一页,触发事件应该没有响应,不能出现页码大于总页数的情况
contentPane.gotoNextPage();
1)控件的取值方法
2)获取到控件,例如获取的控件变量为Widget,那么可以通过Widget.getValue()来取控件的值
3)如果控件是下拉框等有显示值和实际值区分,getValue()取的是实际值
1)CPT 参数界面下拉框的编辑结束事件中获取当前下拉框的值以及其他控件的值:
var comboBox = this.getValue();var textEditor = this.options.form.getWidgetByName("textEditor").getValue();FR.Msg.alert("提示",comboBox + " - "+ textEditor)
2)CPT 填报单元格下拉框的编辑结束事件中获取当前下拉框的值以及其他控件的值:
var comboBox = this.getValue();var textEditor = contentPane.getWidgetByName("textEditor").getValue();FR.Msg.alert("提示",comboBox + " - " + textEditor)
2)获取到控件,例如获取的控件变量为Widget,那么可以通过Widget.setValue(value)来设置控件的值。
3)如果控件是下拉框等有显示值和实际值区分,setValue()设置的是实际值
4)参数说明如下所示:
参数:value
参数类型:Object
参数说明:值
CPT 参数界面按钮点击事件中给其他控件赋值:
this.options.form.getWidgetByName("textEditor").setValue("哈哈")
2)获取到控件,例如获取的控件变量为Widget,可以通过Widget.getText()来取控件的显示值
3)只有下拉框、下拉复选框、下拉树、单选按钮组、复选框组这 5 个控件有显示值和实际值,这些控件用getValue()获取到的是实际值,getText()获取到的是显示值
4)如果控件是下拉框等有显示值和实际值区分,getValue()和getText()取的是实际值
CPT 参数界面下拉框的编辑结束事件中获取当前下拉框的实际值和显示值:
var shijizhi = this.getValue();var xianshizhi = this.getText();FR.Msg.alert("提示","实际值" + shijizhi + " ;显示值" + xianshizhi)
2)获取到控件,例如获取的控件变量为Widget,那么可以通过Widget.reset()来清空控件的数据
CPT 参数界面按钮点击后将参数界面上其他控件统一重置:
this.options.form.getWidgetByName("a").reset();this.options.form.getWidgetByName("b").reset()
2)获取到控件,例如获取的控件变量为Widget,那么可以通过isVisible()来判断控件是否可见。可见则返回true,不可见则返回false
CPT 参数界面按钮点击后判断控件是否可见:
var a = this.options.form.getWidgetByName("a").isVisible();var b = this.options.form.getWidgetByName("b").isVisible();FR.Msg.alert("提示",a + " - " + b)
setEnable(enable)
注:不支持填报单元格使用
2)获取到控件,例如获取的控件变量为Widget,那么可以通过Widgeti.setEnable(enable)来设置控件是否可用
3)参数说明如下所示:
参数:enable
参数类型:Boolean
参数说明:参数为 true 可用, false 不可用
CPT 参数界面下拉控件 a 的编辑结束事件中控制控件 b 是否可用,当 a 选择江苏的时候,控件 b 可用;当 a 的值为上海的时候,控件b不可用:
var a = this.getValue();var b = this.options.form.getWidgetByName("b");if(a == "江苏"){ b.setEnable(true);}else if (a == "上海"){ b.setEnable(false);}
2)获取到控件,例如我们获取的控件变量为Widget,那么可以通过isEnabled()来判断控件是否可用
3)可用则返回 true ,不可用则返回 false
var a = this.options.form.getWidgetByName("a").isEnabled();var b = this.options.form.getWidgetByName("b").isEnabled();FR.Msg.alert("提示",a + " - " + b)
2)获取到控件,例如获取的控件变量为Widget,那么可以通过fireEvent(eventName)来触发控件的事件
参数:eventName
参数类型:String
参数说明:要触发的事件的名字
CPT 参数界面下拉框编辑结束事件中触发内置查询按钮的点击事件:
this.options.form.getWidgetByName("formSubmit0").fireEvent("click")
参数为单元格名称
超级链接,FR下的工具类方法可通过FR.doHyperlinkByGet(url,config,target,feature)在任何可以写 JS 的地方进行调用
点击 CPT 单元格超链,打开子模板并传递参数:
var url = "/WebReport/ReportServer?reportlet=WorkBook2.cpt";var a = "123";FR.doHyperlinkByGet(url,{a:a, b:"456"}, "_self")
FR.doHyperlinkByGet 的参数说明如下表所示:
必填,url 或 Json 超链定义,url 支持
绝对路径如http://192.168.100.1:8080/WebReport/ReportServer?reportlet=WorkBook2.cpt
相对路径如/WebReport/ReportServer?reportlet=WorkBook2.cpt 或 ReportServer?reportlet=WorkBook2.cpt
var url = "/WebReport/ReportServer?reportlet=WorkBook2.cpt";var a = "123";FR.doHyperlinkByPost(url,{a:a, b:"456"},"_self")
FR.doHyperlinkByPost 的参数说明如下表所示:
绝对路径如:http://192.168.100.1:8080/WebReport/ReportServer?reportlet=WorkBook2.cpt
相对路径如: /WebReport/ReportServer?reportlet=WorkBook2.cpt或 ReportServer?reportlet=WorkBook2.cpt
2)可通过window.parent.FS.tabPane.closeActiveTab()在报表中任何可以用 JS 的地方进行调用
注:不能在参数界面调用
CPT 单元格超链 JS 中关闭当前 Tab 选项页:
window.parent.FS.tabPane.closeActiveTab();
2)可通过FR.logoutApp()在任何可以写 JS 的地方进行调用
在 CPT 单元格超链 JS 中登出:
FR.logoutApp();
2)可通过window.parent.FS.tabPane.addItem(entry)在报表中任何可以用 JS 的地方进行调用
CPT 单元格超链 JS 中将超链的子报表在决策平台的新 Tab 中打开:
window.parent.FS.tabPane.addItem({title:"子报表",src:"/WebReport/ReportServer?reportlet=模板1.cpt"})
注:「title」仅支持在 App 中使用,浏览器中不支持。
注:FR.logoutApp 如果在 App 里 H5 解析的报表里面会失效,不会返回到 App 的登录界面;在 H5 中使用,比如微信里面,可以触发登出的。
FS.tabPane.addItem 函数的参数说明如下表所示:
「entry」以Json格式提供,属性如下表所示:
1)通过setTabVisible(tabName String, isVisible Boolean)可以实现隐藏部分 Tab 标题
2)参数 1 说明如下所示:
参数1:tabName
参数1类型:String
参数1说明:必填,Tab的控件名称,如 Tab0
3)参数 2 说明如下图所示:参数2:isVisible
参数2类型:Boolean
参数2说明:必填,tab 是否可见,ture可见/false隐藏
注:不能在 tablayout 的初始化事件和参数界面中使用
不同用户可以看到不同的 Tab:
var user = this.options.form.getWidgetByName("user").getValue();if(user=='a'){ this.options.form.getWidgetByName("tabpane0") .setTabVisible("Tab0", true); this.options.form.getWidgetByName("tabpane0") .setTabVisible("Tab1", true); this.options.form.getWidgetByName("tabpane0") .setTabVisible("Tab2", true);}else{ this.options.form.getWidgetByName("tabpane0") .setTabVisible("Tab0", false); this.options.form.getWidgetByName("tabpane0") .setTabVisible("Tab1", true); this.options.form.getWidgetByName("tabpane0") .setTabVisible("Tab2", false);}
showCardByIndex(Number:cardID);
效果:可以实现跳转到指定 Tab 块
参数:cardID
说明:必填,显示的 Tab 序号,从 0 开始
showCardByIndex(Number: cardID, Boolean: animated);
效果:新增 animated 参数,控制切换Tab页是否有动画效果,
仅在移动端标题栏样式允许横向滚动切换时生效
参数:animated
说明:非必填,animated 为 1 开启动画,为 0 关闭动画
给 body 添加初始化后事件,实现固定时间间隔内自动循环跳转 Tab:
setInterval(function(){ var aa=_g().getWidgetByName("tabpane0") .getShowIndex(); if(aa==2){ _g().getWidgetByName('tabpane0') .showCardByIndex(0); } else { _g().getWidgetByName('tabpane0') .showCardByIndex(aa+1); } },2000)
注:具体示例可参考 JS 实现点击查询后停留在当前查询的 Tab 页、JS实现点击超链切换TAB页
一些请求或者方法返回是 JSON数据,
可以通过json.name来获取 name 属性的值
在单元格 JS 中通过FR.Mobile.getDeviceInfo获取设备信息,并且取出其中的Model 设备型号:
var a = FR.Mobile.getDeviceInfo();FR.Msg.alert(a.Model)
2)参数说明如下所示:
参数:text
参数说明:必填,需要做编码的字符串
在 CPT 单元格超链 JS 中超链到中文名字模板:
var url = FR.cjkEncode("/WebReport/ReportServer?reportlet=模板1.cpt");var a = "123";FR.doHyperlinkByGet(url, {a:a, b:"456"}, "_self")
参数说明:必填,需要做解码的字符串
在 CPT 单元格超链 JS 中先用FR.cjkEncode对中文进行编码,然后再用FR.cjkDecode进行解码:
var a = "哈哈";var b = FR.cjkEncode(a);var c = FR.cjkDecode(b);FR.Msg.alert("提示",b + ":" + c)
2)参数说明见 12.1 章节
在 CPT 的单元格超链 JS 中发 ajax 请求,且在不同的回调函数中处理不同的情况:
var username = "1";var password = "1";FR.ajax({ url:"http://env.finedevelop.com:59204/Test/ReportServer?op=fs_load&cmd=sso", data:{ fr_username:username, fr_password:password }, dataType:"jsonp",//跨域采用jsonp方式 timeout:5000,//超时时间(单位:毫秒) //success:function(data){//data参数视返回值情况而定 //FR.Msg.alert("success",data.status); //}, //error:function(errorThrown){ //FR.Msg.alert("error",errorThrown); //}, complete: function(res,textStatus){ FR.Msg.alert("complete",textStatus); } })
2)setInterval() 方法会不停地调用函数,直到 clearInterval() 被调用或窗口被关闭。由setInterval()返回的 ID 值可用作clearInterval() 方法的参数
3)通过setInterval(code,millisec)进行调用
4)参数说明详见本文 12.2 章节
在报表加载结束时间中定义每 3s 刷新一次报表:
setInterval("self.location.reload();",3000);
1)用于在指定的毫秒数后调用函数或计算表达式。
通过setTimeout(code,millisec)进行调用
2)参数说明详见本文 12.3 章节
注:JS 代码为setTimeout(function(){})格式时,「this」需放在声明外使用
1)在报表加载结束时间中 3s 后弹出提示:
setTimeout("FR.Msg.alert('提示','我是延迟提示')",3000);
2)在报表加载结束时间中 3s 后弹出提示:
setTimeout(function() { FR.Msg.alert('提示','我是延迟提示');}, 3000)
2)如果报表有多页,刷新后返回第一页;如果报表有参数界面,刷新后直接显示上次的参数条件查询后的结果
在填报成功事件中写入刷新 JS ,实现填报成功后刷新当前页:
location.reload();
在填报成功事件中写入 JS ,实现填报成功后关闭模板返回目录:
window.close();
返回公式计算的结果
注1:版本为 10.4.46 之后的 App 支持
注2:使用该接口需要关闭脚本调用公式限制
2 个参数,分别表示:
1)formula:必填,具体公式
2)callback:必填,具体回调方法,可以获取公式计算后的值
1)使用场景
FR.location 用于实现定位功能,获取经纬度,可以在https、企业微信、钉钉中使用
2)函数用法
FR.location(function(status, message){...})
3)注意事项
想要在企业微信、钉钉中使用需要将 HTML5 移动端展现插件和微信或钉钉管理插件更新到 10.4.975 版本
在单元格 JS 中获取当前经纬度:
FR.location(function(status, message){ //获取地理位置 if(status=="success") { //定位成功,message返回经纬度值 FR.Msg.alert("当前位置是" + message); } else { //定位失败,message返回对应的错误信息 FR.Msg.alert(message); //定位失败 } })
可以将单元格转换为行列号
知道具体的单元格,能够定位该单元格的行列号
FR.cellStr2ColumnRow('B1')
返回值为 {"col":1,"row":0}
FR.ajax 函数的参数说明如下表所示:
[options]以Json格式提供,属性如下表所示:
值必须是Key/Value格式,可以是字符串如p1=pavalue&p2=p2value,或者是对象如{p1:p1value,p2:p2value}
预期服务器返回的数据类型。如果不指定,将自动根据 HTTP 包 MIME 信息来智能判断。可用值有:
Json:返回 JSON 数据
text:返回纯文本字符串
jsonp": 跨域采用 jsonp 方式
success: function(data, textStatus){ //data为服务器返回的,并根据dataType参数//进行处理后的数据。textStatus为状态值success}
error: function(XMLHttpRequest, textStatus, errorThrown){ //参数分别为XMLHttpRequest 对象、错误信息、捕获的异常对象//通常textStatus和errorThrown之中只有一个会包含信息 }
complete: function(XMLHttpRequest, textStatus){ //参数分别为XMLHttpRequest//对象和一个描述成功请求是否成功的字符串 }
可以通过FR.Msg.alert(Object title, Object message[, Object callback])在任何可以写 JS 的地方进行调用
2)参数说明详见本文 13.1 章节
1)点击填报单元格按钮后弹出提示:
FR.Msg.alert("提示","我是第一个提示");
2)点击填报单元格按钮后弹出提示,且 2s 后自动关闭:
FR.Msg.alert("提示","我是第二个提示",2000);
3)点击填报单元格按钮后弹出提示,点击提示框的确定按钮,触发回调事件并提示:
FR.Msg.alert("提示","我是第三个提示",function(value){ FR.Msg.alert("提示",value);});
参数:message
参数说明:要显示的消息
点击填报单元格按钮后弹出悬浮提示:
FR.Msg.toast("提示","我是第一个悬浮提示");
可通过FR.Msg.confirm(Object title, Object message[,Object callback, Object min_width ])在任何可以写 JS 的地方进行调用
2)参数说明见本文 13.2 章节
1)点击填报单元格按钮后弹出确认框:
FR.Msg.confirm("提示","我是第一个确认");
2)点击填报单元格按钮后弹出弹出确认框,且在点击确定和取消按钮的时候,弹出不同的回调提示:
FR.Msg.confirm("提示","我是第二个确认",function(value){ FR.Msg.alert("提示",value);});
可以通过FR.Msg.confirm(Object title, Object message, Object value, Object callback, Object min_width)在任何可以写js的地方进行调用
2)参数说明详见 本文 13.3 章节
1)点击填报单元格按钮后弹出输入框:
FR.Msg.prompt("提示","我是第一个输入框");
FR.Msg.prompt("提示","我是第二个输入",null,function(value){ FR.Msg.alert("提示",value);});
FR.Msg.aler 函数的参数说明如下所示:
FR.Msg.confirm 函数的参数说明如下所示:
FR.Msg.prompt 函数的参数说明如下所示:
微信钉钉提供的第三方开发的 JS 接口部分支持。
文 檔回 饋
滑鼠選中內容,快速回饋問題
滑鼠選中存在疑惑的內容,即可快速回饋問題,我們將會跟進處理。
不再提示
10s後關閉