微信小程序集成Tableau报表

Server端用了Spring,其实无所谓的。

public class MobilController {
@RequestMapping(value="/openMobileReport")
	public ModelAndView openMobileReport(HttpServletRequest request,HttpServletResponse response)
	{
		ModelAndView modelAndView = new ModelAndView();	
		
		try
		{
			String queryReportID=(String)request.getParameter("reportID");
			if(queryReportID!=null && !queryReportID.equals(""))
            {
				AccessDB db=new AccessDB();
				String sql="select * from {0}_reports where ID={1}";
				ResultSet rs = db.querydb(sql,queryReportID);
				
				if(rs.next())
				{						
					String views=rs.getString("activeViewUrl").replaceAll("sheets/","");
					
					//获取用户的报表服务器映射用户
					Config setup =new Config();
					String tUserName="";
					tUserName=setup.getProperty("SERVERUSER");
					
					//尝试登陆Tableau服务器,获取令牌	
					if(!tUserName.equals(""))
					{									
						String serverHost="http://"+setup.getProperty("SERVERHOST")+":"+setup.getProperty("SERVERPORTAL");
						String token=null;
						
						//是否使用SSL证书方式登录
						String ssl=setup.getProperty("TABLEAUUSEDSSL");
						if(ssl!=null && !ssl.equals(""))
						{
							if(Boolean.parseBoolean(ssl))	
							{
								serverHost="https://"+setup.getProperty("SERVERHOST")+":"+setup.getProperty("SERVERPORTAL");
								token=HttpRequest.sendSSLPost(serverHost+"/trusted","username="+tUserName);
							}
							else
							{
								token=HttpRequest.sendPost(serverHost+"/trusted","username="+tUserName);		
							}
						}
						else
						{
							token=HttpRequest.sendPost(serverHost+"/trusted","username="+tUserName);	
						}
						
						if(token!=null && !token.equals("") && !token.equals("-1"))
						{										
							sql=db.sqlList.getProperty("change_report_view_status");
							db.updatedb(sql,queryReportID);							
							
							String url=serverHost+"/trusted/"+token+"/views/"+views;
							
							modelAndView = new ModelAndView("openMobileReport");
							
							modelAndView.addObject("SYSTEMNAME", setup.getProperty("SYSTEMNAME"));
							modelAndView.addObject("url",url);
							modelAndView.addObject("token",token);
							modelAndView.addObject("views",views);
					    	modelAndView.addObject("serverHost", serverHost);
					    	
					    	modelAndView.addObject("reportName", rs.getString("reportname"));
					    	modelAndView.addObject("createDate", rs.getDate("createDate"));
					    	modelAndView.addObject("num", rs.getInt("num"));					    	
					    	modelAndView.addObject("description", rs.getString("description"));
					    	
						}
						else
						{						
							modelAndView = new ModelAndView("error");
							modelAndView.addObject("message","当前站点不受服务器信任,请添加站点到Tableau授信服务器列表.");									
						}
					}
					else
					{
						modelAndView = new ModelAndView("error");
						modelAndView.addObject("message","用户权限不足,无法登陆报表系统,请咨询管理员添加报表服务器权限.");
					}
					
				}
				else
				{					
					modelAndView = new ModelAndView("error");
					modelAndView.addObject("message","没有找到目标报表,它可能已经被删除.");
				}
				rs.close();
				db.close();
			}
			else
			{				
				modelAndView = new ModelAndView("error");
				modelAndView.addObject("message","参数错误,请循正式路径访问。");							
			}			
		}		
		catch(Exception ex)
		{	
			modelAndView = new ModelAndView("error");
			modelAndView.addObject("message","加载页面错误:"+ex.getMessage());			
		}
		
		return modelAndView;
	}
}

openSmallProgramReport.jsp代码,其实也无所谓。

<%@ page contentType="text/html; charset=utf-8" language="java" errorPage="" %>





 






${SYSTEMNAME}








上传时间:${createDate}  点击${num}次
${description}

 

这个文件用了Jquery easy UI框架,主要是用一个隐藏的input保存一下Tableau的有效访问地址(带有token)。然后写一个openSmallProgramReport.js

var viz=null;
$(document).ready(function ()
{
	try
	{
		var containerDiv = document.getElementById("reportContainer");
		var options = {
			hideTabs: true,
			hideToolbar: true,
			toolbarPosition:'TOP',
			device:'phone'
		};

		if (viz) {viz.dispose();}
		viz = new tableau.Viz(containerDiv, $('#url').val()+"?:embed=yes", options);
	}
	catch(e)
	{
		alert("初始化报表出错:"+e.message);
	}
});

使用URL生成报表对象。

小程序部分就很简单了,加一个web-view就行了。


效果:

微信小程序集成Tableau报表_第1张图片

先列表,然后点击展示报表。

PS at 2020-05-01:然后我又去试了试钉钉小程序,真是抄的稀烂。

 

你可能感兴趣的:(数据可视化,大数据与数据可视化,编程开发)