反饋已提交
網絡繁忙
注:图表的内部JS是可以实现超级链接的;但当图表作为决策报表组件时,为该组件添加的JS点击事件是不支持的。
注1:决策报表控件是指决策报表 body 里的控件,不包含决策报表参数面板里的控件
注2:移动端只支持参数界面控件的初始化,但是不支持参数面板的初始化
注3:目前组件是不支持点击事件的。
注:下面函数支持在 App 9.0 和 App 10.0 中使用。
2)Web 事件、单元格超链 JS 、填报中单元格控件事件、CPT 的参数界面控件事件,直接通过「contentPane」就可以获取到对象
获取 CPT 填报单元格控件:
contentPane.getWidgetBycell("cell")
1)CPT 中,_g() 就是整个报表对象contentPane,支持contentPane下的所有支持的方法
2)FRM 中,_g() 就是整个表单对象globalForm,支持globalForm下的所有支持的方法
2)CPT 中填报单元格控件事件中可以通过_g().verifyAndWriteReport()及其它填报方法实现提交入库
3)FRM 中报表块、图标块事件中可以通过_g().options.form获取表单主体中的对象
4)获取 FRM 主体控件:
_g().options.form.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)
var a = this.getValue();FR.Msg.alert("提示",a)
2)CPT 和 FRM 中的参数界面都是表单,FRM 主体也是表单
3)每个控件的options里都有当前的表单对象 FORM
因此可以在参数界面或者表单主体的控件的事件中,通过this.options.form来获取当前的表单对象
CPT 参数界面的按钮点击事件中获取其他控件的值:
var a = this.options.form.getWidgetByName("a").getValue();FR.Msg.alert("提示",a)
2)只有分页的时候该属性才会有值,通过contentPane.reportTotalPage来进行调用
注:该函数不能在表单、参数界面、Web 事件中使用。
在 CPT 单元格超链 JS 中获取当前报表的总页数:
FR.Msg.alert("提示",contentPane.reportTotalPage)
2)通过contentPane.parameterCommit() 或者_g().parameterCommit()两种方式触发,在表单中只能通过 _g().parameterCommit()方式触发
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()来进行调用
contentPane.gotoFirstPage()
2)只有分页的时候该方法才会有用,通过contentPane.gotoLastPage()来进行调用
在 CPT 单元格超链 JS中 跳转到报表的最后一页:
contentPane.gotoLastPage()
2)只有分页的时候该方法才会有用,通过contentPane.gotoPreviousPage()来进行调用
3)如果当前是第一页,触发事件应该没有响应,不能出现页码小于等于 0 的情况
contentPane.gotoPreviousPage()
只有分页的时候该方法才会有用,通过contentPane.gotoNextPage()来进行调用
2)如果当前是最后一页,触发事件应该没有响应,不能出现页码大于总页数的情况
contentPane.gotoNextPage()
2)获取到控件,例如获取的控件变量为Widget,那么可以通过Widget.getValue()来取控件的值
3)如果控件是下拉框等有显示值和实际值区分,getValue()取的是实际值
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()取的是实际值
var shijizhi = this.getValue();var xianshizhi = this.getText();FR.Msg.alert("提示","实际值" + shijizhi + " ;显示值" + xianshizhi)
2)获取到控件,例如获取的控件变量为Widget,那么可以通过Widget.reset()来清空控件的数据
this.options.form.getWidgetByName("a").reset();this.options.form.getWidgetByName("b").reset()
2)获取到控件,例如获取的控件变量为Widget,那么可以通过isVisible()来判断控件是否可见。可见则返回true,不可见则返回false
var a = this.options.form.getWidgetByName("a").isVisible();var b = this.options.form.getWidgetByName("b").isVisible();FR.Msg.alert("提示",a + " - " + b)
2)获取到控件,例如获取的控件变量为Widget,那么可以通过Widgeti.setVisible(visible)来设置控件是否可见
3)参数说明如下所示:
参数:visible
参数类型:Boolean
参数说明:参数为 true 可见,false 不可见
CPT 参数界面下拉控件 a 的编辑结束事件中控制控件 b 是否可见,当 a 选择江苏的时候,控件 b 显示;当 a 的值为上海的时候,控件 b 不显示:
var a = this.getValue();var b = this.options.form.getWidgetByName("b");if(a == "江苏"){ b.setVisible(true);}else if (a == "上海"){ b.setVisible(false);
2)获取到控件,例如获取的控件变量为Widget,那么可以通过Widgeti.setEnable(enable)来设置控件是否可用
参数:enable
参数说明:参数为 true 可用, false 不可用
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
参数说明:要触发的事件的名字
this.options.form.getWidgetByName("formSubmit0").fireEvent("click")
根据控件所在单元格的位置获取控件
参数为单元格名称
2)单 sheet 下设置填报数据校验和控件的及时校验,并且在填报单元格控件(任意选一个控件就可以如按钮)中触发数据校验
3)多 sheet 下每个 sheet 设置填报数据校验和控件的及时校验,并且在填报单元格控件中触发数据校验
1)提交报表,只有 CPT 填报表才可以用,通过contentPane.writeReport()来进行调用,如果填报表有多个 sheet ,则所有 sheet 都会提交
2)也可通过contentPane.writeReport(reportIndex)来提交指定的 sheet ,writeReport为强制提交,不会进行校验
参数:reportIndex
参数说明:选填,sheet 编号,从 0 开始
点击填报单元格按钮后触发填报提交:
contentPane.writeReport()
1)校验并提交报表,只有 CPT 填报表才可以用
2)可通过contentPane.verifyAndWriteReport()来进行调用,如果填报表有多个 sheet ,则contentPane.verifyAndWriteReport()提交当前 sheet
通过contentPane.verifyAndWriteReport(true)提交所有 sheet
参数:isAllSheet
参数说明:
不填或者填 0 时,都为提交当前 sheet
填 true 或者填非 0 数字时,提交所有 sheet
参数不能是非 true 或者数字字符串,不支持,无法提交
点击填报单元格按钮后触发校验并提交报表:
contentPane.verifyAndWriteReport()
2)多 sheet 填报中,可以通过contentPane.refreshAllSheets()来刷新所有 sheet ,且刷新后会停留在上次查看的 sheet 页
在填报表的第二个 sheet 中,点击某单元格按钮后触发所有 sheet 刷新:
contentPane.refreshAllSheets()
2)在填报报表的 Web 事件、单元格按钮或者 JS 中可以通过contentPane.getCellValue(o)来获取单元格的值
3)参数说明详见本文 7.1 章节
1)在填报表单元格按钮中取 A1 单元格的值:
var a = contentPane.getCellValue(0,0);//如果只有2个参数值,则第一个是列号,第二个是行号FR.Msg.alert("提示",a)
2)在填报表单元格按钮中取 shee2 的 A1 单元格的值:
var a = contentPane.getCellValue(1,0,0);FR.Msg.alert("提示",a)
1)在填报报表的 Web 事件、单元格按钮或者 JS 中可以通过contentPane.setCellValue(o)来给单元格的赋值,赋的是实际值,可提交入库
2)参数说明详见本文 7.2 章节
在填报表单元格按钮中给 A1 单元格赋值,然后提交入库:
contentPane.setCellValue(0,0,"aa");//如果只有3个参数值,则第一个是列号,第二个是行号,第三个是值
getCellValue(Object o) 的参数说明如下表所示:
o参数的格式{reportIndex:0, columnIndex: 2, rowIndex: 1},具体说明如下表所示:
返回值说明如下表所示:
取决于单元格值类型
数字(number)
字符串(string)
数据列
注:getCellValue 获取的是结果报表对应位置的值;如果是数据列,获取的是扩展后对应位置的值
取决于最终单元格值类型
可以是字符串(string)、数字(number)、
日期或数组(object)
字符串 - 对应的值
数字 - 对应的值
日期或数组 - [object Object]
图表
图片
取决于公式返回类型
setCellValue(o) 的参数说明如下表所示:
o参数的格式{reportIndex:0, columnIndex: 2, rowIndex: 1,value: 'aa'},具体说明如下表所示:
可通过FR.doHyperlinkByGet(url,config,target,feature)在任何可以写 JS 的地方进行调用
var url = "/WebReport/ReportServer?reportlet=WorkBook2.cpt";var a = "123";FR.doHyperlinkByGet(url,{a:a, b:"456"}, "_self")
2)点击 CPT 单元格超链,打开子模板并设置标题:
var url = "/WebReport/ReportServer?reportlet=WorkBook2.cpt";var a = "123";FR.doHyperlinkByGet({url : url, title:"我是标题", para : {a:a, b: "456"}, target : "_self"})
FR.doHyperlinkByGet 的参数说明如下表所示:
URL 支持绝对路径如http://192.168.100.1:8080/WebReport/ReportServer?reportlet=WorkBook2.cpt
相对路径如/WebReport/ReportServer?reportlet=WorkBook2.cpt 或
ReportServer?reportlet=WorkBook2.cpt
超级链接,FR 下的工具类方法,可以通过FR.doHyperlinkByPost(url,config,target,feature)在任何可以写 JS 的地方进行调
用
var url = "/WebReport/ReportServer?reportlet=WorkBook2.cpt";var a = "123";FR.doHyperlinkByPost(url,{a:a, b:"456"},"_self")
var url = "/WebReport/ReportServer?reportlet=WorkBook2.cpt";var a = "123";FR.doHyperlinkByPost({url : url, title : "我是标题", para : {a:a, b: "456"}, target : "_self"})
FR.doHyperlinkByPost 的参数说明如下表所示:
必填,URL 或 Json 超链定义
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"})
FS.tabPane.addItem 函数的参数说明如下表所示:
「entry」以json格式提供,属性如下表所示:
通过getShowIndex获取 Tab 组件当前显示的 Tab 号
注:该函数支持在 App10.0 中使用。
2)参数1说明如下所示:
参数1:tabName
参数1类型:String
参数1说明:必填,Tab 的控件名称,如 Tab0
3)参数2说明如下图所示:
参数2:isVisible
参数2类型:Boolean
参数2说明:必填,Tab 是否可见,ture可见/false隐藏
注1:该函数支持在 App 10.0 中使用。
注2:不能在 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 属性的值
注:该函数支持在 App 9.0 和 App 10.0 中使用。
在单元格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)
1)封装过的jQuery.ajax()函数,对 data 参数做了中日韩文编码处理,可以通过FR.ajax(options) 在任何可以用 JS 的地方进行调
2)参数说明详见 13.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)参数说明详见 13.2 章节
在报表加载结束时间中定义每 3s 刷新一次报表:
setInterval("self.location.reload();",3000)
2)参数说明详见 13.3 章节
注:JS 代码为setTimeout(function(){})格式时,「this」需放在声明外使用。
setTimeout("FR.Msg.alert('提示','我是延迟提示')",3000)
2)在报表加载结束时间中 3s 后弹出提示:
setTimeout(function() { FR.Msg.alert('提示','我是延迟提示');}, 3000)
1)使用场景
FR.location 用于实现定位功能,获取经纬度,可以在App、企业微信、钉钉中使用
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.Mobile.getDeviceInfo()进行调用,返回 Json 对象,包含两个属性,一个是设备型号,另外一个是设备唯一 id
在填报加载结束后事件中,将设备机型和设备唯一 id 赋值给单元格:
var b = FR.Mobile.getDeviceInfo();contentPane.setCellValue(0,0,b.Model);contentPane.setCellValue(0,1,b.DeviceID)
2)如果报表有多页,刷新后返回第一页;如果报表有参数界面,刷新后直接显示上次的参数条件查询后的结果
在填报成功事件中写入刷新 JS ,实现填报成功后刷新当前页:
location.reload()
在填报成功事件中写入 JS ,实现填报成功后关闭模板返回目录:
window.close()
返回公式计算的结果
注1:版本为 10.4.46 之后的 App 支持
注2:使用该接口需要关闭脚本调用公式限制
2 个参数,分别表示:
1)formula:必填,具体公式
2)callback:必填,具体回调方法,可以获取公式计算后的值
可以将单元格转换为行列号
知道具体的单元格,能够定位该单元格的行列号
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)参数说明详见本文 14.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)参数说明详见本文 14.2 章节
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)参数说明详见 本文 14.3 章节
FR.Msg.prompt("提示","我是第二个输入",null,function(value){ FR.Msg.alert("提示",value);}
FR.Msg.alert 参数说明如下所示:
FR.Msg.confirm 参数说明如下所示:
FR.Msg.prompt 参数说明如下所示:
this.options.form.getWidgetByName("控件名"); //参数界面及决策报表中获取控件 contentPane.getWidgetByCell("单元格"); //填报界面获取控件 contentPane.getWidgetByName("控件名"); //填报界面获取控名
详细请查看 填报成功后自动刷新
JS 获取决策报表图表组件并刷新数据
详细请查看 JS 获取决策报表图表组件并刷新数据
setTimeout(function(){},500)
1)当前页刷新
location.reload(
详细请查看 当前页刷新
2)定时刷新,支持定时 JS,以及取消定时
setInterval('location.reload();',10000);//时间单位为 ms,即每 10s 刷新一次页面var timer = setInterval('location.reload();',10000);clearInterval(timer);//取消定时 
详细请查看 定时刷新 JS
FR.location(function(status, message){ //获取地理位置if(status=="success") { //定位成功,message 返回经纬度值 FR.Msg.alert("当前位置是" + message); contentPane.setCellValue(2, 3, message); } else { //定位失败,message返回对应的错误信息 FR.Msg.alert(message); //定位失败}})
详细请查看 获取地理位置
查询操作,不管是 cpt 还是 frm,参数界面上会有内置查询按钮,用户可以不用内置查询,通过 JS 来触发查询操作
1)普通报表可以通过下面两种方式触发
contentPane.parameterCommit()_g().parameterCommit(
2)决策报表只能通过下面一种方式触发
_g().parameterCommit(
详细请查看 决策报表自动查询 JS
详细请查看 扫码输入查询
FR.doHyperlinkByGet({url:'${servletURL}?viewlet=JS 超链自定义标题子表.cpt',title:'标题是我',para:{area:'华北'}})
注:title 只在 App 中支持
详细请查看 JS 超链自定义标题
详细请查看 登出 App 的 JS
var Widget = this.options.form.getWidgetByName("t1"); //在参数界面获取控件的方法,先获取决策报表,再通过控件名称来获取控件 var value_1 =Widget.getValue(); //获取控件实际值 alert('我的实际值是:'+value_1); //弹出控件实际值 var value_2 =Widget.getText(); //获取控件显示值 alert('我的显示值是:'+value_2); //弹出控件显示值
详细请查看 控件值(实际值和显示值)
文 檔回 饋
滑鼠選中內容,快速回饋問題
滑鼠選中存在疑惑的內容,即可快速回饋問題,我們將會跟進處理。
不再提示
10s後關閉