首次使用Cognos 11.2.2,求Java SDK获取已运行报表历史方案
获取Cognos 11.2.2报表运行历史的Java SDK实现
要获取报表的运行历史,核心是利用Cognos SDK中的HistoryService查询报表对象的runHistory子资源。以下是完整的实现步骤和代码示例:
核心思路
每个报表对象都包含runHistory子集合,通过指定报表的搜索路径并追加/runHistory,即可调用HistoryService.search()方法获取该报表的所有执行记录。
代码示例
import com.cognos.developer.schemas.bibus._3.*; import javax.xml.namespace.QName; import java.util.Calendar; public class ReportHistoryFetcher { public static void main(String[] args) { // 配置Cognos连接参数 Configuration config = new Configuration(); config.setServerURI("http://your-cognos-server:9302/p2pd/servlet/dispatch"); config.setNamespace("your-authentication-namespace"); config.setUserID("your-username"); config.setPassword("your-password"); try { // 初始化服务定位器与SOAP头 com.cognos.developer.schemas.bibus._3.ObjectFactory factory = new com.cognos.developer.schemas.bibus._3.ObjectFactory(); SOAPHelper soapHelper = new SOAPHelper(config); IBIServiceLocator serviceLocator = new IBIServiceLocator(config.getServerURI()); // 获取HistoryService实例 HistoryService historyService = serviceLocator.getHistoryService( new QName("http://developer.cognos.com/schemas/bibus/3/", "HistoryService") ); historyService.setHeader(soapHelper.createSOAPHeader()); // 目标报表的搜索路径(替换为实际报表路径) String targetReportPath = "/content/folder[@name='销售报表']/report[@name='月度销售汇总']"; // 构建运行历史的搜索路径 SearchPathMultipleObject historySearchPath = new SearchPathMultipleObject(); historySearchPath.setValue(targetReportPath + "/runHistory"); // 指定要返回的历史记录属性字段 String[] requiredProperties = { "defaultName", "creationTime", "status", "executedBy", "executionDuration", "runOption" }; // 可选:添加时间范围筛选(例如最近7天) Calendar sevenDaysAgo = Calendar.getInstance(); sevenDaysAgo.add(Calendar.DAY_OF_MONTH, -7); SearchFilter dateFilter = factory.createSearchFilter(); dateFilter.setCondition(ComparisonConditionEnum.greaterThanOrEqual); dateFilter.setPropertyName("creationTime"); dateFilter.setValue(factory.createDateTime(sevenDaysAgo.getTime())); // 执行搜索,获取历史记录 BaseClass[] historyEntries = historyService.search( historySearchPath, requiredProperties, new Sort[]{}, new SearchFilter[]{dateFilter}, // 无需筛选则传空数组 new Integer(100), // 最大返回记录数 new Boolean(true) ); // 遍历并输出历史记录 for (BaseClass entry : historyEntries) { if (entry instanceof RunHistory) { RunHistory runRecord = (RunHistory) entry; System.out.println("------------------------------"); System.out.println("报表名称: " + runRecord.getDefaultName()); System.out.println("执行时间: " + runRecord.getCreationTime().getTime()); System.out.println("执行状态: " + runRecord.getStatus().value()); System.out.println("执行用户: " + runRecord.getExecutedBy().getValue()); System.out.println("运行时长(毫秒): " + runRecord.getExecutionDuration()); } } } catch (Exception e) { e.printStackTrace(); } } }
关键说明
- 权限要求:执行代码的用户必须拥有目标报表的
查看历史权限,否则会返回空结果或权限错误。 - 批量查询:如果需要获取多个报表的历史,可以遍历已获取的报表列表,对每个报表重复执行上述
search操作。 - 扩展属性:可根据需求添加更多返回属性,比如
outputFormat(输出格式)、runID(运行ID)等,具体可参考Cognos SDK文档中RunHistory类的属性。
内容的提问来源于stack exchange,提问作者Haythem Jedidi
相关产品推荐
相关产品推荐

