Я создал отчет в Visual Studio, который считывает данные из базы данных SalesLogix (Infor CRM). Отчет работает нормально, но независимо от того, что я ему передаю, результаты показывают только те данные, которые были сохранены для учетных данных пользователя, использованных при создании отчета. При создании отчета, если я подключаюсь к базе данных с помощью учетной записи администратора, я вижу все, а если я подключаюсь к базе данных с использованием одной из учетных записей пользователей, я вижу только их данные. Это идеально.
Идея состоит в том, что я использую учетные данные, с которыми пользователь вошел на сайт, передаю эти данные в Crystal, а затем получаю данные только для этого пользователя. Но почему-то кажется, что информация, которую я передаю в отчет для учетных данных пользователя, игнорируется.
Вот тело.
<body>
<form id="form1" runat="server">
<div id="wrapper" style="width: 110%">
<div id="header">
<UC:TopNav ID="TopNav" runat="server" />
</div>
<div class="hrDiv">
</div>
<div id="container">
<CR:CrystalReportViewer ID="CrystalReportViewer1" runat="server" AutoDataBind="True"
Height="815px" ReportSourceID="CrystalReportSource1" Width="1023px" EnableDatabaseLogonPrompt="True"
EnableParameterPrompt="False" HasToggleGroupTreeButton="False" PrintMode="PDF" />
<CR:CrystalReportSource ID="CrystalReportSource1" runat="server">
<Report FileName="OrdersBooked.rpt">
</Report>
</CR:CrystalReportSource>
</div>
<div class="hrDiv">
</div>
<UC:Footer ID="Footer" runat="server" />
</div>
</form>
</body>
А вот код VB.
Imports CrystalDecisions.CrystalReports.Engine
Imports CrystalDecisions.Shared
Imports CrystalDecisions.Web
Imports System.web.Security
Partial Class Orders_Default
Inherits System.Web.UI.Page
Protected Sub Page_Init(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Init
Dim fname As String
fname = Request.PhysicalApplicationPath & "orders\OrdersBooked.rpt"
Dim user As MembershipUser = Membership.GetUser()
Dim un As String = user.UserName
Dim pw As String = user.GetPassword("Tom")
Dim sn As String = ConfigurationManager.AppSettings("SLXServerName")
Dim dn As String = ConfigurationManager.AppSettings("SLXDatabaseName")
' Load the report
Me.CrystalReportSource1.ReportDocument.Load(fname)
Dim myReport As New ReportDocument
myReport.Load(fname)
Dim conninfo As New ConnectionInfo
With conninfo
.ServerName = sn
.DatabaseName = dn
.UserID = un
.Password = pw
End With
myReport.DataSourceConnections.Clear()
CrystalReportViewer1.ReportSource = myReport
CrystalReportViewer1.PrintMode = CrystalDecisions.Web.PrintMode.Pdf
SetDBLogonForReport(conninfo, myReport)
End Sub
Private Sub SetDBLogonForReport(ByVal myConnectionInfo As ConnectionInfo, ByVal myReportDocument As ReportDocument)
Dim myTables As Tables = myReportDocument.Database.Tables
For Each myTable As CrystalDecisions.CrystalReports.Engine.Table In myTables
Dim MyTableLogonInfo As TableLogOnInfo = myTable.LogOnInfo
MyTableLogonInfo.ConnectionInfo = myConnectionInfo
myTable.ApplyLogOnInfo(MyTableLogonInfo)
Next
End Sub
End Class
Я пробовал отлаживать VB, и я вижу, что имя пользователя и пароль верны и, похоже, передаются в Crystal, но это просто не работает.
Любые идеи очень приветствуются.