您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 咨询培训 > 使用-Cognos-8-SDK-在-Web-应用中集成-Cognos-报表
使用Cognos8SDK在Web应用中集成Cognos报表王惇,软件工程师,IBM张坚,软件工程师,IBM简介:本文介绍了Cognos8SoftwareDevelopmentKit的基本功能,并通过实例展示了如何使用SDK在Web应用中执行Cognos相关的操作。引言Cognos8SDK可以帮助开发者实现对Cognos8进程的管理,使用它提供的平台无关的Webservices,函数库和编程接口实现定制化的报表解决方案。Cognos8SDK提供了对C#,VisualBasic6.0和Java三种编程语言的支持,可以用于创建,修改报表和查询,发布与生成报表和查询,定期执行,管理Cognos8服务器及其安全机制。回页首Cognos8SDK简介Cognos8SDK从功能上可以分成三部分:BIBusAPI,URLInterface和ScriptPlayer。BIBusAPICognos8通过提供的BIBusAPI将相关服务整合到其他应用软件中去。Cognos8SDK体系结构是建立在基于WSDL和SOAP的webservice基础上的。Cognos.wsdl文件中具体描述了Cognos所提供的各种服务及其支持的方法。用户请求通过SOAP包传递于服务器和客户端之间。SDK提供的接口使开发者不必亲自构建SOAP消息。调用接口时,SDK负责将用户请求转化成SOAP消息,再通过BIBusAPI传递给相应的服务。BIBusAPI将每个XML格式的request或response包装进SOAP信封,并通过HTTP协议传输。URLInterfaceURLInterface使用户可以通过在URL中传递命令及参数来实现相应的Cognos操作。ScriptPlayerScriptPlayer是一种命令行工具,用于执行编制好的actionlogs,实现FrameworkManager设定的功能,如创建和修改模型,或者部署package等。回页首准备使用Cognos8SDK将Portalserver与Cognos8集成时,可以有多种方式。如使用WebPagePortlet,将Cognos报表的链接直接嵌入到Portal的页面里,或者直接部署Cognos8提供的Portlet。使用这些Portlet可以在Portal中查看Cognos报表,metrics等。这两种方式都提供了展示和查看Cognos中已有内容的功能,虽然可以使用WebSphereDashboard快速开发CognosPortlet,但这仅能提供有限的灵活度,且需基于Portal,无法满足部分客户定制化的需求。这时就需要使用Cognos8SDK来进行相应的开发工作,更灵活的实现与Cognos的整合。下面就来介绍下如何使用Cognos8SDK实现Cognos与Web应用的整合。安装Cognos8SDK和Cognos8SamplesCognos8SDK是Cognos8的一个独立组件,需要单独安装。安装完成后,SDK相关的内容默认被添加到Cognos8的安装目录下,其中包含了C#,VB和Java的运行时内容及相关的文档和示例。为了配合本文写作,还需安装Cognos8Samples组件,请参阅向导完成安装配置并将示例数据倒入到DB2数据库中。我们将在本文介绍SDK中Java相关部分,并使用Samples中名为great_outdoors_sales的示例模型与数据。修改和部署模型准备工作完成后可以在目录cognos_home\c8\webconetnt\samples\models\下看到名为greate_outdoors_sales的示例模型目录。Cognos8SDK提供了ScriptPlayer用于创建和修改模型,我们可以将这部分功能集成到Web应用中,其核心工作是编写XML格式的actionlog文件,以实现对模型的操作,但本例将重点放在对报表的创建及展示,所以将忽略这部分内容,而直接使用FrameworkManager对great_outdoors_sales的模型进行修改。在FrameworkManager中打开great_outdoors_sales.cpf。图1.模型项目go_sales可以看到示例项目go_sales中已经有建好的Go_sales(analysis)和Go_sales(query)两个package,其中引入了大量的业务对象。为了简单,我们将重新定制package,仅引入少数所需要的业务对象。右键点击Packages,选择Create-Package,输入名字:CognosSample;点击Next;如下图所示,选择本例中需要使用的业务对象:图2.创建package在接下来的设定中,选择英文作为支持语言,DB2作为功能集,完成并打开发布向导。将package发布到contentstore中,不使用模型版本。本例中不引入安全机制,接受默认设定,直到完成发布。回页首Cognos8SDK使用实例至此,我们已经可以通过QueryStudio和ReportStudio直接使用package中相应数据创建报表和查询了,但本文意在说明SDK的使用,下面我们就使用SDK开发一个基于Web生成Cognos报表的应用,来展示如何利用CognosSDK生成一个简单的二维报表及其对应的柱状图。用户可以从模型中选择报表中的行和列(Dimension),以及度量(Measure)。获取服务首先根据需要创建Web应用项目,并将应用需要依赖的library引入项目,将cognos_home\c8\sdk\java\lib\目录下的jar文件复制到Web项目的lib目录下,这样我们就可以在Web应用中使用Cognos8SDK了。首先要建立与Cognos所需服务的连接,在CognosSDK里,不同的功能是由不同的服务提供的,例如提供管理内容和认证服务的ContentManagerservice,管理报表服务的Reportservice。每一个服务都是通过相应的一组java接口调用BIBusAPI实现的。其中最主要的接口类是[service]_Service和[service]_Port。[service]_ServiceLocator是[service]_Serviced的实现类,通过[service]_ServiceLocator可获得具体服务的[service]_Port,通过[service]_Port我们就可以而调用服务所提供的相应功能了。如下代码展示了如何获得reportserviceport:清单1.获取reportserviceport//实例化所需服务的ServiceLocatorReportService_ServiceLocatorreportLocator=newReportService_ServiceLocator();//通过ServiceLocator获得ServicePortReportService_PortreportService=reportLocator.getreportService();获取模型列表接下来我们就要获得所有已经发布的模型,展示在页面上供用户选择,如下图所示:图3.模型列表我们需要使用ContentManagerservice的查询功能,其查询功能主要由query(SearchPathMultipleObjectsearchPath,PropEnum[]properties,Sort[]sortBy,QueryOptionsoptions)方法实现,其中:SearchPathMultipleObject参数指明要查找对象的路径,搜索路径在Cognos8SDK中的使用是非常广泛而且重要的,它遵循XPath的语法,如要搜索公共目录的根路径为/content/,这里我们要查找公共目录中的所有package对象,而不考虑package的具体位置,将搜索路径就设成/content//package。若需要访问特定用户的目录,则需要通过用户的Account对象,获取其搜索路径,如:[account].getSearchPath().getValue()+”folder[@name=\”MyFolders\”]”。PropEnum指明要查找对象具体哪些属性。Sort是指明返回对象的排序规则,可以设定是按照哪个PropEnum属性排序,通过其中的OrderEnum指明是正序还是倒序。QueryOptions指明本次查询的参数,例如是同步查询还是异步查询。例子中我们搜索公共目录下所有package对象,返回相应的defaultName和searchPath,即模型名称和是模型具体的查询路径。采用默认排序和默认查询属性。我们将查询到的所有模型对象放入一个HashMap对象,从而在web页面展示给用户。代码如下:清单2.获取模型//GetContentManagerServiceContentManagerService_Portcms=getContentManagerService();//QuerymodelobjectsBaseClassbaseClassArray[]=cms.query(newSearchPathMultipleObject(/content//package),newPropEnum[]{PropEnum.defaultName,PropEnum.searchPath},newSort[]{},newQueryOptions());//PutmodelnameandpathintoahashmapHashMapString,Stringmodels=newHashMapString,String();for(BaseClassbaseClass:baseClassArray){if(baseClass.getClass().getName().equals(com.cognos.developer.schemas.bibus._3._package)){models.put(baseClass.getDefaultName().getValue(),baseClass.getSearchPath().getValue());}}获取模型的元数据当用户选择了一个具体模型,我们要获得其选中模型的元数据,并显示成列表供用户选择,组成报表的行,列和度量。如下图所示:图4.模型元数据模型元数据的获取需要通过reportservice。首先我们要组织查询元数据的xml格式的字符串。元数据查询xml字符串是以metadataRequest作为root结点,此结点有connection属性,其值就是我们通过上一步骤获得的searchPath。此外我们就要通过一个或多个Propertie结点指明要查询模型的属性。在本例中我们要查询模型folder,querySubject以及queryItem结点的name,datatype,_path,_ref和usage属性。queryItem结点是folder结点和querySubject结点的子节点,其中所包含就是模型文件中的具体数据项。name属性是数据项的名字,用来显示在web界面。dataType属性指明此数据项的数据类型。例如是字符或者数字等。_Path属性指明此数据项的查询路径。_ref属性指明此数据项在模型中的路径。usage属性指明此数据项的使用类型,例如度量或维度等。查询字符串如下:清单3.模型元数据查询字符串StringmodelPath=/content/folder[@name='Samples']/folder[@name='Models']/package[@name='CognosSample']StringsXML=metadataRequestconnection=\+modelPath+\+Metadata+Properties+Prope
本文标题:使用-Cognos-8-SDK-在-Web-应用中集成-Cognos-报表
链接地址:https://www.777doc.com/doc-3989363 .html