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

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

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

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

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

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

    Spring Boot2.6.13集成FineReport11.0教程

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

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

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

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

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

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

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

    如何在FineReport中解析数据库内XML文件

    在帆软报表软件FineReport中处理存储于数据库字段中的XML文件,需要对XML数据进行解析,从而将数据转换为可用的报表数据源。XML数据通常以字符串形式存储在数据库表中的某字段内,这种数据结构要求使用者采用特定的...

    FineReport 群集配置方案

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

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

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

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

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

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

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

    FineReport报表制作流程

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

    FineReport报表工具内置JS的使用

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

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

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

    finereport基础入门及真实项目实战:医院资源配比决策分析(HRP)大屏可视化解决方案

    《finereport基础入门及真实项目实战:医院资源配比决策分析(HRP)大屏可视化解决方案》是一门深入浅出的IT课程,主要聚焦于FineReport报表工具的使用,并结合实际的医院资源管理场景,提供了全面的大数据分析与...

Global site tag (gtag.js) - Google Analytics