qq_38254898 2026-02-03 09:16 采纳率: 0%
浏览 3

帆软自定义提交,实现更新表后执行存储过程

帆软自定义提交,实现更新表后执行存储过程
帆软11.0.20
自定义控件和网页web属性写js可以实现,但是自定义控件的事件没有填报成功后执行这一选项,网页web属性会在当前报表每个sheet页提交填报成功后都执行这个存储过程。
希望能在填报设置的自定义提交里面写一个java类,实现执行指定的数据连接执行指定的SQL语句。
  • 写回答

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 类方式

    🔧 配置步骤如下:

    1. 在“自定义提交”界面中,点击“添加”。
    2. 选择“Java 类方式”。
    3. 在“类名”中填写你编写的 Java 类全路径,例如:com.example.CustomSubmitHandler
    4. 在“方法名”中填写你要调用的方法名,如 executeStoredProcedure
    5. 在“参数值”中传递两个参数:
      • 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 项目结构或打包说明,请告诉我!

    评论

报告相同问题?

问题事件

  • 创建了问题 2月3日