关于BusinessObjects系统单点登录(SSO)解决办法(一)

         BusinessObjects支持单点登录(Single sign on 简称SSO)功能,但那是指的是使用Windows活动目录认证的一种方法。与目前我们常用的使用超链接进行的单点登录(登录在别系统中,使用别系统的当前用户来认证BusinessObjects进行登录)属于不同类型的单点登录类型。为此,我们只能另求他法。经过研究,下面两种方法满足我们目前的要求:

a)      方法一

      使用openDocument方法。BusinessObjects在其网页目录:   ..\BusinessObjects Enterprise 11.5\Web Content\Enterprise115\InfoView\scripts下面有一个网页openDocument.aspx,利用这个页面,我们可以从其他的网站链接到该页面打开一个报表,这种方法不仅可以直接打开一个报表,而且支持传递Token登录信息来进行单点登录。

Token的产生。利用下面的代码我们可以生成一个Token

using CrystalDecisions.Enterprise;

private string GetToken(string System, string UserName, string Password)
{
    CrystalDecisions.Enterprise.Identity identity 
= new CrystalDecisions.Enterprise.Identity();
    
bool Success = false;
    Success 
= identity.Logon(UserName, Password, System, "Enterprise");
    
//或者使用Windows NT 认证方式
    
//Success = identity.Logon(UserName, Password, System, "Windows NT");
    if (Success)
    
{
        
return identity.GetToken();
    }

    
else
    
{
        
return null;
    }

}



openDocumentUrl格式:

http://<hostname>:<port>/businessobjects/enterprise115/InfoView/scripts/opendocument.aspx

      在上面的Url后面,可以传递openDocument的各种参数。openDocument的参数列表(本列表忽略了一些不常用的参数,仅仅列出了常用的参数):

参数名称

 

是否强制

token

包含用户Session认证的token文本

Token文本

示例:

openDocument.aspx?iDocID=342&token=(在此使用GetToken得到的文本)

iDocID

文档的ID

是,但可以用sDocName来代替

文档ID

(InfoObjectID)

sIDType

CMS对象类型

是。如果是默认对象(InfoObjectID)可以不用

. CUID

. GUID

. RUID

. InfoObjectID

(默认)

示例:

openDocument.aspx?iDocID=342

openDocument.aspx?iDocID=AWimiw9StnhGm993evk.Amc&sIDType=CUID

sType

目标是文档还是报表文件类型

是。但对于未知的文件类型忽略(xls, doc, txt,)

.wid

.rpt

.car

.rep

示例:

openDocument.aspx?iDocID=342& sType=wid

openDocument.aspx?iDocID=343& sType=rpt

sPath

包含目标文档的目录和子目录

本参数是与sDocName一起使用的

目录和子目录

表示方法:

[folder],[subfolder]

sDocName

不带有扩展名的文档名称

这个参数与sPath一起使用

myDocument

示例:

openDocument.aspx?sPath=[reports]&sDocName=Charting&sType=rpt

openDocument.aspx?sPath=[reports],[finance]&sDocName=Summary&sType=rpt

sReportName

在一个文档中包含多个报表的时候决定那一个报表打开(默认的时候处于激活的报表优先打开)

文档中的子报表名字

示例:

openDocument.aspx?iDocID=342&sType=wid&sReportName=Report2

 

sReportPart

指定报表中的哪一块被打开

报表中经常包含饼图和表格数据两种部分,每一块都有自己的名字,用这个参数可以指定打开的是哪块的内容

被打开的报表块名称

sPartContext

水晶报表中,报表的某一部分重视关联着数据范围

是,如果使用了sReportPart指定报表的块

报表块的数据范围

sReportMode

仅用于水晶报表。指定链接打开的是全部的报表还是sReportPart部分块

否。默认是Full。仅仅在sReportPart指定为部分块的时候使用

. Full

. Part

示例:

在全球销售报表中,报表柱图块的名字叫做“Text2;Graph1” 并且默认的数据范围是 “/”(全部数据)

openDocument.aspx?sType=rpt&sDocName=World+Sales+Report&sReportPart=Text2;Graph1&sPartContext=/

