页面树结构
转至元数据结尾
转至元数据起始

提示:本文档的示例代码仅适用于本文档中的示例报表/场景。若实际报表/场景与示例代码无法完全适配(如使用功能不一致,或多个宏代码冲突等),需根据实际需求开发代码。

我们在开发宏代码的过程中,有时候会遇到一些比较复杂的需求,比如根据后台数据库表中的某个状态位执行不同的处理逻辑。或者求一个汇总值显示在图形和地图上。这类需求通常都需要在宏代码中执行一段SQL语句,获取其结果值。那么在宏代码中如何执行 SQL 语句呢,请参考以下说明。


1、执行SQL语句的方法

在客户端宏代码中,通过调用服务端 DataSourceService 类中的 getDataByQuerySql 等方法,可以执行SQL语句,然后根据返回值获取相应的SQL结果集。示例代码如下。

/**
 * 执行SQL语句,获取结果集
 */
function getSqlResult() {
    var util = jsloader.resolve("freequery.common.util");
    var ret = util.remoteInvoke("DataSourceService", "getDataByQuerySql", ["DS.数据源名称", "select 100 as t from dual", 0, 1000]);
    if (ret.succeeded && ret.result) {
        var data = ret.result.data;
        return data;
    }
};


2、DataSourceService类中方法列表

DataSourceService 服务类中可以在客户端宏代码中调用的方法有 getDataByQuerySql、execute、executeNoCacheable、executeUpdate 等。上述方法的签名信息(参数、返回值),说明如下。

	/**
	 * 获取未格式化的原始的结果集数据。
	 * 
	 * @param dsId 数据源ID值
	 * @param sql 待执行SQL语句
	 * @param pageNum 获取结果集中的页数
	 * @param rowPerPage 分页显示每页行数
	 * @return SQL执行的结果集
	 */
	public GridData getDataByQuerySql(String dsId, String sql, int pageNum, int rowPerPage);
	
	/**
	 * 执行指定SQL语句,返回相应结果集。该函数主要是为了在前端宏代码中调用。
	 * @param dataSourceID 数据源ID值。
	 * @param sql 待执行SQL语句。
	 * @param maxRows 返回的最大记录数。
	 * @param format 是否对结果集格式化。
	 * @param cacheable 是否从缓存中返回结果集。
	 * @return 返回SQL执行后的结果集。
	 */
	public GridData execute(String dataSourceID, String sql, int maxRows, boolean format, boolean cacheable);
	
	/**
	 * 直接执行指定SQL语句,返回相应结果集,不从缓存中返回结果集。该函数主要是为了在前端宏代码中调用。
	 * @param dataSourceID 数据源ID值。
	 * @param sql 待执行SQL语句。
	 * @return 返回SQL执行后的结果集。
	 */
	public GridData executeNoCacheable(String dataSourceID, String sql);
	
	/**
	 * 直接执行SQL语句,可以是INSERT, UPDATE, DELETE语句,也可以是SQL DDL语句。该函数主要是为了在前端宏代码中调用。
	 * 
	 * @param dataSourceID 数据源ID。
	 * @param sql 待执行的SQL语句。
	 * @return either (1) the row count for SQL Data Manipulation Language (DML) statements or (2) 0 for SQL statements that return nothing
	 */
	public int executeUpdate(String dataSourceID, String sql);


上述方法返回值说明:

  • 对于返回 int 等标量类型的,可以从 ret.result 属性中直接获取。
  • 对于返回 GridData 对象的,可以从 ret.result.data 属性获取到结果集的二维数组。数组中是 CellData 对象,其有如下属性:value、displayValue、stringValue、intValue、longValue、doubleValue、dateValue等。


3、参考示例

完整的宏代码处理过程,可以参考地图分析使用浮动表格展示各地区汇总值 示例。这个示例比较有代表性,其演示了如何执行 SQL 语句获取结果集,然后以表格的形式显示在地图上。


原始文档:http://pan.baidu.com/s/1bnzYmFd


  • 无标签