下面以Java环境为例,介绍如何在应用系统中调用Smartbi SDK BusinessViewService API。
1、新建Java工程SmartbiSDKDemo,并添加以下依赖的jar,相关jar需要从smartbi.war中获取:
2、核心示例代码如下:
package demo.sdk; import java.util.List; import smartbi.net.sf.json.JSONArray; import smartbi.net.sf.json.JSONObject; import smartbi.sdk.ClientConnector; import smartbi.sdk.service.businessview.BusinessViewService; import smartbi.sdk.service.businessview.ViewMetaData; public class BusinessViewServiceSDKDemo { /** * @param args */ public static void main(String[] args) { BusinessViewServiceSDKDemo demo = new BusinessViewServiceSDKDemo(); demo.run(); } /** * 测试BusinessViewService SDK */ public void run() { String url = "http://localhost:8080/smartbi"; String user = "admin"; String password = "manager"; ClientConnector conn = createClientConnector(url, user, password); if (conn == null) { System.out.println("创建应用连接器失败,请检查"连接url、用户名、密码"是否正确!"); return; } try { BusinessViewService bizViewService = createBusinessViewService(conn); testBusinessViewService(bizViewService); } finally { closeClientConnector(conn); } } /** * 创建应用连接器。<br> * 在跟Smartbi服务器进行任何通信之前必须先创建一个ClientConnector对象,即应用链接器。<br> * 客户代码仅需要创建一个ClientConnector实例。 * * @return 应用连接器 */ private ClientConnector createClientConnector(String url, String user, String password) { ClientConnector conn = new ClientConnector(url); boolean loginOK = conn.open(user, password); if (loginOK) { return conn; } else { conn.close(); return null; } } /** * 创建服务对象。<br> * 以ClientConnector为构造函数参数,创建时将之前的ClientConnector实例传入。 * * @param conn * 应用连接器 * @return 服务对象 */ private BusinessViewService createBusinessViewService(ClientConnector conn) { if (conn == null) { return null; } else { BusinessViewService bizViewService = new BusinessViewService(conn); return bizViewService; } } /** * 使用服务对象。<br> * 在获得服务对象后就可以进行所需的操作了,具体的方法请参考API文档。 * * @param bizViewService * 服务对象 */ private void testBusinessViewService(BusinessViewService bizViewService) { if (bizViewService == null) { return; } // 业务查询ID(对应示例库中的"根目录\功能演示\查询定义\原生SQL查询\带参数的原生SQL") String bizViewId = "I2c94907127855da201278df551b62602"; // 参数ID(对应示例库中的"根目录\功能演示\查询定义\原生SQL查询\带参数的原生SQL"-输出参数-产品名称参数_列表对话框-标识对应的属性值) String paramId = "OutputParameter.I2c94907127855da201278df551b62602.产品名称参数_列表对话框"; // 参数真实值 String paramValue = "牛奶,花生,饼干,猪肉,汽水"; // 参数显示值 // String paramDisplayValue = paramValue; // JSONArray paramsArr = new JSONArray(); JSONObject paramObj = new JSONObject(); paramObj.put("id", paramId); paramObj.put("value", paramValue); // paramObj.put("displayValue", paramDisplayValue); paramsArr.put(paramObj); String paramsJsonArrStr = paramsArr.toString(); // 每页行数 int rowsPerPage = 2; // 是否获取总行数 boolean getTotalRows = true; // 打开查询 ViewMetaData ret = bizViewService.openLoadDataView(bizViewId, paramsJsonArrStr, rowsPerPage, getTotalRows); String loadDataClientId = ret.getClientId(); int totalRows = ret.getTotalRowCount(); List<String> fieldNames = ret.getFieldNames(); // List<String> fieldTypes = ret.getFieldTypes(); // int pages = totalRows / rowsPerPage + (totalRows % rowsPerPage == 0 ? 0 : 1); System.out.println("共" + totalRows + "行,每页" + rowsPerPage + "行,共" + pages + "页:"); StringBuilder buf = new StringBuilder(); buf.append("|\t"); for (int i = 0; i < fieldNames.size(); i++) { buf.append(fieldNames.get(i)).append("\t"); } buf.append("|"); System.out.println("-----------------------------------------"); System.out.println(buf.toString()); // 按分页读取数据 for (int pageNum = 0; pageNum < pages; pageNum++) { System.out.println("---第" + (pageNum + 1) + "页---------------------------------"); List<List<String>> dataList = bizViewService.loadViewData(loadDataClientId, pageNum); if (dataList != null && dataList.size() > 0) { for (List<String> cellDatas : dataList) { buf.setLength(0); buf.append("|\t"); for (String data : cellDatas) { buf.append(data).append("\t"); } buf.append("|"); System.out.println(buf.toString()); } } } System.out.println("-----------------------------------------"); // 关闭查询 bizViewService.closeLoadDataView(loadDataClientId); } /** * 关闭应用连接器 * * @param conn * 应用连接器 */ private void closeClientConnector(ClientConnector conn) { if (conn != null) { conn.close(); conn = null; } } } |
3、示例运行效果:
4、示例源码(Eclipse)工程
SmartbiSDKDemo_Eclipse_Project.zip