如果仅仅显示英格兰这个国家的数据:

openDocument.aspx?sType=rpt&sDocName=World+Sales+Report&sReportPart=Text2;Graph1&sPartContext=/Country[England]&sReportMode=Part

注意,在上面的Url 中,用加号(+)来表示报表中一个空格占位符

sRefresh

指定在打开报表是时候是否强制刷新报表的数据

. Y(刷新报表数据)

. N(不刷新数据)

示例:

openDocument.aspx?iDocID=342&sType=wid&sRefresh=Y

lsS[NAME]

给报表的一个单值参数赋值

[NAME]指参数变量的名称

一个单值参数的值

示例:

openDocument.aspx?iDocID=342&sType=wid&sRefresh=Y&lsSProductName=Cycle

下列的示例给多个单值参数赋值并注意各种值的赋值形式:

openDocument.aspx?sType=rpt&iDocID=858&sRefresh=Y&

lsSparamString=h&lsSparamNumber=1&

lsSparamCurrency=121&lsSparamDate=Date(2003,6,11)&

lsSparamDateTime=DateTime(2003,6,11,14,38,37)&lsSparamBoolean=false&

lsSparamTime=Time(12,39,2)&lsSparamStringDR=a&lsSparamDateDR=Date(2003,6,1)

lsM[NAME]

给报表的一个多值参数赋值

[NAME]指参数变量的名称

l  多只参数的各个值用逗号“,”分开。

l  对于Webi报表来说,用分号“;”来分开各个值

l  如果是水晶报表,每个值必须用中括号“[”“]起来。

l  如果是一个分析报表,用MDX WITH起来

示例:

openDocument.aspx?iDocID=345& sType=wid&sRefresh=Y&lsMProductName=Cycle;Car

或者如下示例:

openDocument.aspx?sType=rpt&iDocID=859&sRefresh=Y& lsMparamStringDR=[c],[d]&lsMparamNumberDR=[3],[4]& lsMparamDateDR=[Date(2003,6,3)],[Date(2003,6,4)]& lsMparamDateTimeDR=[DateTime(2003,6,1,3,1,1)],[DateTime(2003,6,1,4,1,1)] lsR[NAME]

lsR[NAME]

给报表的一个值参数指定一个值范围

[NAME]指参数变量的名称

l  一个值范围,用两个点(..)分开

l  如果是一个水晶报表,值范围用一个中括号“[”或圆括号“(起来,而且后面要有对应的反括号

l  如果是一个OLAP报表,用MDX WITH起来

示例:

openDocument.aspx?sType=rpt&iDocID=860&lsRparamStringDR=[h..i]&

lsRparamNumberDR=[7..8]& lsRparamCurrencyDR=[3..4]&

lsRparamDateDR=[Date(2003,6,7)..Date(2003,6,8)]&

lsRparamDateTimeDR=[DateTime(2003,6,1,7,1,1)..DateTime(2003,6,1,8,1,1)]&

lsRparamTimeDR=[Time(1,1,7)..Time(1,1,8)]&lsRparamUnbound1=(..6)&

lsRparamUnbound2=[6..)&lsRparamStringR=[a..d]&lsRparamNumberR=[1..3]&

lsRparamCurrencyR=[1..3]&lsRparamDateR=[Date(2003,6,1)..Date(2003,6,3)]&

lsRparamDateTimeR=[DateTime(2003,6,1,1,1,1)..DateTime(2003,6,1,3,1,1)]&

lsRparamTimeR=[Time(1,1,1)..Time(3,1,1)]

sOutputFormat

指定目标文档是以怎么样的格式来显示

否,默认是HTML

. H (HTML)

. P (PDF)

. E (Excel)

 

. W (Word)

仅适用于水晶报表

示例:

openDocument.aspx?iDocID=347&sType=wid&sOutputFormat=P

openDocument.aspx?iDocID=861&sType=rpt&sOutputFormat=W

sWindow

指定文档是在当前的窗口打开还是在一个新的窗口打开

. Same

. New

 

 

 

 

 

 请稍候,办法二马上就写!

posted @ 2007-05-14 12:34  南疯  阅读(6599)  评论(7编辑  收藏  举报