关于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:
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;
}
}
openDocument的Url格式:
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 |
|
|
|
|