Articolo "Utilizzare il Web Service dei SQL Reporting Services da una ...

lunedì 13 dicembre 2004 - 12.53

hofinito Profilo | Newbie

Salve a tutti!
Ho cercato di eseguire l'esercizio dell'articolo che ho citato nel titolo, ma non riesco comunque ad accedere al report che ho creato perchè non riesco ad impostare un path corretto sulla locazione del report (il report si trova su un report server remoto). Sapete aiutarmi o darmi uqalche altro suggerimento per accedere ad un report remoto via pagina ASP.NET?
Grazie a tutti....
Roberto

hofinito Profilo | Newbie

Ti ringrazio, ma questa operazione l'avevo già fatta, e credo che funzioni anche.
Il vero problema è quando l'esempio descrive il metodo "Render".
In questo metodo si fa rifermento al path assoluto in cui si trova il report da richiamare, ma poichè il report si trova sul server, ed al server accedo solo tramite una directory "virtuale" (quella di http://NomeServer/ReportServer/), che path devo dare al metodo Render? Spero di essere stato più esplicito, e scusate la mia inesperienza con Reporting Services e ASP.NET!

hofinito Profilo | Newbie

Ora forse mi è più chiaro...
Sono riuscito a linkarmi al report, ma non è così semplice come si descrive!
Bisogna inserire un path del tipo: "/Users Folders/NomeServer Administrator/My Reports/NomeReport"
Non è però così intuitivo come l'esempio vorrebbe far credere...
Ora riesco ad accedere al report, ma mi da un altro errore relativo ai parametri del report.
Cercherò di smanettarci un pò su! Grazie comunque per la disponibilità.

hofinito Profilo | Newbie

Sempre in relazione a questo articolo, Ho eseguito le linee guida fino al Listato n°3 e mi permette di visualizzare i report in tutti i formati, eccetto l'html.
Gli esempi del listato 4 li ho eseguiti e riesco a visualizzare le pagine, ma il Listato 5 (che dovrebbe permettermi di visualizzzare le immagini) non è ben spiegato: quali parti di codice devo inserire nel "Page_Load" e quali nel codice? Le spiagazioni sono poco chiare...

hofinito Profilo | Newbie

Ora ho un'altro problema:
ho modificato lo script rendendolo parametrico, così da poter dare da input il formato in cui voglio visualizzare il report. Quando richiedo il pdf non ho problemi; per tutti gli altri formati, invece, mi compare DUE VOLTE la maschera di windows che mi richiede se voglio aprire, salvare, annullare, ecc. e non capisco il motivo. Qualcuno può aiutarmi?

hofinito Profilo | Newbie

Qua i problemi non finiscono mai!
Ora dice che quando carico una pagina in formato html il parametro SessionID non è definito...

hofinito Profilo | Newbie

No: volevo dire: StreamID. Ancora non riesco a visualizzare un'immagina nel report...

hofinito Profilo | Newbie

Forse ho risolto parzialmente il problema della doppia richiesta "Open, Save, ecc..."
Ad eccezione del formato pdf, tutti gli altri formati richiedono la definizione:
Response.ContentType = "application/vnd.ms-excel"
(nel caso di excell e formato csv.)
quale dovrebbe essere la dicitura corretta per tutti gli altri formati diusponibili?

hofinito Profilo | Newbie

Ora inserisco il codice.
Prima spiego meglio: ho creato una semplice pagina ASP.NET con un pulsante che avvia il tutto.
Text Boxes ricevono il nome del file e l'estensione.
Ecco la parte del codice modificata rispetto alla parte generata dall'autocomposizione:

using...
using WebApplicationProva2.ReportingServices1;

namespace WebApplicationProva2
{
public class WebForm1 : System.Web.UI.Page
{
protected System.Web.UI.WebControls.TextBox TextBox1;
protected System.Web.UI.WebControls.Label Label1;
protected System.Web.UI.WebControls.DropDownList DropDownList1;
protected System.Web.UI.WebControls.Label Label3;
protected System.Web.UI.WebControls.DropDownList DropDownList2;
protected System.Web.UI.WebControls.Label Label4;
protected System.Web.UI.WebControls.Button Button1;

private void Page_Load(object sender, System.EventArgs e)
{
// Put user code to initialize the page here
string path = Request.FilePath;
string devInfo = "<DeviceInfo><Toolbar>false </Toolbar><StreamRoot>"+path+"?SessionID={SessionId}
&StreamId=</StreamRoot></DeviceInfo>";
string devImgInfo = "<DeviceInfo><OutputFormat>JPEG</OutputFormat></DeviceInfo>";
}

private void Button1_Click(object sender, System.EventArgs e)
{
//parametri prelevati da input
string username = "XYZ";
string accesspwd = "JKL";
string nameReport = DropDownList1.SelectedItem.Text;
string filetype = DropDownList2.SelectedItem.Text;
string exten = DropDownList2.SelectedItem.Value;
//parametri ausiliari
int resultato = exten.CompareTo("html");
//imposto il path del report (incluso il report)
string absolutereportPath = "...";
string reportPath = absolutereportPath + nameReport;
//Creo la classi Proxy
ReportingService rs = new ReportingService();
//Imposto le credenziali: imposto username è password
rs.Credentials = new System.Net.NetworkCredential(username,accesspwd);
//Imposto a null le DataSourceCredentials
DataSourceCredentials[] dsc = null;
//Imposto i parametri
ParameterValue[] parameters = new ParameterValue [1];
parameters[0] = new ParameterValue();
parameters[0].Name = "Nome";
parameters[0].Value = TextBox1.Text;
//Imposto la devInfo
string devInfo
= "<DeviceInfo><HTMLFragment>false</HTMLFragment><Toolbar>false /Toolbar></DeviceInfo>";
string devImgInfo = "<DeviceInfo><OutputFormat>JPEG</OutputFormat></DeviceInfo>";
//Imposto i parametri di output
ParameterValue[] pv;
Warning[] w;
string outEnconding;
string outMime;
string[] streamIDs = null;

byte[] result = rs.Render(reportPath, filetype, null, devInfo, parameters, dsc, null, out outEnconding,
out outMime, out pv, out w, out streamIDs);
//caso html:
if (resultato == 0)
{
//definisco la session per il report
rs.SessionHeaderValue = new SessionHeader();
rs.SessionHeaderValue.SessionId = Request.QueryString["SessionId"];
rs.SessionHeaderValue.IsNewExecution = false ;
byte[] buffer = rs.RenderStream(reportPath, "HTML4.0", Request.QueryString["StreamId"], null,
devImgInfo, parameters, out outEnconding, out outMime);
//infine scrivo sullo stream della pagina
Response.Clear();
Response.ContentType = "image/jpeg";
Response.Write(new System.Text.UTF7Encoding().GetString(result).Replace("{SessionId}",
rs.SessionHeaderValue.SessionId));
}
else
{
//cancello gli Headers e i Content Types
Response.ClearContent();
Response.ClearHeaders();
if (exten.CompareTo("pdf") == 0)
Response.AppendHeader("content-disposition",string.Format("Attachment; filename={0}.

hofinito Profilo | Newbie

E poi, come faccio ad avere aiuto su come scegliere i "ContentType"?
Perchè le guide all'utilizzo sono così ostili?

hofinito Profilo | Newbie

Non per essere scortese, ma prove ne ho fatta tante, e solo dopo averle fatte ho chiesto informazioni...
Il problema è che non riconosce il parametro StreamID anche se "inserisco tutto nel page_load"

patmdg Profilo | Newbie

ciao io sono nuovo del forum e nuovo per quanto riguarda l'utilizzo di sql reporting service.
ho installato SQL Developer il sp3a e SQL REp SERV ma con Visual Studio .NET non riesco a vedere nessun bottone, nela barra degli strumenti, che faccia riferimento a sql report service.
qualcuno puo darmi dei suggerimenti al fine di poter usare sql reporting service in un progetto per creare dei report.
grazie

hofinito Profilo | Newbie

L'essore lo da quando provo a scrivere nel SessionID, anche perchè è l'unica volta in cui mi occorre lo StreaID.

hofinito Profilo | Newbie

L'eerora la fa quando cerco di scrivere il "byte[] buffer".

patmdg Profilo | Newbie

grazie coach

hofinito Profilo | Newbie

Forse dopo tanto tempo sono riuscito a risolvere il mio problema: cambiando il tipo di immagine del report (anzichè definirla "Embended" è meglio archiviarla in "Web" e richiamarla opportunamente.
Ora però c'è un'altro problema: quando richiamo un report con un'immagine (dopo essermi già autenticato da form, e avendo archiviato già le credenziali del report) il Report Server mi chiede nuovamente UserID e Password. Sapete come fare ad evitare questo?

DAVES Profilo | Newbie

Ciao Marco,

ho eseguito il codice che hai riportato nell'articolo in C# ed non ho avuto problemi ad esportare in pdf i report che avevo distribuito sul report server. Se invece richiamo la stessa funzione render da un'applicazione visual basic ho problemi con il passaggio dei parametri al report:

inserisco il codice -->>

Dim rs As New RDI.ReportingServices.ReportingService


rs.Credentials = System.Net.CredentialCache.DefaultCredentials

Dim dsc() As RDI.ReportingServices.DataSourceCredentials



Dim hi, sht As String

Dim Parameters(4) As RDI.ReportingServices.ParameterValue

Parameters(0) = New RDI.ReportingServices.ParameterValue
Parameters(0).Name = "cli"
Parameters(0).Value = "4"

Parameters(1) = New RDI.ReportingServices.ParameterValue
Parameters(1).Name = "anno"
Parameters(1).Value = "2006"

Parameters(2) = New RDI.ReportingServices.ParameterValue
Parameters(2).Name = "inizio"
Parameters(2).Value = "6"

Parameters(3) = New RDI.ReportingServices.ParameterValue
Parameters(3).Name = "fine"
Parameters(3).Value = "7"

Dim reportPath As String = "/RDI/Dettaglio_Lavori"

'imposto i parametri di output
Dim pv() As RDI.ReportingServices.ParameterValue
Dim w() As RDI.ReportingServices.Warning
Dim outEnconding, outMime As String

Dim streamIDs() As String
Dim result() As Byte = rs.Render(reportPath, "PDF", hi, "<DeviceInfo><HTMLFragment>false</HTMLFragment><Toolbar>false</Toolbar></DeviceInfo>", Parameters, dsc, sht, outEnconding, outMime, pv, w, streamIDs)


Response.ClearContent()
Response.ClearHeaders()

Response.ContentType = "application/pdf"
'Infine scriviamo l'arraydi byte, ripuliamo lo stream e chiudiamo
Response.BinaryWrite(result)

Response.Flush()
Response.End()


Ho il seguente errore : Dove Sbaglio??'?



Errore server nell'applicazione '/RDI'.
--------------------------------------------------------------------------------

System.Web.Services.Protocols.SoapException: Il valore del parametro "Parameters" non è valido. Per informazioni sui valori validi, vedere la documentazione. ---> Microsoft.ReportingServices.Diagnostics.Utilities.InvalidParameterException: Il valore del parametro "Parameters" non è valido. Per informazioni sui valori validi, vedere la documentazione. at Microsoft.ReportingServices.WebServer.ReportingService.CheckParameterArray(ParameterValueOrFieldReference[] parameters, String parameterName) at Microsoft.ReportingServices.WebServer.ReportingService.Render(String Report, String Format, String HistoryID, String DeviceInfo, ParameterValue[] Parameters, DataSourceCredentials[] Credentials, String ShowHideToggle, Byte[]& Result, String& Encoding, String& MimeType, ParameterValue[]& ParametersUsed, Warning[]& Warnings, String[]& StreamIds) --- Fine dell'analisi dello stack dell'eccezione interna --- at Microsoft.ReportingServices.WebServer.ReportingService.Render(String Report, String Format, String HistoryID, String DeviceInfo, ParameterValue[] Parameters, DataSourceCredentials[] Credentials, String ShowHideToggle, Byte[]& Result, String& Encoding, String& MimeType, ParameterValue[]& ParametersUsed, Warning[]& Warnings, String[]& StreamIds)


Inoltre ti volevo chiedere se esiste un manuale su reporting services con riferimenti anche alle applicazioni ASP.NET

Grazie

Saluti
Davide Amato
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2023
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5