在日常工作中,企业通常需要更新报表服务器上的报表内容,但是又不想丢失原来的报表内容,所以在更新报表内容之前需要保存以前的报表,今天就来讲解一下如何使用vb.net利用CrystalReport提供的API获取报表服务器上的内容及所有的Instance,并以XML的形式保存在本地。
Vb.net是.NET平台的一个组成部分,作为微软的一个重要产品,其继承并实现了.NET平台所提供的所有功能,例如:方便的XML操作,便捷的文件操作等等,今天我们要用到的就是流文件读写和XML文件的操作。
CrystalReport在报表界的声望如同微软在操作系统的声望,它提供的很多API,为二次开发提供了很多便捷之处,特别是它提供了对.NET平台的支持,使其本身增色不少,同时企业和程序员的选择余地又增加了不少,今天我们要用的API包括:CrystalDecisions.Enterprise,CrystalDecisions.Enterprise.Desktop.Folder, CrystalDecisions.Enterprise.Desktop.Server,
CrystalDesisions.Enterprise.Viewing.ReportSource.CrystalEnterpriseLib,CrystalPluginMgrLib.有了这些API,我们就可以利用他们提供的方法,对CrystalReport服务器做各项操作,我们一步一步的走下去。
第一步:登录系统服务器.
首先我们一起来看一下程序的主界面。

主界面主要包括这么几个部分:登录服务器部分,主要包括项目服务器,验证的类型,登录用户和登录用户密码,这几个字段的值,也是登录CrystalReport服务器的必须值;查询报表Instance部分,根据用户输入的报表名称,查询具体的报表的Instance,并将名称显示在ListBox中;选择要导入项目服务器的报表部分,功能把用户选择的Instance名称显示在listBoX中,同时将内容保存在 ListBox的Tag中。
登录服务器用到的API是:LogonTokenMgr,EnterpriseService,SessionMgr,InfoStore.
首先验证登陆用户的信息是否合法,如果用户合法,则进行登录。验证用户合法性并登陆的代码如下:
Private Sub RSSessionHandling()
'Enterprise variables
Dim ceTokenMGR As LogonTokenMgr
Dim ceEnterpriseService As EnterpriseService
Try
ceSessionmgr = New SessionMgr
ceEnterpriseSession = ceSessionmgr.Logon(m_strLogonUser, m_strPassword, m_strServerName, m_strAuthentication)
ceEnterpriseService = ceEnterpriseSession.GetService("", "InfoStore")
ceInfoStore = New InfoStore(ceEnterpriseService)
m_strLogonToken = ceEnterpriseSession.LogonTokenMgr.CreateLogonTokenEx("", 480, -1)
ceLogOnFlag = True
Catch ex As Exception
MessageBox.Show(ex.ToString(), "Exception", MessageBoxButtons.OK, MessageBoxIcon.Error, MessageBoxDefaultButton.Button1, MessageBoxOptions.DefaultDesktopOnly)
Throw
End Try
End Sub
利用上面得代码功能,就可以实现验证登陆用户合法性并登陆系统服务器的功能,其中有几个注意点:1.首先必须创建一个SessionMgr,其功能是保存当前用户的登录信息;2.利用我们刚刚创建的SessionMgr,登录服务器,此时需要主界面上的几个关键值,传入这几个关键值;3.获取服务器信息。关键代码见高亮代码。