Cognos 8 SDK简介

用logoff()方法进行注销。 实例代码如下:

//XML认证字符串

StringBuffer credentialXML = new StringBuffer(); credentialXML.append(\//登陆的名称空间

credentialXML.append(\credentialXML.append(namespace);

credentialXML.append(\//用户名

credentialXML.append(\credentialXML.append(uid);

credentialXML.append(\//密码

credentialXML.append(\credentialXML.append(pwd);

credentialXML.append(\credentialXML.append(\...

//转换为XML

XmlEncodedXML credentialXEX = new XmlEncodedXML(); credentialXEX.setValue(credentialXML.toString()); //登陆

connection.getCMService().logon(credentialXEX, null);

此例子中,logon方法被content manager service调用,包含名称空间,用户名和密码的认证字符串经编码以XML的形式传给service。登陆完成之后一个新的用户session就建立起来了。

使用logoff方法来结束session,并且从CAM对象中把passport移除。以下是一个完整的类,此例子包含连接和登陆Cognos 8,并且得到两个最常用的service,Content Manager Service和Report Service。

package com.cognos;

import java.net.MalformedURLException; import java.rmi.RemoteException; import org.apache.axis.AxisFault;

import org.apache.axis.client.Stub;

import org.apache.commons.configuration.Configuration; import com.cognos.developer.schemas.bibus._3.BiBusHeader;

import com.cognos.developer.schemas.bibus._3.ContentManagerServiceStub; import

com.cognos.developer.schemas.bibus._3.ContentManagerService_ServiceLocator; import com.cognos.developer.schemas.bibus._3.ReportServiceStub;

import com.cognos.developer.schemas.bibus._3.ReportService_ServiceLocator; import com.cognos.developer.schemas.bibus._3.SearchPathSingleObject; import com.cognos.developer.schemas.bibus._3.XmlEncodedXML;

public class CRNConnectImpl implements CRNConnect { // 创建连接Cognos8服务的对象.

//Content Manager Service 内容库管理服务Locator对象

private ContentManagerService_ServiceLocator cmServiceLocator = null; //Report Service 报表服务Locator对象

private ReportService_ServiceLocator reportServiceLocator = null; // Content Manager Service 内容库服务对象

private ContentManagerServiceStub cmService = null; //Report Service 报表服务对象

private ReportServiceStub repService = null;

// Cognos 8 Content Manager 服务器地址

private String CM_URL = \ //用户名

private String username = null; //密码

private String pwd = null; //名称空间

private String namespace = null;

//构造函数,通过配置文件得到服务器地址,名称空间,用户名和密码,并连接登陆//Cognos 8

public CRNConnectImpl(Configuration configuration) throws RemoteException { this.CM_URL = configuration.getString(\ this.username = configuration.getString(\ this.pwd = configuration.getString(\ pwd = pwd==null?\ this.namespace = configuration.getString(\ connectToCognosServer(); }

/**

* 此方法连接Cognos服务 *

* @返回一个连接 */

public ContentManagerServiceStub connectToCognosServer() throws RemoteException { //BI Bus BiBusHeader bibus = null; while (bibus == null) { // 创建Cognos 8服务的service locator //content manger service locator 内容管理服务locator cmServiceLocator = new ContentManagerService_ServiceLocator(); //report service locator 报表服务locator reportServiceLocator = new ReportService_ServiceLocator(); try { java.net.URL serverURL = new java.net.URL(CM_URL); // 得到Cognos 8的服务,通过stub方法来初始化,得到连接 //内容管理服务对象 cmService = new ContentManagerServiceStub(serverURL, cmServiceLocator); //报表服务对象 repService = new ReportServiceStub(serverURL, reportServiceLocator); //设置超时时间,单位为秒,0为从不超时 cmService.setTimeout(0); repService.setTimeout(0); } // ...异常捕捉 catch (MalformedURLException e) { System.out.println(\ return null; } catch (AxisFault e) { e.printStackTrace(); } try { //获得连接之后进行登陆 quickLogon(); } catch (RemoteException ex) { System.out.println(\连接失败\ ex.printStackTrace();

}

// If authentication is required, this will generate an // exception

// At this point, this exception can safely be ignored throw ex;

// 得到 biBusHeader SOAP:包含登陆信息的Header bibus = (BiBusHeader) ((Stub) cmService).getHeaderObject(\ \if (bibus != null) { return cmService; }

} return null; }

//得到content manager service的接口

public ContentManagerServiceStub getCMService() { return cmService; }

//得到report service 的接口

public ReportServiceStub getReportService() { BiBusHeader bibus = null; //从report service得到bibus bibus = (BiBusHeader) ( repService).getHeaderObject(\ \ //如果report service的bibus不可用,就从content manager service得到bibus if (bibus == null) { BiBusHeader CMbibus = null; //得到content manager service的bibus CMbibus = (BiBusHeader) ( cmService).getHeaderObject(\ \ (repService).setHeader(\ } return repService; }

//登陆Cognos 8

private void quickLogon() throws RemoteException { //认证字符串 StringBuffer credentialXML = new StringBuffer();

}

}

credentialXML.append(\//名称空间

credentialXML.append(\

credentialXML.append(namespace == null ? \credentialXML.append(\//用户名

credentialXML.append(\

credentialXML.append(username == null ? \credentialXML.append(\//密码

credentialXML.append(\

credentialXML.append(pwd == null ? \credentialXML.append(\

credentialXML.append(\//转换为XML编码的认证字符串

String encodedCredentials = credentialXML.toString();

// 调用content manager service的logon方法,此方法为stub的方法 getCMService().logon(new XmlEncodedXML(encodedCredentials), new SearchPathSingleObject[] {});

// sn_dg_sdk_method_contentManagerService_logon_end_1

运行报表

连接上Cognos 8并成功认证之后,就可以创建或者运行一张报表了。运行一张报表首先得制定这张报表的搜索路径search path,报表服务通过搜索路径在内容库中找到所对应的报表。 用以下BI Bus API方法运行报表或者运行报表定义: ? run(objectPath, parameterValues, options)

直接运行报表,参数为搜索路径,报表参数,运行选项 ? runAt(startTime, objectPath, parameterValues, options)

联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4