Compare commits

..

17 Commits

Author SHA1 Message Date
obo 9098db36a0 REPORT-91033 修复代码 2 years ago
Bruce.Deng-邓铖臻 3c84822025 Pull request #61: 无jira任务,release/10.0合到persist/10.0 2 years ago
Icey.Zhang c974449e23 Pull request #52: 10.0.16-0526号版本插件代码合并 4 years ago
Lanlan c21ebed9f4 Pull request #45: 误删自定义函数,恢复 4 years ago
Okcean ce7482718d Pull request #40: 10.0.14-0311号版本插件代码合并 4 years ago
Okcean 26e083a658 Pull request #36: 1127插件代码合并 5 years ago
Bruce.Deng d1776fa526 Pull request #31: 无JIRA任务 插件发布,release合persist 5 years ago
Leo.Tsai ca629a1ff6 Pull request #27: Release/10.0 5 years ago
Leo.Cai 99ff96fea6 代码做了修改,而且要导入一个新的JAR包:slf4j-simple-1.7.25.jar,JAR包下载参见文档https://help.finereport.com/doc-view-735.html 的3.1节 5 years ago
Lanlan e1f402023f Pull request #25: 无JIRA任务 插件发布,release合persist 5 years ago
Lanlan 5a3d9301af Merge pull request #23 in PG/plugin-report-doc-demo from release/10.0 to persist/10.0 5 years ago
susie 34ec362f64 Merge pull request #21 in PG/plugin-report-doc-demo from ~HARRISON/plugin-report-doc-demo:persist/10.0 to persist/10.0 5 years ago
Harrison c81c49f7ad DEMO-3230 Release10 module无法引用 5 years ago
Lanlan 9a474478b3 Merge pull request #19 in PG/plugin-report-doc-demo from release/10.0 to persist/10.0 6 years ago
Lanlan 10e88848e4 Merge pull request #12 in PG/plugin-report-doc-demo from release/10.0 to persist/10.0 6 years ago
Lanlan d6274eea84 Merge pull request #10 in PG/plugin-report-doc-demo from release/10.0 to persist/10.0 6 years ago
Lanlan de51123131 Merge pull request #8 in PG/plugin-report-doc-demo from release/10.0 to persist/10.0 6 years ago
  1. 93
      src/main/java/com/fr/data/WebServiceTableData.java
  2. 60
      src/main/java/com/fr/function/ReportCheck.java
  3. 59
      src/main/java/com/fr/io/ExportApi.java
  4. 56
      src/main/java/com/fr/io/ExportApi_frm.java

93
src/main/java/com/fr/data/WebServiceTableData.java

