记录下
URL协议方式不支持需要Cookie与Session会话的URL,另数据通讯方式是单向的,在报表任务完成后不能给WEB网页发送通知消息。
WebSocket方式是利用浏览器的WebSocket通讯功能与WEB报表客户端互相传递数据,WEB报表客户端是一个WebSocket的伺服服务器。对于有Cookie与Session会话的URL,可以采用ajax方式先把数据在网页中获取到,然后再传递给WEB报表客户端,这样就实现了对有Cookie与Session的报表支持。
<!DOCTYPE html>
<html>
<head>
<title>WEB报表客户端使用教程(WebSocket) - 锐浪WEB报表</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="Description" content="锐浪HTML5报表应用WEB报表客户端实现打印与数据导出。" />
<meta name="Keywords" content="WEB报表,WEB打印,HTML5报表,WEB报表客户端" />
<script src="grwebapp.js" type="text/javascript"></script>
<script language="javascript" type="text/javascript">
function window_onload() {
//*这句特别重要*:只有在WEB报表客户端程序后,才能进行WebSocket通讯
//如果WEB报表客户端程序为开机自启动,以下调用应该去掉。更多说明请参考帮助“WEB报表(B/S报表)->WEB报表客户端->部署与安装”部分中与谷歌Chrome浏览器的相关说明
webapp_urlprotocol_startup(); //启动WEB报表客户端程序,以便侦听接受 WebSocket 数据
}
//消息响应函数,接受WEB报表客户端执行完打印与数据导出等任务回发的消息
//如果不要响应任务执行完消息,此函数可以不用定义,直接去掉即可。
function webapp_onmessage(event) {
var message = JSON.parse(event.data);
//在向打印机发送完打印数据后响应的消息,在函数体中完成自己的任务
function OnPrintEnd() {
var msg = "报表已经打印,输出打印机:" + message.PrinterName;
if (message.reportid) {
msg += "\r\nreportid = " + message.reportid;
}
alert(msg);
}
//在执行了数据导出任务后响应的消息,在函数体中完成自己的任务
function OnExportEnd() {
var msg = "数据导出已经完成,导出文件:" + message.FileName;
if (message.reportid) {
msg += "\r\nreportid = " + message.reportid;
}
alert(msg);
}
//alert(event.data);
if (message.event == "PrintEnd") {
OnPrintEnd();
}
else if (message.event == "ExportEnd") {
OnExportEnd();
}
}
</script>
</head>
<body onload="window_onload()">
<h1>锐浪WEB报表客户端使用教程</h1>
<h3><a href="webapp-overview.htm">关于锐浪WEB报表客户端</a></h3>
<h3>特别提示:以下链接点击无响应,请下载安装<a href="webapp-download.htm">WEB报表客户端</a></h3>
<h3>起步例子</h3>
<p><a href='javascript:ws_ajax_preview();'>打印预览(AJAX)</a>通过AJAX方式获取报表模板与报表数据</p>
<script language="javascript" type="text/javascript">
function ws_ajax_preview() {
var args = {
report: urlAddRandomNo("/grf/1a.grf"),
data: "/data/DataCenter.jsp?data=Customer",
//dataUrlParams: "如果data参数为URL,且其需要额外的参数数据,则定义在此参数中", //例子演示不需要,所以注释掉
type: "preview",
};
webapp_ws_ajax_run(args);
}
</script>
<p> <a href='javascript:ws_ajax_print();'>打印(AJAX)</a>通过AJAX方式获取报表模板与报表数据</p>
<script language="javascript" type="text/javascript">
function ws_ajax_print() {
var args = {
type: "print",
//showOptionDlg: false, //如果不显示打印对话框而直接打印,将此行注释去掉即可
report: urlAddRandomNo("/grf/1a.grf"),
data: "/data/DataCenter.jsp?data=Customer"
};
webapp_ws_ajax_run(args);
}
</script>
<p><a href='javascript:ws_ajax_export_xls();'>导出Excel(AJAX)</a>通过AJAX方式获取报表模板与报表数据</p>
<script language="javascript" type="text/javascript">
function ws_ajax_export_xls() {
var args = {
type: "xls",
report: urlAddRandomNo("/grf/1a.grf"),
data: "/data/DataCenter.jsp?data=Customer",
reportid: "1a" //这个参数不是必须的,只是用于回发消息标识报表身份
};
webapp_ws_ajax_run(args);
}
</script>
<h3>自定义打印参数</h3>
<p> <a href='javascript:print_arguments();'>自定义打印参数</a>:指定打印机,设置逐份打印与打印份数。</p>
<script language="javascript" type="text/javascript">
function print_arguments() {
var args = {
type: "print", //如果是要进行打印,将 type 设置为 print
report: urlAddRandomNo("/grf/1a.grf"),
data: "/data/DataCenter.jsp?data=Customer",
PrinterName: "Microsoft Print to PDF", //指定要输出的打印机名称
Collate: false, //不按逐份方式打印
Copies: 5 //共打印5份
}
webapp_ws_ajax_run(args);
}
</script>
<p> <a href='javascript:export_xls_custom();'>自定义导出Excel</a>:设置合适的选项参数,将数据导出为连续的表格,页眉页脚不导出,不显示导出参数对话框等。</p>
<script language="javascript" type="text/javascript">
function export_xls_custom() {
var args = {
report:urlAddRandomNo("/grf/1a.grf"),
data: "/data/DataCenter.jsp?data=Customer",
type: "xls",
ExportPageBreak: false,
ExportPageHeaderFooter: false,
SameAsPrint: false,
showOptionDlg: false, //指定不显示导出选项对话框
filename: "d:\\temp\\gridreport.xls", //指定导出的文件路径与文件名
//open: false //指定导出后不自动打开文件
}
webapp_ws_ajax_run(args);
}
</script>
<h3>更多应用方式</h3>
<p><a href='javascript:ws_data_from_string();'>打印预览(报表数据来自字符串)</a>:通过WebSocket直接将网页中的字符串数据传递给WEB报表客户端。</p>
<script language="javascript" type="text/javascript">
function ws_data_from_string() {
var args = {
type: "preview", //设置不同的属性可以执行不同的任务,如:preview print pdf xls csv txt rtf img grd
report: urlAddRandomNo("/grf/1a.grf"),
//实际应用中,data应该为程序中通过各种途径获取到的数据,最后要将数据转换为报表需要的XML或JSON格式的字符串数据
data:"<xml>" +
"<row><CustomerID>HUNGC</CustomerID><CompanyName>五金机械</CompanyName><ContactName>苏先生</ContactName><ContactTitle>销售代表</ContactTitle></row>" +
"<row><CustomerID>CENTC</CustomerID><CompanyName>三捷实业</CompanyName><ContactName>王先生</ContactName><ContactTitle>市场经理</ContactTitle></row>" +
"<row><CustomerID>CACTU</CustomerID><CompanyName>威航货运</CompanyName><ContactName>刘先生</ContactName><ContactTitle>销售代理</ContactTitle></row>" +
"</xml>",
reportid: "ws_data_from_string" //这个参数不是必须的,只是用于回发消息标识报表身份
};
webapp_ws_ajax_run(args);
}
</script>
<p><a href='javascript:ws_data_from_object();'>打印预览(报表数据来自JSON对象)</a>:通过WebSocket直接将网页中的JSON对象数据传递给WEB报表客户端。</p>
<script language="javascript" type="text/javascript">
function ws_data_from_object() {
var args = {
type: "preview", //设置不同的属性可以执行不同的任务,如:preview print pdf xls csv txt rtf img grd
report: urlAddRandomNo("/grf/1a.grf"),
//实际应用中,data应该为程序中通过各种途径获取到的数据,最后要将数据转换为报表需要的XML或JSON格式的字符串数据
data:
{
"recordset": [
{
"CustomerID": "ALFKI",
"CompanyName": "三川实业有限公司",
"ContactName": "刘小姐",
"Address": "大崇明路 50 号",
"City": "天津",
"Region": "华北",
"PostalCode": "343567",
"Phone": "(030) 30074321"
},
{
"CustomerID": "ANATR",
"CompanyName": "东南实业",
"ContactName": "王先生",
"Address": "承德西路 80 号",
"City": "天津",
"Region": "华北",
"PostalCode": "234575",
"Phone": "(030) 35554729"
}
]
},
reportid: "ws_data_from_object" //这个参数不是必须的,只是用于回发消息标识报表身份
};
webapp_ws_ajax_run(args);
}
</script>
</body>
</html>