You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

首次使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 16:25:21