`
IT梦想家
  • 浏览: 18073 次
社区版块
存档分类
最新评论

FineReport中以jws方式调用WebService数据源方案

阅读更多

在使用WebService作为项目的数据源时,希望报表中也是直接调用这个WebService数据源,而不是定义数据连接调用对应的数据库表,这样要怎么实现呢?

在程序中访问WebService应用服务,将WebService返回的数据转为程序数据集,然后在设计器中调用。

axis1.4上的WebService为例,介绍其取数方式以及将数据转换为WebService的程序数据集的过程。

WebService应用服务

如在Tomcat下的Axis工程中以jwa方式发布了一个WebService应用服务下TestWS2TDClient.jws,返回一个数组数据,如下:

public class TestWS2TDClient {

public String[][] getTD() {

String[][] a = {{"城市", "销售员", "销售额"},{"江苏", "Anna", "230"},{"江苏", "Alex", "190"},{"江苏","Jack","320"},{"江苏","Apple","210"},{"浙江","Faye","150"},{"浙江","Sammi","280"}};

return a;

}

}

jws方式发布WebService:将写好的TestWS2TDClient.java文件重命名TestWS2TDClient.jws,放在Tomcat\webapps\axis即可。

java类中访问WebService数据源

Java中发布一个soap请求,访问TestWS2TDClient.java,得到返回的数据,代码如下:

try {
String endpoint = "http://localhost:8080/axis/TestWS2TDClient.jws";
Service service = new Service(); //创建一个服务(service)调用(call)
Call call = (Call) service.createCall(); // 通过service创建call对象
call.setTargetEndpointAddress(new java.net.URL(endpoint)); // 设置service所在URL
call.setOperationName(new QName("http://localhost:8080/axis/TestWS2TDClient.jws","getTD"));  // 调用service中的getTD方法
String[][] ret = (String[][])call.invoke(new Object[] {}); // getTD方法没有参数,因此传一个空的对象,得到service中getTD返回的数据
return ret;
} catch (Exception e) {
e.printStackTrace();
}

Soap即简单对象访问协议,客户端发送一个请求,调用相应的对象,然后服务器返回结果。这些消息是XML格式的,并且封装成符合HTTP协议的消息。

在此期间需要引入axis.jar、commons-discovery-0.2.jar、commons-logging-1.0.4.jar、wadl4j-a.5.a.jar、log4j-1.2.8.jar、jaxrpc.jar六个包,可以在zxis\WEB-INF\lib下找到。

将获得数据转为程序数据集

访问WebService后,该服务会返回数据给客户端,该例中返回一个字符串数组。定义WebServiceTableData.java类,扩展AbstractTableData,将获得的数组数据转为程序数据集。完整代码如下:

package com.fr.data;
 
import javax.xml.namespace.QName;
import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import com.fr.data.AbstractTableData;
import com.fr.general.data.TableDataException;
 
public class WebServiceTableData extends AbstractTableData{
private String[][] data;
public WebServiceTableData() {
this.data = this.getData();
}
 
//获取列数
public int getColumnCount() throws TableDataException {
return data[0].length;
}
 
//获取列的名称为数组中第一行的值
public String getColumnName(int columnIndex) throws TableDataException {
return data[0][columnIndex];
}
 
//获取行数为数据的长度-1
public int getRowCount() throws TableDataException {
return data.length - 1;
}
 
//获取值
public Object getValueAt(int rowIndex, int columnIndex) {
return data[rowIndex + 1][columnIndex];
}
 
public String[][] getData() {
try {
String endpoint = "http://localhost:8080/axis/TestWS2TDClient.jws";
Service service = new Service();
Call call = (Call) service.createCall();
call.setTargetEndpointAddress(new java.net.URL(endpoint));
call.setOperationName(new QName("http://localhost:8080/axis/TestWS2TDClient.jws",
"getTD"));
String[][] ret = (String[][])call.invoke(new Object[] {});
return ret;
} catch (Exception e) {
e.printStackTrace();
}
return new String[][] {};
}
} 

将编译好的class文件拷贝到%FR_HOME%/WebReport/WEB-INF/classes/com/fr/data文件夹下。

设计器中调用程序数据集

新建报表,定义数据集,选择程序数据集,选择定义好的程序数据集WebServiceTableData.class,自定义数据集的名称为ds1,启动tomcat服务器,点击预览,效果如下:


 

  • 大小: 6.2 KB
0
0
分享到:
评论

相关推荐

    详细解密FineReport中的报表执行过程

    通过这种方式,用户能够诊断报表运行中可能出现的问题,并对报表性能进行优化。 需要注意的是,在上述内容中,由于OCR扫描技术的限制,可能会存在个别字的识别错误或漏识别现象。因此在实际操作时,用户应当根据上...

    FineReport报表软件API源代码之程序数据集、自定义函数和导出API.docx

    程序数据集是FineReport报表软件中的一个重要组件,它允许用户定义自己的数据源,并将其用作报表数据源。程序数据集可以是数据库数据、文本数据或任何其他类型的数据,只要用户实现了TableData接口。TableData接口...

    报表开发工具FineReport中如何把报表放到网页中显示

    ### 报表开发工具FineReport中如何把报表放到网页中显示 #### 一、背景介绍 随着信息技术的发展,越来越多的企业倾向于使用基于浏览器/服务器(Browser/Server,简称BS架构)的系统来处理业务流程。这类系统通常...

    报表工具FineReport中如何把报表放到网页中显示

    ### 报表工具FineReport中如何把报表放到网页中显示 #### 一、背景与需求分析 随着互联网技术的发展,企业对于数据展示的需求越来越倾向于基于Web的解决方案。这些Web应用通常采用BS架构(Browser/Server架构),...

    图表制作软件FineReport中程序数据集传参使用解决方案扫描.pdf

    总结来说,FineReport通过程序数据集和`TableData`接口,提供了一种强大的数据操作方式,允许用户以编程的方式处理数据,实现动态数据源和参数化查询。这种灵活性使得FineReport不仅适用于常规的报表制作,还能应对...

    FineReport数据可视化分析的图文步骤.docx

    在FineReport中,数据分析可以分为多个步骤,包括配置数据源、添加数据分析表、设计主体、进行数据分析等。下面我们将对每个步骤进行详细的解释。 1、配置数据源 配置数据源是数据分析的第一步骤。在FineReport中...

    基于FineReport企业BI数据挖掘研究.pdf

    综上所述,FineReport在企业BI数据挖掘方面的研究与应用,不仅提供了一套完整的数据分析解决方案,还能够在实际操作中帮助企业解决数据孤岛和海量数据分析等问题,助力企业构建更加智能化的决策体系。随着数据分析和...

    Finereport数据集参数实现动态列报表模板 + 函数JS代码

    在IT领域,尤其是在数据分析和报表制作中,动态列报表是一种非常实用的...通过学习和理解这个示例,你可以掌握如何在实际项目中灵活运用FineReport的动态列功能,结合JS进行更高级的定制,以满足各种复杂的报表需求。

    如何将钉钉集成到FineReport插件中(官方)

    钉钉集成到FineReport插件中,是为满足企业用户在移动办公场景下,通过FineReport报表平台与钉钉企业号平台的深度整合,实现报表分享、消息推送、单点登录等多样化的功能需求。本文将详细介绍如何将钉钉与FineReport...

    FineReport 群集配置方案

    在实现 FineReport 群集配置方案的过程中,我们需要安装和配置 Apache 服务器、Tomcat 服务器和 JK 连接器。 首先,我们需要安装 Apache 服务器。 Apache 服务器官方没有发布编译好的 Linux 二进制包,因此我们...

    Spring Boot2.6.13集成FineReport11.0教程

    FineReport 需要连接数据库以获取数据。在本教程中,我们使用 MySQL 8.0.23 创建了一个名为 yimi 的数据库,并创建了一个名为 student 的表。用户需要了解如何创建数据库和表,并插入测试数据。 知识点 3:...

    FineReport与泛微OA深度集成解决方案

    数据集成是指将 FineReport 的数据源与泛微 OA 的数据源集成,实现数据的统一管理和分析。页面集成是指将 FineReport 的报表页面与泛微 OA 的页面集成,实现统一的用户界面。 FineReport 与泛微 OA 的深度集成能够...

    FineReport关于tomcat集群部署的方案.pdf

    FineReport的集群部署方案可以应用于各种报表开发项目,例如报表系统、数据分析系统、业务智能系统等。 在tomcat集群环境下,FineReport提供了两种集群部署方式: 1. 分布式集群方式:每台计算机各自提供自己的...

    FineReport报表制作流程

    FineReport是一款专业的报表工具,广泛应用于企业数据可视化和分析领域。本文将详细介绍FineReport报表的制作流程,包括数据准备、报表设计、报表预览、报表集成以及报表的使用与二次开发。 1. FineReport简介 ...

    FineReport关于tomcat集群部署的方案.docx

    本方案介绍了 FineReport 在 Tomcat 集群部署中的解决方案,旨在解决多台服务器集群后配置权限、数据连接、模板、定时调度等问题的同步问题。通过 FineReport 的集群部署插件,实现了灾备和文件同步,保证了数据同步...

    FineReport常见的数据集报错错误代码和解释

    ### FineReport常见数据集...以上是对FineReport中常见错误代码的解释与解决方案。希望这些信息能够帮助开发者们更高效地排查和解决问题。如果遇到更复杂的情况或未列出的错误代码,建议查阅官方文档或寻求技术支持。

    FineReport报表工具内置JS的使用

    JavaScript,作为一种轻量级、解释型的脚本语言,以其强大的交互性和灵活性,在网页开发中扮演着核心角色。尤其在FineReport报表工具中,JavaScript的应用使得报表的设计与功能实现更加丰富和灵活。FineReport,作为...

    finereport的jar包

    在这个例子中,`FineReportService`是自定义的服务类,它封装了FineReport的API调用,如加载报表、渲染数据等。`viewReport`方法则会根据指定的报表名称,调用FineReport服务来展示报表。 至于压缩包中的"fr"文件,...

Global site tag (gtag.js) - Google Analytics