@ -1,87 +1,38 @@
package com.fr.data; package com.fr.data;
import com.fr.general.data.TableDataException; import javax.xml.namespace.QName;
import com.fr.log.FineLoggerFactory;
import com.fr.stable.ParameterProvider;
import org.apache.axis.client.Call; import org.apache.axis.client.Call;
import org.apache.axis.client.Service; import org.apache.axis.client.Service;
import com.fr.data.AbstractTableData;
import com.fr.general.data.TableDataException;
import javax.xml.namespace.QName; public class WebServiceTableData extends AbstractTableData{
import java.util.ArrayList; private String[][] data;
import java.util.List;
/**
* WebService程序数据集
*
* @author Roger
* @since 11.0
* Created on 2024/1/8
*/
public class WebServiceTableData extends SimpleTableData {
private static final int COLUMN_COUNT = 10;
/** public WebServiceTableData() {
* 初始化列名数组 this.data = this.createData();
*
* @return {col1,col2,col3...}
* @throws TableDataException
*/
@Override
public String[] initColumnNames() {
String[] columnNames = new String[COLUMN_COUNT];
for (int i = 0; i < COLUMN_COUNT; i++) {
columnNames[i] = "column#" + i;
}
return columnNames;
} }
/** //获取列数
* 加载数据 public int getColumnCount() throws TableDataException {
* return data[0].length;
* @return 行列数据 }
*/
@Override
public List<Object[]> loadData() {
String tableName = ((ParameterProvider) (parameters.get().toArray())[0]).getValue().toString();
FineLoggerFactory.getLogger().info("Query SQL of ParamTableDataDemo: {}", tableName);
// 保存得到的结果集
ArrayList<Object[]> valueList = new ArrayList();
try {
// 调用 Web 服务获取数据
String[][] data = createData();
// 如果数据为空,直接返回空列表 //获取列的名称为数组中第一行的值
if (data == null || data.length == 0) { public String getColumnName(int columnIndex) throws TableDataException {
return valueList; return data[0][columnIndex];
} }
// 获得总列数 //获取行数为数据的长度-1
int colNum = data[0].length; public int getRowCount() throws TableDataException {
return data.length - 1;
}
// 用对象保存数据 //获取值
Object[] objArray = null; public Object getValueAt(int rowIndex, int columnIndex) {
for (int rowIndex = 1; rowIndex < data.length; rowIndex++) { return data[rowIndex + 1][columnIndex];
objArray = new Object[colNum];
for (int i = 0; i < colNum; i++) {
objArray[i] = data[rowIndex][i];
}
// 在valueList中加入这一行数据
valueList.add(objArray);
}
} catch (Exception e) {
FineLoggerFactory.getLogger().error(e.getMessage(), e);
}
return valueList;
} }
/**
* 调用 Web 服务获取数据
*
* @return
*/
public String[][] createData() { public String[][] createData() {
try { try {
String endpoint = "http://localhost:8080/axis/TestWS2TDClient.jws"; String endpoint = "http://localhost:8080/axis/TestWS2TDClient.jws";

60
src/main/java/com/fr/function/ReportCheck.java

@ -1,35 +1,23 @@
// 自定义函数实现表间校验
package com.fr.function; package com.fr.function;
import com.fr.base.ResultFormula; import com.fr.base.ResultFormula;
import com.fr.base.operator.common.CommonOperator;
import com.fr.chart.activator.ChartBaseActivator;
import com.fr.config.activator.BaseDBActivator;
import com.fr.config.activator.ConfigurationActivator;
import com.fr.env.operator.CommonOperatorImpl;
import com.fr.io.TemplateWorkBookIO; import com.fr.io.TemplateWorkBookIO;
import com.fr.json.JSONArray; import com.fr.json.JSONArray;
import com.fr.json.JSONObject; import com.fr.json.JSONObject;
import com.fr.main.impl.WorkBook; import com.fr.main.impl.WorkBook;
import com.fr.main.workbook.ResultWorkBook; import com.fr.main.workbook.ResultWorkBook;
import com.fr.module.Module;
import com.fr.module.tool.ActivatorToolBox;
import com.fr.report.ReportActivator;
import com.fr.report.RestrictionActivator;
import com.fr.report.cell.CellElement; import com.fr.report.cell.CellElement;
import com.fr.report.module.ReportBaseActivator;
import com.fr.report.report.ResultReport; import com.fr.report.report.ResultReport;
import com.fr.script.AbstractFunction; import com.fr.script.AbstractFunction;
import com.fr.stable.WriteActor; import com.fr.stable.WriteActor;
import com.fr.store.StateServiceActivator;
import com.fr.workspace.simple.SimpleWork;
import com.fr.write.cal.WB; import com.fr.write.cal.WB;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map;
public class ReportCheck extends AbstractFunction { public class ReportCheck extends AbstractFunction {
private static HashMap wMap = new HashMap();
private static final Map<String, TpObj> wMap = new HashMap<>();
public Object run(Object[] args) { public Object run(Object[] args) {
// 获取公式中的参数 // 获取公式中的参数
String cptname = args[0].toString(); // 获取报表名称 String cptname = args[0].toString(); // 获取报表名称
@ -37,18 +25,7 @@ public class ReportCheck extends AbstractFunction {
int rownumber = Integer.parseInt(args[3].toString()); // 所取单元格所在行 int rownumber = Integer.parseInt(args[3].toString()); // 所取单元格所在行
// 定义返回的值 // 定义返回的值
Object returnValue = null; Object returnValue = null;
// 定义报表运行环境,用于执行报表
Module module = ActivatorToolBox.simpleLink(new BaseDBActivator(),
new ConfigurationActivator(),
new StateServiceActivator(),
new ReportBaseActivator(),
new RestrictionActivator(),
new ReportActivator(),
new ChartBaseActivator());
SimpleWork.supply(CommonOperator.class, new CommonOperatorImpl());
String envpath= "//Applications//FineReport10_325//webapps//webroot//WEB-INF"; //工程路径
SimpleWork.checkIn(envpath);
module.start();
try { try {
ResultWorkBook rworkbook = null; ResultWorkBook rworkbook = null;
// 读取模板 // 读取模板
@ -56,25 +33,23 @@ public class ReportCheck extends AbstractFunction {
.readTemplateWorkBook(cptname); .readTemplateWorkBook(cptname);
// 获取需要传递给报表的参数名与参数值,格式如[{"name":para1name,"value":para1value},{"name":para2name,"value":para2value},......] // 获取需要传递给报表的参数名与参数值,格式如[{"name":para1name,"value":para1value},{"name":para2name,"value":para2value},......]
JSONArray parasArray = new JSONArray(args[1].toString()); JSONArray parasArray = new JSONArray(args[1].toString());
// 需要判断是否是5秒内执行过的 // 需要判断是否是8秒内执行过的
// 取出保存的resultworkbook;
Object tempWObj = wMap.get(cptname + parasArray.toString()); TpObj tempWObj = wMap.get(cptname + parasArray);
if (tempWObj != null) { if (tempWObj != null) {
// 取出hashmap里面保存的TpObj;
TpObj curTpObj = (TpObj) tempWObj;
if ((System.currentTimeMillis() - curTpObj.getExeTime()) < 8000) { if ((System.currentTimeMillis() - tempWObj.getExeTime()) < 8000) {
rworkbook = curTpObj.getRworkbook(); rworkbook = tempWObj.getRworkbook();
} else { } else {
wMap.remove(cptname + parasArray.toString()); wMap.remove(cptname + parasArray);
} }
} }
// 如果没有设置,需要生成 // 如果没有设置,需要生成
if (rworkbook == null) { if (rworkbook == null) {
JSONObject jo = new JSONObject(); JSONObject jo;
// 定义报表执行时使用的paraMap,保存参数名与值 // 定义报表执行时使用的paraMap,保存参数名与值
java.util.Map parameterMap = new java.util.HashMap(); Map parameterMap = new HashMap<>();
if (parasArray.length() > 0) { if (!parasArray.isEmpty()) {
for (int i = 0; i < parasArray.length(); i++) { for (int i = 0; i < parasArray.length(); i++) {
jo = parasArray.getJSONObject(i); jo = parasArray.getJSONObject(i);
parameterMap.put(jo.get("name"), jo.get("value")); parameterMap.put(jo.get("name"), jo.get("value"));
@ -83,7 +58,7 @@ public class ReportCheck extends AbstractFunction {
// 执行报表 // 执行报表
rworkbook = workbook.execute(parameterMap, new WriteActor()); rworkbook = workbook.execute(parameterMap, new WriteActor());
// 保存下来 // 保存下来
wMap.put(cptname + parasArray.toString(), new TpObj(rworkbook, wMap.put(cptname + parasArray, new TpObj(rworkbook,
System.currentTimeMillis())); System.currentTimeMillis()));
} }
// 获取报表结果中对应Cell的值 // 获取报表结果中对应Cell的值
@ -98,31 +73,24 @@ public class ReportCheck extends AbstractFunction {
} }
return returnValue; return returnValue;
} }
static class TpObj {
class TpObj {
private ResultWorkBook rworkbook = null; private ResultWorkBook rworkbook = null;
private long exeTime = System.currentTimeMillis(); private long exeTime = System.currentTimeMillis();
public TpObj(ResultWorkBook rworkbook, long exeTime) { public TpObj(ResultWorkBook rworkbook, long exeTime) {
this.setRworkbook(rworkbook); this.setRworkbook(rworkbook);
this.setExeTime(exeTime); this.setExeTime(exeTime);
} }
public ResultWorkBook getRworkbook() { public ResultWorkBook getRworkbook() {
return rworkbook; return rworkbook;
} }
public void setRworkbook(ResultWorkBook rworkbook) { public void setRworkbook(ResultWorkBook rworkbook) {
this.rworkbook = rworkbook; this.rworkbook = rworkbook;
} }
public long getExeTime() { public long getExeTime() {
return exeTime; return exeTime;
} }
public void setExeTime(long exeTime) { public void setExeTime(long exeTime) {
this.exeTime = exeTime; this.exeTime = exeTime;
} }
} }
} }

59
src/main/java/com/fr/io/ExportApi.java

@ -18,11 +18,12 @@ import com.fr.io.exporter.TextExporter;
import com.fr.io.exporter.WordExporter; import com.fr.io.exporter.WordExporter;
import com.fr.io.exporter.excel.stream.StreamExcel2007Exporter; import com.fr.io.exporter.excel.stream.StreamExcel2007Exporter;
import com.fr.main.impl.WorkBook; import com.fr.main.impl.WorkBook;
import com.fr.module.ModuleRole;
import com.fr.module.tool.ActivatorToolBox; import com.fr.module.tool.ActivatorToolBox;
import com.fr.report.ReportActivator; import com.fr.report.ReportActivator;
import com.fr.report.RestrictionActivator; import com.fr.report.RestrictionActivator;
import com.fr.report.module.ReportBaseActivator; import com.fr.report.module.ReportBaseActivator;
import com.fr.report.write.WriteActivator;
import com.fr.scheduler.SchedulerActivator;
import com.fr.stable.WriteActor; import com.fr.stable.WriteActor;
import com.fr.store.StateServiceActivator; import com.fr.store.StateServiceActivator;
import com.fr.workspace.simple.SimpleWork; import com.fr.workspace.simple.SimpleWork;
@ -31,39 +32,32 @@ import java.io.FileOutputStream;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
public class ExportApi { public class ExportApi {
public static void main(String[] args) { public static void main(String[] args) {
/**
* 以下这段if判断仅在main函数测试时使用 /**定义报表运行环境,用于执行报表*/
* 实际生产环境中一般使用web容器集成帆软后帆软服务会自动启动不再需要下面的if判断直接写导出的业务逻辑即可 com.fr.module.Module module = ActivatorToolBox.simpleLink(new BaseDBActivator(),
* web集成注意事项 new ConfigurationActivator(),
* 1集成环境需要依赖当前使用jdk对应版本的tools.jar一般从jdk中直接复制即可; new ResourceRepositoryActivator(),
* 2帆软服务自动启动成功后使用的工作目录自动识别为集成应用下的WEB-INF目录所以需要把下面代码中envpath指向的工作目录拷贝到集成环境下web应用的WEB-INF目录 new StandaloneModeActivator(),
* 正式发布时需要拷贝生产环境的帆软WEB-INF如果有的话这样才能沿用原先帆软的配置及模板如果是集群环境会自动使用文件服务器的模板本地测试时envpath需要指向单机非集群的帆软工程 new ModuleHealActivator(),
* 3可以访问集成环境的地址 ip:port/应用名/decision 如果能成功访问且不需要初始化配置则代表帆软服务启动成功 //2020.4.26jar包之前的版本,替换成StateServerActivator()
*/ new StateServiceActivator(),
if (!ModuleRole.Root.isPresent()) { new SchedulerActivator(),
/**定义报表运行环境,用于执行报表*/ new ReportBaseActivator(),
com.fr.module.Module module = ActivatorToolBox.simpleLink( new RestrictionActivator(),
new BaseDBActivator(), new ReportActivator(),
new ConfigurationActivator(), new WriteActivator(),
new ResourceRepositoryActivator(), new ChartBaseActivator());
new StandaloneModeActivator(), SimpleWork.supply(CommonOperator.class, new CommonOperatorImpl());
new ModuleHealActivator(), //定义工程路径
//2020.4.26jar包之前的版本,替换成StateServerActivator() String envpath = "D:\\javatools\\FineReport_10.0\\webapps\\webroot\\WEB-INF\\";
new StateServiceActivator(), SimpleWork.checkIn(envpath);
new ReportBaseActivator(), I18nResource.getInstance();
new RestrictionActivator(), module.start();
new ReportActivator(),
new ChartBaseActivator());
SimpleWork.supply(CommonOperator.class, new CommonOperatorImpl());
//定义工程路径
String envpath = "D:\\FineReport_11.0\\webapps\\webroot\\WEB-INF\\";
SimpleWork.checkIn(envpath);
I18nResource.getInstance();
module.start();
}
/**输出模板*/ /**输出模板*/
try { try {
// 定义输出的模板路径,以reportlets为根目录 // 定义输出的模板路径,以reportlets为根目录
@ -127,8 +121,11 @@ public class ExportApi {
ImageExport.export(outputStream, workbook.execute(parameterMap, new WriteActor())); ImageExport.export(outputStream, workbook.execute(parameterMap, new WriteActor()));
outputStream.close(); outputStream.close();
module.stop();
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
} finally {
SimpleWork.checkOut();
} }
} }

56
src/main/java/com/fr/io/ExportApi_frm.java

@ -13,11 +13,13 @@ import com.fr.io.exporter.ImageExporter;
import com.fr.io.exporter.PDFExporter; import com.fr.io.exporter.PDFExporter;
import com.fr.io.exporter.excel.stream.StreamExcel2007Exporter; import com.fr.io.exporter.excel.stream.StreamExcel2007Exporter;
import com.fr.main.workbook.ResultWorkBook; import com.fr.main.workbook.ResultWorkBook;
import com.fr.module.ModuleRole; import com.fr.module.Module;
import com.fr.module.tool.ActivatorToolBox; import com.fr.module.tool.ActivatorToolBox;
import com.fr.report.ReportActivator; import com.fr.report.ReportActivator;
import com.fr.report.RestrictionActivator; import com.fr.report.RestrictionActivator;
import com.fr.report.module.ReportBaseActivator; import com.fr.report.module.ReportBaseActivator;
import com.fr.report.write.WriteActivator;
import com.fr.scheduler.SchedulerActivator;
import com.fr.store.StateServiceActivator; import com.fr.store.StateServiceActivator;
import com.fr.workspace.simple.SimpleWork; import com.fr.workspace.simple.SimpleWork;
@ -25,38 +27,25 @@ import java.io.File;
import java.io.FileOutputStream; import java.io.FileOutputStream;
public class ExportApi_frm { public class ExportApi_frm {
public static void main(String[] args) { public static void main(String[] args) {
/** // 定义报表运行环境,用于执行报表
* 以下这段if判断仅在main函数测试时使用 Module module = ActivatorToolBox.simpleLink(new BaseDBActivator(),
* 实际生产环境中一般使用web容器集成帆软后帆软服务会自动启动不再需要下面的if判断直接写导出的业务逻辑即可 new ConfigurationActivator(),
* web集成注意事项 new ResourceRepositoryActivator(),
* 1集成环境需要依赖当前使用jdk对应版本的tools.jar一般从jdk中直接复制即可; new StandaloneModeActivator(),
* 2帆软服务自动启动成功后使用的工作目录自动识别为集成应用下的WEB-INF目录所以需要把下面代码中envpath指向的工作目录拷贝到集成环境下web应用的WEB-INF目录 new ModuleHealActivator(),
* 正式发布时需要拷贝生产环境的帆软WEB-INF如果有的话这样才能沿用原先帆软的配置及模板如果是集群环境会自动使用文件服务器的模板本地测试时envpath需要指向单机非集群的帆软工程 new StateServiceActivator(),
* 3可以访问集成环境的地址 ip:port/应用名/decision 如果能成功访问且不需要初始化配置则代表帆软服务启动成功 new SchedulerActivator(),
*/ new ReportBaseActivator(),
if (!ModuleRole.Root.isPresent()) { new RestrictionActivator(),
/**定义报表运行环境,用于执行报表*/ new ReportActivator(),
com.fr.module.Module module = ActivatorToolBox.simpleLink( new WriteActivator(),
new BaseDBActivator(), new ChartBaseActivator());
new ConfigurationActivator(), SimpleWork.supply(CommonOperator.class, new CommonOperatorImpl());
new ResourceRepositoryActivator(), String envpath = "C:\\Users\\hipsh\\Desktop\\apache-tomcat-8.5.38-10.0\\webapps\\webroot\\WEB-INF\\";//工程路径
new StandaloneModeActivator(), SimpleWork.checkIn(envpath);
new ModuleHealActivator(), I18nResource.getInstance();
//2020.4.26jar包之前的版本,替换成StateServerActivator() module.start();
new StateServiceActivator(),
new ReportBaseActivator(),
new RestrictionActivator(),
new ReportActivator(),
new ChartBaseActivator());
SimpleWork.supply(CommonOperator.class, new CommonOperatorImpl());
//定义工程路径
String envpath = "D:\\FineReport_11.0\\webapps\\webroot\\WEB-INF\\";
SimpleWork.checkIn(envpath);
I18nResource.getInstance();
module.start();
}
try { try {
java.util.Map parameterMap = new java.util.HashMap(); java.util.Map parameterMap = new java.util.HashMap();
@ -77,8 +66,11 @@ public class ExportApi_frm {
ImageExporter ImageExport = new ImageExporter(); ImageExporter ImageExport = new ImageExporter();
ImageExport.export(outputStream, re); ImageExport.export(outputStream, re);
outputStream.close(); outputStream.close();
module.stop();
} catch (Exception e) { } catch (Exception e) {
e.printStackTrace(); e.printStackTrace();
} finally {
SimpleWork.checkOut();
} }
} }
} }
Loading…
Cancel
Save