当前位置: 首页 > news >正文

FineReport帆软报表:使用JAVA批量更新报表里的数据集连接名

最近接到业务需求,需要在正式环境中对大批量的报表进行数据测试,由于数据需要连接到测试的数据库连接,所以需要一张一张改,手工的方式效率慢且耗时,就想起能否通过程序刷新,毕竟帆软底层也是JAVA。

1.首先需要了解到:帆软的CPT文件其实就是XML,可以用过XML解析的方式修改;

我们可以右键用文本打开,可以看到其中<DatabaseName>就是我们数据集使用的连接名;

2.现在我们要把saphana替换成106测试并保存下来;

那思路就很清晰了,写个JAVA,读取CPT文件,然后解析获取<DataBaseName>并遍历,然后修改成你想要的连接名。

3.JAVA代码如下

需要注意:

使用DOM(Document Object Model)API直接设置ElementtextContent属性来包含CDATA区块(如<![CDATA[106测试]]>)并不会按预期工作,因为textContent属性是用来处理纯文本内容的。当你尝试将CDATA区块作为字符串赋值给textContent时,特殊字符(如<>等)会被转义,以符合XML的文本内容规则。要在Java中修改XML元素以包含CDATA区块,你需要创建一个CDATASection节点,并将其作为子节点添加到相应的元素中。以下代码示例:

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.*;
import java.io.File;
import java.nio.file.*;public class UpdateCPT {public static void main(String[] args) {try {String module = "SM";//获取工程目录newfile/SDPath directoryPath = Paths.get("oldfile/"+ module);//创建文件流,循环读取cpt文件DirectoryStream<Path> stream = Files.newDirectoryStream(directoryPath, "*.cpt");for (Path filePath : stream) {// 读取CPT文件File file = new File("oldfile/"+module+"/"+filePath.getFileName());//新建文件工厂DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();DocumentBuilder builder = factory.newDocumentBuilder();Document document = builder.parse(file);// 获取CPT文件中<DatabaseName>的列表NodeList nList = document.getElementsByTagName("DatabaseName");//遍历<DatabaseName>的列表for (int temp = 0; temp < nList.getLength(); temp++) {//创建子节点Node nNode = nList.item(temp);// 创建一个CDATA区块并设置其内容为106测试CDATASection newCdata = document.createCDATASection("106测试");//如果ELEMENT_CODE=1,1就是里面的内容时element参数if (nNode.getNodeType() == Node.ELEMENT_NODE) {Element eElement = (Element) nNode;// 清空内容eElement.setTextContent("");//将saphana作为CDATE区块放入<DatabaseName>中nNode.appendChild(newCdata);}}// 保存修改后的CPTTransformerFactory transformerFactory = TransformerFactory.newInstance();Transformer transformer = transformerFactory.newTransformer();transformer.setOutputProperty(OutputKeys.INDENT, "yes");DOMSource source = new DOMSource(document);StreamResult result = new StreamResult(new File("newfile/"+module+"/"+filePath.getFileName()));transformer.transform(source, result);System.out.println(filePath.getFileName()+":文件已修改完成!");}} catch (Exception e) {e.printStackTrace();}}
}

上述代码是将工程文件里的oldfile文件里的CPT全部按要求修改。

至此使用JAVA批量更新报表里的数据集连接名就完成了👏👏👏👏👏。


http://www.mrgr.cn/news/15578.html

相关文章:

  • Python——类装饰器
  • 【方法】如何编辑“只读方式”下的Word文档?
  • 2024年第四届《英语世界》杯全国大学生翻译大赛
  • Rocksdb一些日志
  • carla unreal engine源码:如何创建radar可视化探测锥
  • ESP32应用开发-Webserver
  • 大数据技术之Flume 数据流监控——Ganglia 的安装与部署(11)
  • 【惠农网-注册安全分析报告】
  • 前端页面调用本地exe,打开exe主界面
  • MathType常见问题汇总
  • Python中的数据类型知识汇总
  • 《黑神话:悟空》一只横扫全球的中国“猴子”,这里也有!
  • JavaEE-servlet
  • 52 mysql 启动过程中常见的相关报错信息
  • CSS溢出——WEB开发系列20
  • 音频PCM的能量dB计算
  • 泛型相关知识点
  • 如何选择适合海外直播的网络?
  • 夜深了,赶紧根据软件系统建模建设一个房屋租赁服务系统,坐上收租大佬宝座,走上人生巅峰
  • neo4j desktop图数据库安装APOC