帆软报表使用iframe跳转问题总结

帆软报表使用iframe跳转问题总结


公司业务需求需要使用帆软的填报报表制作分组效果,但是填报报表做完分组之后问题很多,比如添加行需要点特定列,点错了就需要用户刷新重新填写,这对用户的体验来说不是特别的友好,于是我想了其他的方法来实现点击分组的效果。

问题


然后我翻阅帆软报表的使用文档,找到了JS实现点击按钮打开对话框报表这篇文档,打算使用iframe的方式编写两张报表,一张主报表,一张子报表的方式来实现分组效果。

刚开始的时候缺少添加后面的参数,导致页面跳转失败,我发现了ref_c是必填的,没有填写会报错 你没有该页面的访问权限 需访问请联系管理员

image-20220914100147700

1662685024264770

根据问答得知,这是属于模板认证的东西,如果你在后台将模板认证关闭后,就可以不需要填写ref_c这个参数也能进行跳转,但这样不管什么权限的用户都能访问到报表,显然是不行的,所以必须要在保留ref_c这个参数情况下实现跳转功能。

image.png

但是这个ref_c参数是设计器默认生成的,而且每次重启设计器都会生成新的值,所以也不能直接通过写死拼接值来进行跳转,这样重启帆软软件后就会新生成新的值导致跳转失败。它的值也没有通过特定参数可以获取,那只能通过其他的方式来进行获取了。

解决方法


然后我在使用报表设计器的时候发现,在同一次登录的过程中,在网址后面拼接的ref_c参数值都是一样的,虽然他不是session_id,但也可以把他理解成为session_id一个登录凭证,那我们只需要通过JS获取需要跳转页面的ref_c值,然后在跳转的的时候将他拼接在请求url上就可以实现正常跳转了。获取参数代码如下。

//通过遍历的方式获取 "?" 后的所有参数
var auth = "";
var qs = (location.search.length > 0 ? location.search.substring(1) : '');
var args = {};
items = qs.length ? qs.split('&') : [];
var item, name, value, i = 0;
len = items.length;
for (i = 0; i < len; i++) {
	item = items[i].split('=');
	name = decodeURIComponent(item[0]);
	value = decodeURIComponent(item[1]);
	if (name.length) {
		args[name] = value;
        //当遍历到"ref_c"的时候,将值赋给auth
		if (name == "ref_c") {
			var auth = args[name];
		}
	}
}

这样我们就取得了ref_c的参数值,然后只要在将他拼接在请求url上就可以成功跳转了。

image-20220914101613224

QQ图片20220914101713

完整实现JS如下(跳转的报表自己填写)

var auth = "";
var qs = (location.search.length > 0 ? location.search.substring(1) : '');
var args = {};
items = qs.length ? qs.split('&') : [];
var item, name, value, i = 0;
len = items.length;
for (i = 0; i < len; i++) {
	item = items[i].split('=');
	name = decodeURIComponent(item[0]);
	value = decodeURIComponent(item[1]);
	if (name.length) {
		args[name] = value;
		if (name == "ref_c") {
			var auth = args[name];
		}
	}
}
//获取参数前的URL
var url = FR.serverURL + FR.servletURL;
var $iframe = $("<iframe id='inp' name='inp' width='100%' height='100%' scrolling='no' frameborder='0'>"); // iframe参数的命名及宽高等
$iframe.attr("src", url +"?viewlet=xxxx.cpt&ref_t=design&op=write&ref_c=" + auth + "&line=" + line); //xxx.cpt为点击查询时,对话框中显示的子报表
var o = {
	title: "xxxx",
	width: 800, //调整对话框宽度
	height: 300 //调整对话框高度
};
FR.showDialog(o.title, o.width, o.height, $iframe, o); //弹出对话
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
帆软报表可以通过使用iframe传递参数来实现灵活的数据展示和筛选功能。 首先,在页面中创建一个iframe元素,并设置其src属性为帆软报表的地址。同时,可以使用query参数的方式向报表传递参数。例如,可以在src属性的值后面添加问号("?")符号,并用键值对的形式添加参数,例如src="http://example.com/report.html?param1=value1&param2=value2"。 接下来,在页面的JavaScript代码中,可以通过获取iframe元素的contentWindow属性来访问其内部的文档对象,进而操作报表。通过contentWindow对象,可以使用JavaScript动态地修改报表中的参数值,实现不同条件下的数据展示和筛选。 例如,可以使用以下代码获取iframe元素并设置参数值: var iframe = document.getElementById("reportFrame"); iframe.contentWindow.document.getElementById("param1").value = "new value"; 以上代码中,reportFrame是iframe元素的id,param1是报表中一个参数的id,可以使用getElementById方法获取。然后,将参数的值设置为新值,以更新报表展示内容。 此外,还可以通过JavaScript监听iframe元素的加载完成事件,以确保在报表加载完成后再设置参数值。例如,可以使用以下代码: iframe.onload = function() { iframe.contentWindow.document.getElementById("param1").value = "new value"; }; 通过以上方式,可以实现通过iframe传递参数给帆软报表并实现灵活的数据展示和筛选功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

J.T.L

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值