Page tree
Skip to end of metadata
Go to start of metadata

下面是一个集成了报表功能的HTML网页示例:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>葡萄城报表集成</title>
<link href="ActiveReports/css/theme-cosmo.css" rel="stylesheet" type="text/css" />
<link href="ActiveReports/css/GrapeCity.ActiveReports.Viewer.Html.css" rel="stylesheet" type="text/css" />

<style type="text/css">
body, html
{
height: 100% !important;
}

body
{
margin: 0px;
overflow:auto;
}

.viewer
{
height: 100% !important;
width: 70%;
display: inline-block;
}

.top
{
margin: 10px 10px 10px 10px;
font-family: 微软雅黑;
}
</style>

<script src="ActiveReports/Scripts/jquery-2.1.0.js" type="text/javascript"></script>
<script src="ActiveReports/Scripts/bootstrap-3.1.1.js" type="text/javascript"></script>
<script src="ActiveReports/Scripts/knockout-3.1.0.js" type="text/javascript"></script>
<script src="ActiveReports/Scripts/GrapeCity.ActiveReports.Viewer.Html.js" type="text/javascript"></script>
<script type="text/javascript">

// Authorization token
var _token;

$(function () {

 $(window).bind('beforeunload', function () {
  viewer.destroy();
 });

 var serverUrl = $('#ReportServer').val();
 var userName = $('#ArsUserName').val();
 var userPassword = $('#ArsUserPassword').val();
 var reportName = $('#ReportName').val();
 var divId = "#viewerContainer";
 showReport(serverUrl, userName, userPassword, reportName, divId);

});


function showReport(serverUrl, userName, userPassword, reportName, divId) {

 var token;

 var params = {
  user: userName,
  password: userPassword,
 };
 $.when(
  // 登录
  token = loginArs(serverUrl, userName, userPassword)
 )
 .then(
  // 显示报表
  ShowReportInViewer(serverUrl, token, reportName, divId)
 );
}

function loginArs(serverUrl, userName, userPassword)
{

 var params = {

  user: userName,
  password: userPassword,
 };

 var token;

 $.ajax({
 type: "POST",
 url: serverUrl + '/api/accounts/login',
 data: JSON.stringify(params),
 contentType: "application/json",
 dataType: "json",
 async: false, // 同步调用,等待返回
 success: function (data) {
  token = data['Token'];
 }
 });
 return token;
}

function ShowReportInViewer(serverUrl, token, reportName, divId) {
 var viewer;
 viewer = GrapeCity.ActiveReports.Viewer({
 element: divId, //'#viewerContainer',
 reportService: {
  url: serverUrl + '/api/',
  securityToken: token
  , resourceHandler: serverUrl + '/cache/'
 },
 report: {
 id: reportName
 //, parameters: [{ name: 'MultiValueParameter1', multivalue: true, values: null }, { name: 'Parameter1', value: null }, { name: 'Parameter2', value: null }]
 },
 uiType: 'desktop',
 localeUri: 'zh.properties', // zh.properties文件为报表查看器界面文字资源文件,可在报表系统安装目录下的 \Site\i18n\viewer 文件夹中找到。
 reportLoaded: function () {
 }
 });
 viewer.option("availableExports", ['Pdf', 'Xls']);
}

</script>
</head>
<body>
<div class="top">
本页面展示内容:直接在业务应用程序的页面内显示报表。 <br />
这种集成方法完全基于前端JavaScript调用,既不依赖于iframe,也不需要跳转到新的浏览器窗口,因此是推荐的集成方式。<br />
<p id="loginErrorMessage"></p>
<table style="display:none;">
<tr><td>&nbsp;</td>

<td>报表服务器:</td>
<td>
<input type="text" style="width:200px;" value="http://ars.grapecity.com.cn:80" name="ReportServer_NoUse" id="ReportServer" />
<input type="text" style="width:200px;" value="demo" id="ArsUserName" />
<input type="text" style="width:200px;" value="123456" id="ArsUserPassword" />
</td>
</tr>
<tr>
<td>
&nbsp;
</td>
<td>
报表:
</td>
<td>
<input type="text" style="width:200px;" value="看板" name="ReportName" id="ReportName" />
</td>
</tr>
</table>
<br />
</div>
<div id="viewerContainer" class="viewer">
</div>
</body>
</html>


其中,前端脚本的核心代码是 showReport 函数,该函数先调用报表系统的API(api/accounts/login)登录到报表系统,获取一个令牌(token),再用 GrapeCity.ActiveReports.Viewer 对象获取指定报表的内容,然后将报表内容嵌入到一个id为viewerContainer的DIV元素中。从用户的角度看,报表内容与页面其他内容都是普通的HTML元素。

请注意代码中被注释掉的parameters部分,是用于从业务系统向报表传递参数的。参数列表整体以JSON字串形式传递,单个参数的基本形式是 name:xxx,value:yyy 。对于多值参数,必须指定 multivalue:true。下面是一个参数列表示例:

parameters: [{ name: 'P1', multivalue: true, values: ['1', '3'] }, { name: 'P2', value: $("#txtParameter2").val() }]

在这个页面基础上,只需要修改页面隐藏域中的用户名、密码、报表服务器的URL,报表名等参数,即可改写为您自己的业务画面。

此示例页面使用纯静态HTML编写,无论您的业务系统采用何种语言编程(比如JSP,PHP,ASP等),均可将以上各项参数改写为动态内容,尤其是用户名、密码等敏感信息,可改为从Session或其他途径获得,不要硬编码在网页中。


如果此示例代码运行不正常,请按F12键进入浏览器的调试模式,看看是否跨域访问受限,参见:

9.4.8 怎么解决跨域问题?


有关葡萄城报表的HTML5报表查看器的详细信息,请参考:

8.3.3.2 HTML5报表查看器




  • No labels