2条回答 默认 最新
檀越@新空间 2026-02-03 09:17关注上午好☀️☀️☀️️
本答案参考通义千问在帆软 11.0.20 中,自定义提交功能通常用于在填报表提交后执行一些自定义逻辑。然而,你提到的 “自定义控件的事件没有填报成功后执行这一选项” 是一个常见问题,特别是在某些版本中,自定义控件的事件无法直接绑定到填报提交成功后的回调函数。
不过,可以通过自定义 Java 类的方式来实现:在填报表提交之后,执行指定的数据连接并调用存储过程。
✅ 解决方案
1. 创建自定义 Java 类
你需要编写一个 Java 类,该类负责:
- 获取当前数据连接
- 执行 SQL 或调用存储过程
📁 文件结构示例(假设使用 Maven 项目):
src/ └── com/ └── example/ └── CustomSubmitHandler.java✅ 示例代码如下:
package com.example; import com.fr.data.DataSet; import com.fr.data.impl.DataSetImpl; import com.fr.script.ScriptManager; import com.fr.session.FineSessionContext; import com.fr.stable.type.DateUtil; import com.fr.stable.util.StringUtils; import com.fr.web.core.servlet.AbstractServlet; import com.fr.web.core.servlet.ServletContext; import com.fr.web.core.servlet.SessionContext; import com.fr.web.core.servlet.WebAppContext; import java.sql.CallableStatement; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.util.Map; public class CustomSubmitHandler { public void executeStoredProcedure(String connectionString, String storedProcedureName) { Connection conn = null; CallableStatement cs = null; try { // 加载驱动 Class.forName("com.mysql.cj.jdbc.Driver"); // 建立连接 conn = DriverManager.getConnection(connectionString); // 调用存储过程 cs = conn.prepareCall("{call " + storedProcedureName + "()}"); // 执行 cs.execute(); } catch (Exception e) { e.printStackTrace(); } finally { try { if (cs != null) cs.close(); if (conn != null) conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } public static void main(String[] args) { new CustomSubmitHandler().executeStoredProcedure( "jdbc:mysql://localhost:3306/your_database?useSSL=false&serverTimezone=UTC", "your_stored_procedure_name" ); } }注意:
- 请根据实际数据库类型(MySQL、Oracle 等)调整 JDBC 驱动和连接字符串。
- 存储过程名要与数据库中的实际名称一致。
2. 配置自定义提交脚本
在帆软报表中,进入 填报设置 > 自定义提交 > 添加自定义提交,然后选择 Java 类方式。
🔧 配置步骤如下:
- 在“自定义提交”界面中,点击“添加”。
- 选择“Java 类方式”。
- 在“类名”中填写你编写的 Java 类全路径,例如:
com.example.CustomSubmitHandler。 - 在“方法名”中填写你要调用的方法名,如
executeStoredProcedure。 - 在“参数值”中传递两个参数:
connectionString: 数据库连接字符串(例如:jdbc:mysql://localhost:3306/your_db)storedProcedureName: 存储过程名称(例如:your_sp_name)
注意:如果 Java 类需要更多参数,可以扩展方法签名。
3. 确保数据连接正确
在帆软中,确保你使用的数据连接是正确的,并且有权限执行存储过程。
- 可以在 数据连接管理 > 编辑连接 > 测试连接 来验证是否正常。
4. 部署并测试
将你的 Java 类打包为 JAR 文件,并放到帆软服务器的
WEB-INF/lib目录下,或者通过插件方式加载。建议:如果你使用的是 Tomcat 服务器,可以将 JAR 放入
webapps/WEB-INF/lib目录。然后重新启动帆软服务,测试填报提交后是否执行了存储过程。
✅ 总结
| 步骤 | 内容 | |------|------| | 1 | 创建 Java 类,用于执行存储过程 | | 2 | 在帆软填报设置中配置自定义提交,使用 Java 类方式 | | 3 | 配置参数,包括连接字符串和存储过程名 | | 4 | 部署 Java 类并测试 |
🚀 进阶建议
- 如果你需要动态传参,可以在 Java 方法中增加参数处理逻辑。
- 使用日志记录(如
System.out.println()或 Log4j)来调试执行结果。 - 对于复杂业务,可考虑封装成独立的服务模块,通过 REST API 调用。
如果你希望我提供一个完整的 Maven 项目结构或打包说明,请告诉我!
解决 无用评论 打赏 举报