示例说明
使用报表过程中,我们想动态修改一些数据内容,但这个内容本身也是动态的,需要从数据库中获取,此时我们可以通过宏代码执行sql,示例如下:
设置方法
1、创建报表。
2、在浏览器中,切换到“分析展现”页面,在左侧的资源树上找到对应报表,右键该节点 编辑宏 ,进入报表宏编辑界面。
3、在报表宏界面 新建客户端模块 。在弹出的“ 新建模块”对话框中,选择需要的对象和事件,并参考本文最后的宏代码。
4、创建需要执行sql的数据源信息:
5、书写具体的宏代码,执行sql获取数据或保存数据。
执行SQL语句的方法
在客户端宏代码中,通过调用服务端 DataSourceService 类中的 getDataByQuerySql 等方法,可以执行SQL语句,然后根据返回值获取相应的SQL结果集。示例代码如下。
function main(..) { ... var newIdValue = getSqlResult();//在主函数中调用执行sql的方法 .... }; /** * 执行SQL语句,获取结果集 */ function getSqlResult() { var util = jsloader.resolve("freequery.common.util"); var ret = util.remoteInvoke("DataSourceService", "getDataByQuerySql", ["FoodmartCN", "select max(f_ContactID) + 1 as t from contacts", 0, 1000]); if (ret.succeeded && ret.result) { var data = ret.result.data;//结果集数据,返回一个二维数组 return data[0][0].value; } };
宏代码中的 util.remoteInvoke是执行java方法并获取返回结果,接口方法说明如下;也可以执行其他java方法,接口获取方法参考JSON 示例
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等。
参考示例
完整的宏代码处理过程,可以参考地图分析使用浮动表格展示各地区汇总值示例。这个示例比较有代表性,其演示了如何执行 SQL 语句获取结果集,然后以表格的形式显示在地图上。