高级脚本填报

<< Click to Display Table of Contents >>

当前位置:  数据填报 

高级脚本填报

复制链接

不同于前面章节中的界面化设置“源字段”和”目标字段”之间的对应关系,为了满足客户的多样性的需求,填报参数组件还支持用纯脚本的方式实现数据填报。

1.填报参数组件脚本填报

在插入脚本前需要先添加数据源或创建数据集。这里以SQL数据库为例,

1)在 SQL 数据库中存在表 “学生”,那么用户可以在创建数据集模块创建 SQL 数据集,例如:创建一个 SQL 数据集,名称为:”学生表”,保存路径为:”填报/学生表 ” 。数据库表的数据如下:

data_report_64

2)从右侧填报组件中添加填报参数组件到报告,并绑定数据集”填报/学生表 ” 中的数据。如下

data_report_65

3)从右侧填报组件中添加提交按钮到报告中,并设置组件脚本的“提交时运行”脚本如下,

var conn = null;

 

//通过 SQL 查询创建数据库连接,其中 SQL 表示查询类型, ”Data Form/reporting/表/学生” 表示查询的路径,也可以通过数据源创建数据库连接,也 conn = createConnection(CONNECTION, ”test/ 数据源 /SQLSERVER_ 数据源 ”)

try {

 

   conn = createConnection(CONNECTION, ”Data Form”);

 

   // 填报参数组件的数据

   var fgrid = getData(”填报参数1”, DATA); // ” 填报参数1” 表示填报参数组件的名称

 

   // 获取变化的数据行

   var rowsOld = fgrid.rows(ORIGINAL); // 无变化的数据行

   var rowsAdded = fgrid.rows(ADDED); // 增加的数据行

   var rowsChanged = fgrid.rows(MODIFIED); // 更改数据行

   var rowsDeleted = fgrid.rows(DELETED); // 删除数据行

 

   //将数据插入数据库中,其中 stu 是要插入数据库的表名,姓名, 年龄, 性别 是表“学生” 中的列,分别与后面的问号相对应

   if (rowsAdded != null) {

       var pstmt = conn.prepareStatement(”insert into reporting.学生(姓名, 年龄, 性别) values( ? , ? , ? )”);

 

       for (var i = 0; i < rowsAdded.length; i++) {

           pstmt.setString(1, rowsAdded[i].姓名);

           pstmt.setInt(2, rowsAdded[i].年龄);

           pstmt.setString(3, rowsAdded[i].性别);

           pstmt.executeUpdate();

       }

   }

 

   // 删除某一行, 学生 是数据库中表的名字, 学号 是表的主键

   if (rowsDeleted != null) {

       var pstmt = conn.prepareStatement(”delete from reporting.学生 where 学号 = ? ”);

 

       for (var i = 0; i < rowsDeleted.length; i++) {

           pstmt.setString(1, rowsDeleted[i].学号);

           pstmt.executeUpdate();

       }

   }

 

   //更新数据库数据 , 学生 是要更新数据库的表名, 姓名, 年龄, 性别 是表 学生 中的列, 学号 是表的主键,与 where 条件中的问号对应, string 表示 学号 的数据类型

   if (rowsChanged != null) {

       var pstmt = conn.prepareStatement(”update reporting.学生 set 姓名 = ? , 年龄 = ? , 性别 = ? where 学号 = ? ”);

 

       for (var i = 0; i < rowsChanged.length; i++) {

           pstmt.setString(1, rowsChanged[i].姓名);

           pstmt.setInt(2, rowsChanged[i].年龄);

           pstmt.setString(3, rowsChanged[i].性别);

           pstmt.setString(4, rowsChanged[i].学号);

           pstmt.executeUpdate();

       }

   }

 

}

 

//捕获异常

catch (e) {

   try {

       if (conn != null) {

           conn.rollback();

       }

   } catch (e1) {

   }

   debug(”Update DataBase Error: ”+e);

} finally {

   if (conn != null) {

       try {

           conn.commit();

           fgrid.updateFlag();

           conn.close();

       } catch (e2) {

       }

   }

 

}

4)保存脚本,进入预览模式或者查看报告中查看报表,对填报参数组件中的数据进行增加、修改、删除后对点击提交按钮即可向数据库中提交数据。

data_report_69

data_report_70

2.参数组件填报脚本

例如:需要通过界面将学生基本信息的数据提交到数据库中,设计如下图所示的界面:

data_report_66

1)首先,需要在报表中添加组件:

姓名的输入框:    ”文本参数1”。

年龄的输入框:”文本参数2”。

性别的选择框:”下拉列表参数1”,在列表参数组件中绑定已经存在的数据列”性别” 或者 手动录入选项数据,并将列表参数组件设置修改为单选。

提交按钮:”提交1”

2) 选中提交按钮“提交1”,设置按钮脚本中”提交时运行”的脚本:

var conn = null;

 

try {

 /*通过数据源创建数据库连接,如可以写成 conn = createConnection(CONNECTION, ”dataset”),其中CONNECTION为查询类型,dataset为创建的数据源,需要带上路径。

   也可以创建数据通过 SQL 查询创建数据库连接,createConnection(SQL, ”test/sql数据库/学生表”); SQL 表示查询类型,”test/sql数据库/学生表” 表示查询的表路径。

  */

  conn = createConnection(CONNECTION, ”Data Form”);

 

  // 参数组件的数据

 var stuName = 文本参数1.value;// 获取 文本参数1 中输入的值

 var stuAge = 文本参数2.value;// 获取 文本参数2 中输入的值

 var stuSex = 下拉列表参数1.getSelectedObjects()[0];// 获取 列表参数1 中选中的值

 

 //将数据插入数据库中,其中 reporting.学生 是要插入数据库的表名, 姓名, 年龄, 性别 是表 reporting.学生 中的列,分别与后面的问号相对应

 var pstmt = conn.prepareStatement(”insert into reporting.学生 (姓名, 年龄, 性别) values (?,?,?)”);

 

  // 将获取到的 stuName, stuAge, stuSex 值插入到数据库中并更新数据库

  pstmt.setString (1,stuName);

  pstmt.setInt (2, stuAge);

  pstmt.setString (3, stuSex);

  pstmt.executeUpdate();

  conn.commit();

}

 

// 捕获异常

catch(e){

  try {

     if(conn != null) {

conn.rollback();

     }

 }

  catch(e1) {

 }

  debug(”Update DataBase Error: ” + e);

}

 

finally {

if(conn != null) {

      try {

conn.close();

     }

      catch(e2) {

     }

 }

}

3)保存脚本,进入预览模式或者查看报告中查看报表,在界面中依次输入 ”黄晓明”、27、”男”,点击提交后数据入库,等价于直接在数据库执行sql:insert into reporting.学生 (姓名, 年龄, 性别)  values (”黄晓明”,27,”男”);

data_report_67

data_report_68

3.注意事项

采用脚本填报的方式,用户在点击提交时,提交成功时不会提示。

自由表填报组件暂不支持脚本填报。