编写html/js调用tableau,并实现定时刷新工作簿功能

时间:2024-03-17 21:29:56

背景: tableau,实现大屏功能,而且可以实时刷新,不关闭窗口的情况下会话不会断开。
思路:
1.实时刷新: 查看tableau javascript API文档,该文档中有一个refreshDataAsync()函数,该函数实现的主要是tableau工作簿中“刷新按钮”的功能,强制服务器发送查询并检索新数据。自己编写一个html,使用js去调用上述函数。
2.保持会话: 通过查看tableau官方文档,wgserver.session.apply_lifetime_limit , wgserver.session.lifetime_limit , wgserver.session.idle_limit 几个参数,获得tableau默认的会话时长
编写html/js调用tableau,并实现定时刷新工作簿功能
具体做法参考:
tableau实时刷新:https://kb.tableau.com/articles/Issue/Refresh-Tableau-Server-Views-Without-Refreshing-Browser?_ga=2.136642995.2002319793.1557911744-380953987.1557021471
tableau用户会话超时:https://kb.tableau.com/articles/HowTo/changing-the-user-session-timeout?_ga=2.82298005.2002319793.1557911744-380953987.1557021471
实现方案:

<html>
<body>
<!--实现大屏实时刷新tableau功能-->
<!--注意:运行该html时,必须先保证网页端已经登录的tableau服务器,即http://xx.xx.xx.xx/#/signin界面已经成功登录,假设tableau服务器IP为xx.xx.xx.xx-->
<script type="text/javascript"
src="http://xx.xx.xx.xx/javascripts/api/tableau_v8.js">
</script>
<script type="text/javascript">
   var placeholderDiv=document.getElementById("tableauViz");
   <!--该url指的是具体某工作簿的url,可以按照需求替换为其他工作簿的url-->
   var url="http://xx.xx.xx.xx/views/test/1?:embed=y&:showShareOptions=true&:display_count=no&:showVizHome=no"
   var options={hideTabs:true,hideToolbar:true};
   var viz=new tableauSoftware.Viz(placeholderDiv,url,options);
   window.setInterval("viz.refreshDataAsync()",3600); <!--3600这个数字表示刷新的时间间隔,单位为毫秒,可按需修改-->
</script>
<!--刷新数据按钮是强制服务器发送查询并检索新数据,所以不关闭网页的情况下,不会有会话中断的情况发送-->
</body>
</html>

实现过程中遇到的问题:
1.浏览器打开该html,出现空白或者报错,报错信息为 refused to display “xx.xx.xx.xx/” in a frame because it set ‘X-Frame-Options’ to ‘sameorigin’。
有关X-Frame-Options介绍:https://developer.mozilla.org/zh-CN/docs/Web/HTTP/X-Frame-Options
解决方案:查看X-Frame-Options解决方案
2.浏览器报错,maxVizResizeAttempts错误
解决方案:查看 maxVizResizeAttempts解决方案